~/Library/Application Support/photoscrawl/photos.sqlite: one asset per photo/video plus per-asset observations (OCR text, visual/scene labels, detected people, album membership) from Apple Vision and a local model. A photo has no words of its own, so DuckBrain makes it searchable by aggregating those observations into text_body (lines like Scene: beach, sunset / People: … / Text: <OCR> / Album: …).
Install photoscrawl
photoscrawl isn’t on the Homebrew tap — install it from source:What gets ingested
- Observations, not pixels.
photoscrawl crawlreads the library;photoscrawl classifyruns a local vision model to produce the labels. Only assets that have been described (have observations) are ingested — a bare crawl with noclassifyyields no searchable text. - Aggregated into
text_body. OCR, scene/visual labels, people, and album membership become the searchable text for each asset. - Upsert. Labels accrue as
classifyruns, updating each asset in place. - Manual refresh. Crawl and classify are heavy, so there’s no auto-refresh lane — run them, then
duckbrain sync photos.
Facet mapping
Apple Photos is macOS-only. Rows are
classification: confidential and never leave the machine.