Ich habe Blade Runner 2049 zweimal gekauft. Zwei Tage später steht meine Filmsammlung in einer Datenbank: 377 Hüllen, 437 Filme, jeder Regalplatz berechnet — und ein Wächter, der Aktionen aufs Handy meldet.
Der Auslöser war kein Problem, das man lösen muss. Ich stand vor dem Regal und wusste nicht, ob ich Blade Runner 2049 schon habe. Ich habe ihn gekauft. Zum zweiten Mal.
Zwei Tage später weiß ich, dass Avatar 1 zweimal bei mir liegt, dass in der Bud-Spencer-Box siebzehn Filme stecken und dass mein Keller neunundzwanzig Halter braucht. Dazwischen lag kein Aufräumen, sondern eine Datenbank.
Das Schöne daran: Das Projekt fasst drei Sachen zusammen, die ich sowieso mache. Coden, weil die ganze Sache aus Code besteht. 3D-Druck, weil die Halter aus meinem Drucker kommen und die Datenbank mir sagt, wie viele. Und Heimkino, weil es am Ende darum geht, dass die Scheibe im Regal steht, wenn ich sie sehen will. Solche Überschneidungen habe ich selten. Meistens läuft jedes Hobby für sich.
Was da eigentlich rumsteht
Am Anfang wusste ich es selbst nicht. Die Zahlen von heute Abend:
| Hüllen | 377 |
| Filme darin | 437 |
| Sammelboxen | 37 |
| Fotos gemacht | 776 |
| Schauspieler erfasst | 5673 |
| Tonspuren | 235 |
Vierhundertsiebenunddreißig Filme in dreihundertsiebenundsiebzig Hüllen. Der Unterschied sind die Boxen, und der ist der Grund, warum jede Tabellenkalkulation an dieser Aufgabe scheitert. Eine Hülle ist nicht ein Film. Eine Hülle kann siebzehn Filme sein.
Warum nicht einfach eine fertige App
Die Frage kam sofort, von mir selbst. Es gibt Sammler-Apps, es gibt Plex, es gibt Tabellen.
Drei Gründe, warum keins davon gepasst hat.
Die Boxen. Jede fertige Lösung denkt in Filmen. Meine Sammlung besteht aber zu einem Drittel aus Hüllen, in denen mehrere Filme stecken. Die Bud-Spencer-Box ist ein Regalplatz und siebzehn Einträge gleichzeitig. Wer das nicht sauber trennt, zählt entweder falsch oder findet nichts.
Der Regalplatz. Keine App weiß, dass ich meine Halter selbst drucke, dass acht Filme reinpassen und drei Module einen Turm ergeben. Genau das ist aber die Frage, die ich beantwortet haben wollte: Wo stelle ich das hin, und wie viel muss ich noch drucken.
Die Tonspuren. Ich will wissen, ob die deutsche Spur genauso gut ist wie die englische. Das steht auf keiner Hülle sauber drauf — dort steht „Dolby Atmos” und daneben „Sprachen: Deutsch, Englisch”, und ob beides zusammengehört, verrät der Aufdruck nicht. Für mich ist das eine der interessantesten Fragen an der ganzen Sammlung. Für jede fertige App ist es ein Textfeld.
Dazu kommt der ehrliche Grund: Ich wollte es bauen.
Der Plan war simpel, die Umsetzung nicht
Die Idee: Ich fotografiere jede Hülle mit dem Handy, der Rest passiert von selbst. Titel, Jahr, Tonformat, Cover, alles.
Was daraus wurde:
- Postgres auf der Synology, vier Container, alles im Heimnetz
- eine PWA fürs iPhone, ein Bildschirm, Auslöser und Fertig, sonst nichts
- Apple Vision auf dem Mac mini liest die Rückseiten
- TMDB liefert Cover, Beschreibung, Besetzung
- ein Bild-Modell räumt auf, wo die Texterkennung versagt
Rund 6600 Zeilen Code, 32 Datenbank-Migrationen, zwei Tage. Nichts davon habe ich getippt. Ich habe beschrieben, was ich will, gemeckert, wenn es falsch war, und Fotos geschickt, wenn ich es nicht erklären konnte.
Ein Bildschirm, zwei Knöpfe
Beim Erfassen entscheidet sich, ob so ein Projekt durchgezogen wird oder nach dreißig Hüllen im Sand verläuft. Vierhundert Mal etwas eintippen macht niemand.
Die erste Fassung hatte ein Formular. Auswahlfeld für Vorderseite oder Rückseite, Bestätigen, Speichern. Nach zwei Regalbrettern war klar, dass das nicht geht.
Die zweite Fassung ist ein einziger Bildschirm: Kamerabild formatfüllend, unten drei Knöpfe. Auslöser, Fertig, und einer für die Fotomediathek. Kein Scrollen, keine Auswahl vorher. Ich knipse Vorderseite und Rückseite, drücke Fertig, greife zur nächsten Hülle. Was das ist und wie es zugeordnet wird, entscheidet der Server später.
Zwei Details, die mehr gebracht haben als alles andere:
Die Fotos gehen in eine lokale Warteschlange. Im Keller bricht das WLAN weg. Statt einer Fehlermeldung landen die Bilder in der Datenbank des Browsers und gehen hoch, sobald wieder Netz da ist. Ich habe das erst gemerkt, als hinterher alles vollständig da war.
Ein Schalter für ganze Regalbretter. Mediabooks und Steelbooks stehen bei mir beieinander. Auf der Hülle steht das oft nicht drauf — bei den Turbine-Mediabooks ist die Rückseite komplett leer. Also einmal oben „nur Mediabooks” antippen, das Brett durchknipsen, zurückstellen. Ein Tipp pro Brett statt einer pro Hülle.
776 Fotos in zwei Abenden. Davon 362 Hüllen mit genau zwei Bildern, wie es sein soll.
Texterkennung ist gut. Bis sie es nicht ist
Die erste Version las die Rückseiten mit Apple Vision aus. Das funktioniert erstaunlich gut: EAN, Laufzeit, Regionalcode, Tonspuren, alles da.
Bis die Fälle kamen, an denen sie zerbricht.
A Quia Ma N → Aquaman Arvel Studies → Avengers: Infinity War 40-45 Spektakel-Musical → Kingsman: The Golden Circle 宝宝巴士儿歌 3D版 → Avatar - Aufbruch nach Pandora Rallijs → The Raid Cage → Con Air
Links steht, was die Texterkennung gelesen hat. Rechts, was es wirklich ist.
Mein Liebling: Hustlers wurde als „My Hero Academia: You’re Next” erfasst. Der Grund steht auf dem Cover — der Titel läuft senkrecht, Buchstabe unter Buchstabe in Neonschrift. Eine Texterkennung liest da acht einzelne Zeichen und keinen Titel. Die Besetzung oben rechts, Jennifer Lopez und Constance Wu, hätte den Fehler sofort gekippt. Nur stand die in dünner Schrift auf hellem Grund und wurde ebenfalls nicht gelesen.
Die Lösung war, das Bild anzusehen statt den Text. Jede Hülle ging einmal durch ein Bild-Modell, Vorder- und Rückseite zusammen. Ergebnis: 91 korrigierte Titel und 27 aufgelöste Sammelboxen.
Boxen sind das eigentliche Problem
Auf einer Sammelbox steht selten, was drin ist. Auf der Daniel Craig Collection steht „CRAIG”. Mehr nicht. Die Texterkennung hat daraus brav einen Film namens „Craig” gemacht.
Das Bild-Modell bekam eine neue Anweisung: Wenn das eine Box ist, zähl die Filme auf. Notfalls aus deinem Wissen über die Reihe.
Craig → Daniel Craig Collection, 4 Filme Ans Ende der Welt → Pirates of the Caribbean Quadrologie, 4 Filme Königstiger Filmreihe → Herr der Ringe Trilogie, 3 Filme Vier Fäuste für ein … → Bud Spencer & Terence Hill, 17 Filme Creature Features → Indiana Jones Complete Adventures, 4 Filme
Die Bud-Spencer-Box hätte über die Rückseite nie geklappt. Da steht eine Wand aus Kleingedrucktem.
Der Teil, der sich im Laden bezahlt macht
Der Auslöser war ja ein Doppelkauf. Also musste das Ding aufs Handy, nicht auf den Schreibtisch.
Im Media Markt fotografiere ich die Hülle. Ein Tipp, mehr nicht — den Titel sucht der Mac mini zu Hause nach, während ich weiterlaufe. Was danach auf der Karte steht, ist die eigentliche Antwort:
Hast du schon — als Blu-ray. Die UHD fehlt dir.
Steht in Keller · Turm 3 · Ebene 3 · Platz 5
Das ist der Unterschied zwischen einer Warnung und einer brauchbaren Warnung. „Hast du schon” allein wäre falsch, wenn ich die UHD suche. Der Satz muss dazusagen, welches Format im Regal steht und welches fehlt. Ein Upgrade ist kein Doppelkauf.
Wenn ich nicht kaufe, sondern nur will: Zielpreis eintippen. Jeden Morgen um Viertel nach neun sieht ein Skript auf dem Mac mini nach, was die beobachteten Filme kosten. Meldung kommt nur bei Zielpreis oder Tiefstand — alles andere wäre nach drei Tagen Rauschen, das man wegwischt.
Preise liest es nicht mit einem eigenen Scraper je Shop, das bricht bei jedem Relaunch. Es liest die Daten, die praktisch jeder Laden freiwillig ausliefert, weil Google sie will: schema.org, Open-Graph-Meta-Tags. Funktioniert bei JPC, MediaMarkt, Saturn, Thalia, Müller, Turbine. Amazon blockt, da bleibt das Feld leer. Ehrlich leer, nicht falsch gefüllt.
Und wenn ich einen Film suche
Der Fall, der im Alltag am häufigsten vorkommt, ist der langweiligste: Ich will einen Film sehen und weiß nicht, wo er steht.
Titel ins Suchfeld, und die Antwort ist keine Liste, sondern ein Ort:
Top Gun: Maverick Wohnzimmer · Turm 7 · Ebene 2 · Platz 5
zwischen Top Gun und Transformers: Ära des Untergangs
Die Nachbarn stehen dabei, weil man im Regal nicht Fächer abzählt, sondern Rücken liest. Und weil ein Fach immer mal falsch belegt ist — dann findet man die Scheibe trotzdem, wenn man weiß, zwischen wem sie liegen sollte.
Dasselbe funktioniert über Schauspieler, Regie, Genre oder EAN. Und über die Cover-Wand, wenn ich nicht weiß, wonach ich suche, sondern nur blättern will.
267 Hüllen an einem Abend bestätigen
Nach dem Scannen lagen 267 Hüllen unbestätigt herum. Erkannt, aber nicht abgesegnet. Und weil sie nicht abgesegnet waren, tauchten sie nirgends auf — nicht in der Suche, nicht in der Lückenliste, nicht im Regalplan.
Das war der Moment, an dem ich beinahe aufgegeben hätte. 267 Einträge einzeln aufklappen, prüfen, zuklappen: ein Abend, den man nicht verbringen will.
Die Lösung war, die Frage kleiner zu machen. Nach dem Bild-Modell stimmen die Titel fast immer. Offen ist praktisch nur die Verpackung — und die sieht man dem Foto in einer Sekunde an, während sie aus dem Aufdruck oft gar nicht hervorgeht.
Also eine Ansicht, die nur das fragt: links das Foto, daneben Titel und Zielzone, darunter zwei Knopfreihen. Oben das Medium, unten die Verpackung. Ein Tipp setzt beides, bestimmt die Zone neu und übernimmt die Hülle — und meldet gleich zurück, wo sie landet.
Zwei Tipps pro Hülle. Der Rest war Fernsehen nebenbei.
Wo es teuer wurde
Nicht bei der Erkennung. Bei mir.
Ein doppeltes const legte die halbe App lahm. Ich hatte beim Anbauen einer Funktion eine Konstante ein zweites Mal deklariert, die es schon gab. In JavaScript ist das ein Syntaxfehler, und der killt nicht die Funktion, sondern die komplette Datei. Suche, Lückenliste, Kontrollansicht, alles tot. Ohne Fehlermeldung. Die Seiten zeigen dann einfach ewig ihren Ladetext.
Ich habe drei Runden gebraucht, um das zu finden, weil ich geraten statt gemessen habe. Seitdem läuft vor jedem Deploy ein node --check über die Frontend-Dateien. Zwei Zeilen Shell.
Ein Deckel, den ich selbst gesetzt hatte. Die Bud-Spencer-Box kam mit zwölf statt zwanzig Filmen an. Ich habe TMDB verdächtigt, die Titel geprüft, alles fein. Der Fehler stand in meinem eigenen Code: eine Obergrenze von zwölf Einträgen, willkürlich hingeschrieben, ohne Meldung wenn sie greift. Acht Filme fielen still unter den Tisch.
Stille Obergrenzen sind die schlimmste Sorte Fehler. Sie sehen aus wie ein Ergebnis.
Ein zweiter Blick kann verschlechtern. Um unvollständige Boxen zu reparieren, habe ich alle Hüllen mit mehr Discs als Filmen noch mal durchs Bild-Modell geschickt. Das Kriterium war Unsinn: Eine Dune-UHD mit UHD, Blu-ray und Bonus-Disc hat legitim drei Discs und einen Film. Das Modell sah dieselben Fotos ein zweites Mal und machte daraus „Herr der Ringe Trilogie” mit vier Filmen.
Einmal hinsehen reicht. Ein zweites Mal ist ein Würfelwurf.
Zwei Wahrheiten sind eine zu viel
Der hartnäckigste Fehler war keiner im klassischen Sinn. Es gab zwei Rechnungen für dieselbe Frage.
Der Einräumplan sortierte nach Blöcken: Reihen zusammen, innerhalb chronologisch, ein Platz Luft für den nächsten Teil. Die Weboberfläche sortierte stur alphabetisch nach Produkttitel.
Sichtbar wurde es bei Fast & Furious. Der Plan sagte Hobbs & Shaw 2019, dann Teil 9, dann Teil 10. Die App sagte Teil 10 vor Teil 9 — als Text ist die 1 nun mal kleiner als die 9.
Beides plausibel. Beides verschieden. Beim Einräumen hätte ich mich schwarz geärgert.
Die Lösung war nicht, die zweite Rechnung zu reparieren, sondern sie abzuschaffen. Der Plan schreibt Turm, Ebene und Fach fest in die Datenbank. Die App liest, was dasteht. Eine Autorität, eine Antwort.
Was am Ende rauskam
Das Regal ist eine Rechnung geworden.
| Zone | Hüllen | Halter | Türme |
|---|---|---|---|
| Wohnzimmer UHD | 128 | 22 | 8 |
| Keller Blu-ray | 187 | 29 | 10 |
| Box-Regal | 45 | — | — |
| Steelbooks, Mediabooks, Übergröße | 17 | 4 | — |
Die Halter drucke ich selbst, acht Fächer pro Modul, drei Module pro Turm. Achtzehn Türme insgesamt. Das sind ein paar hundert Stunden Druckzeit, und das ist der Teil, der jetzt wirklich Arbeit macht.
Die Regeln dahinter sind einzeln anklickbar:
- Reihen zusammenhalten. John Wick 1 als Blu-ray, 2 und 3 als UHD, trotzdem nebeneinander. Es wäre unsinnig, Teil 1 in den Keller zu verbannen und die Reihe zu zerreißen.
- Blu-ray bleibt unten, wenn die UHD da ist. Sie zieht nur hoch, wenn sie oben eine Lücke füllt.
- Nur ein Exemplar je Film. Avatar 1 habe ich zweimal. Eines steht oben, eines unten.
- Ein Platz Luft nach jeder Reihe. Der nächste Teil kommt bestimmt. Dann rückt die Reihe, nicht das halbe Regal.
Und ich weiß jetzt, wo Blade Runner 2049 steht. Beziehungsweise: dass ich ihn zweimal habe.
Der Wächter, der auf Aktionen wartet
Die Preiswache sieht stur auf einzelne Filme: Kostet der beobachtete Titel heute weniger als gestern.
Das Interessante am Physische-Medien-Markt sind aber die Aktionen. MediaMarkt macht drei für zwei. Amazon wirft drei Blu-rays für zehn Euro raus. Media-Dealer und Turbine haben ihre Wochenenden. Und genau dann kaufe ich, nicht wenn ein einzelner Titel um zwei Euro fällt.
Also gibt es jetzt einen zweiten Wächter. Er liest zweimal täglich die öffentlichen Feeds von mydealz und Schnäppchenfuchs — kein Scraping von Shop-Seiten, nur was die Betreiber selbst ausliefern —, filtert auf physische Medien und sucht gezielt nach Bündeln. Was er beim ersten Lauf gefunden hat, war ernüchternd konkret:
30 % Rabatt MediaMarkt Hamburg — 4Ks, Blu-rays, DVDs 50 % Rabatt Saturn Krefeld, schließt zum 15.08. 55 % Rabatt FilmCult Bochum — Blu-rays, DVDs, Mediabooks versandkostenfrei JPC, ohne Mindestbestellwert
Gemeldet wird nur, was mit meiner Wunschliste zu tun hat. Entweder passt ein Titel namentlich, oder es ist ein Bündel, für das sich eine Kombination rechnet. Der Rest steht in der App und schweigt.
Die Meldung kommt über Neo, meinen Telegram-Bot auf dem Mac mini. Nicht „Preis gefallen”, sondern:
MediaMarkt: 3 für 2.
Aus deiner Wunschliste passen sieben Titel.
Nimm Dune Part Two, Nosferatu und The Northman — dann ist der teuerste geschenkt.
Zusammen 54,97 € statt 74,96 €.
Der zweite Satz ist der eigentliche Aufwand. Bei drei für zwei ist der günstigste Artikel gratis, also will man drei möglichst gleich teure Titel bündeln — und nicht den 8-Euro-Ramsch mit der 30-Euro-Neuheit mischen. Wer das falsch kombiniert, verschenkt acht Euro statt dreißig. Das ist ein kleines Rechenproblem, und genau dafür ist eine Datenbank da, in der jeder Preis der letzten Monate steht.
Dazu die Gegenprobe, die es heute schon gibt: Habe ich den Film? Und wenn ja, in welchem Format? Eine Aktion, die mir drei Filme andreht, die ich schon im Keller stehen habe, ist keine Aktion.
Was noch fehlt
- Die Tonspurenfrage endgültig klären. Der Aufdruck lügt zu oft. „Dolby Atmos” steht groß auf der Hülle, welche Sprache das betrifft, verrät sie nicht. Solange das nicht sauber belegt ist, steht in der Datenbank ehrlich „ungeklärt” statt einer Zahl, die gut aussieht.
- Der Blog-Knopf. In jeder Filmkarte steckt „Für Blog vormerken”. Der Fragebogen steht, der Entwurfsgenerator auch. Benutzt habe ich ihn noch nicht.
- Die Halter. Achtzehn Türme wollen gedruckt werden. Das ist der Teil, bei dem die Datenbank nur zuschaut.
Was ich mitgenommen habe
Fotos schlagen Beschreibungen. Die schnellsten Runden waren die, in denen ich ein Bild geschickt habe statt zu erklären. „Die Box wird falsch erkannt” führt zu drei Rückfragen. Das Foto der Box führt zur Ursache.
Meckern ist produktiv. Fast jeder gute Schritt in diesen zwei Tagen kam aus einem Satz wie „das ist doof” oder „geht immer noch nicht”. Nicht aus einem Lastenheft.
Der teuerste Fehler war Raten statt Messen. Ein Aufruf im Browser hätte den Syntaxfehler in zwei Minuten gezeigt. Ich habe stattdessen drei Runden lang Hypothesen gebaut.
Und die Erkennung war nie das Problem. Sie liegt jetzt bei über 99 Prozent. Das Problem waren meine eigenen Regeln, die sich gegenseitig widersprachen. Software, die zwei Antworten auf dieselbe Frage gibt, ist schlimmer als Software, die keine gibt.
Und der Nutzen ist banal, aber echt. Ich gebe kein Geld mehr für Filme aus, die ich schon habe — außer ich will bewusst das Upgrade. Bei zweihundertirgendwas Blu-rays ist das keine theoretische Ersparnis.
Nächster Schritt: Die Halter drucken. Achtzehn Türme. Da hilft mir keine KI.


