Files
ytrecap/README.md
T
Frank Schwenk 76de7c7a3a feat: add optional YouTube proxy support for IP blocks
Route transcript fetching through YOUTUBE_PROXY or Webshare residential
config, with clearer errors when YouTube still blocks requests.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-16 16:23:06 +02:00

94 lines
2.4 KiB
Markdown

# Goldfish Recap
YouTube-Untertitel → KI-Recap mit Sprungmarken. Für Second-Screen-Survivors und Goldfisch-Gedächtnisse.
**Live:** [ytrecap.schwenk.online](https://ytrecap.schwenk.online)
## Features
- YouTube-URL einfügen → strukturiertes Recap mit TL;DR, Vibe-Check und Sprungmarken
- Recaps bleiben gespeichert und sind per Link teilbar (`/r/{video_id}`)
- Recap erstellen nur mit PIN (JWT in localStorage)
- PWA — installierbar auf dem Handy
## Lokale Entwicklung
```bash
cp .env.example .env
# OPENROUTER_API_KEY und JWT_SECRET setzen
python -m venv .venv
source .venv/bin/activate
pip install -e .
python tools/gen_favicon.py
uvicorn server.app:app --reload --port 8000
```
Oder mit Docker:
```bash
docker compose -f compose.dev.yml up --build
```
App: http://localhost:8000
## Deployment (Traefik)
1. `.env` auf dem Server anlegen:
```bash
APP_PIN=dein-pin
JWT_SECRET=$(openssl rand -hex 32)
OPENROUTER_API_KEY=sk-or-...
```
2. DNS `ytrecap.schwenk.online` → Traefik-Host
3. Start:
```bash
docker compose up -d --build
```
Traefik übernimmt TLS via `myresolver`. Persistente Daten liegen in `./data/`.
## API
| Endpoint | Auth | Beschreibung |
|----------|------|--------------|
| `GET /api/health` | — | Healthcheck |
| `POST /api/auth/pin` | — | PIN → JWT |
| `GET /api/recaps` | — | Liste |
| `GET /api/recaps/{video_id}` | — | Einzelnes Recap |
| `POST /api/recaps` | JWT | Recap erstellen |
| `POST /api/recaps/{video_id}/regenerate` | JWT | Neu generieren |
## YouTube IP-Block / Proxy
YouTube blockiert oft Server-IPs (Hetzner, AWS, …). Optional in `.env`:
```bash
# Statischer Proxy (z.B. aus Webshare „Proxy Server“ / Dashboard-Zeile)
YOUTUBE_PROXY=http://USER:PASS@HOST:PORT
```
Für yt-dlp-Fallback und VTT-Downloads wird dieselbe URL genutzt.
**Webshare-Hinweis:** Der kostenlose Tier und „Proxy Server“ (einzelne IP wie im Dashboard) funktionieren *manchmal* für wenige Recaps pro Tag — laut `youtube-transcript-api` aber unzuverlässig. Rotating **Residential** (kostenpflichtig) ist die robuste Lösung:
```bash
WEBSHARE_PROXY_USERNAME=...
WEBSHARE_PROXY_PASSWORD=...
WEBSHARE_PROXY_LOCATIONS=de
```
Öffentliche Gratis-Proxy-Listen: nein (langsam, unsicher, meist schon gebannt).
## Stack
- FastAPI + SQLite
- youtube-transcript-api (+ yt-dlp Fallback)
- OpenRouter (Default: `google/gemini-2.5-flash`)
- Vanilla JS PWA