name: vm-dung description: Ensambla las imágenes para un proyecto VideoMotion que ya tiene voz y segmentación: descarga las fuentes del estilo, escribe colores, asigna cada escena a un agente vm-canh que se ejecuta en paralelo, ensambla, verifica técnicamente, renderiza, combina audio y subtítulos. Se usa en el paso 7 de /videomotion, o cuando el usuario dice 'reensamblar escena', 'render', 'exportar video', 'corregir imagen de la escena X'.
Ensamblaje y exportación de video
Las variables VV, PY son como en la skill videomotion. HF es npx -y [email protected]. La entrada está en <du-an>: storyboard.json, words.json, timeline.json, mix.wav.
1. Preparación según el estilo
- Fuente de la etiqueta style (línea Google Fonts en la etiqueta):
"$PY" "$VV/tools/fonts.py" <du-an> "VT323" "Be Vietnam Pro:400,700"producefonts/yfonts.css. theme.css: variables:rootde la paleta de colores de la etiqueta:--bg,--ink,--accent, color secundario,--cap-bg,--cap-ink(subtítulos con contraste 4,5:1).- Si el estilo tiene un fondo continuo en todo el video (mapa, papel, pizarra, cuadrícula): escribir
compositions/_nen.html(id_nen), las escenas mantienen el fondo transparente. "$PY" "$VV/tools/assemble.py" <du-an>: creaindex.html, copia las fuentes, crea archivos placeholder para las escenas que aún no existen."$PY" "$VV/tools/packets.py" <du-an>: empaqueta las tareaschecks/packets/<id>.mdpara cada escena.
2. Asignación paralela de escenas
Envía todas en un solo mensaje, cada escena a un agente, tipo de agente videomotion:vm-canh (declarado con model: sonnet, effort: medium: siempre es la Sonnet más reciente). Instrucción breve:
Ensambla la escena
<id>. Paquete de tareas:<du-an>/checks/packets/<id>.md. Plantilla:$VV/templates/scene.html. Escribe el archivo correcto<du-an>/compositions/<id>.html.
Si no hay agente vm-canh disponible (skill instalada sin plugin u otra herramienta): usar un agente genérico con model: "sonnet", effort: "medium", indicándole que lea primero $VV/agents/vm-canh.md. Si la herramienta no soporta agentes hijos, ensamblar secuencialmente según ese archivo.
Si hay menos de 3 escenas, ensamblarlas directamente sin delegar.
3. Ensamblaje y verificación técnica
"$PY" "$VV/tools/assemble.py" <du-an>
cd <du-an> && npx -y [email protected] check
Corregir hasta que aparezca Check passed, 0 errores (si hay errores en el archivo de una escena, corregir ese archivo). La advertencia timeline_track_too_dense de los subtítulos es normal. No se necesita hoja de aprobación ni revisor; si el usuario quiere una vista previa, usar npx -y [email protected] preview --background.
4. Renderizado y combinación de audio
"$PY" "$VV/tools/assemble.py" <du-an> --no-audio
cd <du-an> && npx -y [email protected] render --output renders/raw.mp4 > renders/render.log 2>&1
"$PY" "$VV/tools/audio/mix.py" srt <du-an>
"$PY" "$VV/tools/audio/mix.py" final <du-an> --video <du-an>/renders/raw.mp4 --name <slug>-<ddmmyyyy>
"$PY" "$VV/tools/assemble.py" <du-an>
El render se ejecuta en segundo plano (aproximadamente 2 segundos de máquina por cada segundo de video). --no-audio es obligatorio: mix.py final combina el mix.wav original sin pérdida. El último comando assemble devuelve el index.html con audio para vista previa.
5. Verificación final
ffprobe renders/<nombre>.mp4: comprobar dimensiones correctas, flujo de audio presente, duración igual al total en words.json. Extraer un fotograma del centro del video con ffmpeg y revisarlo visualmente. Entregar renders/<nombre>.mp4 y phude.srt.