Files
abdulive/docs/05-setup.md
T
ZeasyAlexandClaude Opus 5 d07c18441b S1: Einrichtungs-Assistent, Twitch-Auth, Datenbank und Chat-Aufnahme
Zugangsdaten kommen jetzt aus der App statt aus einer .env: ein
Einrichtungs-Assistent auf http://localhost:4792/setup nimmt Client-ID,
Secret und OBS-Passwort entgegen, der OAuth-Rueckruf laeuft auf denselben
Server. Gespeichert wird verschlueselt (AES-256-GCM) in einem Volume,
bewusst nicht in der Datenbank - die wird auf die Windows-Seite gesichert.
Siehe ADR-0005.

Technikbasis vereinfacht: Node 24 bringt node:sqlite, WebSocket, fetch und
die Ausfuehrung von TypeScript mit. Das Projekt hat damit null
Laufzeitabhaengigkeiten und keinen Build-Schritt; pnpm-Workspaces und die
Paketmanifeste sind entfallen, Importe laufen ueber die imports-Map der
Wurzel-package.json. erasableSyntaxOnly verhindert Syntax, die das Type
Stripping stillschweigend entfernen wuerde. Siehe Nachtrag 2 in ADR-0001.

Enthalten:
- packages/core: Config, Layout, Logger mit Secret-Maskierung, Retry, YAML
- packages/db: Migrationen, Repositories, alle SQL-Anweisungen an einem Ort
- packages/twitch: Secret-Speicher, OAuth, Helix mit Token-Bucket, IRC
- apps/ingest: Daemon, Einrichtungsseite, Spike-Erkennung
- 20 Tests (IRC-Parser, Spike-Detektor, Datenbankschicht)

Der Chat verbindet sich anonym, solange nichts hinterlegt ist - damit laesst
sich die Datenaufnahme pruefen, bevor die Twitch-Apps existieren.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013VTGjd92LsDDWF3frd9FTB
2026-09-09 09:56:55 +02:00

4.2 KiB

Setup

Alles läuft in Containern. Auf dem Rechner selbst wird nur Docker Desktop und OBS gebraucht — ffmpeg, whisper.cpp, Node und pnpm stecken im Image. Begründung: ADR-0004.

Voraussetzungen

Was Version Wo
Docker Desktop aktuell, WSL2-Backend Host
OBS Studio 30+ mit obs-websocket v5 Host
Git beliebig Host

Alles Weitere (Node 22, pnpm, ffmpeg mit libx264/libass, whisper.cpp, Sprachmodell) liefert das Image.

WSL2 begrenzen

Docker Desktop startet eine VM, die sich ohne Grenze so viel RAM nimmt, wie sie kriegen kann. Auf einem Stream-PC ist das nicht egal. %USERPROFILE%\.wslconfig anlegen:

[wsl2]
memory=4GB
processors=4
swap=2GB

Danach wsl --shutdown und Docker Desktop neu starten.

Twitch-Apps anlegen

Zwei Anwendungen unter https://dev.twitch.tv/console/apps:

  1. abdulive-toolkit — OAuth Redirect http://localhost:4792/callback
  2. abdulive-bot — gleicher Redirect

Client-ID und Client-Secret nicht in eine Datei eintragen, sondern später im Einrichtungs-Assistenten einfügen (siehe unten). Begründung: ADR-0005.

OBS vorbereiten

  1. obs-websocket aktivieren: Werkzeuge → WebSocket-Servereinstellungen → Server aktivieren, Port 4455, Passwort setzen — eingetragen wird es später im Einrichtungs-Assistenten.
  2. Wiedergabepuffer aktivieren: Einstellungen → Ausgabe → Wiedergabepuffer, 90 Sekunden. Den Zielordner merken und in .env als OBS_REPLAY_DIR eintragen — mit Forward-Slashes, z. B. C:/Users/abdu/Videos/replay.
  3. Hotkey setzen: Einstellungen → Hotkeys → „Wiedergabepuffer speichern". Das ist der Clip-Knopf. Ein globaler Windows-Hotkey wird bewusst nicht gebaut — aus einem Container ist er nicht abfangbar, und OBS meldet den gespeicherten Puffer ohnehin über WebSocket.
  4. Getrennte Audiospuren (bereits eingerichtet): Mikrofon auf Spur 2, Spielton auf Spur 3, Mischung auf Spur 1. Die Untertitel werden aus Spur 2 erzeugt - das ist bei lauten Spielen der Unterschied zwischen brauchbarem und unbrauchbarem Transkript. Einstellungen -> Ausgabe -> Aufnahme -> Audiospuren, und im Audiomixer je Quelle die Spurzuordnung pruefen.
  5. Browser-Sources (erst ab Meilenstein M3 relevant): „Browser-Quelle beim Szenenwechsel neu laden" aus, sonst brechen laufende Effekte ab.

Erste Einrichtung

Copy-Item config\config.example.yaml config\config.yaml

docker compose build
docker compose run --rm toolkit check-env      # ffmpeg, whisper, Modell, Volumes, Layout
docker compose run --rm toolkit fetch-model    # Sprachmodell, ca. 465 MB
docker compose up -d

Dann http://localhost:4792/setup öffnen. Dort werden nacheinander eingetragen:

  1. Client-ID und Client-Secret der beiden Twitch-Apps
  2. „Mit Twitch verbinden" für Broadcaster- und Bot-Konto (OAuth)
  3. obs-websocket-Passwort
  4. später: Discord-Webhook, Bluesky-Zugang

Alles landet verschlüsselt im Docker-Volume, nicht in einer Datei im Projekt.

Diese Seite zeigt Zugangsdaten. Nicht öffnen, während gesendet wird.

Eine .env ist optional und enthält nur noch den Pfad zum Wiedergabepuffer und das Log-Level (Vorlage: .env.example).

Facecam einmessen

Einmalig, sobald eine Replay-Datei vorliegt:

docker compose run --rm toolkit calibrate

Legt einen Frame als PNG in data/clips/_calibration/ ab, fragt die vier Crop-Werte ab und schreibt sie nach config/layout.yaml.

Betrieb

docker compose up -d          # startet
docker compose logs -f        # Logs
docker compose down           # stoppt

Sichtungsseite: http://localhost:4792

Backup

.\scripts\backup.ps1

Kopiert die Datenbank per VACUUM INTO aus dem Volume abdulive-db nach data/db/backup/ und hält 30 Generationen. Die DB liegt bewusst in einem Docker-Volume und nicht in einem Windows-Ordner — Dateisperren über die WSL2-Brücke sind für SQLite nicht verlässlich.

Was nicht ins Repo gehört

.env, config/config.yaml, alles unter data/. Steht in .gitignore. Die Datenbank enthält personenbezogene Daten (Chatverläufe, Notizen zu Zuschauern) und darf nicht committet oder geteilt werden.