Self-hosted Opus Clip alternative — reels.biba.live
Go to file
Sebastjan Artič 865e21fe1a Integrate Soniox stt-async-v4 as primary STT provider
Test results comparing all providers on Slovenian folk-pop:

CVETELE SO MALINE:
- Scribe: HALLUCINATED ('finančni moduli...') 
- Gemini 3 Pro: correct lyrics, ~100s 
- Soniox: PERFECT lyrics in 4 seconds 

PA PA:
- Scribe: 'se mu pomahala' (wrong: missing M) 
- Soniox: 'sem mu pomahala'  + caught 'pa-pa-ra-pa' fillers

ŽENA ME TEPE:
- Scribe: hallucinations + word errors
- Soniox: PERFECT 'Žena me tepe, mi prazni žepe, da vidi, kje in s kom sem bil'

Soniox advantages:
- 4x cheaper than Scribe ($0.10/h vs $0.40/h)
- 5x faster (4-15s vs 10-15s for 180s audio)
- 50x cheaper than Gemini 3 Pro
- 25x faster than Gemini
- Slovenian native quality matches Gemini
- Word-level timestamps + diacritics + punctuation

Implementation:

1. transcribe_with_soniox() function:
   - Multipart upload to /v1/files (no SDK dependency)
   - Create transcription with stt-async-v4 model
   - Auto language hint based on filename (NZ → 'sl')
   - Multilingual fallback ['en', 'sl', 'de', 'hr', 'es', 'fr', 'it']
   - Poll status, fetch transcript
   - Group subword tokens into words → segments
   - Auto-cleanup files after transcription

2. New 'soniox_chain' provider mode (default for 'auto'):
   - Soniox primary (fast + cheap + accurate)
   - Scribe fallback (rare cases when Soniox fails)
   - Gemini fallback (last resort, slow but bulletproof)
   - Quality gate: coverage >= 50%, no hallucinations

3. Provider modes: auto, soniox, elevenlabs, gemini, hybrid, local

This makes the pipeline reliable for ALL music genres including
Slovenian narodno-zabavni glasbi which Scribe consistently failed on.
2026-04-30 03:06:38 +00:00
app Clean noise patterns more aggressively + clean already-stored values 2026-04-29 18:47:19 +00:00
scripts Integrate Soniox stt-async-v4 as primary STT provider 2026-04-30 03:06:38 +00:00
templates Default 'no subtitles' mode: cleaner reels without text issues 2026-04-29 19:38:35 +00:00
.env.example Initial: reels clipper app 2026-04-28 15:28:22 +00:00
.gitignore Initial: reels clipper app 2026-04-28 15:28:22 +00:00
docker-compose.yml Initial: reels clipper app 2026-04-28 15:28:22 +00:00
Dockerfile Add Deno runtime for yt-dlp YouTube nsig challenge solving 2026-04-28 16:05:09 +00:00
README.md Initial: reels clipper app 2026-04-28 15:28:22 +00:00
requirements.txt ACRCloud auto-recognition: never block uploads, fall back to fingerprinting 2026-04-29 14:24:53 +00:00

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

  1. V Coolify ustvari nov projekt → Docker Compose iz tega repoja
  2. Domena: reels.biba.live
  3. Env vars:
    AUTH_USER=sebastjan
    AUTH_PASS=<močno geslo>
    MAX_UPLOAD_MB=2000
    
  4. Volume reels_data se ustvari avtomatsko
  5. 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, vrne job_id
  • POST /api/youtube — JSON {url, mode, lang, ...}
  • POST /api/process — start processing za uploaded job
  • GET /api/jobs — list vseh
  • GET /api/jobs/{id} — status
  • GET /api/stream/{id} — SSE stream progress
  • GET /api/download/{id} — final reel
  • DELETE /api/jobs/{id} — pobriši

Dependencies

  • FFmpeg (system)
  • faster-whisper (transkripcija)
  • OpenCV (face detection)
  • yt-dlp (YouTube)
  • FastAPI + uvicorn (server)