@higgsfield/video-editor-mcp 1.1.1-dev.0 → 2.0.0
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/README.md +63 -26
- package/dist/cli.mjs +284 -112
- package/dist/guide.md +2 -3
- package/dist/index.html +1 -1
- package/dist/launcher.mjs +34 -14
- package/dist/server.mjs +209 -265
- package/node_modules/@higgsfield/higgsedit/dist/api.d.ts +481 -0
- package/node_modules/@higgsfield/higgsedit/dist/{chunk-PFQYUJQL.mjs → chunk-3XVMJSV2.mjs} +1 -1
- package/node_modules/@higgsfield/higgsedit/dist/{chunk-F4CMIG5G.mjs → chunk-4VE54E4U.mjs} +3 -1
- package/node_modules/@higgsfield/higgsedit/dist/{chunk-2JYLVSVV.mjs → chunk-55JARHLA.mjs} +205 -65
- package/node_modules/@higgsfield/higgsedit/dist/{chunk-YLVXQIPX.mjs → chunk-E4N76T2R.mjs} +1 -1
- package/node_modules/@higgsfield/higgsedit/dist/{chunk-OCIZ36XD.mjs → chunk-ECRSOIKI.mjs} +1 -1
- package/node_modules/@higgsfield/higgsedit/dist/{chunk-IEPPEDEU.mjs → chunk-ENALCTAD.mjs} +1 -1
- package/node_modules/@higgsfield/higgsedit/dist/chunk-HY2E7IWX.mjs +43 -0
- package/node_modules/@higgsfield/higgsedit/dist/{chunk-NARTAWRN.mjs → chunk-HYCUOCUQ.mjs} +9 -4
- package/node_modules/@higgsfield/higgsedit/dist/{chunk-C3GSB3XZ.mjs → chunk-NLEIBCAK.mjs} +1 -7
- package/node_modules/@higgsfield/higgsedit/dist/{chunk-2WKNH7OL.mjs → chunk-O3AVYZ6U.mjs} +1 -1
- package/node_modules/@higgsfield/higgsedit/dist/chunk-UXO22E3P.mjs +22 -0
- package/node_modules/@higgsfield/higgsedit/dist/{chunk-BH2QF635.mjs → chunk-V5XTCFYK.mjs} +4 -100
- package/node_modules/@higgsfield/higgsedit/dist/chunk-W2TANYEH.mjs +118 -0
- package/node_modules/@higgsfield/higgsedit/dist/{chunk-DVN4LUXV.mjs → chunk-XY5CCUOZ.mjs} +2 -6
- package/node_modules/@higgsfield/higgsedit/dist/{chunk-KIWGVAPJ.mjs → chunk-Y7SAX2P4.mjs} +8 -12
- package/node_modules/@higgsfield/higgsedit/dist/chunk-YNAIRXOP.mjs +22 -0
- package/node_modules/@higgsfield/higgsedit/dist/{chunk-WENFTPXQ.mjs → chunk-ZO3NDQD3.mjs} +1 -1
- package/node_modules/@higgsfield/higgsedit/dist/higgsedit.mjs +13 -13
- package/node_modules/@higgsfield/higgsedit/package.json +4 -1
- package/package.json +4 -4
- package/plugin/.codex-plugin/plugin.json +1 -1
- package/plugin/skills/video-editing/SKILL.md +109 -95
- package/plugin/mcp.json +0 -10
- package/plugin/plugin.json +0 -41
- package/plugin/skills/motion-craft/SKILL.md +0 -87
- package/plugin/skills/motion-craft/agents/openai.yaml +0 -6
- package/plugin/skills/motion-craft/references/causality.md +0 -25
- package/plugin/skills/motion-craft/references/composition.md +0 -20
- package/plugin/skills/motion-craft/references/easing.md +0 -19
- package/plugin/skills/motion-craft/references/qc.md +0 -33
- package/plugin/skills/motion-craft/references/recipes.md +0 -31
- package/plugin/skills/motion-craft/references/stepped.md +0 -43
- package/plugin/skills/motion-craft/references/timing.md +0 -60
- package/plugin/skills/motion-craft/references/tsx.md +0 -60
- package/plugin/skills/motion-craft/references/typography.md +0 -22
- package/plugin/skills/video-editing/agents/openai.yaml +0 -6
- package/plugin/skills/video-editing/references/animation-contract.md +0 -45
- package/plugin/skills/video-editing/references/assembly.md +0 -58
- package/plugin/skills/video-editing/references/caption-systems.md +0 -29
- package/plugin/skills/video-editing/references/caption-titling.md +0 -41
- package/plugin/skills/video-editing/references/clip-geometry.md +0 -37
- package/plugin/skills/video-editing/references/compose.md +0 -283
- package/plugin/skills/video-editing/references/editor-measured.md +0 -37
- package/plugin/skills/video-editing/references/failure-modes.md +0 -37
- package/plugin/skills/video-editing/references/local-setup.md +0 -25
- package/plugin/skills/video-editing/references/motion-language.md +0 -27
- package/plugin/skills/video-editing/references/provenance.md +0 -7
- package/plugin/skills/video-editing/references/sandbox.md +0 -31
- package/plugin/skills/video-editing/references/shot-blueprints.md +0 -24
- package/plugin/skills/video-editing/references/title-animation.md +0 -29
- package/plugin/skills/video-editing/references/tsx-projects.md +0 -187
- package/plugin/skills/video-editing/references/workflows.md +0 -41
|
@@ -1,101 +1,115 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: video-editing
|
|
3
|
-
description:
|
|
4
|
-
Edit footage and motion graphics with Higgsedit.
|
|
5
|
-
Activate only for a requested edit or graphics deliverable:
|
|
6
|
-
native timeline cuts, overlays and animated title cards. Simple finished-file
|
|
7
|
-
cuts, concatenation, soundtrack changes and speech captions use video-montage.
|
|
8
|
-
Do not activate when the user only asks to analyze, summarize, describe,
|
|
9
|
-
critique or review a video, including scene-by-scene breakdowns.
|
|
10
|
-
Timeline inspection is supporting work for a requested edit, not a standalone
|
|
11
|
-
activation trigger. Exclude standalone still cards, image-to-video photo
|
|
12
|
-
animation without native composition, generative restyling,
|
|
13
|
-
transcription and subtitle text work. For speech-caption burning, use video-montage.
|
|
14
|
-
Object replacements or targeted clip variants use ad-multiplier.
|
|
3
|
+
description: Edit videos with the user in the Higgsfield Video Editor, like an editor and motion designer working beside them. Cut footage, build a timeline, add titles, captions, music, transitions and animation, keep the editor panel updating as you work, and export MP4s from projects on this Mac. Use when the user wants to make, edit, cut, trim, caption, animate, preview or export a video, mentions clips, footage, reels, edits or motion graphics, or names Higgsfield video editing or higgsedit.
|
|
15
4
|
---
|
|
16
5
|
|
|
17
|
-
## Activation analytics
|
|
18
|
-
|
|
19
|
-
When using this skill for a new user request, call `track_skill_activation` once with `{"skill_name":"video-editing"}` at the earliest opportunity that preserves widget-first and exclusive-tool turns; defer to a later turn when required. Do not repeat for polling, retries, references, or continuation of the same request. If tracking is unavailable or fails, continue the task without retrying. Send only the skill name.
|
|
20
|
-
|
|
21
6
|
# Video editing
|
|
22
7
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
##
|
|
30
|
-
|
|
31
|
-
The
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
`
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
8
|
+
You are the user's editor and motion designer. They direct, you cut, and they watch the result in the
|
|
9
|
+
Video Editor panel. The panel stays open the whole session, and they can make changes there too.
|
|
10
|
+
|
|
11
|
+
Everything happens on the user's Mac with the `video_editing_*` tools. If those tools are not listed in this
|
|
12
|
+
chat, ask the user to start a new chat and pick @Higgsfield Video Editor there, and stop.
|
|
13
|
+
|
|
14
|
+
## How to talk to the user
|
|
15
|
+
|
|
16
|
+
The user is a creator, not a developer. Speak about the video, never about how it is built.
|
|
17
|
+
|
|
18
|
+
- Use editing and motion-design words: timeline, clip, layer, scene, playhead, in and out points, cut, trim,
|
|
19
|
+
split, transition, title, lower third, captions, music bed, voice-over, keyframe, ease in and out, safe area,
|
|
20
|
+
aspect ratio, export.
|
|
21
|
+
- Never mention code, files (`index.tsx`, `media/`, JSON), tool names, ids, props, servers or error stack
|
|
22
|
+
traces. Run tools quietly and report what changed on screen.
|
|
23
|
+
- Give times as timecodes the user can find on the timeline: "at 0:04", "from 0:12 to 0:15".
|
|
24
|
+
- When something fails, explain it as an editing problem ("the clip from your phone uses a format I can't
|
|
25
|
+
read yet") and offer a way forward. Fix what you can yourself. Ask them to act only when you can't
|
|
26
|
+
(installing something, sharing a file).
|
|
27
|
+
- Keep updates short: what you did, where to look, and one question when you need a decision.
|
|
28
|
+
|
|
29
|
+
How to translate:
|
|
30
|
+
|
|
31
|
+
| under the hood | say |
|
|
32
|
+
|---|---|
|
|
33
|
+
| project folder, `index.tsx` | your project, the edit |
|
|
34
|
+
| `<scene width height fps>` | the canvas: 9:16 vertical, 16:9 landscape, 1:1 square, frame rate |
|
|
35
|
+
| `<sequence>` children | the clips on the timeline, back to back |
|
|
36
|
+
| `<video>`, `<audio>`, `<image>` | a clip, a music bed or voice-over, a still |
|
|
37
|
+
| `<text>` | a title, a lower third, on-screen text |
|
|
38
|
+
| `<rect>` | a shape, a colour card, a background plate |
|
|
39
|
+
| `<group>` | a group of layers that move together |
|
|
40
|
+
| `start` / `end`, `sourceIn` | when it comes in and goes out; the trim on the clip |
|
|
41
|
+
| `transition` | a transition (dissolve, whip pan, zoom through, fade to black) |
|
|
42
|
+
| `enter` / `exit` presets | animates in, animates out (fade, slide up, pop, word by word) |
|
|
43
|
+
| `animate` keyframes, easing | keyframes, ease in, ease out |
|
|
44
|
+
| `<captions>`, transcript | captions, subtitles |
|
|
45
|
+
| `<adjustmentLayer>` | a camera move (push in, pan) |
|
|
46
|
+
| `effects`, `blend`, `mask` | a look or grade (blur, black and white, brightness), a blend mode, a mask |
|
|
47
|
+
| `id` | the layer's name in the Layers panel: make it readable (`intro-title`, `clip-beach`) |
|
|
48
|
+
| `render` | export |
|
|
49
|
+
|
|
50
|
+
## The tools
|
|
51
|
+
|
|
52
|
+
| to | call |
|
|
53
|
+
|---|---|
|
|
54
|
+
| start a project, or open one | `video_editing_create_project`, `video_editing_open_project`. The result carries the project guide: the project format, every element, timing, motion and the edit operations. Read it before your first change. |
|
|
55
|
+
| see what is on the timeline | `video_editing_outline`, before every edit: the user may have changed things in the panel |
|
|
56
|
+
| change the edit | `video_editing_edit`, a batch of edits by layer id as one undo step; `video_editing_undo` and `_redo` share history with the panel |
|
|
57
|
+
| bring footage in | `video_editing_import_media` (a URL into the project's media folder), then `video_editing_media_probe` |
|
|
58
|
+
| look at footage | `video_editing_media_grab` (frames), `_filmstrip` (frames over time), `_waveform` (levels and silences), `_transcribe` (word-timed speech), `_segment` (track an object) |
|
|
59
|
+
| check your work | `video_editing_preview_frames` at the moments you touched |
|
|
60
|
+
| fonts | `video_editing_fonts` |
|
|
61
|
+
| export | `video_editing_render`, then poll `video_editing_render_status` until it reports the file |
|
|
62
|
+
| something is off | `video_editing_diagnostics` |
|
|
63
|
+
|
|
64
|
+
When more than one project is open, pass `project` on every call; each result names the project it acted on.
|
|
65
|
+
|
|
66
|
+
## The session
|
|
67
|
+
|
|
68
|
+
### 1. Set up the project
|
|
69
|
+
|
|
70
|
+
Use the folder the user points at. If they only have footage, create a new project under their Movies,
|
|
71
|
+
Documents or Downloads folder and bring the footage in. Ask about the format only if you can't tell: vertical 9:16
|
|
72
|
+
for Reels, TikTok and Shorts; 16:9 for YouTube. Tell them once that the editor panel shows the edit and updates
|
|
73
|
+
as you work, and that they can scrub, trim and tweak there too.
|
|
74
|
+
|
|
75
|
+
### 2. Understand the brief and the footage
|
|
76
|
+
|
|
77
|
+
Before you cut, look at what you have: the length and format of each clip, a few frames, the audio levels and
|
|
78
|
+
silent stretches, and a transcript when there is speech. Then confirm the plan in one or two sentences: "I'll
|
|
79
|
+
open on the drone shot, cut to the three interview answers, and end on the logo. About 30 seconds with
|
|
80
|
+
captions. Sound good?"
|
|
81
|
+
|
|
82
|
+
### 3. Edit in small passes
|
|
83
|
+
|
|
84
|
+
Work like an editor showing cuts: one pass, check it, show it, get notes.
|
|
85
|
+
|
|
86
|
+
1. Read the outline before every change, because the user may have changed the edit in the panel.
|
|
87
|
+
2. Make the change as one batch.
|
|
88
|
+
3. Check it yourself: preview frames at the moments you touched and look at them. Fix framing, text outside the
|
|
89
|
+
safe area, black frames and timing before the user sees anything.
|
|
90
|
+
4. Tell the user what changed and where: "Added a lower third with Sarah's name at 0:06. It slides up and holds
|
|
91
|
+
for 3 seconds. Take a look." The panel has already updated, so don't send pictures unless they ask.
|
|
92
|
+
5. Ask for notes, or suggest the next step.
|
|
93
|
+
|
|
94
|
+
### 4. Work with their changes
|
|
95
|
+
|
|
96
|
+
The user can drag clips, trim, retype text and change colours in the panel. Their changes are part of the edit.
|
|
97
|
+
Keep them, never undo them without asking, and build on them. If a note conflicts with something they changed by
|
|
98
|
+
hand, ask which one they want.
|
|
99
|
+
|
|
100
|
+
### 5. Export
|
|
101
|
+
|
|
102
|
+
When they're happy, export, tell them where the file is, and offer other formats ("Want a 1:1 version for the
|
|
103
|
+
feed too?").
|
|
104
|
+
|
|
105
|
+
## Craft defaults
|
|
106
|
+
|
|
107
|
+
When the user doesn't specify, use these:
|
|
108
|
+
|
|
109
|
+
- Cut on action and on the beat. Trim dead air and the silences the waveform shows.
|
|
110
|
+
- Titles hold long enough to read twice: about 1 second per 3 words, at least 1.5 seconds.
|
|
111
|
+
- Animate in over 0.3 to 0.6 seconds with ease out, and out with ease in. Keep motion purposeful and consistent.
|
|
112
|
+
- Keep text inside the safe area. On 9:16, keep clear of the top 10% and the bottom 20% (platform UI).
|
|
113
|
+
- Captions on anything with speech. Music under voice sits around 20 to 30% volume, with short fades at the head
|
|
114
|
+
and tail.
|
|
115
|
+
- Use one or two typefaces per video and good contrast. Pick fonts from the font list.
|
package/plugin/mcp.json
DELETED
package/plugin/plugin.json
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
|
|
3
|
-
"name": "higgsfield-video-editor-local",
|
|
4
|
-
"description": "Edit and render video projects on your Mac with Higgsfield. Arrange clips, add text, audio and motion graphics, preview your timeline in the interactive editor, and render finished videos. Generate images and videos in the editor by connecting your Higgsfield account.",
|
|
5
|
-
"author": {
|
|
6
|
-
"name": "Higgsfield AI, Inc."
|
|
7
|
-
},
|
|
8
|
-
"homepage": "https://higgsfield.ai",
|
|
9
|
-
"keywords": [
|
|
10
|
-
"video-editing",
|
|
11
|
-
"motion-graphics",
|
|
12
|
-
"higgsfield"
|
|
13
|
-
],
|
|
14
|
-
"extensions": {
|
|
15
|
-
"com.openai": {
|
|
16
|
-
"interface": {
|
|
17
|
-
"displayName": "Higgsfield Video Editor",
|
|
18
|
-
"shortDescription": "Edit videos on your Mac",
|
|
19
|
-
"longDescription": "Edit and render video projects on your Mac with Higgsfield. Arrange clips, add text, audio and motion graphics, preview your timeline in the interactive editor, and render finished videos. Generate images and videos in the editor by connecting your Higgsfield account.",
|
|
20
|
-
"developerName": "Higgsfield AI, Inc.",
|
|
21
|
-
"category": "Creativity",
|
|
22
|
-
"capabilities": [
|
|
23
|
-
"Interactive"
|
|
24
|
-
],
|
|
25
|
-
"defaultPrompt": [
|
|
26
|
-
"Create a vertical video project with an animated title and music.",
|
|
27
|
-
"Trim and arrange my clips into a short video.",
|
|
28
|
-
"Add animated text and motion graphics to my video."
|
|
29
|
-
],
|
|
30
|
-
"logo": "./assets/higgsfield-blue.svg",
|
|
31
|
-
"composerIcon": "./assets/higgsfield-blue.svg",
|
|
32
|
-
"brandColor": "#1677FF",
|
|
33
|
-
"websiteURL": "https://higgsfield.ai",
|
|
34
|
-
"supportURL": "https://discord.com/invite/higgsfield",
|
|
35
|
-
"privacyPolicyURL": "https://higgsfield.ai/privacy-policy",
|
|
36
|
-
"termsOfServiceURL": "https://higgsfield.ai/terms-of-use-agreement"
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
},
|
|
40
|
-
"version": "1.1.1-dev.0"
|
|
41
|
-
}
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: motion-craft
|
|
3
|
-
description: >
|
|
4
|
-
Design concrete motion tracks for native Higgsedit compositions:
|
|
5
|
-
frame choreography, timed text entrances, shared timelines and counters.
|
|
6
|
-
Use for authoring how a native composition animates. General animation
|
|
7
|
-
ideas, UI advice and CSS or JavaScript snippets do not activate this skill.
|
|
8
|
-
Use video-editing for project assembly, footage edits and rendering.
|
|
9
|
-
metadata:
|
|
10
|
-
source_revision: "5073f3a09d3f6b0469db9ff7e8a9df0d339f743a"
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
## Activation analytics
|
|
14
|
-
|
|
15
|
-
When using this skill for a new user request, call `track_skill_activation` once with `{"skill_name":"motion-craft"}` at the earliest opportunity that preserves widget-first and exclusive-tool turns; defer to a later turn when required. Do not repeat for polling, retries, references, or continuation of the same request. If tracking is unavailable or fails, continue the task without retrying. Send only the skill name.
|
|
16
|
-
|
|
17
|
-
# Motion Craft
|
|
18
|
-
|
|
19
|
-
## Scope
|
|
20
|
-
|
|
21
|
-
The deliverable is a motion specification for a native composition. General
|
|
22
|
-
suggestions about animation or interface behavior remain an ordinary text/code
|
|
23
|
-
request; do not choose Higgsedit for the user merely because motion is mentioned.
|
|
24
|
-
|
|
25
|
-
Use native composition motion only. There is no HTML animation, CSS, expression evaluator, runtime callback, or playback physics clock.
|
|
26
|
-
|
|
27
|
-
## Runtime and loading
|
|
28
|
-
|
|
29
|
-
Use the installed `$video-editing` skill for project creation, media transfer and
|
|
30
|
-
rendering. Select its authoring route before choosing motion APIs:
|
|
31
|
-
|
|
32
|
-
- Local `video_editing_*` tools or a Mac TSX project (`index.tsx` + `media/`): read
|
|
33
|
-
[local TSX motion](references/tsx.md) and the project guide returned by create/open.
|
|
34
|
-
Use `scene`, `group`, `sequence`, `enter`/`exit` and property-keyframe `animate`.
|
|
35
|
-
Group overlapping graphics by shot and sequence consecutive shots. Check the
|
|
36
|
-
outline after structural edits and inspect frames at shot boundaries. The local
|
|
37
|
-
editor does not use `types/fable.d.ts`, `p.compose`, `<frame motion>` or the
|
|
38
|
-
sandbox animation arrays below. Do not search for those APIs in a local project.
|
|
39
|
-
- Sandbox `project.json`: the motion APIs and references below apply. Inspect its
|
|
40
|
-
installed CLI help and `types/fable.d.ts` first; a newer skill does not update the
|
|
41
|
-
renderer. Use supported raw tracks when choreography is unavailable, or explain
|
|
42
|
-
the missing capability. Do not upgrade the shared runtime.
|
|
43
|
-
|
|
44
|
-
Read only the references needed for the selected motion technique. Start with the
|
|
45
|
-
relevant timing or layout contract; do not load all eight references by default.
|
|
46
|
-
|
|
47
|
-
## Motion APIs
|
|
48
|
-
|
|
49
|
-
- Frame choreography: set `motion` on `frame(...)` or `<frame motion={...}>`. It supports named `poses`, local `cues`, `enter`, `settle`, `exit`, and literal `motion.timeline` data. Pose fields are `x`, `y`, `scale`, `scaleX`, `scaleY`, `opacity`, and `rotation`.
|
|
50
|
-
- Raw tracks: set `animate: [{ property, from, to, at, duration, easing }]` or use `keyframes: [{ at, value, easing? }]`. Use raw tracks for properties outside the frame-pose set.
|
|
51
|
-
- Token text motion: `<text motion={{ by: "word", from: { opacity: 0, y: 20 }, at: 0, duration: 0.4, overlap: 0.5, easing: "house" }}>Text</text>`. `by` is `"character" | "word" | "line"`; accepted easing is `"linear" | "ease-out" | "house"`.
|
|
52
|
-
- Shared choreography: one timeline leaf can bind the same progress to multiple immediate child frames through `targets`. A pose-only leaf remains continuously interpolated. If any binding is a `counter`, the whole leaf uses held samples at scene fps, including pose bindings, with at most 256 samples.
|
|
53
|
-
|
|
54
|
-
Choreography compiles into editable native property tracks and bounded text states when the script builds. Rebuilding the script recompiles it; human timeline edits do not rerun choreography.
|
|
55
|
-
|
|
56
|
-
## References
|
|
57
|
-
|
|
58
|
-
- [Timing and phases](references/timing.md)
|
|
59
|
-
- [Easing and sampled curves](references/easing.md)
|
|
60
|
-
- [Token text motion](references/typography.md)
|
|
61
|
-
- [Frame layout and transforms](references/composition.md)
|
|
62
|
-
- [Timelines, targets, and cues](references/causality.md)
|
|
63
|
-
- [Steps and counters](references/stepped.md)
|
|
64
|
-
- [Raw animation forms](references/recipes.md)
|
|
65
|
-
- [Validation and limits](references/qc.md)
|
|
66
|
-
|
|
67
|
-
## Design and timing
|
|
68
|
-
|
|
69
|
-
For motion over edited footage, read [Timing and phases](references/timing.md).
|
|
70
|
-
Decide whether the graphic belongs to one shot or an idea continuing across shots
|
|
71
|
-
before choosing its lifetime. An end-anchored exit follows its frame lifetime;
|
|
72
|
-
it does not discover footage cuts.
|
|
73
|
-
|
|
74
|
-
- Follow the authored direction. Use motion to explain a relationship, evoke a
|
|
75
|
-
feeling, create anticipation or carry visual rhythm. Choose pace, amplitude and
|
|
76
|
-
continuity for that intent and the selected style.
|
|
77
|
-
- Design key visual states with a clear focal hierarchy, deliberate type and enough
|
|
78
|
-
separation to read at delivery size on the intended background.
|
|
79
|
-
- Choreograph attention through changes in position, scale, grouping, imagery or
|
|
80
|
-
type. A comparison can align, an object can transform, a phrase can take over the
|
|
81
|
-
frame, or a sustained movement can establish atmosphere.
|
|
82
|
-
- Move attached plates and labels together. Use independent or staggered movement
|
|
83
|
-
for deliberate attention changes. Give recurring treatments consistent visual
|
|
84
|
-
roles and movement character, with variation suited to each passage.
|
|
85
|
-
- Keep essential copy legible for its reading duration. Continuous movement,
|
|
86
|
-
stepped animation, a steady hold and a decisive cut are valid choices; coordinate
|
|
87
|
-
them so the intended focal element remains clear.
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
# Timelines, targets, and cues
|
|
2
|
-
|
|
3
|
-
`motion.timeline` supports leaves and nested `sequence`, `parallel`, and `stagger` combinators.
|
|
4
|
-
|
|
5
|
-
```js
|
|
6
|
-
const motion = {
|
|
7
|
-
cues: { result: 0.6 },
|
|
8
|
-
timeline: {
|
|
9
|
-
sequence: [
|
|
10
|
-
{ target: "Title", from: { y: 24 }, duration: 0.4 },
|
|
11
|
-
{
|
|
12
|
-
parallel: [
|
|
13
|
-
{ target: "Bar", from: { scaleX: 0 }, duration: 0.3 },
|
|
14
|
-
{ target: "Value", from: { opacity: 0 }, duration: 0.2 },
|
|
15
|
-
],
|
|
16
|
-
},
|
|
17
|
-
],
|
|
18
|
-
gap: 0.1,
|
|
19
|
-
},
|
|
20
|
-
};
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
`sequence` inserts `gap` between children; default gap is `0`. `parallel` lasts to the latest end. `stagger` requires `each` and offsets item `i` by `i * each`. Numeric `at` delays assigned start. `{ cue: "result", offset: 0.1 }` uses the owning frame's local cue.
|
|
24
|
-
|
|
25
|
-
Omit `target` to animate the owner. A target must uniquely name an immediate child frame. Cues and poses are not inherited.
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
# Frame layout and transforms
|
|
2
|
-
|
|
3
|
-
Frame choreography changes pose, not layout geometry.
|
|
4
|
-
|
|
5
|
-
```jsx
|
|
6
|
-
<frame
|
|
7
|
-
x={100}
|
|
8
|
-
y={80}
|
|
9
|
-
width={640}
|
|
10
|
-
height={360}
|
|
11
|
-
origin="center"
|
|
12
|
-
layout="row"
|
|
13
|
-
gap={24}
|
|
14
|
-
motion={{ enter: { from: { x: 40, scale: 0.9 }, duration: 0.5 } }}
|
|
15
|
-
/>
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
Pose `x`/`y` compile to additive `offsetX`/`offsetY`; they do not replace frame coordinates. `scale` is uniform and cannot be combined with `scaleX`/`scaleY`. Rotation is in degrees. Neutral values are `x: 0`, `y: 0`, `scale: 1`, axis scales `1`, `opacity: 1`, and `rotation: 0`.
|
|
19
|
-
|
|
20
|
-
Supported pose fields are limited to `x`, `y`, `scale`, `scaleX`, `scaleY`, `opacity`, and `rotation`. Use raw `animate` tracks for other properties. Use a wrapper frame when two independent transforms must affect the same content.
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
# Easing and sampled curves
|
|
2
|
-
|
|
3
|
-
Frame choreography accepts raw easing names, four-number bezier arrays, and sampled curve objects.
|
|
4
|
-
|
|
5
|
-
```js
|
|
6
|
-
const curves = [
|
|
7
|
-
"house",
|
|
8
|
-
[0.16, 1, 0.3, 1],
|
|
9
|
-
{ kind: "steps", count: 4 },
|
|
10
|
-
{ kind: "overshoot", amount: 1.70158 },
|
|
11
|
-
{ kind: "spring", stiffness: 170, damping: 26, mass: 1 },
|
|
12
|
-
];
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
Raw names are `house`, `ease-out`, `ease-in`, `ease-in-out`, `smooth`, `linear`, `hold`, and `bounce`. Choreography defaults to `ease-out`. Overshoot `amount` defaults to `1.70158`. Spring defaults are stiffness `170`, damping `26`, mass `1`; all spring parameters must be positive.
|
|
16
|
-
|
|
17
|
-
Springs are sampled at least 120 times/second and 16 times/natural cycle. Overshoot is sampled at 120 times/second. Compiled tracks use linear interpolation; no runtime solver runs. Endpoints are exact. Springs fail when endpoint position error exceeds `0.02` or normalized endpoint speed exceeds `0.1`.
|
|
18
|
-
|
|
19
|
-
Opacity must stay within `0..1`; scales cannot become negative.
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
# Validation and limits
|
|
2
|
-
|
|
3
|
-
Include motion quality in the calling workflow's consolidated review of the encoded
|
|
4
|
-
result; using this reference does not add a review round. For standalone work,
|
|
5
|
-
review the completed motion once with its surrounding footage. Assess readable holds,
|
|
6
|
-
hierarchy, subject/caption clearance, entrances and endings against the intended design.
|
|
7
|
-
For edited footage, include continuity across cuts using the behavior in `timing.md`.
|
|
8
|
-
Do not routinely extract or analyze frames for every treatment or cut. When a specific
|
|
9
|
-
flash, carryover, restarted entrance or timing jump is suspected, inspect only the
|
|
10
|
-
relevant consecutive encoded frames and surrounding excerpt. Collect confirmed defects
|
|
11
|
-
and recheck only repairs and affected dependent moments. Valid tracks or sampled
|
|
12
|
-
analysis alone do not prove frame-exact continuity; report actual review coverage.
|
|
13
|
-
|
|
14
|
-
Choreography rejects unknown fields, nulls, nonfinite values, malformed or ambiguous targets, missing poses/cues, invisible spans, and spans outside frame lifetimes.
|
|
15
|
-
|
|
16
|
-
Ownership rules:
|
|
17
|
-
|
|
18
|
-
- Motion and raw tracks cannot own the same property.
|
|
19
|
-
- Position/offset aliases conflict.
|
|
20
|
-
- Uniform and axis-scale aliases conflict.
|
|
21
|
-
- Overlapping choreography segments on one channel fail, including overlaps inside `parallel`.
|
|
22
|
-
- Non-overlapping segments on one channel compile into one chain.
|
|
23
|
-
|
|
24
|
-
Limits per frame motion:
|
|
25
|
-
|
|
26
|
-
- combinator nesting: 8 levels;
|
|
27
|
-
- plans/bindings: 256;
|
|
28
|
-
- compiled keys: 500 per property track;
|
|
29
|
-
- counter-bearing shared leaf: 256 scene-fps samples, including endpoints.
|
|
30
|
-
|
|
31
|
-
Opacity outside `0..1` and negative scale are errors. Limits fail rather than truncate.
|
|
32
|
-
|
|
33
|
-
Choreography is frame-only and recompiles when its authored script rebuilds. Editing compiled tracks on the human timeline does not rerun choreography. Persisted output contains native groups, property tracks, and bounded text states; it introduces no runtime callbacks or new wire format.
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
# Raw animation forms
|
|
2
|
-
|
|
3
|
-
Use `animate` arrays for native properties not covered by frame poses.
|
|
4
|
-
|
|
5
|
-
```js
|
|
6
|
-
const animate = [
|
|
7
|
-
{
|
|
8
|
-
property: "blur",
|
|
9
|
-
from: 12,
|
|
10
|
-
to: 0,
|
|
11
|
-
at: 0.1,
|
|
12
|
-
duration: 0.4,
|
|
13
|
-
easing: "ease-out",
|
|
14
|
-
},
|
|
15
|
-
{
|
|
16
|
-
property: "opacity",
|
|
17
|
-
keyframes: [
|
|
18
|
-
{ at: 0, value: 0, easing: "linear" },
|
|
19
|
-
{ at: 0.2, value: 1 },
|
|
20
|
-
{ at: 1.8, value: 1, easing: "linear" },
|
|
21
|
-
{ at: 2, value: 0 },
|
|
22
|
-
],
|
|
23
|
-
},
|
|
24
|
-
];
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
Track times are seconds from the node's start. `at` defaults to `0`. A keyframe's `easing` controls the segment leaving that keyframe; otherwise the animation easing applies. Values may be numbers or CSS colours.
|
|
28
|
-
|
|
29
|
-
A chain may set `repeat`; each cycle shifts by the chain span and the chain must end where it starts. For effect parameters, inspect the installed Higgsedit types/help first. Current Pi uses `property: "effects/<effectId>/<param>"` and refuses `effectIndex`; use that only when the installed MCP runtime supports it. Do not guess a channel or upgrade the CLI to make an example work.
|
|
30
|
-
|
|
31
|
-
Raw tracks and choreography may coexist only when they own unrelated properties.
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
# Steps and counters
|
|
2
|
-
|
|
3
|
-
Use native step easing for held pose changes:
|
|
4
|
-
|
|
5
|
-
```js
|
|
6
|
-
const stepped = {
|
|
7
|
-
from: { x: 0 },
|
|
8
|
-
to: { x: 120 },
|
|
9
|
-
duration: 1,
|
|
10
|
-
easing: { kind: "steps", count: 4 },
|
|
11
|
-
};
|
|
12
|
-
```
|
|
13
|
-
|
|
14
|
-
`count` must be a positive safe integer.
|
|
15
|
-
|
|
16
|
-
The `{kind: "steps"}` easing object belongs to frame choreography. Raw `animate`
|
|
17
|
-
tracks require sampled keys with `easing: "hold"` on each outgoing segment. Build
|
|
18
|
-
sample times from integer project frames: at 24 fps, every two frames gives 12
|
|
19
|
-
changes per second while footage remains 24 fps. Use the target child's own
|
|
20
|
-
lifetime, at least two distinct keys, and no sample later than its last visible
|
|
21
|
-
frame. Seed procedural variation once during authoring; do not use playback-time
|
|
22
|
-
randomness. Apply a shared schedule to every channel that should step together;
|
|
23
|
-
one held track does not quantize other tracks or shader time. Stepping and idle
|
|
24
|
-
jitter are choices for the requested direction, not defaults for all animation.
|
|
25
|
-
|
|
26
|
-
A counter is available only inside a shared `targets` leaf:
|
|
27
|
-
|
|
28
|
-
```js
|
|
29
|
-
const shared = {
|
|
30
|
-
duration: 0.8,
|
|
31
|
-
targets: [
|
|
32
|
-
{ target: "Bar", from: { scaleX: 0 }, to: { scaleX: 1 } },
|
|
33
|
-
{
|
|
34
|
-
target: "Value",
|
|
35
|
-
counter: { from: 0, to: 100, decimals: 0, suffix: "%" },
|
|
36
|
-
},
|
|
37
|
-
],
|
|
38
|
-
};
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
A counter-bearing leaf samples the shared schedule at scene fps and holds those samples for every binding. Maximum: 256 samples including endpoints. Pose-only leaves remain continuous.
|
|
42
|
-
|
|
43
|
-
`decimals` defaults to `0` and must be an integer `0..6`. `prefix` and `suffix` are single-line strings up to 64 characters. The target must be a fixed-size immediate child frame with `layout="none"` and exactly one full-lifetime, single-line static text child.
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
# Timing and phases
|
|
2
|
-
|
|
3
|
-
## Bind graphics to the picture edit
|
|
4
|
-
|
|
5
|
-
For graphics over edited footage, inspect measured picture cuts, including cuts inside
|
|
6
|
-
source clips. For J/L-cuts, use the picture boundary. Use measured speech anchors only
|
|
7
|
-
for actions tied to spoken words. Standalone animation with neither footage nor speech uses
|
|
8
|
-
its authored composition timeline; it needs neither cut detection nor speech anchors.
|
|
9
|
-
|
|
10
|
-
Choose cut behavior by scope: does the graphic annotate this shot or support an idea
|
|
11
|
-
that continues across shots? A camera cut alone does not end a continuing idea.
|
|
12
|
-
|
|
13
|
-
- **End with the shot:** keep the completed graphic through the last outgoing frame
|
|
14
|
-
and remove it on the first incoming frame. Omit a separate fade-out. A graphic may
|
|
15
|
-
leave earlier when the idea ends and the clean shot is a deliberate readable beat.
|
|
16
|
-
- **Continue across the cut:** the same idea must remain relevant and the graphic
|
|
17
|
-
must fit both shots. Preserve its state and motion clock; do not replay its entrance.
|
|
18
|
-
Reposition on the cut only when placement must change. A subject-attached mark
|
|
19
|
-
needs a verified subject position in the incoming shot.
|
|
20
|
-
|
|
21
|
-
If an unrelated next shot arrives before a complete entrance and reading hold fit,
|
|
22
|
-
simplify the copy or move the treatment; do not spill it into that shot or accelerate
|
|
23
|
-
it into a flash.
|
|
24
|
-
Measure the hold after the last essential element has settled.
|
|
25
|
-
|
|
26
|
-
Treat a nearby graphic entrance/exit and picture cut as one editorial event. Avoid
|
|
27
|
-
`graphic disappears → a few bare frames → cut`: hold to the cut or leave a purposeful
|
|
28
|
-
clean-shot beat. Assess this in the consolidated review described in [QC](qc.md);
|
|
29
|
-
cut proximity alone does not require a separate preview or frame-analysis call.
|
|
30
|
-
|
|
31
|
-
For a hard cut whose first incoming frame is `C`, a shot-bound graphic occupies
|
|
32
|
-
`[startFrame, C)`. Place adjacent graphics on that same frame boundary with no gap or
|
|
33
|
-
overlap. Derive the boundary once at project fps and reuse it; do not independently
|
|
34
|
-
round each layer. Preserve source trim and speech precision. Account for animated
|
|
35
|
-
alpha and masks as well as clip bounds: a composition that lasts to `C` may already
|
|
36
|
-
be invisible.
|
|
37
|
-
|
|
38
|
-
## Native phase semantics
|
|
39
|
-
|
|
40
|
-
`enter`, `settle`, and `exit` require a positive `duration` plus `from` or `to`.
|
|
41
|
-
`exit` is optional; the example below is for a departure within a continuing shot.
|
|
42
|
-
|
|
43
|
-
```js
|
|
44
|
-
const motion = {
|
|
45
|
-
enter: { from: { y: 40, opacity: 0 }, duration: 0.55 },
|
|
46
|
-
settle: { to: { y: 0 }, duration: 0.2 },
|
|
47
|
-
exit: { to: { y: -16, opacity: 0 }, duration: 0.25, anchor: "end" },
|
|
48
|
-
};
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
Defaults:
|
|
52
|
-
|
|
53
|
-
- `enter`: starts at local zero, anchored to start.
|
|
54
|
-
- `settle`: starts after `enter`, or at zero without it; anchored to start.
|
|
55
|
-
- `exit`: ends at the frame end; anchored to end.
|
|
56
|
-
- choreography easing: `"ease-out"`.
|
|
57
|
-
|
|
58
|
-
For start anchors, numeric `at` delays the default start. For end anchors, numeric `at` is lead time before the frame end. End-anchored phases cannot use cues. Motion spans cannot exceed the target frame lifetime. `anchor: "end"` refers to this frame, not the underlying shot or speech phrase.
|
|
59
|
-
|
|
60
|
-
Missing `from` continues the previous settled value or neutral pose. Missing `to` returns to neutral. Values hold before, between, and after phases. Frame lifetimes are half-open.
|