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,61 @@
|
||||
# 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.
|
||||
Reference in new issue
Block a user