paper-motion 0.1.0 → 0.2.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 (75) hide show
  1. package/README.md +14 -0
  2. package/bin/pamo.mjs +133 -4
  3. package/examples/halo-explainer/audio/script.txt +8 -0
  4. package/examples/halo-explainer/audio/words.json +554 -0
  5. package/examples/halo-explainer/brand/IDENTITY.md +24 -0
  6. package/examples/halo-explainer/brand/decisions/2026-11-08-type.md +5 -0
  7. package/examples/halo-explainer/brand/motion.json +9 -0
  8. package/examples/halo-explainer/brand/shader-set/set.json +104 -0
  9. package/examples/halo-explainer/brand/sound.json +33 -0
  10. package/examples/halo-explainer/brand/tokens.json +97 -0
  11. package/examples/halo-explainer/brief.md +34 -0
  12. package/examples/halo-explainer/poster.jpg +0 -0
  13. package/examples/halo-explainer/scene.html +372 -0
  14. package/examples/orbit-keynote/audio/script.txt +7 -0
  15. package/examples/orbit-keynote/audio/words.json +494 -0
  16. package/examples/orbit-keynote/brand/IDENTITY.md +25 -0
  17. package/examples/orbit-keynote/brand/decisions/2026-11-08-look.md +6 -0
  18. package/examples/orbit-keynote/brand/decisions/2026-11-08-voice.md +3 -0
  19. package/examples/orbit-keynote/brand/motion.json +9 -0
  20. package/examples/orbit-keynote/brand/shader-set/set.json +45 -0
  21. package/examples/orbit-keynote/brand/sound.json +45 -0
  22. package/examples/orbit-keynote/brand/tokens.json +106 -0
  23. package/examples/orbit-keynote/brief.md +25 -0
  24. package/examples/orbit-keynote/poster.jpg +0 -0
  25. package/examples/orbit-keynote/scene.html +323 -0
  26. package/lib/customize.mjs +162 -0
  27. package/lib/live-board.js +128 -0
  28. package/lib/registry.mjs +344 -0
  29. package/lib/render.mjs +3 -3
  30. package/lib/server.mjs +1 -0
  31. package/lib/sfx.mjs +5 -3
  32. package/package.json +1 -1
  33. package/runtime/core.js +269 -0
  34. package/runtime/index.js +3 -260
  35. package/runtime/kit.js +98 -0
  36. package/runtime/moves/bar-reveal.js +19 -0
  37. package/runtime/moves/blur-in.js +7 -0
  38. package/runtime/moves/cells.js +17 -0
  39. package/runtime/moves/crossfade.js +6 -0
  40. package/runtime/moves/cut.js +3 -0
  41. package/runtime/moves/dive-in.js +21 -0
  42. package/runtime/moves/draw-on.js +12 -0
  43. package/runtime/moves/drift.js +7 -0
  44. package/runtime/moves/flash.js +15 -0
  45. package/runtime/moves/flip-3d.js +9 -0
  46. package/runtime/moves/flip-in.js +12 -0
  47. package/runtime/moves/flip-lift.js +24 -0
  48. package/runtime/moves/glitch.js +16 -0
  49. package/runtime/moves/iris.js +12 -0
  50. package/runtime/moves/magic-move.js +49 -0
  51. package/runtime/moves/mask-reveal.js +10 -0
  52. package/runtime/moves/odometer.js +32 -0
  53. package/runtime/moves/orbit.js +8 -0
  54. package/runtime/moves/pop-in.js +12 -0
  55. package/runtime/moves/punch.js +9 -0
  56. package/runtime/moves/push.js +14 -0
  57. package/runtime/moves/rgb-split.js +7 -0
  58. package/runtime/moves/roll.js +20 -0
  59. package/runtime/moves/scan-reveal.js +10 -0
  60. package/runtime/moves/scramble.js +21 -0
  61. package/runtime/moves/shake.js +15 -0
  62. package/runtime/moves/slices.js +14 -0
  63. package/runtime/moves/snap-scroll.js +23 -0
  64. package/runtime/moves/squash-drop.js +21 -0
  65. package/runtime/moves/tile-swirl.js +29 -0
  66. package/runtime/moves/track-in.js +7 -0
  67. package/runtime/moves/type-on.js +41 -0
  68. package/runtime/moves/unfold.js +20 -0
  69. package/runtime/moves/whip-pan.js +21 -0
  70. package/runtime/moves/whip.js +14 -0
  71. package/runtime/moves/wipe.js +9 -0
  72. package/runtime/moves/word-rise.js +10 -0
  73. package/runtime/moves/zoom-through.js +13 -0
  74. package/runtime/moves.js +66 -146
  75. package/templates/move-demo/scene.html +4 -3
@@ -0,0 +1,554 @@
1
+ [
2
+ {
3
+ "w": "Your",
4
+ "t": 1.12
5
+ },
6
+ {
7
+ "w": " ",
8
+ "t": 1.2
9
+ },
10
+ {
11
+ "w": "solar",
12
+ "t": 1.32
13
+ },
14
+ {
15
+ "w": " ",
16
+ "t": 1.58
17
+ },
18
+ {
19
+ "w": "panels",
20
+ "t": 1.68
21
+ },
22
+ {
23
+ "w": " ",
24
+ "t": 2.08
25
+ },
26
+ {
27
+ "w": "make",
28
+ "t": 2.14
29
+ },
30
+ {
31
+ "w": " ",
32
+ "t": 2.3
33
+ },
34
+ {
35
+ "w": "the",
36
+ "t": 2.34
37
+ },
38
+ {
39
+ "w": " ",
40
+ "t": 2.4
41
+ },
42
+ {
43
+ "w": "most",
44
+ "t": 2.54
45
+ },
46
+ {
47
+ "w": " ",
48
+ "t": 2.78
49
+ },
50
+ {
51
+ "w": "power",
52
+ "t": 2.9
53
+ },
54
+ {
55
+ "w": " ",
56
+ "t": 3.24
57
+ },
58
+ {
59
+ "w": "at",
60
+ "t": 3.28
61
+ },
62
+ {
63
+ "w": " ",
64
+ "t": 3.42
65
+ },
66
+ {
67
+ "w": "noon.",
68
+ "t": 3.5
69
+ },
70
+ {
71
+ "w": "\r",
72
+ "t": 3.82
73
+ },
74
+ {
75
+ "w": "\n",
76
+ "t": 4.28
77
+ },
78
+ {
79
+ "w": "But",
80
+ "t": 4.3
81
+ },
82
+ {
83
+ "w": " ",
84
+ "t": 4.44
85
+ },
86
+ {
87
+ "w": "you",
88
+ "t": 4.48
89
+ },
90
+ {
91
+ "w": " ",
92
+ "t": 4.6
93
+ },
94
+ {
95
+ "w": "use",
96
+ "t": 4.72
97
+ },
98
+ {
99
+ "w": " ",
100
+ "t": 4.88
101
+ },
102
+ {
103
+ "w": "the",
104
+ "t": 4.92
105
+ },
106
+ {
107
+ "w": " ",
108
+ "t": 4.98
109
+ },
110
+ {
111
+ "w": "most",
112
+ "t": 5.04
113
+ },
114
+ {
115
+ "w": " ",
116
+ "t": 5.38
117
+ },
118
+ {
119
+ "w": "at",
120
+ "t": 5.44
121
+ },
122
+ {
123
+ "w": " ",
124
+ "t": 5.56
125
+ },
126
+ {
127
+ "w": "night.",
128
+ "t": 5.62
129
+ },
130
+ {
131
+ "w": "\r",
132
+ "t": 5.96
133
+ },
134
+ {
135
+ "w": "\n",
136
+ "t": 7.16
137
+ },
138
+ {
139
+ "w": "Halo",
140
+ "t": 7.2
141
+ },
142
+ {
143
+ "w": " ",
144
+ "t": 7.54
145
+ },
146
+ {
147
+ "w": "stores",
148
+ "t": 7.78
149
+ },
150
+ {
151
+ "w": " ",
152
+ "t": 8.12
153
+ },
154
+ {
155
+ "w": "the",
156
+ "t": 8.16
157
+ },
158
+ {
159
+ "w": " ",
160
+ "t": 8.24
161
+ },
162
+ {
163
+ "w": "difference.",
164
+ "t": 8.28
165
+ },
166
+ {
167
+ "w": "\r",
168
+ "t": 8.82
169
+ },
170
+ {
171
+ "w": "\n",
172
+ "t": 10.68
173
+ },
174
+ {
175
+ "w": "One:",
176
+ "t": 10.76
177
+ },
178
+ {
179
+ "w": " ",
180
+ "t": 10.98
181
+ },
182
+ {
183
+ "w": "sunlight",
184
+ "t": 11.6
185
+ },
186
+ {
187
+ "w": " ",
188
+ "t": 12.02
189
+ },
190
+ {
191
+ "w": "hits",
192
+ "t": 12.14
193
+ },
194
+ {
195
+ "w": " ",
196
+ "t": 12.34
197
+ },
198
+ {
199
+ "w": "your",
200
+ "t": 12.38
201
+ },
202
+ {
203
+ "w": " ",
204
+ "t": 12.48
205
+ },
206
+ {
207
+ "w": "panels.",
208
+ "t": 12.54
209
+ },
210
+ {
211
+ "w": "\r",
212
+ "t": 13.04
213
+ },
214
+ {
215
+ "w": "\n",
216
+ "t": 14.34
217
+ },
218
+ {
219
+ "w": "Two:",
220
+ "t": 14.38
221
+ },
222
+ {
223
+ "w": " ",
224
+ "t": 14.66
225
+ },
226
+ {
227
+ "w": "whatever",
228
+ "t": 15.12
229
+ },
230
+ {
231
+ "w": " ",
232
+ "t": 15.44
233
+ },
234
+ {
235
+ "w": "you",
236
+ "t": 15.48
237
+ },
238
+ {
239
+ "w": " ",
240
+ "t": 15.62
241
+ },
242
+ {
243
+ "w": "don't",
244
+ "t": 15.68
245
+ },
246
+ {
247
+ "w": " ",
248
+ "t": 15.92
249
+ },
250
+ {
251
+ "w": "use",
252
+ "t": 16.02
253
+ },
254
+ {
255
+ "w": " ",
256
+ "t": 16.22
257
+ },
258
+ {
259
+ "w": "flows",
260
+ "t": 16.38
261
+ },
262
+ {
263
+ "w": " ",
264
+ "t": 16.72
265
+ },
266
+ {
267
+ "w": "into",
268
+ "t": 16.78
269
+ },
270
+ {
271
+ "w": " ",
272
+ "t": 17.0
273
+ },
274
+ {
275
+ "w": "Halo,",
276
+ "t": 17.04
277
+ },
278
+ {
279
+ "w": " ",
280
+ "t": 17.44
281
+ },
282
+ {
283
+ "w": "a",
284
+ "t": 17.84
285
+ },
286
+ {
287
+ "w": " ",
288
+ "t": 17.92
289
+ },
290
+ {
291
+ "w": "battery",
292
+ "t": 17.96
293
+ },
294
+ {
295
+ "w": " ",
296
+ "t": 18.4
297
+ },
298
+ {
299
+ "w": "the",
300
+ "t": 18.46
301
+ },
302
+ {
303
+ "w": " ",
304
+ "t": 18.56
305
+ },
306
+ {
307
+ "w": "size",
308
+ "t": 18.66
309
+ },
310
+ {
311
+ "w": " ",
312
+ "t": 18.92
313
+ },
314
+ {
315
+ "w": "of",
316
+ "t": 18.96
317
+ },
318
+ {
319
+ "w": " ",
320
+ "t": 19.02
321
+ },
322
+ {
323
+ "w": "a",
324
+ "t": 19.06
325
+ },
326
+ {
327
+ "w": " ",
328
+ "t": 19.12
329
+ },
330
+ {
331
+ "w": "suitcase.",
332
+ "t": 19.18
333
+ },
334
+ {
335
+ "w": "\r",
336
+ "t": 19.759
337
+ },
338
+ {
339
+ "w": "\n",
340
+ "t": 21.15
341
+ },
342
+ {
343
+ "w": "Three:",
344
+ "t": 21.19
345
+ },
346
+ {
347
+ "w": " ",
348
+ "t": 21.49
349
+ },
350
+ {
351
+ "w": "when",
352
+ "t": 21.97
353
+ },
354
+ {
355
+ "w": " ",
356
+ "t": 22.07
357
+ },
358
+ {
359
+ "w": "the",
360
+ "t": 22.09
361
+ },
362
+ {
363
+ "w": " ",
364
+ "t": 22.19
365
+ },
366
+ {
367
+ "w": "sun",
368
+ "t": 22.25
369
+ },
370
+ {
371
+ "w": " ",
372
+ "t": 22.41
373
+ },
374
+ {
375
+ "w": "goes",
376
+ "t": 22.47
377
+ },
378
+ {
379
+ "w": " ",
380
+ "t": 22.67
381
+ },
382
+ {
383
+ "w": "down,",
384
+ "t": 22.73
385
+ },
386
+ {
387
+ "w": " ",
388
+ "t": 23.01
389
+ },
390
+ {
391
+ "w": "your",
392
+ "t": 23.39
393
+ },
394
+ {
395
+ "w": " ",
396
+ "t": 23.55
397
+ },
398
+ {
399
+ "w": "home",
400
+ "t": 23.61
401
+ },
402
+ {
403
+ "w": " ",
404
+ "t": 23.85
405
+ },
406
+ {
407
+ "w": "runs",
408
+ "t": 23.91
409
+ },
410
+ {
411
+ "w": " ",
412
+ "t": 24.25
413
+ },
414
+ {
415
+ "w": "on",
416
+ "t": 24.33
417
+ },
418
+ {
419
+ "w": " ",
420
+ "t": 24.49
421
+ },
422
+ {
423
+ "w": "stored",
424
+ "t": 24.63
425
+ },
426
+ {
427
+ "w": " ",
428
+ "t": 24.91
429
+ },
430
+ {
431
+ "w": "sunlight.",
432
+ "t": 25.01
433
+ },
434
+ {
435
+ "w": "\r",
436
+ "t": 25.51
437
+ },
438
+ {
439
+ "w": "\n",
440
+ "t": 26.75
441
+ },
442
+ {
443
+ "w": "Lower",
444
+ "t": 26.79
445
+ },
446
+ {
447
+ "w": " ",
448
+ "t": 27.03
449
+ },
450
+ {
451
+ "w": "bills.",
452
+ "t": 27.13
453
+ },
454
+ {
455
+ "w": " ",
456
+ "t": 27.57
457
+ },
458
+ {
459
+ "w": "Lights",
460
+ "t": 28.07
461
+ },
462
+ {
463
+ "w": " ",
464
+ "t": 28.33
465
+ },
466
+ {
467
+ "w": "on,",
468
+ "t": 28.49
469
+ },
470
+ {
471
+ "w": " ",
472
+ "t": 28.71
473
+ },
474
+ {
475
+ "w": "even",
476
+ "t": 29.13
477
+ },
478
+ {
479
+ "w": " ",
480
+ "t": 29.41
481
+ },
482
+ {
483
+ "w": "in",
484
+ "t": 29.45
485
+ },
486
+ {
487
+ "w": " ",
488
+ "t": 29.51
489
+ },
490
+ {
491
+ "w": "a",
492
+ "t": 29.55
493
+ },
494
+ {
495
+ "w": " ",
496
+ "t": 29.59
497
+ },
498
+ {
499
+ "w": "blackout.",
500
+ "t": 29.63
501
+ },
502
+ {
503
+ "w": "\r",
504
+ "t": 30.15
505
+ },
506
+ {
507
+ "w": "\n",
508
+ "t": 31.38
509
+ },
510
+ {
511
+ "w": "Halo.",
512
+ "t": 31.42
513
+ },
514
+ {
515
+ "w": " ",
516
+ "t": 31.82
517
+ },
518
+ {
519
+ "w": "Keep",
520
+ "t": 32.26
521
+ },
522
+ {
523
+ "w": " ",
524
+ "t": 32.46
525
+ },
526
+ {
527
+ "w": "the",
528
+ "t": 32.52
529
+ },
530
+ {
531
+ "w": " ",
532
+ "t": 32.62
533
+ },
534
+ {
535
+ "w": "sun",
536
+ "t": 32.7
537
+ },
538
+ {
539
+ "w": " ",
540
+ "t": 33.08
541
+ },
542
+ {
543
+ "w": "after",
544
+ "t": 33.2
545
+ },
546
+ {
547
+ "w": " ",
548
+ "t": 33.42
549
+ },
550
+ {
551
+ "w": "dark.",
552
+ "t": 33.5
553
+ }
554
+ ]
@@ -0,0 +1,24 @@
1
+ # Halo
2
+
3
+ ## In one line
4
+ Halo is a home battery that stores the sun your panels make by day, so your home runs on it at night.
5
+
6
+ ## Offer
7
+ A suitcase-sized home battery for houses with solar panels: it keeps the daytime surplus and powers the home after
8
+ dark and during blackouts.
9
+
10
+ ## Audience
11
+ Homeowners who already have solar panels, or are about to, and want lower bills and backup power.
12
+
13
+ ## Personality
14
+ Calm · warm · trustworthy · quietly confident. Intimate rather than grand; calm rather than loud.
15
+
16
+ ## Voice
17
+ Plain words, short sentences, no jargon. Says what it does, then stops. Tagline: "Keep the sun after dark."
18
+
19
+ ## Facts
20
+ Invented brand: the explainer example of the paper-motion pack.
21
+
22
+ ## References
23
+ - Motion: works/references/ae-style.md (the user's After Effects reference: one buttery camera, pull-back reveals,
24
+ pop-ins with blur, whips).
@@ -0,0 +1,5 @@
1
+ # Type: Inter Tight + Inter
2
+
3
+ By: user (option C of three: Instrument Serif + Instrument Sans, Fraunces + Inter, Inter Tight + Inter).
4
+
5
+ Inter Tight 600 for the wordmark and titles (tight tracking, −0.045 em at display size), Inter 400/500 for body and labels. No italics. Chosen over the recommended Fraunces: closer to the After Effects reference's clean grotesk.
@@ -0,0 +1,9 @@
1
+ {
2
+ "pace": "medium",
3
+ "camera": "travel",
4
+ "text": "blur",
5
+ "color": "event",
6
+ "ending": "wordmark",
7
+ "timing": null,
8
+ "moves": ["pull-back reveal", "pop-in with blur", "whip", "iris through the sun"]
9
+ }
@@ -0,0 +1,104 @@
1
+ {
2
+ "format": {
3
+ "width": 1920,
4
+ "height": 1080,
5
+ "duration": 6,
6
+ "fps": 30
7
+ },
8
+ "entries": [
9
+ {
10
+ "id": "sun-glow",
11
+ "source": "engine",
12
+ "shader": "StaticRadialGradient",
13
+ "props": {
14
+ "colorBack": "rgba(247,245,240,0)",
15
+ "colors": [
16
+ "#F5C887",
17
+ "#F9E0B9",
18
+ "#FBEFDD"
19
+ ],
20
+ "radius": 0.75,
21
+ "focalDistance": 0,
22
+ "falloff": 0.25,
23
+ "mixing": 0.6,
24
+ "distortion": 0,
25
+ "grainMixer": 0.08,
26
+ "grainOverlay": 0
27
+ }
28
+ },
29
+ {
30
+ "id": "sun-dither",
31
+ "source": "engine",
32
+ "shader": "Dithering",
33
+ "props": {
34
+ "colorBack": "#F7F5F0",
35
+ "colorFront": "#EAAE66",
36
+ "shape": "sphere",
37
+ "type": "4x4",
38
+ "size": 2.5,
39
+ "scale": 0.62,
40
+ "speed": 0.25
41
+ }
42
+ },
43
+ {
44
+ "id": "day",
45
+ "source": "engine",
46
+ "shader": "MeshGradient",
47
+ "props": {
48
+ "colors": [
49
+ "#F7F5F0",
50
+ "#F8DDB0",
51
+ "#E7EBF3",
52
+ "#FBEBD0"
53
+ ],
54
+ "distortion": 0.7,
55
+ "swirl": 0.25,
56
+ "grainMixer": 0.1,
57
+ "grainOverlay": 0.06,
58
+ "speed": 0.18
59
+ }
60
+ },
61
+ {
62
+ "id": "flow",
63
+ "source": "engine",
64
+ "shader": "Dithering",
65
+ "props": {
66
+ "colorBack": "#F7F5F0",
67
+ "colorFront": "#F2B66D",
68
+ "shape": "warp",
69
+ "type": "4x4",
70
+ "size": 2,
71
+ "scale": 0.9,
72
+ "speed": 0.35
73
+ }
74
+ },
75
+ {
76
+ "id": "charge",
77
+ "source": "engine",
78
+ "shader": "Dithering",
79
+ "props": {
80
+ "colorBack": "#FBEBD0",
81
+ "colorFront": "#EAAE66",
82
+ "shape": "ripple",
83
+ "type": "8x8",
84
+ "size": 2,
85
+ "scale": 0.8,
86
+ "speed": 0.3
87
+ }
88
+ },
89
+ {
90
+ "id": "night",
91
+ "source": "engine",
92
+ "shader": "Dithering",
93
+ "props": {
94
+ "colorBack": "#EEF0F5",
95
+ "colorFront": "#9AA5BF",
96
+ "shape": "sphere",
97
+ "type": "4x4",
98
+ "size": 2.5,
99
+ "scale": 0.62,
100
+ "speed": 0.15
101
+ }
102
+ }
103
+ ]
104
+ }
@@ -0,0 +1,33 @@
1
+ {
2
+ "palette": "soft",
3
+ "lowpass": 2400,
4
+ "cues": {
5
+ "transition": {
6
+ "type": "swell",
7
+ "dur": 1.2,
8
+ "freq": 82.4,
9
+ "gain": 0.06
10
+ },
11
+ "land": null,
12
+ "text": {
13
+ "type": "tick",
14
+ "freq": 900,
15
+ "gain": 0.05
16
+ },
17
+ "bed": null
18
+ },
19
+ "keys": {
20
+ "bank": null,
21
+ "style": "creamy",
22
+ "gain": 0.12
23
+ },
24
+ "voice": {
25
+ "provider": "elevenlabs",
26
+ "gender": "female",
27
+ "language": "en",
28
+ "voice": "Matilda",
29
+ "id": "XrExE9yKIg1WjnnlVkGX"
30
+ },
31
+ "music": null,
32
+ "loudness": -16
33
+ }