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
5.5 KiB
Setup
Eine native Windows-Anwendung. Node, ffmpeg, whisper.cpp und die Schriften sind mitgeliefert — vorausgesetzt wird nur OBS. Begruendung: ADR-0007.
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:
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:
.\install.ps1 -Quelle https://.../abdulive
Ein
irm … | iex-Einzeiler funktioniert mitgit.zeasy.devnicht. Die Instanz verlangt fuer alles eine Anmeldung und antwortet mit einer Umleitung auf/user/login;iexfuehrt 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:
abdulive-toolkit— OAuth Redirecthttp://localhost:4792/callbackabdulive-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
- obs-websocket aktivieren: Werkzeuge → WebSocket-Servereinstellungen → Server aktivieren, Port 4455, Passwort setzen — eingetragen wird es später im Einrichtungs-Assistenten.
- Wiedergabepuffer aktivieren: Einstellungen → Ausgabe → Wiedergabepuffer,
90 Sekunden. Den Zielordner merken und in
.envalsOBS_REPLAY_DIReintragen — mit Forward-Slashes, z. B.C:/Users/abdu/Videos/replay. - 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.
- 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.
- Browser-Sources (erst ab Meilenstein M3 relevant): „Browser-Quelle beim Szenenwechsel neu laden" aus, sonst brechen laufende Effekte ab.
Erste Einrichtung
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
abdulive calibrate
Legt einen Frame als PNG unter %LOCALAPPDATA%\abdulive\clips\_calibration
ab und rendert die 9:16-Vorschau dazu. Anleitung: obs-layout.md.
Welche OBS-Quelle im Ausschnitt landet — etwa fremde Untertitel:
abdulive sources
Betrieb
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
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:
Stop-ScheduledTask -TaskName abdulive; Start-ScheduledTask -TaskName abdulive
Die Aufgabe abdulive-update macht die Pruefung taeglich um 05:00 von selbst.
Backup
.\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 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.