Reels Vault
Rôle
Archive personnelle de reels Instagram et posts Reddit sauvegardés. Transcription automatique, résumés IA, et interface de recherche en langage naturel via chat.
Accès
| LXC | 118 — 192.168.1.77 |
| Port | 80 (Nginx) · 8200 (FastAPI) |
| URL | https://reels.2h15.fr (VPN uniquement) |
| Stack | Python + yt-dlp + faster-whisper + Claude CLI + Nginx + FastAPI |
| Service | reels-api |
Contenu indexé
| Source | Nb entrées |
|---|---|
| Instagram (reels) | 35 |
| Reddit (posts + commentaires) | 29 |
| Total | 64 |
Architecture
reels.2h15.fr → Nginx (port 80) → vault.html (interface web)
├── POST /api/ask → FastAPI (port 8200)
│ └── claude -p (index.md comme contexte)
└── POST /api/ingest → FastAPI (port 8200)
└── ingest_url.py → build_vault.py + generate_index.py
Interface
- Chat : recherche en langage naturel → réponse Claude basée sur
index.md - Filtres : source (Tout / Instagram / Reddit), tags (cachés par défaut, bouton "Tags ▾/▴")
- Ajouter un lien : formulaire d'ajout d'URL directe (reel Instagram ou post Reddit)
Pipelines d'ingestion
Par URL directe (depuis l'interface)
Formulaire "➕ Ajouter un lien" dans vault.html — accepte :
| Type | Exemple d'URL |
|---|---|
| Reel Instagram | https://www.instagram.com/reel/Abc123/ |
| Post Reddit | https://www.reddit.com/r/sub/comments/post_id/titre/ |
| Commentaire Reddit | https://www.reddit.com/r/sub/comments/post_id/titre/comment_id/ |
- Instagram : téléchargement yt-dlp + transcription Whisper (~2-5 min)
- Reddit : scraping
old.reddit.com(~5 sec) - Rebuild
vault.html+index.mdautomatique après ingestion
Par export RGPD (batch)
Instagram :
pct push 118 /tmp/saved_posts.json /opt/reels/inbox/saved_posts.json
pct exec 118 -- python3 /opt/reels/ingest.py inbox/saved_posts.json
pct exec 118 -- python3 /opt/reels/build_vault.py
Reddit :
pct push 118 /tmp/saved_posts.csv /opt/reels/inbox/saved_posts.csv
pct push 118 /tmp/saved_comments.csv /opt/reels/inbox/saved_comments.csv
pct exec 118 -- python3 /opt/reels/ingest_reddit.py inbox/saved_posts.csv inbox/saved_comments.csv
pct exec 118 -- python3 /opt/reels/build_vault.py
Fichiers importants
| Chemin | Rôle |
|---|---|
/opt/reels/ingest.py |
Ingestion Instagram batch (yt-dlp + Whisper) |
/opt/reels/ingest_reddit.py |
Ingestion Reddit batch (scraping CSV) |
/opt/reels/ingest_url.py |
Ingestion URL unique (Instagram ou Reddit) |
/opt/reels/build_vault.py |
Génère résumés Claude + vault.html |
/opt/reels/generate_index.py |
Génère index.md (contexte chat Claude) |
/opt/reels/app.py |
API FastAPI (/api/ask + /api/ingest) |
/opt/reels/index.md |
Index condensé pour le chat |
/opt/reels/journal.json |
Journal de traitement (évite les doublons) |
/opt/reels/raw/ |
Fichiers Markdown bruts par entrée |
/opt/reels/cache/{uid}.json |
Résumés + tags Claude mis en cache |
Débogage
Résumé "(résumé indisponible)" ou erreur 500 lors de l'ajout
Cause probable : credentials Claude expirés.
# 1. Renouveler les credentials
pct push 118 /root/.claude/.credentials.json /root/.claude/.credentials.json
# 2. Supprimer le cache corrompu (remplacer {uid} par l'UID de l'entrée)
pct exec 118 -- rm /opt/reels/cache/{uid}.json
# 3. Rebuilder
pct exec 118 -- bash -c "cd /opt/reels && python3 build_vault.py"
Service API en panne
pct exec 118 -- systemctl status reels-api
pct exec 118 -- journalctl -u reels-api -n 50
pct exec 118 -- systemctl restart reels-api
Tester l'API manuellement
# Chat
pct exec 118 -- curl -s -X POST http://localhost:8200/api/ask \
-H "Content-Type: application/json" \
-d '{"question": "test"}'
# Ajout d'une URL
pct exec 118 -- curl -s -X POST http://localhost:8200/api/ingest \
-H "Content-Type: application/json" \
-d '{"url": "https://www.reddit.com/r/..."}'