Communitygithub.com

editor-video

Editor de video profesional para clientes (reels, talking heads, montajes de eventos, videos de aplicación) en español. Organiza el material por cliente y proyecto, analiza referencias para escribir la guía de estilo de cada cliente, selecciona las mejores tomas con alineación MFA, y arma el video en HyperFrames con un motor propio (subtítulos por palabra, zooms, b-roll, tarjetas, sonidos) cuyo look define cada cliente.

¿Qué es editor-video?

Esta skill convierte al agente de IA en un editor de video profesional que trabaja por cliente, siguiendo un flujo similar al de un editor humano. Su principal fortaleza es que no tiene un estilo visual propio: todo el look (colores, fuentes, animaciones, sonidos) se define por cliente en un archivo `look.py`. Soporta plataformas como HyperFrames (motor de render), FFmpeg, Montreal Forced Aligner (MFA) para alineación de palabras con precisión de ±20 ms, y la skill `watch` para descargar y transcribir videos de Instagram, TikTok y YouTube. El flujo completo incluye: análisis de referencias para crear una guía de estilo, organización del material en carpetas por cliente y proyecto (sin modificar el crudo original), conversión de HDR a SDR, alineación de palabras mediante MFA, selección precisa de tomas (mejores tomas, eliminación de retomas y muletillas), y armado del video en HyperFrames con subtítulos palabra por palabra, zooms, b-roll, tarjetas animadas y efectos de sonido. Finalmente, se revisa con snapshots, se renderiza con calidad de entrega y se normaliza el audio a −14 LUFS. La skill es ideal para editar reels, talking heads, montajes de eventos, recaps y videos de aplicación, y se activa con frases como "nuevo cliente", "nuevo proyecto", "analiza estas referencias" o solicitando editar videos de un cliente específico.

Compatible con✓Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/soyabrahamarriaga-lang/editor-video/tree/main

Preguntar en tu IA favorita

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

Documentación

Editor de video por cliente

Motor y flujo para editar como un editor humano: entender el material, cortar con precisión, aplicar el look del cliente, verificar y entregar. El motor no tiene estilo propio: todo lo visual viene de clientes/<CLIENTE>/look.py.

SKILL_DIR = carpeta de esta skill. Herramientas: engine/reel.py, tools/{takes.py, words.py, media.sh}, plantillas en templates/, looks de partida en looks/.

Requisitos (verificar la primera vez; instalar lo que falte)

  • ffmpeg, python3, node/npx · macOS: avconvert y sips (vienen con el sistema) para HDR→SDR y fotos HEIC.
  • HyperFrames (render y librería de SFX): npx hyperframes skills update general-video (instala también media-use).
  • watch (ver/transcribir videos y bajar links de Instagram/TikTok/YouTube con yt-dlp): skill watch de github.com/bradautomates/claude-video, motor local WhisperX (gratis): setup.py --engine local y --backend whisperx.
  • whisper CLI (ventanas de verificación): uv tool install --python 3.12 openai-whisper --with setuptools.
  • MFA (alineación de palabras ±20 ms): brew install --cask miniforge, conda create -n mfa -c conda-forge montreal-forced-aligner -y, conda run -n mfa mfa model download acoustic spanish_mfa y … dictionary spanish_mfa (otro idioma: su modelo).

Estructura de carpetas (base de trabajo, p. ej. ~/Documents/VIDEOS/)

clientes/<CLIENTE>/
├── estilo.md      guía del cliente (templates/estilo.md) — se lee SIEMPRE antes de editar
├── look.py        el estilo traducido a opciones del motor (de looks/nativo.py o looks/datos.py)
├── refs/          videos de referencia + hojas de frames + análisis
├── marca/         logo, colores, fuentes, música propia
└── proyectos/<AAAA-MM-DD_nombre>/
    ├── crudo/     material del usuario — NUNCA se modifica ni se borra
    ├── broll/     tomas de apoyo (opcional)
    ├── guion.md   script o notas (opcional; manda sobre estilo.md para este proyecto)
    ├── trabajo/   media/ (convertida), mfa/, gt/, y una carpeta por video con config.py + takes.json
    └── final/     solo entregables: <cliente>_<tema>_v1.mp4 · correcciones = v2, v3 sin borrar la anterior

El usuario no crea carpetas: dice "nuevo proyecto de , el material está en " y aquí se crea proyectos/<fecha_nombre>/ y se mueve el crudo (preguntar antes si está fuera de la base y no quiere moverlo).

Flujo

0 · Cliente nuevo → analizar referencias y escribir estilo.md

  1. Bajar/leer las referencias (links con watch, que usa yt-dlp) a refs/. Ideal ~5.
  2. Por cada una medir: gancho (primeros 3 s), cortes/min (ffmpeg -vf "select='gt(scene,0.3)',showinfo" → contar), subtítulos (fuente o la gratuita más parecida, tamaño, posición, color, resaltados, animación), color/look, tarjetas y animaciones, sonido (música, SFX, voz), encuadre, estructura, CTA. Hoja de frames: fps=16/dur,scale=270:480,tile=8x2.
  3. Escribir estilo.md (plantilla) solo con patrones vistos en ≥ 2 referencias; separar medido de inferido; no copiar frases ni marcas ajenas. Si las referencias se contradicen, preguntar cuál priorizar.
  4. Crear look.py desde el look de partida más cercano y ajustarlo a la guía. Mostrar guía + stills de prueba y esperar aprobación antes de editar.

1 · Entender el crudo

  • Leer estilo.md y guion.md. Probar cada archivo (ffprobe: duración, rotación, color_transfer).
  • watch sobre cada crudo con WATCH_WHISPERX_LANGUAGE=es y --out-dir trabajo/watch: qué se dice, qué tomas sirven, retomas, qué NO cortar. Esa transcripción es la única completa: se reutiliza para MFA.
  • Cruzar con el guion: qué partes del guion no se grabaron o se improvisaron → avisar al usuario.
  • Varios clips cortos sin voz (eventos): hoja de frames por clip, clasificar por tema y proponer agrupaciones (un video por tema + sueltos + un recap general) antes de editar.

2 · Preparar media

  • media.sh video <crudo> trabajo/media/<nombre>.mp4 [vertical|horizontal] — convierte HDR (iPhone/DJI) a SDR en una sola pasada, keyframes cada 1 s, 30 fps. No recomprimir más veces: cada pasada pierde detalle.
  • Fotos: media.sh foto <foto> trabajo/media/<nombre>.mp4 2.5. Audio para alinear: media.sh audio.

3 · Alinear palabras (videos con voz)

  • corpus/a.wav + corpus/a.txt (texto plano de watch) → conda run -n mfa mfa align --clean <corpus ABSOLUTO> spanish_mfa spanish_mfa <salida ABSOLUTA> (rutas absolutas o falla; sin --beam). words.py textgrid … words.json y words.py show words.json.
  • Palabras con ~ (duran > 1 s) esconden pausas o retomas; huecos largos sin texto pueden ser retomas que watch no transcribió. Verificar con ventana aislada: cortar 3–15 s del audio, whisper --model small --language es --word_timestamps True, words.py whisper … <offset>. MFA puede desviarse segundos donde hubo ruidos o retomas.

4 · Seleccionar tomas → takes.json → takes.py

  • Por cada frase elegir la mejor toma (normalmente la última); quitar retomas, arranques en falso, muletillas, instrucciones al editor ("este quiero que sea otro video") y lo que no sirve al objetivo. Cumplir la duración máxima.
  • Spans por inicio de palabra: (inicio de la 1ª, inicio de la última + 0.2). Si el fin cae antes del inicio de la última palabra, se la come. word_fix corrige palabras que MFA ubicó mal (con tiempos de la ventana aislada).
  • Texto: phrases / words corrigen lo que el ASR oyó mal (nombres, marcas: "Claude" no "Klaus", "IA" no "ella").
  • python3 $SKILL_DIR/tools/takes.py trabajo/<video>/takes.json trabajo/<video> → imprime duración y texto final. Leer el texto completo: que no falte la última palabra de ningún tramo ni sobren palabras cortadas.

5 · Armar el video

  • trabajo/<video>/: config.py (de templates/config.py), media → ../media (symlink), media.sh sfx trabajo/<video>, hyperframes.json mínimo ({"paths": {"assets": "assets"}}).
  • En edit(e): tarjetas/POV/CTA, b-roll y sonidos anclados a palabras (e.word_t(None, "palabra")). Tarjetas a las orillas: con zoom la cara se ensancha. Un evento visible cada ≤ 3 s (el motor mete auto-punches si falta).
  • python3 $SKILL_DIR/engine/reel.py trabajo/<video> → npx hyperframes check trabajo/<video> (0 errores; los avisos de "archivo grande / track denso / nested" son normales en este motor).

6 · Revisar antes de renderizar

  • npx hyperframes snapshot trabajo/<video> --at <t1,t2,…> --no-end -o <ruta ABSOLUTA> en cada tarjeta, gancho y CTA. Revisar: nada tapa la cara, textos no se parten feo, colores correctos, subtítulos legibles.
  • Mostrar stills al usuario y esperar aprobación (salvo que el estilo ya esté aprobado y diga "renderiza").

7 · Render y entrega

  • npx hyperframes render --quality delivery -o …/raw.mp4 dentro de trabajo/<video> → media.sh final raw.mp4 final/<cliente>_<tema>_v1.mp4 (−14 LUFS). Borrar solo el raw.mp4 intermedio que se acaba de crear.
  • Verificar con watch --detail transcript: texto completo y sin repeticiones. Si el inicio "falta", revisar los primeros 3 s con whisper antes de concluir (la transcripción completa a veces omite el arranque).

Lecciones (no repetir)

  • HDR sin convertir se ve deslavado; convertir con avconvert una sola vez.
  • Grabar en 4K si habrá zooms: 1080p ampliado 13–22 % se ve suave. Avisar al cliente.
  • Una frase corregida con más palabras no puede repartir el mismo tiempo: subtítulo de duración 0 se queda pegado.
  • Emojis en texto de pantalla no siempre renderizan: evitarlos.
  • snapshot -o con ruta relativa escribe junto al proyecto: usar rutas absolutas.
  • Mismo archivo usado en dos partes del video → claves distintas en takes.json (ids únicos).
  • No subir la librería de SFX a ningún repo (licencia Pixabay de media-use): se copia por proyecto con media.sh sfx.
  • Correcciones del cliente sobre un solo video (p. ej. "sin sonidos en el 07") van en su config.py (SFX = {"card": None, "broll": None, "cut": None} y sfx: None en tarjetas), no editando el index.html (se pierde al reconstruir).

Skills relacionados