Initial vault setup
This commit is contained in:
@@ -0,0 +1,95 @@
|
||||
---
|
||||
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
|
||||
Reference in New Issue
Block a user