Interactive search across large-scale image and video collections

Exquisitor is a research platform for interactive search over large image and video collections.

Technical Spec
SystemExquisitor
TypeInteractive Image and Video Search
Components2 (Frontend + Backend)
TransportREST API
LicenseAGPL-3.0-or-later
Status● Active

Overview

CLIP Text Search
Describe what you're looking for in natural language. The SigLIP model encodes your query into a 1152-dimensional embedding and retrieves the most visually similar items.
Relevance Feedback
Mark results as relevant or irrelevant. The engine trains a linear SVM on your selections and uses the learned weight vector as a new query, converging on intent across sessions.
Faceted Filtering
Compose metadata constraints with arbitrary AND/OR/NOT trees. Faceted queries compile directly to SQL.
Flexible Indexing
Choose Zarr for exact nearest-neighbour search on collections up to a few hundred thousand items, or FAISS (IVF/HNSW) for approximate search across millions with lower latency.
Research-First Design
Clean, readable Python/FastAPI code designed to be understood and modified. Each search mode is an independent strategy class: swap models, change ranking, or add new modalities.
Open Source
Released under AGPL-3.0-or-later. Use it in your research, cite it in your papers, fork it for your own experiments.

Components

All components are developed in the open. Stability labels are precise: ALPHA means the API surface will change without notice; STABLE means semantic versioning is in effect.

Repository Component Status
live-services-engine Backend / Search Engine alpha
base-user-interface Frontend / UI alpha
Simplified-M3-DB Data Model / Collection Ingest alpha

Architecture

Frontend Client
Browser-based UI for search interaction and relevance feedback
REST API
HTTP endpoints via FastAPI: search, items, admin, health
Live Services Engine
Python/FastAPI backend with CLIP, SVM, and faceted search strategies
Feature Store
Zarr or FAISS vector index + SQLite metadata database per collection

Two-component system

Exquisitor deliberately avoids microservice complexity. The entire system comprises a frontend client and a Python/FastAPI backend (the Live Services Engine) connected via a REST API. This simplicity is the point: researchers can trace every interaction from click to result.

  • Frontend handles all user interaction and result display
  • Backend manages indexing, ranking, and model inference
  • REST API with dedicated endpoints for search, items, and admin
  • FAISS or Zarr vector index chosen per collection
  • SQLite database per collection for fast metadata queries
  • Single-machine deployment, GPU optional but recommended

Quickstart

terminalbash
# Clone the Live Services Engine
$ git clone https://github.com/exq-hub/live-services-engine
$ cd live-services-engine

# Install dependencies (requires Python 3.13+ and uv)
$ uv sync

# Configure a collection
$ cp config.example.ini data/config.ini
# Edit data/config.ini to point at your index and database

# Start the server (downloads CLIP model on first run)
$ uv run python main.py

# Verify: http://localhost:8000/health

Getting started

Requires Python 3.13+ and uv. Point the config at your index and database, then start the server. The CLIP model is downloaded and cached on first run. A GPU is recommended but not required.

Team

Ujjwal Sharma
Ujjwal Sharma
AI/ML & Search Engineering
Omar Shahbaz Khan
Omar Shahbaz Khan
Database & Search Engineering