Files
Homelab--Bratonein-Kontroll…/Kapitel 13/Tutorial.md

105 lines
6.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## Abschnitt 3 n8n ↔ Twitch: VOD & Clips importieren, in Nextcloud ablegen, Clipper starten
In diesem Abschnitt verbinden wir n8n mit Twitch, legen die Dateien auf dem Clipper ab und laden sie nach Nextcloud hoch. **Wichtig:** Twitch unterscheidet zwischen deinem **Login** (sichtbarer Kanalname, z. B. `bratonien_tv`) und deiner **User-ID** (eine **numerische** Kennung, z. B. `123456789`). **Alle** späteren Abfragen nutzen die **User-ID**, nicht den Login. Wir holen sie zuerst und tragen sie dann überall ein.
---
### Schritt 1: Zugänge vorbereiten
**1.1 SSH von n8n → Clipper (passwortlos)**
Wechsle in den **n8n-LXC** und richte eine Schlüssel-Anmeldung zum **Clipper-LXC** ein:
```bash
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -N ""
ssh-copy-id clipper@<CLIPPER-IP>
ssh clipper@<CLIPPER-IP> "echo OK"
```
Ersetze `<CLIPPER-IP>` durch die IP/den Hostnamen deines Clipper-Containers (z. B. `10.0.0.42`). Wenn **OK** erscheint, steht die Verbindung.
**1.2 Nextcloud App-Passwort (WebDAV)**
Erzeuge in Nextcloud (*Einstellungen → Sicherheit → App-Passwörter*) ein App-Passwort. n8n verwendet später **Basic Auth** (Benutzername = `<DEIN_NC_BENUTZER>`, Passwort = App-Passwort) gegen **genau** dieses WebDAV-Schema:
```
https://<DEINE_NEXTCLOUD_DOMAIN>/remote.php/dav/files/<DEIN_NC_BENUTZER>/
```
Beispiel: `https://stream.example.com/remote.php/dav/files/streamer/`
**1.3 Twitch OAuth (Client-Credentials)**
Lege in der [Twitch Developer Console](https://dev.twitch.tv/console) eine App an und notiere **Client ID** und **Client Secret**. In n8n → **Credentials → OAuth2**:
Grant Type = *Client Credentials*, Access Token URL = `https://id.twitch.tv/oauth2/token`, Client ID/Secret eintragen, speichern. Details zum Auth-Flow findest du auch in der [Twitch Auth-Dokumentation](https://dev.twitch.tv/docs/authentication).
---
### Schritt 2: Deine Twitch **User-ID** (numerisch) einmalig ermitteln
Viele scheitern hier: Die Helix-API benötigt **immer** die **User-ID**, nicht den Login. Wir holen sie in n8n mit einem **HTTP Request**. Setze das eben angelegte OAuth2-Credential ein und trage zusätzlich den Header `Client-Id: <DEINE_CLIENT_ID>` ein. URL:
```
https://api.twitch.tv/helix/users?login=<DEIN_LOGIN>
```
Ersetze `<DEIN_LOGIN>` durch deinen **sichtbaren Kanal-Login**, exakt wie auf Twitch (z. B. `bratonien_tv`). Die Antwort enthält unter `data[0].id` deine **User-ID** (z. B. `123456789`). Notiere diese Zahl und verwende sie ab jetzt überall als `<DEINE_TWITCH_USER_ID>`. Offizielle Referenz: [Twitch API Get Users](https://dev.twitch.tv/docs/api/reference#get-users).
---
### Schritt 3: Workflow in n8n VOD erkennen → herunterladen → Nextcloud → Analyse
**3.1 Neueste VOD-Metadaten holen (mit User-ID, nicht Login)**
Lege in n8n einen **Cron**-Trigger (z. B. alle 10 Minuten) an. Dahinter ein **HTTP Request**:
```
https://api.twitch.tv/helix/videos?user_id=<DEINE_TWITCH_USER_ID>&type=archive&first=1
```
Auch hier: OAuth2-Credential + Header `Client-Id: <DEINE_CLIENT_ID>`. In `data[0]` stehen `id`, `title`, `url`, `created_at`, `published_at`. Speichere die letzte verarbeitete `id` in der **Static Data**; wenn die neue `id` identisch ist, beende den Lauf.
Offizielle Referenz: [Twitch API Get Videos](https://dev.twitch.tv/docs/api/reference#get-videos).
**3.2 (Optional) Clips zum VOD laden**
Füge einen zweiten **HTTP Request** an, der die Clips im Zeitraum des VOD abruft. Nutze **die numerische User-ID** als `broadcaster_id` und die ISO-Zeitstempel aus dem VOD:
```
https://api.twitch.tv/helix/clips?broadcaster_id=<DEINE_TWITCH_USER_ID>&started_at=<created_at>&ended_at=<published_at>
```
Das Ergebnis ist eine Liste mit Clip-IDs (z. B. `AgileClip-XYZ`). Offizielle Referenz: [Twitch API Get Clips](https://dev.twitch.tv/docs/api/reference#get-clips).
**3.3 VOD direkt auf dem Clipper speichern (SSH)**
Damit große Dateien nicht zwischen Containern geschoben werden, lädt der **Clipper-LXC** selbst. In n8n fügst du einen **Execute Command (SSH)** ein (Ziel: `clipper@<CLIPPER-IP>`):
```bash
mkdir -p "/srv/clipper/inbox/{{ $json.data[0].id }}"
yt-dlp -o "/srv/clipper/inbox/{{ $json.data[0].id }}/%(title)s.%(ext)s" {{ $json.data[0].url }}
```
So entsteht lokal `/srv/clipper/inbox/<VOD-ID>/Titel.mp4`. Achte auf die Anführungszeichen viele Titel enthalten Leerzeichen.
**3.4 (Optional) Twitch-Clips ablegen**
Für jeden Clip rufst du per SSH `yt-dlp` mit der öffentlichen URL auf (z. B. `https://clips.twitch.tv/<CLIP_ID>`). Lege je Clip einen Unterordner an, damit alles getrennt bleibt (z. B. `/srv/clipper/inbox/<CLIP_ID>/…`).
**3.5 Upload nach Nextcloud (WebDAV, Basic Auth)**
In n8n nutzt du für **jede Datei** einen **HTTP Request** (Methode **PUT**) auf das WebDAV-Ziel. Zusammensetzung des Pfads:
```
https://<DEINE_NEXTCLOUD_DOMAIN>/remote.php/dav/files/<DEIN_NC_BENUTZER>/Clips/{{ $json.data[0].id }}/<Dateiname>
```
Beispiel: `https://stream.example.com/remote.php/dav/files/streamer/Clips/2075310051/Titel.mp4`
**3.6 Analyse auf dem Clipper starten**
Zum Schluss stößt n8n die Analyse mit einer **eindeutigen Job-ID** an. Per SSH:
```bash
/srv/clipper/bin/clipper-analyze \
"/srv/clipper/inbox/{{ $json.data[0].id }}/{{ $json.data[0].title }}.mp4" \
"vod-{{ $json.data[0].id }}"
```
Das Skript legt eine `candidates.json` im temporären Job-Ordner an. Mit dieser Datei arbeiten wir in Abschnitt 4 weiter.
---
### Alternativ (wenn du möchtest): Twitch-Community-Node in n8n
Falls du statt „HTTP Request“ einen **fertigen Twitch-Node** verwenden willst, kannst du in self-hosted n8n einen **Community-Node** installieren. Das ist bequemer, erfordert aber zusätzliche Pflege (Updates, öffentliche Erreichbarkeit für Webhooks). Für einen robusten Dauerbetrieb bleibt der oben beschriebene Weg über die **offizielle Helix-API** die zuverlässigste Variante. Mehr Infos findest du im [n8n Community Nodes Guide](https://docs.n8n.io/integrations/community-nodes/).
---
### Kurz prüfen, ob alles passt
Logge dich auf dem Clipper ein und kontrolliere Downloads und Logs:
```bash
su - clipper
ls -lh /srv/clipper/inbox
ls -lh /srv/clipper/inbox/<VOD-ID>
tail -n 80 /srv/clipper/logs/clipper.log
```
In Nextcloud sollte ein Ordner `Clips/<VOD-ID>/…` mit den Dateien erscheinen. Bei 401/403-Fehlern prüfe **Twitch-Headers (OAuth2 + Client-Id)** und **Nextcloud-Pfad/Anmeldedaten** exakt Groß/Kleinschreibung und der Teil `remote.php/dav/files/…` sind entscheidend.
Damit ist die Twitch-Anbindung vollständig implementiert: n8n erkennt neue VODs, lädt VOD und Clips auf dem Clipper, speichert alles strukturiert in Nextcloud und startet die Analyse. Im nächsten Abschnitt kombinieren wir die Clipper-Analyse mit der KI-Auswertung und erzeugen daraus belastbare Schnittbereiche.