# 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 Das Paket herunterladen, entpacken, darin `install.ps1` ausfuehren: ```powershell Expand-Archive .\abdulive-0.5.0-win-x64.zip -DestinationPath .\abdulive .\abdulive\install.ps1 ``` Liegt das Paket an einer Adresse **ohne** Anmeldung, holt der Installer es selbst: ```powershell .\install.ps1 -Quelle https://.../abdulive ``` > Ein `irm … | iex`-Einzeiler funktioniert mit `git.zeasy.dev` nicht. Die > Instanz verlangt fuer alles eine Anmeldung und antwortet mit einer Umleitung > auf `/user/login`; `iex` fuehrt dann die Anmeldeseite als PowerShell aus. > Wo die Pakete liegen sollen, ist noch zu entscheiden. 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 ```powershell abdulive check-env # ffmpeg, whisper, Schriften, Verzeichnisse, Layout abdulive fetch-model # Sprachmodell, ca. 465 MB Start-ScheduledTask -TaskName abdulive ``` Dann **http://localhost:4792/setup** oeffnen: Client-ID und Secret der beiden Twitch-Apps eintragen und je einmal auf „Mit Twitch verbinden" klicken. ## 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.