goatedit-mcp 1.1.5 → 1.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundle/goatedit-mcp.js +105 -14
- package/package.json +1 -1
package/bundle/goatedit-mcp.js
CHANGED
|
@@ -19194,7 +19194,13 @@ var TEXT_STYLE_PROPS = {
|
|
|
19194
19194
|
textSticker: { type: "string", enum: ["ghost", "arrow", "pen", "star", "flame"], description: "Small sticker drawn beside the accent word." },
|
|
19195
19195
|
textLayoutMode: { type: "string", enum: ["side-grid", "luxury-stack", "editorial-hero", "slanted-red", "double-hero"], description: "Editorial layout engine for multi-word titles." },
|
|
19196
19196
|
posX: num("Horizontal position as a fraction of the frame, 0..1. 0.5 is centre."),
|
|
19197
|
-
posY: num("Vertical position as a fraction of the frame, 0..1. 0.5 is centre.")
|
|
19197
|
+
posY: num("Vertical position as a fraction of the frame, 0..1. 0.5 is centre."),
|
|
19198
|
+
path: {
|
|
19199
|
+
type: ["object", "null"],
|
|
19200
|
+
description: "Set the text along a curve instead of in a block: { points: [[x, y], ...] (fractions of the frame, at least two; anchors without handles are smoothed into a curve through them, and points may lie outside 0..1 so a ribbon runs off the frame), ribbonColor? (paints a band along the path behind the letters), ribbonWidth? (px @1080p, default 380), waveLength? (px between wave crests, default 900), waveSpeed? (crests per second, default 0.5) }. The clip's position moves the whole path. null returns the text to a block. Text animations do not apply along a path; animate pathOffset and pathWave with set_keyframes (as textPathOffset / textPathWave) instead."
|
|
19201
|
+
},
|
|
19202
|
+
pathOffset: num("Where the middle of the text sits along its path, 0 at the start, 1 at the end (default 0.5). Below 0 or above 1 runs the words off the ends, so keyframing it from -0.3 to 0.5 slides a word in along its ribbon."),
|
|
19203
|
+
pathWave: num("Height of the wave travelling down the path, px @1080p (default 0, flat). It bends the ribbon and the letters together.")
|
|
19198
19204
|
};
|
|
19199
19205
|
var BASE_TOOLS = [
|
|
19200
19206
|
{
|
|
@@ -19546,6 +19552,7 @@ var BASE_TOOLS = [
|
|
|
19546
19552
|
type: "object",
|
|
19547
19553
|
properties: {
|
|
19548
19554
|
text: str("The text to display."),
|
|
19555
|
+
name: str("The layer's name in the timeline. Defaults to the text itself."),
|
|
19549
19556
|
duration: num("How long the card stays on screen, in seconds."),
|
|
19550
19557
|
startTime: num("Where it starts on the timeline, in seconds. Defaults to 0."),
|
|
19551
19558
|
trackId: str("Target video track. Defaults to the topmost one that is free across the card\u2019s span, creating a new track above everything if none is free."),
|
|
@@ -19641,16 +19648,18 @@ var BASE_TOOLS = [
|
|
|
19641
19648
|
inputSchema: {
|
|
19642
19649
|
type: "object",
|
|
19643
19650
|
properties: {
|
|
19644
|
-
shape: { type: "string", enum: ["sphere", "torus", "capsule", "box", "cylinder", "cone", "blob"], description:
|
|
19645
|
-
color: str('
|
|
19651
|
+
shape: { type: "string", enum: ["sphere", "torus", "capsule", "box", "cylinder", "cone", "blob", "pile"], description: `sphere (ball), torus (ring), capsule (pill), box (block), cylinder (can), cone, blob, or pile: many balls that burst from the middle and settle in a heap over 3 seconds (its "Burst" animation, which then holds still; delay it with the model3d effect's animOffset, slow it with animSpeed).` },
|
|
19652
|
+
color: str('A solid colour, "#rrggbb". Given on its own it turns any gradient off. Defaults to near-white.'),
|
|
19646
19653
|
gradient: { type: "string", enum: ["none", "around", "vertical", "diagonal"], description: 'Paint `colors` across the shape: "around" runs round its axis (the rainbow ring), "vertical" top to bottom, "diagonal" corner to corner. The gradient is in the mesh, so it turns with the shape and shows through glass.' },
|
|
19647
|
-
colors: { type: "array", items: { type: "string" }, description: '2\u20136 "#rrggbb" colours, spread evenly, for the gradient.
|
|
19654
|
+
colors: { type: "array", items: { type: "string" }, description: '2\u20136 "#rrggbb" colours, spread evenly, for the gradient. "around" closes back on the first colour by itself. For a pile, 1\u20136 colours the balls take turns from.' },
|
|
19648
19655
|
roughness: num("0 mirror-smooth \u2026 1 chalky. Defaults to 0.22 (glossy plastic)."),
|
|
19649
19656
|
metalness: num("0 plastic \u2026 1 metal. Defaults to 0."),
|
|
19650
19657
|
proportion: num("Ring: tube thickness as a share of its radius, 0.05\u20130.9. Pill, can, cone: length against width, 0\u20134. Blob: lumpiness, 0\u20131."),
|
|
19651
19658
|
size: { type: "array", items: { type: "number" }, description: "Block only: [width, height, depth], relative, 0.1\u20134 each." },
|
|
19652
19659
|
round: num("Block only: edge rounding, 0 sharp \u2026 1 fully round."),
|
|
19653
|
-
seed: num("Blob
|
|
19660
|
+
seed: num("Blob: which blob. Pile: how the balls fall. The same seed gives the same result."),
|
|
19661
|
+
count: num("Pile only: how many balls, 3\u2013150. Defaults to 40."),
|
|
19662
|
+
arrange: { type: "string", enum: ["heap", "burst"], description: 'Pile only: "heap" (default) \u2014 the balls fall and settle in a heap; "burst" \u2014 they fly out every way and hang in the air in a wide cloud, for an explosion of balls around something.' },
|
|
19654
19663
|
material: str("A look by name: Original (default, the colour above), Chrome, Gold, Glass, Clay, Toon, Plastic, Matte, Iridescent, Wireframe, X-Ray Glow, Hologram, Crystal, Holographic, Candy Paint, Pearl."),
|
|
19655
19664
|
rotateX: num("Starting tilt, degrees."),
|
|
19656
19665
|
rotateY: num("Starting turn, degrees."),
|
|
@@ -19672,16 +19681,18 @@ var BASE_TOOLS = [
|
|
|
19672
19681
|
type: "object",
|
|
19673
19682
|
properties: {
|
|
19674
19683
|
clipId: CLIP_ID,
|
|
19675
|
-
shape: { type: "string", enum: ["sphere", "torus", "capsule", "box", "cylinder", "cone", "blob"], description:
|
|
19676
|
-
color: str('
|
|
19684
|
+
shape: { type: "string", enum: ["sphere", "torus", "capsule", "box", "cylinder", "cone", "blob", "pile"], description: `sphere (ball), torus (ring), capsule (pill), box (block), cylinder (can), cone, blob, or pile: many balls that burst from the middle and settle in a heap over 3 seconds (its "Burst" animation, which then holds still; delay it with the model3d effect's animOffset, slow it with animSpeed).` },
|
|
19685
|
+
color: str('A solid colour, "#rrggbb". Given on its own it turns any gradient off. Defaults to near-white.'),
|
|
19677
19686
|
gradient: { type: "string", enum: ["none", "around", "vertical", "diagonal"], description: 'Paint `colors` across the shape: "around" runs round its axis (the rainbow ring), "vertical" top to bottom, "diagonal" corner to corner. The gradient is in the mesh, so it turns with the shape and shows through glass.' },
|
|
19678
|
-
colors: { type: "array", items: { type: "string" }, description: '2\u20136 "#rrggbb" colours, spread evenly, for the gradient.
|
|
19687
|
+
colors: { type: "array", items: { type: "string" }, description: '2\u20136 "#rrggbb" colours, spread evenly, for the gradient. "around" closes back on the first colour by itself. For a pile, 1\u20136 colours the balls take turns from.' },
|
|
19679
19688
|
roughness: num("0 mirror-smooth \u2026 1 chalky. Defaults to 0.22 (glossy plastic)."),
|
|
19680
19689
|
metalness: num("0 plastic \u2026 1 metal. Defaults to 0."),
|
|
19681
19690
|
proportion: num("Ring: tube thickness as a share of its radius, 0.05\u20130.9. Pill, can, cone: length against width, 0\u20134. Blob: lumpiness, 0\u20131."),
|
|
19682
19691
|
size: { type: "array", items: { type: "number" }, description: "Block only: [width, height, depth], relative, 0.1\u20134 each." },
|
|
19683
19692
|
round: num("Block only: edge rounding, 0 sharp \u2026 1 fully round."),
|
|
19684
|
-
seed: num("Blob
|
|
19693
|
+
seed: num("Blob: which blob. Pile: how the balls fall. The same seed gives the same result."),
|
|
19694
|
+
count: num("Pile only: how many balls, 3\u2013150. Defaults to 40."),
|
|
19695
|
+
arrange: { type: "string", enum: ["heap", "burst"], description: 'Pile only: "heap" (default) \u2014 the balls fall and settle in a heap; "burst" \u2014 they fly out every way and hang in the air in a wide cloud, for an explosion of balls around something.' }
|
|
19685
19696
|
},
|
|
19686
19697
|
required: ["clipId"]
|
|
19687
19698
|
},
|
|
@@ -19775,24 +19786,101 @@ var BASE_TOOLS = [
|
|
|
19775
19786
|
},
|
|
19776
19787
|
{
|
|
19777
19788
|
name: "join_scenes",
|
|
19778
|
-
description: "Join two scenes at a cut so the edit flows instead of cutting: push (one camera move across a shared canvas \u2014 the outgoing scene speeds out and the incoming arrives at the same speed, so the cut falls mid-motion), zoomThrough (push into one element of the outgoing scene until it fills the frame; the incoming scene opens out of it), or matchCut (a layer of the incoming scene starts exactly where a layer of the outgoing one was \u2014 position, size, turn, through parents, 3D models included \u2014 then settles into its own place). push and zoomThrough add a camera null per side and parent that side's top-level clips to it, so every layer stays editable and the camera's keyframes can be tuned afterwards. at is the cut: outgoing clips end there and incoming clips start there.",
|
|
19789
|
+
description: "Join two scenes at a cut so the edit flows instead of cutting: push (one camera move across a shared canvas \u2014 the outgoing scene speeds out and the incoming arrives at the same speed, so the cut falls mid-motion), zoomThrough (push into one element of the outgoing scene until it fills the frame; the incoming scene opens out of it), or morph (every pair of layers at once, Smart Animate style: each incoming layer starts on the drawn pixels of its outgoing partner \u2014 a tag inside a full-frame snippet counts as the tag \u2014 and stretches and slides into place, pairs staggered left to right), or matchCut (a layer of the incoming scene starts exactly where a layer of the outgoing one was \u2014 position, size, turn, through parents, 3D models included \u2014 then settles into its own place). push and zoomThrough add a camera null per side and parent that side's top-level clips to it, so every layer stays editable and the camera's keyframes can be tuned afterwards. at is the cut: outgoing clips end there and incoming clips start there.",
|
|
19779
19790
|
inputSchema: {
|
|
19780
19791
|
type: "object",
|
|
19781
19792
|
properties: {
|
|
19782
19793
|
at: num("The cut time in seconds."),
|
|
19783
|
-
type: { type: "string", enum: ["push", "zoomThrough", "matchCut"], description: "Which join." },
|
|
19794
|
+
type: { type: "string", enum: ["auto", "push", "zoomThrough", "matchCut", "morph"], description: "Which join. auto picks one from what is on each side: morph when incoming layers are named after outgoing ones and not animated yet, a push in the outgoing scene's own direction when it is already moving into the cut, a zoom through one small element near the middle, else a push \u2014 and says why in `picked`." },
|
|
19784
19795
|
duration: num("Seconds the move takes on each side of the cut. Default 0.4."),
|
|
19785
19796
|
direction: { type: "string", enum: ["left", "right", "up", "down"], description: "push: which way the picture travels. Default left." },
|
|
19786
19797
|
clipId: str("zoomThrough: the element of the outgoing scene to fly into."),
|
|
19787
19798
|
zoom: num("zoomThrough: how far in the outgoing camera goes. Default: until the element overfills the frame."),
|
|
19788
19799
|
inZoom: num("zoomThrough: scale the incoming scene opens from. Default 1.8."),
|
|
19789
19800
|
fromClipId: str("matchCut: the outgoing layer to match."),
|
|
19790
|
-
toClipId: str("matchCut: the incoming layer that takes its place.")
|
|
19801
|
+
toClipId: str("matchCut: the incoming layer that takes its place."),
|
|
19802
|
+
pairs: {
|
|
19803
|
+
type: "array",
|
|
19804
|
+
items: { type: "object" },
|
|
19805
|
+
description: 'morph: [{ from, to }] clip ids \u2014 each incoming layer starts on its outgoing partner. Omit to pair automatically: layers whose names end in the same word ("S2 tag New" \u2192 "S2 block New"), then the rest left to right. Full-frame grounds are left out.'
|
|
19806
|
+
},
|
|
19807
|
+
stagger: num("morph: seconds between one pair starting and the next, left to right. Default 0.04.")
|
|
19791
19808
|
},
|
|
19792
19809
|
required: ["at", "type"]
|
|
19793
19810
|
},
|
|
19794
19811
|
method: "joinScenes"
|
|
19795
19812
|
},
|
|
19813
|
+
{
|
|
19814
|
+
name: "animate_clip",
|
|
19815
|
+
description: "Give one layer a named move from the motion recipe library, already eased, timed and overshot by the motion principles, relative to where the layer rests (it lands on its own position and scale). Entrances: fadeIn, fadeUp, popIn, slideIn, maskReveal (wiped on behind a soft edge), riseFromLine (rises from behind its own baseline \u2014 the title reveal), blurIn (2D only), zoomIn, dropIn (falls, squashes, springs back), growIn (lines and bars), spinIn. Exits (end on the clip's last frame, or `delay` before it): fadeOut, slideOut (pulls back first, then away), popOut, maskHide, blurOut. Between them: hold (a slow drift after landing, so nothing freezes). Through the whole clip: drift (slow push-in for grounds), float (gentle bob). Overshoots are real damped springs. Don't use on text clips: text animates with set_text_animation. An entrance replaces the keys in its own window only, so an entrance and an exit stack. Prefer animate_scene for a whole scene.",
|
|
19816
|
+
inputSchema: {
|
|
19817
|
+
type: "object",
|
|
19818
|
+
properties: {
|
|
19819
|
+
clipId: str("The layer to animate."),
|
|
19820
|
+
recipe: {
|
|
19821
|
+
type: "string",
|
|
19822
|
+
enum: ["fadeIn", "fadeUp", "popIn", "slideIn", "maskReveal", "riseFromLine", "blurIn", "zoomIn", "dropIn", "growIn", "spinIn", "fadeOut", "slideOut", "popOut", "maskHide", "blurOut", "hold", "drift", "float"],
|
|
19823
|
+
description: "The move."
|
|
19824
|
+
},
|
|
19825
|
+
style: { type: "string", enum: ["smooth", "snappy", "bouncy"], description: "The feel: smooth (no overshoot, 0.6s), snappy (hard ease-out, small overshoot, 0.4s), bouncy (10% overshoot, 0.55s). Default smooth. Use one feel for a whole video." },
|
|
19826
|
+
delay: num("Entrances: seconds into the clip before the move starts. Exits: seconds before the clip ends that the layer is gone, so a group leaves in turn. Default 0."),
|
|
19827
|
+
from: num("hold: clip-relative second the drift starts (where the entrance lands)."),
|
|
19828
|
+
to: num("hold: clip-relative second it ends (where the exit starts). Default the clip end."),
|
|
19829
|
+
depth: num("hold: how much it drifts \u2014 1 for the hero, 0.4\u20130.6 for what sits behind it."),
|
|
19830
|
+
motionBlur: bool("Smear fast travel with a camera-shutter motion blur (2D layers). Draws once where nothing moves."),
|
|
19831
|
+
arc: num("slideIn, slideOut, dropIn: travel on a curve \u2014 how far the path bows toward the middle of the frame, as a fraction of the travel. 0.3 is gentle. For pictures; keep type and bars straight."),
|
|
19832
|
+
anticipate: bool("fadeOut: a small lift the other way before it fades, for big layers."),
|
|
19833
|
+
length: num("Seconds the move takes. Default by style."),
|
|
19834
|
+
direction: { type: "string", enum: ["left", "right", "up", "down"], description: "Which way the layer travels (slideIn, slideOut, maskReveal, maskHide), or the axis growIn grows on." },
|
|
19835
|
+
distance: num("Travel as a fraction of the frame height. Default by style (0.04\u20130.08).")
|
|
19836
|
+
},
|
|
19837
|
+
required: ["clipId", "recipe"]
|
|
19838
|
+
},
|
|
19839
|
+
method: "animateClip"
|
|
19840
|
+
},
|
|
19841
|
+
{
|
|
19842
|
+
name: "animate_scene",
|
|
19843
|
+
description: "Animate a whole scene the way a motion designer would, in one call. Each layer gets a role from what it draws \u2014 ground (covers the frame: a slow drift), hero (the one thing the scene is about: enters first and biggest), support (staggered outward from the hero), text, detail (small marks, popping in last), follower (parented to a picture: arrives a beat after it) \u2014 and a move and start time from its role, its size, the scene's length and the feel, so the scene speaks one motion language. Text always gets a text animation (letters or words), never a block move; pictures get keyframed recipes. Moves travel the way the scene's joins push (flow). With music on the timeline the lead lands on a beat (onBeat). Pictures travel on arcs, type and bars straight. Between the entrance and the exit every picture keeps a slow drift, deeper for the hero (hold). Layers leave last in, first out, the way the next scene comes in; big layers gather before a fade-out. Moves that would cross another layer are swapped for ones that stay in place (note). Layers that already move are left alone unless replace is true. A scene runs between two cuts; at picks it (default the playhead), all does every scene. Returns what each layer got. Follow with lint_motion to join the cuts.",
|
|
19844
|
+
inputSchema: {
|
|
19845
|
+
type: "object",
|
|
19846
|
+
properties: {
|
|
19847
|
+
at: num("A time inside the scene to animate. Default: the playhead."),
|
|
19848
|
+
all: bool("Animate every scene in the sequence."),
|
|
19849
|
+
style: { type: "string", enum: ["smooth", "snappy", "bouncy"], description: "The feel, for every layer. Default smooth." },
|
|
19850
|
+
replace: bool("Re-animate layers that already move, replacing their entrance (and exit if they leave early)."),
|
|
19851
|
+
flow: { type: "string", enum: ["left", "right", "up", "down"], description: "The way moves travel. Default: the way the scene's join camera moves, else up." },
|
|
19852
|
+
pace: num("Spacing of the cascade: 0.6 tight, 1 normal (default), 1.6 loose."),
|
|
19853
|
+
hold: bool("Keep a slow drift on every picture between its entrance and its exit. Default true."),
|
|
19854
|
+
beats: bool("With music on the timeline (beat markers, or audio clips), move the cascade so the lead lands on the nearest beat. Default true."),
|
|
19855
|
+
dryRun: bool("Return the plan without changing anything.")
|
|
19856
|
+
}
|
|
19857
|
+
},
|
|
19858
|
+
method: "animateScene"
|
|
19859
|
+
},
|
|
19860
|
+
{
|
|
19861
|
+
name: "describe_motion",
|
|
19862
|
+
description: "The motion design rules to animate by \u2014 easing curves, durations, stagger, overshoot, hierarchy, holds and reading time, which join to use between scenes \u2014 the same numbers lint_motion checks. Read it before animating a sequence.",
|
|
19863
|
+
inputSchema: { type: "object", properties: {} },
|
|
19864
|
+
method: "describeMotion"
|
|
19865
|
+
},
|
|
19866
|
+
{
|
|
19867
|
+
name: "lint_motion",
|
|
19868
|
+
description: "Check the open sequence's animation the way a motion designer would: still cuts (the picture jumps instead of moving through the change), linear moves (no easing), several layers making the same entrance on one frame (no stagger), moves too fast to follow, and text cut away before it can be read. Each finding has a message and, when the fix is mechanical, `fix`: [method, params] calls to run in order, one call each (run_tools), then lint again. Applying every fix is the one-click polish.",
|
|
19869
|
+
inputSchema: {
|
|
19870
|
+
type: "object",
|
|
19871
|
+
properties: {
|
|
19872
|
+
from: num("Only findings from this time, seconds."),
|
|
19873
|
+
to: num("Only findings up to this time, seconds.")
|
|
19874
|
+
}
|
|
19875
|
+
},
|
|
19876
|
+
method: "lintMotion"
|
|
19877
|
+
},
|
|
19878
|
+
{
|
|
19879
|
+
name: "list_cuts",
|
|
19880
|
+
description: "Every cut in the open sequence \u2014 a time where layers end and others start together \u2014 with what leaves, what arrives, and whether the picture moves through it (a camera move, or layers moving on both sides) or it jumps (a hard cut, a still frame before an entrance, an exit before a still cut). `stillCuts` lists the ones that jump. Read it before joining scenes, and again after.",
|
|
19881
|
+
inputSchema: { type: "object", properties: {} },
|
|
19882
|
+
method: "listCuts"
|
|
19883
|
+
},
|
|
19796
19884
|
{
|
|
19797
19885
|
name: "create_3d_object",
|
|
19798
19886
|
description: "Make a word, a logo or an SVG solid: extruded to a depth with rounded edges and lit like a 3D model, as its own clip with nothing around it (no backdrop), so it floats over whatever is beneath. Give text (drawn in font/weight/color) or mediaFileId of a transparent PNG or an SVG in the bin (a photo needs remove_background first). spins turns it whole times over the clip; rotateX/Y/Z pose it. It is a showcase clip: describe_effect showcase lists its looks (chrome, glass\u2026), lighting and side colour, set with set_clip_effect.",
|
|
@@ -20174,9 +20262,11 @@ var BASE_TOOLS = [
|
|
|
20174
20262
|
"orbitStartAngle",
|
|
20175
20263
|
"pathTrimStart",
|
|
20176
20264
|
"pathTrimEnd",
|
|
20177
|
-
"pathTrimOffset"
|
|
20265
|
+
"pathTrimOffset",
|
|
20266
|
+
"textPathOffset",
|
|
20267
|
+
"textPathWave"
|
|
20178
20268
|
],
|
|
20179
|
-
description: "Property to animate. posX/posY and opacity are 0..1 fractions, rotation is degrees, scaleX/scaleY are multipliers (1 = unchanged), pathTrimEnd 0\u21921 draws a pen stroke on."
|
|
20269
|
+
description: "Property to animate. posX/posY and opacity are 0..1 fractions, rotation is degrees, scaleX/scaleY are multipliers (1 = unchanged), pathTrimEnd 0\u21921 draws a pen stroke on, textPathOffset slides text along its path (0..1) and textPathWave is the height of the wave bending it (px @1080p)."
|
|
20180
20270
|
},
|
|
20181
20271
|
keyframes: {
|
|
20182
20272
|
type: "array",
|
|
@@ -20303,6 +20393,7 @@ var BASE_TOOLS = [
|
|
|
20303
20393
|
unit: { type: "string", enum: ["letter", "word", "line"], description: "What the animation steps through." },
|
|
20304
20394
|
durationIn: num("Seconds for one unit's entrance to complete."),
|
|
20305
20395
|
stagger: num("Seconds between consecutive units starting. 0 moves them together."),
|
|
20396
|
+
delay: num("Seconds into the clip before the first unit starts. Default 0."),
|
|
20306
20397
|
distance: num("Slide or offset distance in pixels @1080p, for the slide/spring/unfold presets."),
|
|
20307
20398
|
highlightColor: str('Highlight colour for the karaoke-style presets and the bar of blockReveal, e.g. "#ff2d55".'),
|
|
20308
20399
|
order: { type: "string", enum: ["forward", "reverse", "center", "edges", "random"], description: "Which unit goes first. Defaults to reading order." },
|
package/package.json
CHANGED