@editframe/create 0.44.0 → 0.45.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.
Files changed (98) hide show
  1. package/dist/index.js +16 -28
  2. package/dist/index.js.map +1 -1
  3. package/dist/skills/editframe-brand-video-generator/README.md +155 -0
  4. package/dist/skills/editframe-brand-video-generator/SKILL.md +207 -0
  5. package/dist/skills/editframe-brand-video-generator/references/brand-examples.md +178 -0
  6. package/dist/skills/editframe-brand-video-generator/references/color-psychology.md +227 -0
  7. package/dist/skills/editframe-brand-video-generator/references/composition-patterns.md +383 -0
  8. package/dist/skills/editframe-brand-video-generator/references/editing.md +66 -0
  9. package/dist/skills/editframe-brand-video-generator/references/emotional-arcs.md +496 -0
  10. package/dist/skills/editframe-brand-video-generator/references/genre-selection.md +135 -0
  11. package/dist/skills/editframe-brand-video-generator/references/transition-styles.md +611 -0
  12. package/dist/skills/editframe-brand-video-generator/references/typography-personalities.md +326 -0
  13. package/dist/skills/editframe-brand-video-generator/references/video-archetypes.md +86 -0
  14. package/dist/skills/editframe-brand-video-generator/references/video-fundamentals.md +169 -0
  15. package/dist/skills/editframe-brand-video-generator/references/visual-metaphors.md +50 -0
  16. package/dist/skills/editframe-composition/SKILL.md +169 -0
  17. package/dist/skills/editframe-composition/references/audio.md +483 -0
  18. package/dist/skills/editframe-composition/references/captions.md +844 -0
  19. package/dist/skills/editframe-composition/references/composition-model.md +73 -0
  20. package/dist/skills/editframe-composition/references/configuration.md +403 -0
  21. package/dist/skills/editframe-composition/references/css-parts.md +105 -0
  22. package/dist/skills/editframe-composition/references/css-variables.md +640 -0
  23. package/dist/skills/editframe-composition/references/entry-points.md +810 -0
  24. package/dist/skills/editframe-composition/references/events.md +499 -0
  25. package/dist/skills/editframe-composition/references/getting-started.md +259 -0
  26. package/dist/skills/editframe-composition/references/hooks.md +234 -0
  27. package/dist/skills/editframe-composition/references/image.md +241 -0
  28. package/dist/skills/editframe-composition/references/r3f.md +580 -0
  29. package/dist/skills/editframe-composition/references/render-api.md +484 -0
  30. package/dist/skills/editframe-composition/references/render-strategies.md +119 -0
  31. package/dist/skills/editframe-composition/references/render-to-video.md +1101 -0
  32. package/dist/skills/editframe-composition/references/scripting.md +606 -0
  33. package/dist/skills/editframe-composition/references/sequencing.md +116 -0
  34. package/dist/skills/editframe-composition/references/server-rendering.md +753 -0
  35. package/dist/skills/editframe-composition/references/surface.md +329 -0
  36. package/dist/skills/editframe-composition/references/text.md +627 -0
  37. package/dist/skills/editframe-composition/references/time-model.md +99 -0
  38. package/dist/skills/editframe-composition/references/timegroup-modes.md +102 -0
  39. package/dist/skills/editframe-composition/references/timegroup.md +457 -0
  40. package/dist/skills/editframe-composition/references/timeline-root.md +398 -0
  41. package/dist/skills/editframe-composition/references/transcription.md +47 -0
  42. package/dist/skills/editframe-composition/references/transitions.md +608 -0
  43. package/dist/skills/editframe-composition/references/use-media-info.md +357 -0
  44. package/dist/skills/editframe-composition/references/video.md +506 -0
  45. package/dist/skills/editframe-composition/references/waveform.md +327 -0
  46. package/dist/skills/editframe-editor-gui/SKILL.md +152 -0
  47. package/dist/skills/editframe-editor-gui/references/active-root-temporal.md +657 -0
  48. package/dist/skills/editframe-editor-gui/references/canvas.md +947 -0
  49. package/dist/skills/editframe-editor-gui/references/controls.md +366 -0
  50. package/dist/skills/editframe-editor-gui/references/dial.md +756 -0
  51. package/dist/skills/editframe-editor-gui/references/editor-toolkit.md +587 -0
  52. package/dist/skills/editframe-editor-gui/references/filmstrip.md +460 -0
  53. package/dist/skills/editframe-editor-gui/references/fit-scale.md +772 -0
  54. package/dist/skills/editframe-editor-gui/references/focus-overlay.md +561 -0
  55. package/dist/skills/editframe-editor-gui/references/hierarchy.md +544 -0
  56. package/dist/skills/editframe-editor-gui/references/overlay-item.md +634 -0
  57. package/dist/skills/editframe-editor-gui/references/overlay-layer.md +429 -0
  58. package/dist/skills/editframe-editor-gui/references/pan-zoom.md +568 -0
  59. package/dist/skills/editframe-editor-gui/references/pause.md +397 -0
  60. package/dist/skills/editframe-editor-gui/references/play.md +370 -0
  61. package/dist/skills/editframe-editor-gui/references/preview.md +391 -0
  62. package/dist/skills/editframe-editor-gui/references/resizable-box.md +749 -0
  63. package/dist/skills/editframe-editor-gui/references/scrubber.md +588 -0
  64. package/dist/skills/editframe-editor-gui/references/thumbnail-strip.md +566 -0
  65. package/dist/skills/editframe-editor-gui/references/time-display.md +492 -0
  66. package/dist/skills/editframe-editor-gui/references/timeline-ruler.md +489 -0
  67. package/dist/skills/editframe-editor-gui/references/timeline.md +604 -0
  68. package/dist/skills/editframe-editor-gui/references/toggle-loop.md +618 -0
  69. package/dist/skills/editframe-editor-gui/references/toggle-play.md +526 -0
  70. package/dist/skills/editframe-editor-gui/references/transform-handles.md +924 -0
  71. package/dist/skills/editframe-editor-gui/references/trim-handles.md +725 -0
  72. package/dist/skills/editframe-editor-gui/references/workbench.md +453 -0
  73. package/dist/skills/editframe-motion-design/SKILL.md +101 -0
  74. package/dist/skills/editframe-motion-design/references/0-editframe.md +299 -0
  75. package/dist/skills/editframe-motion-design/references/1-intent.md +201 -0
  76. package/dist/skills/editframe-motion-design/references/2-physics-model.md +405 -0
  77. package/dist/skills/editframe-motion-design/references/3-attention.md +350 -0
  78. package/dist/skills/editframe-motion-design/references/4-process.md +418 -0
  79. package/dist/skills/editframe-vite-plugin/SKILL.md +75 -0
  80. package/dist/skills/editframe-vite-plugin/references/file-api.md +111 -0
  81. package/dist/skills/editframe-vite-plugin/references/getting-started.md +96 -0
  82. package/dist/skills/editframe-vite-plugin/references/jit-transcoding.md +91 -0
  83. package/dist/skills/editframe-vite-plugin/references/local-assets.md +75 -0
  84. package/dist/skills/editframe-vite-plugin/references/visual-testing.md +136 -0
  85. package/dist/skills/editframe-webhooks/SKILL.md +126 -0
  86. package/dist/skills/editframe-webhooks/references/events.md +382 -0
  87. package/dist/skills/editframe-webhooks/references/getting-started.md +232 -0
  88. package/dist/skills/editframe-webhooks/references/security.md +418 -0
  89. package/dist/skills/editframe-webhooks/references/testing.md +409 -0
  90. package/dist/skills/editframe-webhooks/references/troubleshooting.md +457 -0
  91. package/dist/templates/html/AGENTS.md +13 -0
  92. package/dist/templates/react/AGENTS.md +13 -0
  93. package/dist/utils.js +15 -16
  94. package/dist/utils.js.map +1 -1
  95. package/package.json +1 -1
  96. package/tsdown.config.ts +4 -0
  97. package/dist/detectAgent.js +0 -89
  98. package/dist/detectAgent.js.map +0 -1
@@ -0,0 +1,453 @@
1
+ ---
2
+ title: Workbench Element
3
+ description: Full-featured video editor layout combining preview, timeline, hierarchy panel, and export controls in one component.
4
+ type: reference
5
+ nav:
6
+ parent: "Editor Shells"
7
+ priority: 10
8
+ api:
9
+ attributes:
10
+ - name: rendering
11
+ type: boolean
12
+ default: false
13
+ description: Enable render-only mode (no UI)
14
+ properties:
15
+ - name: rendering
16
+ type: boolean
17
+ default: false
18
+ description: Enable render-only mode (no UI)
19
+ methods:
20
+ - name: setPreviewPresentationMode()
21
+ signature: setPreviewPresentationMode(mode)
22
+ description: Set preview rendering mode ("dom" or "canvas")
23
+ returns: void
24
+ - name: getPreviewPresentationMode()
25
+ signature: getPreviewPresentationMode()
26
+ description: Get current preview rendering mode
27
+ returns: PreviewPresentationMode
28
+ - name: startExport()
29
+ signature: startExport(options)
30
+ description: Start video export with progress tracking
31
+ returns: Promise<void>
32
+ - name: cancelExport()
33
+ signature: cancelExport()
34
+ description: Cancel the current export
35
+ returns: void
36
+ react:
37
+ generate: true
38
+ componentName: Workbench
39
+ importPath: "@editframe/react"
40
+ additionalProps:
41
+ - name: className
42
+ type: string
43
+ description: CSS classes for styling
44
+ nav:
45
+ parent: "Tools"
46
+ priority: 42
47
+ related: ["preview", "controls"]
48
+ ---
49
+
50
+ <!-- html-only -->
51
+ # ef-workbench
52
+ <!-- /html-only -->
53
+ <!-- react-only -->
54
+ # Workbench
55
+ <!-- /react-only -->
56
+
57
+ <!-- html-only -->
58
+ Complete video editor interface with preview, timeline, hierarchy panel, and export controls.
59
+ <!-- /html-only -->
60
+ <!-- react-only -->
61
+ Full timeline editor UI with hierarchy and timeline views.
62
+ <!-- /react-only -->
63
+
64
+ <!-- react-only -->
65
+ ## Import
66
+
67
+ ```tsx
68
+ import { Workbench } from "@editframe/react";
69
+ ```
70
+ <!-- /react-only -->
71
+
72
+ ## Basic Usage
73
+
74
+ <!-- html-only -->
75
+ Wrap a composition to add a full editing interface:
76
+
77
+ ```html live
78
+ <ef-workbench class="w-full h-screen">
79
+ <ef-pan-zoom slot="canvas">
80
+ <ef-fit-scale>
81
+ <ef-timegroup mode="sequence" class="w-[720px] h-[480px] bg-black">
82
+ <ef-timegroup mode="fixed" duration="3s" class="flex items-center justify-center">
83
+ <ef-text duration="3s" class="text-white text-4xl">First Scene</ef-text>
84
+ </ef-timegroup>
85
+ <ef-timegroup mode="fixed" duration="3s" class="flex items-center justify-center">
86
+ <ef-text duration="3s" class="text-white text-4xl">Second Scene</ef-text>
87
+ </ef-timegroup>
88
+ </ef-timegroup>
89
+ </ef-fit-scale>
90
+ </ef-pan-zoom>
91
+
92
+ <ef-hierarchy slot="hierarchy"></ef-hierarchy>
93
+
94
+ <div slot="timeline" class="h-full flex flex-col">
95
+ <ef-controls class="flex items-center gap-2 p-2 border-b border-gray-700">
96
+ <ef-toggle-play>
97
+ <button slot="play" class="px-3 py-1 bg-blue-600 text-white rounded">Play</button>
98
+ <button slot="pause" class="px-3 py-1 bg-gray-600 text-white rounded">Pause</button>
99
+ </ef-toggle-play>
100
+ <ef-time-display class="text-sm text-gray-300"></ef-time-display>
101
+ </ef-controls>
102
+ <ef-filmstrip class="flex-1"></ef-filmstrip>
103
+ </div>
104
+ </ef-workbench>
105
+ ```
106
+ <!-- /html-only -->
107
+ <!-- react-only -->
108
+ The `workbench` prop on the root `Timegroup` automatically enables the workbench UI:
109
+
110
+ ```tsx
111
+ import { Timegroup, Video, Text } from "@editframe/react";
112
+
113
+ export const Video = () => {
114
+ return (
115
+ <Timegroup
116
+ workbench // Enables workbench UI
117
+ mode="sequence"
118
+ className="w-[1920px] h-[1080px] bg-black"
119
+ >
120
+ <Timegroup mode="fixed" duration="5s" className="absolute w-full h-full">
121
+ <Video src="/assets/intro.mp4" className="size-full" />
122
+ <Text duration="5s" className="text-white text-4xl">Title</Text>
123
+ </Timegroup>
124
+ </Timegroup>
125
+ );
126
+ };
127
+ ```
128
+ <!-- /react-only -->
129
+
130
+ <!-- html-only -->
131
+ ## Workbench Layout
132
+
133
+ The workbench provides a three-panel layout:
134
+
135
+ - **Canvas** (center) - Preview with pan/zoom controls
136
+ - **Hierarchy** (left sidebar) - Layer panel showing composition structure
137
+ - **Timeline** (bottom) - Playback controls and timeline visualization
138
+
139
+ ## Slots
140
+
141
+ ### canvas
142
+
143
+ Main preview area. Should contain a timegroup wrapped in `ef-pan-zoom` and `ef-fit-scale`:
144
+
145
+ ```html
146
+ <ef-pan-zoom slot="canvas">
147
+ <ef-fit-scale>
148
+ <ef-timegroup mode="contain" class="w-[1920px] h-[1080px]">
149
+ <!-- composition content -->
150
+ </ef-timegroup>
151
+ </ef-fit-scale>
152
+ </ef-pan-zoom>
153
+ ```
154
+
155
+ ### hierarchy
156
+
157
+ Left sidebar for layer management:
158
+
159
+ ```html
160
+ <ef-hierarchy slot="hierarchy"></ef-hierarchy>
161
+ ```
162
+
163
+ ### timeline
164
+
165
+ Bottom panel for playback controls and timeline:
166
+
167
+ ```html
168
+ <div slot="timeline" class="flex flex-col">
169
+ <ef-controls class="border-b">
170
+ <!-- playback controls -->
171
+ </ef-controls>
172
+ <ef-filmstrip class="flex-1"></ef-filmstrip>
173
+ </div>
174
+ ```
175
+ <!-- /html-only -->
176
+
177
+ <!-- react-only -->
178
+ ## Standalone Workbench Component
179
+
180
+ Use `Workbench` component for custom layouts:
181
+
182
+ ```tsx
183
+ import { Preview, Controls, Workbench } from "@editframe/react";
184
+
185
+ export const Editor = () => {
186
+ return (
187
+ <div className="h-screen flex flex-col">
188
+ {/* Top: Preview */}
189
+ <div className="flex-1 flex items-center justify-center p-4 bg-gray-900">
190
+ <Preview className="max-w-[1280px] w-full aspect-video bg-black" />
191
+ </div>
192
+
193
+ {/* Middle: Controls */}
194
+ <div className="px-4 py-2 bg-gray-800">
195
+ <Controls />
196
+ </div>
197
+
198
+ {/* Bottom: Timeline */}
199
+ <div className="h-80 border-t border-gray-700">
200
+ <Workbench className="w-full h-full" />
201
+ </div>
202
+ </div>
203
+ );
204
+ };
205
+ ```
206
+
207
+ ## Features
208
+
209
+ The workbench provides:
210
+
211
+ - **Timeline view** - Visual timeline with all elements
212
+ - **Hierarchy view** - Tree structure of your composition
213
+ - **Playhead scrubbing** - Click timeline to seek
214
+ - **Element selection** - Click elements to select
215
+ - **Duration visualization** - See timing of all elements
216
+ <!-- /react-only -->
217
+
218
+ ## Preview Modes
219
+
220
+ <!-- html-only -->
221
+ Workbench supports two preview rendering modes:
222
+
223
+ - **DOM mode** (default) - Shows the real timegroup DOM directly
224
+ - **Canvas mode** - Renders to canvas each frame for consistent output
225
+
226
+ Toggle modes via the toolbar settings button.
227
+ <!-- /html-only -->
228
+ <!-- react-only -->
229
+ The workbench supports different preview rendering modes:
230
+
231
+ ```tsx
232
+ import { setPreviewPresentationMode, getPreviewPresentationMode } from "@editframe/react";
233
+
234
+ // Set DOM mode (default) - shows original DOM content
235
+ setPreviewPresentationMode("dom");
236
+
237
+ // Set Canvas mode - renders to canvas using active rendering path
238
+ setPreviewPresentationMode("canvas");
239
+
240
+ // Get current mode
241
+ const mode = getPreviewPresentationMode(); // "dom" | "canvas"
242
+ ```
243
+
244
+ ### DOM Mode
245
+
246
+ Shows the original DOM content directly. This is the default and recommended for most use cases:
247
+
248
+ ```tsx
249
+ import { setPreviewPresentationMode } from "@editframe/react";
250
+
251
+ setPreviewPresentationMode("dom");
252
+ ```
253
+
254
+ ### Canvas Mode
255
+
256
+ Renders to canvas using the active rendering path. Useful for testing how content will appear in the final render:
257
+
258
+ ```tsx
259
+ import { setPreviewPresentationMode } from "@editframe/react";
260
+
261
+ setPreviewPresentationMode("canvas");
262
+ ```
263
+ <!-- /react-only -->
264
+
265
+ ## Render Mode
266
+
267
+ <!-- html-only -->
268
+ When `rendering="true"`, workbench hides the UI and shows only the canvas. Used for server-side rendering:
269
+
270
+ ```html
271
+ <ef-workbench rendering>
272
+ <ef-timegroup slot="canvas" mode="contain">
273
+ <!-- composition -->
274
+ </ef-timegroup>
275
+ </ef-workbench>
276
+ ```
277
+ <!-- /html-only -->
278
+ <!-- react-only -->
279
+ The `rendering` property indicates when the composition is in render mode (used by CLI/export flows):
280
+
281
+ ```tsx
282
+ import { Timegroup } from "@editframe/react";
283
+
284
+ <Timegroup
285
+ workbench
286
+ rendering={isExporting} // Set to true during export
287
+ mode="sequence"
288
+ className="w-[1920px] h-[1080px]"
289
+ >
290
+ {/* Composition */}
291
+ </Timegroup>
292
+ ```
293
+
294
+ When `rendering={true}`:
295
+ - The workbench UI is hidden
296
+ - The composition is optimized for export
297
+ - Frame generation is enabled
298
+ - Used by CLI tools and server-side rendering
299
+ <!-- /react-only -->
300
+
301
+ <!-- html-only -->
302
+ ## Export
303
+
304
+ Click the Export button in the toolbar to render the composition to video. Configure export settings in the popup:
305
+
306
+ - **Scale** - Resolution multiplier (25%, 50%, 75%, 100%)
307
+ - **Audio** - Include audio tracks
308
+ - **Range** - Export full duration or custom in/out range
309
+
310
+ Export uses browser WebCodecs API for local rendering. Progress updates show:
311
+ - Current frame / total frames
312
+ - Elapsed time / total duration
313
+ - Render speed multiplier
314
+ - Estimated time remaining
315
+ - Live preview thumbnail
316
+
317
+ ## Theme
318
+
319
+ Workbench respects system theme by default. Toggle between light, dark, and system modes via the toolbar button.
320
+
321
+ ## Performance Stats
322
+
323
+ Enable the performance overlay via toolbar settings to see:
324
+ - **FPS** - Actual frame rate
325
+ - **Render** - Average render time per frame (canvas mode)
326
+ - **Headroom** - Time budget remaining (canvas mode)
327
+ - **Resolution** - Current render resolution
328
+ - **Scale** - Resolution scale percentage (canvas mode)
329
+ - **CPU** - Compute pressure state
330
+ - **State** - Motion state (playing, scrubbing, or at rest)
331
+
332
+ Auto resolution mode dynamically adjusts render resolution during playback to maintain smooth performance.
333
+
334
+ ## Fit to Content
335
+
336
+ Click the fit-to-content button in the toolbar to reset zoom and center the composition.
337
+ <!-- /html-only -->
338
+
339
+ <!-- react-only -->
340
+ ## Full Editor Layout
341
+
342
+ ```tsx
343
+ import {
344
+ Configuration,
345
+ Preview,
346
+ Controls,
347
+ Workbench,
348
+ Timegroup,
349
+ Video,
350
+ Audio,
351
+ Text
352
+ } from "@editframe/react";
353
+
354
+ export const FullEditor = () => {
355
+ return (
356
+ <Configuration mediaEngine="local">
357
+ <div className="h-screen flex flex-col bg-gray-950">
358
+ {/* Header */}
359
+ <header className="h-14 bg-gray-900 border-b border-gray-800 flex items-center px-4">
360
+ <h1 className="text-white text-xl font-bold">Video Editor</h1>
361
+ </header>
362
+
363
+ {/* Main content */}
364
+ <div className="flex-1 flex flex-col">
365
+ {/* Preview area */}
366
+ <div className="flex-1 flex items-center justify-center p-8 bg-gray-900">
367
+ <Preview className="max-w-[1280px] w-full aspect-video bg-black rounded-lg shadow-2xl" />
368
+ </div>
369
+
370
+ {/* Controls */}
371
+ <div className="bg-gray-800 border-y border-gray-700">
372
+ <div className="max-w-4xl mx-auto px-4 py-3">
373
+ <Controls />
374
+ </div>
375
+ </div>
376
+
377
+ {/* Timeline */}
378
+ <div className="h-80 bg-gray-900 border-t border-gray-800">
379
+ <Workbench className="w-full h-full" />
380
+ </div>
381
+ </div>
382
+
383
+ {/* Hidden composition */}
384
+ <div className="hidden">
385
+ <Timegroup workbench mode="sequence" className="w-[1920px] h-[1080px]">
386
+ <Timegroup mode="fixed" duration="5s" className="absolute w-full h-full">
387
+ <Video src="/assets/video.mp4" className="size-full object-cover" />
388
+ <Text duration="5s" className="absolute top-8 text-white text-4xl">
389
+ Title
390
+ </Text>
391
+ <Audio src="/assets/music.mp3" volume={0.3} />
392
+ </Timegroup>
393
+ </Timegroup>
394
+ </div>
395
+ </div>
396
+ </Configuration>
397
+ );
398
+ };
399
+ ```
400
+
401
+ ## Resizable Timeline
402
+
403
+ ```tsx
404
+ import { useState } from "react";
405
+
406
+ export const ResizableEditor = () => {
407
+ const [timelineHeight, setTimelineHeight] = useState(320);
408
+
409
+ return (
410
+ <div className="h-screen flex flex-col">
411
+ <div className="flex-1">
412
+ <Preview className="w-full h-full" />
413
+ </div>
414
+
415
+ <div style={{ height: `${timelineHeight}px` }} className="border-t">
416
+ <Workbench className="w-full h-full" />
417
+ </div>
418
+ </div>
419
+ );
420
+ };
421
+ ```
422
+
423
+ ## Side-by-Side Layout
424
+
425
+ ```tsx
426
+ export const SideBySideEditor = () => {
427
+ return (
428
+ <div className="h-screen grid grid-cols-2">
429
+ {/* Left: Preview & Controls */}
430
+ <div className="flex flex-col">
431
+ <Preview className="flex-1 bg-black" />
432
+ <Controls className="bg-gray-800 p-4" />
433
+ </div>
434
+
435
+ {/* Right: Timeline */}
436
+ <div className="border-l border-gray-700">
437
+ <Workbench className="w-full h-full" />
438
+ </div>
439
+ </div>
440
+ );
441
+ };
442
+ ```
443
+
444
+ ## Notes
445
+
446
+ - The `workbench` prop on root `Timegroup` enables automatic UI
447
+ - Use `Workbench` component for custom layouts
448
+ - Timeline shows all elements and their timing
449
+ - Hierarchy shows nested structure
450
+ - Interactive scrubbing and element selection
451
+ - Preview modes are persisted to localStorage
452
+ - `rendering` state is typically controlled by export/CLI workflows
453
+ <!-- /react-only -->
@@ -0,0 +1,101 @@
1
+ ---
2
+ name: editframe-motion-design
3
+ title: Motion Design
4
+ description: Professional motion graphics for video content — animations, transitions, title sequences, and time-based visual design for video production.
5
+ order: 40
6
+ license: MIT
7
+ status: draft
8
+ metadata:
9
+ author: editframe
10
+ version: "2.0"
11
+ ---
12
+
13
+ # Motion Design
14
+
15
+ **For Video Content Creation**
16
+
17
+ Motion serves communication, not decoration. Every animation must guide attention and express intent.
18
+
19
+ ## The 4 Core Concepts
20
+
21
+ All motion design derives from these four ideas:
22
+
23
+ ### [1. Intent → Strategy](references/1-intent.md)
24
+ Message + Emotion → Motion characteristics
25
+
26
+ What should the viewer feel? This determines material selection and personality.
27
+
28
+ ### [2. Physics Model](references/2-physics-model.md)
29
+ Material + Weight + Force → Timing + Deformation + Easing
30
+
31
+ Material properties determine how objects move. Contains reference tables for durations, deformation, bounce, and easing curves.
32
+
33
+ ### [3. Attention Flow](references/3-attention.md)
34
+ One focus at a time. Sequence everything.
35
+
36
+ Plan viewer focus flow. Contains stagger patterns, timing, and sequencing strategies.
37
+
38
+ ### [4. Systematic Iteration](references/4-process.md)
39
+ Broad strokes → Easing → Secondary → Polish
40
+
41
+ Don't perfect details before structure is right. Process for iterating from concept to polish.
42
+
43
+ ## Decision Framework
44
+
45
+ ```
46
+ START: What's the message?
47
+
48
+ INTENT: What should viewer feel?
49
+ → Determines material personality
50
+
51
+ PHYSICS MODEL: What material expresses that?
52
+ → Material determines timing/deformation/bounce
53
+ → Weight scales duration
54
+ → Force determines easing
55
+
56
+ ATTENTION: What's the viewing sequence?
57
+ → Determines stagger patterns
58
+ → Ensures one focus at a time
59
+
60
+ PROCESS: Iterate systematically
61
+ → Broad strokes → Easing → Secondary → Polish
62
+ ```
63
+
64
+ ## Core Rules
65
+
66
+ 1. **One focus at a time** - Never animate unrelated elements simultaneously
67
+ 2. **Intent first** - Every animation serves the message
68
+ 3. **Material consistency** - All elements of same material move similarly
69
+ 4. **Exits faster than entrances** - 30-40% shorter duration
70
+ 5. **Respect physics** - Unless intentionally stylized
71
+
72
+ ## Video-Specific Considerations
73
+
74
+ - Work in **frames**, not just milliseconds (24fps, 30fps, 60fps)
75
+ - Consider **composition duration** and pacing for full sequence
76
+ - Think about **viewer distance** (mobile vs TV vs cinema)
77
+ - Plan for **audio sync** when applicable
78
+ - Account for **export format** constraints
79
+
80
+ ## Editframe Implementation
81
+
82
+ Motion principles map to specific Editframe mechanisms. Always check [0-editframe.md](references/0-editframe.md) first — it translates every concept to actual syntax.
83
+
84
+ | Motion concept | Editframe mechanism |
85
+ |---------------|---------------------|
86
+ | Easing / physics | CSS `animation-timing-function` + `@keyframes` |
87
+ | Stagger | `ef-text split="word"` + `--ef-word-index` CSS var |
88
+ | Progress-driven | `--ef-progress` CSS var (0–1, updates every frame) |
89
+ | Per-frame procedural | `addFrameTask((ownCurrentTimeMs, durationMs) => {})` on timegroup |
90
+ | Exit timing | `--ef-transition-out-start` CSS var |
91
+ | Scene overlap | `overlap="1s"` on parent `ef-timegroup[mode="sequence"]` |
92
+
93
+ **`addFrameTask` rules:** callback must be a pure function of `ownCurrentTimeMs` — no `Date.now()`, no `Math.random()`. Renders must be deterministic.
94
+
95
+ ## Quick Reference
96
+
97
+ For detailed tables and patterns, see:
98
+ - **Editframe implementation**: [0-editframe.md](references/0-editframe.md)
99
+ - **Material properties & durations**: [2-physics-model.md](references/2-physics-model.md)
100
+ - **Stagger delays & patterns**: [3-attention.md](references/3-attention.md)
101
+ - **Iteration workflow**: [4-process.md](references/4-process.md)