Video Editor · Trabajador de Video
Compone videos cortos con voz en off (talking head) en 9:16 / 16:9 + material superpuesto (títulos / B-roll cutaway / chyron / subtítulos). La composición principal es autosuficiente; el material de stock real / tarjetas de noticias son delegados por este skill como director a footage-finder / news-highlight.
Cuándo activar
El usuario dice:
- "Corta este video", "Edita video", "Montaje" — entrada más común
- "Haz un video", "Produce completo", "Compón voz y B-roll"
- "Nuevo episodio [serie X]"
- "Agrega subtítulos / chyron / texto emergente / tarjeta de título"
- "Agrega efectos / animación / visuales"
- "Agrega a la voz imágenes reales estilo Maria / reacciones reales / imágenes parciales" →
reaction_overlay(1080×1920 vertical; primero leerecipes/reaction_overlay.md)
No activa pero relacionado (delegado a skills hermanos, video-editor como director):
- Material de stock real / stock footage / B-roll vacío → llama a
footage-finderskill - Tarjeta de highlight de noticias (captura de fuente real + luz amarilla) → llama a
news-highlightskill - Solo generación de voz en off, material corto (<30s) → no activa
Delegación: Tipo de cue → qué skill
En la fase de cues (puerta 1), cada cue se etiqueta con un tipo; los que no son nativos del skill se delegan:
| Tipo de cue | Quién lo hace | Producto |
|---|---|---|
real_footage | footage-finder skill | mp4 de stock real recortado al formato + página de revisión |
news_highlight | news-highlight skill | tarjeta mp4 de noticias reales con luz amarilla (estilo Vox) |
source_progressive_highlight | Este skill animator/cutaway/scene_source_progressive_highlight.html | Resaltado progresivo de frases en capturas reales de noticias/artículos, sin redibujar la página |
tenure_bullets | Este skill animator/cutaway/scene_tenure_bullets.html | Viñetas numeradas en el mismo plano: elemento actual en amarillo, anteriores atenuados |
numbered_pills | Este skill animator/cutaway/scene_numbered_pills.html | Cápsulas blancas 01–04 al estilo YC con borde naranja, resumen por grupos que aparece ítem por ítem; misma elección que listicle |
company_site | Este skill recipes/compose_company_site.py | Grabación de pantalla completa del sitio web real + PIP circular continuo de la persona; el sitio web tiene PIP por defecto, evitando subtítulos y áreas clave |
cutout_sticker_slidein | Este skill animator/cutaway/scene_sticker_slidein.html | Recortes transparentes de personas/objetos con fuente, que se deslizan desde diferentes direcciones; sin usar tarjetas de reacción con marco blanco obsoleto |
source_quote / source_screenshot | Este skill busca el texto original y captura la página real | Captura de pantalla real con enlace original, párrafo correspondiente y resaltado; las citas no pueden reemplazarse con tarjetas redibujadas |
real_person_reaction | Este skill primero busca material del usuario / video público original, si es necesario delega a footage-finder | Foto o video corto real de persona con fuente; no se reemplaza automáticamente con Emoji |
| opener / chyron / cutaway / listicle / spec_review | Este skill animator/opener | HTML→mov/mp4 |
reaction_overlay (persona aparece continuamente, material real aparece parcialmente) | Este skill recipes/reaction_overlay.py + composición de video existente | Composición de imágenes estáticas superpuestas con fragmentos de persona real; cue JSON, enlaces de fuente y material reutilizable |
| Subtítulos | Este skill subtitle | Subtítulos con palabras clave resaltadas |
Sugerencias de material en el guion de voz: leer antes de hacer cues
Aplica a videos completos con imágenes, cues de animación, reaction_overlay y slidecast (3:4). Cuando el usuario proporciona un guion de voz (HTML / Markdown / documento Feishu), primero lee el cuerpo del guion y la sección independiente de 'Sugerencias de material'; si solo se da audio o video, primero busca en la carpeta del mismo tema si hay un guion correspondiente. Las tareas puntuales de solo subtítulos o títulos no requieren este paso.
- Las 'Sugerencias de material' son la intención del editor, no líneas para ser leídas; la transcripción de Whisper solo verifica lo que realmente se dijo y determina los códigos de tiempo, no puede descartar las sugerencias visuales del guion solo porque se vuelve a transcribir.
- Cada sugerencia se lee como: 'oración ancla / imagen a mostrar / material original o enlace de fuente / alternativa'. Primero usa el ancla para encontrar la posición en la transcripción real; cuando el guion cambia palabras o reordena, realinea semánticamente, sin aplicar mecánicamente los segundos estimados del guion. Los párrafos que no se pronunciaron no se fuerzan con material.
- En la tabla de cues de la puerta 1, agrega una columna 'Sugerencia de material en guion → Adoptar / Ajustar / Saltar'. Al adoptar, conserva el enlace original; al ajustar o saltar, escribe una razón y da una imagen alternativa. Para párrafos sin sugerencia en el guion, se pueden agregar cues según el contenido de la voz, pero deben marcarse como 'Nuevo'.
- Cuando el enlace original está roto, los hechos han cambiado o la imagen no es adecuada para el formato actual, primero verifica antes de reemplazar; no uses capturas inexactas, páginas web falsificadas o imágenes desalineadas con la voz real solo para cumplir la lista.
- Si ya hay un guion de voz pero no se encuentra la sección de sugerencias de material, completa la edición normalmente, sin pedir al usuario que reescriba el guion. El plan final de cues se basa en la voz real + la retroalimentación del usuario en la puerta 1.
Al escribir un nuevo guion de voz, el formato complementario está en la sección 'Sugerencias de material de voz' del skill html-report.
Páginas reales e imágenes dinámicas: reglas de edición predeterminadas
- Cuando se menciona una empresa/producto específico, muestra su sitio web oficial o interfaz de producto real. Conserva la identidad del sitio, el nombre de la empresa y los visuales reales que lo autentican; prioriza grabar desplazamiento de página, posicionamiento del mouse, demo del producto o acercamiento parcial. La grabación del sitio web usa
recipes/capture_company_site.js, la composición usarecipes/compose_company_site.py; no te limites a pegar el logotipo ni uses tarjetas web falsificadas. Solo si el sitio web oficial no es accesible, usa capturas oficiales verificables y explica el motivo en la tabla de cues. - La información que puede avanzar con la voz, se presenta ítem por ítem de forma dinámica. Por ejemplo, '1, 2, 3, 4' se revelan uno por uno en el orden que se mencionan, resaltando el actual y dejando una vista completa final; una lista completa de 11 ítems puede agruparse/entrar en pantalla dividida, pero al final debe mostrar los 11 ítems completos. No muestres los cuatro ítems como una página estática desde el principio, ni uses flotaciones sin información para reemplazar la presentación secuencial.
- El material estático a pantalla completa puede superponer un PIP dinámico de la persona; los sitios web de empresas reales muestran PIP por defecto, incluso si el sitio web se desplaza. El sitio web usa
recipes/compose_company_site.py: grabación de pantalla completa de la página real, video continuo de la persona recortado en ventana circular. El video B-roll de stock no tiene PIP por defecto. Cada cue primero marca el área de subtítulos y el visual clave más importante, luego elige entre cuatro posiciones seguras: superior izquierda, superior derecha, centro izquierda, centro derecha; cuando hay múltiples posiciones seguras en cues adyacentes, se rotan, sin fijar todas las páginas de empresa en la misma esquina. Dentro del mismo cue, la posición es fija, no salta. Si no hay posición segura, reduce el tamaño o cambia el recorte de la página web; si aún no hay solución, registra la excepción y cancela. El material estático siguerecipes/compose_static_pip.py. Ver sección 9 deCONVENTIONS.md. - Las listas ordenadas primero ofrecen dos tipos de imágenes reales para elegir. Para un mismo grupo de 3-5 ítems,
scene_numbered_pills.htmlhace cápsulas numeradas a pantalla completa,scene_listicle.htmlhace una lista numerada con círculo amarillo en el mismo plano que la persona; en la puerta 2, se muestran en paralelo con el mismo texto. Para resúmenes de categorías/direcciones, prioriza cápsulas numeradas; para explicar cada ítem consecutivamente, prioriza listicle; las viñetas superiores estilo Hunger son una tercera opción más ligera en el mismo plano. Tras la aprobación, cada ítem aparece según el tiempo de la voz real, sin mostrar la vista completa al principio. - Los recortes cortos y el material gráfico adecuado para entrar pueden deslizarse desde los cuatro lados. Los recortes de personas/objetos reales, memes, fotos, capturas parciales pueden deslizarse desde arriba, izquierda, abajo, derecha, rotando o usando una semilla fija para seleccionar al azar; primero verifica que la trayectoria no atraviese subtítulos, rostros, texto original o datos clave. Para grabaciones de pantalla completa de sitios web y videos de publicaciones originales que deben identificarse directamente, se decide según el contenido si es adecuado deslizarlos, sin forzar transiciones para agregar dinamismo. La entrada dura aproximadamente 0.25-0.35 segundos, y después de colocarse, deja suficiente tiempo para leer; dentro del mismo plano, no se mueve aleatoriamente repetidamente. Los recortes usan
animator/cutaway/scene_sticker_slidein.html, sin activar las tarjetas de reacción Emoji con marco blanco obsoleto. - Umbral de ritmo visual: la imagen de persona continua en voz explicativa no supera los 8 segundos por defecto. Se mide desde la salida del visual auxiliar efectivo anterior hasta la entrada del siguiente; si supera los 8 segundos, debe marcarse en la tabla de cues y explicar por qué el espacio en blanco. En los primeros 5 segundos, da el título o la primera evidencia. Esta es la línea de verificación de edición de esta cuenta, no una frecuencia fija medida en videos de Mariah; no insertes Emoji o tarjetas de texto repetido de la voz para llenar segundos. Los visuales auxiliares efectivos deben ser páginas fuente, operaciones de producto, imágenes reales, gráficos, listas ítem por ítem o nuevos estados visuales con información; los subtítulos comunes, títulos permanentes y cambios de boca simples no cuentan. Para más detalles y preguntas frecuentes, ver
CONVENTIONS.md.
Paso Cero · Formato + Entrada (★ video-editor es la única entrada para todo el proyecto)
video-editor es el director — el usuario entra aquí para hacer videos, sin necesidad de ir primero a footage-finder / news-highlight / data-viz. Al activarse, lo primero es preguntar el formato usando AskUserQuestion:
Este video es vertical u horizontal?
- 9:16 vertical (Douyin / Xiaohongshu / Video Accounts / Reels) → 1080×1920
- 16:9 horizontal (YouTube / Bilibili) → 1920×1080
- 3:4 tutorial práctico (grabación de pantalla / "cómo uso IA para X") → 1080×1440 · usa submódulo
slidecast/
El formato sigue el tipo de contenido: tutoriales prácticos / demostraciones de pantalla por defecto son 3:4 (slidecast); otros como opiniones / vlogs / cultura general son 9:16. No fuerces una voz normal en el formato de ventana de grabación de 3:4, ni hagas tutoriales prácticos en 9:16.
Atajo de decisión: si el usuario ya dijo el formato ("haz un 16:9" / "súbelo a YouTube" / "súbelo a Bilibili"), no preguntes, decide directamente.
El formato determina el flujo descendente:
| 9:16 | 16:9 | |
|---|---|---|
| Lienzo del submódulo | 1080×1920 | 1920×1080 |
| Imagen vacía real | footage-finder --vertical | footage-finder (horizontal por defecto) |
| Tarjeta de noticias | news-highlight (versión vertical) | news-highlight (Root por defecto 1920×1080) |
| Gráfico de datos | data-viz (1080×1920) | data-viz (1920×1080) |
| compose | recipes/compose_dual.sh.template | recipes/compose_16x9.sh.template |
| Zona segura | CONVENTIONS sección 3 | CONVENTIONS sección 1, línea 16:9 |
Estos skills auxiliares ya soportan horizontal; video-editor es responsable de delegar + composición final, el usuario solo habla con video-editor. 16:9 también tiene una capacidad adicional de person-pip (voz limpia de rostro → sin contenido, rostro a pantalla completa; con contenido, se reduce a una ventana pequeña en la esquina inferior derecha, ver sección 9 de CONVENTIONS + plantilla compose_16x9).
Una vez determinado el formato, continúa con la ruta de forma de producto final.
Paso 1 · Pregunta de Ruta (★ Ejecutar inmediatamente después de la activación)
No asumas que el usuario quiere el flujo completo. Primero pregunta una vez con AskUserQuestion. Dividir según 'cómo será el producto final' (forma final), no según 'qué quieres hacer' (acción) — el usuario tiene en mente el producto final, no el proceso.
¿Cómo quieres que sea el producto final esta vez?
- Un video completo con subtítulos: ya tienes el video, solo agregar subtítulos → submódulo
subtitle/(sin tres puertas)- Una tarjeta de título / intro: capa superpuesta alfa transparente de 4.5s → submódulo
opener/(sin tres puertas)- Un video completo con efectos: agregar chyron / cutaway / animaciones de lista → submódulo
animator/(con tres puertas)- Hacer un video completo desde cero: voz → título → efectos → subtítulos, todo incluido → opener → animator → subtitle en serie
- Video tutorial práctico con voz (3:4): voz → diapositiva de ventana de grabación case-step + subtítulos, tú superpones grabación/rostro → submódulo
slidecast/(con tres puertas)
Norma de numeración de opciones: los prefijos de opciones de AskUserQuestion solo usan números puros 1 / 2 / 3 / 4, prohibidos caracteres con círculo / katakana como ①②③④, ㋐㋑㋒㋓ — las fuentes de los usuarios a menudo no los soportan, renderizando como caracteres rotos.
Atajos de decisión (casos que se pueden ir directamente sin preguntar):
| Texto del usuario | Ir directamente a |
|---|---|
| "Ayúdame a poner subtítulos / agregar subtítulos / quemar subtítulos" | 1 · subtitle/ |
| "Haz una intro / tarjeta de título / opener" | 2 · opener/ |
| "Nuevo episodio de la serie X" / "Haz un video" / "Produce completo" | 4 · flujo completo |
| El contexto ya está haciendo un video completo, quiere agregar chyron / cutaway | 3 · animator/ |
| "Tutorial práctico / demostración de pantalla / cómo uso IA para X" / serie de 100 casos prácticos de IA | 5 · slidecast/ (3:4) |
| "Como Mariah, agrega a la voz vertical imágenes reales, reacciones reales y fotos", y el usuario ya dio el video original | 3 · reaction_overlay; primero confirma que el video fuente es 1080×1920, lee recipes/reaction_overlay.md |
Principio clave: 1 y 2 son operaciones puntuales, sin tres puertas; 3 y 4 deben pasar por las tres puertas.
★ Flujo de trabajo de tres puertas (obligatorio para opciones 3 y 4, no se permite saltar)
⚠ Las opciones de ruta no son un permiso de renderizado — que el usuario elija 3 o 4 solo significa 'quiere seguir el proceso de animator'. Una vez dentro de animator, debe pasar por las tres puertas, cada puerta se DETIENE y espera confirmación explícita del usuario antes de avanzar al siguiente paso. Incluso si el usuario ya te ha dicho el título / número de cues / texto, no significa que te permita saltarte las puertas.
Puerta 1 · Plan de texto ─► Dar tabla de cues en markdown en el chat
DETENER · Esperar respuesta explícita del usuario como "OK / cambiar X / eliminar Y / bloquear"
❌ No escribir ningún HTML de cue
❌ No empezar a renderizar
│
Puerta 2 · Spec Review ─► Escribir el HTML de cada cue
★ Primero ejecutar node recipes/lint_layout.js --all <directorio-de-cues>
(Zona segura / tamaño mínimo de fuente / ancho de texto / centrado, si FALLA reparar antes de continuar)
Luego generar _review/spec_review.html
DETENER · Decir al usuario "Abre file:///<proyecto>/_review/spec_review.html para ver, dame tu opinión y vuelve a mí"
❌ No renderizar ProRes mov
❌ No componer video completo
│
Puerta 3 · Última llamada antes de renderizar ─► AskUserQuestion: resumen + decisiones + elegir una de tres formas de salida
DETENER · Esperar que el usuario elija
❌ No asumir la forma de salida
│
Render + compose + subtítulos
Antes de que el usuario diga "bloqueado / confirmado / empezar / renderizar / OK" u otras expresiones afirmativas explícitas, todavía estás en la puerta anterior.
❌ Contraejemplos (no hacer esto)
| Comportamiento incorrecto | Pérdida |
|---|---|
| El usuario elige 4 + da el título → tú extraes la voz + transcribes + escribes HTML + renderizas | Saltas la puerta 1, el punto de control más barato para "cambiar 1-2 líneas", ahorrando 5-10 min + 10k tokens |
| El usuario dice "Quiero esto" → tú piensas "ya que lo quiere, renderiza directamente" | Saltas la puerta 2, el error visual/tamaño de fuente en HTML cuesta 5 veces más al renderizar (30s de render × número de fallos) |
| El usuario en la puerta 2 dice "cue 3 cambiar X" → después de cambiar, renderizas directamente | Saltas la puerta 3, no dejas que el usuario elija la forma de salida (composición original / pista B-roll transparente / ambos), pudiendo renderizar 500MB de ProRes de más |
| El usuario no dice algo afirmativo → tú asumes que quiere avanzar y avanzas | El usuario revisa incompleto, el render sale desviado y hay que rehacer todo el ciclo |
✅ Ejemplo correcto
"Entrando en animator. Primero transcribiré + daré la tabla de plan de cues en markdown para que la veas. Esta es la puerta 1 — no escribo HTML ni renderizo, espero tu OK / cambio / eliminación."
Al final de cada puerta, usa una frase similar para decirle explícitamente al usuario "Ahora estamos en la puerta X, espero tu OK" — no avances en silencio.
Para más detalles del proceso + lista de productos específicos de cada puerta + línea base de número de cues, ver animator/README.md.
Entradas de submódulos
| Submódulo | Qué hace | Documento de entrada |
|---|---|---|
opener/ | Tarjeta de título serifada amarilla de 4.5s, capa superpuesta alfa transparente | opener/README.md |
animator/ | chyron / cutaway / listicle / spec_review, flujo de tres puertas | animator/README.md |
subtitle/ | Transcripción Whisper → superposición PNG con palabras clave resaltadas → quemar subtítulos. 9:16 usa add_subtitles.py; 16:9 videos largos deben usar make_events_16x9.py + burn_chunked_16x9.py (quemar en una sola cadena se colgará, ver README) | subtitle/README.md |
slidecast/ | Video tutorial práctico con voz (3:4): voz → diapositiva de ventana de grabación case-step cortada por código de tiempo + subtítulos → mp4 de vista previa + capa transparente mov | slidecast/README.md |
reaction_overlay | Voz de persona como base, prioriza capturas de fuente real y reacciones reales; material y permanencia según contenido, no frecuencia fija de Emoji | recipes/reaction_overlay.md |
Normas compartidas
- Normas de entrega:
做内容/_运营文档/视频成片流水线-模板.md— un video = dos carpetas con el mismo nombre (trabajo / entrega) + en la puerta 3, por defecto tres productos (video completo / capa de título 3:4 / línea de tiempo) en~/Movies/<serie>/<código-video>/. El flujo completo sigue este documento. - Receta de productos de entrega:
recipes/deliverables.md(cómo renderizar la capa de título transparente · cómo generar la línea de tiempo desde el plan de cues · nombre de la carpeta de entrega) - Puerta de entrega P0: Para videos completos 9:16, después de la puerta 1, ejecuta
python3 recipes/preflight.py plan <proyecto>/preflight.json; antes de cada entrega, ejecutapython3 recipes/preflight.py final <proyecto>/preflight.json, revisa fotogramas, presets de subtítulos, espacios visuales >8s y superposición de PIP/Logo/firma. Formato enrecipes/preflight.example.jsonyrecipes/deliverables.md. - Normas visuales:
CONVENTIONS.md(zona segura, paleta Hana, temporización de chyron, jerarquía de tamaños de fuente, reglas de clímax) — leer antes de escribir cualquier HTML de submódulo. - Lint de diseño (★ obligatorio en puerta 2):
node recipes/lint_layout.js <cue.html>— después de renderizar con Puppeteer, verifica zona segura / tamaño mínimo de fuente 22px / ancho de texto ≤920 / centrado / número de tamaños de fuente, los tres preajustes 9:16·16:9·3:4 se detectan automáticamente, los cues de animación se evalúan en estado final. Si FALLA, reparar antes de mostrar spec review al usuario. Los elementos decorativos que deliberadamente cruzan los límites añadendata-lint-ignore. - Autodiagnóstico de entorno:
bash recipes/doctor.sh— para máquinas nuevas / errores de renderizado, ejecuta primero (ffmpeg / whisper / Chrome / puppeteer-core / avconvert / fuentes, 11 ítems) - Receta de doble salida ffmpeg:
recipes/compose_dual.sh.template(mp4 + alpha mov opcional) - Errores conocidos:
recipes/PITFALLS.md(broll_reel parpadeante / HyperFrames webm sin alpha / escape#en ffmpeg / capa alfa grisácea / ruta china TCC, etc., 23 reglas) - Índice de ejemplos históricos:
recipes/examples.md(11 paradigmas de cues de tus videos reales)
Estrategia de doble salida
| Archivo | Propósito | Cuándo se genera | Especificaciones |
|---|---|---|---|
<nombre>_completo.mp4 | Vista previa / publicación / revisión | En cada iteración | H.264 yuv420p · CRF 20 · con audio + capas superpuestas |
<nombre>_capa-broll.mov | Capa superpuesta para software de edición (Premiere / AE / FCP) | Solo cuando el usuario dice explícitamente "versión final / capa de edición / capa ProRes / solo B-Roll" | ProRes 4444 yuva444p10le · transparente · sin audio |
Durante las iteraciones, por defecto solo se genera el video completo mp4. La capa broll tarda ~30s en renderizar + ~500MB en escribir en disco, no se necesita para revisión durante iteraciones.
⚠ La capa broll siempre es una pista completa sincronizada. Cuando el usuario dice "Solo B-Roll", se refiere a esta pista completa, nunca darle N cues en fragmentos mov separados para que él mismo edite.
Para cues no superpuestos, la pista alfa completa debe componerse mediante concat: gap transparente + cue + gap transparente + cue, el gap se calcula según la duración/número de fotogramas del cue real con
ffprobe. No superpongas tarjetas semitransparentes una por una sobre un lienzo transparente[email protected]; esto hará que las tarjetas de color crema se vuelvan gris oscuro al final cuando se superpongan a la voz. Ver regla 23 derecipes/PITFALLS.mdyrecipes/compose_dual.sh.template.Antes de entregar la capa broll, debes hacer QA con fondo real: superpone el
<nombre>_capa-broll.movfinal sobre la voz original, extrae 4-8 fotogramas clave/hoja de contactos, revisa color, alfa, superposición de rostro y sincronización.spec_review.htmlsolo puede revisar HTML/animación, no puede reemplazar la verificación final de composición ffmpeg.
Matriz de decisión de títulos (cuando el usuario dice "agregar título / agregar intro / palabra clave", cómo elegir)
| El usuario dice | Por defecto = | Parámetros clave |
|---|---|---|
| "Agregar título" / "title card" / "intro" / "opener" | opener/yellow.html (título grande serifado amarillo + subtítulo itálico blanco) | Alpha transparente · inicio del video en 0s · top-third (padding-top 280px) · 4.5s · ProRes 4444 mov |
| "Enfatizar una palabra en el momento X" / "texto emergente" | animator/chyron/chyron.html | Cápsula amarilla · top 16% (y≈307 centro) · 1-2s pop |
| "Lista 1, 2, 3" / "Tres / cuatro puntos clave" | animator/cutaway/scene_listicle.html | Lista numerada que se revela línea por línea · tarjeta top 280px |
| "Tarjeta de datos a pantalla completa / gráfico comparativo" / "cambiar a datos X" | animator/cutaway/scene_blank.html | Cutaway a pantalla completa con fondo blanco · caption top 280px · mp4 opaco |
Principios clave:
- "Título" del video = intro en 0s, por defecto. Incluso si la voz solo menciona la frase en el segundo 22, el título sigue saliendo en el segundo 0. Mantén el formato de la cuenta: título principal amarillo + subtítulo blanco; el título principal de una sola línea también conserva la capa blanca, a menos que el usuario especifique una versión monocromática. Las escenas de título personalizadas en la puerta 2 deben compararse con
opener/yellow.htmlpara verificar colores y jerarquía. - Título de intro = alpha transparente superpuesto sobre talking head. No es una toma independiente de fondo dorado sólido.
- Cutaway de tarjeta de datos = pantalla completa opaca, cubre el talking head; otras capas superpuestas (título / chyron) son transparentes por defecto.
Skills complementarios
hyperframes/hyperframes-cli— CLI de HyperFrames (renderiza HTML → mov/mp4), dependencia de renderizado del submódulo de animación
No está en el alcance de este skill (delegado)
- Captura de material de stock real (Pexels / Pixabay) →
footage-finderskill - Tarjeta de highlight de noticias →
news-highlightskill - Generación de texto / voz TTS → función TTS del skill
hyperframes - Revisión de cumplimiento de contenido →
content-auditskill