Editor de vídeo
Un skill, tres partes. Lee este archivo, luego las reglas del motor y el preset que corresponda, antes de tocar el metraje.
| Parte | Leer | Qué contiene |
|---|---|---|
| Motor | engine/ENGINE.md, engine/helpers/ | transcripción (Scribe), takes_packed.md, la EDL, render.py, grade.py, timeline_view.py, las 12 Reglas Estrictas, el bucle preguntar → confirmar → ejecutar → autoevaluación. Adaptado de browser-use/video-use (MIT). |
| Preset Instagram | presets/instagram/PRESET.md | vertical 1080x1920: zonas seguras, ritmo de Reel, estilos de subtítulos (scripts/ig-captions.py), fuentes de títulos (assets/fonts/), reglas de etiquetado de color, reglas de sonido gratuito |
| Preset YouTube | presets/youtube/PRESET.md | 16:9 / 4K: la etapa de corte (papel, ajuste, astilla, auditoría de bordes, silencio), el compositor HyperFrames y su biblioteca de ~40 formatos, cámara, sonido, B-roll, Tella, ensamblaje, verificación. Adaptado del kit WeAreNoCode youtube-edit; opcional, no incluido (presets/youtube/README.md). Si PRESET.md falta allí, usa las reglas de corte propias del motor. |
| Compartido | shared/ | luts/ (Cine_TealOrange, Cine_Film, Cine_Moody, AppleLog_to_Rec709, AppleLog_Cine_*; make_luts.py los reconstruye), sfx/ (tus efectos de sonido, -3 dBFS, manifest.json), music/ (tus pistas), tools/ (build-manifest.py, herramientas de corte), img/ |
Los guiones van primero: cuando el usuario aún no tiene guion, o pide ganchos, ideas o un subtítulo, usa el skill script-writer; sus guiones terminan con notas de editor que este skill ejecuta.
Qué preset usar
| La solicitud | Usar |
|---|---|
| Instagram, Reel, historia, TikTok, Shorts, metraje vertical, o ninguna plataforma nombrada con metraje vertical | Preset Instagram (toma prestada la etapa de corte, formatos, cámara y sonido del preset YouTube; indica dónde) |
| YouTube, un gancho, formato largo, 16:9 / 4K, un tutorial de Tella, ensamblaje de secciones | Preset YouTube |
| Cualquier otra cosa (montaje, viaje, entrevista, edición 16:9 general) | Motor solo, más looks y sonidos de shared/; toma prestadas reglas del preset donde encajen |
| Una grabación de pantalla para destacar | el preset de donde se publicará: zoom en la región, oscurecer o difuminar el resto, recuadro o subrayado en la palabra, sonidos de clic y escritura, datos privados difuminados; en un Reel, la grabación se coloca en un marco de teléfono o navegador, o se recorta a la parte que importa |
¿No estás seguro? Pregunta una vez: "¿Es para Instagram o YouTube?"
Rutas (úsalas en cada comando)
VE=~/.claude/skills/video-editor; VU="$VE/engine"; VU_PY="$VE/.venv/bin/python"
IG="$VE/presets/instagram"; YT="$VE/presets/youtube"; SK="$YT"; SHARED="$VE/shared"
Todas las salidas van en <carpeta de metraje>/edit/ (Regla Estricta 12 del motor); nunca escribas dentro de $VE excepto al guardar una regla, un LUT o un activo compartido intencionadamente.
Reglas estrictas que abarcan todo
- La transcripción cuesta dinero (créditos de Scribe). Nunca transcribas a menos que el usuario haya entregado metraje y haya pedido una edición. Las transcripciones se almacenan en caché por nombre de archivo; borra el JSON en caché de un corte plano después de volver a cortarlo.
- Estrategia antes de ejecución: describe el material, propón el plan (preset, estilo de subtítulos, look, música, duración), espera un sí.
- Los subtítulos y los textos van al final, después de cada superposición.
- Etiqueta una vez por vídeo, por segmento durante la extracción; protege la piel; comprueba un fotograma antes/después.
- Verifica el archivo renderizado (fotogramas en cada corte, sonoridad -14 LUFS, duración) antes de mostrarlo.
- Los helpers de Python se ejecutan con
$VU_PY; elpython3del sistema carece de numpy.
Tipos de corte
shared/references/cuts.md: los 10 cortes (corte, salto, coincidencia, J, L, fundido, disolución, corte en acción, cross-cutting, smash) con cuándo usar cada uno y la herramienta que lo hace (shared/tools/). Tanto los presets como el skill cinematográfico lo usan.
Gráficos en movimiento
shared/references/motion-graphics.md: las 7 reglas de calidad con las que se verifica cada animación, de dónde vienen las referencias, el bucle de aprendizaje (referencia → números → plantilla → notas → guardado) y el rastreador de plantillas. Léelo antes de construir cualquier animación; busca en el registro de HyperFrames antes de crear un efecto a mano.
Escalera de renderizado (siempre, cada vídeo)
- Render de revisión a 720p (rápido; lo que el usuario ve y comenta):
motor
render.py … --draft(720x1280 / 1280x720), HyperFramesrender … --quality draften una copia de la composición a 720 de ancho o el valor predeterminado con-o review.mp4luegoscale=720:-2; subtítulos conig-captions.py --width 720 --height 1280. La autoevaluación se ejecuta en este archivo. - Final a 4K solo después de que el usuario apruebe la revisión (sin comentarios pendientes):
motor
render.py … --uhd(2160x3840 vertical / 3840x2160 apaisado, CRF 18), HyperFramesrender … --resolution portrait-4k --quality high(olandscape-4k; la composición 1080x1920 se renderiza a 2x DPR, por lo que el texto y los gráficos son realmente nítidos), subtítulosig-captions.py --width 2160 --height 3840(misma disposición, escalada), masterización de música/sonoridad como siempre (-14 LUFS). Verifica:ffprobemuestra 2160x3840, etiquetas BT.709, duración coincide con la revisión. - Entrega ambos uno junto al otro:
<proyecto>-4k.mp4(el maestro, para subir / YouTube / archivo) y<proyecto>-1080.mp4(una copia 1080x1920 de alta tasa de bits, ~20 Mb/s, hecha del maestro 4K conscale=1080:-2:flags=lanczos). Díselo honestamente al usuario: Instagram reproduce Reels hasta 1080x1920 y recodifica cada subida, por lo que 4K ayuda al darle a su codificador la fuente más limpia (y mantiene YouTube/TikTok/reutilización futura a máxima calidad), no por mostrar 4K; activa Instagram > Configuración > Calidad multimedia > "Subir a la máxima calidad". El metraje grabado en 1080p se escala en el maestro 4K (sin nuevo detalle); dilo cuando ese sea el caso. Una nota después del final cuesta otra revisión en 720p, luego 4K.
Configuración de la máquina (install.sh en la raíz del repositorio hace la mayor parte)
| Herramienta | Estado | Comprobar |
|---|---|---|
| ffmpeg completo (libass, zscale, lut3d) | ffmpeg-full enlazado sobre ffmpeg | `ffmpeg -filters |
| Entorno Python | $VE/.venv (requests, numpy, pillow, librosa, matplotlib) | cd $VE && uv sync |
| Clave ElevenLabs | $VU/.env (modo 600) | curl -s -o /dev/null -w '%{http_code}' -H "xi-api-key: $(sed -n 's/^ELEVENLABS_API_KEY=//p' $VU/.env)" https://api.elevenlabs.io/v1/user → 200 |
| Node + CLI HyperFrames | Node 26, hyperframes global | hyperframes doctor |
| Skills de agente HyperFrames | instalados por el CLI como sus propios skills (hyperframes, hyperframes-core, -animation, -keyframes, -registry, media-use, ...) | hyperframes skills check; léelos para el contrato de composición |
| auto-editor, yt-dlp, Chrome | instalados | auto-editor --version, yt-dlp --version |
| Pruebas del preset YouTube (si está instalado) | todas pasan | cd $YT/scripts && $VU_PY -m unittest tests |
Mantenerlo tuyo
- "Guardar esto en el skill": escribe la nota como una regla simple donde corresponda: solo Instagram → el preset Instagram; solo YouTube → el preset YouTube; ambas → la sección compartida del preset YouTube (el preset Instagram apunta allí) o este archivo cuando se trate de enrutamiento o configuración. Reemplaza una regla si una nueva la contradice; nunca mantengas ambas.
- Nuevo look: edita
LOOKSenshared/luts/make_luts.py, ejecútalo con$VU_PY, añade una fila a la tabla de color del preset Instagram. Nuevo estilo de subtítulos: una fila en la tabla de subtítulos + una entrada enSTYLESenig-captions.py. - Actualizaciones del motor: clona el upstream https://github.com/browser-use/video-use en algún lugar (
git pull) y comparadiff -r <clone>/helpers $VU/helpersy copia los cambios a mano; la copia del motor tiene ediciones de ruta locales solo enENGINE.md.