Communitygithub.com

frameproof

L'agent regarde des vidéos sans angles morts et prouve le timecode de ce qu'il a vu. Hors ligne, sans clé API.

Qu'est-ce que frameproof ?

frameproof est un outil conçu pour les agents IA (Claude, Cursor, etc.) qui décompose et analyse des vidéos localement, sans nécessiter de clés API. Il génère un index complet des images et du son, offrant une couverture (coverage) qui révèle les zones où l'agent n'a « pas vu » d'image. L'agent peut chercher par texte (OCR sur les images, transcription vocale) et ne récupère que les images nécessaires pour valider ses affirmations, économisant des tokens visuels. Une fonction de vérification automatique (verify) contrôle l'intégrité de chaque référence par timecode et image, signalant les liens cassés. Pour les vérifications contradictoires, un sous-agent dédié (frameproof-adversary) examine les affirmations sans connaître le contexte, garantissant une double vérification impartiale. L'outil fonctionne en ligne de commande, avec des commandes comme index, search, frames, et verify, et recommande de ne jamais deviner ce qui est à l'écran sans en avoir vu l'image.

Compatible avec~Claude Code✓Codex CLI~Cursor
npx skills add edvardgrishin27/frameproof

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

frameproof — regarder une vidéo et pouvoir le prouver

Règle principale

Ne prétends jamais ce qui était à l'écran si tu n'as pas vu l'image.

L'outil imprime honnêtement la couverture. Si le rapport contient une zone « SANS IMAGE », parle directement de cet intervalle : « il n'y a pas d'image ici, d'après le son voici ce que c'est ». Une supposition présentée comme une observation dévalue toute l'analyse.

Chaque affirmation sur l'écran doit être accompagnée d'une étiquette [MM:SS / fNNNN]. Ce n'est pas une décoration : frameproof verify vérifie chaque étiquette par rapport à l'index. Un lien inventé sera détecté par l'arithmétique, sans aucun modèle.

Procédure

1. Index

frameproof index "<lien ou chemin>" --ocr

Affiche un rapport de couverture. Lis-le avant tout le reste : combien d'images, quel écart maximum, y a-t-il des zones sans images.

Le chemin vers l'index se trouve dans la dernière ligne de la sortie. Il est nécessaire ensuite comme --out.

--ocr active la reconnaissance de texte sur les images (macOS, hors ligne). Cela rend l'écran « greppable » : commandes, noms de fichiers et URLs sont trouvés par recherche sans aucune image. Une copie séparée est reconnue dans sa résolution native, l'affichage reste léger.

Options utiles : --max-gap 10 (couverture plus dense), --max-frames 400 (vidéo longue), --lang ru (langue de transcription si pas de sous-titres).

Si des sous-titres prêts existent à côté de la vidéo — --subs speech.srt, c'est plus précis et plus rapide que la transcription. Sur d'autres systèmes que macOS, la reconnaissance s'active avec son propre moteur : --ocr-command "<programme>", qui reçoit les chemins des images et imprime chemin<TAB>texte.

2. Lis la carte

cat <index>/index.json

Petit fichier, lis-le entièrement. Il contient la durée, le nombre d'images, la source de la transcription et — surtout — le bloc coverage.

3. Cherche par texte, pas par images

frameproof search "<requête>" --out <index>

Recherche à la fois dans la parole et dans le texte à l'écran. Renvoie des lignes avec des timecodes. Pas une seule image — zéro token visuel. La plupart des questions sont résolues ici.

La recherche est approximative (trigrammes), les déclinaisons russes ne gênent pas.

Pour des sélections plus complexes, grep directement :

grep -i "docker" <index>/segments.jsonl | head
grep -i "npm" <index>/frames.jsonl | head

4. Regarde les images uniquement quand c'est indispensable

frameproof frames --at 4:12 --out <index>          # moment
frameproof frames --ids f0043,f0044 --out <index>  # images spécifiques

Seule commande qui renvoie des images. Lis les chemins fournis via Read.

Budget : 4–8 images à la fois. Une image 1280×720 coûte environ 1196 tokens visuels. Afficher toutes les images d'une vidéo d'une heure, c'est des centaines de milliers de tokens ; à ne pas faire.

5. Réponds avec preuve

Format d'une affirmation sur l'écran :

À 18:38, un tableau de routage des modèles est affiché : MAIN — cher et intelligent, AUXILIARY — bon marché et rapide. [18:38 / f0097]

Si quelqu'un demande un article ou un résumé, insère les images comme illustrations via leurs chemins depuis frames.jsonl et mets un timecode à côté.

6. Vérifie-toi — quand on te le demande

L'étiquette [MM:SS / fNNNN] n'est pas une décoration, mais un lien vérifiable. Un audit mécanique est gratuit et instantané ; lance-le sur toute analyse de plus de deux paragraphes :

frameproof verify <fichier-analyse.md> --out <index>

Il ne sait rien du sens — il vérifie l'intégrité du lien : l'image existe-t-elle, son timecode correspond-il, le moment tombe-t-il dans une zone sans image, cette image a-t-elle été demandée, la ligne citée apparaît-elle dans le texte de l'image ou dans la parole à proximité.

FAIL — c'est un lien cassé, il faut le réparer, pas en discuter. WARN — une raison d'ouvrir l'image et de regarder visuellement.

7. Second regard aveugle — seulement sur demande explicite

Quand quelqu'un dit « vérifie l'analyse », « revérifie », « es-tu sûr d'avoir vu ça » — lance une vérification contradictoire.

frameproof verify <fichier> --out <index> --plan

La commande produit un JSON avec des tâches. Délègue-les au sous-agent frameproof-adversary en un seul appel (pas un agent par affirmation — un seul suffit).

Ce qu'il faut transmettre au sous-agent : seulement la liste numérotée des affirmations et les chemins vers les images, exactement comme dans le JSON.

Ce qu'il NE faut PAS transmettre, pas un mot :

  • la question posée par la personne ;
  • tes propres réflexions sur pourquoi tu as tiré cette conclusion ;
  • le reste du texte de l'analyse ;
  • toute indication sur la réponse que tu considères correcte.

Le sous-agent ne voit pas l'historique du dialogue — c'est garanti. Mais le message de délégation est écrit par toi, et c'est le seul canal de fuite restant. Un vérificateur connaissant la réponse attendue est inutile : il la confirmera.

Que faire des verdicts :

  • CONFIRMED — laisse tel quel.
  • REFUTED — marque, ne supprime pas : [non confirmé par second regard : <raison>]. Les réfutateurs se trompent sur les affirmations correctes plus souvent qu'on ne le pense, donc c'est la personne qui décide, pas toi.
  • UNSUPPORTED — dis honnêtement : cela n'est pas visible sur l'image, la conclusion est basée sur le son ou sur des moments voisins.

Ne lance pas ce passage de ta propre initiative après chaque analyse. Il coûte des tokens et du temps, alors que la couche mécanique attrape la plupart des problèmes gratuitement.

Ce qu'il ne faut pas faire

  • Ne résume pas la vidéo uniquement à partir de la transcription en appelant cela une analyse d'écran. La parole et l'écran divergent : dans la vidéo, la personne dit « openrouter », et à l'écran il est écrit openrouter/pareto-code (min_coding_score 0.65). La seconde information n'existe que dans les images et l'OCR.
  • Ne charge pas des images en lots « au cas où ». D'abord la recherche, puis les images ciblées.
  • Ne présente pas l'OCR comme le texte littéral du code. La reconnaissance confond la ponctuation : [main est lu comme Imain. L'OCR sert à TROUVER l'image ; ce qui est écrit dessus, regarde-le visuellement.
  • Ne tais pas les zones aveugles. Si la couverture est inférieure à 100 %, dis-le à la personne.

Si quelque chose manque

frameproof doctor

Montre ce qui est installé et ce qui ne l'est pas. ffmpeg et numpy sont obligatoires ; yt-dlp n'est nécessaire que pour les liens ; la transcription nécessite mlx-whisper (rapide sur Apple Silicon) ou openai-whisper (partout). Aucune clé n'est nécessaire.

Skills associés