--- title: Meme Search created: 2026-06-08 updated: 2026-06-08 type: app tags: [catalogue, search-engines, self-hosted, python] confidence: medium contested: false sources: - https://neonwatty.github.io/meme-search/ - https://github.com/neonwatty/meme-search --- # Meme Search 🐸 > Moteur de recherche de mèmes par similarité visuelle, basé sur le machine learning (embeddings + CLIP). | Métadonnée | Valeur | | :--- | :--- | | **Site web** | https://neonwatty.github.io/meme-search/ | | **GitHub** | https://github.com/neonwatty/meme-search | | **License** | MIT | | **Langage** | Python + Ruby | | **Étoiles** | 677 | | **Dernière MAJ** | 2026-05-31 | | **Catégorie** | [[cat-search-engines]] | ## Description Meme Search est un **moteur de recherche par similarité sémantique** spécialisé dans les mèmes et les images drôles. Plutôt que de chercher par mot-clé, l'utilisateur saisit une description (« chien qui regarde son maître manger ») et l'IA retrouve les mèmes visuellement similaires dans la collection, grâce à des modèles **CLIP** d'OpenAI combinés à un index vectoriel. L'application est livrée avec une **bibliothèque de mèmes pré-indexée** (plusieurs milliers d'images) mais l'utilisateur peut y ajouter ses propres mèmes via téléversement. L'indexation locale utilise des embeddings de 512 dimensions stockés dans un fichier `.npz` (NumPy compressé), et la recherche est effectuée par **cosine similarity** en quelques millisecondes. C'est un projet pédagogique amusant qui combine Python (backend ML, FastAPI), Ruby (probablement pour le script d'ingestion), et un frontend web léger. Idéal pour qui veut expérimenter avec **CLIP / embeddings / vector search** sur un cas d'usage concret, sans la complexité d'Elasticsearch ou Pinecone. ## Installation ### Docker Compose ```yaml services: meme-search: image: neonwatty/meme-search:latest container_name: meme-search build: context: https://github.com/neonwatty/meme-search.git environment: - PORT=8000 - PYTHONUNBUFFERED=1 volumes: - ./data:/app/data - ./memes:/app/memes ports: - "8000:8000" labels: - traefik.enable=true - traefik.http.routers.meme.rule=Host(`meme.example.com`) - traefik.http.routers.meme.entrypoints=websecure - traefik.http.routers.meme.tls.certresolver=letsencrypt - traefik.http.services.meme.loadbalancer.server.port=8000 restart: unless-stopped ``` ### Local ```bash git clone https://github.com/neonwatty/meme-search.git cd meme-search && pip install -r requirements.txt python app.py ``` ## Configuration 1. Cloner le repo et installer les dépendances Python (PyTorch, FastAPI, Pillow, transformers). 2. Téléverser vos mèmes dans le dossier `./memes/` (PNG/JPG/GIF). 3. Lancer le script d'**indexation** : `python indexer.py --memes ./memes --out data/embeddings.npz`. 4. Démarrer le serveur web : `uvicorn app:app --host 0.0.0.0 --port 8000`. 5. Accéder à l'UI sur `http://localhost:8000` et saisir une requête en langage naturel. ## Alternatives - **Open source** : [[app-meilisearch]] (recherche full-text généraliste), SearXNG Images, ImgOps, SauceNAO (anime), ASCIImoji, IconFinder, Hydrus Network (booru + tags), OpenBooru (booru + ML). - **Propriétaire** : Google Lens (propriétaire, multimodal), TinEye (reverse image), Yandex Images, Pinterest Visual Search, Bing Visual Search. ## Sécurité - **Modèle CLIP local** : aucune image n'est envoyée à un cloud (OpenAI, Google, etc.). - **Pas d'auth intégrée** : déployer derrière un reverse proxy avec Authelia si exposition publique. - **HTTPS obligatoire** pour ne pas MITM les requêtes de l'utilisateur vers le serveur. - **Limiter l'upload** à des formats d'image (PNG/JPG/WebP) et une taille max pour éviter l'amplification. - **Modèle de modération** optionnel : classifier les NSFW avant indexation si la collection est mixte. ## Ressources - Code : https://github.com/neonwatty/meme-search - Démo : https://neonwatty.github.io/meme-search/ - Documentation CLIP : https://github.com/openai/CLIP - Issues : https://github.com/neonwatty/meme-search/issues ## Pages Liées - [[cat-search-engines]] — Catégorie parente - [[app-meilisearch]] — Moteur de recherche full-text - [[app-searxng]] — Méta-moteur de recherche - [[recettes-docker-compose]] — Modèles de stacks