Files
2026-06-09 18:40:21 +02:00

4.3 KiB

title, created, updated, type, tags, confidence, contested, sources
title created updated type tags confidence contested sources
Meme Search 2026-06-08 2026-06-08 app
catalogue
search-engines
self-hosted
python
medium false
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

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

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

Pages Liées