Communitygithub.com

video-reels

Corta verticales de Instagram Reels a partir de un video largo de una persona hablando a cámara, priorizando el gancho. Selecciona los momentos más potentes de la transcripción, abre cada reel con su línea más impactante, construye líneas de tiempo verticales en DaVinci Resolve enfocando el rostro del orador con el LUT aplicado, y los completa: un gancho (una tarjeta de texto fija o un gancho de 'construcción' palabra por palabra con zoom) y subtítulos con estilo quemado en V3; los reels de 'esto o aquello' reciben gráficos de producto y una tarjeta de CTA con palabra clave de comentario. Tú recortas y renderizas, no hay nada que importar. Actívalo con frases como 'haz reels', 'recorta esto para Instagram', 'corta algunos verticales', o después de editar un video de YouTube.

¿Qué es video-reels?

Este skill está diseñado para creadores de contenido que necesitan extraer múltiples Instagram Reels verticales a partir de un único video largo de tipo 'talking head' (una persona hablando a cámara). Su enfoque principal es optimizar el *gancho* (hook), moviendo la línea más impactante del video (incluso si está al final) al principio del reel para maximizar la retención de espectadores. El skill automatiza todo el flujo de trabajo: transcribe el video con Whisper, identifica los segmentos más fuertes, construye líneas de tiempo verticales en DaVinci Resolve, aplica el LUT de la cámara, añade subtítulos estilizados y diferentes tipos de ganchos (tarjetas de texto fijas o construcción palabra por palabra), e incluso maneja reels de tipo comparativo ('esto o aquello') con gráficos de producto y llamadas a la acción. Es compatible con DaVinci Resolve Studio (a través de un MCP), macOS, Node.js, Puppeteer y ffmpeg. El skill también incluye un proceso de revisión de rendimiento basado en datos: el usuario debe analizar las métricas de reels anteriores (vistas, tiempo de visualización, retención a los 3 segundos) para decidir qué estilo de gancho y formato funciona mejor, aplicando ese aprendizaje a los nuevos lotes. Está diseñado para ser altamente configurable y evitar la duplicación de contenido, minando cada video para obtener la máxima cantidad de reels únicos, priorizando siempre las líneas que nombran explícitamente el tema del reel en el primer segundo.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/beachyphotoandfilm-arch/video-skills/tree/HEAD/skills/video-reels

Preguntar en tu IA favorita

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

Documentación

Reels

Clips verticales a partir de un video largo (o reels independientes filmados como reels).

Configuración: establece tu marca aquí

Edita estos valores una vez antes de la primera ejecución. Todo lo que sigue los referencia por nombre.

ConfiguraciónDóndePor defecto
color de acento--brand al inicio de scripts/motion.html, scripts/thisorthat.html, scripts/hook.html#3b82f6
fuente de visualización (tarjetas de gancho, títulos, palabras clave)--display-font en los mismos archivosAnton (gratuita, Google Fonts)
fuente de subtítulosscripts/caption.htmlMontserrat ExtraBold 800 (gratuita)
LUT de cámara"lut" en reel-params.json, y la variable de entorno LUT para preview_reel.py<RUTA_A_TU_LUT>.cube
carpeta de llegada de nuevo metrajepaso "Dónde llega el nuevo metraje"<TU_DISCO_DE_METRAJE>/<CARPETA_DE_ENTRADA>/
biblioteca de b-rollestilo animado, paso 6<TU_DISCO_DE_METRAJE>/<rodaje>/<cam>/full/
rastreador de reelsPaso 0drafts/social/reel-tracker.md en tu proyecto
modelo de Whispervariable de entorno WHISPER_MODEL~/.cache/whisper-models/ggml-small.en.bin
CTA con palabra clave de comentarioelementos del plan ctatu propia palabra clave (ej. GUÍA)
referencia de música de fondopaso de músicauna pista de referencia que te guste (ej. un ID de pista de Spotify para SearchRecordings)

Fuentes: instala Montserrat y tu fuente de visualización en ~/Library/Fonts (o mantén la importación @import de Google Fonts en cada archivo HTML y renderiza en línea). Si tu fuente de visualización tiene licencia, mantenla fuera del repositorio.

Herramientas: whisper-cli (whisper.cpp), ffmpeg, Node + puppeteer-core, Google Chrome, DaVinci Resolve Studio con scripting habilitado (y un MCP de Resolve con execute_resolve_code), macOS para cutout.swift.

Paso 0: lee primero el marcador

Antes de seleccionar o cortar algo, lee el rastreador de reels.

  1. Completa las estadísticas de cualquier fila que haya estado activa 7+ días y aún esté en blanco. Extráelas de tu herramienta de análisis (ej. getAnalyticsDataByMetrics de Metricool para reels de Instagram). Visualizaciones, tiempo de visualización promedio, retención a los 3 segundos si está disponible, compartidos, guardados, comentarios, seguidores.
  2. Compara por lo que controlamos: formato, estilo de gancho (tarjeta / construcción / título), duración, tipo de CTA, zoom, tema. Solo llama a algo un patrón si hay al menos 3 reels de cada lado, y di qué tan grande es la brecha.
  3. Escribe la conclusión bajo "Lo que dicen los números hasta ahora" en el rastreador, con fecha.
  4. Aplícalo a este lote y dilo en la lista de reels que le muestras al usuario ("los ganchos de construcción están reteniendo 1.4 veces más a los 3 segundos, así que usé construcción en 6 de 8"). Si un ganador contradice un estilo fijo, pregunta antes de cambiarlo.
  5. Después de programar, agrega una fila por reel con cómo fue editado.

La regla que importa: el gancho primero

Los primeros 3 segundos deciden la distribución, hasta la mitad de los espectadores se van dentro de esa ventana, y un gancho tiene que cargar al instante en lugar de construirse. Un reel que abre con "el consejo número dos es..." está muerto.

Por lo tanto, no cortes un extracto cronológico. Construye cada reel como:

  1. GANCHO (2-4s): la línea independiente más impactante, tomada de cualquier parte del video, incluido el final.
  2. CONSTRUCCIÓN: el contexto y la explicación, en el orden que mejor se lea.
  3. REMATE: una línea de cierre corta si existe.

Los fragmentos cronológicos producen ganchos débiles. Reordenar el mismo metraje, sin volver a filmar, lo soluciona. Reordenar es todo el trabajo.

Buenos ganchos, como patrón: "ya no nos saltamos el día de piernas", "un plan que te saltas no es un plan", "10 minutos al día son 60 horas al año". Cortos, declarativos, sin introducción.

Dónde llega el nuevo metraje

Los nuevos lotes de reels aparecen en <TU_DISCO_DE_METRAJE>/<CARPETA_DE_ENTRADA>/, a menudo como carpeta sin título. Mira allí primero. Una vez que sepas lo que contiene, renombra la carpeta primero con la fecha, luego un nombre: 26-09-2026 reels de equipo. Transcribe antes de renombrar, luego corrige las rutas en clips.ndjson.

Reels independientes: estilo animado

Para reels filmados como reels (sin video largo, sin edición en papel), el estilo animado es más atractivo: producto en el encuadre, tarjetas con fotos, una flecha o anillo en un botón, notas de máquina de escribir en la parte superior, pequeñas imágenes emergentes sobre la cabeza, un gancho grande y audaz con un subtítulo pequeño. Construye uno primero y obtén la aprobación antes de hacer el lote.

  1. Sin edición en papel. Escribe segments-v2.json como [] y dale a cada parte "raw": true, "exact": true.
  2. No confíes en la transcripción completa de Whisper en estos. Las tomas con largos reinicios entre líneas se desvían de 2 a 5 segundos (Whisper puede colocar una frase dentro de un silencio de 5.4s). Ejecuta GAP=0.18 SUF=.fine blobs.py <trabajo> <clip> y corta las partes en los bordes de los blobs. Para la última palabra, verifica un mapa RMS de 50ms: una caída en medio de una palabra puede ser una fricativa ("f" en "free"), así que vuelve a leer la cola de los subtítulos. Termina la última parte después de que la cola de la palabra caiga por debajo de -50 dB. Whisper también inventa palabras después del corte en la última tarjeta, así que verifica la última señal del SRT contra el audio.
  3. Ritmo de zoom: alterna partes entre gran angular (zoom 1.25, inclinación 0) y con zoom (zoom 1.6, inclinación -90) en metraje nativo vertical. Desplaza cualquier parte donde el orador se incline (ej. gancho: desplazar 180).
  4. Capa de animación en V2: motion.json (lista de elementos sincronizada con las palabras en reels-built.json) -> render_motion.mjs (fotograma a fotograma, ~50s para 30s). Los tipos de elementos están documentados en motion.html: construcciones de palabras, slam, notas de máquina de escribir, wobble, recortes de producto (pop / volar / encoger), anillos pulsantes en botones, un tachado, y una tarjeta de b-roll que reproduce metraje real (gradado con el LUT a través de ffmpeg lut3d). Un visual por línea, todos en la banda sobre la cabeza (y 200-550; a y 100 las palabras superiores se cortan). Para hacer espacio, inclina cada parte hacia abajo 100 más que el encuadre base (gran angular 1.25 / inclinación -100, zoom 1.6 / inclinación -190). Las palabras clave usan la clase blue (usa --brand), que dibuja un borde blanco grueso detrás del relleno para que el acento no desaparezca en una pared neutra. Coloca con resolve_captions.py, "track": 2.
  5. Imágenes de producto: primero la API de Wikimedia Commons, luego imágenes OG de la marca. Recórtalas con scripts/cutout, recorta los reflejos de la mesa. Mantenlos en <trabajo>/gear/.
  6. Tu metraje para b-roll: <TU_DISCO_DE_METRAJE>/<rodaje>/<cam>/full/. Si el metraje está en log, usa los archivos de resolución completa más el LUT; los proxies horneados a menudo se ven granulados.
  7. Efectos de sonido en A2: build_sfx.py motion.json out.wav. Usa video-reels/sfx/<nombre>.wav cuando esté presente (pop, whoosh, slam, tick, click, type, swipe, wobble, shrink), de lo contrario un sustituto sintetizado, por lo que funciona de inmediato sin archivos. ding siempre es scripts/ding.wav (se envía como un ding sintetizado; reemplázalo con tu propio sonido de selección). El pop sintetizado es un obturador de cámara (un pop con barrido de tono tiende a sonar "alienígena"), y MASTER = -3 dB mantiene cada efecto un poco por debajo de la voz. Para mejores sonidos, crea sfx/ e introduce tus propios efectos con licencia, luego ajusta las ganancias por archivo en LIBGAIN. Con el conector de Epidemic Sound: busca con SearchSoundEffects, obtén con DownloadSoundEffect (WAV), luego haz curl a la assetUrl. 7b. Música de fondo suave en A3: elige una vibra y mantente con ella (ej. jazz / saxofón soñador, sin voces). Con Epidemic Sound: SearchRecordings con query.externalID = {type: SPOTIFY_TRACK, id: <ID_DE_PISTA_DE_SPOTIFY_DE_REFERENCIA>} y vocals: false, salta cualquier cosa etiquetada como extraña/escalofriante/drone/orquestal, y dale a cada reel una pista diferente. Luego EditRecording con targetDurationMs = duración del reel + ~0.3s y forceDuration, para que la pista termine en lugar de ser cortada. Hornea -21 dB y un fade-out de 1.2s en el wav con ffmpeg, porque la API de Resolve no puede configurar el volumen del clip (SetProperty("Volume") devuelve False). Esto sitúa la base unos 15 dB por debajo de la voz.
  8. Vista previa antes de la revisión en Resolve: preview_reel.py (mismos recortes, LUT, superposiciones, sfx, música) produce un mp4 que puedes ver en segundos. Recorta cada pieza al recuento exacto de fotogramas de Resolve (fps, luego trim=end_frame, luego atrim=duration); las entradas simples de -ss/-t se ejecutan ~0.45s más y cortan la última línea de la vista previa. Pruébalo con una hoja de contactos de 1.3s y susurra los últimos 1.5s para confirmar que el final está todo ahí.
  9. Mantén una línea de despedida si el orador agrega una después del CTA: corta en el silencio después de ella, no después de la palabra del CTA. build_reels.py agrega 1s de silencio después del audio, porque de lo contrario Whisper elimina las últimas palabras de los subtítulos. Las re-renderizaciones van a nuevos nombres de archivo (-v3) para que Resolve no pueda servir un clip antiguo en caché.

Lotes de reels independientes

Primero obtén la aprobación del estilo de UN reel, luego ejecuta el resto en paralelo:

  1. Una carpeta por reel (~/Movies/reels-<MMDD>/<NN>-<slug>/) con <clip>.wav/.json enlazados simbólicamente, clips.ndjson, segments-v2.json = []. Las carpetas separadas evitan que los reels sobrescriban el reels-built.json de los demás.
  2. Escribe un breve resumen que apunte a los archivos del reel aprobado (motion.json, encuadre, sfx) y lanza un agente en segundo plano por reel, 4 a la vez (más estrangula un portátil en decodificaciones 4K). Dale a cada agente la transcripción del clip, el nombre exacto del modelo del producto y cualquier línea a eliminar (hechos incorrectos, reinicios, charla).
  3. Los agentes se detienen en una vista previa sin música. Haz la música de forma centralizada (una edición por reel, una pista diferente cada vez), nivela a aproximadamente -38 dB promedio con un fade, renderiza la vista previa final, luego coloca en Resolve un reel a la vez.
  4. Revisa tú mismo la hoja de contactos de cada agente antes de construir. Reúne las vistas previas finales en una carpeta previews/ para su revisión.
  5. El encuadre difiere según la configuración. Ejemplo: gran angular zoom 1.2 / inclinación -190, zoom 1.5 / inclinación -380 en una configuración; 1.25/-100, 1.6/-190 en una más suelta. Verifica las imágenes fijas por clip.
  6. Reúne los elementos "para verificar" de cada agente (errores de audición, hechos que eliminó, afirmaciones en pantalla) en tu resumen. Whisper comúnmente escucha mal el habla rápida (ej. "free" como "for you").

Obtén cada reel del video

Explota todo el video, nunca repitas contenido.

  1. Haz un inventario primero. Recorre toda la transcripción y enumera cada unidad de idea que pueda ser independiente: cada consejo, historia, estadística, guión, confesión, línea contraria y victoria de cliente. Espera aproximadamente un reel por cada 1.2-1.5 min de corte final.
  2. Busca estos tipos de gancho:
    • un número: "300 panes", "40% de mi factura del supermercado", "de 5K a 50K seguidores"
    • una confesión: "Solía simplemente sentarme y esperar que me contactaran"
    • una línea contraria: "no lo regales así nomás... eso es un mal sorteo"
    • una línea de experto: "el secreto de esto que nadie hace"
    • una victoria de cliente: un resultado nombrado (con permiso)
    • un guión dicho en voz alta: el DM, la solicitud de referencia
    • un "nunca": "Nunca he tenido a nadie que me diga que no en mi cara"
  3. El gancho tiene que nombrar el tema. "El secreto que nadie hace" falla por sí solo porque el espectador no puede saber de qué se trata. Elige la línea que dice de qué trata el reel en el primer segundo.
  4. Ninguna línea en dos reels. Dos reels pueden compartir un tema si el gancho y el ángulo difieren.
  5. Preséntalo en niveles: la lista A para construir, la lista B como repuestos, y los sobrantes con una razón cada uno ("segunda mitad del Reel 4", "sin gancho", "divagando en cámara"). El usuario elige.
  6. Detente cuando se repita. Más allá de ese punto, cada reel diluye a los demás.

La forma que sigue cada reel

"El gancho necesita enganchar a la gente, y luego el resto del reel explica el gancho y explica el valor, la parte sustanciosa."

  1. Gancho: detiene el desplazamiento y nombra el tema.
  2. Explica el gancho: la siguiente línea responde la pregunta que planteó el gancho. Si el gancho es "Perdí 20 kilos sin gimnasio", lo que sigue dice cómo.
  3. La parte sustanciosa: el valor real, el cómo se hace, el guión, la prueba. Esto es la mayor parte del reel.
  4. Detente en la línea de remate.

Un gran gancho seguido de líneas que no lo pagan es peor que un gancho simple, porque el espectador se siente engañado. Juzga cada reel en ambas mitades: ¿me detendría el gancho? ¿y todo lo que sigue tiene sentido y cumple lo que prometió?

Verificación de flujo: léelo como un extraño antes de construir

Escribe cada reel como oraciones simples en orden, luego léelo como alguien que nunca ha visto el video largo. Solo entonces busca los tiempos. Estas son las reglas en las que los recortes manuales continúan aterrizando:

  1. Termina en el remate, una vez. Detente en la línea más fuerte. No agregues un eslogan después ni un segundo intento del punto.
  2. Nada puede referirse a algo que el reel no preparó. "Simplemente les pregunté y casi siempre lo comparten" sin un "pregunté qué" en el reel tiene que desaparecer. Verifica cada "ella", "ellos", "esto", "eso" y "entonces" contra lo que vino antes en el reel.
  3. Las historias se cuentan en orden de historia. Una victoria como gancho hablado, con la persona nombrada después, confunde al oyente. Nombra a la persona primero, luego la victoria. La tarjeta de texto hace el gancho.
  4. Una idea por reel. Dos ideas más una reformulación deberían convertirse en una idea más una prueba.
  5. Corta los comentarios sobre el orador y los tartamudeos dentro de una parte. Divide la parte a su alrededor.
  6. El gancho hablado nombra el tema con palabras. "También es una forma increíble de llegar a una nueva comunidad" deja "eso" indefinido. "Mientras sigues preparando comidas los domingos..." dice de qué trata el reel.
  7. Apunta a 20-35s. Cualquier cosa más allá de 40 necesita una razón.

Entrégalo ajustado: sin muletillas, sin silencios vacíos, sin reinicios. Antes de construir:

  • Audio de solapa/sala en vivo: ejecuta segments.py (de paper-edit) con NOISE_DB=-30. El detectar silencio de ffmpeg se basa en picos, y el ruido de la sala en una solapa sobrepasa el valor predeterminado de -36, por lo que las pausas reales de 0.5-0.8s pasan desapercibidas a -36.
  • Whisper elimina por completo las muletillas "um" , incluso con un prompt de relleno. Verifica el primer blob con voz de cada parte: un blob corto (0.2-0.7s) aislado antes de la primera palabra real podría ser "um". Corta el blob si es probable que lo sea. Para una rata de 3.2s, un solo "um" al final puede sumar 0.5s; recorta la parte. Si un ráster muestra un blob ruidoso antes de la palabra real y el audio tiene un espacio por delante, elimina el blob en lugar de silenciarlo (el silencio es más corto).

Individual skills in this repo

This repo contains 7 individual skills — each has its own dedicated page.

beachyphotoandfilm-arch/video-skills

Sync camera footage to a separate lapel or field-recorder track (e.g. Tascam DR-10L and similar) and lay it up in DaVinci Resolve. Stitches the recorder's split files, finds each clip's exact place in the audio by matching words then waveforms, cuts one lapel slice per clip so every later skill works unchanged, checks for clipping, and builds a synced timeline in a new Resolve project. Trigger on "sync the lapel", "sync my audio", "line up the recorder", "I used a lav", or any shoot with a separate audio folder (live talks, events, workshops). Run it before paper-edit or video-reels.

beachyphotoandfilm-arch/video-skills

Turn raw talking-head footage into an assembled rough cut inside DaVinci Resolve. Pulls the clips off your footage drive, transcribes them locally, removes failed takes, restarts, asides and dead air, then creates a new Resolve project with two paper-edit timelines ready for your fine trim. Trigger on "paper edit", "cut my raw footage", "make a rough cut", "clean up this video", or when the user points at a folder of raw camera files for a YouTube video.

beachyphotoandfilm-arch/video-skills

Design a unique Instagram cover for each reel in your house style. Reads what the reel is about, writes a short hook headline, picks one of your own photos from a tagged photo library, lays it out like your existing covers, and proofs it in grid view at phone size. Renders locally, never with AI image generation. Can be called by a scheduling skill before reels are scheduled. Trigger on "make covers", "reel covers", "cover photo for this reel", "design the IG covers".

beachyphotoandfilm-arch/video-skills

Render finished reels out of DaVinci Resolve, write captions in the creator's voice, attach a custom Instagram cover from reel-covers, and schedule them to Instagram, TikTok and YouTube Shorts through Metricool. Handles the Drive upload hop, collision checks against the existing calendar, and cleanup. Trigger on "schedule the reels", "post these", "put these on the calendar", or after reels are approved.

beachyphotoandfilm-arch/video-skills

Build animated brand overlays (motion graphics) for a talking-head video, timed to the speaker's exact words, plus a DaVinci Resolve import file. House style is in-scene type (text beside and behind the speaker's head) plus diagrams. Transcribes the rough cut locally, picks the moments, renders transparent .mov clips, and writes an FCPXML that drops every clip onto the timeline already in position. Trigger on "make animations for this video", "add overlays/motion graphics", "animate this", "b-roll graphics for my YouTube video", or when the user shares a rough cut and asks for graphics.

beachyphotoandfilm-arch/video-skills

Design YouTube thumbnails and titles for a talking-head video. Pulls graded full-res frames out of the raw footage, renders brand-styled variants in two proven layouts, and proofs them at phone size where the click actually gets decided. Trigger on "make thumbnails", "thumbnail for this video", "title and thumbnail", or after a video is cut.

beachyphotoandfilm-arch/video-skills

Run the whole YouTube video pipeline end to end, one stage at a time, stopping for the creator's approval at every gate. Paper edit, punch-ins, reels, reel covers, scheduling the reels, overlays, thumbnail and title, then scheduling the long-form video, all through Metricool. Keeps state per video so you can stop anywhere and pick up later. Trigger on "/youtube", "let's do the whole video", "run the video pipeline", "continue the <name> video", or when handed raw footage for a YouTube video.

Skills relacionados