VideoVault

Lokal kuratering, optimering och sök för ditt videobibliotek (endast laglig adult-innehåll, 18+). Länkar du klistrar in laddas hem reklamfritt, transkoderas till web-vänlig MP4, kategoriseras automatiskt (fokus: Teen 18+, Skinny, Petite, Bondage + sub-nischer), får thumbnails/previews och indexeras för världsklass-sök.

Stack

  • Python — pipeline (nedladdning → transkod → kategorisering)
  • yt-dlp + ffmpeg — hämtning & H.264/AAC-optimering (streamad, faststart)
  • SQLite (FTS5) — lokalt index (sök funkar även offline)
  • Meilisearch (Docker) — fuzzysök, typo-tålig, blixtsnabb (valfri, fallback FTS)
  • FastAPI + Jinja2 — lokal webb-UI med kort-flöde, hover-previews och kategorier

Snabbstart

./vv.sh setup      # venv + deps + db + meilisearch
./vv.sh start      # web (port 8080) + worker (autostart via systemd)
# eller bara:
./vv.sh web        # frontend i förgrund
./vv.sh worker     # consumer i förgrund

Lägga till video

  • UI: plustecknet uppe till höger → klistra in en URL → "Köa och ladda ner"
  • watch-mappen: lägg en .url- eller .txt-fil i watch/ med en länk per rad, kör sedan ./vv.sh watch (worker tar automatisk bort filen när den är läst).
  • CLI: ./vv.sh add https://…

Flöde (per jobb)

new → (watch/UI) → queued → downloading → downloaded → transcoding
    → kategorisera & tagga → ready → indexera (FTS + Meilisearch)
fel → failed (visas i UI, kan analyseras i DB)

Vid nedladdning sparas källfilen (första kvaliteten), sedan görs:

  • optimized — MP4 H.264 CRF22 + AAC 128K, max 1080p, +faststart
  • poster (1280) / thumb (480) / preview (10s, 848px, mute)
  • kategorier — Teen 18+/Skinny/Petite/Bondage + sub-nischer + aktivitet + längd + kanal + upplösning
  • tags — alla träffande etiketter ur regelverket

Struktur

app/
  downloader.py   yt-dlp-hämtning
  transcode.py    ffmpeg-optimering + artifacts
  categorize.py   nisch-regler (redigera gärna)
  pipeline.py     orkestrerare
  worker.py       daemon-lopp
  search.py       Meilisearch-klient med fallback
  db.py           SQLite/FTS5-lager
  web/            FastAPI + Jinja2 + CSS/JS
watch/            drop-in-länkar (*.url / *.txt)
data/             media/ optimized/ videos.db (+meili i docker)

Konfiguration (.env)

Variabel Default Betydelse
VV_QUALITY best yt-dlp-format
OPTIMIZE 1 kör ffmpeg-transkod
MEILI_URL/KEY http://127.0.0.1:7700 / devkey sök
MEILI_DISABLE 0 av meilisearch (använd FTS)
VIDEO_CRF 22 kvalitet H.264
AUDIO_BITRATE 128K ljudhastighet

Drift

  • ./vv.sh status — kolla tjänster + health
  • Web + worker är systemd-laddade (vv-web, vv-worker) och startar om vid boot.
  • Meilisearch-data ligger i data/meili (Docker-volym).
S
Description
VideoVault (migrated from laptop)
Readme
50 KiB
Languages
Python 65.9%
HTML 14.4%
CSS 11.9%
JavaScript 3.1%
Shell 2.3%
Other 2.4%