Aller au contenu

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.md automatique 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/..."}'