CDDB→album.json + LLM-Prompts mit Track-Künstler
ripper: nach erfolgreichem CDDB-Rip album.json im Album-Verzeichnis speichern (Artist, Titel, alle Discs mit Track-Künstlern) — Workflow- Lücke zwischen rip und apply geschlossen. llm_parser, vision_llm: Prompts erklären das optionale Track-artist- Feld; LLM setzt es nur wenn Track-Interpret vom Album-Künstler abweicht. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
255496bd1b
commit
bafea5f335
3 changed files with 40 additions and 8 deletions
|
|
@ -11,6 +11,9 @@ from typing import NamedTuple
|
|||
from pydantic import BaseModel
|
||||
|
||||
from musiksammlung.config import AudioFormat
|
||||
from musiksammlung.models import Album as AlbumModel
|
||||
from musiksammlung.models import Disc as DiscModel
|
||||
from musiksammlung.models import Track as TrackModel
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
|
@ -433,6 +436,7 @@ def interactive_rip(config: RipperConfig) -> None:
|
|||
album_name = f"Album{album_counter}"
|
||||
|
||||
disc_counter = 1
|
||||
all_discs: list[DiscModel] = []
|
||||
|
||||
while True:
|
||||
print(f"\n Album: {album_name}")
|
||||
|
|
@ -466,6 +470,17 @@ def interactive_rip(config: RipperConfig) -> None:
|
|||
print(f" ✓ Done — {len(tracks)} tracks")
|
||||
for t in tracks:
|
||||
print(f" {t.track_number:2d}. {t.title} [{t.artist}]")
|
||||
all_discs.append(DiscModel(
|
||||
disc_number=disc_num,
|
||||
tracks=[
|
||||
TrackModel(
|
||||
track_number=t.track_number,
|
||||
title=t.title,
|
||||
artist=t.artist,
|
||||
)
|
||||
for t in tracks
|
||||
],
|
||||
))
|
||||
else:
|
||||
print(" ✓ Done (no CDDB data)")
|
||||
|
||||
|
|
@ -483,6 +498,17 @@ def interactive_rip(config: RipperConfig) -> None:
|
|||
|
||||
disc_counter += 1
|
||||
|
||||
if all_discs:
|
||||
artist = all_discs[0].tracks[0].artist or album_name
|
||||
album_model = AlbumModel(artist=artist, album=album_name, discs=all_discs)
|
||||
album_root = config.output_dir / _sanitize_name(album_name)
|
||||
json_path = album_root / "album.json"
|
||||
json_path.write_text(
|
||||
album_model.model_dump_json(indent=2), encoding="utf-8"
|
||||
)
|
||||
print(f"\n album.json gespeichert: {json_path}")
|
||||
print(" → Weiter mit: musiksammlung apply <album-verzeichnis> album.json")
|
||||
|
||||
raw_album = input("\nNext album? (y/n): ")
|
||||
if _clean_input(raw_album).lower() != "y":
|
||||
break
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue