Monorepo-Geruest fuer neun Streamer-Tools plus den Ingest-Daemon, der unter sechs davon liegt. Enthaelt: - docs/: Ueberblick, Architektur, Twitch-Integration, Datenmodell, Roadmap, Setup, Hebel-Analyse und den MVP-Plan "Clip-Knopf" - docs/projects/: je eine Spezifikation pro Tool - docs/decisions/: vier ADRs (TS-Monorepo, SQLite, EventSub/IRC, Docker) - docker/: Image mit ffmpeg und whisper.cpp, abhaengigkeitsfreier Entrypoint mit check-env, fetch-model und calibrate - config/layout.yaml: aus einem VOD-Screenshot eingemessener Facecam-Ausschnitt (440x330 oben links, Chat-Overlay ab x=1270) Noch kein Anwendungscode - Scheibe S0 aus docs/07-mvp-plan.md. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013VTGjd92LsDDWF3frd9FTB
2.0 KiB
5 — VOD-Kapitel (apps/vod-chapters)
Wirkrichtung: Steuerung und ein wenig Reichweite (YouTube-Zweitverwertung).
Was aufgezeichnet wird
Während des Streams sammelt der Ingest ohnehin schon:
| Signal | Quelle | wird Kapitel? |
|---|---|---|
| Kategoriewechsel | EventSub channel.update |
immer |
| Titelwechsel | EventSub channel.update |
wenn Kategorie gleich bleibt |
| OBS-Szenenwechsel | obs-websocket | nur bei Szenen aus der Whitelist |
| Stream-Marker | POST /helix/streams/markers |
immer |
| erstellter Clip | clips |
als Kapitel-Kandidat |
OBS-Szenen sind das rauschendste Signal — ein Wechsel auf "BRB" und zurück sind
zwei Wechsel, die kein Kapitel sind. Deshalb Whitelist in config/obs-scenes.yaml
plus Mindestabstand von 5 Minuten zwischen Kapiteln; kürzere Segmente werden mit
dem vorherigen verschmolzen.
Ausgabe
Nach stream.offline: VOD über GET /helix/videos?user_id=&type=archive&first=1
holen, Zeitstempel relativ zu streams.started_at umrechnen, Text erzeugen:
00:00 Start & Begrüßung
00:14 Elden Ring — Malenia, Versuch 40
01:32 Pause
01:47 Elden Ring — sie ist tot
02:55 Just Chatting — Community-Fragen
Format wählbar: Twitch-VOD-Beschreibung, YouTube-Kapitel (identisch, muss aber
bei 00:00 beginnen und mindestens drei Einträge mit je mindestens 10 s haben,
sonst zeigt YouTube keine Kapitel an), Discord-Nachricht.
Twitch erlaubt kein Setzen der VOD-Beschreibung über die API — der Text landet
deshalb in data/vods/<datum>/chapters.txt und wird per Push-Nachricht
zugestellt, plus als Block im Recap-Post. Einfügen dauert zehn Sekunden.
Kapitel-Titel
Der Rohtitel ist der Twitch-Titel bzw. der Kategoriename. Optional (Ausbaustufe 2) eine Verdichtung aus dem Chat: die häufigsten Substantive im Segment als Zusatz. Erst sinnvoll, wenn genug Chat-Volumen da ist.
Abnahmekriterien
- Ein Testtream mit zwei Kategoriewechseln und drei Szenenwechseln erzeugt genau die erwarteten Kapitel.
- Zeitstempel weichen vom VOD um weniger als 5 s ab.
- Kein Kapitel unter 5 Minuten Länge.