Compare commits
No commits in common. "891886b6e86da3e367073474faa672a3fb4d742c" and "d21cc69d20c77ece363ca795bb4d416dfb7631dd" have entirely different histories.
891886b6e8
...
d21cc69d20
73
Handoff.md
73
Handoff.md
@ -1,41 +1,34 @@
|
|||||||
# 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 — App läuft produktiv auf Gisela unter
|
> Stand: 2026-08-29 — Untertitel-Dedup-Fix live an realen Dateien verifiziert
|
||||||
> http://172.30.1.11:3300 (nur internes Netz), Downloads nach
|
> und nach Gitea gepusht (`stwaidele/yt-dlf`, main auf `a7d7d1c`).
|
||||||
> `/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:** Kein konkreter inhaltlicher Auftrag hinterlegt.
|
**🔜 NÄCHSTE SESSION:** Weiterentwicklung findet künftig auf **Gisela**
|
||||||
Arbeitskopie auf Gisela: `/home/stwaidele/Claude/yt-dlp` (Verzeichnisname
|
statt — dort von Gitea klonen (`git clone git@gitea-<slug>:stwaidele/yt-dlf.git`
|
||||||
≠ Repo-Name `yt-dlf`!).
|
bzw. Stefans eigener Zugang) und diesen Handoff als Einstieg nehmen.
|
||||||
|
Kein konkreter inhaltlicher Auftrag hinterlegt.
|
||||||
|
|
||||||
## Offene Punkte
|
## Offene Punkte
|
||||||
|
|
||||||
- [ ] `users.txt` auf Gisela anlegen, falls Login gewünscht
|
- [ ] Deploy-Status klären — `build/` und `users.txt` liegen lokal (auf dem
|
||||||
(`python3 scripts/add_user.py <name> <pw>`, danach
|
Mac) vor, beide gitignored; ob und wo die App produktiv läuft, ist
|
||||||
`systemctl --user restart yt-dlf`); ohne Login zeigen `ads-*.html`
|
nirgends festgehalten. Wichtig beim Umzug auf Gisela: gitignorte Dateien
|
||||||
Platzhalter-Werbung.
|
(`users.txt`, `build/`, `ads-*.html`-Anpassungen) kommen **nicht** über
|
||||||
- [ ] Leeres Repo `stwaidele/yt-dlp` auf Gitea existiert neben `yt-dlf` —
|
den Clone mit.
|
||||||
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
|
||||||
|
|
||||||
- **Port 3000 ist auf Gisela belegt** (Open-WebUI bindet
|
- **Git-Konten-Mix** — Bestandsprojekt: Remote `origin` zeigt direkt auf
|
||||||
`172.30.1.11:3000`) — yt-dlf läuft deshalb auf **3300**. Bei
|
`git@gitea.101010.cloud:stwaidele/yt-dlf.git`; dieser Host-Eintrag in
|
||||||
Port-Änderungen zuerst `ss -tlnp` prüfen.
|
`~/.ssh/config` (Mac) nutzt noch den alten generischen `claude`-Key.
|
||||||
- **Git-Konten-Mix (nur Mac)** — auf dem Mac zeigt `origin` direkt auf
|
Claude-Commits daher per Author-Override
|
||||||
`git@gitea.101010.cloud:stwaidele/yt-dlf.git` mit dem alten generischen
|
(`git -c user.name="Claude <Modell>" -c user.email="<slug>@waidele.info" commit …`),
|
||||||
`claude`-Key; dort Claude-Commits per Author-Override und Push über den
|
Repo-Config nicht umbiegen. Push konventionsgemäß über den Modell-Alias:
|
||||||
Modell-Alias. Auf **Gisela** ist das gelöst: Clone über
|
`git push git@gitea-fable-5:stwaidele/yt-dlf.git main` — `fable-5` hat
|
||||||
`git@gitea-fable-5:stwaidele/yt-dlf.git`, Repo-Config steht auf
|
Write-Recht am Repo (live verifiziert 29.08.).
|
||||||
`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
|
||||||
@ -43,25 +36,6 @@ Arbeitskopie auf Gisela: `/home/stwaidele/Claude/yt-dlp` (Verzeichnisname
|
|||||||
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×.
|
||||||
@ -88,15 +62,6 @@ 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
69
package-lock.json
generated
@ -232,6 +232,9 @@
|
|||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"libc": [
|
||||||
|
"glibc"
|
||||||
|
],
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@ -249,6 +252,9 @@
|
|||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"libc": [
|
||||||
|
"musl"
|
||||||
|
],
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@ -266,6 +272,9 @@
|
|||||||
"ppc64"
|
"ppc64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"libc": [
|
||||||
|
"glibc"
|
||||||
|
],
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@ -283,6 +292,9 @@
|
|||||||
"s390x"
|
"s390x"
|
||||||
],
|
],
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"libc": [
|
||||||
|
"glibc"
|
||||||
|
],
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@ -300,6 +312,9 @@
|
|||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"libc": [
|
||||||
|
"glibc"
|
||||||
|
],
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@ -317,6 +332,9 @@
|
|||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"libc": [
|
||||||
|
"musl"
|
||||||
|
],
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@ -601,6 +619,9 @@
|
|||||||
"arm"
|
"arm"
|
||||||
],
|
],
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"libc": [
|
||||||
|
"glibc"
|
||||||
|
],
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@ -615,6 +636,9 @@
|
|||||||
"arm"
|
"arm"
|
||||||
],
|
],
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"libc": [
|
||||||
|
"musl"
|
||||||
|
],
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@ -629,6 +653,9 @@
|
|||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"libc": [
|
||||||
|
"glibc"
|
||||||
|
],
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@ -643,6 +670,9 @@
|
|||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"libc": [
|
||||||
|
"musl"
|
||||||
|
],
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@ -657,6 +687,9 @@
|
|||||||
"loong64"
|
"loong64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"libc": [
|
||||||
|
"glibc"
|
||||||
|
],
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@ -671,6 +704,9 @@
|
|||||||
"loong64"
|
"loong64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"libc": [
|
||||||
|
"musl"
|
||||||
|
],
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@ -685,6 +721,9 @@
|
|||||||
"ppc64"
|
"ppc64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"libc": [
|
||||||
|
"glibc"
|
||||||
|
],
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@ -699,6 +738,9 @@
|
|||||||
"ppc64"
|
"ppc64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"libc": [
|
||||||
|
"musl"
|
||||||
|
],
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@ -713,6 +755,9 @@
|
|||||||
"riscv64"
|
"riscv64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"libc": [
|
||||||
|
"glibc"
|
||||||
|
],
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@ -727,6 +772,9 @@
|
|||||||
"riscv64"
|
"riscv64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"libc": [
|
||||||
|
"musl"
|
||||||
|
],
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@ -741,6 +789,9 @@
|
|||||||
"s390x"
|
"s390x"
|
||||||
],
|
],
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"libc": [
|
||||||
|
"glibc"
|
||||||
|
],
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@ -755,6 +806,9 @@
|
|||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"libc": [
|
||||||
|
"glibc"
|
||||||
|
],
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@ -769,6 +823,9 @@
|
|||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"libc": [
|
||||||
|
"musl"
|
||||||
|
],
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@ -1757,6 +1814,9 @@
|
|||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"libc": [
|
||||||
|
"glibc"
|
||||||
|
],
|
||||||
"license": "MPL-2.0",
|
"license": "MPL-2.0",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@ -1778,6 +1838,9 @@
|
|||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"libc": [
|
||||||
|
"musl"
|
||||||
|
],
|
||||||
"license": "MPL-2.0",
|
"license": "MPL-2.0",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@ -1799,6 +1862,9 @@
|
|||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"libc": [
|
||||||
|
"glibc"
|
||||||
|
],
|
||||||
"license": "MPL-2.0",
|
"license": "MPL-2.0",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@ -1820,6 +1886,9 @@
|
|||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"libc": [
|
||||||
|
"musl"
|
||||||
|
],
|
||||||
"license": "MPL-2.0",
|
"license": "MPL-2.0",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user