12cf6cab32
Rewrite https proxy URLs to http, allow HOST/PORT/USER/PASSWORD env vars, and surface clearer errors when proxies fail on the wrong port. Co-authored-by: Cursor <cursoragent@cursor.com>
2.5 KiB
2.5 KiB
Goldfish Recap
YouTube-Untertitel → KI-Recap mit Sprungmarken. Für Second-Screen-Survivors und Goldfisch-Gedächtnisse.
Live: 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
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:
docker compose -f compose.dev.yml up --build
Deployment (Traefik)
.envauf dem Server anlegen:
APP_PIN=dein-pin
JWT_SECRET=$(openssl rand -hex 32)
OPENROUTER_API_KEY=sk-or-...
-
DNS
ytrecap.schwenk.online→ Traefik-Host -
Start:
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:
# Volle URL — http:// und Port aus Dashboard (z.B. 6641, NICHT 443)
YOUTUBE_PROXY=http://USER:PASS@HOST:6641
# Oder einzelne Felder aus dem Dashboard:
YOUTUBE_PROXY_HOST=HOST
YOUTUBE_PROXY_PORT=6641
YOUTUBE_PROXY_USER=USER
YOUTUBE_PROXY_PASSWORD=PASS
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:
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