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>
100 lines
2.5 KiB
Markdown
100 lines
2.5 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
|
|
# 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:
|
|
|
|
```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
|