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.
@@ -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
+ }