03October 2025 to March 2026GitHub ↗

ctximg

Photo search that runs entirely offline

ctximg's search screen: a large Describe a photo field above example searches such as a narrow street in the rain.

Every image and every plain English query lands in one CLIP vector space and ranks by cosine similarity. No tags, no filenames, no filters. You describe what you remember and it finds the photo.

Period
October 2025 to March 2026
Stack
Python, PyTorch, OpenCLIP, SigLIP 2, FastAPI, SQLite, NumPy
Source
github.com/YdvPrashant/ctximg ↗

What it took

  1. 100/simages embedded per second, fastest tier

    100, 49 and 32 images a second across three accuracy tiers, from 768-d at 224px up to SigLIP 2 at 1152-d and 384px, on a 6 GB RTX 3060. fp16 inference gave a 3× speedup, batch size scales to free VRAM, and a CUDA out of memory error recovers by splitting the batch.

  2. 1 batchis all an interrupt costs

    Indexing is incremental and crash safe: SQLite WAL with per batch commits, change detection on path, size and mtime, and threaded JPEG decode overlapped with GPU encode across 10 formats including HEIC.

  3. 203pytest tests, green in 13 seconds

    It ships as a tray resident FastAPI desktop app with 19 REST endpoints, a dependency free browser UI and an 11 command CLI.

Measured

  1. Images embedded per second

    ctximg's three accuracy tiers on a 6 GB RTX 3060, timed by the app itself. Higher is better.

    768-d at 224px

    100

    Middle tier

    49

    SigLIP 2, 1152-d at 384px

    32

Next project, 01Prism →News transparency and bias analysis← All work