{"data":{"slug":"neonwatty-meme-search","name":"meme-search","tagline":"An open-source meme search engine designed for self-hosting using Python, Ruby and Docker.","github_url":"https://github.com/neonwatty/meme-search","owner":"neonwatty","repo":"meme-search","owner_avatar_url":"https://avatars.githubusercontent.com/u/16326421?v=4","primary_language":"Ruby","stars":747,"forks":27,"topics":["ai","docker","homelab","machine-learning","meme","self-hosted","semantic-search","vector-database"],"archived":false,"github_pushed_at":"2026-09-10T13:25:33+00:00","maintenance_label":"Active","stars_delta_30d":52,"url":"https://www.graphcanon.com/tools/neonwatty-meme-search","markdown_url":"https://www.graphcanon.com/tools/neonwatty-meme-search.md","api_url":"https://www.graphcanon.com/api/graphcanon/tools/neonwatty-meme-search","graph_url":"https://www.graphcanon.com/api/graphcanon/graph?tool=neonwatty-meme-search","description":"The open source Meme Search Engine and Finder.  Free and built to self-host locally with Python, Ruby, and Docker.","homepage_url":"https://meme-search.neonwatty.com/","license":"Apache-2.0","open_issues":2,"watchers":3,"ai_summary":"The repository hosts the codebase for a meme search engine that can be self-hosted locally with support from Python, Ruby, and Docker. It employs machine learning techniques for semantic searching.","readme_excerpt":"# A Meme Search Engine built to self-host in Python, Ruby, and Docker\n\n\n\nUse AI to index your memes by their content and text, making them easily retrievable for your meme warfare pleasures.\n\nBy 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.\n\nVisit the [Meme Search project site](https://meme-search.neonwatty.com/) for a visual feature overview, or continue below for installation and configuration details.\n\n> **Search beyond the web app.** Meme Search now includes a documented,\n> token-authenticated [Search API v1](docs/search-api.md), a\n> [dependency-free local CLI](integrations/cli/README.md), and an\n> [experimental unpacked Chromium popup](integrations/browser-extension/README.md).\n> The API is read-only and officially supported on loopback; it also gives\n> community integrations a stable boundary that does not expose your database.\n\n[Watch the 16-second app-and-CLI demo](https://meme-search.neonwatty.com/#integrations).\n\n  <p align=\"center\">\n    <img src=\"https://github.com/user-attachments/assets/0529764f-a009-4e17-8947-63c7c96075a5\"\n  alt=\"meme-search-2.0-demo\">\n  </p>\n  \nThis repository contains the services and web app for indexing, searching, and retrieving your memes with semantic and keyword search.\n\n---\n\n## Quick start\n\n```sh\ngit clone https://github.com/meme-search/meme-search.git\ncd meme-search\ndocker compose up\n```\n\nOpen <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.\n\nThe web UI binds to `127.0.0.1` by default because it does not include user\nauthentication. Official support is loopback-only for API v1 and the included\nclients. API bearer tokens protect only the versioned integration\nendpoints; they do not protect the web UI or settings. Direct public exposure\nis unsupported. Proxy/VPN operation is advanced and unsupported; its\nauthentication, TLS, and network controls are entirely the operator's\nresponsibility.\n\nA table of contents for the remainder of this README:\n\n- [Meme search](#meme-search)\n\n  - [Features](#features)\n  - [Requirements](#requirements)\n  - [Installation instructions](#installation-instructions)\n  - [Time to first generation / downloading models](#time-to-first-generation--downloading-models)\n  - [Index your memes](#index-your-memes)\n  - [Search API and local integrations](#search-api-and-local-integrations)\n  - [Custom bind address and app port](#custom-bind-address-and-app-port)\n  - [Building the app locally with Docker](#building-the-app-locally-with-docker)\n  - [Running tests](#running-tests)\n- [Discord server](#discord-server)\n- [Changelog](#changelog)\n- [Feature requests and contributing](#feature-requests-and-contributing)\n\n---\n\n### Requirements\n\n**For Docker deployment** (recommended):\n- Docker and Docker Compose\n\n**For local development**:\n- Ruby 3.4.2\n- Rails 8.0.4\n- Python 3.12\n- Node.js 20 LTS\n- PostgreSQL 17 with pgvector extension\n\nWe recommend using [mise](https://mise.jdx.dev/) for managing Ruby, Python, and Node.js versions. See [CLAUDE.md](CLAUDE.md) for detailed setup instructions.\n\n---\n\n### Installation instructions\n\nFrom the repository root, start the server cluster with Docker Compose:\n\n```sh\ndocker compose up\n```\n\nThis pulls and starts containers for the app, database, Solid Queue job worker, and local auto description generator. The app runs on port `3000` and is available locally at:\n\n```sh\nhttp://localhost:3000\n```\n\nThe Compose files store app data in local bind-mounted directories so upgrades keep using the same files:\n\n- `./meme_search/db_data/meme-search-db` for Postgres data\n- `./meme_search/direct-uploads` for drag-and-drop uploads\n- `./meme_search/db_data/image_to_text_generator` for generator queue data\n- `./meme_search/models` for model downloads","github_created_at":"2024-06-08T22:08:51+00:00","created_at":"2026-07-11T11:27:38.075955+00:00","updated_at":"2026-09-20T06:07:43.448298+00:00","categories":[{"slug":"data-retrieval","name":"Data & Retrieval","url":"https://www.graphcanon.com/categories/data-retrieval","markdown_url":"https://www.graphcanon.com/categories/data-retrieval.md","api_url":"https://www.graphcanon.com/api/graphcanon/categories/data-retrieval"},{"slug":"vector-databases","name":"Vector Databases","url":"https://www.graphcanon.com/categories/vector-databases","markdown_url":"https://www.graphcanon.com/categories/vector-databases.md","api_url":"https://www.graphcanon.com/api/graphcanon/categories/vector-databases"}],"tags":[{"slug":"ai","name":"ai"},{"slug":"docker","name":"docker"},{"slug":"homelab","name":"homelab"},{"slug":"machine-learning","name":"machine-learning"},{"slug":"meme","name":"meme"},{"slug":"self-hosted","name":"self-hosted"},{"slug":"semantic-search","name":"semantic-search"},{"slug":"vector-database","name":"vector-database"}],"trust":{"provenance":{"is_fork":false,"github_id":812434636,"owner_type":"Organization","methodology":"github_public_v1","parent_repo":null,"near_duplicate_slugs":[]},"computed_at":"2026-09-20T06:07:40.903Z","maintenance":{"label":"Active","score":82,"methodology":"github_public_v1","releases_90d":3,"days_since_push":9,"last_release_at":"2026-08-05T00:10:49Z","stars_delta_30d":52,"open_issues_delta_30d":2},"security_summary":{"status":"no_lockfile","scanner":null,"low_count":0,"high_count":0,"last_scan_at":"2026-07-11T11:27:39.377Z","medium_count":0,"scan_profile":"none","critical_count":0}},"capability_facts":{"mcp":{"source":"repo_scan","observed_at":"2026-09-20T06:07:42.121Z","server_manifest":false},"scan":{"source":"repo_scan","observed_at":"2026-09-20T06:07:42.121Z"},"deploy":{"source":"dockerfile:docker-compose.yml","self_host":true,"observed_at":"2026-09-20T06:07:42.121Z","managed_saas":false},"languages":{"value":["ruby","javascript","typescript"],"source":"github.language+package.json","observed_at":"2026-09-20T06:07:42.121Z"},"has_docker":{"value":true,"source":"dockerfile:docker-compose.yml","observed_at":"2026-09-20T06:07:42.121Z"},"license_spdx":{"value":"Apache-2.0","source":"github.license","observed_at":"2026-09-20T06:07:42.121Z"}},"decision_facts":{"hosting":null,"pricing":null,"requirements":null,"constraints":null,"when_to_use":["You require a specialized tool designed to specifically locate memes in your collection or the web using a self-hosted solution.","Your project involves homelab setups where integrating AI functionalities like semantic search is beneficial for meme retrieval."],"when_not_to_use":["The need arises for a ready-to-use cloud-based service without managing local hosting configurations, as meme-search requires setting up locally using Docker.","If the focus is on general-purpose data retrieval or vector database management that does not involve memes or specific self-hosted setups."],"source":"enrich:decision_facts","observed_at":"2026-07-14T19:54:44.629Z"},"constraint_facets":null,"decision_summary":[{"label":"Adopt for","value":"meme-search is an open-source meme search engine for self-hosting that uses Python, Ruby and Docker with semantic searching capabilities via machine learning algorithms."}]}}