crumcast — autonomer Hintergrund-Render
Rendert Episoden headless (kein Browser, kein Strudel, offline) aus
Sprach-Stems + Synth-Betten zu episodes/episode_<id>_master.wav.
Bausteine
render_episode.py— der Renderer (numpy + stdlib wave). Betten als weiche
Synth-Drones, Sidechain-Ducking, Vinyl-Hiss/Knistern, warmer Limiter.normalize_stems.sh— roh (.m4a/…) → Mono/44.1k/16-bit WAV.crumcast_autorender.sh— idempotenter Wrapper:git pull→ für jede
raw_stems/episode_*-Sammlung normalisieren + rendern, aber nur wenn ein Stem
neuer ist als das Master.crumcast-render.{service,timer}— systemd user-Units, Lauf alle 10 min.
Einmalig aktivieren (auf crumbdesktop, als sysop)
# Units an ihren Platz
mkdir -p ~/.config/systemd/user
cp ~/workspace/mondgeschichten/crumcast-render.service ~/.config/systemd/user/
cp ~/workspace/mondgeschichten/crumcast-render.timer ~/.config/systemd/user/
chmod +x ~/workspace/mondgeschichten/crumcast_autorender.sh
# Timer starten
systemctl --user daemon-reload
systemctl --user enable --now crumcast-render.timer
systemctl --user list-timers | grep crumcast
# Damit der Timer auch ohne aktive Login-Session laeuft (braucht einmal sudo):
# sudo loginctl enable-linger sysop
Prüfen
systemctl --user status crumcast-render.service # letzter Lauf
tail -f ~/workspace/crumcast/autorender.log # Live-Log
Manuell einmal rendern
bash ~/workspace/mondgeschichten/crumcast_autorender.sh
Neue Episode? Einfach raw_stems/episode_<id>[_lang]/ mit den Stems anlegen und
pushen — der Timer zieht und rendert beim nächsten Lauf von selbst.