You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat: add semantic icon search with VLM descriptions and embeddings
Add embedding-based search so users can find Lucide icons by natural
language queries ("payment", "hard work", "owl") instead of exact name
matching.
Architecture:
- Gemini 2.5 Flash Lite generates rich text descriptions from rendered
icon PNGs + Lucide metadata (tags, categories) at build time
- nomic-embed-text-v1.5-Q computes embeddings with asymmetric
search_query/search_document prefixes
- Descriptions saved as JSONL (durable source of truth), embeddings
stored in a separate SQLite search DB
- Search DB auto-downloaded on first use, cached locally
- Lucide repo auto-cloned for metadata during description generation
New modules:
- search.py: public API (search_icons, search_available, SearchResult)
- build_search.py: VLM + embedding build pipeline with JSONL intermediate
- build_clusters.py: HDBSCAN clustering + Gemini Flash theme naming
- cli.py: unified `lucide` CLI with subcommands (db, describe,
build-search, search, cluster, version)
Main DB now includes relational metadata:
- icon_tags (12,619 rows), icon_categories (3,309), icon_aliases (248)
- All indexed for fast lookup
CLI search with inline icon rendering via Kitty graphics protocol
(Ghostty, kitty, WezTerm) with white background for visibility.
Optional extra: pip install python-lucide[search]
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
0 commit comments