Find is a local-first AI image intelligence platform for uploading, indexing, searching, and clustering images on your own machine.
All image processing, vector generation, and search stay inside your local stack.
- Upload individual images or ZIP archives
- Extract captions, detected objects, OCR text, EXIF metadata, and dimensions
- Generate hybrid embeddings for semantic search
- Automatically cluster related images after indexing completes
- Browse gallery, inspect details, like/delete media, and review cluster members
- Frontend: Next.js 16, React 19, React Query, Tailwind CSS, Biome
- Backend: FastAPI, SQLAlchemy, PostgreSQL + pgvector, Redis, RQ, MinIO
- ML pipeline: YOLOv10, Florence-2, PaddleOCR, SigLIP (
open-clip), HDBSCAN
Next.js frontend
|
v
FastAPI API
|
+--> PostgreSQL + pgvector (metadata, embeddings, clusters)
+--> MinIO (image object storage)
+--> Redis + RQ (background analysis and clustering jobs)
|
v
ML worker
This project is open for GSSoC'26 contributions.
- Start with issues labeled
good first issue - For medium/advanced work, check
level 2andlevel 3 - Look for priority queue items via
help wanted - Follow the contribution rules in CONTRIBUTING.md
From repository root:
docker compose up --buildServices:
- Frontend:
http://localhost:3000 - Backend API:
http://localhost:8000 - MinIO API:
http://localhost:9000 - MinIO console:
http://localhost:9001
Notes:
- Current Docker setup is GPU-oriented and expects NVIDIA GPU access.
- If no root
.envis present, compose defaults support local demo startup.
- Node.js 18+ and
pnpm - Python 3.12 and
uv - PostgreSQL with
pgvector - Redis
- MinIO (or S3-compatible storage)
git clone https://github.com/Abhash-Chakraborty/Find.git
cd Find
cp .env.example .envcd backend
uv sync --group dev
uv run uvicorn find_api.main:app --reloadcd backend
uv run rq worker --url redis://localhost:6379 high default lowcd frontend
pnpm install
pnpm devcd frontend
pnpm check
pnpm buildcd backend
uv run ruff check .
uv run ruff format --check .- Frontend uploads images to
/api/uploador/api/upload/bulk. - Backend stores files in MinIO and creates
mediarows in PostgreSQL. - Uploads are queued through RQ.
- Worker extracts metadata and generates embeddings.
- Backend queues clustering once indexing succeeds.
- Frontend polls job status and updates gallery/search/cluster views.
POST /api/uploadPOST /api/upload/bulkGET /api/status/{job_id}GET /api/galleryGET /api/image/{media_id}POST /api/image/{media_id}/likeDELETE /api/image/{media_id}GET /api/search?q=...GET /api/clustersGET /api/cluster/{cluster_id}POST /api/cluster/run
.env.example reflects the current stack. Keep EMBEDDING_DIM aligned with the selected CLIP/SigLIP model and pgvector dimensions.
- Pick an issue and comment to get assigned.
- Fork and create a branch from
main. - Make changes with focused commits.
- Run quality checks from CONTRIBUTING.
- Open a PR using the project template and link the issue.
- Use GitHub Issues for bugs/features/questions.
- For contributor context, tag maintainers in your issue or PR (
@Abhash-Chakraborty). - Follow Code of Conduct in all interactions.
MIT