* Mo Aug 31 2026 x-odos - 0.5.31-1.fc43 - CD-Vorwaermer schickt Geraetekennung und Albumtitel an den Hub: die - Kuenstler-Zuordnung wird gegen die Diskografie geprueft statt geraten. - Bibliotheks-Vorwaermer gibt zu jedem Kuenstler ein Album aus der - eigenen Sammlung mit — verhindert Fehlgriffe wie "City" -> - "City of Prague Philharmonic Orchestra". * Mo Aug 31 2026 x-odos - 0.5.30-1.fc43 - Künstlerseite aus dem Player zeigte fremde Alben: die Diskografie wurde per "enthält" statt exakt gefiltert — "Cro" holte sich Adrian Crowley, Counting Crows, Sheryl Crow, Crosby und Crowded House, "City" die Kansas City Symphony. Jetzt exakter Namensvergleich wie an allen anderen Einstiegen - Fremde Künstlerbilder: Deezer und die MusicBrainz-Suche (FanartTV-Weg) übernahmen blind den ersten Suchtreffer — "AT Ensemble" bekam so ein Asterix-Hörspiel als Porträt. Beide prüfen den gefundenen Namen jetzt gegen den gesuchten (neue gemeinsame Prüfung ArtistNameMatch: Normalisierung, Artikel, Ähnlichkeit ab 0.85); passt nichts, bleibt es beim Monogramm statt beim falschen Bild - Hub-Namensaufloesung entschärft (Ursache der fremden Biografien): Geräte fragten teils Albumtitel als Künstlernamen an ("Cafe del mar vol 12", 187 Hörbuchkapitel) — der Hub weist solche Anfragen jetzt ab (Plausibilitätsprüfung) und akzeptiert unscharfe MusicBrainz-Treffer ohne Album-Gegenprobe nur noch ab 85 % Namensähnlichkeit. Aufräum-Skript für den Altbestand: scripts/clean-artist-aliases.py * So Aug 30 2026 x-odos - 0.5.29-1.fc43 - Empfehlungen sind abspielbar: neuer Endpunkt /api/discovery/resolve löst eine Empfehlung (Künstler/Titel/Album) zuerst gegen die eigene Bibliothek auf (nur real existierende MPD-URIs) und weicht sonst auf Qobuz aus (Bridge-URIs wie beim Infinity-Sender); der Play-Knopf in "Für dich" startet den Tipp und meldet dem Absender automatisch "gehört" — die Karte sagt dabei, ob lokal oder über Qobuz gespielt wird * So Aug 30 2026 x-odos - 0.5.28-1.fc43 - Freunde & Empfehlungen (Block A.5, Hub + App): Vernetzung per Freundschafts-Code (XO-XXXX-XX, 7 Tage, beidseitige Bestätigung, kein Nutzerverzeichnis); Alben lassen sich per Papierflieger-Knopf mit Notiz an Freunde empfehlen ("Das könnte dir gefallen", max. 20/Tag); eingehende Empfehlungen erscheinen als "Für dich" in der Discovery-Rubrik mit Danke-Herz * So Aug 30 2026 x-odos - 0.5.27-1.fc43 - Jedes Album ist jetzt bewertbar: Alben ohne MusicBrainz-Match bekommen einen deterministischen Ersatzschlüssel (xo:+Hash aus Künstler|Album, flottenweit identisch) — Sterne funktionieren sofort, der Flotten-Schnitt aggregiert sich auch dort - Community-Tags-Fundament: identifiziert ein Gerät ein Album, meldet es die Zuordnung Ersatzschlüssel→Release-Group beiläufig an den Hub (tbl_key_mapping); andere Flottengeräte mit demselben Album erben Editorial/Credits/Bewertungen sofort per Nachschlag, abgegebene Sterne ziehen automatisch auf den echten Schlüssel um — Datei-Tags schreibt weiterhin nur der eigene Matcher/Review * So Aug 30 2026 x-odos - 0.5.26-1.fc43 - Konto-Proxy /api/account/* (Block A): die App erreicht die neuen Hub-Konto-Funktionen (Registrieren, Anmelden, Favoriten-Sync, Bewertungen) über das Gerät — das Flotten-Register-Token bleibt auf dem Gerät, nur user/- und community/-Pfade werden durchgereicht - Album-Info liefert die Release-Group-ID mit (rg_mbid) — Grundlage für die neue Sterne-Bewertung in der App (Block A Phase 3: 5 Sterne in der Album-Detailansicht, eine Stimme pro Person; Flotten-Schnitt erscheint als x-odos-Badge ab 3 Stimmen) * Fr Aug 28 2026 x-odos - 0.5.25-1.fc43 - Backup grundlegend repariert: Hardlink-Probe vor jedem Lauf — auf ext4 echte inkrementelle Snapshots (--link-dest), auf NTFS/exFAT-Platten automatisch Spiegel-Modus (ein Ordner, nur Delta, konstanter Platz; jüngstes Voll-Backup wird als Startpunkt recycelt) statt versteckter 729-GB-Vollkopien - Backup-Snapshots entstehen als .partial und werden erst bei Erfolg umbenannt — abgebrochene Läufe hinterlassen keine Ordner-Leichen mehr und werden beim nächsten Start weggeräumt - Backup-Aufbewahrung: im Snapshot-Modus bleiben die jüngsten 3 Generationen, ältere werden automatisch gelöscht (inkl. History-Pflege) — Backup-Platten laufen nicht mehr endlos voll * Mi Aug 26 2026 x-odos - 0.5.24-1.fc43 - Intranet Klassik-Review: Zeile reagiert sofort auf "Ist Klassik"/"Kein Klassik" (ausblenden bzw. grün/grau umfärben statt Voll-Reload), Badge "Manuell", Undo-Toast "Rückgängig", Tastatur J/N + Pfeiltasten, neuer Filter "Alle" - Album-Zuordnung: "Ablehnen" ist jetzt rückgängig machbar (neuer Endpunkt /api/discovery/match/restore, abgelehnte Vorschläge werden 50 Stück tief aufbewahrt) — Undo-Balken dazu im App-Review-Flow ("Bibliothek aufräumen") - Genre-Finalisierung: Genre-Tag-Writeback löst Pfade jetzt gegen die Platte auf (schrieb sonst nur in die DB); Alben ohne Genre werden einmal täglich automatisch per MusicBrainz-Lookup gefüllt; neuer Intranet-Tab "Hub-Abgleich" prüft das lokale Mapping gegen die Hub-Referenzliste (neuer Hub-Endpunkt /api/genre-list) - CD-Vorwärmer (freedb-Trigger): sobald eine eingelegte CD per Disc-ID erkannt ist, wird das Hub-Editorial für Künstler und Album im Hintergrund angestoßen — "CD rein, Editorial fertig bevor der Rip durch ist" - Flotten-Cache für Klassik-Lookups: fertige MusicBrainz-Ergebnisse (Komponist/Werk/Sätze je Album) werden über den Hub geteilt (neue Tabelle tbl_shared_lookup, /api/share) — jedes Album kostet die 1-Req/s-Drossel nur noch einmal pro Flotte - Entscheidungs-Backup: Klassik-Overrides und Genre-Zuordnungen wandern täglich als decisions_backup.json nach /opt/settings (fährt im bestehenden Settings-Backup zum Hub mit); nach einem DB-Neuaufbau automatische Wiederherstellung, manuell per POST /api/library/decisions/restore * Mi Aug 26 2026 x-odos - 0.5.23-1.fc43 - Top-Titel abspielbar: DB-Pfade (Leerzeichen) werden jetzt gegen den realen Musik-Baum (Unterstrich-Verzeichnisse) aufgelöst — MPD bekommt nur noch existierende URIs (neues Modul path_resolve) - Gleiche Pfad-Auflösung für Klassik-Sätze, Warteschlangen-Nachschub, Album-Matcher-Tagging und Jazz-RG-Suche aus Dateien (mutagen las bisher teils ins Leere) * Mi Aug 26 2026 x-odos - 0.5.22-1.fc43 - Jazz-Fix: RG-MBIDs werden direkt aus dem Matcher-Zustand uebernommen (307 gematchte Alben hingen fest, weil der Credits-Lauf alphabetisch immer dieselben tag-losen Alben prüfte); erfolglose Datei-Checks pausieren 6 h * Di Aug 25 2026 x-odos - 0.5.21-1.fc43 - Jazz-Automatik: Detect + Credits-Sammlung laufen alle 30 Minuten von selbst (Datei-Tag-Fallback fuer RG-MBIDs inklusive) — kein manueller POST mehr noetig - Jazz: Musiker mit Foto (Hub-Bilder-Pipeline, Monogramm-Fallback) und Sprung vom Musiker auf die grosse Kuenstlerseite (volle Diskografie, Qobuz, Top-Titel) — App - Klassik: Dirigent, Orchester, Ensemble und Solisten in der Werkansicht sind antippbar und oeffnen die Kuenstlerseite (Diskografie, Qobuz, Bio) — App - Jazz-Labels mit Wikidata-Zusatzinfos: Gruendungsjahr und Kurzbeschreibung ("Blue Note · gegr. 1939 · US-amerikanisches Musiklabel") — neuer Cache wikidata_labels, max. 5 frische Lookups pro Aufruf * Di Aug 25 2026 x-odos - 0.5.20-1.fc43 - Klassik: gleichnamige Werke werden ueber Alben hinweg zusammengelegt — ein Eintrag pro Werk, Aufnahmen-Umschalter in der Detailansicht (Roon-Konvention) - Interpreten: "Top Titel" jetzt kombiniert aus Hoerhistorie (eigenes Geraet x3, Flotte x1), TheAudioDB und Qobuz-Auffueller — Rubrik erscheint damit bei praktisch jedem Kuenstler (Hub-Endpoint /api/history/top-titles) * Di Aug 25 2026 x-odos - 0.5.19-1.fc43 - Matcher-Sprint laeuft ohne limit-Parameter jetzt ueber die komplette Queue (limit=N weiter moeglich) - Klassik-Ansicht: "Erneut versuchen"-Button, wenn das erste Laden fehlschlaegt (App) - Recording-ID-Ausbau: gematchte Alben bekommen Recording-MBIDs pro Track (Hub-Tracklisten, additiv in Dateien + DB) — Mood-Filter/Audio-Features greifen damit auf der ganzen Bibliothek - Import-Nachlauf: frisch importierte Alben werden sofort dem Hub-Matcher uebergeben (neuer Endpoint /api/discovery/match/enqueue), statt auf den stuendlichen Queue-Refresh zu warten * Mo Aug 24 2026 x-odos - 0.5.18-1.fc43 - Betrieb: naechtliche DB-Sicherung (hub-server/scripts/backup/) — mysqldump - DB_Reg + music_db, gzip + GPG-AES256 (Passphrase nur auf dem Hub), Upload - auf den Strato-FTP-Backupspace via lftp mit Namens-Rotation (30 Tage remote, - 7 lokal), systemd-Timer 03:30. Dazu nas-pull-dumps.sh: woechentliche - Zweitkopie ZIEHEND aufs heimische NAS (rsync-over-SSH mit restriktivem - Key, kein offener Port im Heimnetz) — 3-2-1 komplett. - Bugfix Mood-Feature-Sync: with_mbid=0 — die tracks-Tabelle hat keine - Recording-MBIDs (der Matcher schreibt nur Release-Group-IDs). Der - Feature-Sync uebernimmt sie jetzt vor jedem Batch aus classical_metadata - (der Klassik-Lookup kennt sie pro Track) in die tracks-Spalte; damit - greifen auch Mood-Filter und Infinity-Stufe-2 unveraendert. - Album-Matcher beschleunigt: (a) Jazz-Alben ohne RG-MBID stehen in der - Matcher-Queue jetzt VORN (deren Credits-Sammlung wartet darauf; vorher - no_rg=96/100), (b) neuer Sprint-Endpoint POST /api/discovery/match/sprint - ?limit=N arbeitet die Queue auf Kommando im 1,2-s-Takt ab (100 Alben in - ~3-4 Min, MB-Drossel sitzt auf dem Hub), Fortschritt im match/status-Feld - 'sprint'. Hintergrund-Tick unveraendert als Dauerlaeufer. - Bugfix Werk-Editorials: kamen nie an — (a) seit der Zyklus-Gruppierung ist - die Werk-ID titelbasiert (wt:...), die App prüfte aber auf mb:-Praefix; - Browse liefert die MB-Work-ID jetzt separat als work_mbid mit. (b) MB - verlinkt Saetze auf SATZ-Werke ("...: I. Allegro") und Artikel heissen - selten wie der Katalogtitel — App schickt Titel+Komponist als Hint mit, - der Hub sucht Wikipedia mit Varianten (voller Titel, ohne Opus-Angabe, - ohne Tonart, jeweils "(Nachname)", en+de). * Mo Aug 24 2026 x-odos - 0.5.17-1.fc43 - Hoerbuch-Shares: Netzwerkfreigaben haben jetzt eine Verwendung ('music' - Standard | 'audiobooks'). Ein Hoerbuch-Share wird wie gehabt unter - /storage/music/Network/ gemountet (MPD-Sicht), die Hoerbuch-Bibliothek - nimmt ihn als ZUSAETZLICHE Wurzel auf (Multi-Root: Scan, Serien-Ordner, - Booklets — nur wirklich gemountete Pfade zaehlen, NAS im Standby laesst - keine Buecher "verschwinden"). App: Verwendung-Auswahl im Share-Dialog - (settings.network_share.purpose, 6 Sprachen + Watch). * So Aug 23 2026 x-odos - 0.5.16-1.fc43 - Bugfix Klassik-Werkliste: Zyklen zerfielen in Einzeleintraege ("Die Kunst - der Fuge" erschien zehnmal mit je 1 Satz) — MusicBrainz gibt jedem Satz - eines Zyklus eine EIGENE Work-MBID. Werk-Gruppierung jetzt ueber - Werktitel+Album (MBID nur noch Notnagel); zwei Einspielungen desselben - Werks bleiben getrennt. App zeigt zudem "1 Satz" statt "1 Saetze". - Bugfix Audio-Feature-Sync: Discovery oeffnet die music_library.db bewusst - read-only — der Feature-Sync lief damit auf "attempt to write a readonly - database". Sync schreibt jetzt ueber eine eigene Schreibverbindung - (_db_rw); alle Lesepfade (Status/Filter/Infinity) tolerieren eine noch - fehlende audio_features-Tabelle statt zu scheitern. - Bugfix Klassik-Apply: die Discogs-Interpreten-Ergaenzung sprang nur an, - wenn ein Album GAR KEINE Interpreten-Felder von MusicBrainz hatte — - lieferte MB z.B. Solisten, blieb der Dirigent leer (Coverage stagnierte - bei 19,9%). Jetzt feldweise: geholt wird, sobald eines der fuenf Felder - albumweit fehlt; gesetzt wird weiterhin nur Fehlendes. - Bugfix Jazz-Credits: von 830 erkannten Jazz-Alben hatte keines eine - RG-MBID in der DB (die tracks-Spalte fuellt erst der naechste Watcher- - Scan) — die Sammlung lief mit total=0 leer. Der Collect-Job liest die - RG-MBID jetzt direkt aus den Datei-Tags (Fallback wie beim Matcher), - schreibt sie nach jazz_albums zurueck und zaehlt Alben ohne MB-Tags - ehrlich als no_rg statt sie zu verschweigen. - Bugfix App-Build: Typkollision ClassicalCandidate (LibraryReviewView vs. - MetadataAPIClient) — Review-Modell in ReviewClassicalCandidate umbenannt. * Sa Aug 22 2026 x-odos - 0.5.15-1.fc43 - Hoerbuch-Inhaltsangaben: GET /api/audiobook/summary?uri=…&lang=de liefert - eine spoilerfreie Kurzfassung des Verlagstexts (Hub: Audible-Katalog per - ASIN, sonst strenge Titelsuche, sonst Wikipedia → Sonnet-Umformulierung). - Ohne Quelle keine Inhaltsangabe (status 'none', nichts Erfundenes). - Lokaler Cache in /opt/settings/audiobook_summaries.json; der Vorwaermer - stoesst die Texte fuer alle Buecher im Hintergrund beim Hub an (1 Anfrage - alle 2 s), damit sie beim Oeffnen schon da sind. Status 'pending' solange - der Hub sammelt — die App fragt dann alle 8 s nach. - Hoerbuch-Tags: audiobook_lib liest jetzt auch Sprecher (composer), Album, - Track und die Audible-ASIN (comment/asin-Tag oder Dateiname); Probe-Cache - wird dafuer einmalig im Hintergrund neu aufgebaut. - Genre-Finalisierung (Roadmap B.6): Vokabular auf 24 Kategorien eingefroren - (GENRE_VOCABULARY_VERSION=1, kommt in /genres/categories mit). 11 doppelt - gelistete Roh-Tags entschieden (blues rock/country rock->Rock, r&b->R&B, - latin jazz+bossa nova->Jazz, hardcore->Punk, art rock->Progressive, ...); - vorher entschied die Cache-Reihenfolge zufaellig. Teilmatch nimmt jetzt den - laengsten (spezifischsten) Treffer — 'Progressive Rock / Art Rock' landet in - Progressive statt Rock. Neuer Test test/test_genre_mapping.py erzwingt - Kollisionsfreiheit. - App „Bibliothek aufräumen" (Einstellungen -> Datenbank): zwei Review-Flows - ueber bestehende Backends — (a) unsichere Klassik-Kandidaten bestaetigen/ - ablehnen (candidates?status=unsure + override; Ja -> sofort in der Klassik- - Ansicht, Nein -> dauerhaft excluded), (b) Album-Zuordnungs-Vorschlaege des - MusicBrainz-Matchers (Score 0,60-0,95) uebernehmen/ablehnen (match/status + - apply/reject; Ablehnen = 300 Tage Ruhe). Badge mit offener Anzahl am - Settings-Eintrag. Neue Datei LibraryReviewView.swift. - Klassik: Discogs-Credits als zweite Interpreten-Quelle. Liefert der MB- - Lookup fuer ein Album keine Interpreten, holt apply die vom Hub bereits - gesammelten Discogs-Credits (tbl_album_info) und mappt die Rollen auf - conductor/orchestra/ensemble/choir/soloists (classical_credits.py, stdlib, - test/test_classical_credits.py; Chorus Master -> Dirigent, 'Name (2)'- - Suffixe bereinigt, Composed By/Produktion ignoriert). Release->RG einmalig - ueber MB aufgeloest (gecacht). Zielt auf die schwaechste Coverage-Spalte - (Dirigent 19,9 %). - Klassik: Wikidata-Fallback fuer Komponisten ausserhalb der Open-Opus-220 - (wikidata_composers.py). Lookup bevorzugt ueber die MB-Artist-MBID (P434, - eindeutig), sonst Namenssuche mit Berufspruefung (P106 Komponist/Dirigent/ - Musiker). Liefert Portraet (Commons) + Lebensdaten fuer die Komponisten- - Karten; Cache in music_library.db (Negativ-Cache 30 Tage), max. 5 frische - Lookups pro Browse-Aufruf. classical_browse fuehrt composer_mbid mit. - Klassik: Werk-Editorials ("Ueber das Werk" im Werk-Detail). Hub sammelt - on-demand MB-Werk + Wikipedia-Artikel (konservative Titelvarianten mit - Komponisten-Bezug) und generiert per Sonnet mehrsprachige Werk-Texte - (tbl_work_info, Migration 019, eiserne Regel: kein Text ohne Quelle). - Neue Route /api/work-info/{mbid}; Geraet proxied via - /api/discovery/work-info; App zeigt den Text eingeklappt ueber den - Saetzen und fasst bei pending bis zu 3x nach. - Jazz-Anreicherung Phase 1 (jazz_library.py + jazz_api.py, /api/library/jazz): - Erkennung ueber Jazz-Genre-Tokens (Negativ-Liste gegen Jazz Rap & Co., - excluded-Overrides ueberleben Re-Detect), Discogs-Credits vom Hub als - Besetzungs-Ablage album_credits (Person + normalisiertes Instrument, - Produktion gefiltert, Label wird mitgespeichert), Browse-Endpunkte: - Musiker (mit Instrument-Filter, Leader/Sideman-Flag), Musiker-Alben, - Label-Regal, Statistik. RG-MBIDs kommen direkt aus den Datei-Tags des - Album-Matchers — kein MB-Roundtrip. Test test/test_jazz_library.py. - App Jazz-Ansicht (JazzView + JazzBrowseAPI, Umschalter-Eintrag 'Jazz' - zwischen Klassik und Hoerbuechern): Musiker-Liste aus den Besetzungs- - Credits (nicht nur Album-Artists) mit Instrument-Chips, Musiker-Detail - mit Leader/Sideman-Trennung (Cover, Jahr, Label, Instrument), Label- - Regal. Leerer Zustand baut das Jazz-Regal per Knopf selbst auf - (detect + credits/collect). Lokalisierungs-Key view_mode_jazz (12 Dateien). * Sa Aug 22 2026 x-odos - 0.5.14-1.fc43 - Mood-Filter (Roadmap C.7/C.8): Geraet synct Audio-Features (BPM, Tanzbarkeit, - Tonart, Loudness) batchweise vom Hub (neuer POST /api/audio-features/batch, - AcousticBrainz-Destillat) in music_library.db/audio_features — Hintergrund- - Tick, Negativ-Cache, Status unter /api/discovery/features/status. SuperSearch - und Playlist-Bau filtern Stimmung/Tempo (ruhig/tanzbar/energiegeladen/ - melancholisch/froehlich/langsam/schnell) jetzt ueber echte Features statt - nur Textsuche und fuellen aus dem Feature-Pool auf; Infinity bekommt Stufe 2 - (BPM-Naehe, Tonart, Tanzbarkeit als Aehnlichkeits-Bonus). * Fr Aug 21 2026 x-odos - 0.5.13-1.fc43 - Hoerbuch-Performance: ffprobe-Ergebnisse liegen jetzt persistent in - /opt/settings/audiobook_covers/probe_cache.json (Schluessel mtime+Groesse); - fehlende Probes laufen im Hintergrund (4 Threads) — /library blockiert - nie mehr auf ffprobe, liefert 'pending' (Anzahl offener Tag-Reads), die - App laedt dann still nach, bis Titel/Autor vollstaendig sind. - Hoerbuch-Cover in Zielgroesse: /api/audiobook/cover und /series/cover - kennen ?size=thumb (600 px fuers Grid) und full (1400 px fuer Detail), - ffmpeg skaliert direkt beim Extrahieren; Thumbnails werden nach jedem - Bibliotheks-Scan im Hintergrund vorgewaermt und 7 Tage cachebar - ausgeliefert (Cache-Schluessel enthaelt die mtime). - Hoerbuch-Serien: "Aus Serie entfernen" wirkt jetzt auch bei Ordner-Serien - (expliziter Ausschluss in audiobook_series.json statt stillem Nichtstun); - Folgennummer ignoriert Jahreszahlen ("2001 – Odyssee") und erkennt - nachgestellte Nummern ("… 123.m4b"). - sign-repo.sh: Signatur-Gegenprobe auf rpm >= 6.0 (Fedora 43) korrigiert — - Pruefung ueber 'rpm -K' (Header-Signatur OPENPGP/RSAHEADER) statt der - leeren Alt-Tags SIGPGP/SIGGPG; rpmsign-Fehler werden ausgegeben statt - verschluckt, bei 0 signierten Paketen bricht der Lauf ab. * Fr Aug 21 2026 x-odos - 0.5.12-1.fc43 - Hoerbuch-Cover: neuer Endpunkt GET /api/audiobook/cover?uri=… liefert das in - der m4b eingebettete Artwork (ffmpeg-Extraktion, Cache unter - /opt/settings/audiobook_covers, Schluessel = Pfad+mtime), sonst cover.jpg/ - folder.jpg im Ordner, sonst 404. Nur Dateien unterhalb von library_dir - (realpath-Pruefung). Das RPM deklariert jetzt 'Requires: ffmpeg' - (RPM Fusion; liefert auch das bereits genutzte ffprobe). - Hoerbuch-Bibliothek (/api/audiobook/library): liefert je Buch jetzt auch - author und den echten Titel aus den Tags (ffprobe, mtime-gecacht) statt nur - den Dateinamen. - Hoerbuch-Serien: jeder Unterordner von audiobooks/ ist eine Serie ("Die drei - ???", "TKKG"); /library gibt je Buch series, series_name und episode - (Folgennummer aus Titel/Dateiname) zurueck sowie die fertige Serienliste. - Neue Endpunkte GET/POST /api/audiobook/series (umbenennen, Buecher einer - Serie zuordnen bzw. ausschliessen — Mapping in - /opt/settings/audiobook_series.json, m4b-Dateien bleiben unangetastet) und - GET/POST/DELETE /api/audiobook/series/cover (Serienbild: gesetztes Bild > - cover.jpg im Serienordner > Cover der ersten Folge; Upload multipart - 'cover', Ablage /opt/settings/audiobook_covers/series/). - Kuenstler-Info (/api/discovery/artist-info): die TheAudioDB-Top-10 aus dem - Hub (external_ids.top_tracks) werden gegen die lokale Bibliothek - abgeglichen (normalisierter Titelvergleich je Kuenstler) und als - top_tracks mit in_library, file (MPD-URI), album, duration zurueckgegeben — - Basis fuer den ausklappbaren "Top-Titel"-Bereich auf der Kuenstlerseite in - xo|touch. * Fr Aug 21 2026 x-odos - 0.5.11-1.fc43 - SMB-Share war faktisch read-only, obwohl "read only = No" gesetzt ist: - setup-device.sh legt fuer nginx eine POSIX-ACL auf /storage/music an. Ab - dann aendert "chmod 2775" (xo-startup.sh, bei jedem Boot) nur noch die - ACL-MASKE, nicht den group::-Eintrag — der blieb auf r-x. 'ls' zeigt - irrefuehrend drwxrwsr-x+ (das ist die Maske). smbd greift per - "force group = audio" ueber group:: zu und bekam kein Schreibrecht. - Beide Stellen setzen group:: jetzt explizit per setfacl. * Do Aug 20 2026 x-odos - 0.5.10-1.fc43 - Klassik-Browse-API: neue Endpunkte /api/library/classical/browse/{composers,works,work,eras} - blättern die angereicherte Klassik-Bibliothek nach Komponist -> Werk -> Satz - (Satz-Bündelung, Epochen-Filter, Dirigent/Orchester aggregiert). Basis für die - Klassik-Ansicht in xo|touch. Modul classical_browse.py (stdlib, testbar), - Test test/test_classical_browse.py. Grundmenge = classical_candidates - (candidate|confirmed) + classical_metadata, identisch zur Klassik-Statistik. - Editorial fuer ungetaggte Alben: oeffnet man ein Album ohne MusicBrainz-Tags, - stoesst das Geraet jetzt sofort einen On-Demand-Match an (discovery_api: - _match_kick/_match_one_album, gleiche Schwellen wie der Hintergrund-Matcher) - statt available=false zurueckzugeben. Antwort ist pending=true; die App - (AlbumDetailView) prueft pending jetzt VOR available und fasst bis zu 5x - im 12-s-Takt nach — Match (~10 s) + Hub-Sammeln (~30 s) passen in ein - Album-Oeffnen. Danach liefert der Hub Editorial/Credits/Ratings wie gehabt. - Boot-Fix: x-odos-usb-reset.service hatte "After=sysinit.target" UND - "Before=local-fs-pre.target" -> Ordering-Cycle. systemd loeste ihn auf, - indem es systemd-tmpfiles-setup.service aus der Boot-Transaktion warf. - Folge: /run/samba (und andere tmpfiles-Verzeichnisse) fehlten, smbd/nmbd - starteten nicht -> SMB-Share "Music" war nach jedem Boot weg - ("mkdir failed on directory /run/samba/ncalrpc"). After=sysinit.target - entfernt, shutdown-Ordering ergaenzt. - Sicherheitsnetz fuer Samba: das RPM liefert jetzt systemd-Drop-ins - /usr/lib/systemd/system/{smb,nmb}.service.d/50-x-odos-runtime-dir.conf aus - (ExecStartPre: mkdir -p /run/samba/{ncalrpc,msg.lock,nmbd}). smbd/nmbd - starten damit auch dann, wenn systemd-tmpfiles aus anderen Gruenden - ausfaellt — und Bestandsgeraete bekommen es per Update, nicht erst bei - einer Neuinstallation. setup_share.sh legt den /etc-Fallback nur noch an, - wenn das RPM-Drop-in fehlt (reine Skript-Installation). * Di Aug 18 2026 x-odos - 0.5.9-1.fc43 - Update-Start: "Update läuft bereits" nur noch, wenn wirklich ein Update-Prozess lebt (Lock-Prüfung) - Album-Bearbeitung: MPD wird nach dem Tag-Schreiben aktualisiert - bearbeitete Alben fallen nicht mehr auf den alten Stand zurück - Album-Bearbeitung: Dateinamen werden komplett aus den Tags gebaut (Schema "02_06-Titel.flac", Disc zweistellig), Albumordner als " - ", getrennt nach Qualität (mp3/flac/highres/dsd) - Album-Bearbeitung: vorhandene Dateien werden beim Verschieben nie mehr überschrieben (CD1/CD2-Schutz) - Album-Bearbeitung: alle leeren Alt-Verzeichnisse (cd1 UND cd2) werden nach dem Zusammenführen aufgeräumt - Album-Bearbeitung: unsichtbare Leerzeichen am Feldanfang/-ende werden entfernt (verhinderten das Zusammenführen in MPD) * So Aug 16 2026 x-odos - 0.5.8-1.fc43 - Update-Start: verwaiste 'running'-Statusdatei blockiert den Knopf nicht mehr (Lock entscheidet, ob wirklich ein Update läuft) * So Aug 16 2026 x-odos - 0.5.7-1.fc43 - Matcher: /api/discovery/match/recheck stellt Fehlversuche sofort wieder fällig (für Re-Läufe nach Matching-Verbesserungen) - Matcher: MPD-relative Dateipfade werden korrekt aufgelöst — Tags wurden bisher in KEINE Datei geschrieben (files_tagged: 0) - Matcher: ein Match ohne beschreibbare Dateien gilt nicht mehr als erledigt; recheck räumt die falsch-erledigten Alt-Einträge ab * So Aug 16 2026 x-odos - 0.5.6-1.fc43 - Intranet: Cache-Busting — Browser laden nach jedem Update garantiert frisches CSS/JS (kein toter Update-Knopf mehr durch alte Scripte) - LED merkt sich ihre Farbe jetzt wirklich über Neustarts: die graue Shutdown-Farbe wurde fälschlich als Nutzereinstellung gespeichert * Sa Aug 15 2026 x-odos - 0.5.5-1.fc43 - Matcher: Doppel-Rips/Datei-Dubletten werden pro Tracknummer dedupliziert — Alben mit zwei Fassungen (CD+Vinyl) matchen jetzt; getaggt werden weiterhin alle Dateien - Matcher: Speicherfehler der Statusdatei werden im Log sichtbar (vorher stumm) * Sa Aug 15 2026 x-odos - 0.5.4-1.fc43 - Intranet: Seitenmenü in 5 klappbare Gruppen gegliedert (Musik, Streaming, Disc & Import, Einstellungen, System) — Zustand wird gemerkt, aktive Gruppe öffnet automatisch - Update läuft jetzt in eigener systemd-Unit — friert nicht mehr bei 55/75 % ein, wenn Dienste neu starten - Abgebrochene Update-Läufe werden erkannt und sauber als erfolgreich/fehlgeschlagen gemeldet - Update-Abschluss: kundenfreundlicher Hinweis statt systemctl-Kommandos - Auto-Identifikation der Bibliothek (Roon-Matching): Alben ohne MusicBrainz-Tags werden im Hintergrund über den Hub identifiziert; ab Score 0.95 werden die MB-IDs additiv getaggt, 0.60–0.95 landet in der Review-Liste (/api/discovery/match/status) - Pink≠Pink Floyd: exakter Künstlervergleich bei der Qobuz-Zuordnung in 'Weitere Alben' * Fr Aug 14 2026 x-odos - 0.5.3-1.fc43 - Update-Seite: 'Was ist neu' zeigt nur noch die Änderungen des anstehenden Updates (numerischer Versionsvergleich) - Albenansicht: MusicBrainz-Abgleich schreibt jetzt auch die Release-Group-ID in die Dateien - Albenansicht: Bestandsalben lösen die Release-Group einmalig über die Album-ID nach (Selbstheilung) — damit erscheinen Hub-Editorial, Ratings und Tags * Fr Aug 14 2026 x-odos - 0.5.2-1.fc43 - LED-Einstellungen überleben jetzt den Neustart - Update-Status robuster, Sender-erstellen-Fix * Mo Aug 10 2026 x-odos - 0.5.0-1.fc43 - Entdecken: Redaktionelle Künstler-Portraits — Biografie, Bild und Hörempfehlung erscheinen direkt beim Künstler, in der Sprache der Oberfläche - Künstler-Infos: Nicht gefundene Künstler werden nach 30 Tagen automatisch erneut geprüft; die Statusanzeige nennt offene Fälle jetzt beim Namen - Neu vom x-odos Hub abrufbar: Album-Details (Besetzung, Label) und Genre-Beschreibungen — Grundlage für kommende Ansichten - Zuverlässigerer Online-Abgleich: vorübergehende Störungen führen nicht mehr zu falschen „ohne Treffer“-Einträgen - Korrigierte Gerätekennung bei der Hörstatistik * So Aug 09 2026 x-odos - 0.4.0-1.fc43 - Neu: Entdecken — Musikwünsche in eigenen Worten suchen, Playlists daraus erstellen, ähnliche Künstler entdecken - Neu: Endlos-Wiedergabe (Infinity) — bei fast leerer Warteschlange legt der XO passende Titel aus der eigenen Bibliothek nach (abschaltbar) - Neu: Online-Metadaten-Abgleich über MusicBrainz — beim Import oder für die ganze Bibliothek; ergänzt Titel, Interpreten, Jahr und Cover nur bei sicheren Treffern - Update-Seite: Fortschrittsbalken mit verständlichen Meldungen statt technischem Protokoll; Hinweispunkt in der Navigation, sobald ein Update bereitsteht - Hörbücher: Fortsetzen-Position wird jetzt auch beim Hören über den Web-Player gesichert - Künstler-Informationen (Biografie, Beziehungen, Bilder) vom x-odos Hub — Grundlage für die kommenden Künstler-Seiten - Verbesserte Versionsanzeige und aufgeräumte Änderungsliste auf der Update-Seite * Sa Aug 08 2026 x-odos - 0.3.0-1.fc43 - Bibliothek: Sampler-Erkennung automatisch (Start, nach Imports, --detect-compilations) - Bibliothek: Scroll-Position bleibt beim Schliessen der Album-Ansicht erhalten - Import: optionales Auto-Tagging (offline, ordnerweise; Album-Artist/Tracknummern) - Import: Duplikat-Erkennung mit _Duplikate-Quarantaene und Review-Ansicht (behalten/ersetzen/verwerfen) - Import: Fail-fast bei nicht gemounteter/leerer Quelle statt endlosem Scan - Import: Zielordner/-dateien gehoeren mpd:audio (kein EACCES-Sturm des Watchers mehr) - Watcher: Event-Debounce, Schreib-Backoff, MPD-Queue-Handling; _Duplikate ausgeklammert - Einstellungen: Schalter 'Musik automatisch sortieren' (Organizer an/aus) - Backup/Restore: audio-schonend gedrosselt (nice/ionice/bwlimit) und wiederaufnehmbar (--partial) - Diagnose: Skip-Hinweis im Dashboard + 'Jetzt erzwingen'-Button (POST /api/system/diagnose/run) - Diagnose: Fehlalarme behoben (secrets_loader.so, rate-guard, Geraetemodell, CD-Check) - Settings-Backup zum Hub nach Seriennummer (taeglicher Timer, Auto-Restore nach Reimage) - Registrierung: Serial uppercase, Modellcode 900 (Software), ehrliche Hub-Statusanzeige - go-librespot: Ownership-Selbstheilung der Unit (Crashloop behoben) - Support-Seite: Kontaktdaten korrigiert und verlinkt; Auto-Trennung-Anzeige gefixt - Speicherverwaltung: Mountstatus erkennt StorageVM-Volumes unabhaengig vom Mountpunkt - Firewall-Phase im Installer; systemd-Units auf kompilierte Binaries; Seriennummern-Doku * Fr Aug 07 2026 x-odos - 0.2.0-1.fc43 - Diagnose-UX, Import-Ownership, Watcher-Debounce, Backup-Drosselung * Fr Apr 03 2026 x-odos - 0.1.0-1.fc43 - Self-Diagnose & Self-Repair System hinzugefügt - self_diagnose.py: Umfassende Systemprüfung mit Auto-Repair - systemd Timer (alle 30 Min) + oneshot Service - Web-Dashboard unter /diagnose/ mit Status-Ampeln - History-Logging (letzte 288 Einträge) - Integriert in install-server.sh, deploy.sh und RPM * Do Apr 02 2026 x-odos - 0.1.0-1.fc43 - Initiales RPM-Paket für x-odos Server - Flask Music Library API, nginx/PHP-FPM Web-Frontend - DAC-Erkennung, systemd Services, udev Rules - WireGuard VPN, BlinkStick LED-Steuerung - Streaming-Bridges (Tidal, Qobuz, TuneIn, HRA)