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.