Self-hosted Opus Clip alternative — reels.biba.live
WHY: Doslej basic auth z deljenim AUTH_USER/AUTH_PASS — tvegan za delitev z drugimi (urednika ipd.). Z Google Sign-In dobi vsak uporabnik svoj account, dostop pa nadzira whitelist v env. NEW BACKEND: - GET /login — login stran z Google Sign-In gumbom (GSI popup) - POST /auth/google/callback — verify Google ID token + set session cookie - GET /auth/me — vrne email + auth method (za frontend header) - GET /logout — pobriše cookie + redirect /login - POST /logout AUTH FLOW: 1. Browser GET / → check_auth() → ni session → redirect /login 2. /login → Google Sign-In popup (preko gsi/client.js) 3. User izbere Google account → JS pošlje credential na /auth/google/callback 4. Server verifies token (oauth2.googleapis.com/tokeninfo) 5. Email mora biti v ALLOWED_EMAILS env 6. Set HttpOnly+Secure session cookie (HMAC-SHA256, 30 dni) 7. Redirect / SECURITY: - Session token: base64url(email|expiry|HMAC). Server ne ranji ne hrani. - HMAC z SESSION_SECRET (auto-derived iz AUTH_USER+AUTH_PASS če ni nastavljen) - Cookie HttpOnly + Secure + SameSite=lax - Token verify: aud check, iss check, exp check, email_verified check BACKWARD COMPAT: - HTTPBasic auth še vedno deluje (cron, scripte, API klici) - check_auth() probaj prvo cookie, potem basic - Brez GOOGLE_CLIENT_ID env: vse še vedno dela na basic auth ENV VARS (treba dodati v Coolify): - GOOGLE_CLIENT_ID=938379241163-pvb328plec2207rbtufic8u5fgb6mkn9.apps.googleusercontent.com - ALLOWED_EMAILS=sebastjan.artic@gmail.com,ales.cadez@gmail.com - SESSION_SECRET=<random 64-char hex> (optional — defaultni se izračuna) FRONTEND: - Header: 👤 email + ↪ Odjava gumb (samo ko je prijavljen) - DOMContentLoaded fetcha /auth/me, prikaže email |
||
|---|---|---|
| app | ||
| scripts | ||
| templates | ||
| .env.example | ||
| .gitignore | ||
| docker-compose.yml | ||
| Dockerfile | ||
| README.md | ||
| requirements.txt | ||
Reels Clipper · biba.live
Self-hosted Opus Clip alternativa za FOLX TV / PTC. Pretvori 16:9 video v 9:16 reels/shorts/tiktok format z auto face tracking, podnapisi (sl/de/en) in avto-detekcijo refrena v glasbenih pesmih.
Features
- 📤 Drag & drop upload (do 2 GB)
- 📺 YouTube URL paste (yt-dlp)
- 🎯 Smart reframe: track (face follow), center, blur (za glasbo)
- 🎵 Auto-chorus detection (Whisper + energy hibrid)
- 📝 Burned-in podnapisi (faster-whisper, multi-jezik)
- 🎨 3 stili podnapisov: reels, yellow (MrBeast), minimal
- 🔐 HTTP Basic Auth
- 📊 Real-time progress (Server-Sent Events)
- 📦 Docker / Coolify ready
Quick start (lokalno)
docker compose up --build
# odpri http://localhost:8000
Default login: sebastjan / nastavi AUTH_PASS v .env.
Coolify deploy
- V Coolify ustvari nov projekt → Docker Compose iz tega repoja
- Domena:
reels.biba.live - Env vars:
AUTH_USER=sebastjan AUTH_PASS=<močno geslo> MAX_UPLOAD_MB=2000 - Volume
reels_datase ustvari avtomatsko - Deploy → Coolify postavi Traefik reverse proxy + SSL via Let's Encrypt
Pipeline
Upload / YouTube
↓
[ yt_download.py ] ← samo če YouTube
↓
[ find_chorus.py ] ← samo če auto_chorus=true (Whisper + RMS analiza)
↓
[ reframe.py ] ← 16:9 → 9:16 (track / center / blur)
↓
[ subtitle.py ] ← Whisper transkripcija + burn-in
↓
reel.mp4
API
POST /api/upload— multipart file upload, vrnejob_idPOST /api/youtube— JSON{url, mode, lang, ...}POST /api/process— start processing za uploaded jobGET /api/jobs— list vsehGET /api/jobs/{id}— statusGET /api/stream/{id}— SSE stream progressGET /api/download/{id}— final reelDELETE /api/jobs/{id}— pobriši
Dependencies
- FFmpeg (system)
- faster-whisper (transkripcija)
- OpenCV (face detection)
- yt-dlp (YouTube)
- FastAPI + uvicorn (server)