dsh-motion-ui 0.7.0 → 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.
Files changed (51) hide show
  1. package/CHANGELOG.md +59 -0
  2. package/README.md +63 -3
  3. package/VERIFICATION.md +26 -0
  4. package/client.js +876 -272
  5. package/index.js +43 -20
  6. package/lib/assets/mermaid.js +382 -382
  7. package/lib/assets/standalone-runtime.js +1 -1
  8. package/lib/assets/visual.js +13 -13
  9. package/lib/author-expression.js +7 -7
  10. package/lib/authoring-guide.js +3 -17
  11. package/lib/build-info.js +1 -1
  12. package/lib/canvas-design.js +2 -2
  13. package/lib/canvas-export.js +3 -3
  14. package/lib/canvas-system.js +1 -1
  15. package/lib/catalog.js +1 -2
  16. package/lib/delivery.js +1 -1
  17. package/lib/export-runtime-bundle.js +1 -1
  18. package/lib/fence-feedback.js +8 -2
  19. package/lib/freeform.js +4 -10
  20. package/lib/inspection.js +19 -6
  21. package/lib/motion-craft.js +31 -0
  22. package/lib/motion-design-skill.js +23 -0
  23. package/lib/motion-library.js +5 -4
  24. package/lib/normalize-authoring.js +9 -0
  25. package/lib/project-archive.js +16 -0
  26. package/lib/prompt-contract.js +22 -0
  27. package/lib/protocol.js +3 -3
  28. package/lib/refinement.js +36 -3
  29. package/lib/sandbox.js +4 -1
  30. package/lib/scene-entry.js +41 -0
  31. package/lib/style-system.js +2 -2
  32. package/lib/text-guide.js +9 -13
  33. package/lib/third-party/taste-skill-NOTICE.md +10 -0
  34. package/lib/timeline.js +29 -0
  35. package/lib/tool-json.js +5 -0
  36. package/lib/tool-schema.js +7 -7
  37. package/lib/ui-intent.js +4 -15
  38. package/lib/ui-skill.js +19 -26
  39. package/lib/video-tools.js +21 -0
  40. package/lib/video.js +296 -0
  41. package/lib/visual-audit.js +15 -4
  42. package/lib/visual-styles.js +1 -1
  43. package/lib/voice.js +72 -0
  44. package/package.json +17 -9
  45. package/skills/intelligent-ui/SKILL.md +14 -107
  46. package/skills/motion-design/ADAPTER.md +35 -0
  47. package/skills/motion-design/LICENSE +201 -0
  48. package/skills/motion-design/NOTICE.md +9 -0
  49. package/skills/motion-design/SKILL.md +388 -0
  50. package/skills/motion-design/SOURCES.md +16 -0
  51. package/skills/motion-design/upstream.json +8 -0
@@ -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
+ }