@editframe/create 0.43.0 → 0.45.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.
- package/README.md +11 -0
- package/dist/index.js +16 -28
- package/dist/index.js.map +1 -1
- package/dist/skills/editframe-brand-video-generator/README.md +155 -0
- package/dist/skills/editframe-brand-video-generator/SKILL.md +207 -0
- package/dist/skills/editframe-brand-video-generator/references/brand-examples.md +178 -0
- package/dist/skills/editframe-brand-video-generator/references/color-psychology.md +227 -0
- package/dist/skills/editframe-brand-video-generator/references/composition-patterns.md +383 -0
- package/dist/skills/editframe-brand-video-generator/references/editing.md +66 -0
- package/dist/skills/editframe-brand-video-generator/references/emotional-arcs.md +496 -0
- package/dist/skills/editframe-brand-video-generator/references/genre-selection.md +135 -0
- package/dist/skills/editframe-brand-video-generator/references/transition-styles.md +611 -0
- package/dist/skills/editframe-brand-video-generator/references/typography-personalities.md +326 -0
- package/dist/skills/editframe-brand-video-generator/references/video-archetypes.md +86 -0
- package/dist/skills/editframe-brand-video-generator/references/video-fundamentals.md +169 -0
- package/dist/skills/editframe-brand-video-generator/references/visual-metaphors.md +50 -0
- package/dist/skills/editframe-composition/SKILL.md +169 -0
- package/dist/skills/editframe-composition/references/audio.md +483 -0
- package/dist/skills/editframe-composition/references/captions.md +844 -0
- package/dist/skills/editframe-composition/references/composition-model.md +73 -0
- package/dist/skills/editframe-composition/references/configuration.md +403 -0
- package/dist/skills/editframe-composition/references/css-parts.md +105 -0
- package/dist/skills/editframe-composition/references/css-variables.md +640 -0
- package/dist/skills/editframe-composition/references/entry-points.md +810 -0
- package/dist/skills/editframe-composition/references/events.md +499 -0
- package/dist/skills/editframe-composition/references/getting-started.md +259 -0
- package/dist/skills/editframe-composition/references/hooks.md +234 -0
- package/dist/skills/editframe-composition/references/image.md +241 -0
- package/dist/skills/editframe-composition/references/r3f.md +580 -0
- package/dist/skills/editframe-composition/references/render-api.md +484 -0
- package/dist/skills/editframe-composition/references/render-strategies.md +119 -0
- package/dist/skills/editframe-composition/references/render-to-video.md +1101 -0
- package/dist/skills/editframe-composition/references/scripting.md +606 -0
- package/dist/skills/editframe-composition/references/sequencing.md +116 -0
- package/dist/skills/editframe-composition/references/server-rendering.md +753 -0
- package/dist/skills/editframe-composition/references/surface.md +329 -0
- package/dist/skills/editframe-composition/references/text.md +627 -0
- package/dist/skills/editframe-composition/references/time-model.md +99 -0
- package/dist/skills/editframe-composition/references/timegroup-modes.md +102 -0
- package/dist/skills/editframe-composition/references/timegroup.md +457 -0
- package/dist/skills/editframe-composition/references/timeline-root.md +398 -0
- package/dist/skills/editframe-composition/references/transcription.md +47 -0
- package/dist/skills/editframe-composition/references/transitions.md +608 -0
- package/dist/skills/editframe-composition/references/use-media-info.md +357 -0
- package/dist/skills/editframe-composition/references/video.md +506 -0
- package/dist/skills/editframe-composition/references/waveform.md +327 -0
- package/dist/skills/editframe-editor-gui/SKILL.md +152 -0
- package/dist/skills/editframe-editor-gui/references/active-root-temporal.md +657 -0
- package/dist/skills/editframe-editor-gui/references/canvas.md +947 -0
- package/dist/skills/editframe-editor-gui/references/controls.md +366 -0
- package/dist/skills/editframe-editor-gui/references/dial.md +756 -0
- package/dist/skills/editframe-editor-gui/references/editor-toolkit.md +587 -0
- package/dist/skills/editframe-editor-gui/references/filmstrip.md +460 -0
- package/dist/skills/editframe-editor-gui/references/fit-scale.md +772 -0
- package/dist/skills/editframe-editor-gui/references/focus-overlay.md +561 -0
- package/dist/skills/editframe-editor-gui/references/hierarchy.md +544 -0
- package/dist/skills/editframe-editor-gui/references/overlay-item.md +634 -0
- package/dist/skills/editframe-editor-gui/references/overlay-layer.md +429 -0
- package/dist/skills/editframe-editor-gui/references/pan-zoom.md +568 -0
- package/dist/skills/editframe-editor-gui/references/pause.md +397 -0
- package/dist/skills/editframe-editor-gui/references/play.md +370 -0
- package/dist/skills/editframe-editor-gui/references/preview.md +391 -0
- package/dist/skills/editframe-editor-gui/references/resizable-box.md +749 -0
- package/dist/skills/editframe-editor-gui/references/scrubber.md +588 -0
- package/dist/skills/editframe-editor-gui/references/thumbnail-strip.md +566 -0
- package/dist/skills/editframe-editor-gui/references/time-display.md +492 -0
- package/dist/skills/editframe-editor-gui/references/timeline-ruler.md +489 -0
- package/dist/skills/editframe-editor-gui/references/timeline.md +604 -0
- package/dist/skills/editframe-editor-gui/references/toggle-loop.md +618 -0
- package/dist/skills/editframe-editor-gui/references/toggle-play.md +526 -0
- package/dist/skills/editframe-editor-gui/references/transform-handles.md +924 -0
- package/dist/skills/editframe-editor-gui/references/trim-handles.md +725 -0
- package/dist/skills/editframe-editor-gui/references/workbench.md +453 -0
- package/dist/skills/editframe-motion-design/SKILL.md +101 -0
- package/dist/skills/editframe-motion-design/references/0-editframe.md +299 -0
- package/dist/skills/editframe-motion-design/references/1-intent.md +201 -0
- package/dist/skills/editframe-motion-design/references/2-physics-model.md +405 -0
- package/dist/skills/editframe-motion-design/references/3-attention.md +350 -0
- package/dist/skills/editframe-motion-design/references/4-process.md +418 -0
- package/dist/skills/editframe-vite-plugin/SKILL.md +75 -0
- package/dist/skills/editframe-vite-plugin/references/file-api.md +111 -0
- package/dist/skills/editframe-vite-plugin/references/getting-started.md +96 -0
- package/dist/skills/editframe-vite-plugin/references/jit-transcoding.md +91 -0
- package/dist/skills/editframe-vite-plugin/references/local-assets.md +75 -0
- package/dist/skills/editframe-vite-plugin/references/visual-testing.md +136 -0
- package/dist/skills/editframe-webhooks/SKILL.md +126 -0
- package/dist/skills/editframe-webhooks/references/events.md +382 -0
- package/dist/skills/editframe-webhooks/references/getting-started.md +232 -0
- package/dist/skills/editframe-webhooks/references/security.md +418 -0
- package/dist/skills/editframe-webhooks/references/testing.md +409 -0
- package/dist/skills/editframe-webhooks/references/troubleshooting.md +457 -0
- package/dist/templates/html/AGENTS.md +13 -0
- package/dist/templates/react/AGENTS.md +13 -0
- package/dist/utils.js +15 -16
- package/dist/utils.js.map +1 -1
- package/package.json +2 -2
- package/tsdown.config.ts +4 -0
- package/dist/detectAgent.js +0 -89
- 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)
|