Communitygithub.com

MickaelAlecsander/edicao-de-cortes

Esta skill produce un corte vertical (1080×1920) para Reels de Instagram y TikTok, de principio a fin y sin ninguna API externa.

¿Qué es edicao-de-cortes?

Esta skill permite a un agente de IA (como Claude Code) actuar como un editor de video especializado en cortes verticales para Reels de Instagram y TikTok, operando completamente sin API externas. El entorno local incluye HyperFrames para editar y renderizar, Whisper local para transcripción de audio, y MMS_FA para alineación forzada de palabras, garantizando precisión en la sincronización. La habilidad cubre todo el flujo de trabajo: investigación y descarga de fuentes, clasificación de fragmentos virales, redacción de guiones, corte preciso sin cortar palabras, verificación de habla/audio/imagen cuadro por cuadro, animación de la mitad superior en estilo papel recortado (HyperFrames) y renderizado final. También puede ejecutar etapas individuales a pedido, como "baja este video", "haz el guion", "corta este tramo", "revisa las uniones", "anima", "renderiza" o "¿qué corte rinde más?". Incluye reglas estrictas como no cortar palabras, aprobaciones antes de avanzar, zona de seguridad, duración de pantalla completa y descargas espaciadas para evitar bloqueos de IP, todo documentado en los archivos de referencia. La skill está diseñada para el canal de cortes de Raul Sena y maneja dos modos: video real (perfil institucional) y papel recortado (canal de opinión).

Compatible con✓Claude Code✓Codex CLI~Cursor
npx skills add MickaelAlecsander/edicao-de-cortes

Preguntar en tu IA favorita

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

Documentación

Edición de cortes (sin API)

Esta skill reúne todo lo que el canal aprendió editando cortes: investigación y descarga, clasificación, guion, corte, verificación y animación. Cada regla proviene de un error que ya salió al aire o casi. Se ejecuta en un entorno sin API alguna:

  • Editar y renderizar: HyperFrames (npx --yes [email protected] …).
  • Leer y escuchar el audio: Whisper local (whisper.cpp mediante HyperFrames, o faster-whisper).
  • Medir el tiempo de cada palabra: el alineador forzado local (MMS_FA, torchaudio) y la envolvente del audio.

Dos modos: elegir antes de empezar

ModoCuándoModelo
Reels de video realPerfil institucional o de marca (ej.: @amigosdobem): la persona o acción en pantalla completa, titular, nombre y cargo, imágenes de cobertura, logo y pie de foto. Poca o ninguna animación.assets/modelo_reels/ (ver su LEIA-ME.md)
Papel recortadoCanal de cortes de opinión (el de Raul): la mitad superior animada en papel, el presentador abajo y pantallas llenas de animación.assets/modelo/ y references/animacao-hyperframes.md

En caso de duda, preguntar cuál de los dos. Todo lo que viene antes de la animación (tema, guion, corte sin cortar palabras, verificación de habla y audio, pie de foto, zona de seguridad, finalización y entrega) aplica igual para ambos. En el reel de video real, la Etapa 3 es el montar_reels.py en lugar de las escenas, y las reglas de personaje, papel y pantallas llenas de animación no aplican.

Reglas de oro (aplican en toda etapa)

  1. Sin API. Sin clave de OpenAI ni de ningún servicio pago. El Whisper local da el TEXTO. El tiempo fino proviene del alineador MMS_FA y de la pausa real en la envolvente (scripts/pausas.py). Whisper no es prueba de tiempo: en el C29, el large-v3 colocó palabras hasta 1,4 s fuera de lugar, y cada error se convirtió en un corte incorrecto.
  2. Aprobación antes de avanzar. Guion aprobado → edición → animación → vista previa. Nada se agenda o publica sin el "puedes agendar" del dueño del canal. Cuando pide "haz hasta el final", las aprobaciones intermedias se unifican en una sola: la de la vista previa.
  3. Nunca cortar en medio de una palabra. El corte siempre es en un valle de energía por debajo de −40 dB, antes de la palabra SIGUIENTE. Cada empalme se vuelve a escuchar después de montarlo (scripts/ouvir_emendas.py).
  4. Raul completo, centrado, sin zoom y nunca congelado. La imagen siempre es del mismo instante que el audio; en podcast, permanece en quien está razonando, y quien habla se marca en cada corte con 2 personas. Cabeza nunca cortada. En la pantalla dividida de la fuente, el panel de él llena la ventana inferior; nada de laterales desenfocados. No puede haber un fotograma congelado mientras se habla. Foto o gráfico en pantalla completa en la fuente va debajo de una PANTALLA LLENA de la animación.
  5. El pie de foto va de principio a fin, de 1 a 3 palabras, con palabrotas censuradas (F**A).
  6. Zona de seguridad siempre. Nada debajo de la barra de búsqueda de TikTok, nada saliendo por los laterales, nada debajo de los botones o del texto de la publicación. scripts/zona_segura.mjs debe dar ✓ antes de cada render.
  7. Pantalla completa: 3 veces de 5 s o más en video de hasta 2 min, 4 veces por encima de 2 min. La primera viene justo después del gancho.
  8. La mejor pista de audio (el Opus de YouTube), un mínimo de recompresión y la salida a −14 LUFS. El efecto de sonido siempre queda por debajo de la voz.
  9. Descarga espaciada. Una solicitud a la vez, nunca en ráfaga, con espacio entre ellas (scripts/baixar.py ya lo hace). Una IP marcada con 429 solo vuelve con tiempo. El cliente web_safari,mweb sirve solo para LISTAR videos y leer sus datos (título, idioma, canal). Con él, el pie de foto desaparece ("has no subtitles" en todo video) y la resolución viene falsa (360p), así que pie de foto y medio van en el cliente estándar.
  10. Nunca borrar del todo. Lo que sale va a _lixeira/, y quien vacía es el dueño del canal. Nunca escribir contraseña ni token: el inicio de sesión siempre lo hace la propia persona.

Instalación (una vez por máquina)

La forma más fácil: el comando de un solo paso del README (instalar.ps1 en Windows, instalar.sh en Mac) instala los programas que faltan, descarga la skill y ejecuta scripts/instalar.py.

El Python de los scripts: si existe el archivo .python en la carpeta de la skill, todo python de los comandos de esta skill es la ruta escrita en él (ej.: ~/.venv-cortes/bin/python). El instalador crea este entorno cuando el Python del sistema rechaza pip (PEP 668: el de Homebrew en Mac, el de Debian/Ubuntu).

python scripts/instalar.py (con Python 3.11+) prepara la máquina en una sola pasada. Al final, dice "✓ listo para editar" o lista lo que falta. Hace cinco cosas:

  1. Verifica Python, ffmpeg y ffprobe, Node 18+ con npx y Chrome. Lo que no se instala con pip o npm, indica cómo instalarlo en tu sistema.
  2. Ejecuta pip install solo de lo que falta (faster-whisper, torch y torchaudio de CPU, numpy, scipy, soundfile, opencv, yt-dlp). Lo que ya está instalado no se actualiza ni baja de versión.
  3. Ejecuta npm install playwright-core en scripts/, que es de donde zona_segura.mjs y erros_js.mjs lo importan.
  4. Descarga Whisper large-v3 (~3 GB) y MMS_FA (~1,2 GB) y calienta npx --yes [email protected] y Chrome del render.
  5. Realiza la autoprueba: el --help de 3 scripts, node --check de los .mjs y assets/modelo/ montado en una carpeta temporal.

Tiene tres opciones:

  • --so-conferir: solo verifica y no instala nada.

  • --sem-modelos: salta los modelos.

  • --modelo-whisper medium: para máquina débil. Después, pasa --modelo medium a transcrever_local.py.

  • Whisper de HyperFrames (opcional): npx --yes [email protected] transcribe <archivo> -e whisper -m large-v3 -l pt --json. Necesita whisper-cpp, y npx --yes [email protected] doctor indica si está instalado.

  • Lo que necesita internet (el resto funciona sin conexión):

    • descargar las fuentes (yt-dlp);
    • la primera vez, los modelos (Whisper large-v3 y MMS_FA) y Chrome del render; el instalador ya los descarga los tres;
    • GSAP desde CDN, en cada render;
    • las fuentes de Google Fonts, la primera vez que se montan (después quedan guardadas en ~/.cache/hyperframes/fonts).
  • Probar la máquina en cualquier momento: python scripts/instalar.py --so-conferir.

Estructura del proyecto

<proyecto>/
  _fontes/            videos y audios descargados (el <id>_opus.mkv es la fuente del corte)
  _pesquisa/          pies de foto, transcripciones (<id>_palavras.json), radar y notas
  _lixeira/           lo que sale (fuentes después de publicadas etc.)
  cortes/cNN-slug/    un corte: ROTEIRO.md, cortes_gerar.py, cortes.json, pos_cortar.py, _cenas.js, montar.py,
                      gera_som.py, som.json, capa/, post.json, assets/ (raul.mp4, raul.wav, tempos.json, dados.js),
                      renders/ (etapa3_bruto.mp4, etapa3.mp4, cNN_previa.mp4, cNN_capa.jpg)
  LOG_CORTES.md       una entrada por corte (id de la fuente, lo que salió al aire, lo que decidió el dueño) y las "Lecciones acumuladas";
                      sin él, ranking_shorts.py no descarta ningún id ya usado
  REGUA.md            las correcciones del dueño a la regla (leer antes de dar nota); RADAR.md es generado por nota_viral.py

El flujo de un corte

Leer la referencia de la etapa ANTES de empezarla. Cada una tiene las reglas completas y el porqué de cada una.

EtapaQué hacerReferenciaScripts
0 · TemaEncontrar candidatos, clasificar intervenciones y shorts, dar la nota de la regla, elegir por puntuaciónreferences/ranqueamento.mdnota_viral.py, ranking_shorts.py, analise_shorts.py, acha_frase.py
1 · FuenteListar, leer el pie de foto, descargar la mejor pista sin ser bloqueadoreferences/pesquisa-e-download.mdbaixar.py, vtt2txt.py
1 · GuionTranscribir el fragmento, armar el razonamiento completo, entregar para ✋references/roteiro.mdtranscrever_local.py
2 · CorteMedir los cortes, encontrar los cambios de cámara, cortar, realinear, poner pie de fotoreferences/corte-e-fala.mdpausas.py, trocas.py, cortar.py, alinhar.py, legendas.py, borrar_regiao.py, reenquadrar.py
2 · VerificarEscuchar los empalmes, revisar cuadro por cuadroreferences/conferencias.mdouvir_emendas.py, conferir_fins.py, folha_contato.py, travada.py
3 · AnimaciónGuion de la animación, escenas, pantallas llenas, zona de seguridadreferences/animacao-hyperframes.mdassets/modelo/, roteirista.py, marca.py, zona_segura.mjs, erros_js.mjs
3 · Reels de video realTitular, nombre y cargo, coberturas, logo, colores de marca (en lugar de la animación)assets/modelo_reels/LEIA-ME.mdmontar_reels.py, zona_segura.mjs, erros_js.mjs
3 · SonidoAcentos en la palabra de la escena, sonoplastia por debajo de la vozreferences/audio.mdsonoplastia.py (+ assets/foley/)
4 · RenderRender, mux, finalizar, verificar el producto terminado y enviar la vista previareferences/conferencias.mdfinalizar.py, folha_contato.py

Comandos, en orden (desde la carpeta cortes/cNN-slug/; $S = carpeta scripts/ de esta skill)

Empezar copiando assets/modelo/ a cortes/cNN-slug/ (ver assets/modelo/LEIA-ME.md): trae el cortes_gerar.py, pos_cortar.py, montar.py, gera_som.py, la portada y el post.json para rellenar. Si la skill no está en ~/.claude/skills/edicao-de-cortes, definir EDICAO_CORTES=<carpeta de la skill>.

python $S/pausas.py <fuente> --palavras <palavras.json> <t:antes:después> ... --perfil   # cada corte, antes de escribir
python $S/trocas.py <fuente> --de <s> --ate <s>   # cambios de cámara y de diseño en el fragmento
python cortes_gerar.py                       # escribe el cortes.json (bloques, ventanas, recortes, cambios)
python $S/cortar.py .                        # monta assets/raul.mp4, raul.wav y tempos.json (barra corte en habla)
python pos_cortar.py                         # TEXTO del guion realineado por MMS_FA (palabra a palabra)
python $S/legendas.py .                      # assets/dados.js: el pie de foto en bloques de 1 a 3 palabras
python $S/ouvir_emendas.py .                 # cada empalme en Whisper local + envolvente
python $S/conferir_fins.py .                 # los cortes de cada bloque
python $S/folha_contato.py assets/raul.mp4 --cada 2   # Raul completo y la persona correcta en cada fotograma
# (✋2, si el dueño lo pide: ver el final de references/corte-e-fala.md) · aquí, pedir el esfuerzo extra antes de animar
python $S/roteirista.py batidas .            # batidas.md: frases, anclas T() con el n correcto, alusiones a personas
python montar.py                             # index.html (animación + Raul + pie de foto + marca)
python gera_som.py && python $S/sonoplastia.py .   # pista de efectos; al final verificar JS y zona de seguridad
npx --yes [email protected] render . --fps 24 -q standard -w 6 -o renders/etapa3_bruto.mp4
python $S/sonoplastia.py . --mux             # sonido sin pérdida en la imagen del render
python $S/finalizar.py .                     # −14 LUFS, congelada, vista previa de 720p
python $S/folha_contato.py renders/etapa3.mp4 --cada 3   # revisar el video terminado antes de enviar

Cómo entregar

  • Guion: en el formato de references/roteiro.md: línea de la historia, bloques con el texto completo y la escena de cada uno, pantallas llenas, portada, autocrítica con nota y, al final, la lista de lo que queda fuera.
  • Vista previa: la vista previa de 720p y la portada, con el resumen del video:
    • las pantallas llenas;
    • lo que se verificó (zona de seguridad, congelada, loudness);
    • lo que se corrigió después del 1er render;
    • el pie de foto de la publicación. Después, esperar el "puedes agendar". La solicitud explícita de dejarlo agendado ("quiero listo, todo perfecto, agendado") ya vale como el "puedes agendar" de esos videos.
  • Pie de foto de la publicación (post.json): información útil con el crédito al presentador ("Para Raul Sena, …"), hasta ~430 caracteres (en TikTok, la de ~600 perdió el inicio en el campo en 3 intentos; las de 421 y 426 entraron), sin guion ni comillas angulares y con palabrotas censuradas. Al final, los hashtags: los 2 de la marca, de 3 a 5 del tema como la gente busca y de 1 a 2 generales, sin acento ni espacio. El trecho del post.json es el inicio del pie de foto: encuentra la publicación en el Studio.
  • Tres redes al mismo horario: el "puedes agendar" de TikTok aplica para Instagram y Facebook en el MISMO horario, sin pedir de nuevo. Después del horario, verificar que la publicación salió en las tres (en C80 y C83 Instagram falló por bloqueo de la cuenta).
  • Margen en TikTok: la cuenta nueva pasa toda publicación por revisión ("Contenido bajo análisis", hasta 12 h). Agendar con 2 h o más de margen, nunca a menos de 20 min del horario.
  • Decisión visual (diseño, estilo, portada): enviar las opciones en IMAGEN para que el dueño elija.
  • Después de modificar código o herramienta: el resumen debe ser completo: qué cambió, por qué, qué quedó fuera y qué falta hacer.

Instagram (Reels)

El mismo video sirve para Reels y TikTok. En Instagram:

  • Subir el archivo renderizado (renders/etapa3.mp4), nunca un video descargado de TikTok: Instagram reduce el alcance de video reciclado con marca de agua.
  • El pie de foto de la publicación acepta hasta 2.200 caracteres, pero solo la 1ª línea aparece antes del "más": debe ser el gancho. Hashtags: de 3 a 5 del tema, más los de la marca (Instagram recomienda pocos y relevantes).
  • La portada aparece en la cuadrícula del perfil en el recorte 3:4 del centro: el rostro y el titular completos dentro (la portada del modelo ya está hecha así). En la app, se ingresa en "Editar portada" → "Añadir desde galería".
  • La zona de seguridad de zona_segura.mjs (búsqueda arriba, botones a la derecha, texto de la publicación abajo) aplica para ambos. En la 1ª publicación, mirar una captura del Reels publicado en cada pantalla llena y, si la interfaz cubre algo, ajustar los límites.
  • Duración: de 1 a 2 min (Reels acepta hasta 3).
  • Los números de la regla y de la cuadrícula (horarios, pesos, límites de vistas) se midieron en TikTok de este canal: en Instagram, reiniciar la puntuación con los datos propios.

Otro canal

La skill nació en el canal de cortes de Raul Sena y los ejemplos son suyos. Para usarla con otro presentador u otra marca, cambiar:

  • La marca: CONTA y el avatar en los archivos de configuración (buscar referencias a "raul").
  • Las fuentes: los referentes de estilo y tono en references/.
  • Los modelos de animación: assets/modelo/ y assets/modelo_reels/ pueden personalizarse.
  • Las reglas de la regla (REGUA.md): ajustar los umbrales de viralidad según el nicho.

Para más detalles, consultar la documentación de cada script y referencia en references/.

Skills relacionados