dsh-motion-ui 0.7.1 → 0.8.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/CHANGELOG.md +37 -0
- package/README.md +44 -2
- package/VERIFICATION.md +17 -1
- package/client.js +491 -56
- package/index.js +15 -7
- package/lib/assets/mermaid.js +382 -382
- package/lib/assets/standalone-runtime.js +1 -1
- package/lib/assets/visual.js +13 -13
- package/lib/build-info.js +1 -1
- package/lib/canvas-export.js +3 -3
- package/lib/export-runtime-bundle.js +1 -1
- package/lib/freeform.js +2 -2
- package/lib/inspection.js +8 -0
- package/lib/motion-craft.js +31 -0
- package/lib/motion-design-skill.js +23 -0
- package/lib/motion-library.js +4 -2
- package/lib/project-archive.js +16 -0
- package/lib/prompt-contract.js +1 -1
- package/lib/refinement.js +33 -1
- package/lib/sandbox.js +4 -1
- package/lib/timeline.js +29 -0
- package/lib/tool-json.js +5 -0
- package/lib/video-tools.js +21 -0
- package/lib/video.js +296 -0
- package/lib/voice.js +72 -0
- package/package.json +17 -9
- package/skills/motion-design/ADAPTER.md +35 -0
- package/skills/motion-design/LICENSE +201 -0
- package/skills/motion-design/NOTICE.md +9 -0
- package/skills/motion-design/SKILL.md +388 -0
- package/skills/motion-design/SOURCES.md +16 -0
- package/skills/motion-design/upstream.json +8 -0
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
Apache License
|
|
2
|
+
Version 2.0, January 2004
|
|
3
|
+
http://www.apache.org/licenses/
|
|
4
|
+
|
|
5
|
+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
|
6
|
+
|
|
7
|
+
1. Definitions.
|
|
8
|
+
|
|
9
|
+
"License" shall mean the terms and conditions for use, reproduction,
|
|
10
|
+
and distribution as defined by Sections 1 through 9 of this document.
|
|
11
|
+
|
|
12
|
+
"Licensor" shall mean the copyright owner or entity authorized by
|
|
13
|
+
the copyright owner that is granting the License.
|
|
14
|
+
|
|
15
|
+
"Legal Entity" shall mean the union of the acting entity and all
|
|
16
|
+
other entities that control, are controlled by, or are under common
|
|
17
|
+
control with that entity. For the purposes of this definition,
|
|
18
|
+
"control" means (i) the power, direct or indirect, to cause the
|
|
19
|
+
direction or management of such entity, whether by contract or
|
|
20
|
+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
|
21
|
+
outstanding shares, or (iii) beneficial ownership of such entity.
|
|
22
|
+
|
|
23
|
+
"You" (or "Your") shall mean an individual or Legal Entity
|
|
24
|
+
exercising permissions granted by this License.
|
|
25
|
+
|
|
26
|
+
"Source" form shall mean the preferred form for making modifications,
|
|
27
|
+
including but not limited to software source code, documentation
|
|
28
|
+
source, and configuration files.
|
|
29
|
+
|
|
30
|
+
"Object" form shall mean any form resulting from mechanical
|
|
31
|
+
transformation or translation of a Source form, including but
|
|
32
|
+
not limited to compiled object code, generated documentation,
|
|
33
|
+
and conversions to other media types.
|
|
34
|
+
|
|
35
|
+
"Work" shall mean the work of authorship, whether in Source or
|
|
36
|
+
Object form, made available under the License, as indicated by a
|
|
37
|
+
copyright notice that is included in or attached to the work
|
|
38
|
+
(an example is provided in the Appendix below).
|
|
39
|
+
|
|
40
|
+
"Derivative Works" shall mean any work, whether in Source or Object
|
|
41
|
+
form, that is based on (or derived from) the Work and for which the
|
|
42
|
+
editorial revisions, annotations, elaborations, or other modifications
|
|
43
|
+
represent, as a whole, an original work of authorship. For the purposes
|
|
44
|
+
of this License, Derivative Works shall not include works that remain
|
|
45
|
+
separable from, or merely link (or bind by name) to the interfaces of,
|
|
46
|
+
the Work and Derivative Works thereof.
|
|
47
|
+
|
|
48
|
+
"Contribution" shall mean any work of authorship, including
|
|
49
|
+
the original version of the Work and any modifications or additions
|
|
50
|
+
to that Work or Derivative Works thereof, that is intentionally
|
|
51
|
+
submitted to Licensor for inclusion in the Work by the copyright owner
|
|
52
|
+
or by an individual or Legal Entity authorized to submit on behalf of
|
|
53
|
+
the copyright owner. For the purposes of this definition, "submitted"
|
|
54
|
+
means any form of electronic, verbal, or written communication sent
|
|
55
|
+
to the Licensor or its representatives, including but not limited to
|
|
56
|
+
communication on electronic mailing lists, source code control systems,
|
|
57
|
+
and issue tracking systems that are managed by, or on behalf of, the
|
|
58
|
+
Licensor for the purpose of discussing and improving the Work, but
|
|
59
|
+
excluding communication that is conspicuously marked or otherwise
|
|
60
|
+
designated in writing by the copyright owner as "Not a Contribution."
|
|
61
|
+
|
|
62
|
+
"Contributor" shall mean Licensor and any individual or Legal Entity
|
|
63
|
+
on behalf of whom a Contribution has been received by Licensor and
|
|
64
|
+
subsequently incorporated within the Work.
|
|
65
|
+
|
|
66
|
+
2. Grant of Copyright License. Subject to the terms and conditions of
|
|
67
|
+
this License, each Contributor hereby grants to You a perpetual,
|
|
68
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
69
|
+
copyright license to reproduce, prepare Derivative Works of,
|
|
70
|
+
publicly display, publicly perform, sublicense, and distribute the
|
|
71
|
+
Work and such Derivative Works in Source or Object form.
|
|
72
|
+
|
|
73
|
+
3. Grant of Patent License. Subject to the terms and conditions of
|
|
74
|
+
this License, each Contributor hereby grants to You a perpetual,
|
|
75
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
76
|
+
(except as stated in this section) patent license to make, have made,
|
|
77
|
+
use, offer to sell, sell, import, and otherwise transfer the Work,
|
|
78
|
+
where such license applies only to those patent claims licensable
|
|
79
|
+
by such Contributor that are necessarily infringed by their
|
|
80
|
+
Contribution(s) alone or by combination of their Contribution(s)
|
|
81
|
+
with the Work to which such Contribution(s) was submitted. If You
|
|
82
|
+
institute patent litigation against any entity (including a
|
|
83
|
+
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
|
84
|
+
or a Contribution incorporated within the Work constitutes direct
|
|
85
|
+
or contributory patent infringement, then any patent licenses
|
|
86
|
+
granted to You under this License for that Work shall terminate
|
|
87
|
+
as of the date such litigation is filed.
|
|
88
|
+
|
|
89
|
+
4. Redistribution. You may reproduce and distribute copies of the
|
|
90
|
+
Work or Derivative Works thereof in any medium, with or without
|
|
91
|
+
modifications, and in Source or Object form, provided that You
|
|
92
|
+
meet the following conditions:
|
|
93
|
+
|
|
94
|
+
(a) You must give any other recipients of the Work or
|
|
95
|
+
Derivative Works a copy of this License; and
|
|
96
|
+
|
|
97
|
+
(b) You must cause any modified files to carry prominent notices
|
|
98
|
+
stating that You changed the files; and
|
|
99
|
+
|
|
100
|
+
(c) You must retain, in the Source form of any Derivative Works
|
|
101
|
+
that You distribute, all copyright, patent, trademark, and
|
|
102
|
+
attribution notices from the Source form of the Work,
|
|
103
|
+
excluding those notices that do not pertain to any part of
|
|
104
|
+
the Derivative Works; and
|
|
105
|
+
|
|
106
|
+
(d) If the Work includes a "NOTICE" text file as part of its
|
|
107
|
+
distribution, then any Derivative Works that You distribute must
|
|
108
|
+
include a readable copy of the attribution notices contained
|
|
109
|
+
within such NOTICE file, excluding those notices that do not
|
|
110
|
+
pertain to any part of the Derivative Works, in at least one
|
|
111
|
+
of the following places: within a NOTICE text file distributed
|
|
112
|
+
as part of the Derivative Works; within the Source form or
|
|
113
|
+
documentation, if provided along with the Derivative Works; or,
|
|
114
|
+
within a display generated by the Derivative Works, if and
|
|
115
|
+
wherever such third-party notices normally appear. The contents
|
|
116
|
+
of the NOTICE file are for informational purposes only and
|
|
117
|
+
do not modify the License. You may add Your own attribution
|
|
118
|
+
notices within Derivative Works that You distribute, alongside
|
|
119
|
+
or as an addendum to the NOTICE text from the Work, provided
|
|
120
|
+
that such additional attribution notices cannot be construed
|
|
121
|
+
as modifying the License.
|
|
122
|
+
|
|
123
|
+
You may add Your own copyright statement to Your modifications and
|
|
124
|
+
may provide additional or different license terms and conditions
|
|
125
|
+
for use, reproduction, or distribution of Your modifications, or
|
|
126
|
+
for any such Derivative Works as a whole, provided Your use,
|
|
127
|
+
reproduction, and distribution of the Work otherwise complies with
|
|
128
|
+
the conditions stated in this License.
|
|
129
|
+
|
|
130
|
+
5. Submission of Contributions. Unless You explicitly state otherwise,
|
|
131
|
+
any Contribution intentionally submitted for inclusion in the Work
|
|
132
|
+
by You to the Licensor shall be under the terms and conditions of
|
|
133
|
+
this License, without any additional terms or conditions.
|
|
134
|
+
Notwithstanding the above, nothing herein shall supersede or modify
|
|
135
|
+
the terms of any separate license agreement you may have executed
|
|
136
|
+
with Licensor regarding such Contributions.
|
|
137
|
+
|
|
138
|
+
6. Trademarks. This License does not grant permission to use the trade
|
|
139
|
+
names, trademarks, service marks, or product names of the Licensor,
|
|
140
|
+
except as required for describing the origin of the Work and
|
|
141
|
+
reproducing the content of the NOTICE file.
|
|
142
|
+
|
|
143
|
+
7. Disclaimer of Warranty. Unless required by applicable law or
|
|
144
|
+
agreed to in writing, Licensor provides the Work (and each
|
|
145
|
+
Contributor provides its Contributions) on an "AS IS" BASIS,
|
|
146
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
147
|
+
implied, including, without limitation, any warranties or conditions
|
|
148
|
+
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
|
149
|
+
PARTICULAR PURPOSE. You are solely responsible for determining the
|
|
150
|
+
appropriateness of using or redistributing the Work and assume any
|
|
151
|
+
risks associated with Your exercise of permissions under this License.
|
|
152
|
+
|
|
153
|
+
8. Limitation of Liability. In no event and under no legal theory,
|
|
154
|
+
whether in tort (including negligence), contract, or otherwise,
|
|
155
|
+
unless required by applicable law (such as deliberate and grossly
|
|
156
|
+
negligent acts) or agreed to in writing, shall any Contributor be
|
|
157
|
+
liable to You for damages, including any direct, indirect, special,
|
|
158
|
+
incidental, or consequential damages of any character arising as a
|
|
159
|
+
result of this License or out of the use or inability to use the
|
|
160
|
+
Work (including but not limited to damages for loss of goodwill,
|
|
161
|
+
work stoppage, computer failure or malfunction, or any and all
|
|
162
|
+
other commercial damages or losses), even if such Contributor
|
|
163
|
+
has been advised of the possibility of such damages.
|
|
164
|
+
|
|
165
|
+
9. Accepting Warranty or Support. While redistributing the Work or
|
|
166
|
+
Derivative Works thereof, You may choose to offer, and charge a
|
|
167
|
+
fee for, acceptance of support, warranty, indemnity, or other
|
|
168
|
+
liability obligations and/or rights consistent with this License.
|
|
169
|
+
However, in accepting such obligations, You may act only on Your
|
|
170
|
+
own behalf and on Your sole responsibility, not on behalf of any
|
|
171
|
+
other Contributor, and only if You agree to indemnify, defend,
|
|
172
|
+
and hold each Contributor harmless for any liability incurred by,
|
|
173
|
+
or claims asserted against, such Contributor by reason of your
|
|
174
|
+
accepting any such warranty or support.
|
|
175
|
+
|
|
176
|
+
END OF TERMS AND CONDITIONS
|
|
177
|
+
|
|
178
|
+
APPENDIX: How to apply the Apache License to your work.
|
|
179
|
+
|
|
180
|
+
To apply the Apache License to your work, attach the following
|
|
181
|
+
boilerplate notice, with the fields enclosed by brackets "[]"
|
|
182
|
+
replaced with your own identifying information. (Don't include
|
|
183
|
+
the brackets!) The text should be enclosed in the appropriate
|
|
184
|
+
comment syntax for the file format. We also recommend that a
|
|
185
|
+
file or class name and description of purpose be included on the
|
|
186
|
+
same "printed page" as the copyright notice for easier
|
|
187
|
+
identification within third-party archives.
|
|
188
|
+
|
|
189
|
+
Copyright 2026 Open Design contributors
|
|
190
|
+
|
|
191
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
192
|
+
you may not use this file except in compliance with the License.
|
|
193
|
+
You may obtain a copy of the License at
|
|
194
|
+
|
|
195
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
196
|
+
|
|
197
|
+
Unless required by applicable law or agreed to in writing, software
|
|
198
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
199
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
200
|
+
See the License for the specific language governing permissions and
|
|
201
|
+
limitations under the License.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Third-party notice
|
|
2
|
+
|
|
3
|
+
Motion Design skill — Copyright 2026 Open Design contributors.
|
|
4
|
+
|
|
5
|
+
Source: https://github.com/nexu-io/open-design/tree/14fee234e6eb268058fed17ba979d8e22798dd34/skills/motion-design
|
|
6
|
+
|
|
7
|
+
`SKILL.md` and `SOURCES.md` are unmodified upstream files. Their upstream Apache-2.0 license is included as `LICENSE`. `upstream.json` records the pinned source revision and exact skill SHA256.
|
|
8
|
+
|
|
9
|
+
`ADAPTER.md` and the Motion UI reference loader are original Motion UI integration code/documentation. OpenDesign-specific commands and player contracts remain in the original source for completeness; the separate adapter maps them to DSH.
|
|
@@ -0,0 +1,388 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: motion-design
|
|
3
|
+
description: "Apply motion craft to an active task: refine a brief, beat map, visual continuity, typography, pacing, and timeline implementation. Use when planning or improving motion graphics; the host task owns artifact creation, output format, and export."
|
|
4
|
+
triggers:
|
|
5
|
+
- motion design
|
|
6
|
+
- motion graphics
|
|
7
|
+
- 视频动效
|
|
8
|
+
- 动态设计
|
|
9
|
+
- MG动画
|
|
10
|
+
- kinetic typography
|
|
11
|
+
- animated explainer
|
|
12
|
+
od:
|
|
13
|
+
mode: utility
|
|
14
|
+
category: animation-motion
|
|
15
|
+
featured: -100
|
|
16
|
+
example_prompt: Create a 15-second motion film for a focus timer. Show scattered thoughts converging into one clear task, with expressive typography, a continuous visual motif, and a confident closing frame.
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
# Motion Design
|
|
20
|
+
|
|
21
|
+
Use this functional helper to refine the user's brief or work in progress with
|
|
22
|
+
one clear idea expressed through composition, transformation, rhythm, and appropriate sound unless the user requires silence. Apply the relevant craft guidance within the current task; this
|
|
23
|
+
skill is not a rendering template and does not create a project or choose an
|
|
24
|
+
output format. The Motion Design creation route owns those decisions. Quality
|
|
25
|
+
means viewers understand and remember the idea while wanting to watch it move.
|
|
26
|
+
|
|
27
|
+
## Execution context
|
|
28
|
+
|
|
29
|
+
Follow the active host's task route, stage, capability, and delivery contract.
|
|
30
|
+
This skill supplies motion craft; it does not create tool access or change the
|
|
31
|
+
host's workflow. In OD Next, retain its Core, general orchestration, keyed
|
|
32
|
+
production-ready marker, and ship-on-write default. Plan in ordinary language;
|
|
33
|
+
author during production. Never emit Plan Contract or Runtime State blocks,
|
|
34
|
+
request protocol repair, or claim a host-frozen delivery contract. Only actual
|
|
35
|
+
user-requested video-motion production, when the host Core authorizes it,
|
|
36
|
+
permits the bounded video check below. For a video brief (a timed
|
|
37
|
+
film, promo, explainer or showreel), declare BOTH editable HTML source and MP4
|
|
38
|
+
as required deliverables. Rendering the MP4 is Build production and must finish
|
|
39
|
+
before delivery. For pointer/scroll-driven interaction or UI micro-animation,
|
|
40
|
+
deliver runnable HTML/code instead; do not flatten the requested interaction
|
|
41
|
+
into video. Never describe an unrendered video file as complete.
|
|
42
|
+
|
|
43
|
+
Where the active task's tools and scope permit visual iteration, examine the
|
|
44
|
+
opening, key transformation, transition,
|
|
45
|
+
text hold and ending at intended size, plus continuous playback. Correct the
|
|
46
|
+
largest observable defect, then revisit only affected moments. A runnable file
|
|
47
|
+
alone is not proof of successful motion. Distinguish what was observed from
|
|
48
|
+
what was only specified; never invent quality measurements.
|
|
49
|
+
|
|
50
|
+
## Resolve the brief without stalling
|
|
51
|
+
|
|
52
|
+
Use the user's assets, references, script and previous decisions first. Resolve:
|
|
53
|
+
message and audience; destination/aspect; duration; exact copy; must-show assets;
|
|
54
|
+
visual direction; audio; and required output. Ask only when missing information
|
|
55
|
+
would change the story or make the result misleading. Otherwise choose a coherent
|
|
56
|
+
direction and state the meaningful assumption briefly. Do not impose three
|
|
57
|
+
style options or an approval round on a user who asked you to make the piece.
|
|
58
|
+
|
|
59
|
+
For an unconstrained short film, a useful starting point is 12–18 seconds,
|
|
60
|
+
16:9, 1920×1080, 30fps, no invented voiceover, and a replayable source. A portrait
|
|
61
|
+
social brief calls for 9:16. Existing brand, timing, platform and copy override
|
|
62
|
+
these defaults. Do not invent product claims, metrics, testimonials or assets.
|
|
63
|
+
|
|
64
|
+
Create a compact beat map as part of the existing plan, not a second document:
|
|
65
|
+
`time → viewer takeaway → focal object → transformation → copy/audio → exit`.
|
|
66
|
+
Time budget includes entrances, reading holds and exits. Choose a recurring
|
|
67
|
+
object, shape, line or typographic motif that connects the beats.
|
|
68
|
+
|
|
69
|
+
Example mechanism for a focus product (adapt, do not copy as a universal style):
|
|
70
|
+
scattered words orbit → one word attracts the others → orbit becomes a timer →
|
|
71
|
+
timer completes and becomes the wordmark. Each movement changes the meaning;
|
|
72
|
+
four unrelated title cards would lose the mechanism.
|
|
73
|
+
|
|
74
|
+
## Art direction before adding movement
|
|
75
|
+
|
|
76
|
+
Resolve one strong representative frame in the composition before expanding
|
|
77
|
+
all scenes. Choose the actual hierarchy, crop, type, palette, texture and focal
|
|
78
|
+
object. A weak still will not be rescued by particles, camera shake or effects.
|
|
79
|
+
When planning-only, describe this frame; do not create an artifact early.
|
|
80
|
+
|
|
81
|
+
- Use a specific visual premise tied to the subject. "Premium", "cinematic"
|
|
82
|
+
and "modern" alone are not art directions. Define what fills the frame,
|
|
83
|
+
where attention rests, the material language and the contrast structure.
|
|
84
|
+
- Typography is a graphic object. Compose with scale, alignment, line breaks,
|
|
85
|
+
negative space and font character. Choose fonts that cover the actual
|
|
86
|
+
language; use tested fallbacks and wait for font readiness before capture.
|
|
87
|
+
- Prefer a small palette with intentional contrast. No default neon gradient,
|
|
88
|
+
glass cards, glowing orb or beige background independent of the brief.
|
|
89
|
+
- Choose one material/world logic: editorial ink, precise instrument, folded
|
|
90
|
+
paper, tactile collage, vector geometry, painterly field, or another justified
|
|
91
|
+
system. Carry its lighting, edges and textures through the film.
|
|
92
|
+
- A scene may be asymmetric, full-bleed or sparse. Avoid repeatedly centering
|
|
93
|
+
a headline above three cards. Keep subtitles and platform chrome out of the
|
|
94
|
+
focal area; use destination-specific safe margins, not one universal ratio.
|
|
95
|
+
- Supplied product screens and logos retain their proportions and content.
|
|
96
|
+
Crop deliberately rather than stretching. Keep data axes, units and values
|
|
97
|
+
correct through their entire animation.
|
|
98
|
+
|
|
99
|
+
## Choreograph attention
|
|
100
|
+
|
|
101
|
+
Choose the lead action and let supporting motion answer it. Offset independent
|
|
102
|
+
objects when that clarifies reading; move them together when collective motion
|
|
103
|
+
is the idea. Do not mechanically stagger every word or enforce a fixed moving
|
|
104
|
+
fraction of the screen.
|
|
105
|
+
|
|
106
|
+
Use three possible layers, not three mandatory effects:
|
|
107
|
+
1. Primary action carries the idea.
|
|
108
|
+
2. Secondary action conveys weight or causality: a trailing label, a shadow
|
|
109
|
+
settling, an elastic edge, a reaction in a connected object.
|
|
110
|
+
3. Ambient motion provides life only when the scene needs it. Quiet scenes
|
|
111
|
+
and reading holds may be genuinely still.
|
|
112
|
+
|
|
113
|
+
Timing and spacing have different jobs: timing places story beats; spacing
|
|
114
|
+
controls acceleration and weight between them. Suggested starting ranges:
|
|
115
|
+
|
|
116
|
+
| Job | Starting range | Shape |
|
|
117
|
+
| --- | --- | --- |
|
|
118
|
+
| Small accent / punctuation | 120–220ms | decisive snap, then settle |
|
|
119
|
+
| Main element arrival | 350–650ms | quick travel, controlled landing |
|
|
120
|
+
| Meaningful shape transformation | 600–1200ms | readable setup and resolution |
|
|
121
|
+
| Large reveal / camera move | 900–1800ms | sustained trajectory, clear destination |
|
|
122
|
+
|
|
123
|
+
These are film heuristics, not UI response-time limits. Fit distance, mass,
|
|
124
|
+
emotion and soundtrack. Use ease-out for an arrival, ease-in for a motivated
|
|
125
|
+
exit, and smooth acceleration/deceleration for a camera. Constant-speed travel
|
|
126
|
+
is appropriate for conveyors, clocks, scans and intentional mechanical motion.
|
|
127
|
+
Playful material can overshoot; precise instruments should not bounce by default.
|
|
128
|
+
|
|
129
|
+
- Give fast actions preparation and recovery. Anticipation may be tiny, but
|
|
130
|
+
there should be a legible cause rather than an unexplained teleport.
|
|
131
|
+
- Change position on arcs when physical motion calls for it. Use straight
|
|
132
|
+
paths for precision, direction or mechanical intent.
|
|
133
|
+
- Match-cut across shared shapes, track a moving object into the next scene,
|
|
134
|
+
reveal through a meaningful mask, or use a clean cut. Choose transitions
|
|
135
|
+
because of the relationship between beats, not a desire for variety.
|
|
136
|
+
- Preserve velocity and direction at hand-offs. Avoid accidental jumps in
|
|
137
|
+
scale, lighting or object identity. Morph only where topology supports it;
|
|
138
|
+
a designed match-cut is better than an unreadable mesh distortion.
|
|
139
|
+
- Alternate action and rest. Reserve the strongest transformation for the
|
|
140
|
+
central idea; endless maximum intensity makes everything feel equal.
|
|
141
|
+
- Close intentionally: resolve the motif and hold the final message. Loops
|
|
142
|
+
need matching start/end state AND velocity, without a duplicated pause.
|
|
143
|
+
|
|
144
|
+
## Choose a visual grammar
|
|
145
|
+
|
|
146
|
+
**Product / brand film:** build around a real benefit and a concrete action.
|
|
147
|
+
Use actual screens where available, isolate what changes, and carry the brand
|
|
148
|
+
motif into the closing frame. A slow camera move over a static page is supporting
|
|
149
|
+
footage, not the entire demonstration.
|
|
150
|
+
|
|
151
|
+
**Kinetic typography:** let words act out meaning through weight, tracking,
|
|
152
|
+
direction and transformation. Keep a stable reading window; do not rotate,
|
|
153
|
+
blur or scatter every line. Animate a phrase as a unit when word-by-word entry
|
|
154
|
+
would obstruct comprehension. Reveal timing is not reading time.
|
|
155
|
+
|
|
156
|
+
**Explainer / data:** choose spatial metaphors that preserve the causal model.
|
|
157
|
+
Show the object before transforming it; maintain labels while relationships
|
|
158
|
+
change. Reveal axes before values when the scale matters. If narrated, align
|
|
159
|
+
beats to actual supplied or generated audio timing, not guessed timestamps.
|
|
160
|
+
Do not add unrelated decoration to cover a weak explanation.
|
|
161
|
+
|
|
162
|
+
**Art / procedural scene:** distinguish a style's structure from surface noise.
|
|
163
|
+
Define marks, material, palette, composition and one characteristic movement.
|
|
164
|
+
Examples: a woodcut uses cut-line direction and layered ink; a painted night
|
|
165
|
+
uses coherent curved strokes and moving light; paper cutouts use plane depth,
|
|
166
|
+
edge shadows and hinged motion. Seed texture once and move it coherently;
|
|
167
|
+
regenerating every mark each frame causes flicker. Animate elements inside the
|
|
168
|
+
world, not only the camera between static paintings. Human identity and complex
|
|
169
|
+
anatomy should use suitable supplied/generated assets when tools allow; keep
|
|
170
|
+
silhouette, palette and lighting consistent. Never pretend those assets exist.
|
|
171
|
+
|
|
172
|
+
**3D / professional-tool task:** retain the user's existing AE, Blender or
|
|
173
|
+
Remotion project if specified and available. Read its state, edit the smallest
|
|
174
|
+
relevant scene, and retain editable layers/keyframes. A tool-specific pipeline
|
|
175
|
+
is justified by the desired result, not by the name of this skill. Do not make
|
|
176
|
+
installation of AE, Blender, a paid provider or a new framework the default.
|
|
177
|
+
|
|
178
|
+
## Author reliable editable motion
|
|
179
|
+
|
|
180
|
+
For a new Open Design film, use timeline-driven HTML with GSAP and optional
|
|
181
|
+
SVG/Canvas. HTML/SVG suit typography, crisp diagrams and UI; Canvas suits dense
|
|
182
|
+
marks, fields and procedural worlds. Combine them when useful. Preserve an
|
|
183
|
+
existing supported renderer instead of rebuilding it just to fit this default.
|
|
184
|
+
|
|
185
|
+
Keep duration, frame size, palette, type scale, easing and scene timings in one
|
|
186
|
+
small configuration. Group each scene's elements and motion together. Separate
|
|
187
|
+
content/data from drawing. Reuse geometry and cached textures; cap offscreen
|
|
188
|
+
work and particle counts. Keep a scene stable at any requested timestamp.
|
|
189
|
+
|
|
190
|
+
The Open Design video composition contract:
|
|
191
|
+
|
|
192
|
+
```html
|
|
193
|
+
<div id="main" data-composition-id="main" data-start="0"
|
|
194
|
+
data-duration="15" data-width="1920" data-height="1080" data-poster-time="13.5">
|
|
195
|
+
<!-- Real scene elements, sized for this stage. -->
|
|
196
|
+
</div>
|
|
197
|
+
<script>
|
|
198
|
+
// Load GSAP before this block; retain the host's pinned dependency when supplied.
|
|
199
|
+
const duration = 15;
|
|
200
|
+
const tl = gsap.timeline({ paused: true });
|
|
201
|
+
// Define initial states explicitly, then animate scene objects at absolute times.
|
|
202
|
+
// tl.fromTo(...); tl.to(...); Reading holds occupy real time in the timeline.
|
|
203
|
+
const clock = { t: 0 };
|
|
204
|
+
tl.to(clock, { t: duration, duration, ease: 'none' }, 0);
|
|
205
|
+
window.__timelines = { main: tl };
|
|
206
|
+
// A procedural layer must draw from clock.t, not increment state each frame.
|
|
207
|
+
// Video export seeks with timeline callbacks suppressed, so draw from a
|
|
208
|
+
// per-frame loop rather than from onUpdate alone:
|
|
209
|
+
// (function render() { drawWorld(clock.t); requestAnimationFrame(render); })();
|
|
210
|
+
</script>
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
This is a protocol skeleton, not a finished visual template. Author the real
|
|
214
|
+
composition. Root duration, timeline duration, aspect and the brief must agree.
|
|
215
|
+
Use real seconds: the master timeline must keep `timeScale(1)`, no repeat or
|
|
216
|
+
start delay, and its actual `duration()` must equal `data-duration`. The setter
|
|
217
|
+
`tl.duration(seconds)` changes playback speed; it does NOT add a reading hold.
|
|
218
|
+
Use the full-length clock tween above, and keep all tracks within its duration.
|
|
219
|
+
The player and renderer reject inconsistent video clocks before export.
|
|
220
|
+
|
|
221
|
+
For SVG pop/scale entrances, establish a shared origin BEFORE the from state.
|
|
222
|
+
Animate a common group for related shapes (a disk and its shading), or set the
|
|
223
|
+
same `svgOrigin` in both states. Do not set it only in the destination: GSAP
|
|
224
|
+
smooth-origin compensation can offset shapes with different bounding boxes.
|
|
225
|
+
|
|
226
|
+
```js
|
|
227
|
+
function popShape(tl, node, cx, cy, at, duration = 0.45) {
|
|
228
|
+
const svgOrigin = cx + ' ' + cy;
|
|
229
|
+
tl.fromTo(node, { scale: 0, svgOrigin },
|
|
230
|
+
{ scale: 1, svgOrigin, duration, ease: 'back.out(2)' }, at);
|
|
231
|
+
}
|
|
232
|
+
```
|
|
233
|
+
Use the actual composition id consistently. Register timelines before signalling
|
|
234
|
+
readiness; all image/font dependencies need a known ready state. Keep assets
|
|
235
|
+
local when possible and avoid relying on inaccessible remote URLs.
|
|
236
|
+
|
|
237
|
+
Deterministic motion must survive forward/backward seeking: no Date.now-based
|
|
238
|
+
scene state, unseeded randomness, simulation that only works after playing from
|
|
239
|
+
zero, or independent CSS animation competing with the master timeline. Define
|
|
240
|
+
positions and reveals as functions of time, or as seekable timeline tracks.
|
|
241
|
+
Never make visible content depend on timeline callbacks (onUpdate, onComplete);
|
|
242
|
+
the MP4 exporter seeks with them suppressed.
|
|
243
|
+
Audio-reactive motion needs a precomputed envelope or known beat map when exact
|
|
244
|
+
replay matters. Never imply that an arbitrary pulse is analysis of the music.
|
|
245
|
+
|
|
246
|
+
Open Design scaffolds and embeds shared source playback: open the HTML to
|
|
247
|
+
automatically loop the film, with no separate player bar. Click the picture to
|
|
248
|
+
pause/resume or unlock audio blocked by browser autoplay. The internal
|
|
249
|
+
`window.__odMotionPlayer` interface retains play/pause, seek and replay. Preserve its `script[data-od-motion-source-player]`. Do not create
|
|
250
|
+
competing controls or start a second playback clock. The renderer sets
|
|
251
|
+
`window.__odMotionRender` before author scripts to disable preview chrome and
|
|
252
|
+
scaling during capture. The scaffold includes pinned GSAP 3.14.2 at
|
|
253
|
+
`./gsap.min.js`; preserve and reference that local file. No download is needed. Prefer installed/system fonts with Chinese coverage; an unrequested font
|
|
254
|
+
must not block delivery. If an optional download fails, use an available font
|
|
255
|
+
instead of probing more mirrors, installing font tools or creating environments.
|
|
256
|
+
For an existing standalone source without the host player, put controls outside the
|
|
257
|
+
composition and connect them to the same master timeline. Scale the whole stage
|
|
258
|
+
uniformly to fit; do not reflow scene layout when the viewport changes. Controls
|
|
259
|
+
must not appear in the exported frames. Keep a useful poster when reduced motion
|
|
260
|
+
is requested and let the user explicitly start playback.
|
|
261
|
+
|
|
262
|
+
## Plan and produce sound for video
|
|
263
|
+
|
|
264
|
+
For a video motion brief, decide voice, music and effects separately in the
|
|
265
|
+
existing Design Spec and beat map. If the film benefits from music or sound
|
|
266
|
+
accents and the user has not requested silence, add suitable sound proactively.
|
|
267
|
+
“No voiceover” disables speech only; it does not mean no music or effects.
|
|
268
|
+
An explicit silent/muted/no-sound request wins. Choose silence when justified
|
|
269
|
+
by the destination (for example a silent ambient loop), and state that choice.
|
|
270
|
+
This policy belongs to video motion; do not add sound to ordinary prototypes,
|
|
271
|
+
documents, slides or interactive motion unless their brief calls for it.
|
|
272
|
+
|
|
273
|
+
Record the audio decision in the ordinary plan. Declare
|
|
274
|
+
`<meta name="od-motion-audio" content="required">` for an audible film or
|
|
275
|
+
`content="silent"` for intentional silence. This is composition metadata for
|
|
276
|
+
the actual exporter, not a model-output planning contract.
|
|
277
|
+
For `required`, author real local audio assets inside the composition directory:
|
|
278
|
+
use supplied/licensed media, the host audio-generation tool when available, or
|
|
279
|
+
an original synthesized instrumental/effect WAV. Do not invent an asset URL,
|
|
280
|
+
install an unrelated audio environment, or substitute a pulsing visual for sound.
|
|
281
|
+
If required audio production fails, report the blocker instead of delivering
|
|
282
|
+
silence as complete.
|
|
283
|
+
|
|
284
|
+
Declare every track with the renderer's supported timing, for example:
|
|
285
|
+
`<audio src="assets/music.wav" data-start="0" data-duration="15" data-volume="0.3" preload="auto"></audio>`.
|
|
286
|
+
Effects use the same contract with their own start and duration. Keep sources
|
|
287
|
+
local and relative, pre-trim tracks, and avoid loop, playback-rate and media-start
|
|
288
|
+
attributes. Keep music below speech and align accents to the actual beat map.
|
|
289
|
+
Preserve the shared source player: it automatically loops picture and sound, and synchronizes audio to play,
|
|
290
|
+
pause, seek and replay. Do not start a second audio clock or use Web Audio alone, which is
|
|
291
|
+
not an exportable track. The renderer mixes these tracks into the MP4.
|
|
292
|
+
|
|
293
|
+
In the existing bounded video check, verify source audio follows those controls,
|
|
294
|
+
that downloaded MP4 contains an audible audio track, and that key sounds occur
|
|
295
|
+
at the authored times. A file extension or an audio tag alone does not prove
|
|
296
|
+
sound. Silent films remain valid; never require audio for other task types.
|
|
297
|
+
|
|
298
|
+
## Video production and dual delivery
|
|
299
|
+
|
|
300
|
+
For video briefs, use Open Design's existing local HyperFrames renderer during
|
|
301
|
+
Build. It needs no video-generation API key. Do not ask the user to render it
|
|
302
|
+
manually or run a second renderer. Plan declares `hyperframes-html` as the
|
|
303
|
+
production route, editable source as canonical, and MP4 as a required derived
|
|
304
|
+
output. For interactive briefs use `html` and source only.
|
|
305
|
+
|
|
306
|
+
Keep source and MP4 paths in the readable plan and in the composition's MP4
|
|
307
|
+
link. The exporter checks its actual output path and the declared audio policy;
|
|
308
|
+
Open Design does not parse or freeze a model-authored plan. Do not add machine
|
|
309
|
+
blocks or a contract-repair turn.
|
|
310
|
+
|
|
311
|
+
Apply this delivery guidance only to the user's actual current video-motion
|
|
312
|
+
request, including an explicit video-motion request in another project. A
|
|
313
|
+
selected scenario or loaded helper alone does not authorize creating a film.
|
|
314
|
+
Plan-only requests end with the plan; interactive motion and hover/scroll
|
|
315
|
+
animation in a prototype remain runnable HTML. Follow-ups may directly edit an
|
|
316
|
+
existing film; re-render only when the requested change affects the video.
|
|
317
|
+
|
|
318
|
+
1. Scaffold a visible source directory with the native shell tool:
|
|
319
|
+
`"$OD_NODE_BIN" "$OD_BIN" media scaffold --project "$OD_PROJECT_ID" --composition-dir "motion-source/film"`.
|
|
320
|
+
Use a new descriptive directory for a new film; edit the existing source on
|
|
321
|
+
revisions. Keep `hyperframes.json`, `meta.json`, HTML and local assets there.
|
|
322
|
+
2. Author `motion-source/film/index.html`. Its composition root must have
|
|
323
|
+
`data-composition-id="main"`, `data-start="0"`, `data-duration`, `data-width`,
|
|
324
|
+
`data-height` and `data-fps`. Register the seekable master timeline at
|
|
325
|
+
`window.__timelines.main`. Use actual GSAP animations, not a placeholder
|
|
326
|
+
timeline. Keep assets/fonts local and relative to this source directory.
|
|
327
|
+
Include `<meta name="od-motion-output" content="video">` and
|
|
328
|
+
`<link rel="alternate" type="video/mp4" href="../../film.mp4">` in the head.
|
|
329
|
+
The href must identify the actual planned MP4 inside the project. The
|
|
330
|
+
interactive equivalent declares `content="interactive"` and needs no MP4.
|
|
331
|
+
For video, choose a stable, representative moment in your actual timeline
|
|
332
|
+
and declare its time in seconds as `data-poster-time` on that root. It must
|
|
333
|
+
satisfy `0 <= time < data-duration`; avoid an empty opening or a transition.
|
|
334
|
+
Prefer a frame that communicates the product or main idea at thumbnail size.
|
|
335
|
+
The host validates the source/video clock and dimensions and extracts this
|
|
336
|
+
exact frame from the finished MP4. Do not generate a separate invented cover,
|
|
337
|
+
change the video's opening for the cover, or bake preview containers into it.
|
|
338
|
+
3. Render through the host:
|
|
339
|
+
`"$OD_NODE_BIN" "$OD_BIN" media generate --project "$OD_PROJECT_ID" --surface video --model hyperframes-html --composition-dir "motion-source/film" --output "film.mp4"`.
|
|
340
|
+
If it returns a task ID, use `"$OD_NODE_BIN" "$OD_BIN" media wait <id>` and wait for success.
|
|
341
|
+
A queued task, HTML preview or failed command is not a completed film.
|
|
342
|
+
4. Preserve the source and assets, and link BOTH the actual MP4 and the source
|
|
343
|
+
HTML in the final response using project-relative Markdown links. The file
|
|
344
|
+
viewer provides preview/download. On later video edits re-render the same
|
|
345
|
+
linked MP4 so the download matches the current source.
|
|
346
|
+
|
|
347
|
+
If the host reports a renderer failure, preserve the editable source and report
|
|
348
|
+
that blocker truthfully. Never fabricate a download or label HTML-only output
|
|
349
|
+
as a finished video. Only actual user-requested video-motion production, and
|
|
350
|
+
only when the host Core authorizes it, permits this bounded check:
|
|
351
|
+
|
|
352
|
+
- During planning, retain factual invariants and exact required copy in the
|
|
353
|
+
existing Design Spec/beat map. An explainer must preserve the causal mechanism
|
|
354
|
+
and exceptions when shortening subtitles; decorative metaphors are not facts.
|
|
355
|
+
- After the first render, perform one review of the actual source and exported
|
|
356
|
+
video: check the clock/dimensions, compare captions against those invariants,
|
|
357
|
+
and inspect at most three representative frames (opening, key explanation,
|
|
358
|
+
ending). Check related SVG shapes stay aligned. Use available host/browser/
|
|
359
|
+
frame tools and actually view the images; source reading alone is not visual
|
|
360
|
+
evidence. Do not claim a check that tool access did not allow.
|
|
361
|
+
- If that review or the renderer identifies a concrete defect, make at most one
|
|
362
|
+
targeted repair and re-render; recheck only the affected facts/frames. If still
|
|
363
|
+
incorrect or unverifiable, report the limitation instead of certifying it.
|
|
364
|
+
- Do not spawn acceptance agents, score aesthetics, add a separate pipeline
|
|
365
|
+
stage, or repeat an open-ended polish loop. Interactive motion, prototypes,
|
|
366
|
+
slides, documents and other tasks keep their existing ship-on-write policy.
|
|
367
|
+
|
|
368
|
+
## Quality while composing
|
|
369
|
+
|
|
370
|
+
For each beat, account for focal point, motion cause, reading time and exit.
|
|
371
|
+
At a transition, account for both outgoing and incoming states and their overlap.
|
|
372
|
+
At the end, account for resolution, holding time and replay behavior.
|
|
373
|
+
|
|
374
|
+
Use these concrete defect-to-decision pairs while building:
|
|
375
|
+
|
|
376
|
+
| Defect | Better decision |
|
|
377
|
+
| --- | --- |
|
|
378
|
+
| Feels like a slideshow | Carry one object through a meaningful transformation |
|
|
379
|
+
| Everything competes | Choose the lead action; reduce or delay support |
|
|
380
|
+
| No sense of weight | Adjust travel time, acceleration, anticipation and settle |
|
|
381
|
+
| Text is unreadable | Shorten copy only if allowed; increase hold and contrast |
|
|
382
|
+
| Looks generic | Strengthen type, composition and the subject-specific motif |
|
|
383
|
+
| Painterly texture flickers | Seed and cache marks; move a coherent field |
|
|
384
|
+
| Sequence feels monotonous | Vary shot scale and action/hold rhythm with purpose |
|
|
385
|
+
| Looks busy but says little | Remove decorative motion and show the causal action |
|
|
386
|
+
|
|
387
|
+
Do not invent a numeric score to certify aesthetics. Report the usable artifact,
|
|
388
|
+
its duration/aspect, and any missing asset, audio or export capability succinctly.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Design sources
|
|
2
|
+
|
|
3
|
+
This is an original Open Design skill, informed by these public approaches:
|
|
4
|
+
|
|
5
|
+
- https://github.com/alchaincyf/huashu-art-motion — representative-frame-first art direction, motion within a scene, deterministic procedural drawing, and separating aesthetic judgment from technical signals.
|
|
6
|
+
- https://github.com/LottieFiles/motion-design-skill — emotional intent, timing versus spacing, easing, and primary/secondary/ambient choreography.
|
|
7
|
+
- https://github.com/LobzyJay/motion-design-with-claude-and-codex — restraint, specific motion decisions, and preserving the user's working tool.
|
|
8
|
+
|
|
9
|
+
No upstream engine, character assets, sample film, or style-card library is
|
|
10
|
+
vendored. The broad film workflow is adapted to Open Design's existing timeline
|
|
11
|
+
preview/export contract. Heuristics remain defaults, not universal aesthetic laws.
|
|
12
|
+
|
|
13
|
+
The maintained entrypoint is `skills/motion-design/SKILL.md`. The OD Next sealed
|
|
14
|
+
package carries a generated identical copy. From the repository root run
|
|
15
|
+
`pnpm exec tsx scripts/sync-motion-design-skill.ts` after editing it. The daemon's
|
|
16
|
+
motion-design integration test rejects drift and exercises the actual bundle.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
{
|
|
2
|
+
"modified": false,
|
|
3
|
+
"retrieved": "2026-10-17",
|
|
4
|
+
"sha256": "19525f19eb62f0f69924c679e08e9a9c07d5bc378fa1fabd736af26413603b76",
|
|
5
|
+
"path": "skills/motion-design/SKILL.md",
|
|
6
|
+
"upstream": "https://github.com/nexu-io/open-design",
|
|
7
|
+
"commit": "14fee234e6eb268058fed17ba979d8e22798dd34"
|
|
8
|
+
}
|