@anvpx/motion 0.0.0-stage → 0.1.1
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/CATALOG.md +301 -0
- package/LICENSE +21 -0
- package/README.md +95 -2
- package/assets.json +37 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/main.d.ts +2 -0
- package/dist/main.js +46 -0
- package/icons/LICENSE-lucide +43 -0
- package/icons/icons.json +2711 -0
- package/icons/licences.json +1521 -0
- package/luts/LICENSE-CC0.txt +20 -0
- package/luts/cool.cube +520 -0
- package/luts/noir.cube +520 -0
- package/luts/warm.cube +520 -0
- package/music/LICENSE-CC0.txt +32 -0
- package/music/bed-full.wav +0 -0
- package/music/bed.wav +0 -0
- package/package.json +69 -3
- package/packs/INDEX.md +22 -0
- package/packs/painted/checklist.md +30 -0
- package/packs/painted/examples/dry-ink/storyboard.json +88 -0
- package/packs/painted/examples/oil/storyboard.json +89 -0
- package/packs/painted/examples/shape-carry/storyboard.json +112 -0
- package/packs/painted/examples/stacked-beat/storyboard.json +106 -0
- package/packs/painted/examples/staged-read/storyboard.json +105 -0
- package/packs/painted/examples/watercolour/storyboard.json +79 -0
- package/packs/painted/look.md +71 -0
- package/packs/painted/pack.json +46 -0
- package/packs/painted/review.md +12 -0
- package/packs/painted/voice.md +30 -0
- package/plugins/motion-kit/.claude-plugin/plugin.json +5 -0
- package/plugins/motion-kit/README.md +39 -0
- package/plugins/motion-kit/commands/mk-draft.md +13 -0
- package/plugins/motion-kit/commands/mk-new.md +15 -0
- package/plugins/motion-kit/commands/mk-render.md +14 -0
- package/plugins/motion-kit/skills/motion-kit/SKILL.md +81 -0
- package/plugins/motion-kit/skills/motion-kit/references/authoring-scene.md +48 -0
- package/plugins/motion-kit/skills/motion-kit/references/authoring-style.md +19 -0
- package/plugins/motion-kit/skills/motion-kit/references/common-mistakes.md +73 -0
- package/plugins/motion-kit/skills/motion-kit/references/content-pack.md +69 -0
- package/plugins/motion-kit/skills/motion-kit/references/craft-color.md +50 -0
- package/plugins/motion-kit/skills/motion-kit/references/craft-composition.md +52 -0
- package/plugins/motion-kit/skills/motion-kit/references/craft-critique.md +68 -0
- package/plugins/motion-kit/skills/motion-kit/references/craft-motion.md +55 -0
- package/plugins/motion-kit/skills/motion-kit/references/craft-narrative.md +54 -0
- package/plugins/motion-kit/skills/motion-kit/references/craft-sound.md +53 -0
- package/plugins/motion-kit/skills/motion-kit/references/craft-type.md +54 -0
- package/plugins/motion-kit/skills/motion-kit/references/critique-repair.md +46 -0
- package/plugins/motion-kit/skills/motion-kit/references/decision-packet.md +59 -0
- package/plugins/motion-kit/skills/motion-kit/references/direction.md +84 -0
- package/plugins/motion-kit/skills/motion-kit/references/faux-ui.md +39 -0
- package/plugins/motion-kit/skills/motion-kit/references/free-storyboard.md +15 -0
- package/plugins/motion-kit/skills/motion-kit/references/intake.md +44 -0
- package/plugins/motion-kit/skills/motion-kit/references/knowledge-routing.md +58 -0
- package/plugins/motion-kit/skills/motion-kit/references/outline.md +34 -0
- package/plugins/motion-kit/skills/motion-kit/references/patching.md +50 -0
- package/plugins/motion-kit/skills/motion-kit/references/patterns.md +55 -0
- package/plugins/motion-kit/skills/motion-kit/references/quality-bar.md +61 -0
- package/plugins/motion-kit/skills/motion-kit/references/review.md +8 -0
- package/plugins/motion-kit/skills/motion-kit/references/scene-recipes.md +300 -0
- package/plugins/motion-kit/skills/motion-kit/references/setup.md +16 -0
- package/plugins/motion-kit/skills/motion-kit/references/slop.md +40 -0
- package/plugins/motion-kit/skills/motion-kit/references/storyboard-json.md +121 -0
- package/plugins/motion-kit/skills/motion-kit/references/themes.md +15 -0
- package/plugins/motion-kit/skills/motion-kit/references/troubleshooting.md +55 -0
- package/plugins/motion-kit/skills/motion-kit/references/voice.md +61 -0
- package/plugins/motion-kit/skills/motion-kit/references/worked-decisions.md +178 -0
- package/plugins/motion-kit/skills/motion-kit/references/worked-example.md +170 -0
- package/shared/themes/README.md +5 -0
- package/shared/themes/bold-dark.json +362 -0
- package/shared/themes/bold-light.json +362 -0
- package/shared/themes/calm-dark.json +362 -0
- package/shared/themes/calm-light.json +362 -0
- package/shared/themes/data-dark.json +360 -0
- package/shared/themes/data-light.json +360 -0
- package/shared/themes/editorial-dark.json +353 -0
- package/shared/themes/editorial-light.json +353 -0
- package/shared/themes/fjord-dark.json +124 -0
- package/shared/themes/fjord-light.json +124 -0
- package/shared/themes/playful-dark.json +362 -0
- package/shared/themes/playful-light.json +362 -0
- package/shared/themes/pop-dark.json +352 -0
- package/shared/themes/pop-light.json +352 -0
- package/shared/themes/tech-dark.json +360 -0
- package/shared/themes/tech-light.json +360 -0
- package/shared/themes/warm-dark.json +368 -0
- package/shared/themes/warm-light.json +368 -0
- package/skills/motion-kit/SKILL.md +81 -0
- package/skills/motion-kit/references/authoring-scene.md +48 -0
- package/skills/motion-kit/references/authoring-style.md +19 -0
- package/skills/motion-kit/references/common-mistakes.md +73 -0
- package/skills/motion-kit/references/content-pack.md +69 -0
- package/skills/motion-kit/references/craft-color.md +50 -0
- package/skills/motion-kit/references/craft-composition.md +52 -0
- package/skills/motion-kit/references/craft-critique.md +68 -0
- package/skills/motion-kit/references/craft-motion.md +55 -0
- package/skills/motion-kit/references/craft-narrative.md +54 -0
- package/skills/motion-kit/references/craft-sound.md +53 -0
- package/skills/motion-kit/references/craft-type.md +54 -0
- package/skills/motion-kit/references/critique-repair.md +46 -0
- package/skills/motion-kit/references/decision-packet.md +59 -0
- package/skills/motion-kit/references/direction.md +84 -0
- package/skills/motion-kit/references/faux-ui.md +39 -0
- package/skills/motion-kit/references/free-storyboard.md +15 -0
- package/skills/motion-kit/references/intake.md +44 -0
- package/skills/motion-kit/references/knowledge-routing.md +58 -0
- package/skills/motion-kit/references/outline.md +34 -0
- package/skills/motion-kit/references/patching.md +50 -0
- package/skills/motion-kit/references/patterns.md +55 -0
- package/skills/motion-kit/references/quality-bar.md +61 -0
- package/skills/motion-kit/references/review.md +8 -0
- package/skills/motion-kit/references/scene-recipes.md +300 -0
- package/skills/motion-kit/references/setup.md +16 -0
- package/skills/motion-kit/references/slop.md +40 -0
- package/skills/motion-kit/references/storyboard-json.md +121 -0
- package/skills/motion-kit/references/themes.md +15 -0
- package/skills/motion-kit/references/troubleshooting.md +55 -0
- package/skills/motion-kit/references/voice.md +61 -0
- package/skills/motion-kit/references/worked-decisions.md +178 -0
- package/skills/motion-kit/references/worked-example.md +170 -0
- package/stopwords.json +65 -0
- package/templates/compare/blueprints/versus.json +79 -0
- package/templates/compare/copy.md +18 -0
- package/templates/compare/pacing.json +15 -0
- package/templates/compare/previews/versus.png +0 -0
- package/templates/compare/styles/editorial.json +6 -0
- package/templates/compare/styles/punchy.json +6 -0
- package/templates/compare/styles/tidy.json +6 -0
- package/templates/compare/template.json +52 -0
- package/templates/datastory/blueprints/data-story.json +95 -0
- package/templates/datastory/blueprints/infographic.json +106 -0
- package/templates/datastory/blueprints/trend.json +93 -0
- package/templates/datastory/copy.md +16 -0
- package/templates/datastory/pacing.json +17 -0
- package/templates/datastory/previews/data-story.png +0 -0
- package/templates/datastory/previews/infographic.png +0 -0
- package/templates/datastory/previews/trend.png +0 -0
- package/templates/datastory/styles/clear.json +6 -0
- package/templates/datastory/styles/editorial.json +6 -0
- package/templates/datastory/styles/pop.json +7 -0
- package/templates/datastory/template.json +57 -0
- package/templates/event/blueprints/promo.json +71 -0
- package/templates/event/blueprints/save-the-date.json +61 -0
- package/templates/event/copy.md +16 -0
- package/templates/event/pacing.json +15 -0
- package/templates/event/previews/promo.png +0 -0
- package/templates/event/previews/save-the-date.png +0 -0
- package/templates/event/styles/bright.json +6 -0
- package/templates/event/styles/pop.json +6 -0
- package/templates/event/template.json +37 -0
- package/templates/explain/blueprints/architecture.json +76 -0
- package/templates/explain/blueprints/concept.json +89 -0
- package/templates/explain/blueprints/howto.json +56 -0
- package/templates/explain/blueprints/overview.json +126 -0
- package/templates/explain/copy.md +19 -0
- package/templates/explain/pacing.json +19 -0
- package/templates/explain/previews/architecture.png +0 -0
- package/templates/explain/previews/concept.png +0 -0
- package/templates/explain/previews/howto.png +0 -0
- package/templates/explain/previews/overview.png +0 -0
- package/templates/explain/styles/calm.json +6 -0
- package/templates/explain/styles/crisp.json +6 -0
- package/templates/explain/template.json +64 -0
- package/templates/guide/blueprints/lesson.json +173 -0
- package/templates/guide/blueprints/onboarding.json +80 -0
- package/templates/guide/blueprints/tutorial.json +102 -0
- package/templates/guide/copy.md +17 -0
- package/templates/guide/pacing.json +59 -0
- package/templates/guide/previews/lesson.png +0 -0
- package/templates/guide/previews/onboarding.png +0 -0
- package/templates/guide/previews/tutorial.png +0 -0
- package/templates/guide/styles/calm.json +15 -0
- package/templates/guide/styles/friendly.json +15 -0
- package/templates/guide/styles/techdark.json +15 -0
- package/templates/guide/template.json +95 -0
- package/templates/pitch/blueprints/feature.json +134 -0
- package/templates/pitch/blueprints/launch.json +173 -0
- package/templates/pitch/blueprints/pricing.json +141 -0
- package/templates/pitch/copy.md +18 -0
- package/templates/pitch/pacing.json +59 -0
- package/templates/pitch/previews/feature.png +0 -0
- package/templates/pitch/previews/launch.png +0 -0
- package/templates/pitch/previews/pricing.png +0 -0
- package/templates/pitch/styles/polished.json +6 -0
- package/templates/pitch/styles/punchy.json +6 -0
- package/templates/pitch/styles/teaser.json +12 -0
- package/templates/pitch/template.json +45 -0
- package/templates/recap/blueprints/news-recap.json +62 -0
- package/templates/recap/blueprints/timeline-story.json +94 -0
- package/templates/recap/copy.md +16 -0
- package/templates/recap/pacing.json +16 -0
- package/templates/recap/previews/news-recap.png +0 -0
- package/templates/recap/previews/timeline-story.png +0 -0
- package/templates/recap/styles/editorial.json +6 -0
- package/templates/recap/styles/editorialdark.json +6 -0
- package/templates/recap/template.json +50 -0
- package/templates/report/blueprints/kpi-review.json +116 -0
- package/templates/report/blueprints/status.json +78 -0
- package/templates/report/copy.md +17 -0
- package/templates/report/pacing.json +16 -0
- package/templates/report/previews/kpi-review.png +0 -0
- package/templates/report/previews/status.png +0 -0
- package/templates/report/styles/exec.json +6 -0
- package/templates/report/styles/memo.json +6 -0
- package/templates/report/styles/walkthrough.json +6 -0
- package/templates/report/template.json +56 -0
- package/templates/social/blueprints/announce.json +109 -0
- package/templates/social/blueprints/listicle.json +117 -0
- package/templates/social/blueprints/tip.json +114 -0
- package/templates/social/copy.md +18 -0
- package/templates/social/pacing.json +49 -0
- package/templates/social/previews/announce.png +0 -0
- package/templates/social/previews/listicle.png +0 -0
- package/templates/social/previews/tip.png +0 -0
- package/templates/social/styles/captioned.json +18 -0
- package/templates/social/styles/hook-first.json +15 -0
- package/templates/social/styles/techcut.json +15 -0
- package/templates/social/template.json +94 -0
- package/templates/update/blueprints/announcement.json +57 -0
- package/templates/update/blueprints/changelog.json +157 -0
- package/templates/update/blueprints/release-notes.json +151 -0
- package/templates/update/blueprints/weekly-update.json +88 -0
- package/templates/update/copy.md +17 -0
- package/templates/update/pacing.json +64 -0
- package/templates/update/previews/announcement.png +0 -0
- package/templates/update/previews/changelog.png +0 -0
- package/templates/update/previews/release-notes.png +0 -0
- package/templates/update/previews/weekly-update.png +0 -0
- package/templates/update/styles/punchy.json +15 -0
- package/templates/update/styles/techdark.json +6 -0
- package/templates/update/styles/tidy.json +6 -0
- package/templates/update/template.json +67 -0
- package/templates/vista/blueprints/spotlight.json +68 -0
- package/templates/vista/blueprints/tour.json +84 -0
- package/templates/vista/copy.md +18 -0
- package/templates/vista/pacing.json +14 -0
- package/templates/vista/previews/spotlight.png +0 -0
- package/templates/vista/previews/tour.png +0 -0
- package/templates/vista/styles/bright.json +6 -0
- package/templates/vista/styles/cinematic.json +6 -0
- package/templates/vista/template.json +42 -0
- package/templates/walkthrough/blueprints/product-tour.json +107 -0
- package/templates/walkthrough/copy.md +16 -0
- package/templates/walkthrough/pacing.json +16 -0
- package/templates/walkthrough/previews/product-tour.png +0 -0
- package/templates/walkthrough/styles/calm.json +6 -0
- package/templates/walkthrough/styles/deep.json +6 -0
- package/templates/walkthrough/template.json +37 -0
package/CATALOG.md
ADDED
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
# Catalog
|
|
2
|
+
|
|
3
|
+
Generated by `mk catalog --write` from the scene registry; do not edit. Read the index, then `mk catalog <type>` for one scene. `*` marks a required field.
|
|
4
|
+
|
|
5
|
+
## Index
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
type | layer | purpose | required
|
|
9
|
+
title | base | Opening or section title card with optional kicker and subtitle. | title
|
|
10
|
+
hero | base | Landing-page hero: kicker, big headline with [x] accents, subline and up to 4 glass tiles; bento or centered. | title
|
|
11
|
+
poster | base | Type-led statement: 1-3 oversized lines with [x] accents, optional kicker and foot; outline draws the last line as outline type and accent words keep their gradient fill. | lines
|
|
12
|
+
bullets | base | Short list of 1-6 points with an optional heading. | items
|
|
13
|
+
stat | base | One hero number with label, unit, delta and context; counts up. | value,label
|
|
14
|
+
flow | base | Node-and-arrow diagram (2-8 nodes) laid out left-right or top-bottom. | nodes,edges
|
|
15
|
+
outro | base | Closing card with title, up to 3 lines and up to 4 credits. | title
|
|
16
|
+
lower-third | overlay | Name plate with optional title at the lower edge. | name
|
|
17
|
+
bug | overlay | Corner word mark or ledger image; give exactly one of text or image. | -
|
|
18
|
+
progress | overlay | Thin progress bar over the scene or the whole timeline. | -
|
|
19
|
+
countdown | overlay | Integer count between from and to, one step per equal slice of the duration. | from,to
|
|
20
|
+
chapter | overlay | Numbered chapter chip in a corner. | number,label
|
|
21
|
+
caption | overlay | Voice word timings as karaoke captions; falls back to a full-text card. | -
|
|
22
|
+
compare | base | Two options side by side or wiped before/after, 1-5 points each; the winner is marked by icon and text. | left,right
|
|
23
|
+
callout | base | One formula, rule, definition, warning or tip made big; [x] marks accent terms, revealed term by term. | text
|
|
24
|
+
quote | base | Testimonial or quotation with attribution, optional 1-5 star rating and avatar. | quote,name
|
|
25
|
+
icon-grid | base | Features, benefits or categories as 2-8 icon cards with a short label and optional detail. | items
|
|
26
|
+
steps | base | Ordered progression of 2-6 steps: a process path, or ascending ladder/stairs tiers with value labels (pricing, levels). | steps
|
|
27
|
+
timeline | base | Dated milestones, history or a now/next roadmap: 2-7 items on a horizontal or vertical axis with done/now/next states. | items
|
|
28
|
+
media-frame | base | Screenshot or photo, bare or in a browser, phone or laptop frame, with optional title, caption and numbered callout dots. | image
|
|
29
|
+
kinetic | base | One word or short phrase per beat at full screen (slam, stack or swap); for hooks, rules of three and key messages. | words
|
|
30
|
+
code | base | Code or terminal text typed or revealed line by line, with highlighted lines and +/- diff lines. | lines
|
|
31
|
+
kpi-grid | base | 2-6 headline numbers side by side, each with label, unit, change and trend arrow (good=down when a fall is good); values count up. | items
|
|
32
|
+
chart | base | Animated bar, line or donut chart for ranking, trend or share, with values shown and an optional highlight. | kind
|
|
33
|
+
table | base | Small data table or ranked list (2-5 columns, 2-8 rows) with row-by-row reveal and one optional highlighted row. | columns,rows
|
|
34
|
+
scene3d | base | WebGL diorama (vendored three.js): post, light, material, environment presets; model presets knot|gem|sphere|torus; flat 2D canvas fallback without WebGL. 3D output is machine+GPU stable, not portable. | -
|
|
35
|
+
sticker | base | Pop-comic sticker slam: 1-5 short phrases slam in with outline type, tilt and a starburst; for hooks, myth-vs-fact and punchy shorts. | words
|
|
36
|
+
waveform | base | Audio waveform from precomputed peaks: bars rise as the playhead sweeps; for voice agents, podcasts and narrated reports. Peaks are storyboard data, never decoded audio. | peaks
|
|
37
|
+
Detail: `mk catalog <type>`. Props are strict; unlisted keys are rejected.
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Scenes
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
title (base): Opening or section title card with optional kicker and subtitle.
|
|
44
|
+
title * text
|
|
45
|
+
subtitle text
|
|
46
|
+
kicker text
|
|
47
|
+
props: {"title":"Hello"}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
hero (base): Landing-page hero: kicker, big headline with [x] accents, subline and up to 4 glass tiles; bento or centered.
|
|
52
|
+
title * text<=70
|
|
53
|
+
subtitle text<=120
|
|
54
|
+
kicker text<=28
|
|
55
|
+
tiles {value,label,detail}[..4]
|
|
56
|
+
layout bento|center = "bento"
|
|
57
|
+
props: {"title":"Design at the [speed] of thought","layout":"bento"}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
poster (base): Type-led statement: 1-3 oversized lines with [x] accents, optional kicker and foot; outline draws the last line as outline type and accent words keep their gradient fill.
|
|
62
|
+
lines * text<=38[1..3]
|
|
63
|
+
kicker text<=28
|
|
64
|
+
foot text<=60
|
|
65
|
+
align left|center = "left"
|
|
66
|
+
outline boolean = false
|
|
67
|
+
props: {"lines":["Make it","move"],"outline":true}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
```
|
|
71
|
+
bullets (base): Short list of 1-6 points with an optional heading.
|
|
72
|
+
title text
|
|
73
|
+
items * text[1..6]
|
|
74
|
+
marker dot|check|cross|number
|
|
75
|
+
props: {"items":["One","Two"]}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
```
|
|
79
|
+
stat (base): One hero number with label, unit, delta and context; counts up.
|
|
80
|
+
value * text|number
|
|
81
|
+
label * text
|
|
82
|
+
unit text
|
|
83
|
+
delta text
|
|
84
|
+
context text
|
|
85
|
+
props: {"value":42,"label":"Users"}
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
```
|
|
89
|
+
flow (base): Node-and-arrow diagram (2-8 nodes) laid out left-right or top-bottom.
|
|
90
|
+
nodes * {id,label}[2..8]
|
|
91
|
+
edges * {from,to,label}[]
|
|
92
|
+
direction lr|tb = "lr"
|
|
93
|
+
props: {"nodes":[{"id":"a","label":"A"},{"id":"b","label":"B"}],"edges":[{"from":"a","to":"b"}]}
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
```
|
|
97
|
+
outro (base): Closing card with title, up to 3 lines and up to 4 credits.
|
|
98
|
+
title * text
|
|
99
|
+
lines text[..3]
|
|
100
|
+
credits text[..4]
|
|
101
|
+
props: {"title":"Thanks"}
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
```
|
|
105
|
+
lower-third (overlay): Name plate with optional title at the lower edge.
|
|
106
|
+
name * text
|
|
107
|
+
title text
|
|
108
|
+
align left|right = "left"
|
|
109
|
+
props: {"name":"Ada Lovelace"}
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
```
|
|
113
|
+
bug (overlay): Corner word mark or ledger image; give exactly one of text or image.
|
|
114
|
+
text text<=32
|
|
115
|
+
image text
|
|
116
|
+
position top-left|top-right|bottom-left|bottom-right = "top-right"
|
|
117
|
+
opacity subtle|medium|full = "medium"
|
|
118
|
+
props: {"text":"ACME"}
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
```
|
|
122
|
+
progress (overlay): Thin progress bar over the scene or the whole timeline.
|
|
123
|
+
scope scene|timeline = "scene"
|
|
124
|
+
color accent|accent2 = "accent"
|
|
125
|
+
label text
|
|
126
|
+
props: {}
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
```
|
|
130
|
+
countdown (overlay): Integer count between from and to, one step per equal slice of the duration.
|
|
131
|
+
from * int 0..999
|
|
132
|
+
to * int 0..999
|
|
133
|
+
label text
|
|
134
|
+
position top-left|top-right|bottom-left|bottom-right|center = "center"
|
|
135
|
+
props: {"from":3,"to":1}
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
```
|
|
139
|
+
chapter (overlay): Numbered chapter chip in a corner.
|
|
140
|
+
number * int 0..99
|
|
141
|
+
label * text
|
|
142
|
+
position top-left|top-right|bottom-left|bottom-right = "top-left"
|
|
143
|
+
props: {"number":1,"label":"Intro"}
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
```
|
|
147
|
+
caption (overlay): Voice word timings as karaoke captions; falls back to a full-text card.
|
|
148
|
+
text text<=140
|
|
149
|
+
words {w,start,end}[1..40]
|
|
150
|
+
props: {"words":[{"w":"Hello","start":0,"end":0.4},{"w":"world","start":0.4,"end":0.9}]}
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
```
|
|
154
|
+
compare (base): Two options side by side or wiped before/after, 1-5 points each; the winner is marked by icon and text.
|
|
155
|
+
title text<=60
|
|
156
|
+
left * {label,points,value,tag}
|
|
157
|
+
right * {label,points,value,tag}
|
|
158
|
+
mode split|wipe = "split"
|
|
159
|
+
verdict text<=80
|
|
160
|
+
winner left|right
|
|
161
|
+
winnerLabel text<=20 = "Winner"
|
|
162
|
+
props: {"left":{"label":"Before","points":["Manual"]},"right":{"label":"After","points":["Automated"]},"winner":"right"}
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
```
|
|
166
|
+
callout (base): One formula, rule, definition, warning or tip made big; [x] marks accent terms, revealed term by term.
|
|
167
|
+
text * text<=120
|
|
168
|
+
kind formula|statement|definition|warning|tip = "statement"
|
|
169
|
+
label text<=30
|
|
170
|
+
note text<=80
|
|
171
|
+
props: {"text":"[Profit] = [Revenue] − [Costs]","kind":"formula"}
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
```
|
|
175
|
+
quote (base): Testimonial or quotation with attribution, optional 1-5 star rating and avatar.
|
|
176
|
+
quote * text<=200
|
|
177
|
+
name * text<=40
|
|
178
|
+
role text<=40
|
|
179
|
+
org text<=40
|
|
180
|
+
rating int 1..5
|
|
181
|
+
image text
|
|
182
|
+
props: {"quote":"Simple and fast.","name":"Alex Kim","rating":5}
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
```
|
|
186
|
+
icon-grid (base): Features, benefits or categories as 2-8 icon cards with a short label and optional detail.
|
|
187
|
+
title text
|
|
188
|
+
items* {icon,label,detail}[2..8]
|
|
189
|
+
cols int 2..4
|
|
190
|
+
icons: `mk icon search <query>` | `mk icon list [--tag group]` (names only)
|
|
191
|
+
props: {"title":"Why teams switch","items":[{"icon":"zap","label":"Fast setup","detail":"Live in a day"},{"icon":"shield","label":"Secure by default"},{"icon":"globe","label":"Works worldwide"}]}
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
```
|
|
195
|
+
steps (base): Ordered progression of 2-6 steps: a process path, or ascending ladder/stairs tiers with value labels (pricing, levels).
|
|
196
|
+
title text
|
|
197
|
+
steps * {label,value,detail}[2..6]
|
|
198
|
+
layout path|ladder|stairs = "path"
|
|
199
|
+
active int 1..9007199254740991
|
|
200
|
+
props: {"title":"Plans","layout":"ladder","steps":[{"label":"Starter","value":"$0"},{"label":"Team","value":"$29"},{"label":"Scale","value":"$99"}]}
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
```
|
|
204
|
+
timeline (base): Dated milestones, history or a now/next roadmap: 2-7 items on a horizontal or vertical axis with done/now/next states.
|
|
205
|
+
title text
|
|
206
|
+
items * {when,label,detail,state}[2..7]
|
|
207
|
+
orient h|v = "h"
|
|
208
|
+
props: {"title":"Roadmap","items":[{"when":"Q1","label":"Beta","state":"done"},{"when":"Q2","label":"Launch","state":"now"},{"when":"Q3","label":"Scale","state":"next"}]}
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
```
|
|
212
|
+
media-frame (base): Screenshot or photo, bare or in a browser, phone or laptop frame, with optional title, caption and numbered callout dots.
|
|
213
|
+
image * text
|
|
214
|
+
device none|browser|phone|laptop = "browser"
|
|
215
|
+
layout full|left|right = "full"
|
|
216
|
+
title text<=60
|
|
217
|
+
caption text<=140
|
|
218
|
+
motion none|kenburns|tilt = "kenburns"
|
|
219
|
+
callouts {x,y,label}[..3]
|
|
220
|
+
props: {"image":"screenshot.png","device":"browser","callouts":[{"x":30,"y":40,"label":"Start here"}]}
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
```
|
|
224
|
+
kinetic (base): One word or short phrase per beat at full screen (slam, stack or swap); for hooks, rules of three and key messages.
|
|
225
|
+
words * text<=18[1..8]
|
|
226
|
+
mode slam|stack|swap = "slam"
|
|
227
|
+
emphasis int 1..8
|
|
228
|
+
props: {"words":["Plan","Build","Ship"],"mode":"slam","emphasis":3}
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
```
|
|
232
|
+
code (base): Code or terminal text typed or revealed line by line, with highlighted lines and +/- diff lines.
|
|
233
|
+
lines * text<=60[1..14]
|
|
234
|
+
lang js|ts|json|py|sh|plain = "plain"
|
|
235
|
+
reveal type|lines = "lines"
|
|
236
|
+
highlight int 1..9007199254740991[..14]
|
|
237
|
+
file text<=40
|
|
238
|
+
props: {"lines":["const total = price * 2","- old line","+ new line"],"lang":"js"}
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
```
|
|
242
|
+
kpi-grid (base): 2-6 headline numbers side by side, each with label, unit, change and trend arrow (good=down when a fall is good); values count up.
|
|
243
|
+
title text
|
|
244
|
+
items* {value,label,unit,delta,trend,good}[2..6]
|
|
245
|
+
cols int 2..3
|
|
246
|
+
props: {"title":"Quarter at a glance","items":[{"value":"$4.2M","label":"Revenue","delta":"+12%","trend":"up"},{"value":86,"unit":"%","label":"Retention","delta":"-2 pts","trend":"down"}]}
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
```
|
|
250
|
+
chart (base): Animated bar, line or donut chart for ranking, trend or share, with values shown and an optional highlight.
|
|
251
|
+
kind * bar|line|donut
|
|
252
|
+
title text
|
|
253
|
+
unit text
|
|
254
|
+
showValues boolean = true
|
|
255
|
+
caption text
|
|
256
|
+
data {label,value}[2..8]
|
|
257
|
+
sort none|asc|desc
|
|
258
|
+
highlight int 0..9007199254740991
|
|
259
|
+
orient h|v
|
|
260
|
+
x text<=12[2..12]
|
|
261
|
+
series {name,values}[1..3]
|
|
262
|
+
trend {name,values}[1..3]
|
|
263
|
+
props: {"kind":"bar","title":"Signups by channel","data":[{"label":"Search","value":420},{"label":"Referral","value":310},{"label":"Social","value":190}],"highlight":0}
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
```
|
|
267
|
+
table (base): Small data table or ranked list (2-5 columns, 2-8 rows) with row-by-row reveal and one optional highlighted row.
|
|
268
|
+
title text
|
|
269
|
+
columns * text<=32[2..5]
|
|
270
|
+
rows * text<=40|number[][2..8]
|
|
271
|
+
rank boolean
|
|
272
|
+
highlight int 0..9007199254740991
|
|
273
|
+
align l|r[..5]
|
|
274
|
+
props: {"title":"Top regions","columns":["Region","Revenue"],"rows":[["North","$4.2M"],["South","$3.1M"]],"rank":true,"highlight":0}
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
```
|
|
278
|
+
scene3d (base): WebGL diorama (vendored three.js): post, light, material, environment presets; model presets knot|gem|sphere|torus; flat 2D canvas fallback without WebGL. 3D output is machine+GPU stable, not portable.
|
|
279
|
+
title text<=60
|
|
280
|
+
caption text<=140
|
|
281
|
+
model text
|
|
282
|
+
post clean|bloom|cinematic|vintage = "cinematic"
|
|
283
|
+
light studio|sunset|night|soft = "studio"
|
|
284
|
+
material clay|gloss|metal|emissive = "clay"
|
|
285
|
+
hdri neutral|studio|sunset|night = "neutral"
|
|
286
|
+
props: {"title":"Orbit"}
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
```
|
|
290
|
+
sticker (base): Pop-comic sticker slam: 1-5 short phrases slam in with outline type, tilt and a starburst; for hooks, myth-vs-fact and punchy shorts.
|
|
291
|
+
words* text<=16[1..5]
|
|
292
|
+
burst boolean = true
|
|
293
|
+
props: {"words":["Myth","Busted"],"burst":true}
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
```
|
|
297
|
+
waveform (base): Audio waveform from precomputed peaks: bars rise as the playhead sweeps; for voice agents, podcasts and narrated reports. Peaks are storyboard data, never decoded audio.
|
|
298
|
+
peaks* number 0..1[16..128]
|
|
299
|
+
label text<=40
|
|
300
|
+
props: {"peaks":[0.2,0.4,0.6,0.8,0.6,0.4,0.3,0.5,0.7,0.9,0.7,0.5,0.4,0.3,0.2,0.1],"label":"Intro"}
|
|
301
|
+
```
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 anvpx
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,96 @@
|
|
|
1
|
-
#
|
|
1
|
+
# motion-kit
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
**Storyboard JSON in, animated video out.** motion-kit turns a small, validated document into an explainer, infographic or social clip and renders it locally with HyperFrames. Free and open source: no metering, no watermark, no account, no cloud.
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
brief ──► direction ──► storyboard.json ──► validate ──► preview ──► approve ──► render --gated
|
|
7
|
+
(design) (small, diffable) (schema+lint) (contact sheet, stills, clip)
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
## Why it is different
|
|
11
|
+
|
|
12
|
+
- **A small production document with room for original design.** Storyboards are diffable, reviewable and patchable JSON. Use catalog components where they fit, or author deterministic HTML/CSS/JS scenes for original compositions through the same build and approval path.
|
|
13
|
+
- **Deterministic by construction.** Every scene is a pure function of time (`seek(t)`): no frame-rate clock, no unseeded randomness. Same-machine drafts are byte-identical.
|
|
14
|
+
- **A real approval gate.** `mk preview` writes a review pack, `mk approve` records the user's yes, and `mk render --gated` refuses with exit 4 until the recorded approval matches the current inputs. Any edit re-arms it.
|
|
15
|
+
- **Local and offline.** Rendering, linting, contact sheets and voice run on your machine. Confidential decks stay on disk.
|
|
16
|
+
|
|
17
|
+
## Requirements
|
|
18
|
+
|
|
19
|
+
- Node.js **>= 22**
|
|
20
|
+
- **ffmpeg** and **ffprobe** >= 6 on `PATH`
|
|
21
|
+
- Chrome for HyperFrames: `mk doctor` reports it; the first render downloads `chrome-headless-shell` if it is missing
|
|
22
|
+
|
|
23
|
+
Optional voice needs Python 3.12 plus Kokoro/faster-whisper; `mk doctor` tells you what is missing. The engine itself needs no Python.
|
|
24
|
+
|
|
25
|
+
## Quickstart
|
|
26
|
+
|
|
27
|
+
```sh
|
|
28
|
+
npx -y @anvpx/motion@0.1.1 doctor
|
|
29
|
+
|
|
30
|
+
# Optional: make the rest shorter
|
|
31
|
+
alias mk="npx -y @anvpx/motion@0.1.1" # bash/zsh
|
|
32
|
+
function mk { npx -y @anvpx/motion@0.1.1 @args } # PowerShell
|
|
33
|
+
|
|
34
|
+
# Optional template-assisted example, after deciding the visual direction:
|
|
35
|
+
mk template list --for "how our pricing works"
|
|
36
|
+
mk new explain/architecture --demo --out storyboard.json # --demo = example copy; --set k=v for yours
|
|
37
|
+
mk validate storyboard.json
|
|
38
|
+
mk preview storyboard.json
|
|
39
|
+
mk approve storyboard.json --note "looks right" # only after the user said yes
|
|
40
|
+
mk render storyboard.json --gated --verify
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
`mk preview` writes `out/<name>.preview/`: `contact.png` (show this first), `stills/`, `clip.mp4` and `preview.json`. `mk render` writes a delivery-quality H.264 MP4 as `<out>/final.mp4`.
|
|
44
|
+
|
|
45
|
+
## What you get
|
|
46
|
+
|
|
47
|
+
- **28 scene types** — title, bullets, stat, flow, chart, compare, timeline, code, scene3d and more. `mk catalog` lists them; `mk catalog <type>` shows the props.
|
|
48
|
+
- **12 templates and 30 blueprints** — `mk template list --for "<brief>"` ranks blueprints; `mk template show <template>/<blueprint>` explains one.
|
|
49
|
+
- **Shared themes** — light/dark families projected from DTCG tokens, plus user themes and vendored assets with a licence ledger.
|
|
50
|
+
- **Edits as verbs** — `mk patch` (atomic JSON Patch), `mk scene add|remove|move`, `mk fit --seconds N`.
|
|
51
|
+
- **Review without rendering** — `mk still --at 1,5,9`, `mk compare a.json b.json --at N`, `mk contact out/final.mp4`.
|
|
52
|
+
- **A static player** — `mk publish storyboard.json [--serve]` writes a 16:9 page that plays the same timeline in a browser.
|
|
53
|
+
- **Delivery formats** — H.264 MP4 by default; `--format webm|mov|gif|png-sequence` converts the master, and `--resolution 4k` renders at 4K (alpha and HDR are not produced).
|
|
54
|
+
- **Captions in and out** — `mk captions <voice-manifest> --storyboard <s> --out ops.json` builds karaoke overlays; `--srt`/`--vtt` export captions, and `--from-srt`/`--from-vtt` import them.
|
|
55
|
+
- **Asset intake** — `mk assets import <file...> --dir assets --licence <id> --source-url <url>` copies, hashes and records a ledger row.
|
|
56
|
+
- **Delivery checks** — `mk verify` re-probes streams, frame count and loudness (`--loudness`), and detects black/frozen spans (`--events`).
|
|
57
|
+
|
|
58
|
+
## How authoring works
|
|
59
|
+
|
|
60
|
+
The agent first develops a visual argument in an authoring-only `direction.md`: concept, composition, typography, color, motion, sound and intended divergence from relevant prior work. It loads focused craft guidance for unresolved decisions, then chooses template-assisted, direct or authored realization by fit. Templates help repeat a brand system; authored scenes can carry the whole film when the brief calls for it. There is no template-exhaustion requirement or custom-scene quota. The protocol lives in the skill (`skills/motion-kit/SKILL.md`) and in `docs/AGENT-WORKFLOW.md`. Users never write storyboards; the agent designs, shows a preview, and renders only after an explicit yes.
|
|
61
|
+
|
|
62
|
+
Claude Code users can install the bundled plugin with `mk plugin install`.
|
|
63
|
+
|
|
64
|
+
## The approval gate
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
mk preview → user reviews contact.png / stills / clip → mk approve → mk render --gated --verify
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
`mk render --gated` exits **4** (`AWAITING_APPROVAL`) when the storyboard, its themes, referenced assets, asset ledger or audio inputs changed after the approval. `mk verify` exits **5** on a failed QA check. Approval is a sidecar file in `.mk/<name>/approval.json`; it is never a storyboard field.
|
|
71
|
+
|
|
72
|
+
## Limits (honest version)
|
|
73
|
+
|
|
74
|
+
- No GUI, editor or scrubbing player. The review surface is the preview pack plus `mk publish`.
|
|
75
|
+
- Delivery is opaque video: MP4 by default, or WebM/MOV/GIF/PNG-sequence conversions of the master. No alpha channel and no HDR path.
|
|
76
|
+
- Captions are generated from voice word timings or imported SRT/VTT; word-level karaoke needs a voice manifest.
|
|
77
|
+
- Voice is optional and needs a Python 3.12 environment; it is not reachable from `npx` alone.
|
|
78
|
+
- Determinism is proven on the same machine. Cross-machine or cross-GPU pixel equality is not claimed.
|
|
79
|
+
- Pre-1.0: HyperFrames 0.8.212 and the single storyboard schema are pinned; the scene vocabulary can still change.
|
|
80
|
+
|
|
81
|
+
## Development (from source)
|
|
82
|
+
|
|
83
|
+
```sh
|
|
84
|
+
pnpm install
|
|
85
|
+
pnpm build # tsc -b, runtime assets, generated package payloads
|
|
86
|
+
pnpm scaffold:check # fail if a generated copy drifted from its source
|
|
87
|
+
pnpm check # typecheck + lint
|
|
88
|
+
pnpm test # unit tests
|
|
89
|
+
pnpm test:integration # needs Chrome
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Run the CLI from source with `node packages/cli/dist/main.js <command>`. Design and contracts: `PLAN.md`, `CONSTITUTION.md`; usage guide: `docs/GUIDE.md`; agent instructions: `AGENTS.md`; current work and acceptance: `docs/BEST-IN-CLASS-IMPLEMENTATION.md`.
|
|
93
|
+
|
|
94
|
+
## Licence
|
|
95
|
+
|
|
96
|
+
MIT — see `LICENSE`. Vendored assets keep their own licences: Lucide icons (ISC), Fontsource fonts (OFL-1.1), LUTs and music beds (CC0-1.0), three.js (MIT); every shipped file has a row in the asset ledger, and `docs/LICENCE-AUDIT.md` records the audit. HyperFrames is Apache-2.0 and is a runtime dependency.
|
package/assets.json
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"path": "luts/cool.cube",
|
|
4
|
+
"sourceUrl": "https://github.com/motion-kit/motion-kit/blob/main/packages/assets/luts/cool.cube",
|
|
5
|
+
"licence": "CC0-1.0",
|
|
6
|
+
"attribution": "motion-kit (original procedural LUT, CC0-1.0 public domain dedication; see luts/LICENSE-CC0.txt)",
|
|
7
|
+
"sha256": "4a526a94252483fb3c45923c447641ea5641547d100900abb4aefb4de6ef5e53"
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
"path": "luts/noir.cube",
|
|
11
|
+
"sourceUrl": "https://github.com/motion-kit/motion-kit/blob/main/packages/assets/luts/noir.cube",
|
|
12
|
+
"licence": "CC0-1.0",
|
|
13
|
+
"attribution": "motion-kit (original procedural LUT, CC0-1.0 public domain dedication; see luts/LICENSE-CC0.txt)",
|
|
14
|
+
"sha256": "c310820344d9ef2a09a5fb3678088cc2a8a44ea16527e306526161856312fe82"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"path": "luts/warm.cube",
|
|
18
|
+
"sourceUrl": "https://github.com/motion-kit/motion-kit/blob/main/packages/assets/luts/warm.cube",
|
|
19
|
+
"licence": "CC0-1.0",
|
|
20
|
+
"attribution": "motion-kit (original procedural LUT, CC0-1.0 public domain dedication; see luts/LICENSE-CC0.txt)",
|
|
21
|
+
"sha256": "2702600f848a77f54f787361f848f4e1d2d432a0db8e82d5e1035008c6e7618c"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"path": "music/bed.wav",
|
|
25
|
+
"sourceUrl": "https://github.com/motion-kit/motion-kit/blob/main/packages/assets/music/bed.wav",
|
|
26
|
+
"licence": "CC0-1.0",
|
|
27
|
+
"attribution": "motion-kit (original procedural silence bed, CC0-1.0 public domain dedication; see music/LICENSE-CC0.txt)",
|
|
28
|
+
"sha256": "e5ea01a23fcb85fd8e608c5c672ea5c22dfab6b0e581d782242f478e4b1c5900"
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"path": "music/bed-full.wav",
|
|
32
|
+
"sourceUrl": "https://github.com/motion-kit/motion-kit/blob/main/packages/assets/music/bed-full.wav",
|
|
33
|
+
"licence": "CC0-1.0",
|
|
34
|
+
"attribution": "motion-kit (original procedural audible bed, CC0-1.0 public domain dedication; see music/LICENSE-CC0.txt)",
|
|
35
|
+
"sha256": "51a5977617fccbaec6c2dcfd6449757aa48a7c92f01dda354d9263321a6cc9b1"
|
|
36
|
+
}
|
|
37
|
+
]
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "@anvpx/motion-cli";
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "@anvpx/motion-cli";
|
package/dist/main.d.ts
ADDED
package/dist/main.js
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
|
|
3
|
+
if (typeof path === "string" && /^\.\.?\//.test(path)) {
|
|
4
|
+
return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
|
|
5
|
+
return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
|
|
6
|
+
});
|
|
7
|
+
}
|
|
8
|
+
return path;
|
|
9
|
+
};
|
|
10
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
11
|
+
import { createRequire } from "node:module";
|
|
12
|
+
import { dirname, resolve } from "node:path";
|
|
13
|
+
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
14
|
+
/**
|
|
15
|
+
* Runs the mk bin declared by `@anvpx/motion-cli` so the entry point stays
|
|
16
|
+
* single-sourced. Published `@anvpx/motion` installs lack the workspace
|
|
17
|
+
* checkout, so the installed package is preferred and workspace-relative or
|
|
18
|
+
* staged copies are fallbacks (each verified with `existsSync`).
|
|
19
|
+
*/
|
|
20
|
+
const resolveCliBinUrl = () => {
|
|
21
|
+
const searched = [];
|
|
22
|
+
try {
|
|
23
|
+
const cliPkgPath = createRequire(import.meta.url).resolve("@anvpx/motion-cli/package.json");
|
|
24
|
+
const cliPkg = JSON.parse(readFileSync(cliPkgPath, "utf8"));
|
|
25
|
+
const bin = typeof cliPkg.bin === "string" ? cliPkg.bin : cliPkg.bin?.mk;
|
|
26
|
+
if (bin !== undefined) {
|
|
27
|
+
const abs = resolve(dirname(cliPkgPath), bin);
|
|
28
|
+
if (existsSync(abs))
|
|
29
|
+
return pathToFileURL(abs).href;
|
|
30
|
+
searched.push(abs);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
/* fall through to workspace-relative and staged fallbacks */
|
|
35
|
+
}
|
|
36
|
+
for (const candidate of [
|
|
37
|
+
fileURLToPath(new URL("../../cli/dist/main.js", import.meta.url)),
|
|
38
|
+
fileURLToPath(new URL("./cli/main.js", import.meta.url)),
|
|
39
|
+
]) {
|
|
40
|
+
if (existsSync(candidate))
|
|
41
|
+
return pathToFileURL(candidate).href;
|
|
42
|
+
searched.push(candidate);
|
|
43
|
+
}
|
|
44
|
+
throw new Error(`Cannot locate @anvpx/motion-cli (fixable: reinstall @anvpx/motion with its dependencies). Searched: ${searched.join(", ") || "(none)"}`);
|
|
45
|
+
};
|
|
46
|
+
await import(__rewriteRelativeImportExtension(resolveCliBinUrl()));
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
ISC License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Lucide Icons and Contributors
|
|
4
|
+
|
|
5
|
+
Permission to use, copy, modify, and/or distribute this software for any
|
|
6
|
+
purpose with or without fee is hereby granted, provided that the above
|
|
7
|
+
copyright notice and this permission notice appear in all copies.
|
|
8
|
+
|
|
9
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
10
|
+
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
11
|
+
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
12
|
+
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
13
|
+
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
14
|
+
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
15
|
+
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
The following Lucide icons are derived from the Feather project:
|
|
20
|
+
|
|
21
|
+
airplay, alert-circle, alert-octagon, alert-triangle, aperture, arrow-down-circle, arrow-down-left, arrow-down-right, arrow-down, arrow-left-circle, arrow-left, arrow-right-circle, arrow-right, arrow-up-circle, arrow-up-left, arrow-up-right, arrow-up, at-sign, calendar, cast, check, chevron-down, chevron-left, chevron-right, chevron-up, chevrons-down, chevrons-left, chevrons-right, chevrons-up, circle, clipboard, clock, code, columns, command, compass, corner-down-left, corner-down-right, corner-left-down, corner-left-up, corner-right-down, corner-right-up, corner-up-left, corner-up-right, crosshair, database, divide-circle, divide-square, dollar-sign, download, external-link, feather, frown, hash, headphones, help-circle, info, italic, key, layout, life-buoy, link-2, link, loader, lock, log-in, log-out, maximize, meh, minimize, minimize-2, minus-circle, minus-square, minus, monitor, moon, more-horizontal, more-vertical, move, music, navigation-2, navigation, octagon, pause-circle, percent, plus-circle, plus-square, plus, power, radio, rss, search, server, share, shopping-bag, sidebar, smartphone, smile, square, table-2, tablet, target, terminal, trash-2, trash, triangle, tv, type, upload, x-circle, x-octagon, x-square, x, zoom-in, zoom-out
|
|
22
|
+
|
|
23
|
+
The MIT License (MIT) (for the icons listed above)
|
|
24
|
+
|
|
25
|
+
Copyright (c) 2013-present Cole Bemis
|
|
26
|
+
|
|
27
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
28
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
29
|
+
in the Software without restriction, including without limitation the rights
|
|
30
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
31
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
32
|
+
furnished to do so, subject to the following conditions:
|
|
33
|
+
|
|
34
|
+
The above copyright notice and this permission notice shall be included in all
|
|
35
|
+
copies or substantial portions of the Software.
|
|
36
|
+
|
|
37
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
38
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
39
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
40
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
41
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
42
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
43
|
+
SOFTWARE.
|