¿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:
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.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) conOperate(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.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.production_prep: Después de la confirmación, decide si esto debe ser un solo clip ascendente de<=15s, una solicitud devideo_sequencelarga, 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.tts_if_needed: Si la tarea confirmada es un video de personaje parlante / 口播, completa el flujo de trabajo de TTS primero a continuación.video_generate: Solo después de la confirmación y de que cualquier audio TTS requerido esté completo, llama aOperate(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.generatesolo para "analizar", "extraer", "mejorar" o recrear la referencia del producto. - No llames a
video.generatehasta 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
voiceIdlisto. No sigas analizándolo o presentándolo una vez que se haya encontrado unvoiceIdlisto. - 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:
- Guion y storyboard primero
- Confirma el guion hablado final.
- Confirma el storyboard / tabla de tomas.
- La columna
Sonidodebe contener las líneas habladas reales, no etiquetas vagas como "explicación del personaje".
- Resuelve la voz del personaje
- Lee el activo del personaje seleccionado antes de generar medios.
- Si el activo tiene un
voiceId/voice_idlisto, trátalo como la voz resuelta y deja de inspeccionar las muestras de voz. Informa elvoiceIdresuelto, no el nombre del archivo de audio de referencia. - Si el activo tiene una muestra de voz pero no un
voiceIdlisto, llama aOperate(recurso="voz", operación="clone", entrada={ ... })primero, espera a que se complete, y usa elvoiceIddevuelto. - Si no hay un
voiceIdlisto 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.
- Genera la pista de voz completa con TTS
- Llama a
Operate(recurso="voz", operación="speech", entrada={ ... })con el guion hablado completo aprobado y elvoiceIdresuelto. - 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-directorprimero conOperate(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-directorpuede activarcosyvoice-ssmlsolo 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
speedpara el ritmo,pitchpara el tono,emotionpara el estado de ánimo, puntuación expresiva como~,?,!,……, y marcadores de texto MiniMax como<#0.6#>,(risas),(suspiros)o(respiración)dentro deinputsolo donde el ritmo hablado los necesite. - No escribas instrucciones de control dentro del texto hablado. Por ejemplo, pasa
"emotion":"feliz"yspeed:1.08en 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.speechconsegmentsordenados; el tiempo de ejecución de los medios generará cada segmento y fusionará el audio final. No hagas llamadasvoice.speechrepetidas 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.
- Llama a
- 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 modoreference-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" comodrivingAudio. - No confíes en
generateAudiopara 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.jsonscript.mdassets.jsoneditor.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-videoreference-guided->wan2.7-r2v-videofirst-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
15segundos. - Para un video final de más de
15segundos, envía una solicitudvideo.generatecondurationSecondsfinal ovideoSegmentsexplícito; la cola de medios generará segmentos de<=15sy concatenará un activo de video final. - No llames a
video.generaterepetidamente solo para evitar el límite de segmento ascendente de15segundos. - 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-3segundos. - Sin la aprobación explícita del usuario, ninguna toma debe exceder
5segundos.
Selección de Modo
- Usa
text-to-videocuando el usuario solo proporcione texto y quiera una toma de video nueva. - Usa
reference-guidedcuando 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-framesolo 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ánticareference-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
15segundos.
-
长视频队列模式:- Úsalo para un video final generado por IA de más de
15segundos. - Envía una solicitud
video.generatecondurationSeconds > 15; el tiempo de ejecución creará un trabajo de colavideo_sequence, dividirá la generación en segmentos de<=15s, esperará cada segmento, concatenará los segmentos y devolverá un activo de video final. - Usa
videoSegmentsexplí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<=15segundos y debe corresponder a un grupo coherente de filas de storyboard aprobadas. - Mantén
waitForCompletion: truea menos que el usuario pida explícitamente ejecutar la generación larga en segundo plano.
- Úsalo para un video final generado por IA de más de
-
手动多视频工程模式:- Ú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]