Claude AutoCut
Edición de video local impulsada por una transcripción a nivel de palabra. Todo se ejecuta en la máquina del usuario: Whisper (faster-whisper) para el habla, FFmpeg para los medios, Pillow para los subtítulos y, solo en el modo caricatura, HyperFrames (Node.js) para renderizar la animación. Sin clave API, sin servicio pago, nada se sube.
La línea de comandos es scripts/autocut.py dentro de esta carpeta de habilidad. Ejecútala con el Python que tenga los requisitos instalados (ver "Configuración"):
python "<directorio-habilidad>/scripts/autocut.py" <comando> ...
<directorio-habilidad> es el directorio base de esta habilidad (se muestra cuando la habilidad se carga).
Elige el modo
| El usuario quiere | Modo | Comando |
|---|---|---|
| "editar este video", "cortar las pausas", "eliminar los 'um'", "limpiar mis tomas repetidas" | Edición Automática | edit VIDEO -o PROYECTO |
| subtítulos en un video sin cortarlo | Solo Subtítulos | captions VIDEO -o CARPETA |
| una escena animada sobre el orador, manteniendo toda la grabación | Animación Completa | cartoon init VIDEO -o PROYECTO, guion gráfico, cartoon render |
| editar primero, luego animar el video editado | Completo | complete VIDEO -o CARPETA, guion gráfico, cartoon render |
| "caricatura", "podcast animado" sin decir si cortar | preguntar una vez: ¿mantener todo (Animación Completa) o cortar primero (Completo)? |
Si la solicitud es ambigua, pregunta qué modo en una pregunta breve y recomienda uno. Antes de cualquier otra cosa, ejecuta doctor una vez en la sesión: indica qué modos están listos en esta máquina.
Configuración (una vez por máquina)
python -m venv .venvy actívalo, luegopip install -r "<directorio-habilidad>/requirements.txt".- FFmpeg (
ffmpegyffprobe) en PATH. - Solo modos caricatura: Node.js 18+ (npx y npm). HyperFrames 0.8.79 se obtiene mediante npx en el primer uso y nunca se actualiza automáticamente; cada proyecto de caricatura instala GSAP con npm.
python "<directorio-habilidad>/scripts/autocut.py" doctor
La primera transcripción descarga el modelo Whisper (--model tiny ~75 MB, small ~480 MB, el predeterminado). Usa --language cuando se conozca el idioma; --model medium o large-v3 para audio difícil.
Edición Automática
python "<directorio-habilidad>/scripts/autocut.py" edit input.mp4 -o edits/mi-video [--language en] [--model small]
Pasos: transcripción → análisis → plan → renderización → verificación (la edición se transcribe nuevamente y se compara) → subtítulos → REPORT.md. Salidas en la carpeta del proyecto: renders/cut_vN.mp4 (edición limpia), renders/final_vN.mp4 (con subtítulos incrustados), captions_vN.srt, decisions.md (cada segmento eliminado con su tipo y razón), analysis.md, verify_vN.json. Nada se sobrescribe nunca: cada renderización es una nueva versión. El video fuente solo se lee.
Lo que el plan hace por sí solo (conservador a propósito):
- recorta el silencio antes de la primera y después de la última palabra;
- acorta pausas más largas de 0.7 s pero nunca las elimina; una pausa después del final de una oración retiene más (una posible pausa para énfasis);
- elimina sonidos de relleno y una toma incompleta que se repite justo después;
- de dos tomas completas de la misma oración, conserva la más limpia según la evidencia, nunca "la última" o "la más corta"; si la evidencia es pareja, ambas se quedan y el caso se lista bajo "Para revisión";
- conserva el sonido audible que la transcripción omitió y descarta texto que Whisper inventó sobre silencio.
El control (cortes de alto impacto)
Un corte que elimina palabras no dichas en ningún otro lugar (incluyendo negaciones) es de alto impacto. El plan automático nunca hace uno; provienen solo de overrides.json (cortes que añades a solicitud del usuario). La renderización se detiene hasta que cada corte de alto impacto tenga una aprobación. Para aprobar, muestra al usuario el intervalo exacto y las palabras de decisions.md, obtén un sí explícito, luego:
python "<directorio-habilidad>/scripts/autocut.py" approve PROYECTO --start 12.0 --end 18.5 --by "usuario" --reason "pidió eliminar la digresión"
python "<directorio-habilidad>/scripts/autocut.py" edit input.mp4 -o PROYECTO # la transcripción se reutiliza, nueva versión renderizada
Nunca registres una aprobación que el usuario no dio. plan PROYECTO vuelve a ejecutar análisis y plan sin renderizar.
overrides.json (en la carpeta del proyecto)
{"cuts": [{"start": 12.0, "end": 18.5, "reason": "digresión fuera de tema"}],
"keep": [{"start": 3.0, "end": 4.2, "reason": "el relleno es parte del chiste"}],
"pauses": {"p04": {"action": "keep"}, "p07": {"keep_s": 0.8}}}
Los ids de pausas (p04) provienen de analysis.md. Lee references/editing.md para saber cómo se clasifican las decisiones.
Informar al usuario
Lee REPORT.md y decisions.md e informa al usuario, brevemente: duración antes y después, qué se eliminó y por qué, cualquier cosa bajo "Para revisión", si la verificación pasó (palabras faltantes, negaciones conservadas). Di que no puedes escuchar ni ver el video: el ritmo y el gusto son para que el usuario los juzgue con sonido.
Solo Subtítulos
python "<directorio-habilidad>/scripts/autocut.py" captions input.mp4 -o captions/mi-video [--no-burn] [--caption-y 0.75]
Escribe captions.srt, captions.json y captioned.mp4. Los videos verticales obtienen subtítulos grandes en mayúsculas al 70% de la altura; los horizontales se colocan cerca de la parte inferior. Cada palabra hablada aparece una vez, en orden.
Caricatura (Animación Completa y Completo)
cartoon init VIDEO -o PROYECTO(Completo haceeditprimero y crea el proyecto de caricatura sobre la edición).- Lee
PROYECTO/speech.md(bloques de habla con tiempos) y escribePROYECTO/storyboard.json: escenas que cubren todo el video sin espacios, cada una con un escenario, las poses y caras del presentador, objetos y palabras en pantalla. El esquema, el catálogo (escenarios, poses, caras, objetos, transiciones) y las reglas de diseño están enreferences/cartoon.md. Léelo antes de escribir el primer guion gráfico. cartoon check PROYECTOhasta que no reporte errores. El texto en pantalla solo puede usar palabras que se hablan.cartoon snapshot PROYECTO --at 1.5,8,20y mira los fotogramas enreviews/.cartoon render PROYECTO(o--range 0-6para una prueba rápida). Salida:renders/cartoon_vN.mp4con el audio fuente copiado sin cambios;renders/cartoon_vN.qc.jsonverifica duración y audio.
La animación lee el significado del habla solo a través del guion gráfico que escribes: el código no entiende el habla por sí mismo.
Reglas
- Nunca modifiques ni elimines el video fuente o renderizaciones anteriores.
- Nunca agregues un corte que cambie el significado del habla; nunca apruebes un corte de alto impacto por el usuario.
- El texto en pantalla y los subtítulos usan solo palabras que se hablan.
- Ejecuta las renderizaciones una a la vez; la renderización de caricatura es pesada (ver
references/troubleshooting.md). - No afirmes que el resultado "suena bien": no puedes escucharlo. Reporta lo que se midió.
Cuando algo falla
Consulta references/troubleshooting.md (FFmpeg faltante, descarga del modelo, Node/npx, HyperFrames, memoria, idioma incorrecto, transcripción deficiente).