Omarchy plugin · on-device

Find files by what's in them.

Press Super + S and describe what you're looking for. Sift finds the photo, screenshot, PDF page or document that matches, on your machine.

What it does

Everything you saved, searchable by what you remember.

Search by meaning

Describe it the way you remember it. Sift finds the photo, screenshot, PDF page or passage that matches, whatever the file is called.

Exact words count too

Invoice numbers, error codes and names match as written, including text read out of screenshots. Codes and numbers weigh double.

PDFs, to the page

Every page is read on its own, and Enter opens the PDF at the one that matched. Scans and slides are read as pictures.

Pictures & screenshots

Found by what they show, plus the text in them, read with tesseract.

People, opt-in

Name a few photos “me”, then search “me in the mountains”. One command deletes every faceprint.

Nothing leaves

EmbeddingGemma 2 runs on llama.cpp on your machine. No account, no cloud, no telemetry.

Native to Omarchy

A shell plugin: the panel and the bar indicator live in omarchy-shell and follow your theme.

Stays out of the way

The model stops when there's nothing to read. Indexing runs at idle priority and waits on battery.

Reads, never touches

Skips keys, certificates, .env files and code. Never changes, moves or uploads a file.

Keyboard first

Enter opens, Ctrl+Enter shows it in the folder, Ctrl+C copies the file to paste anywhere.

How it works

Four steps, all on your machine.

  1. 01

    Read

    Watches the folders you pick. PDFs page by page, documents in ~450-token passages, pictures as pictures, screenshot text with OCR.

    PyMuPDF · Pillow · tesseract · inotify

  2. 02

    Understand

    EmbeddingGemma 2 turns every page, passage and picture into a vector, on the GPU, only while there's work.

    llama.cpp · Vulkan · Q8_0

  3. 03

    Keep

    One local SQLite file: a float16 vector per page, passage and picture, plus a full-text index over names and text.

    SQLite WAL · FTS5

  4. 04

    Rank

    Meaning and exact words, blended. Only files that stand out count as meaning matches; weaker ones wait behind Tab.

    z-scored meaning · word coverage

folders ─► sift-indexer ─► readers ─► llama-server (EmbeddingGemma 2, Vulkan) ─► index.db
panel   ─► sift daemon  ─► query vector (CPU, ~20 ms) ─► meaning + exact words ─► results
Measured, not promised

Light enough to forget it's running.

per search, on the CPU
~20 ms
per search, on the CPU
sent anywhere
0 bytes
sent anywhere
model, downloaded once
865 MB
model, downloaded once
GPU when there's nothing to read
0 %
GPU when there's nothing to read
MemoryMB, resident
4466562

The daemon and indexer are small Python glue. The model only runs while there's something to read, then it's stopped and its memory is freed.

Indexingseconds per picture
1.941.745.2

EmbeddingGemma 2 on llama.cpp with Vulkan. dGPU is the RX 5500M, iGPU the Ryzen's Vega; Sift picks the discrete one. Documents are faster: about 50 ms a passage.

Measured on a Ryzen 5 5600H laptop with 15 GB of RAM and a Radeon RX 5500M.

Install

Two commands. Then Super + S.

  • ▪ Omarchy, with omarchy-shell
  • ▪ A Vulkan GPU (integrated is fine), or the CPU
  • ▪ About 1 GB of disk for the model and llama.cpp
$ omarchy pkg add cmake ninja shaderc vulkan-headers spirv-headers tesseract tesseract-data-eng
$ git clone https://github.com/ommgh/sift ~/projects/sift && ~/projects/sift/install.sh

The installer builds llama.cpp with Vulkan, downloads the model (checksummed), links the plugin and starts two user services. Uninstalling is three commands, listed in the README.