@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.
Files changed (99) hide show
  1. package/README.md +11 -0
  2. package/dist/index.js +16 -28
  3. package/dist/index.js.map +1 -1
  4. package/dist/skills/editframe-brand-video-generator/README.md +155 -0
  5. package/dist/skills/editframe-brand-video-generator/SKILL.md +207 -0
  6. package/dist/skills/editframe-brand-video-generator/references/brand-examples.md +178 -0
  7. package/dist/skills/editframe-brand-video-generator/references/color-psychology.md +227 -0
  8. package/dist/skills/editframe-brand-video-generator/references/composition-patterns.md +383 -0
  9. package/dist/skills/editframe-brand-video-generator/references/editing.md +66 -0
  10. package/dist/skills/editframe-brand-video-generator/references/emotional-arcs.md +496 -0
  11. package/dist/skills/editframe-brand-video-generator/references/genre-selection.md +135 -0
  12. package/dist/skills/editframe-brand-video-generator/references/transition-styles.md +611 -0
  13. package/dist/skills/editframe-brand-video-generator/references/typography-personalities.md +326 -0
  14. package/dist/skills/editframe-brand-video-generator/references/video-archetypes.md +86 -0
  15. package/dist/skills/editframe-brand-video-generator/references/video-fundamentals.md +169 -0
  16. package/dist/skills/editframe-brand-video-generator/references/visual-metaphors.md +50 -0
  17. package/dist/skills/editframe-composition/SKILL.md +169 -0
  18. package/dist/skills/editframe-composition/references/audio.md +483 -0
  19. package/dist/skills/editframe-composition/references/captions.md +844 -0
  20. package/dist/skills/editframe-composition/references/composition-model.md +73 -0
  21. package/dist/skills/editframe-composition/references/configuration.md +403 -0
  22. package/dist/skills/editframe-composition/references/css-parts.md +105 -0
  23. package/dist/skills/editframe-composition/references/css-variables.md +640 -0
  24. package/dist/skills/editframe-composition/references/entry-points.md +810 -0
  25. package/dist/skills/editframe-composition/references/events.md +499 -0
  26. package/dist/skills/editframe-composition/references/getting-started.md +259 -0
  27. package/dist/skills/editframe-composition/references/hooks.md +234 -0
  28. package/dist/skills/editframe-composition/references/image.md +241 -0
  29. package/dist/skills/editframe-composition/references/r3f.md +580 -0
  30. package/dist/skills/editframe-composition/references/render-api.md +484 -0
  31. package/dist/skills/editframe-composition/references/render-strategies.md +119 -0
  32. package/dist/skills/editframe-composition/references/render-to-video.md +1101 -0
  33. package/dist/skills/editframe-composition/references/scripting.md +606 -0
  34. package/dist/skills/editframe-composition/references/sequencing.md +116 -0
  35. package/dist/skills/editframe-composition/references/server-rendering.md +753 -0
  36. package/dist/skills/editframe-composition/references/surface.md +329 -0
  37. package/dist/skills/editframe-composition/references/text.md +627 -0
  38. package/dist/skills/editframe-composition/references/time-model.md +99 -0
  39. package/dist/skills/editframe-composition/references/timegroup-modes.md +102 -0
  40. package/dist/skills/editframe-composition/references/timegroup.md +457 -0
  41. package/dist/skills/editframe-composition/references/timeline-root.md +398 -0
  42. package/dist/skills/editframe-composition/references/transcription.md +47 -0
  43. package/dist/skills/editframe-composition/references/transitions.md +608 -0
  44. package/dist/skills/editframe-composition/references/use-media-info.md +357 -0
  45. package/dist/skills/editframe-composition/references/video.md +506 -0
  46. package/dist/skills/editframe-composition/references/waveform.md +327 -0
  47. package/dist/skills/editframe-editor-gui/SKILL.md +152 -0
  48. package/dist/skills/editframe-editor-gui/references/active-root-temporal.md +657 -0
  49. package/dist/skills/editframe-editor-gui/references/canvas.md +947 -0
  50. package/dist/skills/editframe-editor-gui/references/controls.md +366 -0
  51. package/dist/skills/editframe-editor-gui/references/dial.md +756 -0
  52. package/dist/skills/editframe-editor-gui/references/editor-toolkit.md +587 -0
  53. package/dist/skills/editframe-editor-gui/references/filmstrip.md +460 -0
  54. package/dist/skills/editframe-editor-gui/references/fit-scale.md +772 -0
  55. package/dist/skills/editframe-editor-gui/references/focus-overlay.md +561 -0
  56. package/dist/skills/editframe-editor-gui/references/hierarchy.md +544 -0
  57. package/dist/skills/editframe-editor-gui/references/overlay-item.md +634 -0
  58. package/dist/skills/editframe-editor-gui/references/overlay-layer.md +429 -0
  59. package/dist/skills/editframe-editor-gui/references/pan-zoom.md +568 -0
  60. package/dist/skills/editframe-editor-gui/references/pause.md +397 -0
  61. package/dist/skills/editframe-editor-gui/references/play.md +370 -0
  62. package/dist/skills/editframe-editor-gui/references/preview.md +391 -0
  63. package/dist/skills/editframe-editor-gui/references/resizable-box.md +749 -0
  64. package/dist/skills/editframe-editor-gui/references/scrubber.md +588 -0
  65. package/dist/skills/editframe-editor-gui/references/thumbnail-strip.md +566 -0
  66. package/dist/skills/editframe-editor-gui/references/time-display.md +492 -0
  67. package/dist/skills/editframe-editor-gui/references/timeline-ruler.md +489 -0
  68. package/dist/skills/editframe-editor-gui/references/timeline.md +604 -0
  69. package/dist/skills/editframe-editor-gui/references/toggle-loop.md +618 -0
  70. package/dist/skills/editframe-editor-gui/references/toggle-play.md +526 -0
  71. package/dist/skills/editframe-editor-gui/references/transform-handles.md +924 -0
  72. package/dist/skills/editframe-editor-gui/references/trim-handles.md +725 -0
  73. package/dist/skills/editframe-editor-gui/references/workbench.md +453 -0
  74. package/dist/skills/editframe-motion-design/SKILL.md +101 -0
  75. package/dist/skills/editframe-motion-design/references/0-editframe.md +299 -0
  76. package/dist/skills/editframe-motion-design/references/1-intent.md +201 -0
  77. package/dist/skills/editframe-motion-design/references/2-physics-model.md +405 -0
  78. package/dist/skills/editframe-motion-design/references/3-attention.md +350 -0
  79. package/dist/skills/editframe-motion-design/references/4-process.md +418 -0
  80. package/dist/skills/editframe-vite-plugin/SKILL.md +75 -0
  81. package/dist/skills/editframe-vite-plugin/references/file-api.md +111 -0
  82. package/dist/skills/editframe-vite-plugin/references/getting-started.md +96 -0
  83. package/dist/skills/editframe-vite-plugin/references/jit-transcoding.md +91 -0
  84. package/dist/skills/editframe-vite-plugin/references/local-assets.md +75 -0
  85. package/dist/skills/editframe-vite-plugin/references/visual-testing.md +136 -0
  86. package/dist/skills/editframe-webhooks/SKILL.md +126 -0
  87. package/dist/skills/editframe-webhooks/references/events.md +382 -0
  88. package/dist/skills/editframe-webhooks/references/getting-started.md +232 -0
  89. package/dist/skills/editframe-webhooks/references/security.md +418 -0
  90. package/dist/skills/editframe-webhooks/references/testing.md +409 -0
  91. package/dist/skills/editframe-webhooks/references/troubleshooting.md +457 -0
  92. package/dist/templates/html/AGENTS.md +13 -0
  93. package/dist/templates/react/AGENTS.md +13 -0
  94. package/dist/utils.js +15 -16
  95. package/dist/utils.js.map +1 -1
  96. package/package.json +2 -2
  97. package/tsdown.config.ts +4 -0
  98. package/dist/detectAgent.js +0 -89
  99. 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 -->