Communitygithub.com

Director de Video

Punto de entrada canónico para toda solicitud de chat de IA que pida crear, generar, planificar o editar un video, incluyendo películas promocionales, anuncios, videos cortos, videos de productos, videos con imagen de referencia, imagen a video, transiciones de primer/último fotograma, storyboards/keyframes, videos de personajes hablando, 宣传片, 广告片, 短视频, 视频, 口播视频, 分镜图, 图片转视频 y 商品宣传片. No invocar cosyvoice-ssml o tts-director como primera respuesta a una solicitud de video. Esta habilidad debe redactar un guion y una tabla de tomas, generar imágenes de vista previa del storyboard (hoja de contactos) mediante image.generate, pedir al usuario que confirme el guion junto con el storyboard, y solo entonces llamar a la generación de video.

¿Qué es Director de Video?

Esta habilidad, Video Director, es el punto de entrada único y obligatorio para cualquier generación de video dentro del asistente de IA. Su función principal es orquestar un flujo de trabajo secuencial en forma de máquina de estados, que va desde la planificación del guion y la tabla de tomas, pasando por la creación de un storyboard visual (una hoja de contactos con vistas previas de los planos), la revisión y confirmación conjunta del usuario, hasta la generación final del video. Está diseñada para garantizar la coherencia narrativa y visual, evitando atajos que comprometan la calidad, como generar el video antes de tener el guion aprobado o usar una imagen de personaje como entrada de audio. Soporta múltiples modos de generación (texto a video, video guiado por referencia, transiciones de primer/último fotograma) y gestiona videos de personajes parlantes (口播) sincronizando el audio TTS (locución) con la imagen de referencia del personaje. La habilidad es independiente de las herramientas de TTS (como cosyvoice-ssml o tts-director), que solo se invocan como pasos internos dentro del flujo de video, cuando ya se ha confirmado el guion y se necesita generar la pista de audio para un personaje digital. También incluye reglas estrictas sobre la duración de los segmentos de video (máximo 15 segundos por segmento) y sobre cuándo crear un "paquete de proyecto de video" (solo si el usuario lo solicita explícitamente).

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Jamailar/Beav/tree/HEAD/desktop/builtin-skills/video-director

Preguntar en tu IA favorita

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

Documentación

¿Qué hace Director de Video?

Usa esta habilidad antes de llamar a Operate(recurso="video", operación="generate", entrada={ ... }) para trabajos de video.

Para el chat de IA, esta habilidad es el punto de entrada único para la generación de video. Si el usuario dice "haz un video de presentación", "genera un video", "anuncio de producto", "spot publicitario", "video de personaje digital" o cualquier solicitud similar de video, invoca video-director primero. No empieces desde cosyvoice-ssml; esa habilidad es un sub-paso interno de TTS para humanos digitales y no debe impulsar el flujo de trabajo de video.

Si esta habilidad se cargó porque el usuario adjuntó una imagen y pidió una película promocional / 宣传片 / 视频, trata la imagen adjunta como una referencia de producto o visual para el flujo de trabajo de video. No generes una imagen de producto de reemplazo como paso de "análisis".

Flujo de Trabajo por Defecto

Trata el flujo de trabajo como una máquina de estados con compuertas. No omitas ni reordenes los estados:

  1. plan_draft: Aclara el modo de video previsto a partir del objetivo y los activos del usuario, luego redacta un guion de video conciso pero detallado y una tabla de tomas.
  2. storyboard_preview: Inmediatamente después de que exista la tabla de tomas, genera una o más imágenes de vista previa del storyboard (hoja de contactos) con Operate(recurso="imagen", operación="generate", entrada={ ... }). La imagen del storyboard es una vista previa de los planos planeados, no un póster de producto independiente, una representación de producto de reemplazo, una imagen de portada o un fotograma clave del video final.
  3. user_review: Muestra el guion, las imágenes de vista previa del storyboard y las especificaciones explícitas del video juntos. Pide al usuario que confirme o revise todo el plan.
  4. production_prep: Después de la confirmación, decide si esto debe ser un solo clip ascendente de <=15s, una solicitud de video_sequence larga, o un ensamblaje manual de editor/proyecto. Solo usa un paquete de proyecto de video si el usuario pide explícitamente un flujo de trabajo de proyecto/paquete/editor, o la tarea ya está vinculada a un paquete existente.
  5. tts_if_needed: Si la tarea confirmada es un video de personaje parlante / 口播, completa el flujo de trabajo de TTS primero a continuación.
  6. video_generate: Solo después de la confirmación y de que cualquier audio TTS requerido esté completo, llama a Operate(recurso="video", operación="generate", entrada={ ... }).

Si el usuario aún no ha confirmado el guion, no generes el video.

Si el usuario aún no ha visto y aprobado las imágenes de vista previa del storyboard, no generes el video.

Si la tabla de tomas existe pero aún no se ha generado ninguna imagen de hoja de contactos del storyboard, la siguiente llamada a herramienta debe ser image.generate para la vista previa del storyboard, no video.generate, voice.speech, tts-director o cosyvoice-ssml.

La vista previa de la hoja de contactos del storyboard es obligatoria después de que se escriba el primer guion de toma. No es lo mismo que los fotogramas clave finales del video; es una prueba visual rápida de la secuencia de planos planeada para que el usuario pueda aprobar la dirección, composición, colocación del producto y continuidad antes de la generación del video.

Para videos promocionales de productos a partir de una imagen adjunta/de referencia:

  • La primera llamada a image.generate, si la hay, debe ser para una hoja de contactos del storyboard después de que existan el guion y la tabla de tomas.
  • El prompt del storyboard debe decir explícitamente que es una vista previa del storyboard de múltiples paneles para el video, y debe preservar la forma visible, el material, el color y los detalles distintivos del producto adjunto/de referencia.
  • No llames a image.generate solo para "analizar", "extraer", "mejorar" o recrear la referencia del producto.
  • No llames a video.generate hasta que el usuario confirme la dirección del storyboard.

Regla de Personaje Parlante de la Biblioteca de Activos

Cuando el usuario quiera un video de personaje parlante / 口播 / presentador / bienvenida de transmisión en vivo usando un personaje de la biblioteca de activos, la imagen del personaje es solo la referencia de identidad visual. No es la pista de voz.

Mantén estas tres entradas separadas:

  • voiceId: la identidad de voz clonada reutilizable almacenada en el activo del personaje. Este es el campo de voz principal para futuras llamadas TTS.
  • muestra de voz / audio de referencia: material fuente de respaldo para la clonación cuando no existe un voiceId listo. No sigas analizándolo o presentándolo una vez que se haya encontrado un voiceId listo.
  • activo de audio TTS generado: el guion hablado completo. Este es el único audio que debe impulsar un video de personaje parlante.

Usa este orden exacto:

  1. Guion y storyboard primero
    • Confirma el guion hablado final.
    • Confirma el storyboard / tabla de tomas.
    • La columna Sonido debe contener las líneas habladas reales, no etiquetas vagas como "explicación del personaje".
  2. Resuelve la voz del personaje
    • Lee el activo del personaje seleccionado antes de generar medios.
    • Si el activo tiene un voiceId / voice_id listo, trátalo como la voz resuelta y deja de inspeccionar las muestras de voz. Informa el voiceId resuelto, no el nombre del archivo de audio de referencia.
    • Si el activo tiene una muestra de voz pero no un voiceId listo, llama a Operate(recurso="voz", operación="clone", entrada={ ... }) primero, espera a que se complete, y usa el voiceId devuelto.
    • Si no hay un voiceId listo ni una muestra de voz utilizable, detente y pide al usuario que proporcione o elija una voz. No recurras a una voz genérica en silencio.
  3. Genera la pista de voz completa con TTS
    • Llama a Operate(recurso="voz", operación="speech", entrada={ ... }) con el guion hablado completo aprobado y el voiceId resuelto.
    • Prefiere un activo de audio completo para todo el segmento del personaje parlante a menos que el usuario quiera explícitamente clips separados.
    • Para narraciones expresivas, guiones largos, poesía, anuncios, o cualquier interpretación multi-emoción dentro de este flujo confirmado de humano digital / VideoRetalk, activa tts-director primero con Operate(recurso="habilidades", operación="invoke", entrada={ "name": "tts-director" }), luego usa su guía para dividir el guion aprobado en latidos semánticos y asignar controles de entrega apropiados para el modelo.
    • Si el modelo TTS seleccionado es CosyVoice, tts-director puede activar cosyvoice-ssml solo aquí, después de que el flujo de trabajo de video-director haya confirmado que este es un video de humano digital / VideoRetalk / personaje de biblioteca de activos y el guion más la voz del rol estén resueltos.
    • Añade controles de entrega comedidos cuando mejoren la interpretación aprobada: usa speed para el ritmo, pitch para el tono, emotion para el estado de ánimo, puntuación expresiva como ~, ?, !, ……, y marcadores de texto MiniMax como <#0.6#>, (risas), (suspiros) o (respiración) dentro de input solo donde el ritmo hablado los necesite.
    • No escribas instrucciones de control dentro del texto hablado. Por ejemplo, pasa "emotion":"feliz" y speed:1.08 en lugar de hacer que el personaje diga "habla con voz rápida y alegre".
    • Si la pista de voz aprobada necesita múltiples latidos emocionales, envía una llamada voice.speech con segments ordenados; el tiempo de ejecución de los medios generará cada segmento y fusionará el audio final. No hagas llamadas voice.speech repetidas y luego fusiones manualmente.
    • Espera hasta que el resultado TTS contenga una ruta de activo de audio utilizable, URL o ID de activo.
    • No empieces la generación de video mientras el trabajo TTS solo está en cola o ejecutándose.
  4. Genera video con referencia visual más audio generado
    • Usa la imagen del personaje seleccionado como referencia visual.
    • Usa el activo de audio TTS completo recién generado como drivingAudio.
    • Identifícalo en el preámbulo del prompt como audio de voz generado, por ejemplo Audio 1: voz Jamba TTS generada para sincronización de labios / ritmo de habla.
    • Luego llama a Operate(recurso="video", operación="generate", entrada={ ... }), normalmente en modo reference-guided.

Esto es obligatorio porque el modelo de video necesita una forma de onda de audio terminada alineada con el guion aprobado. Un voiceId de personaje no es audio. Una muestra de voz no es la línea hablada aprobada. El texto hablado dentro del prompt de video no es un sustituto del TTS.

Atajos prohibidos:

  • No llames a la generación de video para personaje 口播 solo con la imagen del personaje y un guion.
  • No pases voiceId, audio de muestra de voz o "material de timbre de voz" como drivingAudio.
  • No confíes en generateAudio para crear la voz del personaje para el trabajo de personaje parlante.
  • No describas el discurso previsto solo en el prompt de video y esperes que el modelo de video lo sintetice.
  • No dividas el TTS por fila de storyboard a menos que el usuario solicite clips de audio editables por separado o el video se vaya a ensamblar a partir de múltiples clips de habla independientes.

Forma recomendada de carga útil TTS:

{
  "voiceId": "voz_xxx",
  "segments": [
    {
      "input": "Apertura completa y confirmada para 口播.<#0.5#>",
      "speed": 0.98,
      "pitch": 0,
      "emotion": "calm"
    },
    {
      "input": "Pasando naturalmente al punto clave más impactante (risas).",
      "speed": 1.05,
      "pitch": 0,
      "emotion": "feliz"
    }
  ],
  "title": "Voz en off de bienvenida Jamba",
  "waitForCompletion": true
}

Forma recomendada de carga útil de video después de que TTS se complete:

{
  "generationMode": "reference-guided",
  "referenceImages": ["/ruta/absoluta/hacia/jamba.png"],
  "drivingAudio": "/ruta/absoluta/hacia/jamba-tts-generado.mp3",
  "drivingAudioLabel": "Voz Jamba TTS generada a partir del guion aprobado",
  "storyboardShots": [
    {
      "time": "0-3s",
      "picture": "Jamba mira a la cámara en la sala de transmisión y sonríe naturalmente.",
      "sound": "Bienvenidos al directo, hoy les traigo un producto súper práctico.",
      "shot": "Plano medio corto, encuadre estable del presentador."
    }
  ]
}

Regla del Paquete de Proyecto de Video

Un paquete de proyecto de video no es la ruta predeterminada.

Crea uno solo cuando:

  • el usuario pide explícitamente un 视频项目 / 视频工程 / 项目包
  • el usuario pide explícitamente continuar más tarde dentro del editor de video / banco de trabajo del proyecto
  • la tarea ya está vinculada a un paquete de proyecto de video existente

No crees uno solo porque la solicitud tiene múltiples tomas, contexto largo, riesgo de continuidad, necesidades de storyboard o posibles revisiones.

Cuando sea explícitamente necesario, créalo con:

  • Operate(recurso="video", operación="create", entrada={ "explicitProjectWorkflow": true, "title": "...", "duration": "...", "aspectRatio": "...", "mode": "..." })

La carpeta del proyecto reside en:

  • manuscripts/video/<nombre-del-proyecto>/

Debe usarse para mantener estos archivos juntos:

  • manifest.json
  • script.md
  • assets.json
  • editor.project.json
  • imágenes de referencia importadas / fotogramas clave / clips generados / salida final

Después de que se cree el paquete:

  • escribe el resumen del usuario y el guion aprobado de vuelta en la carpeta del proyecto de video
  • mantén los fotogramas clave, clips y salidas posteriores en el mismo paquete siempre que sea posible

De lo contrario, mantén la planificación en el chat, llama a video generate directamente y deja que la salida viva en la biblioteca de medios generada.

Reglas Estrictas

  • La generación de video está bloqueada a la ruta de video oficial configurada por la aplicación.
  • No elijas endpoints de video arbitrarios ni modelos de video de terceros.
  • Usa solo estos mapeos de modelo oficiales:
    • text-to-video -> wan2.7-t2v-video
    • reference-guided -> wan2.7-r2v-video
    • first-last-frame -> wan2.7-i2v-video
  • Trata las transiciones de primer/último fotograma como un subtipo de trabajo de imagen a video.
  • Un segmento de generación de video ascendente único no debe exceder 15 segundos.
  • Para un video final de más de 15 segundos, envía una solicitud video.generate con durationSeconds final o videoSegments explícito; la cola de medios generará segmentos de <=15s y concatenará un activo de video final.
  • No llames a video.generate repetidamente solo para evitar el límite de segmento ascendente de 15 segundos.
  • No omitas el paso de revisión del guion solo porque la solicitud suene obvia.
  • A menos que el usuario pida explícitamente una toma continua más larga, una sola toma debe durar normalmente 1-3 segundos.
  • Sin la aprobación explícita del usuario, ninguna toma debe exceder 5 segundos.

Selección de Modo

  • Usa text-to-video cuando el usuario solo proporcione texto y quiera una toma de video nueva.
  • Usa reference-guided cuando el usuario proporcione una o más imágenes de referencia y quiera que el video absorba elementos del sujeto, pistas de estilo, accesorios, motivos de escena o sugerencias de composición de esas imágenes.
  • Usa first-last-frame solo cuando dos imágenes tengan semántica explícita de inicio/fin, como "de A a B", "首帧/尾帧", "开头/结尾" o "estado inicial/estado final".
  • Si el usuario da dos imágenes pero son solo referencias de estilo, no uses first-last-frame; quédate con la semántica reference-guided.

Estrategia de Producción

  • 单视频模式:

    • Usa un clip de video generado.
    • Predeterminado cuando la solicitud es simple, la acción es corta y la idea completa cabe dentro de un clip coherente.
    • Un solo clip generado no debe exceder 15 segundos.
  • 长视频队列模式:

    • Úsalo para un video final generado por IA de más de 15 segundos.
    • Envía una solicitud video.generate con durationSeconds > 15; el tiempo de ejecución creará un trabajo de cola video_sequence, dividirá la generación en segmentos de <=15s, esperará cada segmento, concatenará los segmentos y devolverá un activo de video final.
    • Usa videoSegments explícito cuando el storyboard necesite control escena por escena, latido por latido, imagen de referencia, primer/último fotograma o audio guía.
    • Cada elemento videoSegments[] debe tener <=15 segundos y debe corresponder a un grupo coherente de filas de storyboard aprobadas.
    • Mantén waitForCompletion: true a menos que el usuario pida explícitamente ejecutar la generación larga en segundo plano.
  • 手动多视频工程模式:

    • Úsalo solo cuando el usuario pida explícitamente clips separados, un flujo de trabajo de proyecto/editor, ensamblaje de clips importados, postproducción manual o salidas editables por separado.
    • En la generación de video normal de chat/agente, no generes un clip a la vez y concatenes con ffmpeg; usa 长视频队列模式.
    • Cuando el ensamblaje manual sea explícitamente necesario, genera cada clip deliberadamente, luego concaténalos en el orden del storyboard después de que todos los clips tengan éxito.
  • Si la solicitud tiene múltiples tomas, requisitos de continuidad claros o un riesgo de deriva visual, haz una pregunta más después de mostrar la vista previa de la hoja de contactos:

    • si también se deben generar fotogramas clave de storyboard separados antes de la producción de video.
  • Si se generan fotogramas clave de storyboard separados, la generación de video posterior debe usar preferentemente modos basados en imágenes, y para segmentos con muchas transiciones debe preferir first-last-frame.

Regla de Primero el Storyboard

Cada tarea de video necesita una vista previa de hoja de contactos del storyboard después de la tabla del guion y antes de la confirmación del usuario.

[truncado para la traducción]

Skills relacionados