Boreal uses local AI to understand your photos. All processing happens on your device.
Capabilities:
- Natural language search: "dog playing in snow"
- Identity search: "photos of Steve"
- Hybrid search: "Steve at the beach"
- Metadata search: dates, locations, camera
When you import photos, Boreal generates a 768-dimensional vector for each image. This vector captures semantic meaning—what's in the photo, the scene, the mood.
Embeddings are cached in your local database. They're computed once per image, never recomputed unless you delete the cache.
When you search for "dog playing in snow":
- Your query is converted to a vector
- Find images whose vectors are most similar (cosine similarity)
- Results ranked by similarity score
Identities are people you've tagged. When you tag someone:
- Select 3-5 photos of that person
- Boreal averages their embeddings into a single "identity vector"
- That vector is stored with the person's name
When searching "photos of Steve":
- Look up Steve's identity vector
- Find images similar to that vector
- Rank by similarity
When searching "Steve at the beach":
- Generate text embedding for "at the beach"
- Look up Steve's identity vector
- Score each image:
α × text_similarity + (1-α) × identity_similarity - Rank by combined score (α defaults to 0.7)
Model: SigLIP2-so400m-patch14-384
Quantization: Int8 dynamic quantization (~400MB)
Inference: ONNX Runtime via the ort Rust crate
The model downloads on first use. Without it, search falls back to metadata only.
Select photos where:
- Face is clearly visible and reasonably large
- Person is the main subject
- Include variety: different lighting, angles, expressions
- 3-5 photos per person is usually enough
- Be descriptive: "golden retriever on beach" better than "dog"
- Include context: "birthday party with cake" better than "party"
- Try variations if first search doesn't work
-- Image embeddings (generated on import)
CREATE TABLE embeddings (
file_id TEXT PRIMARY KEY,
vector BLOB, -- 768 × float32 = 3KB
model_version TEXT
);
-- Identities (user-created)
CREATE TABLE identities (
id TEXT PRIMARY KEY,
name TEXT UNIQUE,
vector BLOB,
source_file_ids TEXT -- JSON array
);