@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,506 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Video Element
|
|
3
|
+
description: Video element with source trimming, volume control, muting, and frame-accurate playback for Editframe compositions.
|
|
4
|
+
type: reference
|
|
5
|
+
nav:
|
|
6
|
+
parent: "Media"
|
|
7
|
+
priority: 10
|
|
8
|
+
track: "video-basics"
|
|
9
|
+
track_step: 1
|
|
10
|
+
track_title: "Understanding Video Elements"
|
|
11
|
+
next_steps: ["video~tutorial"]
|
|
12
|
+
api:
|
|
13
|
+
attributes:
|
|
14
|
+
- name: src
|
|
15
|
+
type: string
|
|
16
|
+
required: true
|
|
17
|
+
description: URL or path to video source
|
|
18
|
+
- name: sourcein
|
|
19
|
+
type: timestring
|
|
20
|
+
description: Absolute start time in source media
|
|
21
|
+
- name: sourceout
|
|
22
|
+
type: timestring
|
|
23
|
+
description: Absolute end time in source media
|
|
24
|
+
- name: trimstart
|
|
25
|
+
type: timestring
|
|
26
|
+
description: Duration to trim from start
|
|
27
|
+
- name: trimend
|
|
28
|
+
type: timestring
|
|
29
|
+
description: Duration to trim from end
|
|
30
|
+
- name: duration
|
|
31
|
+
type: timestring
|
|
32
|
+
description: Override element duration
|
|
33
|
+
- name: mute
|
|
34
|
+
type: boolean
|
|
35
|
+
default: false
|
|
36
|
+
description: Silence the audio track
|
|
37
|
+
- name: volume
|
|
38
|
+
type: number
|
|
39
|
+
default: 1.0
|
|
40
|
+
description: Audio volume (0.0 to 1.0)
|
|
41
|
+
sections:
|
|
42
|
+
- slug: tutorial
|
|
43
|
+
title: Video Tutorial
|
|
44
|
+
heading: Video Tutorial
|
|
45
|
+
type: tutorial
|
|
46
|
+
description: Step-by-step guide to working with the video element
|
|
47
|
+
nav:
|
|
48
|
+
priority: 1
|
|
49
|
+
- slug: trimming
|
|
50
|
+
title: Trimming Video
|
|
51
|
+
heading: Trimming Video
|
|
52
|
+
type: how-to
|
|
53
|
+
description: How to trim video clips using absolute or relative approaches
|
|
54
|
+
nav:
|
|
55
|
+
priority: 2
|
|
56
|
+
- slug: effects
|
|
57
|
+
title: Video Effects
|
|
58
|
+
heading: Video Effects
|
|
59
|
+
type: how-to
|
|
60
|
+
description: How to apply CSS filters, transforms, and animations to video
|
|
61
|
+
nav:
|
|
62
|
+
priority: 3
|
|
63
|
+
react:
|
|
64
|
+
generate: true
|
|
65
|
+
componentName: Video
|
|
66
|
+
importPath: "@editframe/react"
|
|
67
|
+
propMapping:
|
|
68
|
+
sourcein: sourceIn
|
|
69
|
+
sourceout: sourceOut
|
|
70
|
+
trimstart: trimStart
|
|
71
|
+
trimend: trimEnd
|
|
72
|
+
mute: muted
|
|
73
|
+
additionalProps:
|
|
74
|
+
- name: className
|
|
75
|
+
type: string
|
|
76
|
+
description: CSS classes for styling
|
|
77
|
+
nav:
|
|
78
|
+
parent: "Components / Media"
|
|
79
|
+
priority: 10
|
|
80
|
+
related: ["audio", "image"]
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
<!-- html-only -->
|
|
84
|
+
# ef-video
|
|
85
|
+
<!-- /html-only -->
|
|
86
|
+
<!-- react-only -->
|
|
87
|
+
# Video
|
|
88
|
+
<!-- /react-only -->
|
|
89
|
+
|
|
90
|
+
<!-- html-only -->
|
|
91
|
+
Video element with source trimming.
|
|
92
|
+
<!-- /html-only -->
|
|
93
|
+
<!-- react-only -->
|
|
94
|
+
Display video clips with optional trimming.
|
|
95
|
+
<!-- /react-only -->
|
|
96
|
+
|
|
97
|
+
<!-- react-only -->
|
|
98
|
+
## Import
|
|
99
|
+
|
|
100
|
+
```tsx
|
|
101
|
+
import { Video } from "@editframe/react";
|
|
102
|
+
```
|
|
103
|
+
<!-- /react-only -->
|
|
104
|
+
|
|
105
|
+
## Basic Usage
|
|
106
|
+
|
|
107
|
+
<!-- html-only -->
|
|
108
|
+
```html live
|
|
109
|
+
<ef-timegroup mode="contain" class="w-[720px] h-[480px] bg-black">
|
|
110
|
+
<ef-video src="https://assets.editframe.com/bars-n-tone.mp4" class="size-full object-contain"></ef-video>
|
|
111
|
+
</ef-timegroup>
|
|
112
|
+
```
|
|
113
|
+
<!-- /html-only -->
|
|
114
|
+
<!-- react-only -->
|
|
115
|
+
```tsx
|
|
116
|
+
<Video src="/assets/clip.mp4" className="size-full object-cover" />
|
|
117
|
+
```
|
|
118
|
+
<!-- /react-only -->
|
|
119
|
+
|
|
120
|
+
## Trimming Approaches
|
|
121
|
+
|
|
122
|
+
Two ways to trim video -- choose based on your workflow:
|
|
123
|
+
|
|
124
|
+
<!-- html-only -->
|
|
125
|
+
### Absolute Trimming (sourcein/sourceout)
|
|
126
|
+
<!-- /html-only -->
|
|
127
|
+
<!-- react-only -->
|
|
128
|
+
### Absolute Trimming (sourceIn/sourceOut)
|
|
129
|
+
<!-- /react-only -->
|
|
130
|
+
|
|
131
|
+
Show specific timestamps from source. Use when you know exact timecodes.
|
|
132
|
+
|
|
133
|
+
<!-- html-only -->
|
|
134
|
+
```html live
|
|
135
|
+
<ef-timegroup mode="contain" class="w-[720px] h-[480px] bg-black">
|
|
136
|
+
<ef-video src="https://assets.editframe.com/bars-n-tone.mp4" sourcein="2s" sourceout="6s" class="size-full object-contain"></ef-video>
|
|
137
|
+
</ef-timegroup>
|
|
138
|
+
```
|
|
139
|
+
<!-- /html-only -->
|
|
140
|
+
<!-- react-only -->
|
|
141
|
+
```tsx
|
|
142
|
+
{/* Show seconds 10-20 from source (10s clip) */}
|
|
143
|
+
<Video
|
|
144
|
+
src="/assets/long-video.mp4"
|
|
145
|
+
sourceIn="10s"
|
|
146
|
+
sourceOut="20s"
|
|
147
|
+
className="size-full object-cover"
|
|
148
|
+
/>
|
|
149
|
+
```
|
|
150
|
+
<!-- /react-only -->
|
|
151
|
+
|
|
152
|
+
<!-- html-only -->
|
|
153
|
+
### Relative Trimming (trimstart/trimend)
|
|
154
|
+
<!-- /html-only -->
|
|
155
|
+
<!-- react-only -->
|
|
156
|
+
### Relative Trimming (trimStart/trimEnd)
|
|
157
|
+
<!-- /react-only -->
|
|
158
|
+
|
|
159
|
+
Remove time from start/end. Use when thinking "cut off X seconds".
|
|
160
|
+
|
|
161
|
+
<!-- html-only -->
|
|
162
|
+
```html live
|
|
163
|
+
<ef-timegroup mode="contain" class="w-[720px] h-[480px] bg-black">
|
|
164
|
+
<ef-video src="https://assets.editframe.com/bars-n-tone.mp4" trimstart="2s" trimend="3s" class="size-full object-contain"></ef-video>
|
|
165
|
+
</ef-timegroup>
|
|
166
|
+
```
|
|
167
|
+
<!-- /html-only -->
|
|
168
|
+
<!-- react-only -->
|
|
169
|
+
```tsx
|
|
170
|
+
{/* Remove 2s from start, 3s from end */}
|
|
171
|
+
<Video
|
|
172
|
+
src="/assets/video.mp4"
|
|
173
|
+
trimStart="2s"
|
|
174
|
+
trimEnd="3s"
|
|
175
|
+
className="size-full object-cover"
|
|
176
|
+
/>
|
|
177
|
+
```
|
|
178
|
+
<!-- /react-only -->
|
|
179
|
+
|
|
180
|
+
**When to use each:**
|
|
181
|
+
<!-- html-only -->
|
|
182
|
+
- `sourcein`/`sourceout` — Working with timecodes, precise frame references
|
|
183
|
+
- `trimstart`/`trimend` — UI builders, "how much to cut off" thinking
|
|
184
|
+
<!-- /html-only -->
|
|
185
|
+
<!-- react-only -->
|
|
186
|
+
- `sourceIn`/`sourceOut` - Working with timecode, precise frame references
|
|
187
|
+
- `trimStart`/`trimEnd` - UI builders, "how much to cut off" thinking
|
|
188
|
+
<!-- /react-only -->
|
|
189
|
+
|
|
190
|
+
<!-- react-only -->
|
|
191
|
+
## With Volume Control
|
|
192
|
+
|
|
193
|
+
```tsx
|
|
194
|
+
<Video
|
|
195
|
+
src="/assets/clip.mp4"
|
|
196
|
+
volume={0.5}
|
|
197
|
+
className="size-full"
|
|
198
|
+
/>
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
## Muted Video
|
|
202
|
+
|
|
203
|
+
```tsx
|
|
204
|
+
<Video
|
|
205
|
+
src="/assets/clip.mp4"
|
|
206
|
+
muted
|
|
207
|
+
className="size-full object-cover"
|
|
208
|
+
/>
|
|
209
|
+
```
|
|
210
|
+
<!-- /react-only -->
|
|
211
|
+
|
|
212
|
+
<!-- html-only -->
|
|
213
|
+
## Muted / Volume
|
|
214
|
+
|
|
215
|
+
```html
|
|
216
|
+
<ef-video src="video.mp4" mute class="size-full"></ef-video>
|
|
217
|
+
<ef-video src="video.mp4" volume="0.5" class="size-full"></ef-video>
|
|
218
|
+
```
|
|
219
|
+
<!-- /html-only -->
|
|
220
|
+
|
|
221
|
+
## Picture-in-Picture
|
|
222
|
+
|
|
223
|
+
<!-- html-only -->
|
|
224
|
+
```html live
|
|
225
|
+
<ef-timegroup mode="contain" class="w-[720px] h-[480px] bg-black">
|
|
226
|
+
<ef-video src="https://assets.editframe.com/bars-n-tone.mp4" class="size-full object-cover"></ef-video>
|
|
227
|
+
<ef-video src="https://assets.editframe.com/bars-n-tone.mp4" sourcein="5s" class="absolute bottom-4 right-4 w-48 h-28 rounded-lg border-2 border-white"></ef-video>
|
|
228
|
+
</ef-timegroup>
|
|
229
|
+
```
|
|
230
|
+
<!-- /html-only -->
|
|
231
|
+
|
|
232
|
+
<!-- react-only -->
|
|
233
|
+
## Full Scene Example
|
|
234
|
+
|
|
235
|
+
```tsx
|
|
236
|
+
import { Timegroup, Video, Text } from "@editframe/react";
|
|
237
|
+
|
|
238
|
+
export const VideoScene = () => {
|
|
239
|
+
return (
|
|
240
|
+
<Timegroup mode="contain" className="absolute w-full h-full">
|
|
241
|
+
<Video
|
|
242
|
+
src="/assets/background.mp4"
|
|
243
|
+
sourceIn="5s"
|
|
244
|
+
sourceOut="15s"
|
|
245
|
+
className="size-full object-cover"
|
|
246
|
+
/>
|
|
247
|
+
<Text className="absolute top-8 left-8 text-white text-3xl">
|
|
248
|
+
Video Title
|
|
249
|
+
</Text>
|
|
250
|
+
</Timegroup>
|
|
251
|
+
);
|
|
252
|
+
};
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
## Object Fit
|
|
256
|
+
|
|
257
|
+
Use Tailwind classes for positioning:
|
|
258
|
+
|
|
259
|
+
```tsx
|
|
260
|
+
{/* Cover - fills container, may crop */}
|
|
261
|
+
<Video src="/assets/video.mp4" className="size-full object-cover" />
|
|
262
|
+
|
|
263
|
+
{/* Contain - fits within container, may have letterbox */}
|
|
264
|
+
<Video src="/assets/video.mp4" className="size-full object-contain" />
|
|
265
|
+
|
|
266
|
+
{/* Fill - stretches to fill */}
|
|
267
|
+
<Video src="/assets/video.mp4" className="size-full object-fill" />
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
## Dynamic Videos
|
|
271
|
+
|
|
272
|
+
```tsx
|
|
273
|
+
interface VideoData {
|
|
274
|
+
id: string;
|
|
275
|
+
src: string;
|
|
276
|
+
sourceIn: string;
|
|
277
|
+
sourceOut: string;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
const videos: VideoData[] = [
|
|
281
|
+
{ id: "1", src: "/assets/clip1.mp4", sourceIn: "0s", sourceOut: "5s" },
|
|
282
|
+
{ id: "2", src: "/assets/clip2.mp4", sourceIn: "3s", sourceOut: "8s" },
|
|
283
|
+
];
|
|
284
|
+
|
|
285
|
+
<Timegroup mode="sequence" className="w-[1920px] h-[1080px]">
|
|
286
|
+
{videos.map((video) => (
|
|
287
|
+
<Timegroup key={video.id} mode="contain" className="absolute w-full h-full">
|
|
288
|
+
<Video
|
|
289
|
+
src={video.src}
|
|
290
|
+
sourceIn={video.sourceIn}
|
|
291
|
+
sourceOut={video.sourceOut}
|
|
292
|
+
className="size-full object-cover"
|
|
293
|
+
/>
|
|
294
|
+
</Timegroup>
|
|
295
|
+
))}
|
|
296
|
+
</Timegroup>
|
|
297
|
+
```
|
|
298
|
+
<!-- /react-only -->
|
|
299
|
+
|
|
300
|
+
<!-- html-only -->
|
|
301
|
+
## Video Tutorial
|
|
302
|
+
|
|
303
|
+
Build a composition step by step — from a single clip to layered scenes.
|
|
304
|
+
|
|
305
|
+
### Step 1: Display a Basic Video
|
|
306
|
+
|
|
307
|
+
Place a video inside a root timegroup.
|
|
308
|
+
|
|
309
|
+
```html live
|
|
310
|
+
<ef-timegroup mode="contain" class="w-[720px] h-[480px] bg-black">
|
|
311
|
+
<ef-video src="https://assets.editframe.com/bars-n-tone.mp4" class="size-full object-contain"></ef-video>
|
|
312
|
+
</ef-timegroup>
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
### Step 2: Trim a Video
|
|
316
|
+
|
|
317
|
+
Two approaches — choose based on your workflow.
|
|
318
|
+
|
|
319
|
+
**Relative trimming** removes time from edges:
|
|
320
|
+
|
|
321
|
+
```html live
|
|
322
|
+
<ef-timegroup mode="contain" class="w-[720px] h-[480px] bg-black">
|
|
323
|
+
<ef-video src="https://assets.editframe.com/bars-n-tone.mp4" trimstart="2s" trimend="2s" class="size-full object-contain"></ef-video>
|
|
324
|
+
</ef-timegroup>
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
**Absolute trimming** specifies exact timecodes:
|
|
328
|
+
|
|
329
|
+
```html live
|
|
330
|
+
<ef-timegroup mode="contain" class="w-[720px] h-[480px] bg-black">
|
|
331
|
+
<ef-video src="https://assets.editframe.com/bars-n-tone.mp4" sourcein="2s" sourceout="4s" class="size-full object-contain"></ef-video>
|
|
332
|
+
</ef-timegroup>
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
See the [Trimming Video](#trimming-video) section for detailed guidance on choosing between them.
|
|
336
|
+
|
|
337
|
+
### Step 3: Create a Simple Sequence
|
|
338
|
+
|
|
339
|
+
Use `mode="sequence"` to play clips one after another. The timeline duration is the sum of all children.
|
|
340
|
+
|
|
341
|
+
```html live
|
|
342
|
+
<ef-timegroup mode="sequence" class="w-[720px] h-[480px] bg-black">
|
|
343
|
+
<ef-video src="https://assets.editframe.com/bars-n-tone.mp4" sourcein="0s" sourceout="2s" class="size-full object-contain"></ef-video>
|
|
344
|
+
<ef-video src="https://assets.editframe.com/bars-n-tone.mp4" sourcein="8s" class="size-full object-contain"></ef-video>
|
|
345
|
+
<ef-video src="https://assets.editframe.com/bars-n-tone.mp4" sourcein="2s" sourceout="4s" class="size-full object-contain"></ef-video>
|
|
346
|
+
</ef-timegroup>
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
### Step 4: Layer Videos with Text
|
|
350
|
+
|
|
351
|
+
Nest timegroups inside a sequence. Each child timegroup holds a video background and text overlay.
|
|
352
|
+
|
|
353
|
+
```html live
|
|
354
|
+
<ef-timegroup mode="sequence" class="w-[720px] h-[480px] bg-black">
|
|
355
|
+
<ef-timegroup class="flex flex-col items-center justify-center">
|
|
356
|
+
<ef-video src="https://assets.editframe.com/bars-n-tone.mp4" sourcein="0s" sourceout="3s" class="z-0 absolute top-0 left-0 size-full object-contain"></ef-video>
|
|
357
|
+
<h1 class="relative bg-blue-500 text-4xl p-2 text-white">First Scene</h1>
|
|
358
|
+
</ef-timegroup>
|
|
359
|
+
<ef-timegroup class="flex flex-col items-center justify-center">
|
|
360
|
+
<ef-video src="https://assets.editframe.com/bars-n-tone.mp4" sourcein="8s" class="z-0 absolute top-0 left-0 size-full object-contain"></ef-video>
|
|
361
|
+
<h1 class="relative bg-blue-500 text-4xl p-2 text-white">Second Scene</h1>
|
|
362
|
+
</ef-timegroup>
|
|
363
|
+
</ef-timegroup>
|
|
364
|
+
```
|
|
365
|
+
|
|
366
|
+
> **Note:** The video uses `absolute` positioning with `z-0` as a background layer. Text uses `relative` positioning to appear on top.
|
|
367
|
+
|
|
368
|
+
### Next Steps
|
|
369
|
+
|
|
370
|
+
- See [Trimming Video](#trimming-video) for a trimming deep-dive
|
|
371
|
+
- See [Video Effects](#video-effects) for CSS filters and animations
|
|
372
|
+
|
|
373
|
+
## Trimming Video
|
|
374
|
+
|
|
375
|
+
Two approaches to show only part of a video source. Choose based on your workflow.
|
|
376
|
+
|
|
377
|
+
### Relative Trimming (trimstart / trimend)
|
|
378
|
+
|
|
379
|
+
Remove time from the edges. Think: "cut off 2 seconds from the start."
|
|
380
|
+
|
|
381
|
+
```html live
|
|
382
|
+
<ef-timegroup mode="contain" class="w-[720px] h-[480px] bg-black">
|
|
383
|
+
<ef-video src="https://assets.editframe.com/bars-n-tone.mp4" trimstart="2s" trimend="3s" class="size-full object-contain"></ef-video>
|
|
384
|
+
</ef-timegroup>
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
Duration formula: `sourceDuration - trimstart - trimend`
|
|
388
|
+
|
|
389
|
+
A 10s source with `trimstart="2s" trimend="3s"` produces a 5s clip.
|
|
390
|
+
|
|
391
|
+
### Absolute Trimming (sourcein / sourceout)
|
|
392
|
+
|
|
393
|
+
Specify exact timestamps. Think: "show seconds 2 through 6."
|
|
394
|
+
|
|
395
|
+
```html live
|
|
396
|
+
<ef-timegroup mode="contain" class="w-[720px] h-[480px] bg-black">
|
|
397
|
+
<ef-video src="https://assets.editframe.com/bars-n-tone.mp4" sourcein="2s" sourceout="6s" class="size-full object-contain"></ef-video>
|
|
398
|
+
</ef-timegroup>
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
Duration formula: `sourceout - sourcein`
|
|
402
|
+
|
|
403
|
+
`sourcein="2s" sourceout="6s"` produces a 4s clip starting at the 2-second mark.
|
|
404
|
+
|
|
405
|
+
### When to Use Each
|
|
406
|
+
|
|
407
|
+
| Approach | Use when... |
|
|
408
|
+
|----------|-------------|
|
|
409
|
+
| `trimstart` / `trimend` | Building UI with drag handles or sliders |
|
|
410
|
+
| | Thinking "how much to cut off" |
|
|
411
|
+
| | Adjusting existing clip duration |
|
|
412
|
+
| `sourcein` / `sourceout` | Working with known timecodes |
|
|
413
|
+
| | Referencing specific moments by timestamp |
|
|
414
|
+
| | Frame-perfect accuracy needed |
|
|
415
|
+
|
|
416
|
+
### Trimmed Clips in a Sequence
|
|
417
|
+
|
|
418
|
+
Trimming is most useful when building sequences from different parts of source media:
|
|
419
|
+
|
|
420
|
+
```html live
|
|
421
|
+
<ef-timegroup mode="sequence" class="w-[720px] h-[480px] bg-black">
|
|
422
|
+
<ef-video src="https://assets.editframe.com/bars-n-tone.mp4" sourceout="2s" class="size-full object-contain"></ef-video>
|
|
423
|
+
<ef-video src="https://assets.editframe.com/bars-n-tone.mp4" sourcein="5s" sourceout="8s" class="size-full object-contain"></ef-video>
|
|
424
|
+
<ef-video src="https://assets.editframe.com/bars-n-tone.mp4" sourcein="8s" class="size-full object-contain"></ef-video>
|
|
425
|
+
</ef-timegroup>
|
|
426
|
+
```
|
|
427
|
+
|
|
428
|
+
> **Note:** Both approaches produce the same visual result — they differ in mental model and how `currentSourceTimeMs` tracks source position. Relative trimming maps as `trimstart + ownCurrentTimeMs`, absolute as `sourcein + ownCurrentTimeMs`.
|
|
429
|
+
|
|
430
|
+
## Video Effects
|
|
431
|
+
|
|
432
|
+
Apply visual effects to video using standard CSS. The video element renders to a canvas, so all CSS properties apply directly.
|
|
433
|
+
|
|
434
|
+
### CSS Filters
|
|
435
|
+
|
|
436
|
+
Use Tailwind filter utilities or inline styles:
|
|
437
|
+
|
|
438
|
+
```html live
|
|
439
|
+
<ef-timegroup mode="contain" class="w-[720px] h-[480px] bg-black">
|
|
440
|
+
<ef-video src="https://assets.editframe.com/bars-n-tone.mp4" class="size-full object-contain blur-sm saturate-200 brightness-150 contrast-150"></ef-video>
|
|
441
|
+
</ef-timegroup>
|
|
442
|
+
```
|
|
443
|
+
|
|
444
|
+
Common filter classes:
|
|
445
|
+
|
|
446
|
+
| Effect | Class | Description |
|
|
447
|
+
|--------|-------|-------------|
|
|
448
|
+
| Blur | `blur-sm` / `blur-md` / `blur-lg` | Gaussian blur |
|
|
449
|
+
| Brightness | `brightness-50` / `brightness-150` | Darken or lighten |
|
|
450
|
+
| Contrast | `contrast-50` / `contrast-150` | Reduce or increase contrast |
|
|
451
|
+
| Grayscale | `grayscale` | Full desaturation |
|
|
452
|
+
| Sepia | `sepia` | Warm vintage tone |
|
|
453
|
+
| Saturate | `saturate-50` / `saturate-200` | Color intensity |
|
|
454
|
+
|
|
455
|
+
Combine multiple filters by listing classes:
|
|
456
|
+
|
|
457
|
+
```html
|
|
458
|
+
<ef-video src="video.mp4" class="grayscale contrast-125 brightness-110 size-full"></ef-video>
|
|
459
|
+
```
|
|
460
|
+
|
|
461
|
+
### CSS Transforms
|
|
462
|
+
|
|
463
|
+
Scale and rotate video elements:
|
|
464
|
+
|
|
465
|
+
```html live
|
|
466
|
+
<ef-timegroup mode="contain" class="w-[720px] h-[480px] bg-black overflow-hidden">
|
|
467
|
+
<ef-video src="https://assets.editframe.com/bars-n-tone.mp4" class="size-full object-contain scale-125 rotate-3"></ef-video>
|
|
468
|
+
</ef-timegroup>
|
|
469
|
+
```
|
|
470
|
+
|
|
471
|
+
### CSS Animations
|
|
472
|
+
|
|
473
|
+
Animate any CSS property over time using `@keyframes`:
|
|
474
|
+
|
|
475
|
+
```html live
|
|
476
|
+
<ef-timegroup mode="contain" class="w-[720px] h-[480px] bg-black overflow-hidden">
|
|
477
|
+
<ef-video src="https://assets.editframe.com/bars-n-tone.mp4" class="size-full object-contain" style="animation: 10s trippy"></ef-video>
|
|
478
|
+
<style>
|
|
479
|
+
@keyframes trippy {
|
|
480
|
+
0% { filter: saturate(2) brightness(1.5) blur(10px); }
|
|
481
|
+
100% { filter: saturate(1) brightness(1) blur(0); }
|
|
482
|
+
}
|
|
483
|
+
</style>
|
|
484
|
+
</ef-timegroup>
|
|
485
|
+
```
|
|
486
|
+
|
|
487
|
+
Animations run relative to the video's timeline — they're fully scrubbable.
|
|
488
|
+
|
|
489
|
+
### Combining Effects
|
|
490
|
+
|
|
491
|
+
Layer static filters with animations for complex looks:
|
|
492
|
+
|
|
493
|
+
```html live
|
|
494
|
+
<ef-timegroup mode="contain" class="w-[720px] h-[480px] bg-black overflow-hidden">
|
|
495
|
+
<ef-video src="https://assets.editframe.com/bars-n-tone.mp4" class="size-full object-contain sepia" style="animation: 10s zoom-drift"></ef-video>
|
|
496
|
+
<style>
|
|
497
|
+
@keyframes zoom-drift {
|
|
498
|
+
0% { transform: scale(1); }
|
|
499
|
+
100% { transform: scale(1.2); }
|
|
500
|
+
}
|
|
501
|
+
</style>
|
|
502
|
+
</ef-timegroup>
|
|
503
|
+
```
|
|
504
|
+
|
|
505
|
+
> **Note:** Static CSS classes (like `sepia`) combine with animation keyframes. The animation overrides only the properties it targets.
|
|
506
|
+
<!-- /html-only -->
|