Self-hosted · offline · yours

Your videos, indexed by
their own metadata.

Point Holodex at a folder of .mp4/.mkv files and it builds a fast, good-looking web library from the tags already inside them — no naming conventions, no manual database, no internet, no telemetry.

Holodex library grid in the Cinémathèque skin Holodex library grid in the Broadcast skin Holodex library grid in the Brutalist skin
Holodex video detail in the Cinémathèque skin Holodex video detail in the Broadcast skin Holodex video detail in the Brutalist skin

Real screenshots — the same components, re-skinned by a token swap. Currently: Cinémathèque.

One library, three skins

The UI is built on semantic design tokens, so the whole look switches from the header with zero restyling — fonts bundled offline, all WCAG AA.

Cinémathèque

Refined film-archive. Fraunces serif, warm grain and vignette, ember accent, letterbox bars on every card.

Broadcast

Retro-futurist CRT. VT323 bitmap type, scanline wash, cyan accent, uppercase titles with a blinking caret.

Brutalist

Raw utilitarian catalog. Spline Mono, hairline grid, zero radii, acid-lime accent, 01/02 index counters.

What it does

Everything is driven by the metadata embedded in your files — the source of truth.

Tags are the truth

Title, cast, genres, resolution and dates read from each file's own container tags via layered exiftool + ffprobe — never the filename.

Incremental indexing

Scans on startup, watches for changes live, and only re-reads files whose size or mtime changed.

Cover art, two ways

Embedded poster art is extracted instantly; the rest get a throttled background frame thumbnail.

Real search & filters

Full-text search with diacritic folding, plus faceted filters for resolution, duration, year, people and tags — all in shareable URLs.

Plays in the browser

Inline HTML5 player with HTTP Range seeking, and a panel showing exactly what each file's encoder embedded.

Self-hosted & portable

A single pure-Go binary in one multi-arch image (amd64 + arm64) for NAS and ARM home servers.

Quick start

Just Docker and one compose file — no source tree or toolchain.

1 point at your library2 compose up3 open the browser
# 1. Point Holodex at your library (defaults to ./media)
export HOLODEX_MEDIA_PATH=/srv/media

# 2. Run the prebuilt image from GHCR
docker compose -f docker-compose.prod.yml up -d

# 3. Open the library
http://localhost:7800

Your library is mounted read-only; index, thumbnails and config live in a named volume.

Roadmap

● Shipped
  • Automatic metadata-driven indexing
  • Search, facet filters, people & tags
  • Tiered cover-art pipeline
  • In-browser player, three skins
○ Phase 2
  • MCP server for AI assistants
  • Sort, "recently added", keyboard nav
  • Responsive mobile layout, metrics
  • Configurable metadata field mapping
○ Phase 3
  • People/tag aliases & hierarchy
  • IMDB/TMDB metadata plugins
  • Opt-in writeback to source files
  • Hover-preview trailers