Update Handoff (Whisper fallback) and document CLI transcription in README

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P1w53ybPWArpZpcei9JPYX
This commit is contained in:
Claude Fable 5 2026-08-29 22:23:16 +02:00
parent a3eb962b90
commit 592a235cf9
2 changed files with 47 additions and 1 deletions

View File

@ -3,7 +3,8 @@
> Übergabedokument für die Fortsetzung in einer Claude-Code-Session.
> Stand: 2026-08-29 — App läuft produktiv auf Gisela unter
> http://172.30.1.11:3300 (nur internes Netz), Downloads nach
> `/home/stwaidele/YouTube/<Titel>/`; live verifiziert per Testdownload.
> `/home/stwaidele/YouTube/<Titel>/`. Neu: Whisper-Transkriptions-Fallback
> für Videos ohne Untertitel, live verifiziert (archive.org, RTX 3080).
> Dauerhafte Fakten stehen in `README.md`/`INSTALL.md`; hier steht nur, was
> **nicht** aus Code und Git-Historie ersichtlich ist.
@ -43,6 +44,27 @@ Arbeitskopie auf Gisela: `/home/stwaidele/Claude/yt-dlp` (Verzeichnisname
führende Wiederholungszeilen (`src/lib/subtitle.js`,
`scripts/subtitle_to_markdown.py`, beide identisch halten!).
## Session 2026-08-29 — Whisper-Fallback für Videos ohne Untertitel (Claude Fable 5)
Auftrag: Plattformen ohne Untertitel (Instagram & Co.) sollen trotzdem
Transkripte liefern. Umsetzung: `scripts/transcribe.py` (faster-whisper,
`large-v3-turbo`, CUDA mit CPU-Fallback) + Hook in
`src/routes/api/download/+server.js` — springt nur an, wenn der Download
keine `.vtt`/`.srt` hinterlässt; die VTT läuft danach durch die normale
MD-Konvertierung. venv liegt in `.venv/` (gitignored, Python 3.13,
**nicht** das Linuxbrew-Python 3.14 — dafür gab es keine
ctranslate2-Wheels). cuDNN/cuBLAS kommen aus pip und werden im Script per
`ctypes.CDLL(RTLD_GLOBAL)` vorgeladen, damit kein `LD_LIBRARY_PATH` in
der systemd-Unit nötig ist. Modell-Cache: `~/.cache/huggingface` (~1,6 GB,
bereits geladen). Live verifiziert: archive.org „Duck and Cover"
(E2E über die API, Fallback sprang an, Transkript einwandfrei) und
Direktlauf auf GPU (`cuda`, Spracherkennung en p=1.00). Testerkenntnis:
**Vimeo verlangt inzwischen Login** und taugt nicht mehr als
Test-Plattform; archive.org funktioniert. Nebenwirkung des Direkttests:
`~/YouTube/Me at the zoo/Me at the zoo.en.vtt` ist jetzt die
Whisper-Version statt der YouTube-Caption (im echten Betrieb kein Thema,
Fallback läuft nur ohne vorhandene Untertitel).
## Session 2026-08-29 — Deploy auf Gisela (Claude Fable 5)
Auftrag: yt-dlf auf Gisela betreiben, Weboberfläche nur im

View File

@ -50,6 +50,30 @@ To use a custom port:
PORT=8080 npm run dev
```
## Standalone transcription
Transcribe any local video/audio file to WebVTT directly from the terminal
(requires the faster-whisper venv, see `INSTALL.md`):
```bash
.venv/bin/python scripts/transcribe.py video.mp4
```
The language is detected automatically and the subtitle file is written next
to the input as `video.<lang>.vtt` (e.g. `video.de.vtt`). Model and device can
be overridden via environment variables:
```bash
WHISPER_MODEL=large-v3 .venv/bin/python scripts/transcribe.py video.mp4 # best quality
WHISPER_DEVICE=cpu .venv/bin/python scripts/transcribe.py video.mp4 # don't touch the GPU
```
To get a Markdown transcript, feed the VTT through the subtitle converter below:
```bash
./scripts/subtitle_to_markdown.py video.de.vtt
```
## Standalone subtitle converter
Convert a `.vtt` or `.srt` subtitle file to Markdown directly from the terminal: