Spaces:
Runtime error
Runtime error
File size: 5,985 Bytes
5f39285 df0006b 5f39285 622382e 5f39285 4a02afe 5f39285 4a02afe 5f39285 4a02afe 5f39285 4a02afe 5f39285 4a02afe 5f39285 4a02afe 5f39285 4a02afe 5f39285 4a02afe 5f39285 4a02afe 5f39285 4a02afe 5f39285 4a02afe 5f39285 4a02afe 5f39285 4a02afe 5f39285 4a02afe 5f39285 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 | ---
title: ShutterSearch
emoji: 📷
colorFrom: indigo
colorTo: purple
sdk: gradio
sdk_version: 6.18.0
python_version: 3.13.3
app_file: app.py
pinned: false
license: apache-2.0
tags:
- track:backyard-ai
- sponsor:openbmb
- sponsor:modal-labs
- sponsor:minicpm
short_description: Local-first photo search powered by MiniCPM-V-4.6
fullWidth: true
---
# 📷 ShutterSearch — Intelligent Photo Archive
ShutterSearch is a local-first, privacy-preserving semantic search and photography archive manager. It turns unstructured folders of raw photographs into organized, natural-language searchable catalogs without uploading your private master files to any third-party cloud.
---
## 🏆 Hackathon Submission Details
This project was built for the **Hugging Face [Build Small](https://huggingface.co/build-small) Hackathon** under the following tracks:
* **Primary Track:** Backyard AI (Local-first / Offline track)
* **Sponsor Award Compatibility:**
* **OpenBMB Awards:** Powered by the flagship lightweight visual-understanding model **MiniCPM-V-4.6** (≤7B params) for high-performance visual scene parsing.
* **Modal Labs Awards:** Seamlessly integrates with **Modal Labs** serverless GPU compute infrastructure to scale visual ingestion pipelines off-site, returning detailed annotations back to your local cache.
---
## 👥 The Team
* **Subash-Lamichhane** ([@Subash-Lamichhane](https://huggingface.co/Subash-Lamichhane))
* **najus** ([@najus](https://huggingface.co/najus))
* **Swikar Gautam** ([@SwikarG](https://huggingface.co/SwikarG))
---
## ✅ Pre-Flight Validation Checklist
This section verifies compliance with the submission requirements of the *Build Small* Hackathon:
- [x] **Stay under 32B:** The core Vision Language Model used is **MiniCPM-V-4.6** (8B/7B class model), and the text embedding model is **all-MiniLM-L6-v2** (22M parameters). Combined, the total parameter footprint is less than 9B parameters, safely under the 32B limit.
- [x] **Ship a Gradio App:** Fully deployed as a native Gradio Application Space within the official Build Small organization on Hugging Face.
- [x] **Record a Demo:** A visual walkthrough demonstrating local indexing, search, selection, and download is linked below.
- [x] **Post It:** A public showcase of ShutterSearch has been published on social media.
- [x] **Mind the GPU Limit:** Fully self-contained. Local execution relies on local memory and GPU resources, while our offloaded inference operates within standard boundaries.
---
## 📹 Presentation & Links
* **Demo Video:** *https://www.youtube.com/watch?v=aTLrOBhSRwU&feature=youtu.be*
* **Social Media Post:** *https://x.com/SUJANKOIRA96725/status/2066583761597436253*
---
## 💡 The Problem & The Backyard Solution
Photographers manage massive directories of RAW/JPEG images across external drives. Managing them typically requires sacrificing ownership by uploading them to third-party image hosts, manually tagging files, or enduring slow loading speeds when viewing high-resolution imagery.
**ShutterSearch solves this on your terms:**
* **Local Caching & Privacy:** Your original master image files never leave your machine.
* **Dual-Inference Pipeline (Local & Modal Labs):** Run inference fully offline on your own local GPU, or scale up your pipeline using **Modal Labs** serverless containers to process large batches on cloud-based H100s, caching the resulting semantic captions back locally.
* **On-the-Fly WebP Thumbnails:** Avoid high-resolution display lag. ShutterSearch caches images as lightweight WebP thumbnails (300px max, 70% quality) for smooth, lag-free visual scrolling.
* **Multi-Select Bulk Export:** Select multiple images (indicated visually by inline `✅` overlay badges) across Search results or Collections to package and download high-resolution originals in a structured ZIP.
---
## 🛠️ Tech Stack & Model Selection
| Component | Technology | Role |
|-----------|------------|------|
| **Core VLM** | `openbmb/MiniCPM-V-4.6` | Scene parsing, composition classification, and tagging |
| **Semantic Search** | `all-MiniLM-L6-v2` | High-dimensional text-to-image semantic index maps |
| **Inference Scaling** | `Modal Labs` (Optional) | Serverless GPU execution for scalable batch parsing |
| **Frontend UI** | Gradio | Dark-workspace layout and interface state engine |
| **Thumbnail Optimizer** | `Pillow` (PIL) | Compresses files to WebP (300px, 70% quality) |
| **Local Database** | Flat JSON Storage | No bulky setups; simple, human-readable data mapping |
### Why MiniCPM-V-4.6?
We chose OpenBMB’s MiniCPM-V-4.6 because it matches or outperforms larger models (like Claude 3 Opus and GPT-4V) in optical character recognition (OCR), layout understanding, and fine-grained visual reasoning while remaining compact enough to run on standard consumer-grade workstations.
---
## 📦 Setting Up Locally
### Prerequisites
Make sure your environment has Python 3.10+ and a GPU with at least 8GB VRAM (or a configured CPU environment).
1. **Clone the repository:**
```bash
git clone https://huggingface.co/spaces/build-small-hackathon/ShutterSearch
cd ShutterSearch
```
2. **Set up a virtual environment and activate it:**
```bash
python -m venv venv
# On Windows:
.\venv\Scripts\activate
# On macOS/Linux:
source venv/bin/activate
```
3. **Install dependencies:**
```bash
pip install -r requirements.txt
```
4. ***Setup modal***
```bash
modal setup
modal deploy modal_caption.py
```
5. **Launch the application:**
```bash
python app.py
```
---
## 🏆 Hackathon Details
Developed for the Hugging Face "Build Small" Hackathon (Backyard AI / OpenBMB Tracks). Focused on model-efficiency, local UI caching pipelines, high-fidelity source protection, and a professional workspace interface. |