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
157 lines
5.5 KiB
Markdown
157 lines
5.5 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
|
|
|
|
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.
|