Kapitel 13/Tutorial.md aktualisiert

This commit is contained in:
2025-08-27 12:18:33 +00:00
parent c750272395
commit a4d0fe96e1

View File

@@ -190,3 +190,157 @@ Inhalt:
--- ---
Damit ist der Clipper-LXC vorbereitet: Benutzer, Verzeichnisse, Pakete, Konfiguration und Einstiegsskripte sind eingerichtet. In den nächsten Abschnitten bauen wir die Anbindung an Twitch/n8n, implementieren die Analyse-Logik (inklusive Facecam, Hochformat und Untertitel) und fügen den eigentlichen Schnitt hinzu, bevor alles sauber in Nextcloud abgelegt wird. Damit ist der Clipper-LXC vorbereitet: Benutzer, Verzeichnisse, Pakete, Konfiguration und Einstiegsskripte sind eingerichtet. In den nächsten Abschnitten bauen wir die Anbindung an Twitch/n8n, implementieren die Analyse-Logik (inklusive Facecam, Hochformat und Untertitel) und fügen den eigentlichen Schnitt hinzu, bevor alles sauber in Nextcloud abgelegt wird.
## Abschnitt 3 n8n ↔ Twitch: VOD & Clips importieren, in Nextcloud ablegen, Clipper starten
In diesem Abschnitt verbinden wir n8n mit Twitch, Nextcloud und dem Clipper. Das Ziel: n8n erkennt automatisch neue VODs auf Twitch, lädt sie zusammen mit Clips herunter, legt sie in Nextcloud ab und startet dann die Analyse auf dem Clipper. Wir gehen Schritt für Schritt vor immer mit klaren Hinweisen, ob wir uns gerade in der **n8nWeboberfläche**, im **Terminal** oder in **Nextcloud** befinden.
> **Entscheidung & Begründung Rollenverteilung**
> **n8n** steuert (APIs, Logik, Benachrichtigungen). **Clipper** arbeitet (Download, Analyse, Schnitt). **Nextcloud** speichert (Archiv & Übergabe). So bleibt n8n schlank und ausfallsicher, während Clipper CPU/IO für Medienjobs bekommt.
---
### Schritt 1: Zugriff zwischen den Containern vorbereiten (Terminal)
Melde dich zuerst im **Terminal deines n8nLXC** an. Wir richten hier die Verbindung zum Clipper und zu Nextcloud ein.
**SSHSchlüssel für Clipper erzeugen:**
```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 ClipperLXC (z.B. `10.0.0.42`). Wenn **OK** erscheint, kann n8n ohne Passwort auf den Clipper zugreifen.
**AppPasswort für Nextcloud:**
Melde dich nun in der **NextcloudWeboberfläche** an. Gehe in dein Benutzerprofil → *Sicherheit**AppPasswörter* und erzeuge ein neues Passwort. Notiere dir Benutzername + AppPasswort. Diese nutzt n8n später für den Upload via WebDAV. Die Adresse sieht so aus:
```
https://<DEINE_NEXTCLOUD_DOMAIN>/remote.php/dav/files/<DEIN_NC_BENUTZER>/
```
Beispiel: `https://cloud.example.com/remote.php/dav/files/streamer/`
**TwitchAPI Zugang:**
Gehe in die [Twitch Developer Console](https://dev.twitch.tv/console), lege eine App an und notiere **Client ID** und **Client Secret**. Danach öffne die **n8nWeboberfläche** in deinem Browser (`http://<DEINE_N8N_DOMAIN>:5678`), melde dich an und gehe links auf **Credentials****+ Add Credential** → *OAuth2 API*.
- Grant Type: *Client Credentials*
- Access Token URL: `https://id.twitch.tv/oauth2/token`
- Client ID / Secret eintragen
- Speichern und testen.
Referenz: [Twitch AuthDoku](https://dev.twitch.tv/docs/authentication)
> **Entscheidung & Begründung Warum ClientCredentials?**
> Für **Get Users**, **Get Videos**, **Get Clips** reicht ein AppToken. Der Flow ist stabil, ohne UserLogin/RefreshTokenPflege.
---
### Schritt 2: TwitchUserID herausfinden (n8nWeboberfläche)
Die TwitchAPI benötigt deine **numerische UserID**, nicht den LoginNamen. Wir holen diese ID einmalig in n8n.
1. Gehe in der n8nWeboberfläche auf **Workflows****+ New Workflow**.
2. Ziehe einen **HTTP Request Node** auf die Arbeitsfläche.
3. Konfiguriere ihn so:
- Methode: GET
- URL: `https://api.twitch.tv/helix/users?login=<DEIN_LOGIN>`
- Authentifizierung: OAuth2 Credential (aus Schritt 1)
- Header: `Client-Id: <DEINE_CLIENT_ID>`
4. Klicke auf **Execute Node**.
5. Im Ergebnis findest du im Feld `data[0].id` deine **UserID** (z.B. `123456789`). Diese Zahl ist entscheidend und ersetzt ab jetzt `<DEINE_TWITCH_USER_ID>` in allen weiteren Schritten.
Referenz: [Get Users](https://dev.twitch.tv/docs/api/reference#get-users)
> **Entscheidung & Begründung Login vs. UserID**
> Der „Login“ ist nur ein Anzeigename. Die API filtert zuverlässig über die **numerische ID** deshalb holen wir sie einmalig und verwenden sie konsequent.
---
### Schritt 3: Workflow bauen (n8nWeboberfläche)
Jetzt bauen wir den eigentlichen Workflow, der regelmäßig neue VODs prüft, herunterlädt und ablegt.
1. **CronTrigger anlegen:**
- Ziehe einen **Cron Node** auf die Arbeitsfläche.
- Stelle ihn auf „Every 10 minutes“.
Damit prüft n8n alle 10 Minuten auf neue VODs.
2. **VODDaten abrufen:**
- Ziehe einen weiteren **HTTP Request Node** an den CronNode.
- URL:
```
https://api.twitch.tv/helix/videos?user_id=<DEINE_TWITCH_USER_ID>&type=archive&first=1
```
- Auth: OAuth2 Credential
- Header: `Client-Id: <DEINE_CLIENT_ID>`
- Ergebnis: In `data[0]` stehen `id`, `title`, `url`, `created_at`, `published_at`.
Referenz: [Get Videos](https://dev.twitch.tv/docs/api/reference#get-videos)
3. **Clips abrufen (optional):**
- Ziehe einen weiteren **HTTP Request Node** an.
- URL:
```
https://api.twitch.tv/helix/clips?broadcaster_id=<DEINE_TWITCH_USER_ID>&started_at=<created_at>&ended_at=<published_at>
```
- Ergebnis: Liste mit Clips, die im Zeitraum des VOD erstellt wurden.
Referenz: [Get Clips](https://dev.twitch.tv/docs/api/reference#get-clips)
4. **VOD herunterladen (Terminal im ClipperLXC):**
Jetzt wechselst du ins **Terminal des ClipperLXC**. Stelle sicher, dass `yt-dlp` installiert ist (`apt install -y yt-dlp`). n8n ruft per SSH folgenden Befehl auf:
```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 }}
```
Damit entsteht ein Unterordner `/srv/clipper/inbox/<VOD-ID>/` mit dem Video.
> **Entscheidung & Begründung Warum lädt *Clipper* (und nicht *n8n*)?**
> VODs kommen als **HLSStreams** (m3u8, segmentiert, signiert). Ein robuster Download braucht **ytdlp/ffmpeg** mit Retry/Resume und I/OPuffer. Das ist CPU/IOlastig und gehört auf die **Werkbank** (Clipper), nicht in die **Steuerzentrale** (n8n). So bleibt n8n stabil und reagiert weiter auf Webhooks.
5. **Clips herunterladen (Terminal im ClipperLXC, optional):**
Für jeden ClipURL ruft n8n per SSH `yt-dlp` auf:
```bash
yt-dlp -o "/srv/clipper/inbox/<CLIP_ID>/%(title)s.%(ext)s" https://clips.twitch.tv/<CLIP_ID>
```
6. **Upload nach Nextcloud (n8nWeboberfläche):**
- Ziehe einen **HTTP Request Node** auf die Arbeitsfläche.
- Methode: **PUT**
- Auth: **Basic Auth** (Benutzername + AppPasswort aus Schritt 1)
- URL:
```
https://<DEINE_NEXTCLOUD_DOMAIN>/remote.php/dav/files/<DEIN_NC_BENUTZER>/Clips/{{ $json.data[0].id }}/<Dateiname>
```
- Ergebnis: In Nextcloud liegt danach ein Ordner `Clips/<VOD-ID>/…`.
> **Entscheidung & Begründung Warum Nextcloud?**
> Zentrales, versionierbares Speicherziel mit Freigaben/Quotas/Backups. Clipper und andere Systeme können darauf zugreifen, ohne erneut von Twitch laden zu müssen.
7. **Analyse starten (Terminal im ClipperLXC):**
Zum Abschluss ruft n8n per SSH das Skript `clipper-analyze` auf:
```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 erzeugt im ClipperTempOrdner eine `candidates.json`. Mit dieser arbeiten wir in Abschnitt 4 weiter.
---
### Alternative: TwitchCommunityNode (n8nWeboberfläche)
Wenn du statt HTTP Requests lieber einen fertigen TwitchNode nutzen willst, kannst du in selfhosted n8n einen **CommunityNode** installieren. Die Anleitung: [n8n Community Nodes](https://docs.n8n.io/integrations/community-nodes/). Beachte: CommunityNodes sind DrittanbieterCode und können bei Updates Probleme machen. Für einen stabilen Dauerbetrieb empfehlen wir den APIWeg mit HTTP Request.
---
### Kontrolle
Nach einem erfolgreichen Durchlauf prüfst du im **Terminal des ClipperLXC**:
```bash
su - clipper
ls -lh /srv/clipper/inbox/<VOD-ID>
tail -n 50 /srv/clipper/logs/clipper.log
```
Und in der **NextcloudWeboberfläche** solltest du den Ordner `Clips/<VOD-ID>` sehen. Damit ist die Pipeline geschlossen: Twitch liefert VODs, n8n steuert den Ablauf, Clipper verarbeitet, Nextcloud speichert. In Abschnitt 4 gehen wir in die AnalyseLogik und die KIAuswertung.