Frank Schwenk 12cf6cab32 fix: normalize YouTube proxy URL and support dashboard fields
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>
2026-06-16 16:30:23 +02:00

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

App: http://localhost:8000

Deployment (Traefik)

  1. .env auf dem Server anlegen:
APP_PIN=dein-pin
JWT_SECRET=$(openssl rand -hex 32)
OPENROUTER_API_KEY=sk-or-...
  1. DNS ytrecap.schwenk.online → Traefik-Host

  2. 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
S
Description
No description provided
Readme 70 KiB
Languages
Python 52.3%
JavaScript 23.2%
CSS 12.8%
HTML 11.1%
Dockerfile 0.6%