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.6 KiB
2 — Go-Live-Broadcaster (apps/broadcaster)
Wirkrichtung: Reichweite. Billigster Hebel im ganzen Repo — Leute, die schon folgen, aber die Twitch-Benachrichtigung nicht sehen.
Ablauf
stream.online
-> 60 s warten (Titel/Kategorie/Thumbnail sind erst dann gesetzt)
-> GET /helix/channels (Titel, Kategorie)
-> OBS GetSourceScreenshot (Programm-Ausgabe, 1280x720)
-> Text aus Vorlage rendern
-> pro Plattform: Entwurf anlegen oder direkt senden
Plattformen
| Plattform | Weg | Aufwand | Auto-Post |
|---|---|---|---|
| Discord | Webhook, Embed mit Bild + @everyone/Rolle |
trivial | ja |
| Bluesky | AT-Protocol, com.atproto.repo.createRecord mit Blob-Upload |
klein | ja |
| Mastodon | POST /api/v1/statuses mit Media |
klein | ja |
| X/Twitter | API v2, kostenpflichtig ab Basic-Tier | mittel | optional |
| Instagram Story | kein offizieller Weg — siehe unten | groß | nein |
Instagram: die Wahrheit
Die Instagram Graph API kann Stories nur für Business-/Creator-Konten
veröffentlichen, die mit einer Facebook-Seite verknüpft sind, und braucht eine
App-Review mit instagram_content_publish. Für einen kleinen Kanal ist das
unverhältnismäßig, und inoffizielle Wege riskieren die Kontosperre.
Lösung in Ausbaustufe 1: Der Broadcaster erzeugt ein fertiges
1080x1920-Story-Bild (Screenshot + Titel + Kategorie + "LIVE"-Badge) und
legt es in data/posts/<datum>/story.png ab, plus eine Push-Nachricht an Abdus
Handy (Discord-DM oder ntfy.sh). Hochladen dauert dann fünf Sekunden manuell.
Das ist 90 % des Nutzens für 5 % des Aufwands.
Sicherung gegen Fehlposts
- Ein Post pro Stream.
posts-Tabelle wird aufstream_idgeprüft. - Cooldown 6 h. Wenn Twitch nach einem Verbindungsabbruch ein zweites
stream.onlineschickt, wird nicht erneut gepostet. - Kill-Switch in
config/config.yaml:broadcaster.enabled: false. - Beim ersten Einrichten läuft alles im Modus
draft— Posts landen nur in der DB und in einem privaten Discord-Kanal zur Kontrolle.
Vorlagen
config/templates/golive.*.md, mit Platzhaltern {{title}}, {{category}},
{{url}}, {{weekday}}. Mehrere Varianten pro Plattform, zufällig gewählt —
identische Posts jede Woche werden von Algorithmen und Menschen gleichermaßen
ignoriert.
Abnahmekriterien
- Stream-Start erzeugt innerhalb von 90 s einen Discord-Post mit korrektem Titel, Kategorie und aktuellem Screenshot.
- Ein simulierter doppelter
stream.onlineerzeugt keinen zweiten Post. - Story-Bild ist 1080x1920, Text ist auf dem Handy lesbar.