Open source meme search engine

Find any meme by what's in it.

Meme Search uses AI to index your memes by their content and text, making them instantly retrievable with semantic search. All processing runs locally on your machine.

GitHub stars Docker ready 100% local AI Discord
Meme Search demo showing semantic search in action

Your memes deserve better than scrolling through folders. Index them once with local AI, then search by meaning — not just filenames.

Features

Everything you need to organize and retrieve your memes.

🔍

Semantic search

Search by meaning, not keywords. Powered by Postgres and pgvector for fast vector and keyword search.

🤖

Auto-generate descriptions

AI models describe your memes automatically. Target specific memes or bulk-generate descriptions for your entire collection.

🏷

Tags and filters

Create, edit, and assign tags. Filter by tags, directory paths, and description embeddings for precise control.

Manual editing

Edit or add descriptions manually for better search results. No need to wait for auto-generation.

📁

Directory paths

Organize memes across multiple subdirectories. Rescan to automatically detect and index new additions.

📤

Drag-and-drop upload

Upload memes directly through the web interface. Supports JPG, PNG, WEBP with bulk upload up to 50 files.

🌌

Dark mode

Toggle between light and dark themes for comfortable viewing in any environment.

Bulk generation

Generate descriptions for multiple memes at once for faster indexing of large collections.

🐳

Docker ready

One command to start. docker compose up pulls and runs the app, database, and AI generator.

Search demo
Semantic Search
Edit demo
Edit Descriptions
Filter demo
Tags and Filters
Generate demo
Auto-Generate
Bulk generation demo
Bulk Generation
Dark mode demo
Dark Mode

How it works

Three services, one command, all local.

1

Point at your memes

Mount your meme directories via Docker volumes. The app detects and registers subdirectories through the settings UI.

2

AI describes them

A local vision-language model reads each meme and generates a text description. Choose from 6 models depending on your hardware.

3

Search by meaning

Descriptions are embedded as vectors in Postgres with pgvector. Search returns memes ranked by semantic similarity to your query.

AI Models

Choose the right model for your hardware.

All models run locally. Smaller models work on constrained hardware; larger ones produce richer descriptions.

250M params Florence-2-base Default

Microsoft's compact vision-language model. Best balance of speed and quality for most setups.

700M params Florence-2-large

Larger Florence variant for richer descriptions when you have the RAM to spare.

256M params SmolVLM-256

Hugging Face's lightweight model. Fast inference on minimal hardware.

500M params SmolVLM-500

Mid-range SmolVLM variant. Better descriptions than 256M with moderate resource use.

2B params Moondream2

Full-size vision-language model. Best description quality, needs ~5GB memory.

2B INT8 Moondream2-INT8

Quantized Moondream2. Cuts memory to ~1.5-2GB with minimal quality loss. Ideal for CPU-only machines.

Install

One command to start searching your memes.

Requires Docker and Docker Compose. The app runs on port 3000 by default, customizable via .env file.

git clone https://github.com/neonwatty/meme-search.git
cd meme-search

docker compose up

# Open http://localhost:3000

Tech stack

Built with Rails, Python, Postgres, and pgvector.

Rails 8 + Ruby 3.4

The web application, search interface, and meme management UI. Serves the frontend and orchestrates the pipeline.

Python 3.12

Runs the image-to-text models. Receives memes via API, returns generated descriptions back to Rails.

PostgreSQL 17 + pgvector

Stores meme metadata, descriptions, tags, and vector embeddings. Powers both keyword and semantic search.