Top AI Repos — open-source AI, indexed and scored
Top AI Repos tracks AI repositories on GitHub and answers two different questions about each one: is it moving right now, and would you bet a product on it.
Top AI Repos tracks AI repositories on GitHub and answers two different questions about each one: is it moving right now, and would you bet a product on it.
The open source Meme Search Engine and Finder. Free and built to self-host locally with Python, Ruby, and Docker.
| Date | Stars |
|---|---|
| 2026-07-24 | 697 |
| 2026-07-25 | 697 |
| 2026-07-28 | 697 |
| 2026-07-30 | 697 |
| 2026-08-06 | 697 |
Today
— stars today
This week
— stars this week
This month
— stars this month
Momentum
15.0
growth rate 0.00%/day
# A Meme Search Engine built to self-host in Python, Ruby, and Docker
[](https://discord.gg/7xsxU4ZG6A)
Use AI to index your memes by their content and text, making them easily retrievable for your meme warfare pleasures.
By default, processing from image-to-text extraction, to vector embedding, to search is performed locally. You can also use an OpenAI-compatible vision API for description generation while keeping embeddings and search local.
<p align="center">
<img src="https://github.com/user-attachments/assets/0529764f-a009-4e17-8947-63c7c96075a5"
alt="meme-search-2.0-demo">
</p>
This repository contains the services and web app for indexing, searching, and retrieving your memes with semantic and keyword search.
## Quick start
```sh
git clone https://github.com/neonwatty/meme-search.git
cd meme-search
docker compose up
```
Open <http://localhost:3000>, then drag, drop, or paste images on the upload page. The first local description generation downloads the selected model, so it takes longer than later generations.
The web UI binds to `127.0.0.1` by default because Meme Search does not currently include authentication. To access it from another device on a trusted network, copy `.env.example` to `.env` and set `APP_BIND_ADDRESS=0.0.0.0`. Do not expose an unauthenticated instance directly to the internet; use an authenticated reverse proxy or VPN.
A table of contents for the remainder of this README:
- [Meme search](#meme-search)
- [Features](#features)
- [Requirements](#requirements)
- [Installation instructions](#installation-instructions)
- [Time to first generation / downloading models](#time-to-first-generation--downloading-models)
- [Index your memes](#index-your-memes)
- [Custom bind address and app port](#custom-bind-address-and-app-port)
- [Building the app locally with Docker](#building-the-app-locally-with-docker)
- [Running tests](#running-tests)
- [Discord server](#discord-server)
- [Changelog](#changelog)
- [Feature requests and contributing](#feature-requests-and-contributing)
## Meme search
### Features
<p align="center">
<div style="display: grid; grid-template-columns: repeat(2, 1fr); gap: 10px;">
<figure>
<img align="center" src="https://github.com/jermwatt/readme_gifs/blob/main/meme-search-pro-search-example.gif" height="225">
<figcaption>Search</figcaption>
</figure>
<figure>
<img align="center" src="https://github.com/jermwatt/readme_gifs/blob/main/meme-search-pro-edit-example.gif" height="225">
<figcaption>Edit</figcaption>
</figure>
<figure>
<img align="center" src="https://github.com/jermwatt/readme_gifs/blob/main/meme-search-pro-filters-example.gif" height="225">
<figcaption>Filter</figcaption>
</figure>
<figure>
<img align="center" src="https://github.com/jermwatt/readme_gifs/blob/main/meme-search-generate-example.gif" height="225">
<figcaption>Generate</figcaption>
</figure>
<figure>
<img align="center" src="https://github.com/jermwatt/readme_gifs/blob/main/meme-search-2.0-bulk.gif" height="225">
<figcaption>Bulk Generation</figcaption>
</figure>
<figure>
<img align="center" src="https://github.com/jermwatt/readme_gifs/blob/main/meme-search-2.0-dark-mode.gif" height="225">
<figcaption>Dark Mode</figcaption>
</figure>
<figure>
<img align="center" src="https://github.com/jermwatt/readme_gifs/blob/main/meme-search-2.0-rescan.png" height="225">
<figcaption>Rescan</figcaption>
</figure>
<figure>
<img align="center" src="https://github.com/jermwatt/readme_gifs/blob/main/meme-search-2.0-rescan-show.png" height="225">
<figcaption>Rescan Status</figcaption>
</figure>
<figure>
<img align="center" src="https://github.com/jermwatt/readme_gifs/blob/main/meme-search-2.0-rescan-options.png" heExcerpt of 22,365 characters
Read on GitHubWould you bet a product on this? Bounded 0–100 and slow moving.
matched fp:4a356bbbb8ea2bd7, topic:vector-database, topic:semantic-search