@dnyantra/dtly 0.2.1 → 0.3.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 (80) hide show
  1. package/README.md +21 -8
  2. package/dist/agents.d.ts +1 -0
  3. package/dist/agents.js +9 -4
  4. package/dist/agents.js.map +1 -1
  5. package/dist/cli.js +35 -5
  6. package/dist/cli.js.map +1 -1
  7. package/dist/core/anim.js +20 -0
  8. package/dist/core/anim.js.map +1 -1
  9. package/dist/core/captions.d.ts +13 -0
  10. package/dist/core/captions.js +57 -0
  11. package/dist/core/captions.js.map +1 -0
  12. package/dist/core/geo.d.ts +13 -0
  13. package/dist/core/geo.js +41 -0
  14. package/dist/core/geo.js.map +1 -0
  15. package/dist/core/model.d.ts +112 -9
  16. package/dist/core/model.js.map +1 -1
  17. package/dist/core/path.d.ts +35 -0
  18. package/dist/core/path.js +324 -0
  19. package/dist/core/path.js.map +1 -0
  20. package/dist/core/svg.d.ts +22 -0
  21. package/dist/core/svg.js +217 -0
  22. package/dist/core/svg.js.map +1 -0
  23. package/dist/core/text.d.ts +3 -1
  24. package/dist/core/text.js +49 -3
  25. package/dist/core/text.js.map +1 -1
  26. package/dist/mcp/server.js +28 -1
  27. package/dist/mcp/server.js.map +1 -1
  28. package/dist/ops/ops.d.ts +7 -0
  29. package/dist/ops/ops.js +11 -1
  30. package/dist/ops/ops.js.map +1 -1
  31. package/dist/presets/app.d.ts +2 -0
  32. package/dist/presets/app.js +82 -0
  33. package/dist/presets/app.js.map +1 -0
  34. package/dist/presets/captions.d.ts +2 -0
  35. package/dist/presets/captions.js +48 -0
  36. package/dist/presets/captions.js.map +1 -0
  37. package/dist/presets/charts.d.ts +2 -0
  38. package/dist/presets/charts.js +162 -0
  39. package/dist/presets/charts.js.map +1 -0
  40. package/dist/presets/index.d.ts +1 -1
  41. package/dist/presets/index.js +62 -1
  42. package/dist/presets/index.js.map +1 -1
  43. package/dist/presets/maps.d.ts +2 -0
  44. package/dist/presets/maps.js +79 -0
  45. package/dist/presets/maps.js.map +1 -0
  46. package/dist/render/fx.d.ts +11 -0
  47. package/dist/render/fx.js +87 -0
  48. package/dist/render/fx.js.map +1 -0
  49. package/dist/render/grade.d.ts +20 -0
  50. package/dist/render/grade.js +178 -0
  51. package/dist/render/grade.js.map +1 -0
  52. package/dist/render/lottie.d.ts +36 -0
  53. package/dist/render/lottie.js +523 -0
  54. package/dist/render/lottie.js.map +1 -0
  55. package/dist/render/node-host.d.ts +1 -0
  56. package/dist/render/node-host.js +15 -4
  57. package/dist/render/node-host.js.map +1 -1
  58. package/dist/render/perspective.d.ts +5 -0
  59. package/dist/render/perspective.js +71 -0
  60. package/dist/render/perspective.js.map +1 -0
  61. package/dist/render/renderer.d.ts +6 -0
  62. package/dist/render/renderer.js +156 -95
  63. package/dist/render/renderer.js.map +1 -1
  64. package/dist/render/shapes.d.ts +6 -0
  65. package/dist/render/shapes.js +129 -0
  66. package/dist/render/shapes.js.map +1 -0
  67. package/dist/render/tiles.d.ts +11 -0
  68. package/dist/render/tiles.js +42 -0
  69. package/dist/render/tiles.js.map +1 -0
  70. package/dist/render/transcribe.d.ts +14 -0
  71. package/dist/render/transcribe.js +55 -0
  72. package/dist/render/transcribe.js.map +1 -0
  73. package/dist/studio/server.js +14 -1
  74. package/dist/studio/server.js.map +1 -1
  75. package/dist/studio-app/app.js +5 -4
  76. package/dist/studio-app/app.js.map +4 -4
  77. package/dist/version.d.ts +1 -1
  78. package/dist/version.js +1 -1
  79. package/package.json +1 -1
  80. package/plugin/skills/{dtly → moti}/SKILL.md +26 -6
package/README.md CHANGED
@@ -12,12 +12,19 @@ they make.
12
12
 
13
13
  ![Starter projects](docs/starters.png)
14
14
 
15
+ - **Explainers & logos** — SVG import as editable shapes, curved paths, shape morphing, repeaters, stars, gradients, and Lottie animations as layers.
16
+ - **Infographics** — counters (with ₹ and lakh/crore formatting), bar, line, donut and progress charts.
17
+ - **App promos** — phone mockups with true-perspective 3D tilt, corner pin, cursor and tap overlays.
18
+ - **Stylised looks** — glitch, RGB split, wave, light leaks; glitch, RGB-whip, warp and flash transitions.
19
+ - **Colour grading** — curves, colour wheels, exposure, temperature, vignette, 3D LUTs (.cube) and adjustment layers.
20
+ - **Captions** — word-highlight captions from SRT/VTT or automatic transcription (Sarvam AI, Indian languages).
21
+ - **Maps** — animated routes from coordinates with pins, labels and distance, over a stitched map background.
15
22
  - **Fine-grained animation** — any property can be keyframed with AE-style eases, bezier curves or physical springs; `wiggle` included.
16
23
  - **Text animators** — per grapheme, word or line, with stagger, order, blur, tracking, colour and masked line reveals. Indian scripts (Devanagari etc.) keep their conjuncts while animating.
17
24
  - **Presets** — kinetic typography, logo openers, colour-bar openers, slideshows with Ken Burns, push/whip/wipe/zoom transitions, lower thirds, highlight plates. Presets write ordinary layers, so everything stays editable.
18
25
  - **Media** — video, image and audio layers, volume keyframes, music mixing.
19
26
  - **Studio** — a browser preview and After Effects-style timeline editor that stays in sync with agents.
20
- - **Agent-native** — 23 MCP tools plus a skill that teaches motion-design rules.
27
+ - **Agent-native** — 26 MCP tools plus **moti**, a skill that turns your agent into a motion designer.
21
28
  - **No browser, no lock-in** — renders with skia-canvas and FFmpeg. MIT licensed.
22
29
 
23
30
  ## Install
@@ -37,7 +44,7 @@ npx @dnyantra/dtly render hello.json hello.mp4
37
44
 
38
45
  ### Use it from Claude Code
39
46
 
40
- Install the plugin (MCP server + skill) in one step:
47
+ Install the plugin (MCP server + the **moti** skill) in one step:
41
48
 
42
49
  ```
43
50
  /plugin install dtly --marketplace dnyantra/dtly
@@ -52,8 +59,8 @@ npx @dnyantra/dtly skill install --agent claude
52
59
 
53
60
  ### Use it from Codex, Cursor, Gemini CLI, Copilot or Windsurf
54
61
 
55
- The skill uses the open [Agent Skills](https://agentskills.io) format, so one command installs it for
56
- every supported agent:
62
+ The **moti** skill uses the open [Agent Skills](https://agentskills.io) format, so one command installs
63
+ it for every supported agent:
57
64
 
58
65
  ```bash
59
66
  npx skills add dnyantra/dtly # or: npx @dnyantra/dtly skill install --agent all
@@ -72,7 +79,7 @@ Then add the MCP server (the editing tools) to your agent:
72
79
  `npx @dnyantra/dtly setup <agent>` prints these steps for your agent. Agents without MCP can still use
73
80
  DT.ly through the skill's CLI fallback (`init`, `still`, `sheet`, `render`).
74
81
 
75
- Then ask for things like *"make a 10 second kinetic typography opener for my bakery"* or
82
+ Then ask for things like `/moti make a 10 second kinetic typography opener for my bakery` or
76
83
  *"ease the call-to-action in with a spring and move it 0.3 s later"*.
77
84
 
78
85
  ## Studio — browser preview and timeline editor
@@ -118,6 +125,9 @@ dtly init <project.json> [--starter opener|kinetic|bars] [--title "Text"]
118
125
  dtly render <project.json> <out.mp4> [--from s] [--to s] [--comp id] [--workers n]
119
126
  dtly still <project.json> <time> <out.png> [--scale 0.5]
120
127
  dtly sheet <project.json> <out.png> <t1,t2,...>
128
+ dtly import-svg <project.json> <file.svg> [--width 600] [--at x,y]
129
+ dtly captions <project.json> <audio|video|.srt|.vtt|.json> [--lang mr-IN]
130
+ dtly map-tiles <out.png> --tiles <url> --route "lat,lon;lat,lon" [--attribution "…"]
121
131
  dtly studio <project.json> [--port 4400] [--no-open]
122
132
  dtly presets
123
133
  dtly mcp
@@ -161,11 +171,14 @@ Installing the package also gives you the `dtly` command.
161
171
  | Masks / track mattes | `masks: [...]`, `matte: {layer, mode}` |
162
172
  | Trim paths | shape `trim: {start, end}` |
163
173
  | Text animators | `animators: [{unit, stagger, duration, ease, from: {...}, clip, mode}]` |
164
- | Effects | `blur`, `dropShadow`, `glow`, `fill`, `brightness`, `saturate`, `contrast` |
174
+ | Effects | `blur`, `dropShadow`, `glow`, `fill`, `brightness`, `saturate`, `contrast`, `tilt`, `cornerPin`, `rgbSplit`, `glitch`, `wave`, `curves`, `colorBalance`, `exposure`, `temperature`, `vignette`, `lut` |
175
+ | Adjustment layer | `type: "adjustment"` |
176
+ | Shape morphing / repeater | keyframe `path`; `repeater` |
177
+ | Footage (Lottie) | `type: "lottie"` |
165
178
  | Motion blur | `motionBlur: {samples, shutter}` |
166
179
 
167
180
  Layer index 0 is the top of the stack, as in After Effects. See
168
- [`plugin/skills/dtly/SKILL.md`](plugin/skills/dtly/SKILL.md) for the full guide.
181
+ [`plugin/skills/moti/SKILL.md`](plugin/skills/moti/SKILL.md) for the full guide.
169
182
 
170
183
  ## Development
171
184
 
@@ -184,7 +197,7 @@ Opening Claude Code in the repo loads the local MCP server (`.mcp.json`) and the
184
197
  - Studio: graph editor, drag-to-reorder layers, multi-select, media import by drag and drop
185
198
  - Faster rendering: layer-bounds buffers, caching finished layers
186
199
  - Templates with brand kits and media slots for fixed 30/60 s videos
187
- - More AE features: 3D layers and camera, repeaters, path morphing, LUTs
200
+ - Templates with media slots; audio-reactive animation; beat-synced cuts
188
201
 
189
202
  ## License
190
203
 
package/dist/agents.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export declare const skillTargets: (agent: string, project: boolean) => string[];
2
+ export declare const SKILL_NAME = "moti";
2
3
  export declare const installSkill: (pkgRoot: string, dirs: string[]) => string[];
3
4
  export declare const MCP_SETUP: Record<string, {
4
5
  file: string;
package/dist/agents.js CHANGED
@@ -18,10 +18,15 @@ export const skillTargets = (agent, project) => {
18
18
  return [claude, shared];
19
19
  throw new Error(`Unknown agent "${agent}". Use claude, codex, cursor, gemini, copilot or all.`);
20
20
  };
21
+ export const SKILL_NAME = 'moti';
21
22
  export const installSkill = (pkgRoot, dirs) => dirs.map((base) => {
22
- const dest = path.join(base, 'dtly');
23
+ const dest = path.join(base, SKILL_NAME);
23
24
  fs.mkdirSync(dest, { recursive: true });
24
- fs.cpSync(path.join(pkgRoot, 'plugin/skills/dtly'), dest, { recursive: true });
25
+ fs.cpSync(path.join(pkgRoot, 'plugin/skills', SKILL_NAME), dest, { recursive: true });
26
+ // Before 0.2.2 the skill was called "dtly"; remove that copy so agents don't see it twice.
27
+ const old = path.join(base, 'dtly', 'SKILL.md');
28
+ if (fs.existsSync(old) && /^name: dtly$/m.test(fs.readFileSync(old, 'utf8')))
29
+ fs.rmSync(path.dirname(old), { recursive: true, force: true });
25
30
  return dest;
26
31
  });
27
32
  const json = (o) => JSON.stringify(o, null, 2);
@@ -48,14 +53,14 @@ export const setupGuide = (agent) => {
48
53
  return [
49
54
  `DT.ly setup for ${agent}`,
50
55
  '',
51
- `1. Skill (motion-design guidance for the agent) → ${skillDir}/dtly`,
56
+ `1. Skill "moti" (motion-design guidance for the agent) → ${skillDir}/${SKILL_NAME}`,
52
57
  ` npx ${PKG} skill install --agent ${agent}`,
53
58
  ` (or for every agent at once: npx skills add dnyantra/dtly)`,
54
59
  '',
55
60
  `2. MCP server (the editing tools) → ${m.file}`,
56
61
  ...m.text.split('\n').map((l) => (l ? ` ${l}` : '')),
57
62
  '',
58
- '3. Restart the agent and ask it to "list the dtly tools" to check.',
63
+ '3. Restart the agent and try: /moti make a 15 second vertical ad for <your business>',
59
64
  'Needs Node.js 20+ and FFmpeg on PATH.',
60
65
  ].join('\n');
61
66
  };
@@ -1 +1 @@
1
- {"version":3,"file":"agents.js","sourceRoot":"","sources":["../src/agents.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agents.js","sourceRoot":"","sources":["../src/agents.ts"],"names":[],"mappings":"AAAA,yGAAyG;AACzG,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,GAAG,GAAG,gBAAgB,CAAC;AAC7B,MAAM,MAAM,GAAG,EAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,EAAC,CAAC;AAE1D,6FAA6F;AAC7F,kFAAkF;AAClF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAa,EAAE,OAAgB,EAAE,EAAE;IAC9D,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC1B,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC3I,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC/F,IAAI,KAAK,KAAK,QAAQ;QAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACxF,IAAI,KAAK,KAAK,KAAK;QAAE,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,MAAM,IAAI,KAAK,CAAC,kBAAkB,KAAK,uDAAuD,CAAC,CAAC;AAClG,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC;AAEjC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,OAAe,EAAE,IAAc,EAAE,EAAE,CAC9D,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;IAChB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACzC,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC;IACtC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,EAAE,UAAU,CAAC,EAAE,IAAI,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC;IACpF,2FAA2F;IAC3F,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IAChD,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAC,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAC,CAAC,CAAC;IAC3I,OAAO,IAAI,CAAC;AACd,CAAC,CAAC,CAAC;AAEL,MAAM,IAAI,GAAG,CAAC,CAAU,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAExD,qGAAqG;AACrG,MAAM,CAAC,MAAM,SAAS,GAAiD;IACrE,MAAM,EAAE;QACN,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,8CAA8C,GAAG,yGAAyG;KACjK;IACD,KAAK,EAAE;QACL,IAAI,EAAE,mEAAmE;QACzE,IAAI,EAAE,gCAAgC,GAAG,6FAA6F,GAAG,oHAAoH;KAC9P;IACD,MAAM,EAAE,EAAC,IAAI,EAAE,yDAAyD,EAAE,IAAI,EAAE,IAAI,CAAC,EAAC,UAAU,EAAE,EAAC,IAAI,EAAE,MAAM,EAAC,EAAC,CAAC,EAAC;IACnH,MAAM,EAAE,EAAC,IAAI,EAAE,mEAAmE,EAAE,IAAI,EAAE,IAAI,CAAC,EAAC,UAAU,EAAE,EAAC,IAAI,EAAE,MAAM,EAAC,EAAC,CAAC,EAAC;IAC7H,OAAO,EAAE,EAAC,IAAI,EAAE,gDAAgD,EAAE,IAAI,EAAE,IAAI,CAAC,EAAC,OAAO,EAAE,EAAC,IAAI,EAAE,EAAC,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,EAAC,EAAC,EAAC,CAAC,EAAC;IAC5H,QAAQ,EAAE,EAAC,IAAI,EAAE,qCAAqC,EAAE,IAAI,EAAE,IAAI,CAAC,EAAC,UAAU,EAAE,EAAC,IAAI,EAAE,MAAM,EAAC,EAAC,CAAC,EAAC;CAClG,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAa,EAAE,EAAE;IAC1C,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAC3B,IAAI,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,KAAK,eAAe,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnG,MAAM,QAAQ,GAAG,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,kBAAkB,CAAC;IAC9E,OAAO;QACL,mBAAmB,KAAK,EAAE;QAC1B,EAAE;QACF,4DAA4D,QAAQ,IAAI,UAAU,EAAE;QACpF,UAAU,GAAG,0BAA0B,KAAK,EAAE;QAC9C,+DAA+D;QAC/D,EAAE;QACF,uCAAuC,CAAC,CAAC,IAAI,EAAE;QAC/C,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACtD,EAAE;QACF,sFAAsF;QACtF,uCAAuC;KACxC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC,CAAC"}
package/dist/cli.js CHANGED
@@ -3,9 +3,10 @@ import fs from 'node:fs';
3
3
  import path from 'node:path';
4
4
  import { fileURLToPath } from 'node:url';
5
5
  import { installSkill, MCP_SETUP, setupGuide, skillTargets } from './agents.js';
6
- import { listPresets } from './presets/index.js';
6
+ import { listPresets, PRESETS } from './presets/index.js';
7
7
  import { renderContactSheet, renderStill, renderVideo, renderVideoParallel } from './render/export.js';
8
- import { writeProject } from './ops/store.js';
8
+ import { editProject, writeProject } from './ops/store.js';
9
+ import { addSvg } from './ops/ops.js';
9
10
  import { STARTERS } from './starter.js';
10
11
  import { BRAND, VERSION } from './version.js';
11
12
  const [cmd, ...rest] = process.argv.slice(2);
@@ -16,12 +17,18 @@ After Effects-style motion graphics as JSON, rendered to MP4.
16
17
  dtly render <project.json> <out.mp4> [--from s] [--to s] [--comp id] [--workers n]
17
18
  dtly still <project.json> <time> <out.png> [--scale 0.5] [--comp id]
18
19
  dtly sheet <project.json> <out.png> <t1,t2,...> [--comp id]
19
- dtly presets list text animators, openers, slides, transitions
20
+ dtly import-svg <project.json> <file.svg> [--width 600] [--at x,y] [--name logo] [--color #hex] [--comp id]
21
+ add an SVG as editable shape layers
22
+ dtly captions <project.json> <audio|video|.srt|.vtt|.json> [--lang mr-IN] [--words 4] [--y px] [--highlight #hex] [--offset s] [--uppercase]
23
+ word-highlight captions (audio/video is transcribed with Sarvam; needs SARVAM_API_KEY)
24
+ dtly map-tiles <out.png> --tiles <url with {z}/{x}/{y}> (--route "lat,lon;lat,lon" | --bounds latN,lonW,latS,lonE) [--size 1080x1920] [--attribution "© OpenStreetMap"]
25
+ stitch a map background for map.route (you choose the provider and its licence)
26
+ dtly presets list text animators, openers, slides, transitions, charts, captions, maps
20
27
  dtly studio <project.json> [--port 4400] [--no-open] browser preview + timeline editor
21
28
  dtly mcp run the MCP server (stdio) for AI agents
22
29
  dtly setup <agent> how to add DT.ly to claude, codex, cursor, gemini, copilot, windsurf
23
30
  dtly skill install [--agent claude|codex|cursor|gemini|copilot|all] [--project] [--dir d]
24
- install the agent skill (default: all)
31
+ install the "moti" agent skill (default: all)
25
32
 
26
33
  Docs: https://github.com/dnyantra/dtly`;
27
34
  const flag = (name) => { const i = rest.indexOf(`--${name}`); return i >= 0 ? rest[i + 1] : undefined; };
@@ -58,6 +65,29 @@ try {
58
65
  writeProject(rest[0], starter.build(flag('title') ?? 'DT.ly'));
59
66
  console.log(`Created ${rest[0]} (${starter.description})\nNext: dtly render ${rest[0]} ${rest[0].replace(/\.json$/, '')}.mp4`);
60
67
  }
68
+ else if (cmd === 'import-svg' && rest[1]) {
69
+ const at = flag('at')?.split(',').map(Number);
70
+ const r = editProject(rest[0], (p) => addSvg(p, flag('comp'), fs.readFileSync(rest[1], 'utf8'), { name: flag('name') ?? path.basename(rest[1], '.svg'), width: num(flag('width')), position: at, color: flag('color') }));
71
+ console.log(`Added "${r.group}" with ${r.parts} shape layers (${Math.round(r.size[0])}×${Math.round(r.size[1])} px). Animate the group layer, or each part.`);
72
+ }
73
+ else if (cmd === 'captions' && rest[1]) {
74
+ const { loadCaptions } = await import('./render/transcribe.js');
75
+ const src = await loadCaptions(rest[1], flag('lang'));
76
+ const y = num(flag('y'));
77
+ const r = editProject(rest[0], (p) => PRESETS['captions.add'].apply(p, flag('comp'), { ...src, maxWords: num(flag('words')), highlight: flag('highlight'), offset: num(flag('offset')), uppercase: rest.includes('--uppercase'), ...(y ? { position: [p.comps.find((c) => c.id === (flag('comp') ?? p.root)).width / 2, y] } : {}) }));
78
+ console.log(`Added ${r.created.length} caption layers. ${r.note ?? ''}`);
79
+ }
80
+ else if (cmd === 'map-tiles' && rest[0]) {
81
+ const { stitchMap } = await import('./render/tiles.js');
82
+ const tiles = flag('tiles');
83
+ if (!tiles)
84
+ throw new Error('--tiles <url template> is required, e.g. https://api.maptiler.com/maps/streets/256/{z}/{x}/{y}.png?key=KEY');
85
+ const [w, h] = (flag('size') ?? '1080x1920').split('x').map(Number);
86
+ const route = flag('route')?.split(';').map((p) => p.split(',').map(Number));
87
+ const b = flag('bounds')?.split(',').map(Number);
88
+ const view = await stitchMap(rest[0], { tiles, route, bounds: b ? [[b[0], b[1]], [b[2], b[3]]] : undefined, size: [w, h], attribution: flag('attribution') });
89
+ console.log(`Saved ${rest[0]} (+ ${rest[0]}.json with bounds ${JSON.stringify(view.bounds)}). Use it as map.route's background: {src, bounds}.`);
90
+ }
61
91
  else if (cmd === 'presets') {
62
92
  console.log(listPresets());
63
93
  }
@@ -78,7 +108,7 @@ try {
78
108
  else if (cmd === 'skill' && rest[0] === 'install') {
79
109
  const dirs = flag('dir') ? [flag('dir')] : skillTargets(flag('agent') ?? 'all', rest.includes('--project'));
80
110
  for (const dest of installSkill(pkgRoot, dirs))
81
- console.log(`Installed the DT.ly skill to ${dest}`);
111
+ console.log(`Installed the moti skill to ${dest}`);
82
112
  console.log(`Next, add the MCP server to your agent: dtly setup <claude|codex|cursor|gemini|copilot|windsurf>`);
83
113
  }
84
114
  else if (cmd === 'setup') {
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/dist/core/anim.js CHANGED
@@ -1,5 +1,17 @@
1
1
  import { applyEase } from './ease.js';
2
2
  import { parseColor, rgbaString } from './color.js';
3
+ import { morph, parsePath, pathToString } from './path.js';
4
+ const pathCache = new Map();
5
+ const parsed = (d) => {
6
+ let p = pathCache.get(d);
7
+ if (!p) {
8
+ p = parsePath(d);
9
+ if (pathCache.size > 200)
10
+ pathCache.clear();
11
+ pathCache.set(d, p);
12
+ }
13
+ return p;
14
+ };
3
15
  import { isAnimated } from './model.js';
4
16
  const lerp = (a, b, p) => a + (b - a) * p;
5
17
  const interpolate = (a, b, p) => {
@@ -11,6 +23,14 @@ const interpolate = (a, b, p) => {
11
23
  const ca = parseColor(a), cb = parseColor(b);
12
24
  if (ca && cb)
13
25
  return rgbaString(ca.map((v, i) => lerp(v, cb[i], p)));
26
+ // Two SVG paths: morph between them.
27
+ if (/^\s*[Mm]/.test(a) && /^\s*[Mm]/.test(b)) {
28
+ if (p <= 0)
29
+ return a;
30
+ if (p >= 1)
31
+ return b;
32
+ return pathToString(morph(parsed(a), parsed(b), p));
33
+ }
14
34
  }
15
35
  return p < 1 ? a : b;
16
36
  };
@@ -1 +1 @@
1
- {"version":3,"file":"anim.js","sourceRoot":"","sources":["../../src/core/anim.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"anim.js","sourceRoot":"","sources":["../../src/core/anim.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export interface Cue {
2
+ start: number;
3
+ end: number;
4
+ text: string;
5
+ }
6
+ export interface Word {
7
+ text: string;
8
+ start: number;
9
+ end: number;
10
+ }
11
+ export declare const parseSubtitles: (src: string) => Cue[];
12
+ export declare const cuesToWords: (cues: Cue[]) => Word[];
13
+ export declare const paginate: (words: Word[], maxWords?: number, maxChars?: number) => Word[][];
@@ -0,0 +1,57 @@
1
+ const time = (s) => {
2
+ const m = s.trim().replace(',', '.').match(/(?:(\d+):)?(\d+):(\d+(?:\.\d+)?)/);
3
+ if (!m)
4
+ return NaN;
5
+ return (m[1] ? Number(m[1]) * 3600 : 0) + Number(m[2]) * 60 + Number(m[3]);
6
+ };
7
+ // Parses SRT or WebVTT into cues.
8
+ export const parseSubtitles = (src) => {
9
+ const cues = [];
10
+ for (const block of src.replace(/\r/g, '').split(/\n\s*\n/)) {
11
+ const lines = block.split('\n').map((l) => l.trim()).filter(Boolean);
12
+ const i = lines.findIndex((l) => l.includes('-->'));
13
+ if (i < 0)
14
+ continue;
15
+ const [a, b] = lines[i].split('-->');
16
+ const text = lines.slice(i + 1).join(' ').replace(/<[^>]+>/g, '').trim();
17
+ if (text)
18
+ cues.push({ start: time(a), end: time(b.split(/\s+/).filter(Boolean)[0] ?? b), text });
19
+ }
20
+ return cues.filter((c) => Number.isFinite(c.start) && Number.isFinite(c.end));
21
+ };
22
+ // Spreads each cue's time across its words, weighted by length (cues only have phrase timing).
23
+ export const cuesToWords = (cues) => cues.flatMap((c) => {
24
+ const words = c.text.split(/\s+/).filter(Boolean);
25
+ const weights = words.map((w) => Math.max(1, [...w].length) + 1);
26
+ const total = weights.reduce((a, b) => a + b, 0);
27
+ let t = c.start;
28
+ return words.map((w, i) => {
29
+ const d = ((c.end - c.start) * weights[i]) / total;
30
+ const out = { text: w, start: +t.toFixed(3), end: +(t + d).toFixed(3) };
31
+ t += d;
32
+ return out;
33
+ });
34
+ });
35
+ // Groups words into on-screen pages: at most `maxWords` / `maxChars`, breaking after punctuation
36
+ // and on pauses, the way short-form video captions read.
37
+ export const paginate = (words, maxWords = 4, maxChars = 22) => {
38
+ const pages = [];
39
+ let cur = [];
40
+ const len = (ws) => ws.reduce((a, w) => a + [...w.text].length + 1, 0);
41
+ for (const w of words) {
42
+ const pause = cur.length && w.start - cur[cur.length - 1].end > 0.6;
43
+ if (cur.length && (cur.length >= maxWords || len([...cur, w]) > maxChars || pause)) {
44
+ pages.push(cur);
45
+ cur = [];
46
+ }
47
+ cur.push(w);
48
+ if (/[.!?।,;:]$/.test(w.text) && cur.length >= 2) {
49
+ pages.push(cur);
50
+ cur = [];
51
+ }
52
+ }
53
+ if (cur.length)
54
+ pages.push(cur);
55
+ return pages;
56
+ };
57
+ //# sourceMappingURL=captions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"captions.js","sourceRoot":"","sources":["../../src/core/captions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export type LatLon = [number, number];
2
+ export declare const project: ([lat, lon]: LatLon, z?: number) => [number, number];
3
+ export declare const unproject: ([x, y]: [number, number], z?: number) => LatLon;
4
+ export interface MapView {
5
+ bounds: [LatLon, LatLon];
6
+ size: [number, number];
7
+ }
8
+ export declare const fitView: (pts: LatLon[], w: number, h: number, pad?: number) => {
9
+ toPx: (p: LatLon) => [number, number];
10
+ view: MapView;
11
+ };
12
+ export declare const viewToPx: (view: MapView) => (p: LatLon) => [number, number];
13
+ export declare const distanceKm: (a: LatLon, b: LatLon) => number;
@@ -0,0 +1,41 @@
1
+ // Lat/lon → world pixel coordinates at zoom level z (256 px tiles).
2
+ export const project = ([lat, lon], z = 0) => {
3
+ const s = 256 * 2 ** z;
4
+ const sin = Math.sin((Math.max(-85.05, Math.min(85.05, lat)) * Math.PI) / 180);
5
+ return [((lon + 180) / 360) * s, (0.5 - Math.log((1 + sin) / (1 - sin)) / (4 * Math.PI)) * s];
6
+ };
7
+ export const unproject = ([x, y], z = 0) => {
8
+ const s = 256 * 2 ** z;
9
+ const lon = (x / s) * 360 - 180;
10
+ const n = Math.PI - (2 * Math.PI * y) / s;
11
+ return [(180 / Math.PI) * Math.atan(0.5 * (Math.exp(n) - Math.exp(-n))), lon];
12
+ };
13
+ // Fits coordinates into a w×h box with padding, keeping Mercator proportions.
14
+ export const fitView = (pts, w, h, pad = 0.12) => {
15
+ const xy = pts.map((p) => project(p, 0));
16
+ let x0 = Math.min(...xy.map((p) => p[0])), x1 = Math.max(...xy.map((p) => p[0]));
17
+ let y0 = Math.min(...xy.map((p) => p[1])), y1 = Math.max(...xy.map((p) => p[1]));
18
+ const cx = (x0 + x1) / 2, cy = (y0 + y1) / 2;
19
+ let sw = Math.max(x1 - x0, 1e-6) / (1 - 2 * pad), sh = Math.max(y1 - y0, 1e-6) / (1 - 2 * pad);
20
+ if (sw / sh > w / h)
21
+ sh = (sw * h) / w;
22
+ else
23
+ sw = (sh * w) / h;
24
+ x0 = cx - sw / 2;
25
+ x1 = cx + sw / 2;
26
+ y0 = cy - sh / 2;
27
+ y1 = cy + sh / 2;
28
+ const toPx = (p) => { const [x, y] = project(p, 0); return [((x - x0) / (x1 - x0)) * w, ((y - y0) / (y1 - y0)) * h]; };
29
+ return { toPx, view: { bounds: [unproject([x0, y0]), unproject([x1, y1])], size: [w, h] } };
30
+ };
31
+ // Maps lat/lon into an existing view (a stitched map image of known bounds).
32
+ export const viewToPx = (view) => {
33
+ const [a, b] = [project(view.bounds[0], 0), project(view.bounds[1], 0)];
34
+ return (p) => { const [x, y] = project(p, 0); return [((x - a[0]) / (b[0] - a[0])) * view.size[0], ((y - a[1]) / (b[1] - a[1])) * view.size[1]]; };
35
+ };
36
+ export const distanceKm = (a, b) => {
37
+ const R = 6371, dLat = ((b[0] - a[0]) * Math.PI) / 180, dLon = ((b[1] - a[1]) * Math.PI) / 180;
38
+ const h = Math.sin(dLat / 2) ** 2 + Math.cos((a[0] * Math.PI) / 180) * Math.cos((b[0] * Math.PI) / 180) * Math.sin(dLon / 2) ** 2;
39
+ return 2 * R * Math.asin(Math.sqrt(h));
40
+ };
41
+ //# sourceMappingURL=geo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geo.js","sourceRoot":"","sources":["../../src/core/geo.ts"],"names":[],"mappings":"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"}
@@ -59,11 +59,63 @@ export type Effect = {
59
59
  } | {
60
60
  type: 'contrast';
61
61
  amount: Prop<number>;
62
+ } | {
63
+ type: 'cornerPin';
64
+ corners: Prop<[Vec2, Vec2, Vec2, Vec2]>;
65
+ } | {
66
+ type: 'tilt';
67
+ rotateX?: Prop<number>;
68
+ rotateY?: Prop<number>;
69
+ rotateZ?: Prop<number>;
70
+ perspective?: number;
71
+ } | {
72
+ type: 'rgbSplit';
73
+ amount: Prop<number>;
74
+ angle?: number;
75
+ } | {
76
+ type: 'glitch';
77
+ amount: Prop<number>;
78
+ seed?: number;
79
+ hold?: number;
80
+ rgb?: boolean;
81
+ } | {
82
+ type: 'wave';
83
+ amplitude: Prop<number>;
84
+ wavelength?: number;
85
+ speed?: number;
86
+ direction?: 'horizontal' | 'vertical';
87
+ } | {
88
+ type: 'curves';
89
+ master?: [number, number][];
90
+ r?: [number, number][];
91
+ g?: [number, number][];
92
+ b?: [number, number][];
93
+ } | {
94
+ type: 'colorBalance';
95
+ shadows?: [number, number, number];
96
+ midtones?: [number, number, number];
97
+ highlights?: [number, number, number];
98
+ } | {
99
+ type: 'exposure';
100
+ stops: Prop<number>;
101
+ } | {
102
+ type: 'temperature';
103
+ amount: Prop<number>;
104
+ } | {
105
+ type: 'lut';
106
+ src: string;
107
+ intensity?: Prop<number>;
108
+ } | {
109
+ type: 'vignette';
110
+ amount: Prop<number>;
111
+ softness?: number;
112
+ color?: Color;
62
113
  };
63
114
  export interface Mask {
64
115
  shape: 'rect' | 'ellipse' | 'path';
65
116
  rect?: Prop<[number, number, number, number]>;
66
117
  points?: Vec2[];
118
+ path?: Prop<string>;
67
119
  radius?: number;
68
120
  inverted?: boolean;
69
121
  }
@@ -118,28 +170,52 @@ export interface SolidLayer extends LayerBase {
118
170
  export interface NullLayer extends LayerBase {
119
171
  type: 'null';
120
172
  }
173
+ export type Gradient = {
174
+ linear: {
175
+ from: Vec2;
176
+ to: Vec2;
177
+ stops: [number, Color][];
178
+ };
179
+ } | {
180
+ radial: {
181
+ center: Vec2;
182
+ radius: number;
183
+ stops: [number, Color][];
184
+ };
185
+ };
186
+ export interface Repeater {
187
+ copies: Prop<number>;
188
+ offset?: number;
189
+ position?: Vec2;
190
+ rotation?: number;
191
+ scale?: Vec2;
192
+ anchor?: Vec2;
193
+ startOpacity?: number;
194
+ endOpacity?: number;
195
+ }
121
196
  export interface ShapeLayer extends LayerBase {
122
197
  type: 'shape';
123
- shape: 'rect' | 'ellipse' | 'polygon' | 'path' | 'line';
198
+ shape: 'rect' | 'ellipse' | 'polygon' | 'star' | 'path' | 'line';
124
199
  size?: Prop<Vec2>;
125
200
  radius?: Prop<number>;
201
+ innerRadius?: Prop<number>;
126
202
  sides?: number;
203
+ path?: Prop<string>;
127
204
  points?: Vec2[];
128
205
  closed?: boolean;
129
- fill?: Prop<Color> | {
130
- linear: {
131
- from: Vec2;
132
- to: Vec2;
133
- stops: [number, Color][];
134
- };
135
- };
206
+ fill?: Prop<Color> | Gradient;
207
+ fillRule?: 'nonzero' | 'evenodd';
136
208
  stroke?: Prop<Color>;
137
209
  strokeWidth?: Prop<number>;
138
210
  lineCap?: 'butt' | 'round' | 'square';
211
+ lineJoin?: 'miter' | 'round' | 'bevel';
212
+ dash?: number[];
139
213
  trim?: {
140
214
  start?: Prop<number>;
141
215
  end?: Prop<number>;
216
+ offset?: Prop<number>;
142
217
  };
218
+ repeater?: Repeater;
143
219
  }
144
220
  export interface TextLayer extends LayerBase {
145
221
  type: 'text';
@@ -168,6 +244,21 @@ export interface TextLayer extends LayerBase {
168
244
  radius?: number;
169
245
  reveal?: Prop<number>;
170
246
  };
247
+ value?: Prop<number>;
248
+ format?: {
249
+ decimals?: number;
250
+ prefix?: string;
251
+ suffix?: string;
252
+ locale?: string;
253
+ grouping?: boolean;
254
+ };
255
+ karaoke?: {
256
+ words: [number, number][];
257
+ color?: Color;
258
+ mode?: 'current' | 'spoken';
259
+ scale?: number;
260
+ box?: Color;
261
+ };
171
262
  animators?: TextAnimator[];
172
263
  }
173
264
  export interface ImageLayer extends LayerBase {
@@ -193,13 +284,25 @@ export interface AudioLayer extends LayerBase {
193
284
  fadeIn?: number;
194
285
  fadeOut?: number;
195
286
  }
287
+ export interface LottieLayer extends LayerBase {
288
+ type: 'lottie';
289
+ src: string;
290
+ size?: Vec2;
291
+ loop?: boolean;
292
+ speed?: number;
293
+ timeOffset?: number;
294
+ frames?: [number, number];
295
+ }
296
+ export interface AdjustmentLayer extends LayerBase {
297
+ type: 'adjustment';
298
+ }
196
299
  export interface PrecompLayer extends LayerBase {
197
300
  type: 'precomp';
198
301
  comp: string;
199
302
  timeOffset?: number;
200
303
  speed?: number;
201
304
  }
202
- export type Layer = SolidLayer | NullLayer | ShapeLayer | TextLayer | ImageLayer | VideoLayer | AudioLayer | PrecompLayer;
305
+ export type Layer = SolidLayer | NullLayer | ShapeLayer | TextLayer | ImageLayer | VideoLayer | AudioLayer | PrecompLayer | LottieLayer | AdjustmentLayer;
203
306
  export type LayerType = Layer['type'];
204
307
  export type NewLayer = Layer extends infer L ? (L extends Layer ? Omit<L, 'id'> & {
205
308
  id?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/core/model.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,uFAAuF;AA4JvF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAI,CAAsB,EAAoB,EAAE,CACxE,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,WAAW,IAAI,CAAC,CAAC"}
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/core/model.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,uFAAuF;AAmNvF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAI,CAAsB,EAAoB,EAAE,CACxE,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,WAAW,IAAI,CAAC,CAAC"}