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.