Meme Search
Meme Search is a self-hosted search engine for your own meme collection. A local vision model writes a description of each image, and the memes can then be found by keyword or by meaning (vector search), tagged, and fetched through a read-only search API. This script runs the Rails app with PostgreSQL and pgvector, plus the Python image-to-text service on the CPU.
Meme Search
In Development
This script is currently in active development and may be unstable or incomplete. Use in production environments is not recommended.
This script is currently in active development and may be unstable or incomplete. Use in production environments is not recommended.
Installation
Default install:
1
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/ct/memesearch.sh)"
Notes
Meme Search has no login. Anyone who can reach port 3000 can browse and delete memes, change settings and create API tokens, so keep the container on a trusted network or behind a VPN.
Rails only answers to host names it knows. MEME_SEARCH_ALLOWED_HOSTS in /opt/memesearch_data/.env holds the container IP from the install. Add any other IP or host name (comma-separated, exact values) and run systemctl restart memesearch when the IP changes or a reverse proxy is in front.
The meme library is /opt/memesearch_data/memes. Every subfolder can be added as an image path under Settings, and uploads land in direct-uploads. To index memes from the host, bind-mount the folder as a subfolder, for example mp0: /tank/memes,mp=/opt/memesearch_data/memes/mymemes. A symlinked folder is rejected.
Descriptions are generated on the CPU with Florence-2-base. The first job downloads the model (about 450 MB) to /opt/memesearch_data/models. On 4 cores an image then takes 10 to 30 seconds, and the generator peaks at about 5 GB RAM. The 6 GB default only fits Florence-2-base: Florence-2-large and moondream2 need 8 to 12 GB RAM and more disk. Alternatively, an OpenAI-compatible vision API such as Ollama can be configured under Settings.
With var_gpu=yes and an NVIDIA GPU passed through, the generator installs CUDA PyTorch instead of the CPU build, which needs about 6 GB more disk.