Neue Aktion `liegestuetze` fuer Belohnungen: jede Einloesung zaehlt um `anzahl` hoch (Vorgabe 5). Der Stand liegt in der Datenbank und uebersteht einen Neustart. Browser-Source /liegestuetze zeigt ihn, die Uebersichtsseite hat Knoepfe zum Herunterzaehlen und Setzen. Nebenbei: POST /tts landete bei der Overlay-Seite statt bei der Freigabe. Seiten werden jetzt nur noch bei GET ausgeliefert. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
186 lines
6.3 KiB
YAML
186 lines
6.3 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: "https://git.zeasy.dev/ZeasyAlex/abdulive/releases/download/latest"
|
|
|
|
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.
|
|
|
|
# Go-Live-Ankuendigung auf Discord.
|
|
#
|
|
# mode: live -> Post in #ankuendigungen, mit Ping an die Rolle Live-Ping
|
|
# draft -> derselbe Post in #technik-log, ohne Ping. Zum Zusehen.
|
|
#
|
|
# Zum Ausprobieren, ohne auf einen Stream zu warten:
|
|
# abdulive golive:test (interner Kanal, ohne Ping)
|
|
# abdulive golive:test --echt (echter Kanal, mit Ping)
|
|
broadcaster:
|
|
enabled: true
|
|
mode: live
|
|
# Twitch setzt Titel und Kategorie erst kurz nach dem Start. Wer sofort
|
|
# postet, kuendigt regelmaessig den Titel des letzten Streams an.
|
|
delaySecondsAfterOnline: 60
|
|
# Innerhalb dieser Zeit wird kein zweites Mal angekuendigt. Faengt den Fall
|
|
# ab, dass Twitch nach einem Aussetzer eine neue Stream-ID vergibt.
|
|
cooldownHours: 6
|
|
pingRole: Live-Ping # leer = Post ohne Ping
|
|
obsScreenshot: true # Vorschaubild aus OBS statt von Twitch
|
|
platforms:
|
|
discord: true
|
|
bluesky: false # noch nicht gebaut
|
|
mastodon: false
|
|
instagramStoryImage: false
|
|
|
|
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
|
|
# Kanalpunkt-Belohnungen und was sie ausloesen.
|
|
#
|
|
# Zugeordnet wird ueber den Titel der Belohnung auf Twitch (Gross-/Klein-
|
|
# schreibung egal) oder ueber die stabile ID; liegt beides vor, gewinnt die ID.
|
|
# Belohnungen, die hier nicht stehen, werden protokolliert und sonst in Ruhe
|
|
# gelassen - nicht jede Belohnung geht das Toolkit etwas an.
|
|
#
|
|
# Aktionen: konfetti | emote-regen | einblendung | tts | liegestuetze | nichts
|
|
rewards:
|
|
enabled: false # aus, bis hier bewusst Belohnungen stehen
|
|
belohnungen: []
|
|
# Beispiel:
|
|
# belohnungen:
|
|
# - titel: Konfetti
|
|
# aktion: konfetti
|
|
# - titel: Nachricht vorlesen
|
|
# aktion: tts
|
|
# maxZeichen: 150
|
|
# - titel: 5 Liegestütze
|
|
# aktion: liegestuetze
|
|
# anzahl: 5 # so viele kommen je Einloesung dazu
|
|
tts:
|
|
# Vorgabe ist die Freigabe von Hand, und das aus gutem Grund: Kanalpunkte
|
|
# sammeln sich beim Zugucken von allein an und sind damit kaum eine
|
|
# Huerde. Auf `false` gestellt hat man eine Vorlesefunktion fuer Fremde
|
|
# im eigenen Stream. Siehe docs/projects/chat-control.md.
|
|
freigabe: true
|
|
maxZeichen: 200
|
|
# Zu langer Text wird abgelehnt, nicht gekuerzt - ein halb vorgelesener
|
|
# Satz ist schlimmer als gar keiner.
|
|
blockliste: []
|
|
proPersonProStunde: 3
|
|
# Gesprochen wird im Hub mit Piper, nicht im Browser - dort haengt die
|
|
# Stimme am Rechner, der streamt. Name einer Datei unter models/piper/
|
|
# (ohne .onnx) oder ein absoluter Pfad. Einrichten: scripts/install-piper.sh
|
|
stimme: de_DE-thorsten-medium
|
|
# Nur bei Stimmen mit mehreren Sprechern, z. B. de_DE-mls-medium (0-235).
|
|
# Die klang im Stream allerdings verwaschen.
|
|
# sprecher: 0
|
|
|
|
# Overlay-Server. Zugleich die einzige Tuer nach aussen, wenn der Dienst
|
|
# zentral laeuft: Uebersicht, Einrichtung und OAuth-Rueckruf haengen daran.
|
|
overlay:
|
|
port: 4791
|
|
enabled: true
|
|
|
|
# Oeffentliche Adresse, ohne Schraegstrich am Ende.
|
|
#
|
|
# Leer = der Dienst laeuft lokal und bindet an 127.0.0.1. Ist etwas gesetzt,
|
|
# bindet er an 0.0.0.0 (der Reverse-Proxy sitzt in einem anderen Container)
|
|
# und der OAuth-Rueckruf von Twitch geht an <publicUrl>/callback - genau so
|
|
# muss er auch in der Twitch-App hinterlegt sein.
|
|
#
|
|
# Die Umgebungsvariable PUBLIC_URL gewinnt gegen diesen Wert.
|
|
publicUrl: ""
|
|
|
|
dashboard:
|
|
port: 4792
|
|
ingestServer:
|
|
port: 4790
|