Skip to content
Command Catalog

Command Catalog

Every built-in command in @miraiclip/core, with its payload schema. This page mirrors what project.commandCatalog() returns at runtime — one JSON Schema per command type, ready to hand to an LLM as tool definitions. Custom commands registered with registerCommand are included in the runtime catalog automatically.

Dispatch shape:

project.dispatch({ type: "<command type>", payload: { ... } });

All time values are integer microseconds (1 s = 1,000,000 µs). Commands with a newClipId field generate an id when it’s omitted — supply one for deterministic replay across peers.

project/set-settings

FieldTypeRequiredNotes
widthintegerno> 0, integer
heightintegerno> 0, integer
fpsnumberno> 0
namestringno

asset/add

FieldTypeRequiredNotes
idstringyesnon-empty
kind"video" | "audio" | "image" | "font"yesfont assets require family
srcstringyesnon-empty
durationUsintegerno> 0, integer
widthintegerno> 0, integer
heightintegerno> 0, integer
fpsnumberno> 0
familystringnofont assets: the CSS font-family name

asset/remove

FieldTypeRequiredNotes
idstringyesnon-empty

track/add

FieldTypeRequiredNotes
idstringyesnon-empty
kind"video" | "audio"yes
namestringno
indexintegernomin 0, integer

track/remove

FieldTypeRequiredNotes
idstringyesnon-empty

track/reorder

FieldTypeRequiredNotes
trackIdstringyesnon-empty
indexintegeryesmin 0, integer

track/rename

FieldTypeRequiredNotes
trackIdstringyesnon-empty
namestringyesnon-empty

track/set-property

FieldTypeRequiredNotes
trackIdstringyesnon-empty
mutedbooleanno
solobooleanno
lockedbooleanno

clip/add

Discriminated on kind: video/audio (assetId, trimStartUs, volume), image (assetId), text (text, fontFamily, fontSizePx, color), caption (words [{text, startUs, durationUs}] clip-relative + style {preset, fontFamily, fontSizeFrac, color, highlightColor, backgroundColor?}), or a registered custom kind (payload under props, validated by its schema). All take id, trackId, startUs, durationUs, optional partial transform. Asset-backed kinds reject asset-kind mismatches.

clip/remove

FieldTypeRequiredNotes
clipIdstringyesnon-empty

clip/move

FieldTypeRequiredNotes
clipIdstringyesnon-empty
startUsintegernomin 0, integer
trackIdstringnonon-empty

clip/trim

FieldTypeRequiredNotes
clipIdstringyesnon-empty
startUsintegernomin 0, integer
durationUsintegerno> 0, integer
trimStartUsintegernomin 0, integer

clip/split

FieldTypeRequiredNotes
clipIdstringyesnon-empty
atUsintegeryes> 0, integer
newClipIdstringnonon-empty

clip/duplicate

FieldTypeRequiredNotes
clipIdstringyesnon-empty
newClipIdstringnonon-empty
startUsintegernomin 0, integer
trackIdstringnonon-empty

clip/set-property

FieldTypeRequiredNotes
clipIdstringyesnon-empty
transformobjectno
volumenumbernomin 0
textstringno
fontFamilystringno
fontSizePxnumberno> 0
colorstringno
styleobjectnocaption clips: partial style merge

keyframe/set

FieldTypeRequiredNotes
clipIdstringyesnon-empty
propertyenumyesx, y, scale, rotation, opacity, volume
timeUsintegeryesclip-relative, min 0
valuenumberyesopacity 0..1; scale/volume ≥ 0
easingenum | objectnopreset (linear, hold, easeIn, easeOut, easeInOut) or {kind:"bezier", x1,y1,x2,y2}; default linear. Curve from this keyframe to the next. Upserts at an existing time.

keyframe/remove

FieldTypeRequiredNotes
clipIdstringyesnon-empty
propertyenumyesas above
timeUsintegeryesmust match an existing keyframe exactly

keyframe/clear

FieldTypeRequiredNotes
clipIdstringyesnon-empty
propertyenumnoomit to clear every property

effect/add

FieldTypeRequiredNotes
clipIdstringyesnon-empty
kindstringyescolorAdjust, blur, chromaKey, or a registered custom kind
paramsobjectnovalidated against the kind’s schema; omitted fields take defaults. Length params are composition-relative fractions, not pixels
enabledbooleannodefault true
indexintegernostack insertion index (default: end)
effectIdstringnosupply for deterministic replay

effect/update

FieldTypeRequiredNotes
clipIdstringyesnon-empty
effectIdstringyesnon-empty
paramsobjectnomerged onto current params, then re-validated whole
enabledbooleanno

effect/remove

FieldTypeRequiredNotes
clipIdstringyesnon-empty
effectIdstringyesnon-empty

effect/reorder

FieldTypeRequiredNotes
clipIdstringyesnon-empty
effectIdstringyesnon-empty
indexintegeryesnew stack position

transition/add

FieldTypeRequiredNotes
kindstringyescrossDissolve, dipToBlack, dipToWhite, wipe, slide, or custom
fromClipIdstringyesthe clip ending at the cut
toClipIdstringyesmust start exactly where fromClip ends, same track
durationUsintegeryes> 0; centered on the cut — each side needs half the window of source trim headroom
paramsobjectnoe.g. {direction} for wipe/slide
idstringnosupply for deterministic replay

Rejections: not-adjacent, different-tracks, duplicate-boundary (one transition per cut), insufficient-handles (a clip has no source media past its visible range). Editing or removing a participating clip drops the transition.

transition/update

FieldTypeRequiredNotes
transitionIdstringyesnon-empty
durationUsintegernore-validates headroom
paramsobjectnomerged, then re-validated whole

transition/remove

FieldTypeRequiredNotes
transitionIdstringyesnon-empty