/video-edit
Clips en bruto adentro, reel terminado afuera. El usuario nunca abre un editor: revisa una copia para el teléfono y da notas; cada iteración es un re-renderizado de ~2 minutos.
Leer antes de construir: references/looks.md (los tres looks, valores exactos), references/layout.md (zona segura,
ubicación, fórmula detrás-de-la-cabeza), references/gotchas.md (cada trampa ya encontrada una vez). Leer
references/overlays.md cuando el guion requiera una inserción animada.
Funciona en macOS, Linux y Windows. setup.py detecta la máquina al inicio de cada ejecución y cada comando a continuación proviene de ese registro, así que nunca adivines rutas o shells: consulta "Esta máquina" justo después del Paso 0.
Paso 0: Configuración inicial (se ejecuta una vez)
SK es la carpeta de esta habilidad (la que contiene este SKILL.md), como ruta completa. Normalmente ~/.claude/skills/video-edit;
en Windows eso es C:/Users/<nombre>/.claude/skills/video-edit.
Busca SK/config.json.
Si existe: cárgalo (nombre, usuario de Instagram, look predeterminado, carpetas), ejecuta el script de configuración exactamente como en el paso 3 a continuación (unos segundos: solo verifica y repara el entorno después de una actualización), lee "Esta máquina", y ve al Paso 1 una vez que imprima READY.
Si no existe:
- Di: "¡Bienvenido a /video-edit! Vamos a configurarlo. Esto toma unos 2 minutos y solo ocurre una vez."
- Pregunta, en un solo mensaje:
- Tu nombre (usado en tu inserción de perfil de Instagram)
- Tu usuario de Instagram (para tu inserción de perfil y para obtener tus reels para el efecto órbita)
- Look predeterminado: bold (palabras cinéticas detrás de tu cabeza), cool girl (cálido, serif itálica amarilla, tus reels orbitándote) o cool dude (editorial oscuro, mayúsculas espaciadas + serif). Ofrece bold si no está seguro.
- Dónde suelen estar tus clips en bruto (por defecto
~/Downloads) y dónde deberían vivir los proyectos (por defecto~/reel-edits)
- Ejecuta el script de configuración con el Python que tenga la máquina. Prueba estos en orden hasta que uno imprima líneas STATUS:
python3 "SK/scripts/setup.py", luegopython "SK/scripts/setup.py", luegopy -3 "SK/scripts/setup.py". (En Windows,python3suele ser un stub de Microsoft Store que imprime "Python was not found": solo prueba el siguiente.) Si ninguno funciona: falta Python. Proporciona la solución para su sistema y detente (Windows:winget install --id Python.Python.3.12 -e, Mac:brew install python, Linux:sudo apt install python3 python3-venv). Luego lee las líneas STATUS:- ffmpeg / node / python venv FALTANTE: la línea termina con la solución exacta para ESTA máquina (winget en Windows, brew en Mac, apt en Linux). Entrégasela al usuario y detente hasta que el script imprima READY.
- Windows: el usuario pega las líneas winget en su propia ventana de PowerShell (winget les pide aceptar sus términos la primera vez), luego cierra Claude Code por completo y lo vuelve a abrir, o los nuevos programas no se encuentran.
- El script descarga los 6 efectos de sonido por sí mismo. Si aún los reporta FALTANTES (sin conexión), eso es opcional: el reel simplemente no tendrá SFX hasta que se agreguen.
- Opcional, Apify (obtiene reels y estadísticas del perfil automáticamente): prueba una llamada simple MCP de Apify. Si no está
conectado, di que es opcional y cómo agregarlo:
- Crea una cuenta gratuita en https://apify.com y copia el token de API desde Configuración > API e Integraciones.
- En una terminal, pega esta línea con el token en lugar de YOUR_TOKEN:
claude mcp add apify -e APIFY_TOKEN=YOUR_TOKEN -- npx -y @apify/actors-mcp-server(aviso: Claude Code almacena el token en texto plano en~/.claude.json; mantén ese archivo privado). - Vuelve a abrir Claude y ejecuta /video-edit nuevamente. Sin Apify, la habilidad les pide que coloquen sus archivos de reel en el proyecto.
- Guarda
SK/config.json(sin secretos, nunca):{"name": "...", "instagram": "usuario-sin-@", "defaultLook": "bold", "clipsDir": "~/Downloads", "projectsDir": "~/reel-edits", "setupComplete": true, "setupDate": "YYYY-MM-DD"} - Di: "¡Configuración completa! Ejecutando /video-edit ahora..." y continúa.
Esta máquina (leer en cada ejecución)
Lee SK/.platform.json, escrito por setup.py. Registra el SO (os: macos, linux o windows), la CPU y los
comandos exactos para esta computadora:
PY= su valorpython: el Python propio de la habilidad (.venv/bin/pythonen Mac y Linux,.venv/Scripts/python.exeen Windows). Ejecuta CADA script Python de esta habilidad con él, nunca un simplepython3.HF=PY "SK/scripts/hf.py": inicia el HyperFrames fijado (npx --yes [email protected] ...) con el Node correcto en cualquier SO. Sinnvm use, sin problemas denpx.cmd.cutout:CoreML(Apple Silicon) oCPU(Windows, Linux, Mac Intel: sin ayuda de GPU, así que el paso de recorte es el lento; dilo, ejecútalo en segundo plano y sigue construyendo).
setup.py reescribe este archivo en cada ejecución (Paso 0), por lo que siempre está actualizado. Si falta el archivo, o PY ya no
existe: la configuración no se ejecutó o no llegó a READY; ejecútala como en el Paso 0.3 y sigue su solución.
Un estilo de comando que funciona en zsh, bash, Git Bash y PowerShell:
- Rutas completas entre comillas dobles con barras inclinadas (también funciona en Windows):
"PY" "SK/scripts/ingest.py" "<proyecto>". - En PowerShell (Windows sin Git for Windows, o cuando la herramienta PowerShell es la que tienes) pon
&al inicio:& "PY" "SK/scripts/ingest.py" "<proyecto>". - Un comando por llamada. Sin
&&, sinVAR=1 comando, sin~dentro de argumentos, sinsource, sinzsh. ffmpegyffprobeestán en PATH en todos los SO (setup lo verifica), así que los comandos ffmpeg únicos son iguales en todas partes.
Reglas estrictas
- Todo dentro de la zona segura de Reels: arriba 220, abajo 450 (nada debajo de y 1470), lados 35, derecha 100 desde y 1155.
- Nunca cubrir la cara con texto o tarjetas. Las palabras detrás de la cabeza muestran al menos ~70% de cada letra.
- Los subtítulos dicen lo que realmente se dijo: corrige las malas interpretaciones de Whisper de nombres y palabras clave ("Claude" a menudo sale como "nube"/"garras", "skill" como "escala"). Sin guiones largos en el texto en pantalla.
- Efectos de sonido sutiles (plantilla
SFX_GAIN = 0.75de los volúmenes base), nunca más fuertes que la voz. - Acreditar a otros creadores en pantalla (@usuario) cada vez que aparezcan sus reels. Números reales en el perfil del propio usuario; cualquier otra cosa (comentaristas, historial de chat) es un marcador de posición genérico, nunca una persona real, nunca una prueba fabricada.
- Probar cortes desde el render final, no desde capturas instantáneas.
- Nunca eliminar los archivos del usuario. Los originales se leen, nunca se modifican.
Flujo de trabajo
1. Recepción
- Clips: los archivos que nombre el usuario, o los archivos de video más nuevos en
clipsDir. Crear<projectsDir>/<slug-corto>/. (~en config.json es la carpeta de inicio del usuario,C:/Users/<nombre>en Windows. Los scripts de la habilidad lo expanden). - Enlaces de referencia (reels IG, pins de Pinterest) para un estilo: descargarlos y mirar los fotogramas antes de diseñar nada (consulta overlays.md para saber cómo obtenerlos).
2. Ingesta
PY SK/scripts/ingest.py <proyecto> <clips o carpeta> [--newest 5]
Mira work/sheets.jpg (configuraciones y ángulos) y lee transcript.txt (líneas por clip, palabras con tiempos, mapa de habla).
3. Elegir tomas -> <proyecto>/edl.json
- Reconstruir el guion a partir de las tomas: la gente repite una línea hasta que sale bien. Usar la ÚLTIMA toma limpia completa a menos que el usuario diga lo contrario ("la mejor sección comienza en 0:47" significa una toma continua desde allí).
- Puntos de entrada/salida del mapa de habla: comenzar ~0.05-0.07s antes de la primera palabra, terminar al inicio del silencio después de la última palabra. Eliminar el silencio entre secciones; confirmar pausas cortas con silencedetect antes de recortar (Whisper puede inventar una palabra inicial en un corte).
- Dos segmentos seguidos del mismo ángulo: acercar uno (zoom 1.3-1.9 desde el original 4K, cx/cy en el pecho).
- Palabras inciertas (palabra clave, desencadenante CTA): volver a transcribir ese fragmento con medium.en y un prompt que contenga los nombres.
- Formato:
[{"id": "hook", "clip": "c1", "in": 12.66, "out": 15.72, "zoom": 1.0, "cx": 0.5, "cy": 0.5, "line": "..."}] - Publicar el EDL para el usuario como una tabla corta (línea, clip, look por sección) y seguir adelante; no esperar.
4. Ensamblar, transcribir, recortar
PY SK/scripts/assemble.py <proyecto> # aroll.mp4 limpio 30fps CFR + segments.json con fotogramas exactos
PY SK/scripts/transcribe_cut.py <proyecto> "<nombres y palabras clave en el guion>"
PY SK/scripts/cutout.py <proyecto> # ejecutar en segundo plano; afirma que los fotogramas de recorte == fotogramas de aroll
PY SK/scripts/headpos.py <proyecto> # después del recorte: posición de cabeza/cuerpo por segmento
Un recorte a la vez (aproximadamente 1.5 GB de RAM). Imprime una línea de progreso cada 30 segundos.
5. Inserciones en paralelo (tan pronto como el EDL esté bloqueado)
Para cada inserción animada que el guion requiera (una aplicación en pantalla, el seguimiento de perfil en el CTA, un desplazamiento de archivo),
crear un subagente en segundo plano con la plantilla de resumen en references/overlays.md: tamaño fijo, duración fija,
ritmo bloqueado en los tiempos de las palabras, salida webm transparente. Seguir construyendo la edición principal mientras trabajan.
6. Construir
Copiar SK/assets/template/ en el proyecto (build.py, hyperframes.json, package.json, assets/fonts, assets/sfx),
luego adaptar build.py. Es la construcción terminada de un reel real: mantener la maquinaria, reescribir el contenido (su
cadena de documentación enumera qué es qué).
- Qué look dónde:
defaultLookpara todo el reel; una línea que nombre un look cambia su sección. - La órbita y la cuadrícula de perfil usan los propios reels del usuario (overlays.md: raspador de publicaciones de Apify con su usuario, o archivos que
coloquen en
assets/reels/). - Iterar desde la carpeta del proyecto:
HF lint(0 errores), luegoPY build.py --safe, luegoHF snapshot --at <10-20 momentos> --no-end --describe false. Leer las hojas de contacto, corregir diseño, legibilidad y zona segura. (HFelige el Node correcto por sí mismo, así que no haynvm use). Un build.py copiado de una versión anterior de esta habilidad ignora--safe: si la guía roja falta en las capturas instantáneas, construir ese proyecto a la antigua,SAFE=1 "PY" build.py(tales proyectos solo existen en Mac y Linux).
7. Renderizar y control de calidad
PY build.py # sin --safe
HF render -o renders/<slug>-vN.mp4 --quality high # ~1.5-2 min para un reel de 25s en Apple Silicon
PY SK/scripts/check_cuts.py <proyecto> renders/<slug>-vN.mp4 --phone
Mirar work/cut_check.jpg: cada fotograma después del corte muestra la nueva toma limpiamente. Verificar picos de audio (volumedetect,
máximo alrededor de -2 a -5 dB) y el silencio en las uniones de secciones.
8. Entregar
Enviar o señalar la copia para teléfono (720p) y el render de máxima calidad. Informar en términos simples qué cambió y cualquier cosa
que necesite la decisión del usuario. Mantener cada versión en renders/; respaldar assets/ + segments.json a work/vN/ antes de
reensamblar.
Valores predeterminados que surgieron de comentarios reales (no reabrir debate)
- Cambiar la gradación y los subtítulos para crear un look; no reemplazar el fondo con una sala generada por IA.
- Sin grano de película. Oscuro está bien, pero mantener el sujeto iluminado y la piel sin volverse roja.
- Los subtítulos principales centrados frente al hablante se leen mejor que las líneas fijadas al borde izquierdo.
- Las palabras detrás de la cabeza son el movimiento característico, pero solo cuando sean legibles.
Construido por @tenfoldmarc. Sígueme para creaciones diarias de automatización con IA, sistemas reales, no teoría.