FilmCraft — operación del agente
FilmCraft es un editor de video nativo en Rust (clase Premiere Pro) cuya interfaz de agente está integrada: cada acción es un comando con un id. Menús, atajos, paneles, gestos de línea de tiempo, la CLI, el canal de control, el servidor MCP y la GUI impulsan un mismo motor. Verificado contra 0.10.0–0.13.0 en Windows y Linux.
Rutas de máquina y entorno
| Plataforma | Binario | CLI | Directorio de datos por defecto |
|---|---|---|---|
| Windows | C:\Program Files\FilmCraft\filmcraft.exe | C:\Program Files\FilmCraft\filmcraft-cli.exe | %LOCALAPPDATA%\FilmCraft |
| Linux | /usr/bin/filmcraft | /usr/bin/filmcraft-cli | ~/.local/share/filmcraft |
| macOS | /Applications/FilmCraft.app/Contents/MacOS/filmcraft | filmcraft-cli (en ~/.local/bin o PATH) | ~/Library/Application Support/filmcraft |
- Ubicación del log:
<data-dir>/Logs/filmcraft.log - Puerto de control: solo loopback (
--control <port>oFILMCRAFT_CONTROL_PORT, ej.9876o7991o50051) - Comandos: 710 en 42 namespaces
- Efectos: 130 efectos de video, 112 transiciones de video, 3 transiciones de audio
Modelo mental
- Un proyecto (
.fcproj, JSON) contiene bins e ítems:Movie,Audio,Image,Sequence,Multi-Camera Source Sequence.project_inspectdevuelve el árbol,activeSequencey la bandera dirty. Una secuencia está activa; los comandos actúan sobre ella. - Una secuencia tiene arrays de pistas
video[]yaudio[], cada una{id, name, items[], transitions[], muted, locked, ...}. Un clip es{clip, item, name, start, duration, startFrame, durationFrames, sourceIn, sourceOut, speed, reverse, enabled, link, gainDb, effects[]}— todos los tiempos en ticks. - Colocar una película crea dos clips enlazados (video + audio) con diferentes
ids y
linkapuntando uno al otro. Seleccionar uno selecciona ambos por defecto. - El tiempo es en ticks enteros, 254,016,000,000 por segundo (también 48000×5292).
secondsyframese ajustan a la cuadrícula de fotogramas;frameytimecode(ej."00:00:02:12", o;para drop-frame) mapean exactamente. Prefiereframecuando necesites un corte exacto. - Un comando es
{"id": "timeline.razor", "params": {...}}.command_listencuentra ids y documentación de parámetros;command_runejecuta uno (deshacible);command_batchejecuta varios. Los tipos de parámetros inválidos y los comandos desconocidos fallan; los nombres de parámetros desconocidos se ignoran silenciosamente (ver Trampas). - Verifica leyendo de vuelta (
sequence_inspect,project_inspect,captions.list,media.status,jobs.list) o renderizando (render_frame,file.exportFrame). Un resultadonullsignifica "se ejecutó", no "hizo lo que querías".
Dos modos de conexión
| Modo | Inicio | Usar para |
|---|---|---|
| Headless | filmcraft-cli mcp (--demo, --project p.fcproj, --data-dir d) | sin ventana, builds batch, exportaciones, scripts |
| Puente de app | filmcraft --control 50051 + filmcraft-cli mcp --bridge 127.0.0.1:50051 | la ventana real: estado de UI, screenshots, clics, teclas, arrastres, comandos solo-GUI |
Iniciando FilmCraft a petición del usuario ("起動して" / "start FilmCraft")
Cuando el usuario pida iniciar o lanzar FilmCraft (「FilmCraftを起動して」「立ち上げて」「開いて」「start FilmCraft»):
- Verificar si ya está en ejecución:
- Windows:
Get-Process filmcraft -ErrorAction SilentlyContinue - Linux / macOS:
pgrep filmcraft - Si está en ejecución, verificar si el puerto de control responde (
filmcraft-cli --bridge 127.0.0.1:50051 inspect). - Si está en ejecución sin un puerto de control, informar al usuario: "FilmCraft se está ejecutando actualmente sin un puerto de control. Por favor, guarda tu trabajo y reinícialo, o permíteme cerrarlo y reiniciarlo con
--control 50051."
- Windows:
- Iniciar con
--control <port>(por defecto:50051) y unFILMCRAFT_CONTROL_TOKENde 64 caracteres:- Windows (PowerShell) — usar
scripts/launch.ps1para asegurar una ventana de escritorio visible enWinSta0\Default:
(Esto establece/persiste automáticamentepowershell -File scripts/launch.ps1 -Port 50051FILMCRAFT_CONTROL_TOKEN, configura el puerto, y lanza una tarea interactiva para que la GUI sea visible para el usuario conectado, no oculta en una sesión de fondo). - Linux:
./scripts/launch.sh 50051 - macOS:
./scripts/launch.sh 50051
- Windows (PowerShell) — usar
- Verificar la conexión:
- Esperar 1–3 segundos, luego ejecutar
filmcraft-cli --bridge 127.0.0.1:50051 inspect. - Una vez que responda, informar que FilmCraft está activo, escuchando en el puerto 50051, y listo para ediciones en vivo de la línea de tiempo y comandos colaborativos.
- Esperar 1–3 segundos, luego ejecutar
Las 17 herramientas MCP
| Herramienta | Propósito |
|---|---|
command_list | cada comando (filter, enabled_only) |
command_run | ejecuta uno {id, params} |
command_batch | ejecuta {steps:[{id,params}], stop_on_error} → {completed, failed, results} |
doc_inspect | árbol del proyecto + secuencia activa en una llamada |
project_inspect | árbol, ítems, secuencia activa, dirty |
sequence_inspect | secuencia activa: ajustes, pistas, clips, transiciones, marcadores |
media_import | importa archivos por ruta absoluta (paths, bin, image_sequence) |
render_frame | PNG en seconds (o playhead), max_side |
render_preview | igual que render_frame (puente: monitor del Programa) |
ui_inspect | estado de ventana/UI (herramienta, espacio de trabajo, selección, diálogo, reproducción, número de elementos) |
ui_elements | elementos en pantalla con id, label y rect (prefix) |
ui_click | clic por id o x,y (button, count, modifiers) |
ui_drag | presionar–mover–soltar entre puntos o ids de elementos (steps) |
ui_key | tecla o atajo (Space, Cmd+Z, Shift+Delete) |
ui_type | escribir en el campo enfocado |
ui_screenshot | PNG de la ventana o de un panel |
ui_control | cualquier método de control: ui.set, ui.menu.list, ui.playback, … |
Recursos: filmcraft://document (48 KB JSON: proyecto + secuencia) y
filmcraft://commands (192 KB catálogo). Sin prompts.
Flujo de trabajo estándar
- Sondear.
project_inspect/doc_inspect; headless comienza vacío a menos que se use--demoo--project.ui_inspectprimero en modo puente. - Construir.
file.newProject→file.import(rutas absolutas) ofile.importDemoFootage→file.newSequence→timeline.place. - Cortar.
playhead.set+timeline.razor,timeline.trim,timeline.slip,timeline.move,edit.clear/edit.rippleDelete. - Estilizar.
effects.apply+effects.setParam;sequence.applyVideoTransition;lumetri.applyPreset;graphics.newText;markers.add;captions.add. - Verificar. Leer
sequence_inspect/captions.list;render_frameen un momento revelador y mirar el PNG (esto detecta clips incorrectos, fotogramas negros y transiciones faltantes que ninguna lectura de vuelta muestra). - Exportar.
file.exportMediaconwait:true(comprobarofflineMediay el archivo escrito);file.exportInterchangepara ida y vuelta con NLE. - Guardar.
file.saveAs(¿crea directorios? no — el padre debe existir); luego releerproject_inspect.dirty(false después de guardar).
Encontrando comandos
command_list {filter:"razor"} coincide con id, etiqueta, menú y parámetros. filmcraft-cli commands razor, describe <id> y filmcraft-cli inspect hacen lo mismo desde una
shell. Los 701 ids con su documentación de parámetros están en references/commands.md;
los JSON paso a paso verificados están en references/recipes.md.
Empieza con: file.newProject, file.import, file.newSequence,
timeline.place, timeline.razor, timeline.trim, timeline.slip,
timeline.move, timeline.select, edit.clear, edit.rippleDelete,
edit.undo, effects.apply, effects.setParam,
sequence.applyVideoTransition, sequence.setTransition, markers.add,
captions.newTrack, captions.add, graphics.newText, file.exportMedia,
file.exportInterchange, file.exportFrame, file.saveAs.
Trampas que cuestan tiempo
- Los parámetros de comandos son permisivos — las claves desconocidas y algunos tipos incorrectos se
descartan silenciosamente.
timeline.trim {seconds:-1}devuelve{"delta":0}(la clave esdelta);timeline.place {seconds:"2"}coloca en 0;fps:"fast"retrocede a 23.976. Algunos comandos sí validan (graphics.set,markers.add), así que nunca confíes en un error para detectar un parámetro malo. Lee la documentación del parámetro, luego lee el estado de vuelta. file.newSequencecambia la secuencia activa y devuelve{sequence: id}.sequence.openrequiere{item: id}— pasarsequenceo un id de clip da error. Después de cualquier open/new, vuelve a leersequence_inspect.- Las transiciones no están en el clip. Viven en
sequence_inspect.video[i].transitions[]como{id, effect, from, to, start, duration, align, reverse, params}.sequence.removeTransition {transitions:[id]};sequence.setTransitionedita duración/align/params. - Los subtítulos no están en
sequence_inspect. Usacaptions.list; las señales llevanid, start, end, text.captions.newTrackretrocede silenciosamente aSubtitlepara cualquier string de formato desconocido. - Nunca pasar un directorio a
file.exportMedia. Se cuelga indefinidamente (reproducido dos veces, >3 min, sin salida). Usa una ruta de archivo completa. - El formato prevalece sobre la extensión.
format:"gif"conout.mp4escribeout.mp4.gif; ProRes conout.mp4escribeout.mp4.mov. La ruta del resultado es la autorizada. timeline.placecondurationmayor que el origen mantiene el último fotograma durante el resto del clip, sin advertencia. Recorta teniendo en cuenta el material.range:"inOut"sin marcas exporta toda la secuencia, silenciosamente.range:"custom"+startSeconds/endSecondses el sub-rango fiable.jobs.listes un comando, no una herramienta.command_run {id:"jobs.list"};jobs.cancel {job}elimina el archivo parcial. Las exportaciones conwait:falsedevuelven{job, path, poll, cancel}.- El metraje de demostración es sintético. Las exportaciones de intercambio
(FCPXML/AAF/OMF) de material demo pierden clips; con material real en disco hacen ida y vuelta
(ver
references/formats-and-roundtrip.md). edit.clear(Backspace) deja un hueco;edit.rippleDeletelo cierra.sequence.lift/extractnecesitan marcas de entrada/salida en la secuencia, no una selección.lumetri.applyPresetañade un nuevo efecto Lumetri cada vez en lugar de reemplazar el look anterior. Elimina el efecto antiguo o establece los parámetros directamente.- Los comandos solo-GUI son invisibles para
command_list:window.workspace. {editing,assembly,color,effects,audio},window.workspace.reset,window.toggleFullScreen,app.about. Solo existen en el puente. - La exportación HEVC no está disponible aquí ("no encoder registered"). H.264, ProRes, DNxHR, MJPEG, MXF, secuencias de imágenes y audio funcionan.
prefs.seten una sesión headless tiene ámbito de sesión — no persistió entre dos sesiones--data-dir. Usa la GUI para preferencias duraderas.- Los argumentos de la herramienta MCP son estrictos (clave desconocida → JSON-RPC
-32602; tipo incorrecto →isErrorcon un mensaje de deserialización), perocommand_run.paramsse pasa sin modificaciones.
Mapa de referencias
| Archivo | Contenido |
|---|---|
references/recipes.md | JSON verificado para construir, cortar, efectos, color, subtítulos, gráficos, proxies, multicámara, TTS, exportación, GUI |
references/commands.md | los 701 comandos, agrupados por namespace, con documentación de parámetros |
references/mcp-and-control.md | Detalles MCP, formas de error, recursos, métodos de control, comandos solo-GUI |
references/cli.md | subcomandos de filmcraft-cli, flags, códigos de salida, medios offline, trabajos headless |
references/formats-and-roundtrip.md | matriz de exportación + validación independiente, ida y vuelta de intercambio |
references/bugs-and-workarounds.md | cada defecto reproducido con una reproducción mínima |
references/maintenance.md | re-verificar la versión, volcar comandos, refrescar este skill |
scripts/probe.sh | handshake MCP + conteo de herramientas + versión |
scripts/dump-commands.sh | regenerar el catálogo de comandos |
scripts/smoke-test.sh | construir → renderizar → exportar → validación independiente |
Comunidad: https://discord.gg/artcraft · https://getartcraft.com/apps/filmcraft · https://github.com/storytold/filmcraft.