Compare commits

..

2 Commits

Author SHA1 Message Date
891886b6e8 Update Handoff: yt-dlf deployed on Gisela (systemd user unit, 172.30.1.11:3300)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P1w53ybPWArpZpcei9JPYX
2026-08-29 21:36:35 +02:00
4b60070def Normalize package-lock.json (npm on Gisela drops libc fields)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P1w53ybPWArpZpcei9JPYX
2026-08-29 21:36:35 +02:00
2 changed files with 54 additions and 88 deletions

View File

@ -1,34 +1,41 @@
# yt-dlf — Handoff # yt-dlf — Handoff
> Übergabedokument für die Fortsetzung in einer Claude-Code-Session. > Übergabedokument für die Fortsetzung in einer Claude-Code-Session.
> Stand: 2026-08-29 — Untertitel-Dedup-Fix live an realen Dateien verifiziert > Stand: 2026-08-29 — App läuft produktiv auf Gisela unter
> und nach Gitea gepusht (`stwaidele/yt-dlf`, main auf `a7d7d1c`). > http://172.30.1.11:3300 (nur internes Netz), Downloads nach
> `/home/stwaidele/YouTube/<Titel>/`; live verifiziert per Testdownload.
> Dauerhafte Fakten stehen in `README.md`/`INSTALL.md`; hier steht nur, was > Dauerhafte Fakten stehen in `README.md`/`INSTALL.md`; hier steht nur, was
> **nicht** aus Code und Git-Historie ersichtlich ist. > **nicht** aus Code und Git-Historie ersichtlich ist.
**🔜 NÄCHSTE SESSION:** Weiterentwicklung findet künftig auf **Gisela** **🔜 NÄCHSTE SESSION:** Kein konkreter inhaltlicher Auftrag hinterlegt.
statt — dort von Gitea klonen (`git clone git@gitea-<slug>:stwaidele/yt-dlf.git` Arbeitskopie auf Gisela: `/home/stwaidele/Claude/yt-dlp` (Verzeichnisname
bzw. Stefans eigener Zugang) und diesen Handoff als Einstieg nehmen. ≠ Repo-Name `yt-dlf`!).
Kein konkreter inhaltlicher Auftrag hinterlegt.
## Offene Punkte ## Offene Punkte
- [ ] Deploy-Status klären — `build/` und `users.txt` liegen lokal (auf dem - [ ] `users.txt` auf Gisela anlegen, falls Login gewünscht
Mac) vor, beide gitignored; ob und wo die App produktiv läuft, ist (`python3 scripts/add_user.py <name> <pw>`, danach
nirgends festgehalten. Wichtig beim Umzug auf Gisela: gitignorte Dateien `systemctl --user restart yt-dlf`); ohne Login zeigen `ads-*.html`
(`users.txt`, `build/`, `ads-*.html`-Anpassungen) kommen **nicht** über Platzhalter-Werbung.
den Clone mit. - [ ] Leeres Repo `stwaidele/yt-dlp` auf Gitea existiert neben `yt-dlf`
Stefan entscheidet: löschen oder Projekt dorthin umziehen.
- [ ] Mac-Instanz: ob die App auf dem Mac weiterlaufen soll, ist offen;
die dortigen gitignorten Dateien (`users.txt`, `ads-*.html`-Anpassungen)
wurden nicht nach Gisela übernommen.
- [x] Deploy-Status klären (erledigt 29.08. — läuft jetzt auf Gisela,
siehe Session-Block)
## Stolperfallen ## Stolperfallen
- **Git-Konten-Mix** — Bestandsprojekt: Remote `origin` zeigt direkt auf - **Port 3000 ist auf Gisela belegt** (Open-WebUI bindet
`git@gitea.101010.cloud:stwaidele/yt-dlf.git`; dieser Host-Eintrag in `172.30.1.11:3000`) — yt-dlf läuft deshalb auf **3300**. Bei
`~/.ssh/config` (Mac) nutzt noch den alten generischen `claude`-Key. Port-Änderungen zuerst `ss -tlnp` prüfen.
Claude-Commits daher per Author-Override - **Git-Konten-Mix (nur Mac)** — auf dem Mac zeigt `origin` direkt auf
(`git -c user.name="Claude <Modell>" -c user.email="<slug>@waidele.info" commit …`), `git@gitea.101010.cloud:stwaidele/yt-dlf.git` mit dem alten generischen
Repo-Config nicht umbiegen. Push konventionsgemäß über den Modell-Alias: `claude`-Key; dort Claude-Commits per Author-Override und Push über den
`git push git@gitea-fable-5:stwaidele/yt-dlf.git main``fable-5` hat Modell-Alias. Auf **Gisela** ist das gelöst: Clone über
Write-Recht am Repo (live verifiziert 29.08.). `git@gitea-fable-5:stwaidele/yt-dlf.git`, Repo-Config steht auf
`Claude Fable 5` / `fable-5@waidele.info`.
- **Rollende Auto-Captions** — YouTube-Auto-Untertitel wiederholen in jedem - **Rollende Auto-Captions** — YouTube-Auto-Untertitel wiederholen in jedem
Cue die letzte Zeile des Vorgänger-Cues; kurze Fortsetzungen (einzelne Cue die letzte Zeile des Vorgänger-Cues; kurze Fortsetzungen (einzelne
Wörter) tragen dabei **keine** Inline-Timing-Tags. Ein Filter rein über Wörter) tragen dabei **keine** Inline-Timing-Tags. Ein Filter rein über
@ -36,6 +43,25 @@ Kein konkreter inhaltlicher Auftrag hinterlegt.
führende Wiederholungszeilen (`src/lib/subtitle.js`, führende Wiederholungszeilen (`src/lib/subtitle.js`,
`scripts/subtitle_to_markdown.py`, beide identisch halten!). `scripts/subtitle_to_markdown.py`, beide identisch halten!).
## Session 2026-08-29 — Deploy auf Gisela (Claude Fable 5)
Auftrag: yt-dlf auf Gisela betreiben, Weboberfläche nur im
WireGuard-/internen Netz, Downloads unter `/home/stwaidele/YouTube/`.
Umsetzung: Build im Repo-Checkout (`npm install && npm run build`),
systemd-**User**-Unit `~/.config/systemd/user/yt-dlf.service`
(enabled, Linger war bereits aktiv → Autostart ohne Login). Die Unit
setzt `HOST=172.30.1.11`, `PORT=3300`, `DOWNLOAD_DIR`, `YTDLP_PATH`
(yt-dlp kommt aus Linuxbrew, nicht auf dem systemd-PATH). Gisela hat
**kein eigenes wg-Interface** — sie hängt direkt im internen Netz
`172.30.1.0/24`, in das die WireGuard-Peers geroutet werden; „nur
WG-Netz" heißt hier also: exakt an die LAN-IP binden (localhost,
Docker-Bridges und IPv6 nachweislich nicht erreichbar). Live
verifiziert: Testdownload „Me at the zoo" über die API komplett
durchgelaufen, Dateien inkl. deduplizierter MDs unter
`~/YouTube/Me at the zoo/`. Nebenbei: `package-lock.json` durch npm
auf Gisela normalisiert (nur `libc`-Felder entfernt, kein
Versions-Update).
## Session 2026-08-29 — Untertitel-Dedup-Fix & Push nach Gitea (Claude Fable 5) ## Session 2026-08-29 — Untertitel-Dedup-Fix & Push nach Gitea (Claude Fable 5)
Stefans Befund: MD-Dateien aus VTT-Untertiteln enthielten jeden Satz ~3×. Stefans Befund: MD-Dateien aus VTT-Untertiteln enthielten jeden Satz ~3×.
@ -62,6 +88,15 @@ Beide bisherigen Commits (16.05.) stammen von Stefan; seither keine
Dev-Server, Deployment und User-Verwaltung sind vollständig in `README.md` Dev-Server, Deployment und User-Verwaltung sind vollständig in `README.md`
und `INSTALL.md` dokumentiert — dort nachschlagen, hier nicht duplizieren. und `INSTALL.md` dokumentiert — dort nachschlagen, hier nicht duplizieren.
Betrieb auf Gisela (systemd-User-Dienst, läuft als `stwaidele`):
```bash
systemctl --user status|restart|stop yt-dlf
journalctl --user -u yt-dlf -f
# Nach Code-Änderungen:
npm run build && systemctl --user restart yt-dlf
```
## Verwandte Handoffs ## Verwandte Handoffs
_keine_ _keine_

69
package-lock.json generated
View File

@ -232,9 +232,6 @@
"arm64" "arm64"
], ],
"dev": true, "dev": true,
"libc": [
"glibc"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@ -252,9 +249,6 @@
"arm64" "arm64"
], ],
"dev": true, "dev": true,
"libc": [
"musl"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@ -272,9 +266,6 @@
"ppc64" "ppc64"
], ],
"dev": true, "dev": true,
"libc": [
"glibc"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@ -292,9 +283,6 @@
"s390x" "s390x"
], ],
"dev": true, "dev": true,
"libc": [
"glibc"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@ -312,9 +300,6 @@
"x64" "x64"
], ],
"dev": true, "dev": true,
"libc": [
"glibc"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@ -332,9 +317,6 @@
"x64" "x64"
], ],
"dev": true, "dev": true,
"libc": [
"musl"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@ -619,9 +601,6 @@
"arm" "arm"
], ],
"dev": true, "dev": true,
"libc": [
"glibc"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@ -636,9 +615,6 @@
"arm" "arm"
], ],
"dev": true, "dev": true,
"libc": [
"musl"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@ -653,9 +629,6 @@
"arm64" "arm64"
], ],
"dev": true, "dev": true,
"libc": [
"glibc"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@ -670,9 +643,6 @@
"arm64" "arm64"
], ],
"dev": true, "dev": true,
"libc": [
"musl"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@ -687,9 +657,6 @@
"loong64" "loong64"
], ],
"dev": true, "dev": true,
"libc": [
"glibc"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@ -704,9 +671,6 @@
"loong64" "loong64"
], ],
"dev": true, "dev": true,
"libc": [
"musl"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@ -721,9 +685,6 @@
"ppc64" "ppc64"
], ],
"dev": true, "dev": true,
"libc": [
"glibc"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@ -738,9 +699,6 @@
"ppc64" "ppc64"
], ],
"dev": true, "dev": true,
"libc": [
"musl"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@ -755,9 +713,6 @@
"riscv64" "riscv64"
], ],
"dev": true, "dev": true,
"libc": [
"glibc"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@ -772,9 +727,6 @@
"riscv64" "riscv64"
], ],
"dev": true, "dev": true,
"libc": [
"musl"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@ -789,9 +741,6 @@
"s390x" "s390x"
], ],
"dev": true, "dev": true,
"libc": [
"glibc"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@ -806,9 +755,6 @@
"x64" "x64"
], ],
"dev": true, "dev": true,
"libc": [
"glibc"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@ -823,9 +769,6 @@
"x64" "x64"
], ],
"dev": true, "dev": true,
"libc": [
"musl"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@ -1814,9 +1757,6 @@
"arm64" "arm64"
], ],
"dev": true, "dev": true,
"libc": [
"glibc"
],
"license": "MPL-2.0", "license": "MPL-2.0",
"optional": true, "optional": true,
"os": [ "os": [
@ -1838,9 +1778,6 @@
"arm64" "arm64"
], ],
"dev": true, "dev": true,
"libc": [
"musl"
],
"license": "MPL-2.0", "license": "MPL-2.0",
"optional": true, "optional": true,
"os": [ "os": [
@ -1862,9 +1799,6 @@
"x64" "x64"
], ],
"dev": true, "dev": true,
"libc": [
"glibc"
],
"license": "MPL-2.0", "license": "MPL-2.0",
"optional": true, "optional": true,
"os": [ "os": [
@ -1886,9 +1820,6 @@
"x64" "x64"
], ],
"dev": true, "dev": true,
"libc": [
"musl"
],
"license": "MPL-2.0", "license": "MPL-2.0",
"optional": true, "optional": true,
"os": [ "os": [