crumcast_studio

Macht aus einer Debian-Node (crumbdesktop) eine offline-first Audio-Produktions-Station
für crumcast — die Waldgeschichten
im Mond. Kein Cloud-API, nur Debian-Standard-Repos + eine lokale Python-venv.

Was sie installiert

Zweck Tool Paket
Mix / Effekte / Encode ffmpeg, sox ffmpeg sox libsox-fmt-all
MIDI → Audio fluidsynth (+ vorhandene GM-SoundFont) fluidsynth
Musik-Engine (NRT-Render) supercollider supercollider
Node-Taktgeber → MIDI/VJ node nodejs npm
Stimme (TTS, Flüster-Mode) piper-tts via venv
MIDI-Dateien aus Bridge-Events mido, python-rtmidi via venv

Die venv liegt in ~sysop/workspace/crumcast/venv — Python-Pakete
(soundfile, mido, pyFluidSynth, supercollider, sounddevice, soundcard)
landen nie global. TTS (Stimme) steht noch auspiper-tts ist der
geplante offline-Weg, bewusst in crumcast_pip_tts geparkt.

Die Pipeline, die sie bedient

crumcast_engine.py ─► episode_XX.md + cue_sheet.json
        │
        ├─► Piper (TTS)        ─► render/voice/*.wav
        ├─► SuperCollider NRT  ─► render/music/*.wav
        └─► crumbmidi_bridge.py ─► events.jsonl ─► FluidSynth ─► render/music/*.wav
                          │
                          ▼
             SoX/FFmpeg (Ducking, Hiss, LPF, loudnorm) ─► render/master/episode_XX.opus

Anwenden — ansible-pull (der Weg für crumbdesktop)

crumbdesktop ist kein SSH-Key-Ziel (passwort-only, #kodex), darum läuft die
Rolle auf der Node selbst:

# auf crumbdesktop, als sysop:
ansible-pull -U <repo-url> -i "localhost," crumcast-studio.yml \
    --connection local --ask-become-pass

# vorher trocken:
ansible-pull -U <repo-url> -i "localhost," crumcast-studio.yml \
    --connection local --check --diff

Wird crumbdesktop je ein Key-Ziel, geht auch Push: -e target=crumbdesktop.

Anpassen

Alles in defaults/main.yml, überschreibbar in
host_vars/crumbdesktop.yml:

  • crumcast_soundfont — Pfad zur .sf2 (Default: die schon vorhandene default-GM.sf2)
  • crumcast_piper_voices — dt. Stimm-Downloads (leer im Default; Bugsy/Eule gezielt im nächsten Schritt)
  • crumcast_apt_packages / crumcast_pip_packages — die Werkzeugliste