On-device semantic-search models for Photos for Proton, an unofficial open-source Proton Drive Photos client for Android.
The app searches photos by what they show, entirely on the device, opt-in and off by default. Nothing about a photo or a query leaves the phone: each photo is encoded once while indexing, each typed query is encoded at search time, and the two are compared locally. Only the model files below are downloaded (once, over the network the app already uses).
Semantic search is a two-tower CLIP model: an image encoder embeds each photo and a text encoder embeds the query into the same 512-dimensional space, so a plain cosine ranks photos against the query.
| File | Purpose | Upstream | License |
|---|---|---|---|
clip_image.onnx |
Image encoder (512-d embedding) | OpenCLIP ViT-B/16, DataComp-1B (datacomp_xl_s13b_b90k) |
MIT |
clip_text.onnx |
Text encoder (512-d embedding) | same model, text tower | MIT |
Both files are float16 ONNX exports produced from the upstream published weights, not upstream ONNX files. SOURCE.md records the exact model and the reproducible export steps, and the export script is in convert/.
The app verifies each download against these before use.
| File | Size (bytes) | SHA-256 |
|---|---|---|
clip_image.onnx |
172680414 | 57bd1d3bc57e74d99a14a1ef0d1de717049dc2a14cb867a5927907a88c4eecaf |
clip_text.onnx |
127267139 | 2ca4794ab703fdccf8bd903ae6fa52835ba657c8b68e1d569fb59400a859d282 |
Published as assets on the v1 release, not committed to the tree.
SOURCE.md records the exact upstream model, the export steps, the input/output contract, the client-side preprocessing, and how to verify the bytes. The files are exported from the upstream weights with the script in convert/.
The model keeps its upstream license, with the full text in licenses/ and attribution in NOTICE:
clip_image.onnx,clip_text.onnx: MIT (licenses/openclip-LICENSE.txt)
The packaging and documentation in this repository are Apache-2.0 (LICENSE). If you reuse any of this, keep LICENSE, NOTICE and licenses/ intact.