Struktur, Doku und S0-Toolchain fuer das abdulive-Toolkit
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
This commit is contained in:
commit
d09e2b945a
98 files changed
+3273
No files matched your search
@@ -0,0 +1,54 @@
|
||||
# 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.
|
||||
Reference in new issue
Block a user