SliceSeeker

Overview

What SliceSeeker is and how the pieces fit together

SliceSeeker is a self-hostable internal tool for semantic video search. Other backend services call Phase 2 (search-api / search-client) to seek and search video slices. Operators use the admin UI. There is no built-in login — see Deploy for the network-trust model.

You upload media, index it in the background, then query by natural language. Postgres (pgvector) stores embeddings; object storage holds the source files.

This is early software (v0.1). Four indexing paths work end-to-end today: three independent modalities plus a hybrid pipeline that segments once and fuses video, speech, and vision with weighted RRF at search time.

Intended use

SurfaceWho uses itRole
search-apiYour backend servicesPrimary product surface: seek / search slices via HTTP or search-client
Admin UIHuman operatorsUpload, process, search, and cost views

What you get

CapabilityWhat it does
UploadResumable tus uploads into S3-compatible storage
MultimodalSplit video into ~15s chunks, embed each chunk, search by meaning
SpeechExtract audio, transcribe with Whisper, embed segments, search spoken content
VisionSample still frames on an interval, embed images, search what's on screen
HybridOne shared segment grid → per-clip video/speech/vision embeds → weighted RRF search
Admin UIOperator console for upload, process, search, and cost views
Search APIRead-only Phase 2 HTTP API + typed search-client SDK

Two phases

Indexing and search deploy as separate phases. They share a database schema but never call each other.

Phase 1 (write)  →  Postgres + Valkey + S3 + tusd
Phase 2 (read)   →  Postgres + embedding provider
PhaseRoleServices
1: IndexingUpload, process, admin UIindexer-api, indexer-worker, admin-ui, tusd
2: SearchVector retrieval onlysearch-api

Phase 2 can run alone once Phase 1 has written data. Point DATABASE_URL at that database. An empty DB returns empty results.

Where to go next

On this page