Files
abdulive/docs/projects/go-live-broadcaster.md
ZeasyAlexandClaude Opus 5 d09e2b945a 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
2026-09-09 08:56:09 +02:00

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 auf stream_id geprüft.
  • Cooldown 6 h. Wenn Twitch nach einem Verbindungsabbruch ein zweites stream.online schickt, 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.online erzeugt keinen zweiten Post.
  • Story-Bild ist 1080x1920, Text ist auf dem Handy lesbar.