- Kind
- Media management MVP
- Year
- 2025
- Built with
- Next.js
- Supabase
- Prisma
- Cloudflare R2
- Weaviate
- CLIP
The question
How would you find a picture in a large library when you cannot remember what it was called?
VisuaLab lets you describe it, or show a similar image, and searches by what the image contains.
Why it exists
Upload, organise and serve images, with the files stored in Cloudflare R2 and searchable by what they look like.
How it works
From an upload to a search result
- 1
Upload
An image is posted with its title, tags, licence and privacy level.
- 2
Processing
The image is resized into thumbnails and responsive sizes in three formats, and its metadata is read.
- 3
Storage
Files go to Cloudflare R2 and the record to PostgreSQL.
- 4
Indexing
In the background a CLIP embedding is computed and added to the Weaviate index.
- 5
Search
A text or image query is embedded the same way and matched by similarity. Private images are filtered out for other users.
Decisions
The upload returns before indexing
Embedding and indexing run in the background, so the person uploading is not kept waiting for the search index.
Three privacy levels, enforced in search as well
Public, unlisted and private images are checked on lookup and on semantic search, so a private image does not appear in someone else’s results.
It runs without cloud storage
When no R2 credentials are set, files are written locally, so the project can be tried on a laptop.
Built with
Frameworks and libraries
- Next.js
- Prisma
- Weaviate
- CLIP
Data and storage
- Supabase
- Cloudflare R2