2026-02-17 17:39:24 +01:00
# Bedienungsanleitung – Musiksammlung
2026-02-17 17:47:41 +01:00
> **ACHTUNG! Das Programm ist nicht fertig!**
2026-02-17 17:39:24 +01:00
## 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 )
2026-02-18 00:45:49 +01:00
7. [Tags und Cover prüfen ](#7-tags-und-cover-prüfen )
8. [Komplett-Pipeline ](#8-komplett-pipeline )
9. [Tipps und Hinweise ](#9-tipps-und-hinweise )
2026-02-17 17:39:24 +01:00
---
## 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 <repo-url>
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
2026-02-18 06:16:18 +01:00
│ (optional: EAN-Abfrage → MusicBrainz)
2026-02-17 17:39:24 +01:00
▼
2026-02-18 00:26:09 +01:00
temp/Album/
CD1/
track01.flac ← kein CDDB-Treffer
track02.flac
2026-02-18 06:16:18 +01:00
album.json ← automatisch erzeugt (CDDB oder MusicBrainz)
│
├─ album.json bereits vorhanden (CDDB/MusicBrainz)?
│ ja → direkt weiter mit musiksammlung apply
2026-02-17 17:39:24 +01:00
│
2026-02-18 06:16:18 +01:00
└─ nein → album.json manuell erzeugen (eine Variante wählen):
A: musiksammlung scan --from-text trackliste.txt
B: musiksammlung scan back.jpg
C: musiksammlung scan back.jpg --vision
D: musiksammlung scan --barcode 0602557360561
→ album.json prüfen/korrigieren
→ musiksammlung apply
2026-02-17 17:39:24 +01:00
│
▼
2026-02-17 23:52:17 +01:00
musiksammlung apply ← Umbenennen, Tags, Cover, Playlist
2026-02-17 17:39:24 +01:00
│
2026-02-17 23:52:17 +01:00
├─ --in-place (Standard): Dateien bleiben im Quellverzeichnis
2026-02-18 00:26:09 +01:00
│ temp/Album/CD1/01_-_Titel_-_Kuenstler.flac
2026-02-17 23:52:17 +01:00
│
└─ mit output_dir: Dateien in Jellyfin-Struktur verschieben
2026-02-18 00:26:09 +01:00
~/Musik/Kuenstler/Album/CD1/01_-_Titel_-_Kuenstler.flac
2026-02-17 17:39:24 +01:00
```
---
## 4. Schritt 1: CDs rippen
### Grundbefehl
```bash
musiksammlung rip
```
2026-02-17 23:52:17 +01:00
Das Programm fragt interaktiv nach Album-Name und CD-Nummer, startet `abcde` und benennt die Tracks automatisch (wenn CDDB Daten liefert).
2026-02-17 17:39:24 +01:00
### Wichtige Optionen
| Option | Beschreibung | Empfehlung |
|--------|-------------|------------|
| `-f flac` | Audio-Format | `flac` für Archiv, `mp3` für Kompatibilität |
2026-02-17 23:52:17 +01:00
| `-q high` | Qualität (low/medium/high), Standard: `high` | `high` für Archiv |
2026-02-17 17:39:24 +01:00
| `-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 ---
2026-02-17 23:52:17 +01:00
Album name (Enter = CDDB name / default 'Album1'): Beethoven Sinfonien
2026-02-18 06:16:18 +01:00
EAN/Barcode für MusicBrainz (Enter = überspringen): 028943753227
MusicBrainz-Suche nach Barcode 028943753227 ...
✓ Herbert von Karajan – Beethoven: 9 Symphonies (1963, 50 Tracks)
2026-02-17 17:39:24 +01:00
2026-02-17 23:52:17 +01:00
Album: Beethoven Sinfonien
2026-02-17 17:39:24 +01:00
CD Drive: /dev/cdrom
2026-02-17 23:52:17 +01:00
CD number [1]: 1
Ripping to: temp/Beethoven_Sinfonien/CD1
--------------------------------------------------
Track 1/4 Allegro con brio
[████████████████░░░░░░░░░░░░░░] 54.3% 18.2 MB
...
✓ Done — 4 tracks
1. Allegro con brio [Karajan]
2. Andante con moto [Karajan]
2026-02-17 17:39:24 +01:00
Next CD for this album? (y/n): y
2026-02-17 23:52:17 +01:00
CD number [1]: 2
2026-02-17 17:39:24 +01:00
...
Next album? (y/n): n
```
### Ergebnis-Verzeichnis
2026-02-17 23:52:17 +01:00
**Wenn CDDB Daten liefert:**
2026-02-17 17:39:24 +01:00
```
~/rip/
Beethoven_Sinfonien/
CD1/
2026-02-18 00:26:09 +01:00
01_-_Allegro_con_brio_-_Karajan.flac
02_-_Andante_con_moto_-_Karajan.flac
2026-02-17 17:39:24 +01:00
...
2026-02-18 00:26:09 +01:00
album.json ← automatisch gespeichert
2026-02-17 17:39:24 +01:00
```
2026-02-18 00:26:09 +01:00
→ Direkt weiter mit `musiksammlung apply ~/rip/Beethoven_Sinfonien album.json`
2026-02-17 17:39:24 +01:00
2026-02-17 23:52:17 +01:00
**Wenn kein CDDB-Treffer:**
2026-02-17 17:39:24 +01:00
```
2026-02-17 23:52:17 +01:00
~/rip/
Beethoven_Sinfonien/
CD1/
track01.flac
track02.flac
...
2026-02-17 17:39:24 +01:00
```
2026-02-17 23:52:17 +01:00
→ In diesem Fall weiter mit Schritt 2 (Metadaten ermitteln).
2026-02-17 17:39:24 +01:00
---
## 5. Schritt 2: Album-Metadaten ermitteln
2026-02-17 23:52:17 +01:00
Dieser Schritt ist nur nötig, wenn CDDB keine vollständigen Daten geliefert hat (Dateien heißen noch `track01.flac` etc.).
2026-02-17 17:39:24 +01:00
2026-02-17 23:52:17 +01:00
### Variante A: Textdatei (z.B. von Wikipedia/Perplexity kopiert)
2026-02-17 17:39:24 +01:00
```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
```
2026-02-17 23:52:17 +01:00
Standard-Modell: `gemma3:12b` (via Ollama). Anderes Modell:
```bash
musiksammlung scan back.jpg -o album.json --model llama3.3:latest
```
### Variante C: Vision-LLM (Bild direkt an LLM, empfohlen)
Besser als OCR bei komplexen Layouts (mehrere Spalten, schwierige Schriften):
2026-02-17 17:39:24 +01:00
```bash
2026-02-18 06:16:18 +01:00
musiksammlung scan back.jpg --vision -o album.json
2026-02-17 17:39:24 +01:00
```
2026-02-18 06:16:18 +01:00
Standard-Modell: `qwen3-vl:235b-cloud` (via Ollama). Anderes Modell:
2026-02-17 23:52:17 +01:00
```bash
2026-02-18 06:16:18 +01:00
musiksammlung scan back.jpg --vision --vision-model qwen3-vl:7b -o album.json
2026-02-17 23:52:17 +01:00
```
2026-02-18 06:16:18 +01:00
### Variante D: EAN/Barcode → MusicBrainz (schnellste Methode)
Wenn die EAN-13- oder UPC-12-Nummer der CD bekannt ist (aufgedruckt auf der Hülle), kann das Programm die Metadaten direkt aus der [MusicBrainz ](https://musicbrainz.org )-Datenbank laden — ohne Bild, ohne OCR, ohne lokales LLM:
```bash
musiksammlung scan --barcode 0602557360561 -o album.json
```
Die EAN lässt sich auch mit einem Barcode-Scanner oder einer Smartphone-App ablesen.
MusicBrainz liefert bei einem Treffer: Interpret, Albumtitel, Erscheinungsjahr und vollständige Trackliste. Kein API-Schlüssel erforderlich.
Alternativ kann die EAN auch während des interaktiven Rippens eingegeben werden (Abfrage „EAN/Barcode für MusicBrainz"). Das Ergebnis wird dann direkt als `album.json` gespeichert.
2026-02-17 17:39:24 +01:00
### album.json prüfen und bearbeiten
2026-02-17 23:52:17 +01:00
Das Programm prüft automatisch, ob die Anzahl der erkannten Tracks mit den gerippten Dateien übereinstimmt. Bei Abweichungen erscheint eine Fehlermeldung:
```
FEHLER: Track-Diskrepanz zwischen gerippten Dateien und album.json:
[OK] Disc 1: 25 Datei(en), 25 JSON-Track(s)
[!!] Disc 2: 23 Datei(en), 20 JSON-Track(s)
→ 3 Track(s) fehlen im JSON (Tracks 21– 23 eintragen)
Bitte album.json korrigieren und erneut aufrufen.
```
In diesem Fall `album.json` manuell ergänzen, dann `apply` erneut aufrufen.
2026-02-17 17:39:24 +01:00
```json
{
"artist": "Karajan",
"album": "Beethoven Sinfonien",
"year": 1963,
"discs": [
{
"disc_number": 1,
"tracks": [
2026-02-18 00:26:09 +01:00
{"track_number": 1, "title": "Allegro con brio"},
{"track_number": 2, "title": "Andante con moto"}
2026-02-17 17:39:24 +01:00
]
}
]
}
```
2026-02-18 00:26:09 +01:00
Das Feld `"artist"` auf Track-Ebene ist **optional ** . Wird es gesetzt, überschreibt es den Album-Künstler für diesen Track — sinnvoll bei Samplern oder Klassik mit verschiedenen Solisten:
```json
{"track_number": 3, "title": "Klavierkonzert Nr. 5", "artist": "Brendel"}`
```
2026-02-17 17:39:24 +01:00
---
## 6. Schritt 3: Dateien organisieren und taggen
2026-02-17 23:52:17 +01:00
### In-place (Dateien bleiben im Quellverzeichnis)
2026-02-17 17:39:24 +01:00
```bash
2026-02-17 23:52:17 +01:00
musiksammlung apply ~/rip/Beethoven_Sinfonien album.json
```
Oder explizit:
```bash
musiksammlung apply ~/rip/Beethoven_Sinfonien album.json --in-place
2026-02-17 17:39:24 +01:00
```
Das Programm:
2026-02-18 00:26:09 +01:00
- Benennt Audiodateien um (`track01.flac` → `01_-_Allegro_con_brio_-_Karajan.flac` )
2026-02-17 23:52:17 +01:00
- Setzt ID3/FLAC-Tags (Titel, Künstler, Album, Jahr, Track-Nummer, Disc-Nummer)
- Kopiert Cover-Bilder (`back.jpg` )
2026-02-17 17:39:24 +01:00
- Erzeugt eine M3U-Playlist
2026-02-18 06:53:24 +01:00
- **Benennt das Album-Verzeichnis automatisch um** (wenn `input_dir` ein CD-Unterverzeichnis ist, z.B. `CD1` )
2026-02-17 17:39:24 +01:00
2026-02-17 23:52:17 +01:00
Ergebnis:
```
2026-02-18 06:53:24 +01:00
~/rip/Beethoven_Sinfonien (2024)/ ← automatisch umbenannt
2026-02-17 23:52:17 +01:00
CD1/
2026-02-18 00:26:09 +01:00
01_-_Allegro_con_brio_-_Karajan.flac
02_-_Andante_con_moto_-_Karajan.flac
2026-02-17 23:52:17 +01:00
...
CD2/
...
back.jpg
Beethoven_Sinfonien.m3u
```
2026-02-17 17:39:24 +01:00
2026-02-18 06:53:24 +01:00
> **Hinweis zur Auto-Umbenennung:** Das Album-Verzeichnis wird automatisch umbenannt, wenn `input_dir` ein CD-Unterverzeichnis (`CD1`, `CD2` ...) ist. Wird stattdessen das Album-Wurzelverzeichnis übergeben, gibt das Programm einen `mv`-Hinweis aus, aber benennt nicht selbst um.
2026-02-17 23:52:17 +01:00
### In Jellyfin-Verzeichnis verschieben
2026-02-17 17:39:24 +01:00
2026-02-17 23:52:17 +01:00
```bash
musiksammlung apply ~/rip/Beethoven_Sinfonien album.json ~/Musik \
--front front.jpg --back back.jpg
```
2026-02-17 17:39:24 +01:00
2026-02-17 23:52:17 +01:00
Ergebnis:
2026-02-17 17:39:24 +01:00
```
~/Musik/
Karajan/
2026-02-17 23:52:17 +01:00
Beethoven_Sinfonien_1963/
2026-02-17 17:39:24 +01:00
CD1/
2026-02-18 00:26:09 +01:00
01_-_Allegro_con_brio_-_Karajan.flac
2026-02-17 17:39:24 +01:00
...
back.jpg
Beethoven_Sinfonien.m3u
```
2026-02-17 23:52:17 +01:00
### Optionen
| Option | Beschreibung |
|--------|-------------|
| `--in-place` | Dateien im Quellverzeichnis umbenennen (kein output_dir nötig) |
| `--front cover.jpg` | Front-Cover-Bild |
| `--back back.jpg` | Rückseiten-Bild |
| `--dry-run` | Nur anzeigen, nichts ändern |
2026-02-18 00:45:49 +01:00
### Cover-Konvention
Im Album-Verzeichnis werden folgende Dateinamen erwartet:
| Datei | Zweck |
|-------|-------|
| `frontcover.jpg` oder `frontcover.png` | Front-Cover |
| `backcover.jpg` oder `backcover.png` | Rückseiten-Cover |
Symbolische Links auf diese Namen sind erlaubt. `apply` kopiert die mit `--front` /`--back` angegebenen Bilder automatisch als `frontcover.jpg` bzw. `backcover.jpg` ins Album-Verzeichnis und bettet das Frontcover anschließend in alle Audio-Dateien ein (skaliert auf max. 500 px).
Ist bereits ein `frontcover.*` vorhanden (z.B. bei erneutem `apply` ), wird es ohne `--front` -Option verwendet.
2026-02-17 23:52:17 +01:00
### Dateinamen-Schema
```
2026-02-18 00:26:09 +01:00
<Track-Nr>_-_<Titel>_-_<Künstler>.<Endung>
2026-02-17 23:52:17 +01:00
```
2026-02-18 00:26:09 +01:00
Beispiel: `01_-_Allegro_con_brio_-_Karajan.flac`
2026-02-17 23:52:17 +01:00
- Leerzeichen und Satzzeichen → `_`
- Mehrere `_` hintereinander → ein `_`
- Umlaute (ä, ö, ü, ß) bleiben erhalten
2026-02-18 00:26:09 +01:00
- Künstler pro Track: falls im `album.json` ein Track-`artist` gesetzt ist, wird dieser verwendet; sonst der Album-Künstler
2026-02-17 23:52:17 +01:00
2026-02-17 17:39:24 +01:00
---
2026-02-18 00:45:49 +01:00
## 7. Tags und Cover prüfen
Nach `apply` lässt sich der Zustand aller Dateien mit einem Befehl prüfen:
```bash
musiksammlung check ~/rip/Beethoven_Sinfonien
```
Ausgabe:
```
Verzeichnis: ~/rip/Beethoven_Sinfonien
frontcover: frontcover.jpg
backcover: backcover.jpg
CD1/
[♪] 01_-_Allegro_con_brio_-_Karajan.flac
Titel: Allegro con brio
Künstler: Karajan | AlbumArtist: Karajan
Album: Beethoven Sinfonien | Jahr: 1963
Track: 1/4 | Disc: 1
...
```
`[♪]` zeigt an, dass ein Cover eingebettet ist. `[ ]` bedeutet kein eingebettetes Cover.
---
## 8. Komplett-Pipeline
2026-02-17 17:39:24 +01:00
Für einfache Fälle (alles in einem Schritt):
```bash
musiksammlung process temp/Album/CD1 ~/Musik --back back.jpg
```
---
2026-02-18 00:45:49 +01:00
## 9. Tipps und Hinweise
2026-02-17 17:39:24 +01:00
2026-02-18 06:16:18 +01:00
**EAN/Barcode verfügbar? → Schnellster Weg**
- EAN-13 oder UPC-12 von der CD-Hülle ablesen (ggf. Barcode-Scanner-App nutzen)
- `musiksammlung scan --barcode 0602557360561 -o album.json`
- Oder beim `rip` -Befehl die EAN-Abfrage verwenden — dann wird `album.json` direkt gespeichert
- Kein Bild, kein OCR, kein lokales LLM notwendig
2026-02-17 17:39:24 +01:00
**CDDB-Lookup schlägt fehl?**
- Internetverbindung prüfen
2026-02-18 06:16:18 +01:00
- `--no-cddb` verwenden und Metadaten per `scan --barcode` oder `scan` (Bild) ermitteln
2026-02-17 17:39:24 +01:00
2026-02-17 23:52:17 +01:00
**Falsches oder kein CDDB-Ergebnis?**
- Tracks sind trotzdem korrekt gerippt (als `track01.flac` etc.)
2026-02-18 06:16:18 +01:00
- `musiksammlung scan --barcode EAN` verwenden (wenn EAN bekannt)
- Oder `musiksammlung scan` mit Coverbild oder Textdatei aufrufen
- `album.json` manuell korrigieren, dann `musiksammlung apply` ausführen
2026-02-17 17:39:24 +01:00
2026-02-17 23:52:17 +01:00
**Mehrspaltige Trackliste auf dem Backcover?**
- OCR erkennt mehrspaltige Layouts oft unvollständig
- Vision-LLM verwenden: `--vision --vision-model qwen3-vl:235b-cloud`
2026-02-17 17:39:24 +01:00
**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` , ...
2026-02-17 23:52:17 +01:00
- `apply` einmal mit dem Album-Verzeichnis aufrufen (nicht pro CD)
2026-02-17 17:39:24 +01:00
**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ß |