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
55 lines
2.0 KiB
Markdown
55 lines
2.0 KiB
Markdown
# 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.
|