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. Processing is local by default, with an optional OpenAI-compatible vision provider.

GitHub stars Docker ready Local AI by default Discord
Meme Search interface showing semantic meme search results

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

New: Search API v1

Find the right meme without opening the web app.

Search from the included local CLI or experimental unpacked Chromium popup, then build your own read-only integration against a documented, token-authenticated contract—without direct database access.

Official support is loopback-only. API tokens do not authenticate the web UI, so direct public exposure is unsupported.

A 16-second silent demo of web-app search and local CLI retrieval. Read the transcript and exact commands.

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.

🔌

Local integrations

Use the read-only Search API, CLI, or experimental Chromium popup to retrieve memes outside the web app.

Meme Search results for a natural-language query
Semantic Search
Editing an indexed meme description in Meme Search
Edit Descriptions
Filtering Meme Search results by tags and directories
Tags and Filters
Generating an AI description for a meme
Auto-Generate
Selecting multiple memes for bulk AI description generation
Bulk Generation
Switching the Meme Search interface to dark mode
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.