Ensamblaje y verificación de línea de tiempo MCP atómica (/assemble-timeline)
Opción A: Ejecución con FilmCraft MCP (servidor filmcraft MCP — Requiere FilmCraft v0.17.0+)
1. Verificación del entorno y del puente
- Ejecuta primero
python3 ./.agents/skills/assemble-timeline/scripts/check_filmcraft_env.pypara verificar que FilmCraft sea $ ge$v0.17.0, sincronizar automáticamentefilmcraft-cliconFilmCraft.appy detectar cualquier comando MCP nuevo añadido en00_Archive_Indexes/filmcraft_capabilities.json. - Asegúrate de que FilmCraft se esté ejecutando en modo puente con las cachés dirigidas a
~/Movies/Cache_And_Previews:mkdir -p ~/Movies/Cache_And_Previews && cd ~/Movies/Cache_And_Previews open -a FilmCraft --args --control 9876
2. Modo de ensamblaje visual en vivo (predeterminado y recomendado)
Ver cómo se ensambla la línea de tiempo en vivo en la GUI abierta de FilmCraft añade menos de 1,5 segundos al tiempo total de ejecución del socket (las llamadas tardan $< 20\text{ ms}$ sobre el puente local) y proporciona verificación visual instantánea:
- Abrir lienzo vacío en el segundo 0:
Crea y abre inmediatamente el shell
.fcprojlimpio en FilmCraft mediantecommand_run({"id": "file.open", "params": {"path": "<ruta_fcproj>"}}) osequence.new. El usuario ve su secuencia vacía 4K aparecer en el segundo 0. - Ingesta de medios en flujo:
Llama a
media_importcon las rutas absolutas de todos los cortes de vídeo seleccionados, fotos, material de archivo y las pistas elegidas de03_Audio_Library/01_Curated_BGM/(A2). - Flujo escena por escena en vivo:
A medida que se procesa cada escena de la tabla de cortes aprobada, se transmiten llamadas
command_batchen vivo a través del puente 9876:playhead.set: Mueve el cabezal de reproducción al timecode de inicio de la escena.source.overwrite/timeline.insertClip: Coloca el clip visual enV1(oV2para superposiciones/PIP) y el audio síncrono enA1.motion.apply: Inyecta keyframes de escala y paneo Ken BurnsEaseIn/EaseOuten las imágenes fijas (100% $ rightarrow$ 108%, o 134% $ rightarrow$ 142% en fotos 4:3 para evitar el recorte de pillarbox).audio.append: Coloca la música de fondoA2con fundido de entrada de 1,5 s y aumentos.voiceover.insert: Coloca los segmentos de voz en offA4en la línea de tiempo en vivo a medida que cada señal de audio termina de sintetizarse.
- Pulido de emisión:
- Ley de respeto al diálogo en vivo en el mismo idioma: Nunca coloques voz en off
A4en el idioma $L$ sobre el diálogo de cámara en vivoA1hablado en ese mismo idioma $L(ENVO respeta el diálogo en vivoEN;RUVO respeta el diálogo en vivoRU;UAVO respeta el diálogo en vivoUA). Cuando la voz en offA4traduzca un clip que contenga diálogo de cámara en idioma extranjero (edition_lang != clip_dialog_lang), atenúaA1en-12 dB` durante las señales de voz en off activas. - Ley de velocidad de habla natural
1.00x, sincronía labial1:1 V1 == A1e introducción musical de apertura: Nunca apliquesatempo > 1.0ni eliminación interna de pausas (stop_periods=-1) al discurso de cámara en vivo (A1) ni a la voz en off sintetizada (A4). Siempre dimensiona los cortes visuales de habla (V1) para que se ajusten a la oración hablada completa a1.00x(src_in,dur) de modo queV1yA1permanezcan bloqueados en sincronía 1:1 de fotograma y muestra (cortados medianteatrim=start=...:end=...,asetpts=PTS-STARTPTScondynaudnorm=f=150:g=7:p=0.90aplicado una vez después deamix) y nunca se desborden hacia escenas no relacionadas. Siempre comienza cada línea de tiempo y.mp4renderizado con una introducción musical de1.5s–2.0santes de que comience la primera señal de voz en off. - Atenuación de música calibrada por RMS (
-28.5 dBde media bajo el habla): Mide elmean_volumede cada pista de músicaA2medianteffmpeg volumedetect(compute_bgm_ducked_gain_db) y establecegain_db = -28.5 - raw_mean_dbpara que la música atenuada se sitúe en una media de-28.5 dB— Joh 12.5 dB más silenciosa que la voz en off y el diálogo en vivo con media normalizada de-16.0 dB, incluso en pistas animadas masterizadas calientes. - Etiqueta la voz en off
A4y el diálogoA1comoDialogue(clarity.eqPreset: "Balanced Voice"), y ejecutaessentialSound.generateDucking(reduceDb: -6.0,fadeS: 0.45) en la músicaA2. - Aplica la transición nativa
dip_to_blackde 1,5 s a 2,0 s al clip visual de cierre. - Fundido de salida de audio sincronizado obligatorio: La salida de audio maestra (
[fullout]) y la música enA2DEBEN ejecutar un fundido de salida sincronizado de2.0s–2.5sen media onda sinusoidal (afade=t=out:st=<DURACIÓN_TOTAL - DUR_FUNDIDO>:d=<DUR_FUNDIDO>:curve=hsin) para que todo el audio (música, ruido de cámara, colas de efectos de sonido) alcance el silencio completo (-infinity dB) en el fotograma final o antes. En.fcproj, la pistaA2DEBE llevar una transición de fundido de audioEndAtCut(from: Some(clip.id), to: None, align: "EndAtCut"). El sonido NUNCA debe cortarse abruptamente. - Escribe pistas de subtítulos multilingües en
caption_tracks(C1) conenabled: false(burnCaptions: falsepor defecto).
- Ley de respeto al diálogo en vivo en el mismo idioma: Nunca coloques voz en off
3. Respaldo de procesamiento por lotes sin interfaz gráfica (assemble_engine.py)
Si la GUI de FilmCraft no se está ejecutando o el modo puente está desconectado, ensambla automáticamente el .fcproj directamente mediante assemble_engine.py en $< 1$ segundo y renderiza el máster 4K MP4 mediante filmcraft-cli.
- Regla de higiene del repositorio: Mantén
.agents/skills/assemble-timeline/scripts/estrictamente reservado para motores universales e independientes del proyecto (assemble_engine.py,gpx_widgets.py,generate_voiceover.py,check_filmcraft_env.py). Si alguna vez se crea un script de ensamblaje personalizado o específico para un proyecto en particular, guárdalo siempre dentro de la carpeta de catálogo ignorada por git de ese proyecto (04_Project_Catalog/YEAR/<nombre_del_proyecto>/) y nunca dentro de.agents/skills/.
4. Verificación visual y renderizado del máster
- Llama a
render_frameen tres marcas de tiempo (introducción del acto 1, punto medio, epílogo) para confirmar el encuadre. - Renderiza el máster 4K MP4 en
~/Movies/Exports/YEAR/<nombre_del_proyecto>.mp4. - Si se solicitaron ediciones multilingües (
option_b), reempaqueta con las pistas localizadas_UA.mp4y_RU.mp4.
Opción B: Ejecución con DaVinci Resolve Studio MCP (davinci-resolve)
- Crea una nueva línea de tiempo (
1920x1080o3840x2160,29.97fps,DaVinci YRGB Color Managed Rec.709). - Importa el material seleccionado en un contenedor
Selectsmediantemedia_pool, añade clips aV1/V2/A1y música aA2mediantetimeline_edit, aplica transicionesCross Dissolvemediantetransitions, establece keyframes de zoom Ken Burns mediantekeyframesy configura la atenuación de audio medianteaudio/inspector. - Llama a
export_stillen tres marcas de tiempo para verificar visualmente el corte, exporta una copia de seguridad.drp/.drta04_Project_Catalog/YEAR/<nombre_del_proyecto>/y encola el renderizado final.mp4en~/Movies/Exports/YEAR/medianterender.