Files
abdulive/config/config.example.yaml
T
ZeasyAlexandClaude Opus 5 5f6301268a Native Windows-Auslieferung statt Container
Docker faellt weg. Das Projekt hat keine npm-Abhaengigkeiten und Node fuehrt
TypeScript direkt aus - der Container schrieb nur noch drei Programme fest,
und dafuer braucht es keine Virtualisierung, sondern einen Ordner.

Der Anlass war, dass ADR-0004 zwar `docker compose pull` versprach, es aber
nie ein veroeffentlichtes Image gab. Wer installieren wollte, musste
whisper.cpp aus dem Quelltext uebersetzen.

Plattformschicht (packages/core/src/platform.ts):
- Programme werden neben der Anwendung gesucht, nicht im PATH
- Daten unter %LOCALAPPDATA%, damit Installation und Update ohne
  Administratorrechte auskommen
- Schriften mitgeliefert: ohne fontsdir setzt libass wortlos eine
  Ersatzschrift ein - gemessen 720 statt 826 Pixel Zeilenbreite

Windows-Eigenheiten, an echtem ffmpeg 8.1 durchprobiert:
- Pfade im Filtergraphen brauchen alle drei Schritte (Vorwaertsschraegstriche,
  escapter Doppelpunkt, Anfuehrungszeichen); je zwei davon reichen nicht
- `nice` gibt es nicht, ersetzt durch os.setPriority

Auslieferung:
- scripts/build-package.ts baut das Paket, laeuft auch unter Linux
- install.ps1 ohne Administratorrechte, Autostart ueber den Aufgabenplaner
- update legt neue Fassungen bereit; eingespielt wird beim naechsten Start,
  nie mitten im Stream
- ZIP lesen und schreiben ohne Abhaengigkeiten (packages/core/src/zip.ts)

Kein `irm ... | iex`-Einzeiler: git.zeasy.dev antwortete instanzweit mit einer
Umleitung auf /user/login, und `iex` fuehrte die Anmeldeseite als PowerShell
aus. Der Updater verfolgt Umleitungen jetzt nicht und hat keine erfundene
Vorgabeadresse mehr.

Ausserdem: backup.ps1 war an zwei Stellen dokumentiert, aber nie geschrieben.

ADR-0007 ersetzt ADR-0004. 84 Tests, Typpruefung sauber.

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

118 lines
3.2 KiB
YAML

# Kopie als config/config.yaml anlegen. Secrets gehoeren in .env, nicht hierher.
channel:
login: abdulive_
userId: "" # wird beim ersten `pnpm auth` gefuellt
language: de
timezone: Europe/Berlin
bot:
login: abdulive_bot
ingest:
viewerPollSeconds: 60
chattersPollSeconds: 300
sessionGapMinutes: 5 # kuerzere Luecken gelten als derselbe Stream
spike:
windowSeconds: 15
baselineMinutes: 10
factor: 3
minDelta: 4
cooldownSeconds: 60
armed: false # erst nach Kalibrierung auf true
laughEmotes: [KEKW, LUL, OMEGALUL, PogChamp, Pog]
# Woher `abdulive update` neue Fassungen holt. Erwartet wird dort
# `abdulive.json` und die darin genannte ZIP-Datei.
#
# Leer = keine automatischen Updates. Liegt die Adresse hinter einer
# Anmeldung (privates Gitea), gehoert der Zugriffstoken NICHT hierher,
# sondern auf die Einrichtungsseite - siehe ADR-0005.
update:
url: ""
obs:
url: ws://127.0.0.1:4455
replayBufferSeconds: 90
chapterScenes: [Gameplay, "Just Chatting", Startbildschirm]
clipper:
enabled: true
source: obs-replay # obs-replay | twitch
alsoCreateTwitchClip: true
# Aus dem 90-Sekunden-Puffer werden die letzten Sekunden genommen -
# dort liegt der Moment, der die Ausloesung verursacht hat.
tailSeconds: 45
renderWhileLive: false # true = sofort rendern, false = erst nach Streamende
audio:
# OBS nimmt getrennte Spuren auf. Untertitel entstehen NUR aus dem Mikrofon -
# Spielton im Transkript macht Whisper unbrauchbar. Die Spur im fertigen
# Video bleibt die Mischung.
transcribeTrack: 2 # OBS-Spur mit dem Mikrofon
outputTrack: 1 # OBS-Spur mit der Mischung (kommt ins Short)
whisper:
binary: whisper-cli # whisper.cpp, im Image enthalten
model: ggml-small.bin
language: de
threads: 4
ffmpeg:
preset: veryfast
crf: 20
encoder: libx264 # keine NVIDIA-GPU da, QSV aus WSL2 unzuverlaessig
niceness: 15 # Encoding laeuft nachrangig zum Stream
# Abklingzeiten sind nicht optional: ohne sie ist !clip nach zwei Streams aus.
cooldownGlobalSeconds: 60
cooldownUserSeconds: 300
followersOnly: false
triggers:
chatCommand: "!clip"
onSpike: false # erst nach Kalibrierung der Spitzen-Erkennung
# Der Hotkey wird in OBS auf "Wiedergabepuffer speichern" gelegt. Es gibt
# bewusst keinen eigenen Hotkey-Dienst - siehe ADR-0004, Punkt 4.
broadcaster:
enabled: true
mode: draft # draft | live
delaySecondsAfterOnline: 60
cooldownHours: 6
platforms:
discord: true
bluesky: true
mastodon: false
instagramStoryImage: true
community:
greetings:
enabled: true
minSecondsBetween: 20
maxPerStream: 10
returningAfterDays: 21
milestones: [5, 10, 25, 50, 100]
suppressWhileStreamerSpeaking: true
overlayHint: true
raidScout:
minViewers: 5
maxViewers: 30
minUptimeMinutes: 30
maxUptimeMinutes: 300
languages: [de]
topN: 5
recap:
enabled: true
delayMinutesAfterOffline: 10
minStreamMinutes: 20
hideViewerNumbersIfWeak: true
topChatters: 3
topClips: 2
loyalty:
enabled: false # spaetere Ausbaustufe
overlay:
port: 4791
dashboard:
port: 4792
ingestServer:
port: 4790