How ks0vibe/photographer-style-search-engine works
DeepStyle is an image-reference search product with a Streamlit interface and FastAPI backend. Its user workflow accepts text or an image, encodes the query with CLIP, retrieves image candidates from Qdrant, applies filters and optional reranking, and returns enriched ranked results. A separate offline workflow prepares the image corpus and search data. The README documents additional object-aware retrieval and a FAISS baseline; their precise runtime wiring is not established by the sampled excerpts, so those links are not inferred.
Main entry points: qdrant_retrieval_service.py Qdrant retrieval · routes.py FastAPI routes · create_database.py SQLite metadata · dependencies.py API metadata lookup
Components 23
User experience
- Streamlit demo
app/demo/streamlit_app.py - FastAPI routes
app/api/routes.py - App lifecycle
app/main.py - Search wiring
app/api/dependencies.py - Ranked image results
app/api/schemas.py
Search runtime
- Qdrant retrieval
app/search/qdrant_retrieval_service.py - CLIP encoder
app/ml/clip_encoder.py - Style reranker
app/search/style_reranker.py - Object-aware reranker
app/search/object_aware_reranker.py
Metadata and indexes
- Qdrant store
app/search/qdrant_store.py - Qdrant collection
app/search/qdrant_config.py - API metadata lookup
app/api/dependencies.py - Search metadata repository
app/search/metadata_repository.py - SQLite metadata
app/database/create_database.py
Offline preparation
- Metadata database setup
app/database/create_database.py - Visual descriptors
scripts/extract_visual_features.py - YOLO object extraction
scripts/extract_detected_objects.py - CLIP image embeddings
scripts/extract_clip_embeddings.py - FAISS index baseline
scripts/build_flat_index.py - Qdrant collection setup
scripts/setup_qdrant_collection.py - Embedding upload
scripts/upload_embeddings_to_qdrant.py
Other components
- Search user
- Unsplash corpus
Connections 22
- Search user → Streamlit demo: searches
- Streamlit demo → FastAPI routes: requests search
- FastAPI routes → Search wiring: gets application
- Search wiring → Qdrant retrieval: constructs service
- FastAPI routes → Qdrant retrieval: dispatches query
- Qdrant retrieval → CLIP encoder: encodes query
- Qdrant retrieval → Qdrant store: searches candidates
- Qdrant store → Qdrant collection: queries vectors
- Qdrant retrieval → Style reranker: reranks candidates
- Qdrant retrieval → Object-aware reranker: optional object reranking
- FastAPI routes → API metadata lookup: enriches results
- API metadata lookup → SQLite metadata: reads metadata
- API metadata lookup → Ranked image results: populates response
- Qdrant retrieval → Ranked image results: returns ranked matches
- Unsplash corpus → Metadata database setup: supplies metadata
- Metadata database setup → SQLite metadata: creates and imports
- Visual descriptors → SQLite metadata: stores descriptors
- YOLO object extraction → SQLite metadata: stores detections
- CLIP image embeddings → FAISS index baseline: provides embeddings
- CLIP image embeddings → Embedding upload: provides embeddings
- Qdrant collection setup → Qdrant collection: creates collection
- Embedding upload → Qdrant collection: uploads vectors