EyeNode
Offline semantic image search for Android. Find any screenshot or photo by describing what's in it fully locally.
// Aspiring Full Stack Developer
const me = {
location: "Apex, NC",
studying: "Computer Science (B.S.)",
year: 2,
university: "NC State University",
role: "Student",
interests: [
"full-stack development",
"mobile apps",
"backend systems",
"AI & robotics",
],
currentlyBuilding: "where",
};
// projects.json
Offline semantic image search for Android. Find any screenshot or photo by describing what's in it fully locally.
// skills.md
Python
Java
Dart
HTML / CSS
JavaScript
Flutter
WordPress
Git & GitHub
ML Kit
Python IT Specialist
PCAP-31-03
Flutter Development (Udemy)
Presidential Awards — Silver & Gold
Organization & Mentorship
Strategic Planning
Public Speaking
Project Management
// contact.ts
export const links = {
github:
github.com/kishanrajeevemail:
kishanrj@outlook.comlinkedin:
linkedin.com/in/kishanrajeev};
# eyenode
**Offline semantic image search for Android** — find any screenshot or photo by describing what's in it fully locally.
Built as a modernized successor to [TIDY](https://github.com/slavabarkov/tidy).
## Features
- **Text-to-image search** — type "spotify screenshot" or "album cover" and find matching images
- **Image-to-image search** — tap any image to find visually similar ones
- **100% offline** — nothing leaves your device
- **Fast** — cached embeddings, cosine similarity on-device
## Getting models
The app needs 4 files, imported through the in-app file picker at **Settings → Import models** or when app first launched.
### Download
```bash
pip install huggingface_hub
# ONNX models (MobileCLIP2-S2)
huggingface-cli download plhery/mobileclip2-onnx \
onnx/s2/vision_model.onnx onnx/s2/text_model.onnx --local-dir ./models
# Tokenizer (standard CLIP vocab/merges)
huggingface-cli download openai/clip-vit-base-patch32 \
vocab.json merges.txt --local-dir ./models
```
### Transfer to phone & import
Copy all 4 files to your phone, open the app, grant storage permission and import the files.
### Model options (Only MobileCLIP2-S2 supported at this time)
| Model | Size | Latency | Accuracy |
|-------|------|---------|----------|
| **MobileCLIP2-S2** ⭐ | 143 MB | ~7 ms | 77.2% |
| MobileCLIP2-S0 | 43 MB | ~5 ms | 71.5% |
| MobileCLIP2-B | 330 MB | ~14 ms | 79.4% |
| ViT-B/32 (legacy) | 350 MB | ~15 ms | 63.3% |
Use `onnx/s0/` instead of `onnx/s2/` for MobileCLIP2-S0 or `onnx/b/` for MobileCLIP2-B.
## Tech Stack
| Component | Technology |
|-----------|-----------|
| Language | Kotlin 2.1 |
| UI | Jetpack Compose + Material 3 |
| ML Runtime | ONNX Runtime 1.27 |
| Model | MobileCLIP2-S2 (Apple, 2025) |
| Database | Room 2.6 |
| Image Loading | Coil 2.7 |
| Build | Gradle 8.7 + Kotlin DSL |
## License
GPL-3.0 — see LICENSE.
Portions derived from [TIDY](https://github.com/slavabarkov/tidy) (GPL-3.0), HuggingFace tokenizer code (Apache 2.0), and MobileCLIP2 (Apple Sample Code License).