Communitygithub.com

edvardgrishin27/frameproof

El agente ve videos sin puntos ciegos y demuestra con marcas de tiempo que lo ha visto. Sin conexión, sin claves API.

¿Qué es frameproof?

frameproof es una habilidad para agentes de IA (como Claude, Cursor, Codex) que permite ver y analizar videos de forma offline, sin depender de APIs externas. Su enfoque principal es la verificabilidad mecánica: cada afirmación visual debe ir acompañada de una marca de tiempo [MM:SS / fNNNN], la cual puede ser auditada automáticamente por el comando `verify` para detectar referencias falsas. El flujo de trabajo incluye indexar el video (con reconocimiento óptico de caracteres OCR offline en macOS), buscar texto tanto en el habla como en los capturas de pantalla, y extraer solo los cuadros necesarios (con un presupuesto ajustado para minimizar tokens). Además, ofrece un proceso de verificación adversaria opcional, donde un subagente `frameproof-adversary` examina las afirmaciones de forma independiente, sin conocer el contexto completo, para detectar discrepancias. La herramienta es gratuita, no requiere llaves API y funciona exclusivamente con herramientas locales como ffmpeg, numpy y yt-dlp.

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

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

frameproof — ver un video y poder demostrarlo

Regla principal

Nunca afirmes lo que había en la pantalla si no viste el cuadro.

La herramienta imprime honestamente la cobertura. Si en el informe hay una sección "SIN CUADRO" — habla directamente sobre ese intervalo: "aquí no hay cuadro, por el audio — esto es lo que hay". Una suposición presentada como observación desacredita todo el análisis.

Cada afirmación sobre la pantalla debe llevar la etiqueta [MM:SS / fNNNN]. No es un adorno: frameproof verify verifica cada una de estas etiquetas contra el índice. Una referencia inventada será detectada por la aritmética, sin necesidad de ningún modelo.

Flujo de trabajo

1. Índice

frameproof index "<enlace o ruta>" --ocr

Muestra el informe de cobertura. Léelo antes que nada: cuántos cuadros, cuál es la brecha máxima, si hay secciones sin cuadros.

La ruta al índice está en la última línea de la salida. Luego se necesita como --out.

--ocr activa el reconocimiento de texto en los cuadros (macOS, offline). Esto hace que la pantalla sea "grepable": comandos, nombres de archivo y URL se encuentran mediante búsqueda sin una sola imagen. Se reconoce una copia separada en resolución nativa; la visualización sigue siendo ligera.

Claves útiles: --max-gap 10 (cobertura más densa), --max-frames 400 (video largo), --lang ru (idioma de transcripción, si no hay subtítulos).

Si junto al video hay subtítulos listos — --subs speech.srt, es más preciso y rápido que la transcripción. En macOS no se usa reconocimiento; se conecta con su propio motor: --ocr-command "<programa>", que recibe las rutas de las imágenes e imprime ruta<TAB>texto.

2. Lee el mapa

cat <índice>/index.json

Archivo pequeño, léelo completo. Contiene duración, número de cuadros, fuente de transcripción y — lo principal — el bloque coverage.

3. Busca con texto, no con imágenes

frameproof search "<consulta>" --out <índice>

Busca tanto en el habla como en el texto de la pantalla. Devuelve líneas con marcas de tiempo. Ni una sola imagen — cero tokens visuales. La mayoría de las preguntas se resuelven aquí.

La búsqueda es a nivel de subcadenas (trigramas); los casos rusos no interfieren.

Para consultas más complejas, haz grep directamente:

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

4. Mira cuadros solo cuando no puedas evitarlo

frameproof frames --at 4:12 --out <índice>          # momento
frameproof frames --ids f0043,f0044 --out <índice>  # cuadros concretos

El único comando que entrega imágenes. Lee las rutas emitidas mediante Read.

Presupuesto: 4–8 cuadros a la vez. Un cuadro de 1280×720 cuesta aproximadamente 1196 tokens visuales. Mostrar todos los cuadros de un video de una hora son cientos de miles de tokens; no se debe hacer.

5. Responde con evidencia

Formato de una afirmación sobre la pantalla:

En 18:38 se muestra la tabla de enrutamiento de modelos: MAIN — cara e inteligente, AUXILIARY — barata y rápida. [18:38 / f0097]

Si la persona pidió un artículo o resumen — inserta los cuadros como ilustraciones usando sus rutas de frames.jsonl y coloca la marca de tiempo al lado.

6. Verifícate a ti mismo — cuando te lo pidan

La etiqueta [MM:SS / fNNNN] no es un adorno, sino un enlace verificable. La auditoría mecánica es gratuita e instantánea; ejecútala en cualquier análisis de más de un par de párrafos:

frameproof verify <archivo-con-análisis.md> --out <índice>

No sabe nada sobre el significado — solo verifica la integridad del enlace: si el cuadro existe, si su marca de tiempo es correcta, si el momento no cae en una sección sin cuadros, si ese cuadro se solicitó, si la línea citada aparece en el texto del cuadro o en el habla cercana.

FAIL — es un enlace roto, hay que arreglarlo, no discutirlo. WARN — es motivo para abrir el cuadro y mirarlo con los propios ojos.

7. Segunda opinión a ciegas — solo cuando se pida explícitamente

Cuando la persona dice "revisa el análisis", "vuelve a verificar", "¿estás seguro de que viste esto?" — ejecuta una verificación adversarial.

frameproof verify <archivo> --out <índice> --plan

El comando genera un JSON con tareas. Delega estas tareas al subagente frameproof-adversary en una sola llamada (no un agente por afirmación — uno es suficiente).

Qué pasar al subagente: solo la lista numerada de afirmaciones y las rutas a los cuadros, exactamente como en el JSON.

Qué NO pasar, ni una palabra:

  • la pregunta que hizo la persona;
  • tus propias reflexiones sobre por qué llegaste a esa conclusión;
  • el resto del texto del análisis;
  • ninguna indicación de qué respuesta consideras correcta.

El subagente no ve el historial del diálogo — esto está garantizado. Pero el mensaje de delegación lo escribes tú, y es el único canal de fuga restante. Un verificador que conoce la respuesta esperada es inútil: la confirmará.

Qué hacer con los veredictos:

  • CONFIRMED — déjalo como está.
  • REFUTED — márcalo, no lo elimines: [no confirmado por segunda opinión: <razón>]. Los refutadores se equivocan en afirmaciones correctas con más frecuencia de lo que parece, por lo tanto la decisión la toma la persona, no tú.
  • UNSUPPORTED — di honestamente: en el cuadro no se ve esto, la conclusión se basó en el audio o en momentos cercanos.

No ejecutes esta pasada por iniciativa propia después de cada análisis. Cuesta tokens y tiempo, y la capa mecánica detecta la mayoría de los problemas de forma gratuita.

Lo que no se debe hacer

  • No resumas el video solo con la transcripción y lo llames análisis de pantalla. El habla y la pantalla divergen: en el video la persona dice "openrouter", pero en la pantalla está escrito openrouter/pareto-code (min_coding_score 0.65). Lo segundo solo está en los cuadros y en el OCR.
  • No cargues cuadros en lotes "por si acaso". Primero búsqueda, luego cuadros puntuales.
  • No presentes OCR como texto de código literal. El reconocimiento confunde puntuación: [main se lee como Imain. El OCR sirve para ENCONTRAR el cuadro; lo que está escrito en él, míralo con tus propios ojos.
  • No te calles sobre las secciones ciegas. Si la cobertura es menor al 100 %, díselo a la persona.

Si falta algo

frameproof doctor

Muestra qué está instalado y qué falta. Son obligatorios ffmpeg y numpy; yt-dlp solo es necesario para enlaces; la transcripción — mlx-whisper (rápido en Apple Silicon) o openai-whisper (en todas partes). No se necesitan claves para nada.

Skills relacionados