@indreamai/openclaw-plugin 0.1.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/LICENSE +21 -0
- package/README.md +6 -0
- package/dist/chunk-ENGUNMFI.js +196 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.js +781 -0
- package/dist/setup-entry.d.ts +11 -0
- package/dist/setup-entry.js +20 -0
- package/openclaw.plugin.json +98 -0
- package/package.json +58 -0
- package/skills/indream-editor-json/SKILL.md +157 -0
- package/skills/indream-editor-json/references/asset-mapping.md +147 -0
- package/skills/indream-editor-json/references/common-items.md +280 -0
- package/skills/indream-editor-json/references/editor-state.v1.schema.json +1491 -0
- package/skills/indream-editor-json/references/keyframes.md +102 -0
- package/skills/indream-editor-json/references/material-libraries.md +97 -0
- package/skills/indream-editor-json/references/minimal-editor-state.json +36 -0
- package/skills/indream-editor-json/references/motion-effects-and-transitions.md +235 -0
- package/skills/indream-editor-json/references/recipes.md +122 -0
- package/skills/indream-editor-json/references/structure-and-principles.md +159 -0
- package/skills/indream-editor-json/references/template-catalog.md +45 -0
- package/skills/indream-editor-json/references/templates/chart-showcase.json +654 -0
- package/skills/indream-editor-json/references/templates/gallery-carousel.json +538 -0
- package/skills/indream-editor-json/references/templates/hello-world.json +212 -0
- package/skills/indream-editor-json/references/templates/illustration-board.json +480 -0
- package/skills/indream-editor-json/references/templates/keyframe-motion-lab.json +362 -0
- package/skills/indream-editor-json/references/templates/product-intro.json +614 -0
- package/skills/indream-editor-json/references/templates/subtitle-promo.json +341 -0
- package/skills/indream-editor-json/references/text-and-captions.md +211 -0
- package/skills/indream-editor-json/references/validation-repair.md +134 -0
- package/skills/indream-render-workflow/SKILL.md +57 -0
- package/skills/indream-render-workflow/references/workflow.md +19 -0
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# Adding Keyframes
|
|
2
|
+
|
|
3
|
+
## Mental model
|
|
4
|
+
|
|
5
|
+
Animated number tracks always use:
|
|
6
|
+
|
|
7
|
+
```json
|
|
8
|
+
{
|
|
9
|
+
"value": 120,
|
|
10
|
+
"keyframes": []
|
|
11
|
+
}
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
- `value` is the base value the item rests on
|
|
15
|
+
- `keyframes` inject time-based overrides
|
|
16
|
+
|
|
17
|
+
## Single-keyframe rule of thumb
|
|
18
|
+
|
|
19
|
+
If the item should end at one stable value but begin from another value, a single keyframe is often enough.
|
|
20
|
+
|
|
21
|
+
Example:
|
|
22
|
+
|
|
23
|
+
```json
|
|
24
|
+
{
|
|
25
|
+
"left": {
|
|
26
|
+
"value": 120,
|
|
27
|
+
"keyframes": [
|
|
28
|
+
{ "timeTicks": 0, "value": -220 }
|
|
29
|
+
]
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Interpretation:
|
|
35
|
+
|
|
36
|
+
- at the start of the clip, the item begins off-screen at `-220`
|
|
37
|
+
- it settles to the base `value` of `120`
|
|
38
|
+
|
|
39
|
+
This is the cleanest way to add one entrance keyframe without redesigning the whole item.
|
|
40
|
+
|
|
41
|
+
## Common single-keyframe patterns
|
|
42
|
+
|
|
43
|
+
### One entrance move
|
|
44
|
+
|
|
45
|
+
```json
|
|
46
|
+
{
|
|
47
|
+
"top": {
|
|
48
|
+
"value": 280,
|
|
49
|
+
"keyframes": [
|
|
50
|
+
{ "timeTicks": 0, "value": 360 }
|
|
51
|
+
]
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### One entrance scale pop
|
|
57
|
+
|
|
58
|
+
```json
|
|
59
|
+
{
|
|
60
|
+
"scaleX": {
|
|
61
|
+
"value": 1,
|
|
62
|
+
"keyframes": [
|
|
63
|
+
{ "timeTicks": 0, "value": 0.7 }
|
|
64
|
+
]
|
|
65
|
+
},
|
|
66
|
+
"scaleY": {
|
|
67
|
+
"value": 1,
|
|
68
|
+
"keyframes": [
|
|
69
|
+
{ "timeTicks": 0, "value": 0.7 }
|
|
70
|
+
]
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### One fade-out target
|
|
76
|
+
|
|
77
|
+
```json
|
|
78
|
+
{
|
|
79
|
+
"opacity": {
|
|
80
|
+
"value": 0,
|
|
81
|
+
"keyframes": [
|
|
82
|
+
{ "timeTicks": 0, "value": 1 }
|
|
83
|
+
]
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## When to use two or more keyframes instead
|
|
89
|
+
|
|
90
|
+
Use more than one keyframe when the item needs:
|
|
91
|
+
|
|
92
|
+
- a hold before movement starts
|
|
93
|
+
- multiple motion phases
|
|
94
|
+
- a bounce or overshoot
|
|
95
|
+
- a mid-clip change instead of a simple start-to-rest interpolation
|
|
96
|
+
|
|
97
|
+
## Keyframe authoring rules
|
|
98
|
+
|
|
99
|
+
- keep `timeTicks` inside the item duration
|
|
100
|
+
- add keyframes to only the properties that need motion
|
|
101
|
+
- prefer one property change at a time when debugging
|
|
102
|
+
- if the motion is just a simple entry or exit, compare whether a clip animation would be cleaner than custom keyframes
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# Material Libraries and Sticker Compatibility
|
|
2
|
+
|
|
3
|
+
## Hand-drawn vector material library
|
|
4
|
+
|
|
5
|
+
The safest Open API representation for the hand-drawn vector material library is the `illustration` item.
|
|
6
|
+
|
|
7
|
+
Use it when the user wants:
|
|
8
|
+
|
|
9
|
+
- playful SVG-like artwork
|
|
10
|
+
- decorative vector accents
|
|
11
|
+
- product-friendly hand-drawn scenes
|
|
12
|
+
- explainer or infographic support art
|
|
13
|
+
|
|
14
|
+
Required fields:
|
|
15
|
+
|
|
16
|
+
- `type: "illustration"`
|
|
17
|
+
- `illustrationName`
|
|
18
|
+
- `color`
|
|
19
|
+
- `keepAspectRatio`
|
|
20
|
+
- `rotation`
|
|
21
|
+
- full base geometry fields
|
|
22
|
+
|
|
23
|
+
Always choose `illustrationName` from `indream_editor_capabilities`.
|
|
24
|
+
|
|
25
|
+
## Useful illustration categories
|
|
26
|
+
|
|
27
|
+
The live illustration library is large.
|
|
28
|
+
Use a small curated subset unless the user explicitly asks for a specific name.
|
|
29
|
+
|
|
30
|
+
Good examples from the live capability set:
|
|
31
|
+
|
|
32
|
+
- Greeting and welcome:
|
|
33
|
+
- `IHello`
|
|
34
|
+
- `IWelcome`
|
|
35
|
+
- `IWelcomeAboard`
|
|
36
|
+
- Product and launch:
|
|
37
|
+
- `IProductDemo`
|
|
38
|
+
- `IProductExplainer`
|
|
39
|
+
- `ILaunchDay`
|
|
40
|
+
- `ILaunchEvent`
|
|
41
|
+
- Charts and analytics:
|
|
42
|
+
- `ICharts`
|
|
43
|
+
- `IGrowthChart`
|
|
44
|
+
- `IDataAnalysis`
|
|
45
|
+
- `IAnalytics`
|
|
46
|
+
- Content and media:
|
|
47
|
+
- `IContentCreator`
|
|
48
|
+
- `IVideoTutorial`
|
|
49
|
+
- `IOnlineVideo`
|
|
50
|
+
|
|
51
|
+
## Sticker support in the current Open API
|
|
52
|
+
|
|
53
|
+
Sticker support exists, but it is not fully symmetrical across the editor runtime and the open API schema.
|
|
54
|
+
|
|
55
|
+
Current compatibility facts:
|
|
56
|
+
|
|
57
|
+
- the current open API schema exposes `stickerId` and `stickerVersion` on `image` items
|
|
58
|
+
- the editor runtime also carries sticker metadata on `lottie` items in some internal flows
|
|
59
|
+
- the current open API capabilities payload does not expose a sticker catalog or importable sticker definitions
|
|
60
|
+
|
|
61
|
+
That means you should not invent sticker identifiers.
|
|
62
|
+
|
|
63
|
+
## Safe sticker authoring rules
|
|
64
|
+
|
|
65
|
+
Only add `stickerId` and `stickerVersion` when one of these is true:
|
|
66
|
+
|
|
67
|
+
- the values come from an existing editor draft
|
|
68
|
+
- the values come from an internal sticker import flow
|
|
69
|
+
- the user explicitly supplied known-good sticker metadata
|
|
70
|
+
|
|
71
|
+
If none of that is available, use one of these safe fallbacks instead:
|
|
72
|
+
|
|
73
|
+
- a normal `image` item for a static sticker-like badge
|
|
74
|
+
- a `lottie` item for an animated badge
|
|
75
|
+
- an `illustration` item for a curated vector decoration
|
|
76
|
+
|
|
77
|
+
## Open API-safe fallback patterns
|
|
78
|
+
|
|
79
|
+
### Static sticker-like badge
|
|
80
|
+
|
|
81
|
+
Use an `image` item backed by a transparent PNG asset.
|
|
82
|
+
Do not attach fake sticker metadata.
|
|
83
|
+
|
|
84
|
+
### Animated sticker-like badge
|
|
85
|
+
|
|
86
|
+
Use a `lottie` item backed by a real lottie asset.
|
|
87
|
+
Do not attach sticker metadata unless it came from a trusted source.
|
|
88
|
+
|
|
89
|
+
### Library illustration
|
|
90
|
+
|
|
91
|
+
Use an `illustration` item when the user wants decorative hand-drawn art and no specific sticker catalog entry is required.
|
|
92
|
+
|
|
93
|
+
## Practical guidance for the skill
|
|
94
|
+
|
|
95
|
+
- Prefer `illustration` for reusable hand-drawn vector art.
|
|
96
|
+
- Prefer uploaded image overlays for portable sticker-like decorations.
|
|
97
|
+
- Treat real sticker metadata as compatibility-sensitive and source-dependent.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compositionWidth": 1920,
|
|
3
|
+
"compositionHeight": 1080,
|
|
4
|
+
"timebaseTicksPerSecond": 240000,
|
|
5
|
+
"tracks": [
|
|
6
|
+
{
|
|
7
|
+
"id": "track-1",
|
|
8
|
+
"hidden": false,
|
|
9
|
+
"muted": false,
|
|
10
|
+
"items": ["item-solid-1"]
|
|
11
|
+
}
|
|
12
|
+
],
|
|
13
|
+
"assets": {},
|
|
14
|
+
"items": {
|
|
15
|
+
"item-solid-1": {
|
|
16
|
+
"id": "item-solid-1",
|
|
17
|
+
"type": "solid",
|
|
18
|
+
"color": "#111827",
|
|
19
|
+
"shape": "rectangle",
|
|
20
|
+
"startTicks": 0,
|
|
21
|
+
"durationTicks": 240000,
|
|
22
|
+
"top": { "value": 0, "keyframes": [] },
|
|
23
|
+
"left": { "value": 0, "keyframes": [] },
|
|
24
|
+
"width": { "value": 1920, "keyframes": [] },
|
|
25
|
+
"height": { "value": 1080, "keyframes": [] },
|
|
26
|
+
"scaleX": { "value": 1, "keyframes": [] },
|
|
27
|
+
"scaleY": { "value": 1, "keyframes": [] },
|
|
28
|
+
"opacity": { "value": 1, "keyframes": [] },
|
|
29
|
+
"isDraggingInTimeline": false,
|
|
30
|
+
"borderRadius": { "value": 0, "keyframes": [] },
|
|
31
|
+
"rotation": { "value": 0, "keyframes": [] },
|
|
32
|
+
"keepAspectRatio": false
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
"transitions": {}
|
|
36
|
+
}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
# Motion, Effects, Filters, and Transitions
|
|
2
|
+
|
|
3
|
+
## Clip animations
|
|
4
|
+
|
|
5
|
+
Many visual items can use clip-level `animations` with `in` and `out` keys.
|
|
6
|
+
|
|
7
|
+
Supported animation types:
|
|
8
|
+
|
|
9
|
+
- `fade`
|
|
10
|
+
- `slide-up`
|
|
11
|
+
- `slide-down`
|
|
12
|
+
- `slide-left`
|
|
13
|
+
- `slide-right`
|
|
14
|
+
- `zoom-in`
|
|
15
|
+
- `zoom-out`
|
|
16
|
+
|
|
17
|
+
Animation shape:
|
|
18
|
+
|
|
19
|
+
```json
|
|
20
|
+
{
|
|
21
|
+
"type": "fade",
|
|
22
|
+
"durationTicks": 24,
|
|
23
|
+
"easing": "ease-in-out"
|
|
24
|
+
}
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Supported easing values:
|
|
28
|
+
|
|
29
|
+
- `linear`
|
|
30
|
+
- `ease-in`
|
|
31
|
+
- `ease-out`
|
|
32
|
+
- `ease-in-out`
|
|
33
|
+
|
|
34
|
+
Use clip animations for:
|
|
35
|
+
|
|
36
|
+
- scene entrance or exit
|
|
37
|
+
- lower-third fly-ins
|
|
38
|
+
- logo pop-ins
|
|
39
|
+
- image or product zooms
|
|
40
|
+
|
|
41
|
+
## Keyframed motion
|
|
42
|
+
|
|
43
|
+
Use animated number tracks when the user needs motion that clip animations cannot express cleanly, such as:
|
|
44
|
+
|
|
45
|
+
- moving an item across the screen
|
|
46
|
+
- scaling over time
|
|
47
|
+
- opacity ramps
|
|
48
|
+
- subtle rotation
|
|
49
|
+
|
|
50
|
+
Example:
|
|
51
|
+
|
|
52
|
+
```json
|
|
53
|
+
{
|
|
54
|
+
"left": {
|
|
55
|
+
"value": 120,
|
|
56
|
+
"keyframes": [
|
|
57
|
+
{ "timeTicks": 0, "value": -160 },
|
|
58
|
+
{ "timeTicks": 24, "value": 120 }
|
|
59
|
+
]
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Practical rules:
|
|
65
|
+
|
|
66
|
+
- Keep keyframe times within the item's duration window.
|
|
67
|
+
- Use a small number of keyframes unless the motion genuinely needs more.
|
|
68
|
+
- Prefer clip animations for simple in or out motion, and keyframes for custom paths or multi-stage motion.
|
|
69
|
+
|
|
70
|
+
## Caption animations
|
|
71
|
+
|
|
72
|
+
`text` and `captions` items support `captionAnimations` with `in`, `out`, and `loop`.
|
|
73
|
+
|
|
74
|
+
Supported animation names:
|
|
75
|
+
|
|
76
|
+
- `converge`
|
|
77
|
+
- `elastic-pop`
|
|
78
|
+
- `typewriter`
|
|
79
|
+
- `lay-down`
|
|
80
|
+
- `center-type-out`
|
|
81
|
+
- `curtain-close`
|
|
82
|
+
- `jitter`
|
|
83
|
+
- `rainbow`
|
|
84
|
+
- `sweep-shine`
|
|
85
|
+
|
|
86
|
+
Suggested usage:
|
|
87
|
+
|
|
88
|
+
- `in` for entry emphasis
|
|
89
|
+
- `loop` for ongoing energy on short social clips
|
|
90
|
+
- `out` for final subtitle departure
|
|
91
|
+
- For `captions` items, use one short `in` animation as the production-safe default, then add `loop` or `out` only after a real export probe.
|
|
92
|
+
|
|
93
|
+
Avoid long looping animations on dense subtitle tracks unless the user explicitly wants a high-energy style.
|
|
94
|
+
|
|
95
|
+
## Effects
|
|
96
|
+
|
|
97
|
+
Effect items are time-ranged overlays.
|
|
98
|
+
|
|
99
|
+
Supported schema effect types:
|
|
100
|
+
|
|
101
|
+
- `flash-to-black`
|
|
102
|
+
- `blur`
|
|
103
|
+
- `blurred-opening`
|
|
104
|
+
- `fade-in`
|
|
105
|
+
- `fade-out`
|
|
106
|
+
|
|
107
|
+
Use effects for:
|
|
108
|
+
|
|
109
|
+
- opening blur reveals
|
|
110
|
+
- emphasis moments
|
|
111
|
+
- flash punctuation
|
|
112
|
+
- brief visual bridges between scenes
|
|
113
|
+
|
|
114
|
+
## Filters
|
|
115
|
+
|
|
116
|
+
Filter items are time-ranged look treatments.
|
|
117
|
+
|
|
118
|
+
Supported schema filter types:
|
|
119
|
+
|
|
120
|
+
- `verdant-glow`
|
|
121
|
+
- `cyberpunk-neon`
|
|
122
|
+
- `vaporwave-blue`
|
|
123
|
+
- `sunset-orange`
|
|
124
|
+
- `lemon-cyan`
|
|
125
|
+
- `absolute-red`
|
|
126
|
+
- `sakura-pink`
|
|
127
|
+
- `twilight-dusk`
|
|
128
|
+
|
|
129
|
+
Use filters for:
|
|
130
|
+
|
|
131
|
+
- full-scene color treatment
|
|
132
|
+
- short stylized moments
|
|
133
|
+
- look changes that should not affect the whole timeline
|
|
134
|
+
|
|
135
|
+
`params.blend` is a common example for partial application, but only use additional params that the product actually supports.
|
|
136
|
+
|
|
137
|
+
## Transitions
|
|
138
|
+
|
|
139
|
+
Transitions connect two adjacent clips on the same track.
|
|
140
|
+
|
|
141
|
+
Required fields:
|
|
142
|
+
|
|
143
|
+
- `id`
|
|
144
|
+
- `trackId`
|
|
145
|
+
- `fromClipId`
|
|
146
|
+
- `toClipId`
|
|
147
|
+
- `type`
|
|
148
|
+
- `durationTicks`
|
|
149
|
+
|
|
150
|
+
Supported transition types:
|
|
151
|
+
|
|
152
|
+
- `fade`
|
|
153
|
+
- `slide`
|
|
154
|
+
- `wipe`
|
|
155
|
+
- `flip`
|
|
156
|
+
- `clock-wipe`
|
|
157
|
+
- `iris`
|
|
158
|
+
|
|
159
|
+
Useful live parameter patterns:
|
|
160
|
+
|
|
161
|
+
- `slide` with `params.direction`:
|
|
162
|
+
- `from-left`
|
|
163
|
+
- `from-right`
|
|
164
|
+
- `from-top`
|
|
165
|
+
- `from-bottom`
|
|
166
|
+
- `wipe` with `params.direction`:
|
|
167
|
+
- `from-left`
|
|
168
|
+
- `from-top-left`
|
|
169
|
+
- `from-top`
|
|
170
|
+
- `from-top-right`
|
|
171
|
+
- `from-right`
|
|
172
|
+
- `from-bottom-right`
|
|
173
|
+
- `from-bottom`
|
|
174
|
+
- `from-bottom-left`
|
|
175
|
+
- `flip` with `params.direction`:
|
|
176
|
+
- `from-left`
|
|
177
|
+
- `from-right`
|
|
178
|
+
- `from-top`
|
|
179
|
+
- `from-bottom`
|
|
180
|
+
|
|
181
|
+
Common optional fields:
|
|
182
|
+
|
|
183
|
+
- `easing`
|
|
184
|
+
- `params`
|
|
185
|
+
|
|
186
|
+
Transition rules:
|
|
187
|
+
|
|
188
|
+
- only use transitions between neighboring clips in one `track.items[]`
|
|
189
|
+
- do not span clips on different tracks
|
|
190
|
+
- do not use transitions as a replacement for effect items
|
|
191
|
+
- do not add transitions when the edit is a hard cut unless the user asked for a transition
|
|
192
|
+
|
|
193
|
+
## Motion design guidelines
|
|
194
|
+
|
|
195
|
+
### Conservative commercial style
|
|
196
|
+
|
|
197
|
+
Use:
|
|
198
|
+
|
|
199
|
+
- one transition family
|
|
200
|
+
- light fade or slide-in clip animations
|
|
201
|
+
- no more than one persistent filter style
|
|
202
|
+
- limited caption animation
|
|
203
|
+
|
|
204
|
+
### Flashy social short
|
|
205
|
+
|
|
206
|
+
Use:
|
|
207
|
+
|
|
208
|
+
- stronger caption animation
|
|
209
|
+
- punchy transition choices
|
|
210
|
+
- selective filters on highlight moments
|
|
211
|
+
- fast but readable motion on text and stickers
|
|
212
|
+
|
|
213
|
+
### Tutorial or explainer
|
|
214
|
+
|
|
215
|
+
Use:
|
|
216
|
+
|
|
217
|
+
- minimal transitions
|
|
218
|
+
- consistent lower-third motion
|
|
219
|
+
- stable subtitles
|
|
220
|
+
- clear chart or annotation animation
|
|
221
|
+
|
|
222
|
+
## Live defaults worth reusing
|
|
223
|
+
|
|
224
|
+
Real capability responses currently expose useful defaults that are safe to mirror:
|
|
225
|
+
|
|
226
|
+
- `blurred-opening` effect often uses `params.maxBlurPx: 24`
|
|
227
|
+
- `flash-to-black` effect may use:
|
|
228
|
+
- `brightFrames`
|
|
229
|
+
- `darkFrames`
|
|
230
|
+
- `maxOpacity`
|
|
231
|
+
- `tailDarkFrames`
|
|
232
|
+
- filters commonly expose a `blend` value in `params`
|
|
233
|
+
|
|
234
|
+
Use these only when they match the user's intent.
|
|
235
|
+
Do not add extra params blindly when a simpler default gets the job done.
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
# Practical Recipes
|
|
2
|
+
|
|
3
|
+
Use these as planning patterns, not as rigid templates.
|
|
4
|
+
|
|
5
|
+
## Recipe: sequential slideshow with transitions
|
|
6
|
+
|
|
7
|
+
Use when the user wants:
|
|
8
|
+
|
|
9
|
+
- multiple still images
|
|
10
|
+
- one after another
|
|
11
|
+
- gentle scene changes
|
|
12
|
+
|
|
13
|
+
Recommended structure:
|
|
14
|
+
|
|
15
|
+
- one visual track with back-to-back image or solid items
|
|
16
|
+
- transitions between each adjacent pair
|
|
17
|
+
- optional text overlay track for titles
|
|
18
|
+
|
|
19
|
+
Recommended motion:
|
|
20
|
+
|
|
21
|
+
- subtle `fade` or `zoom-in` clip animation
|
|
22
|
+
- `fade` transition unless the user wants a stronger effect
|
|
23
|
+
|
|
24
|
+
## Recipe: talking-head short with subtitles
|
|
25
|
+
|
|
26
|
+
Use when the user wants:
|
|
27
|
+
|
|
28
|
+
- primary video
|
|
29
|
+
- styled subtitles
|
|
30
|
+
- optional title and CTA overlays
|
|
31
|
+
|
|
32
|
+
Recommended structure:
|
|
33
|
+
|
|
34
|
+
- one track for the main `video` item
|
|
35
|
+
- one track for a `captions` item
|
|
36
|
+
- optional overlay track for title card or end card
|
|
37
|
+
- optional `audio` item for background music
|
|
38
|
+
|
|
39
|
+
Recommended motion:
|
|
40
|
+
|
|
41
|
+
- minimal clip animation on the main video
|
|
42
|
+
- one readable subtitle style
|
|
43
|
+
- optional `captionAnimations.in` for energy
|
|
44
|
+
|
|
45
|
+
## Recipe: product promo with layered visuals
|
|
46
|
+
|
|
47
|
+
Use when the user wants:
|
|
48
|
+
|
|
49
|
+
- a hero image or video
|
|
50
|
+
- decorative shapes
|
|
51
|
+
- motion callouts
|
|
52
|
+
- logo or feature badges
|
|
53
|
+
|
|
54
|
+
Recommended structure:
|
|
55
|
+
|
|
56
|
+
- main media track
|
|
57
|
+
- one overlay track for `solid` and `illustration` items
|
|
58
|
+
- one overlay track for `text` items
|
|
59
|
+
- optional filter or effect items for emphasis windows
|
|
60
|
+
|
|
61
|
+
Recommended motion:
|
|
62
|
+
|
|
63
|
+
- slide or zoom clip animations on text and badges
|
|
64
|
+
- keyframed movement for callout entrances
|
|
65
|
+
- transitions only between major scene changes
|
|
66
|
+
|
|
67
|
+
## Recipe: text-only kinetic promo
|
|
68
|
+
|
|
69
|
+
Use when the user wants:
|
|
70
|
+
|
|
71
|
+
- no footage
|
|
72
|
+
- bold text-driven storytelling
|
|
73
|
+
- heavy subtitle-like motion
|
|
74
|
+
|
|
75
|
+
Recommended structure:
|
|
76
|
+
|
|
77
|
+
- `solid` background item or `globalBackground`
|
|
78
|
+
- multiple `text` items on one or more tracks
|
|
79
|
+
- optional `illustration` or `chart` items
|
|
80
|
+
|
|
81
|
+
Recommended motion:
|
|
82
|
+
|
|
83
|
+
- `captionAnimations` on headline text
|
|
84
|
+
- keyframed position and opacity for custom pacing
|
|
85
|
+
- occasional effect windows for emphasis
|
|
86
|
+
|
|
87
|
+
## Recipe: clean data slide
|
|
88
|
+
|
|
89
|
+
Use when the user wants:
|
|
90
|
+
|
|
91
|
+
- business metrics
|
|
92
|
+
- clean title and body copy
|
|
93
|
+
- consistent visual colors
|
|
94
|
+
|
|
95
|
+
Recommended structure:
|
|
96
|
+
|
|
97
|
+
- background `solid` or `globalBackground`
|
|
98
|
+
- one `chart` item
|
|
99
|
+
- one or more `text` items
|
|
100
|
+
- optional `illustration` item
|
|
101
|
+
|
|
102
|
+
Recommended motion:
|
|
103
|
+
|
|
104
|
+
- modest clip animation on chart and title
|
|
105
|
+
- avoid flashy caption animation unless the visual tone allows it
|
|
106
|
+
|
|
107
|
+
## Recipe: template-driven cover
|
|
108
|
+
|
|
109
|
+
Use when the user wants:
|
|
110
|
+
|
|
111
|
+
- a known reusable template
|
|
112
|
+
- exact template-driven nodes
|
|
113
|
+
|
|
114
|
+
Recommended structure:
|
|
115
|
+
|
|
116
|
+
- one `text-template` item with validated `nodes`
|
|
117
|
+
- optional supporting tracks for extra text or stickers if the product supports them
|
|
118
|
+
|
|
119
|
+
Important:
|
|
120
|
+
|
|
121
|
+
- only use this recipe when the template contract is known
|
|
122
|
+
- otherwise fall back to standard `text`, `image`, and `solid` items
|