Communitygithub.com

editar-reel

Edita los reels del usuario (vídeos verticales hablando a cámara para Instagram) con su flujo aprobado: transcripción local con Whisper, quitar silencios/muletillas/tomas repetidas, gancho en mayúsculas, titulares con gráfico animado cada 2-3 s, logos reales de marcas, subtítulos de una línea, efectos de sonido calibrados, voz a -14 LUFS y render con HyperFrames. Úsala siempre que pida editar, montar, cortar, subtitular o "dejar listo" un reel, un clip de CapCut o un vídeo vertical suyo.

editar-reel 是什么?

Esta skill automatiza la edición de reels de Instagram de un usuario, siguiendo un flujo de trabajo aprobado para garantizar consistencia y calidad profesional. Utiliza herramientas locales como `faster-whisper` para transcripción y detección de muletillas/silencios, `HyperFrames` para la composición de gráficos animados (tarjetas de título, subtítulos de una línea, logos reales de marcas) y `FFmpeg` para todo el procesamiento de audio/vídeo. El flujo incluye: transcripción, corte de contenido no deseado, ajuste de encuadre, generación de un `reel.json` con todos los elementos (gancho, titulares, logos, subtítulos, efectos de sonido calibrados a -14 LUFS), control de calidad visual mediante fotogramas de referencia, renderizado final y masterización de audio. Soporta múltiples estilos de edición (Tarjeta, Frases, Cine) y permite la creación de nuevos estilos a petición del usuario. Está diseñada para integrarse con Claude Code y otros agentes de IA, requiriendo una instalación única de dependencias y un perfil de usuario.

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Alexandrevnc/editar-reel/tree/HEAD

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

Editar un reel

Este es el flujo ya aprobado con el reel de WhatsApp (references/ejemplo-whatsapp.reel.json). El objetivo es que el próximo reel salga igual sin que tenga que volver a explicarlo: mismo estilo, mismos criterios, mismas comprobaciones. Háblale en español y sin jerga técnica innecesaria.

Antes de nada: perfil e instalación

Lee ~/.claude/skills/editar-reel/perfil.json (nombre del usuario, su marca, el logo del cierre y dónde guarda los clips). Llámale por su nombre y usa su carpeta de clips en el paso 1. Si no existe perfil.json, o falta alguna herramienta del entorno, es la primera vez en este Mac: sigue INSTALAR.md (instalar todo y crear el perfil) antes de editar nada.

Entorno (lo deja listo install.sh, ver INSTALAR.md)

  • HyperFrames CLI: ~/.npm-global/bin/hyperframes (telemetría desactivada). Exporta siempre PATH="$HOME/.npm-global/bin:$PATH" HYPERFRAMES_NO_TELEMETRY=1 HYPERFRAMES_SKIP_SKILLS=1; el shell de Claude no carga ~/.zshrc.
  • faster-whisper: ~/.venvs/whisper/bin/python (con av<16; la versión nueva de PyAV rompe faster-whisper).
  • FFmpeg en /opt/homebrew/bin. python3 del sistema (3.9) sirve para los scripts sin numpy.
  • Librería de efectos de sonido: ~/Movies/Reels/_sfx/. Los 13 originales (whoosh_1/2, pop_1/2, tick, ding, message, counter, typing, clock, slide, hit, riser) suenan solos con los gráficos; estilo "sonidos de Apple": cortos, limpios, suaves. Hay ~45 más (impactos, whooshes, caja registradora, clics, iPhone…) para usar a mano: catálogo y cuándo usar cada uno en references/sfx.md.
  • Scripts de esta skill: SK=~/.claude/skills/editar-reel/scripts.
  • Logo del cierre: el de perfil.json (cierre). El de vinagre.tech, vectorizado, está en assets/vinagre-tech/; el de otra marca se guarda en assets/marca/ (ver INSTALAR.md).

Estilos

El usuario pide los reels por estilo ("edítalo con el estilo 2"). Si no dice ninguno, usa el estilo 1. Todos comparten el flujo de abajo (transcribir, cortar, QA, sonidos, master); cambia el paso 5–6. Todos terminan con el cierre del logo de su marca (el de perfil.json; 1,6 s, fondo blanco, scripts/outro.py): el vídeo nunca acaba de golpe. Sale por defecto (salvo "cierre": null en el perfil); "outro": null en reel.json lo quita, "outro": {"bg": "#000"} lo cambia.

EstiloQué esScriptReferencia
1 · TarjetaTitular con gráfico en tarjeta oscura arriba cada 2–3 s + subtítulo pequeño de una línea abajo.build.pyreferences/ejemplo-whatsapp.reel.json
2 · FrasesFrase grande abajo en blanco (lo que viene, translúcido), palabra clave en píldora, iconos en línea y flotantes, pocas tarjetas blancas y planos de gráfico a pantalla completa.build_frases.pyreferences/estilo-frases.md
3 · CineClip horizontal en franja de cine 16:9 sobre negro (franjas despejadas), color cálido, zoom lento, subtítulos pequeños en minúsculas a los dos lados de la cara, palabra final grande en mayúsculas. Para vídeos cercanos o emotivos.cut_cine.py + build_cine.pyreferences/estilo-cine.md

Movimiento v2 (aprobado el 02-11-2026, por defecto en el estilo 1): reglas de references/motion-reglas.md (titulares que ruedan, cifras que ruedan dígito a dígito, gráficos que llegan enteros). Los reels hechos antes llevan "anim": 1 en su reel.json para que un retoque no les cambie el movimiento que ya aprobó.

Los estilos 1 y 2 pueden llevar además planos motion a pantalla completa (terminal de Mac, rejilla de puntos con una cifra, órbita de tarjetas), en "motion" de reel.json: lee references/motion.md para saber cuándo y cómo.

Cuando el usuario pida cambios a un estilo y los apruebe, guárdalos en el script y la ficha de ese estilo. Si quiere algo nuevo, crea un estilo nuevo (4, 5…) en vez de cambiar uno aprobado. Hazle primero una muestra de ~10 s ("sample_end" en reel.json, estilos 2 y 3) antes de montar el reel entero.

Estructura de cada reel

~/Movies/Reels/<nombre-corto>/
  reel.json            lo propio de este reel (lo escribes tú; formato en references/reel-json.md)
  work/                transcripciones, cortes, fotogramas de QA, render intermedio
  proyecto/            proyecto HyperFrames (index.html generado + assets/)
  reel-<nombre>.mp4    el entregable
  portada-<nombre>.jpg la portada para Instagram (paso 8b)

Flujo

1. Localizar el clip

Suele estar en la carpeta clips de perfil.json (por defecto ~/Movies/CapCut/) o en sus subcarpetas. Si hay más de un candidato y no está claro cuál es, pregunta con opciones (nombre, duración, fecha); editar el equivocado cuesta mucho tiempo. Comprueba con ffprobe resolución, fps y duración.

2. Transcribir

mkdir -p ~/Movies/Reels/<n>/work
~/.venvs/whisper/bin/python -I $SK/transcribe.py "<clip>" ~/Movies/Reels/<n>/work medium es

Crea src.words.json (palabras con tiempos), fillers.txt (pasada que fuerza a Whisper a escribir "eh", "mmm", "o sea"; normalmente se las come) y silences.json. Lee las tres cosas.

3. Decidir qué quitar (criterio tuyo)

  • Tomas repetidas: si repite una frase o la empieza y la corta, quédate con la última toma y quita las anteriores.
  • Muletillas: las que aparezcan en fillers.txt y no en la limpia.
  • Silencios: no hace falta marcarlos; cut.py quita los ≥0,2 s dejando 0,07 s de aire a cada lado. Apunta los rangos (tiempo original) en remove de reel.json, junto con source. Si no hay nada, "remove": [] y díselo ("no había muletillas ni tomas repetidas", si es el caso: lo comprobaste, no lo supongas).
cd ~/Movies/Reels/<n> && hyperframes init proyecto --example blank --resolution portrait --non-interactive
python3 -I $SK/cut.py ~/Movies/Reels/<n>

Crea el proyecto HyperFrames (antes de cortar: init necesita que la carpeta proyecto no exista) y luego corta, saca 1080×1920 a 30 fps y deja la voz a -14 LUFS en proyecto/assets/cut_norm.mp4; las palabras con tiempos nuevos quedan en work/cut.words.json.

4. Mirar el encuadre

Saca una tira de fotogramas (ffmpeg -i proyecto/assets/cut_norm.mp4 -vf "fps=1/5,scale=270:-1,tile=6x1" -frames:v 1 work/contact.png) y localiza la cara: en el reel de referencia iba de ~520 a ~1160 px en vertical, con pared libre a la derecha. El titular va encima de la cabeza (tarjeta de 170 a 430 px), los subtítulos sobre la camiseta por debajo del micrófono de solapa, el logo de la intro en la pared junto a la cabeza. Si este clip tiene otro encuadre, ajusta layout y la posición de logos en reel.json.

5. Escribir el contenido en reel.json

Lee references/reel-json.md y references/graficos.md. Lo que está decidido:

  • Gancho (0–2 s): dos líneas grandes en MAYÚSCULAS, cajas amarillas con texto negro. Una pregunta o afirmación que resuma el dolor que plantea el vídeo, no una frase literal. Visible desde el primer fotograma.
  • Titulares: 2–5 palabras, cambian cada 2–3 s, resumen lo que dice en ese tramo, cada uno con su gráfico animado.
  • Logos: cada vez que nombre una herramienta o marca, su logo real (Simple Icons; si no está, el SVG oficial de su kit de prensa en proyecto/assets/logos/<slug>.svg). Nunca un logo inventado o aproximado.
  • Subtítulos: pequeños, una línea, abajo, palabra activa en el color de acento. Corrige en fixes los errores de Whisper que veas (nombres propios, "una gente" → "un agente", etc.).
  • Planos motion (opcional, uno o dos por reel): cuando diga que le pide algo a Claude o explique pasos de una automatización → terminal; cuando suelte una cifra → dots; cuando haga la cuenta de lo que se gana o pierde al año → months; «mira todo lo que he montado» → orbit; le escriben clientes o le llegan mensajes → notify; dice una cifra de ingresos o resultados → chart. Se quieren: dan respiro al vídeo (ofrécele uno si no hay). Ver references/motion.md. Proponlos solo si cuentan lo que dice; si dudas, pregúntale.
  • Llamada final: si pide escribir una palabra o nombra la marca, último bloque con "graphic": "logo" y un ding en sfx_extra justo cuando dice esa palabra.
  • Sonidos literales (opcional): cuando diga algo con un sonido propio (dinero → cash, soltar el móvil → iphone_lock, escribir un mensaje → phone_typing), añádelo en sfx_extra en esa palabra. Lee references/sfx.md; uno o dos por cada 10 s como mucho, y los memes solo si los pide.

6. Preparar sonidos y generar la composición

python3 -I $SK/prep_sfx.py ~/Movies/Reels/_sfx ~/Movies/Reels/<n>/proyecto/assets/sfx
python3 -I $SK/build.py ~/Movies/Reels/<n>
cd ~/Movies/Reels/<n>/proyecto && hyperframes lint

prep_sfx quita el silencio inicial de cada sonido (si no, suena tarde respecto a la animación), recorta los largos con fundido y los iguala a -3 dBFS de pico. El riser se recorta para que acabe en su punto álgido (0,2–2,0 s del archivo actual); si cambia el archivo, mira su envolvente y ajusta SPEC. En lint son esperables y se ignoran: nested_structure_needs_subcomposition y timeline_track_too_dense. Cualquier error, o un aviso de otro tipo, se arregla.

7. Control de calidad de fotogramas (antes de renderizar, siempre)

Saca un fotograma de cada bloque, a mitad del bloque cuando la animación ya ha terminado:

hyperframes snapshot --at <gancho≈1.0>,<cada bloque: start+1.3>,... --no-end --describe false -o ../qa

Móntalos en una hoja (ffmpeg -pattern_type glob -i 'qa/frame-*.png' -vf "scale=360:-1,tile=6x2" ...), míralos y amplía las zonas dudosas (recortes a tamaño real de la tarjeta y de los subtítulos). Busca y arregla:

  • texto cortado o que se sale de la tarjeta / una palabra sola en una línea;
  • algo encima de la cara (en cualquier bloque, también con el zoom de 1,08 de los cortes);
  • poco contraste (texto claro sobre pared blanca → necesita fondo oscuro);
  • subtítulos tapando el micrófono de solapa o el logo de la camiseta de forma fea;
  • un gráfico que no se entienda o se vea raro (pasó con el primer head: se rehízo). Repite snapshot tras cada arreglo. Las manos pasando por delante de los subtítulos no se pueden evitar; no es un fallo.

Comparar con el oro. references/oro/ tiene la hoja de 12 fotogramas de los reels aprobados de cada estilo (estilo1-whatsapp, estilo1-18k, estilo2-fras, estilo3-reto40). Tras el render (paso 8) saca la del reel nuevo con python3 -I $SK/hoja.py <reel>.mp4 work/hoja.png, ponla al lado de la de su estilo y responde: ¿cuál de las dos está más vacía, más plana o con los gráficos más pequeños? Si es la nueva, eso es lo primero que se arregla. Cuando el usuario apruebe un reel que se vea mejor que el oro de su estilo, añade su hoja a references/oro/.

8. Renderizar, comprobar el audio y masterizar

hyperframes render --fps 30 -o ../work/render_mix.mp4
~/.venvs/whisper/bin/python -I $SK/measure_sfx.py ~/Movies/Reels/<n> ~/Movies/Reels/<n>/work/render_mix.mp4
python3 -I $SK/master.py ~/Movies/Reels/<n>/work/render_mix.mp4 ~/Movies/Reels/<n>/reel-<n>.mp4
  • measure_sfx dice cuánto suena cada efecto respecto a la voz. Objetivo: golpe -6 dB, ding -8, message ≈-8, pop/whoosh/slide -11 a -13, tick -14, reloj/contador/riser -16, tecleo -18 a -20. Si alguno se desvía >2 dB (p. ej. porque cambió un archivo de _sfx), corrígelo con sfx_vol y vuelve a renderizar. Que un efecto suene más que la voz es el fallo grave: tapa lo que dice.
  • master.py lleva el reel a -14 LUFS (pico -1,5 dB) copiando el vídeo sin tocarlo. Hace falta porque el mezclador de HyperFrames baja la mezcla ~1,8 dB y la deja en ~-16 LUFS.
  • Verifica el entregable: 1080×1920, 30 fps, duración esperada, -14 LUFS.

8b. Portada

python3 -I $SK/cover.py ~/Movies/Reels/<n>

Fotograma limpio del vídeo con el gancho en cajas amarillas, centrado en la franja que Instagram enseña en la cuadrícula del perfil (3:4), para que en el feed se lea de qué va cada vídeo. Deja portada-<n>.jpg y work/portada-feed.png (cómo se verá recortada). Va con el título en el centro (decidido el 02-11-2026, aunque tape parte de la cara; en el vídeo el gancho sigue arriba, encima de la cabeza). Mírala: el fotograma ("cover": {"at"}) tiene que tener buena cara y nada cortado. "cover": {"y"} o python3 -I $SK/cover.py <reel> 560 solo si pide otra altura. El usuario la sube al publicar en «Editar portada → Añadir desde el carrete».

9. Entregar

Dile dónde están el .mp4 y la portada, y resume en pocas líneas: cuánto se recortó (de X s a Y s y qué se quitó), el gancho, los titulares (o los más representativos), qué logos salen, qué correcciones de subtítulos hiciste y qué arreglaste en el control de calidad. Si algo es una decisión tuya discutible (p. ej. el gancho es un resumen, no una frase literal), díselo y ofrece cambiarlo.

10. Limpiar (solo cuando el usuario dé el reel por bueno)

Cada reel deja ~150 MB de intermedios y el disco suele ir justo. Cuando confirme que el reel está bien (no antes: mientras retoca los necesitas), mueve a la Papelera (~/.Trash/reel-<n>-intermedios-<fecha>/, nunca rm: así puede recuperarlos) todo lo regenerable: work/*.mp4, work/*.mov, work/*.png, qa/, versiones descartadas del reel, cualquier assets/*.mp4 que index.html ya no use y los assets/sfx/*.wav que index.html no nombre (prep_sfx copia toda la librería, ~15 MB; si un retoque necesita otro sonido, se vuelve a ejecutar). Conserva reel.json, work/*.json, proyecto/ (con assets/cut_norm.mp4 y sfx/) y el .mp4 final: con eso se puede retocar sin volver a cortar. Dile cuánto ocupa lo movido y que se libera al vaciar la Papelera. Si cut_norm.mp4 faltara al retocar, cut.py lo regenera desde el clip original (si sigue en CapCut).

Música

No la metas en el vídeo. El usuario añade la música al publicar de

相关技能