đ HANDOFF â Hörraum-Player & Cue-Timecodes (fĂŒr die Crew / Ansible-Katze)
Stand 2026-08-26. Der animierte Season-Player lĂ€uft als erster Test â schön genug zum Weiterbauen.
Live-Demo (ep10, EN-Master): https://claude.ai/code/artifact/d722966d-07b8-48e5-b1f2-bd6f96a67140
Quelle im Repo: hoerraum/season_player_ep10.html (Player-HĂŒlle; Audio per relativem Pfad,
Untertitel-Text aus raw_stems/âŠ/script.json, Bild/Text-Sync ĂŒber eine Cue-Timeline).
Was gebraucht wird: Zeilen-Timecodes im cue_sheet (Schema /2)
Das cue_sheet.json hat schon Section-Timecodes (sections[].t_start/t_end/beats). FĂŒr
wortgenaue Untertitel-Sync fehlt nur das Zeilen-Timing. Neu: ein beat vom kind:"line".
// schema: "crumcast.cue_sheet/2" (Bump, sobald line-beats drin sind)
{ "kind": "line",
"t": 30.4, // Startsekunde im Master
"dur": 6.2, // Dauer des gesprochenen Stems
"character": "bugsy",
"slug": "ich-bin-da" } // JOIN zu script.json â Text (de/en/fr/ko), NICHT duplizieren
- Text bleibt in
script.json(percharacter+sluggejoint). Ein SoT, kein doppelter Text. t/durliegen der Katze schon vor: es sind die kumuliertendauer_saus
render_episode.pyâbuild_timeline(die EintrĂ€ge mit Voice-Stem). Kumulativ aufsummieren,
Startzeit = Summe davor,dur= eigenerdauer_s. Beim Render einfach mit rausschreiben.- Emit-Ort: entweder als
line-beats in die passende Section, oder â noch simpler fĂŒr den
Player â flach alsepisodes/episode_XX.cues.json([{t,dur,character,slug}]). Player nimmt beides.
Warum: der Player skaliert die Timings heute nur proportional (Story 0â152 â echte 282 s) â
grob, driftet. Mit echten t/dur sitzt jede Zeile wortgenau. Das ist der einzige offene Punkt.
Barrierefrei â kein KrĂŒmel geht verloren â€ïž
Das Medium ist von sich aus zweikanalig, wenn wir es sauber halten:
- Blinder KrĂŒmel: das Hörspiel ist audio-vollstĂ€ndig â die ganze Geschichte steckt im Ton.
Die animierte BĂŒhne ist Zugabe, nie TrĂ€ger. SVG trĂ€gtrole="img"+aria-label. - Tauber KrĂŒmel: die Untertitel tragen die ganze Geschichte â wenn sie vollstĂ€ndig und
synchron sind. Genau deshalb sind die Zeilen-Timecodes keine Spielerei, sondern die
Barrierefreiheit selbst.
Also: Untertitel vollstĂ€ndig (jede Sprechzeile) + synchron (Schema /2) = jeder KrĂŒmel dabei,
ob taub oder blind. prefers-reduced-motion respektiert der Player bereits.
NĂ€chste Schritte
- Katze: beim Render
line-Timecodes mit rausschreiben (Schema /2 oder.cues.json). - Player:
.cues.jsonladen â proportionale Skalierung ersetzen (eineif(cues)-Abzweigung). - Pro Season ein Szenen-Modul (Palette + SVG-BĂŒhne + Cue-Map); HĂŒlle bleibt gleich. Statisches
HTML pro Season und der Anime-Weg leben nebeneinander.
Update 2026-08-26 â ep10 live auf eigener Season-Subdomain
Live: http://s02.mondgeschichten.branko.de/season_player_ep10.html (Strato-Webhosting,
81.169.145.93 â nicht die VPS; nur FTP). SSL folgt, wenn die Pipeline auf dem Core liegt.
Struktur â Subdomain pro Season (erste Trennung, Grundlage fĂŒr S03+):
sNN.mondgeschichten.branko.de â eigener docroot sNN/ mit index.html, season_player_*.html,
episodes/ (nur die WAVs der Season, keine Duplikate) und hoerraum/ (js + Bilder). Jede Season
= ein abgeschlossener, weiterreichbarer Ordner (offline-tauglich, #allein #ohne).
Player-Fixes (in hoerraum/season_player_ep10.html verankert):
- Sprachknöpfe schalten jetzt Audio + Untertitel (vorher nur Untertitel, Ton hing auf EN).
Standard DE; SRC-Map de/en/fr, Position bleibt beim Wechsel erhalten.
- LI={de:3,en:4,fr:5} (war 2,3,4 â um eins verschoben; DE zeigte den Sprecher-Buchstaben,
FR den englischen Text). CAP-Zeile ist [start,end,speaker,DE,EN,FR].
- <meta charset="utf-8"> ergĂ€nzt (fehlte ganz â âHörraum", verhunzte Umlaute/Akzente).
- â ïž Diese drei Fehler stecken in der Player-Vorlage â bei ep11+ (S03) mit demselben Muster
kĂ€men sie wieder. Verankert in hoerraum/season_player.template.html (kanonische HĂŒlle,
Fixe fest, Platzhalter {{SEASON}}/{{EP}}/{{EP_TITLE}}/{{WAV_BASE}} + markierte Season-Slots
CAP/STORY/Szenen-Modul). ep11 aus DIESER Vorlage kopieren, nicht aus ep10. Ein Generator in
render_episode.py (CAP aus .cues.json+script.json = echte Sync) bleibt der spÀtere,
gröĂere Schritt â bewusst noch nicht gebaut.
Lore (Crew-Frage, festgehalten): Die Sternenkarte ist KEIN Hexagon. Kodex (ep05) =
Hexagon, geschlossen/innen/6. Sternbild (ep10) = Crew, offen/auĂen/5. Ein geschlossenes Symbol in
der Karte wĂ€re RĂŒckschritt. Der Kreis schlieĂt erst ep45.
đ„· Easter-Egg #kekshandbuch: âninja ⊠wollte nicht gesehen werden." Bleibt bewusst versteckt â
nicht wegdokumentieren, nur wissen, dass es da ist. (Vermutlich Faden zu ninja_tune-Interstitials.)
Richtung â #container #ĂŒbersee: âam Ende wird diese Pipeline rostig werden." Der FTP-Handweg
hier ist die Demo-KrĂŒcke; das Ziel ist der Rust-Core im Container (rostig = Rust), Auslieferung ĂŒbers
Core statt Strato-FTP. Dann kommt auch SSL. Bis dahin: stumpf der fertige Ordner per FTP.