FilmCraft — opération agent
FilmCraft est un éditeur vidéo natif Rust (classe Premiere Pro) dont l'interface agent est intégrée : chaque action est une commande avec un identifiant. Menus, raccourcis, panneaux, gestes de timeline, la CLI, le canal de contrôle, le serveur MCP et l'interface graphique pilote un même moteur. Validé sur 0.10.0–0.13.0 sous Windows et Linux.
Chemins machine et environnement
| Plateforme | Binaire | CLI | Répertoire de données par défaut |
|---|---|---|---|
| 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 (dans ~/.local/bin ou PATH) | ~/Library/Application Support/filmcraft |
- Emplacement des logs :
<data-dir>/Logs/filmcraft.log - Port de contrôle : loopback uniquement (
--control <port>ouFILMCRAFT_CONTROL_PORT, par ex.9876ou7991ou50051) - Commandes : 710 dans 42 espaces de noms
- Effets : 130 effets vidéo, 112 transitions vidéo, 3 transitions audio
Modèle mental
- Un projet (
.fcproj, JSON) contient des bacs et des éléments :Movie,Audio,Image,Sequence,Multi-Camera Source Sequence.project_inspectrenvoie l'arborescence,activeSequenceet le drapeau dirty. Une séquence est active ; les commandes agissent sur elle. - Une séquence a des tableaux de pistes
video[]etaudio[], chacun{id, name, items[], transitions[], muted, locked, ...}. Un clip est{clip, item, name, start, duration, startFrame, durationFrames, sourceIn, sourceOut, speed, reverse, enabled, link, gainDb, effects[]}— tous les temps en ticks. - Placer un film crée deux clips liés (vidéo + audio) avec des identifiants
différents et
linkpointant l'un vers l'autre. Sélectionner l'un sélectionne les deux par défaut. - Le temps est en ticks entiers, 254 016 000 000 par seconde (soit 48000×5292).
secondsetframesont ajustés à la grille d'images ;frameettimecode(par ex."00:00:02:12", ou;pour drop-frame) correspondent exactement. Préférezframelorsque vous avez besoin d'une coupe précise. - Une commande est
{"id": "timeline.razor", "params": {...}}.command_listtrouve les identifiants et la documentation des paramètres ;command_runen exécute une (annulable) ;command_batchen exécute plusieurs. Les types de paramètres invalides et les commandes inconnues échouent ; les noms de paramètres inconnus sont ignorés silencieusement (voir Pièges). - Vérifiez en relisant (
sequence_inspect,project_inspect,captions.list,media.status,jobs.list) ou en rendant (render_frame,file.exportFrame). Un résultatnullsignifie « exécuté », pas « fait ce que vous vouliez ».
Deux modes de connexion
| Mode | Démarrage | Utilisation pour |
|---|---|---|
| Headless | filmcraft-cli mcp (--demo, --project p.fcproj, --data-dir d) | pas de fenêtre, constructions par lots, exports, scripts |
| Pont d'application | filmcraft --control 50051 + filmcraft-cli mcp --bridge 127.0.0.1:50051 | la vraie fenêtre : état de l'interface, captures d'écran, clics, touches, glissés, commandes GUI uniquement |
Lancer FilmCraft à la demande de l'utilisateur (「起動して」 / « lance FilmCraft »)
Quand l'utilisateur demande de démarrer ou lancer FilmCraft (「FilmCraftを起動して」「立ち上げて」「開いて」「start FilmCraft」) :
- Vérifier s'il est déjà en cours d'exécution :
- Windows :
Get-Process filmcraft -ErrorAction SilentlyContinue - Linux / macOS :
pgrep filmcraft - S'il tourne, vérifier si le port de contrôle répond (
filmcraft-cli --bridge 127.0.0.1:50051 inspect). - S'il tourne sans port de contrôle, informer l'utilisateur : « FilmCraft est actuellement en cours d'exécution sans port de contrôle. Veuillez enregistrer votre travail et le redémarrer, ou autorisez-moi à le fermer et le relancer avec
--control 50051. »
- Windows :
- Lancer avec
--control <port>(par défaut :50051) et unFILMCRAFT_CONTROL_TOKENde 64 caractères :- Windows (PowerShell) — utiliser
scripts/launch.ps1pour garantir une fenêtre de bureau visible surWinSta0\Default:
(Cela définit/persiste automatiquementpowershell -File scripts/launch.ps1 -Port 50051FILMCRAFT_CONTROL_TOKEN, configure le port et lance une tâche interactive pour que l'interface soit visible par l'utilisateur connecté plutôt que cachée dans une session d'arrière-plan). - Linux :
./scripts/launch.sh 50051 - macOS :
./scripts/launch.sh 50051
- Windows (PowerShell) — utiliser
- Vérifier la connexion :
- Attendre 1 à 3 secondes, puis exécuter
filmcraft-cli --bridge 127.0.0.1:50051 inspect. - Une fois qu'il répond, signaler que FilmCraft est actif, écoute sur le port 50051, et prêt pour les modifications en direct de la timeline et les commandes collaboratives.
- Attendre 1 à 3 secondes, puis exécuter
Les 17 outils MCP
| Outil | Objectif |
|---|---|
command_list | chaque commande (filter, enabled_only) |
command_run | exécuter une {id, params} |
command_batch | exécuter {steps:[{id,params}], stop_on_error} → {completed, failed, results} |
doc_inspect | arborescence du projet + séquence active en un appel |
project_inspect | arborescence, éléments, séquence active, dirty |
sequence_inspect | séquence active : paramètres, pistes, clips, transitions, marqueurs |
media_import | importer des fichiers par chemin absolu (paths, bin, image_sequence) |
render_frame | PNG à seconds (ou tête de lecture), max_side |
render_preview | identique à render_frame (pont : moniteur Programme) |
ui_inspect | état de la fenêtre/interface (outil, espace de travail, sélection, dialogue, lecture, nombre d'éléments) |
ui_elements | éléments à l'écran avec identifiant, libellé et rectangle (prefix) |
ui_click | cliquer par id ou x,y (button, count, modifiers) |
ui_drag | appuyer–déplacer–relâcher entre points ou identifiants d'éléments (steps) |
ui_key | touche ou raccourci (Space, Cmd+Z, Shift+Delete) |
ui_type | taper dans le champ focalisé |
ui_screenshot | PNG de la fenêtre ou d'un panel |
ui_control | toute méthode de contrôle : ui.set, ui.menu.list, ui.playback, … |
Ressources : filmcraft://document (JSON 48 Ko : projet + séquence) et
filmcraft://commands (catalogue de 192 Ko). Pas de prompts.
Flux de travail standard
- Sonder.
project_inspect/doc_inspect; headless démarre vide sauf--demoou--project.ui_inspecten premier en mode pont. - Construire.
file.newProject→file.import(chemins absolus) oufile.importDemoFootage→file.newSequence→timeline.place. - Couper.
playhead.set+timeline.razor,timeline.trim,timeline.slip,timeline.move,edit.clear/edit.rippleDelete. - Styliser.
effects.apply+effects.setParam;sequence.applyVideoTransition;lumetri.applyPreset;graphics.newText;markers.add;captions.add. - Vérifier. Lire
sequence_inspect/captions.list;render_frameà un instant significatif et regarder le PNG (cela détecte les mauvais clips, les images noires et les transitions manquantes qu'aucune relecture ne montre). - Exporter.
file.exportMediaavecwait:true(vérifierofflineMediaet le fichier écrit) ;file.exportInterchangepour les allers-retours NLE. - Enregistrer.
file.saveAs(crée les répertoires ? non — le parent doit exister) ; puis relireproject_inspect.dirty(false après enregistrement).
Trouver les commandes
command_list {filter:"razor"} correspond à l'identifiant, au libellé, au menu et aux paramètres. filmcraft-cli commands razor, describe <id> et filmcraft-cli inspect font de même depuis un
shell. Les 701 identifiants avec leur documentation de paramètres sont dans references/commands.md ;
le JSON vérifié étape par étape est dans references/recipes.md.
Commencez par : 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.
Pièges qui font perdre du temps
- Les paramètres de commande sont tolérants — les clés inconnues et certains types erronés sont
silencieusement ignorés.
timeline.trim {seconds:-1}renvoie{"delta":0}(la clé estdelta) ;timeline.place {seconds:"2"}place à 0 ;fps:"fast"revient à 23.976. Certaines commandes valident (graphics.set,markers.add), donc ne comptez jamais sur une erreur pour détecter un mauvais paramètre. Lisez la doc du paramètre, puis relisez l'état. file.newSequencebascule la séquence active et renvoie{sequence: id}.sequence.openattend{item: id}— passersequenceou un identifiant de clip produit une erreur. Après toute ouverture/création, relisezsequence_inspect.- Les transitions ne sont pas sur le clip. Elles se trouvent dans
sequence_inspect.video[i].transitions[]sous la forme{id, effect, from, to, start, duration, align, reverse, params}.sequence.removeTransition {transitions:[id]};sequence.setTransitionmodifie la durée/l'alignement/les params. - Les légendes ne sont pas dans
sequence_inspect. Utilisezcaptions.list; les sous-titres portentid, start, end, text.captions.newTrackrevient silencieusement àSubtitlepour toute chaîne de format inconnue. - Ne passez jamais un répertoire à
file.exportMedia. Il se bloque indéfiniment (reproduit deux fois, >3 min, aucune sortie). Utilisez un chemin de fichier complet. - Le format l'emporte sur l'extension.
format:"gif"avecout.mp4écritout.mp4.gif; ProRes avecout.mp4écritout.mp4.mov. Lepathdu résultat est faisant autorité. timeline.placeavec unedurationplus longue que la source maintient la dernière image pour le reste du clip, sans avertissement. Coupez avec le média en tête.range:"inOut"sans marques exporte toute la séquence, silencieusement.range:"custom"+startSeconds/endSecondsest la sous-plage fiable.jobs.listest une commande, pas un outil.command_run {id:"jobs.list"};jobs.cancel {job}supprime le fichier partiel.wait:falseexports renvoient{job, path, poll, cancel}.- Les rushes de démonstration sont synthétiques. Les exports d'échange (FCPXML/AAF/OMF) des médias
de démonstration perdent des clips ; avec de vrais médias sur disque, ils font un aller-retour (voir
references/formats-and-roundtrip.md). edit.clear(Retour arrière) laisse un trou ;edit.rippleDeletele referme.sequence.lift/extractnécessitent des marques d'entrée/sortie de séquence, pas une sélection.lumetri.applyPresetajoute un nouvel effet Lumetri à chaque fois au lieu de remplacer l'effet précédent. Supprimez l'ancien effet ou définissez les paramètres directement.- Les commandes GUI uniquement sont invisibles pour
command_list:window.workspace. {editing,assembly,color,effects,audio},window.workspace.reset,window.toggleFullScreen,app.about. Elles n'existent que sur le pont. - L'export HEVC n'est pas disponible ici ("aucun encodeur enregistré"). H.264, ProRes, DNxHR, MJPEG, MXF, séquences d'images et audio fonctionnent tous.
prefs.setdans une session headless est limité à la session — il n'a pas persisté entre deux sessions--data-dir. Utilisez l'interface graphique pour les préférences durables.- Les arguments des outils MCP sont stricts (clé inconnue → JSON-RPC
-32602; mauvais type →isErroravec un message de désérialisation), maiscommand_run.paramsest transmis tel quel.
Carte de référence
| Fichier | Contenu |
|---|---|
references/recipes.md | JSON vérifié pour construction, coupe, effets, couleur, légendes, graphiques, proxies, multicam, TTS, export, GUI |
references/commands.md | toutes les 701 commandes, groupées par espace de noms, avec documentation des paramètres |
references/mcp-and-control.md | détails MCP, formes d'erreur, ressources, méthodes de contrôle, commandes GUI uniquement |
references/cli.md | sous-commandes filmcraft-cli, flags, codes de sortie, médias hors ligne, tâches headless |
references/formats-and-roundtrip.md | matrice d'export + validation indépendante, allers-retours d'échange |
references/bugs-and-workarounds.md | chaque défaut reproduit avec une reproduction minimale |
references/maintenance.md | revérifier la version, vider les commandes, actualiser cette compétence |
scripts/probe.sh | poignée de main MCP + nombre d'outils + version |
scripts/dump-commands.sh | régénérer le catalogue de commandes |
scripts/smoke-test.sh | construire → rendre → exporter → validation indépendante |
Communauté : https://discord.gg/artcraft · https://getartcraft.com/apps/filmcraft · https://github.com/storytold/filmcraft.