Files
abdulive/docs/05-setup.md
T

151 lines
5.3 KiB
Markdown

# Setup
Eine native Windows-Anwendung. Node, ffmpeg, whisper.cpp und die Schriften
sind mitgeliefert — vorausgesetzt wird nur OBS.
Begruendung: [ADR-0007](decisions/ADR-0007-native-windows.md).
## Voraussetzungen
| Was | Version | Anmerkung |
|---|---|---|
| Windows | 10 oder 11, 64 Bit | |
| OBS Studio | 30+ mit obs-websocket v5 | derselbe Rechner |
Mehr nicht. Kein Docker, kein WSL2, kein Compiler, kein Git.
## Installieren
```powershell
irm https://git.zeasy.dev/ZeasyAlex/abdulive/raw/branch/main/scripts/install.ps1 | iex
```
Alternativ das Paket von der Releases-Seite laden, entpacken und darin
`install.ps1` ausfuehren - dasselbe Skript, es merkt selbst, dass das
Paket schon danebenliegt.
Der Installer laeuft **ohne Administratorrechte**:
| Was | Wohin |
|---|---|
| Programm | `%LOCALAPPDATA%\Programs\abdulive` |
| Daten, Datenbank, Clips | `%LOCALAPPDATA%\abdulive` |
| Autostart | Aufgabe `abdulive`, bei der Anmeldung |
| Update-Pruefung | Aufgabe `abdulive-update`, taeglich 05:00 |
Beim ersten Start warnt Windows SmartScreen vor einem unbekannten Herausgeber —
das Paket ist nicht signiert. Einmal auf *Weitere Informationen* → *Trotzdem
ausfuehren*.
## 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](decisions/ADR-0005-zugangsdaten.md).
## 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
Der Installer erledigt das schon: Sprachmodell laden, Selbsttest, Daemon
starten, warten bis die Oberflaeche antwortet, Browser oeffnen.
Auf der Einrichtungsseite dann Client-ID und Secret der beiden Twitch-Apps
eintragen und je einmal auf „Mit Twitch verbinden" klicken.
Von Hand geht es auch:
```powershell
abdulive check-env # ffmpeg, whisper, Schriften, Verzeichnisse, Layout
abdulive fetch-model # Sprachmodell, ca. 465 MB
Start-ScheduledTask -TaskName abdulive
```
## Layout einmessen
```powershell
abdulive calibrate
```
Legt einen Frame als PNG unter `%LOCALAPPDATA%\abdulive\clips\_calibration`
ab und rendert die 9:16-Vorschau dazu. Anleitung: [`obs-layout.md`](obs-layout.md).
Welche OBS-Quelle im Ausschnitt landet — etwa fremde Untertitel:
```powershell
abdulive sources
```
## Betrieb
```powershell
Start-ScheduledTask -TaskName abdulive # startet
Stop-ScheduledTask -TaskName abdulive # stoppt
Get-Content "$env:LOCALAPPDATA\abdulive\logs\abdulive.log" -Wait -Tail 40
```
Sichtungsseite: http://localhost:4792
## Aktualisieren
```powershell
abdulive update
```
Prueft das Manifest, laedt das Paket, vergleicht die SHA256 und legt es
bereit. Die Adresse steht in `config.yaml` unter `update.url` und hat
**keine Vorgabe** — ohne Eintrag sagt der Befehl das auch. Liegt die Ablage
hinter einer Anmeldung, gehoert ein Lese-Token in den verschluesselten
Speicher (Einrichtungsseite), nicht in die `config.yaml`. **Eingespielt wird es beim naechsten Start** — waehrend eines Streams
wird nichts ausgetauscht. Sofort uebernehmen:
```powershell
Stop-ScheduledTask -TaskName abdulive; Start-ScheduledTask -TaskName abdulive
```
Die Aufgabe `abdulive-update` macht die Pruefung taeglich um 05:00 von selbst.
## Backup
```powershell
.\scripts\backup.ps1
```
Kopiert die Datenbank per `VACUUM INTO` aus `%LOCALAPPDATA%\abdulive\db`
nach `backup\` und haelt 30 Generationen. `VACUUM INTO` und nicht einfach
kopieren: die Datei wird im laufenden Betrieb gesichert, und ein Kopieren
waehrend eines Schreibvorgangs ergaebe eine unbrauchbare Sicherung.
Die Datenbank liegt seit [ADR-0007](decisions/ADR-0007-native-windows.md)
in einem gewoehnlichen Windows-Ordner. Der Grund fuer das fruehere
Docker-Volume - unzuverlaessige Dateisperren ueber die WSL2-Bruecke - ist
mit dem Container weggefallen.
## 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.