From 92af4eeb9c1b157c9368b7004bf0caa03abe1e32 Mon Sep 17 00:00:00 2001 From: dschlueter Date: Tue, 17 Feb 2026 17:39:24 +0100 Subject: [PATCH] Add BEDIENUNGSANLEITUNG.md and update README.md Co-Authored-By: Claude Sonnet 4.5 --- BEDIENUNGSANLEITUNG.md | 270 +++++++++++++++++++++++++++++++++++++++++ README.md | 44 ++++++- 2 files changed, 313 insertions(+), 1 deletion(-) create mode 100644 BEDIENUNGSANLEITUNG.md diff --git a/BEDIENUNGSANLEITUNG.md b/BEDIENUNGSANLEITUNG.md new file mode 100644 index 0000000..ee0d677 --- /dev/null +++ b/BEDIENUNGSANLEITUNG.md @@ -0,0 +1,270 @@ +# Bedienungsanleitung – Musiksammlung + +## Inhaltsverzeichnis + +1. [Voraussetzungen](#1-voraussetzungen) +2. [Installation](#2-installation) +3. [Workflow-Überblick](#3-workflow-überblick) +4. [Schritt 1: CDs rippen](#4-schritt-1-cds-rippen) +5. [Schritt 2: Album-Metadaten ermitteln](#5-schritt-2-album-metadaten-ermitteln) +6. [Schritt 3: Dateien organisieren und taggen](#6-schritt-3-dateien-organisieren-und-taggen) +7. [Komplett-Pipeline](#7-komplett-pipeline) +8. [Tipps und Hinweise](#8-tipps-und-hinweise) + +--- + +## 1. Voraussetzungen + +| Programm | Zweck | Pflicht | +|----------|-------|---------| +| Python 3.11+ | Laufzeitumgebung | ja | +| `abcde` | CD-Ripping | ja | +| `cdparanoia` | CD-Lesefehler korrigieren (von abcde genutzt) | ja | +| `flac` / `lame` / `opusenc` / `ffmpeg` | Encoder je nach Format | je nach Format | +| `tesseract` | OCR für Coverbilder | nein (optional) | +| Ollama / OpenAI-API | LLM für Tracklisten-Extraktion | nein (optional) | + +Installation der externen Tools (Debian/Ubuntu): + +```bash +sudo apt install abcde cdparanoia flac lame opus-tools ffmpeg tesseract-ocr +``` + +--- + +## 2. Installation + +```bash +git clone +cd Musiksammlung +pip install -e ".[dev]" +``` + +Danach steht der Befehl `musiksammlung` zur Verfügung: + +```bash +musiksammlung --help +``` + +--- + +## 3. Workflow-Überblick + +``` +CD einlegen + │ + ▼ +musiksammlung rip ← CDs rippen, CDDB-Lookup, Dateien benennen + │ + ▼ +temp/Album/CD1/ + 01_-_Titel_-_Künstler.flac + 02_-_Titel_-_Künstler.flac + │ + ├─ CDDB hat alles erkannt? + │ ja → musiksammlung apply + │ nein → musiksammlung scan (Coverbild → album.json) + │ + ▼ +musiksammlung apply ← Dateien in Jellyfin-Struktur, Tags, Cover, Playlist + │ + ▼ +~/Musik/Künstler/Album/ + 01_-_Titel.flac + cover.jpg + playlist.m3u +``` + +--- + +## 4. Schritt 1: CDs rippen + +### Grundbefehl + +```bash +musiksammlung rip +``` + +Das Programm fragt interaktiv nach Album-Name und CD-Nummer, startet `abcde` und benennt die Tracks automatisch. + +### Wichtige Optionen + +| Option | Beschreibung | Empfehlung | +|--------|-------------|------------| +| `-f flac` | Audio-Format | `flac` für Archiv, `mp3` für Kompatibilität | +| `-q high` | Qualität (low/medium/high) | `high` für Archiv | +| `-j 0` | Alle CPU-Kerne für paralleles Encoding | empfohlen | +| `-P` | Pipes-Modus (kein WAV-Zwischenspeicher) | empfohlen bei wenig Speicher | +| `-o /pfad` | Ausgabe-Verzeichnis | Standard: `./temp` | +| `-d /dev/sr0` | CD-Laufwerk | falls nicht `/dev/cdrom` | +| `--no-cddb` | CDDB-Lookup deaktivieren | bei Offline-Betrieb | + +### Beispiel: Schnelles FLAC-Ripping mit allen Kernen + +```bash +musiksammlung rip -f flac -q high -j 0 -P -o ~/rip +``` + +### Interaktiver Ablauf + +``` +--- Album 1 --- +Enter album name (or Enter for CDDB/default 'Album1'): Beethoven Sinfonien + + Album: Beethoven Sinfonien + CD Drive: /dev/cdrom + CD number for this CD [1]: 1 + Ripping CD to: Beethoven_Sinfonien/CD1 + (Ripping in progress, please wait...) + ✓ CD 1 ripped successfully + Detected: Karajan + Tracks: 4 + + Next CD for this album? (y/n): y + CD number for this CD [1]: 2 + ... + +Next album? (y/n): n +``` + +### Ergebnis-Verzeichnis + +``` +~/rip/ + Beethoven_Sinfonien/ + CD1/ + 01_-_Sinfonie_Nr.5_c-Moll_op.67_Allegro_con_brio_-_Karajan.flac + 02_-_Andante_con_moto_-_Karajan.flac + ... + CD2/ + ... +``` + +**Dateinamen-Schema:** +``` +_-__-_. +``` +Leerzeichen werden durch Unterstriche ersetzt. + +--- + +## 5. Schritt 2: Album-Metadaten ermitteln + +Dieser Schritt ist nur nötig, wenn CDDB keine vollständigen Daten geliefert hat. + +### Variante A: Textdatei (z.B. von Perplexity/Wikipedia kopiert) + +```bash +musiksammlung scan --from-text trackliste.txt -o album.json +``` + +### Variante B: Coverbild per OCR + LLM + +```bash +musiksammlung scan back.jpg -o album.json --lang deu+eng +``` + +### Variante C: Vision-LLM (Bild direkt an LLM) + +```bash +musiksammlung scan back.jpg --vision --vision-model qwen3-vl:latest -o album.json +``` + +### album.json prüfen und bearbeiten + +```json +{ + "artist": "Karajan", + "album": "Beethoven Sinfonien", + "year": 1963, + "discs": [ + { + "disc_number": 1, + "tracks": [ + {"track_number": 1, "title": "Allegro con brio", "artist": "Karajan"} + ] + } + ] +} +``` + +Die JSON-Datei kann vor dem nächsten Schritt manuell korrigiert werden. + +--- + +## 6. Schritt 3: Dateien organisieren und taggen + +```bash +musiksammlung apply temp/Beethoven_Sinfonien/CD1 album.json ~/Musik +``` + +Das Programm: +- Kopiert Audiodateien in die Jellyfin-Struktur +- Setzt ID3/FLAC-Tags (Titel, Künstler, Album, Jahr, Track-Nummer) +- Kopiert Cover-Bilder (`cover.jpg`, `back.jpg`) +- Erzeugt eine M3U-Playlist + +### Optionen + +| Option | Beschreibung | +|--------|-------------| +| `--front cover.jpg` | Front-Cover-Bild | +| `--back back.jpg` | Rückseiten-Bild | +| `--dry-run` | Nur anzeigen, nichts ändern | + +### Ergebnis + +``` +~/Musik/ + Karajan/ + Beethoven_Sinfonien/ + CD1/ + 01_-_Allegro_con_brio.flac + ... + cover.jpg + back.jpg + Beethoven_Sinfonien.m3u +``` + +--- + +## 7. Komplett-Pipeline + +Für einfache Fälle (alles in einem Schritt): + +```bash +musiksammlung process temp/Album/CD1 ~/Musik --back back.jpg +``` + +--- + +## 8. Tipps und Hinweise + +**CDDB-Lookup schlägt fehl?** +- Internetverbindung prüfen +- `--no-cddb` verwenden und Metadaten manuell per `scan` ermitteln + +**Falsches CDDB-Ergebnis?** +- Tracks sind trotzdem korrekt gerippt +- `musiksammlung scan` mit Coverbild oder Textdatei aufrufen +- `album.json` manuell korrigieren +- `musiksammlung apply` ausführen + +**Sonderzeichen in Dateinamen?** +- Umlaute (ä, ö, ü) bleiben erhalten +- Problematische Zeichen (`/ : * ? " < > |`) werden entfernt +- Leerzeichen werden durch `_` ersetzt + +**Mehrere CDs eines Albums (Multi-Disc)?** +- Bei der Abfrage "Next CD for this album?" mit `y` antworten +- Jede CD erhält ein eigenes Unterverzeichnis `CD1`, `CD2`, ... + +**Unterstützte Audio-Formate:** + +| Format | Qualität high | Verwendung | +|--------|--------------|------------| +| `flac` | Verlustfrei | Archiv | +| `mp3` | VBR -V0 | maximale Kompatibilität | +| `opus` | 192 kbit/s | modern, effizient | +| `aac` | Qualität 4 | Apple-Geräte | +| `wav` | Verlustfrei | maximale Kompatibilität, groß | diff --git a/README.md b/README.md index 9b918af..2478331 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,45 @@ # Musiksammlung -Erstellt aus CDs Musik für Jellyfin \ No newline at end of file +CLI-Tool zum Digitalisieren von CD-Sammlungen für Jellyfin. + +## Überblick + +**Musiksammlung** automatisiert die Digitalisierung physischer CDs: + +1. CDs rippen (via `abcde`, CDDB-Lookup) +2. Coverbilder per OCR oder Vision-LLM analysieren +3. Tracklisten per LLM extrahieren und als JSON speichern +4. Audiodateien umbenennen, taggen und in Jellyfin-Struktur ablegen +5. M3U-Playlisten erzeugen + +## Voraussetzungen + +- Python 3.11+ +- `abcde` (CD-Ripping) +- `tesseract` (OCR, optional) +- Ollama oder OpenAI-kompatibles LLM (optional) + +## Installation + +```bash +pip install -e ".[dev]" +``` + +## Schnellstart + +```bash +# CDs rippen +musiksammlung rip -j 0 -P + +# Coverbild scannen → album.json erzeugen +musiksammlung scan back.jpg -o album.json + +# Audiodateien organisieren und taggen +musiksammlung apply temp/Album1/CD1 album.json ~/Musik +``` + +Ausführliche Anleitung: [BEDIENUNGSANLEITUNG.md](BEDIENUNGSANLEITUNG.md) + +## Lizenz + +Siehe [LICENSE](LICENSE).