@pixerate/editor 0.159.0 → 0.161.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/dist/{chunk-VKF3PWKR.cjs → chunk-3OSXHLIT.cjs} +259 -28
- package/dist/chunk-6DM3PUQD.cjs +767 -0
- package/dist/{chunk-IQ6KKXOU.js → chunk-YN4AYYBJ.js} +243 -12
- package/dist/chunk-ZGOHKS3X.js +767 -0
- package/dist/effects/index.cjs +16 -767
- package/dist/effects/index.js +5 -756
- package/dist/image-editor/controller.d.cts +7 -0
- package/dist/image-editor/controller.d.ts +7 -0
- package/dist/image-editor/index.cjs +49 -10
- package/dist/image-editor/index.js +48 -9
- package/dist/image-editor/layers/transform-ui.d.cts +14 -6
- package/dist/image-editor/layers/transform-ui.d.ts +14 -6
- package/dist/paint-editor/index.cjs +2 -2
- package/dist/paint-editor/index.js +1 -1
- package/dist/video-editor/audio.d.cts +9 -0
- package/dist/video-editor/audio.d.ts +9 -0
- package/dist/video-editor/check.d.cts +1 -1
- package/dist/video-editor/check.d.ts +1 -1
- package/dist/video-editor/controller.d.cts +47 -0
- package/dist/video-editor/controller.d.ts +47 -0
- package/dist/video-editor/dialogue-tools.d.cts +19 -0
- package/dist/video-editor/dialogue-tools.d.ts +19 -0
- package/dist/video-editor/effect-authoring.d.cts +54 -0
- package/dist/video-editor/effect-authoring.d.ts +54 -0
- package/dist/video-editor/evaluate.d.cts +11 -0
- package/dist/video-editor/evaluate.d.ts +11 -0
- package/dist/video-editor/export.d.cts +7 -1
- package/dist/video-editor/export.d.ts +7 -1
- package/dist/video-editor/index.cjs +1853 -528
- package/dist/video-editor/index.d.cts +7 -0
- package/dist/video-editor/index.d.ts +7 -0
- package/dist/video-editor/index.js +1512 -187
- package/dist/video-editor/lut.d.cts +12 -2
- package/dist/video-editor/lut.d.ts +12 -2
- package/dist/video-editor/mask.d.cts +48 -0
- package/dist/video-editor/mask.d.ts +48 -0
- package/dist/video-editor/mix.d.cts +107 -0
- package/dist/video-editor/mix.d.ts +107 -0
- package/dist/video-editor/music-tools.d.cts +19 -0
- package/dist/video-editor/music-tools.d.ts +19 -0
- package/dist/video-editor/parse.d.cts +3 -1
- package/dist/video-editor/parse.d.ts +3 -1
- package/dist/video-editor/plan.d.cts +75 -0
- package/dist/video-editor/plan.d.ts +75 -0
- package/dist/video-editor/render.d.cts +1 -1
- package/dist/video-editor/render.d.ts +1 -1
- package/dist/video-editor/timeline.d.cts +2 -0
- package/dist/video-editor/timeline.d.ts +2 -0
- package/dist/video-editor/tools.d.cts +90 -0
- package/dist/video-editor/tools.d.ts +90 -0
- package/dist/video-editor/transcript-controller.d.cts +106 -0
- package/dist/video-editor/transcript-controller.d.ts +106 -0
- package/dist/video-editor/transcript.d.cts +40 -0
- package/dist/video-editor/transcript.d.ts +40 -0
- package/dist/video-editor/types.d.cts +62 -2
- package/dist/video-editor/types.d.ts +62 -2
- package/dist/video-editor/ui.d.cts +21 -1
- package/dist/video-editor/ui.d.ts +21 -1
- package/package.json +1 -1
- package/skills/README.md +2 -0
- package/skills/pixerate-bgm-alignment/SKILL.md +82 -0
- package/skills/pixerate-talking-head-edit/SKILL.md +80 -0
- package/skills/pixerate-video-editor/SKILL.md +40 -2
|
@@ -68,6 +68,7 @@ export declare function describeVideoSequence(project: VideoProject, sequence: V
|
|
|
68
68
|
fadeOut?: number;
|
|
69
69
|
transition?: import("./types.cjs").VideoTransition;
|
|
70
70
|
effects?: import("./types.cjs").VideoClipEffect[];
|
|
71
|
+
mask?: import("./types.cjs").VideoClipMask;
|
|
71
72
|
} | {
|
|
72
73
|
source?: {
|
|
73
74
|
in: number;
|
|
@@ -96,6 +97,7 @@ export declare function describeVideoSequence(project: VideoProject, sequence: V
|
|
|
96
97
|
fadeOut?: number;
|
|
97
98
|
transition?: import("./types.cjs").VideoTransition;
|
|
98
99
|
effects?: import("./types.cjs").VideoClipEffect[];
|
|
100
|
+
mask?: import("./types.cjs").VideoClipMask;
|
|
99
101
|
} | {
|
|
100
102
|
source?: {
|
|
101
103
|
in: number;
|
|
@@ -119,6 +121,7 @@ export declare function describeVideoSequence(project: VideoProject, sequence: V
|
|
|
119
121
|
fadeOut?: number;
|
|
120
122
|
transition?: import("./types.cjs").VideoTransition;
|
|
121
123
|
effects?: import("./types.cjs").VideoClipEffect[];
|
|
124
|
+
mask?: import("./types.cjs").VideoClipMask;
|
|
122
125
|
} | {
|
|
123
126
|
source?: {
|
|
124
127
|
in: number;
|
|
@@ -147,6 +150,7 @@ export declare function describeVideoSequence(project: VideoProject, sequence: V
|
|
|
147
150
|
fadeOut?: number;
|
|
148
151
|
transition?: import("./types.cjs").VideoTransition;
|
|
149
152
|
effects?: import("./types.cjs").VideoClipEffect[];
|
|
153
|
+
mask?: import("./types.cjs").VideoClipMask;
|
|
150
154
|
} | {
|
|
151
155
|
source?: {
|
|
152
156
|
in: number;
|
|
@@ -169,9 +173,35 @@ export declare function describeVideoSequence(project: VideoProject, sequence: V
|
|
|
169
173
|
fadeOut?: number;
|
|
170
174
|
transition?: import("./types.cjs").VideoTransition;
|
|
171
175
|
effects?: import("./types.cjs").VideoClipEffect[];
|
|
176
|
+
mask?: import("./types.cjs").VideoClipMask;
|
|
172
177
|
effect: string;
|
|
173
178
|
provider?: string;
|
|
174
179
|
values?: import("./types.cjs").VideoEffectValues;
|
|
180
|
+
} | {
|
|
181
|
+
source?: {
|
|
182
|
+
in: number;
|
|
183
|
+
out: number;
|
|
184
|
+
} | null | undefined;
|
|
185
|
+
end: number;
|
|
186
|
+
type: "adjustment";
|
|
187
|
+
scope?: import("./types.cjs").VideoAdjustmentScope;
|
|
188
|
+
targetTrack?: string;
|
|
189
|
+
id: string;
|
|
190
|
+
name?: string;
|
|
191
|
+
start: number;
|
|
192
|
+
duration: number;
|
|
193
|
+
opacity?: VideoAnimatable;
|
|
194
|
+
transform?: import("./types.cjs").VideoTransform;
|
|
195
|
+
fit?: import("./types.cjs").VideoFit;
|
|
196
|
+
blend?: import("./types.cjs").VideoBlendMode;
|
|
197
|
+
grade?: import("./types.cjs").VideoGrade;
|
|
198
|
+
animateIn?: import("./types.cjs").VideoClipAnimation;
|
|
199
|
+
animateOut?: import("./types.cjs").VideoClipAnimation;
|
|
200
|
+
fadeIn?: number;
|
|
201
|
+
fadeOut?: number;
|
|
202
|
+
transition?: import("./types.cjs").VideoTransition;
|
|
203
|
+
effects?: import("./types.cjs").VideoClipEffect[];
|
|
204
|
+
mask?: import("./types.cjs").VideoClipMask;
|
|
175
205
|
})[];
|
|
176
206
|
volume?: number | undefined;
|
|
177
207
|
syncLocked?: boolean | undefined;
|
|
@@ -255,6 +285,7 @@ export declare function describeVideoProject(project: VideoProject): {
|
|
|
255
285
|
fadeOut?: number;
|
|
256
286
|
transition?: import("./types.cjs").VideoTransition;
|
|
257
287
|
effects?: import("./types.cjs").VideoClipEffect[];
|
|
288
|
+
mask?: import("./types.cjs").VideoClipMask;
|
|
258
289
|
} | {
|
|
259
290
|
source?: {
|
|
260
291
|
in: number;
|
|
@@ -283,6 +314,7 @@ export declare function describeVideoProject(project: VideoProject): {
|
|
|
283
314
|
fadeOut?: number;
|
|
284
315
|
transition?: import("./types.cjs").VideoTransition;
|
|
285
316
|
effects?: import("./types.cjs").VideoClipEffect[];
|
|
317
|
+
mask?: import("./types.cjs").VideoClipMask;
|
|
286
318
|
} | {
|
|
287
319
|
source?: {
|
|
288
320
|
in: number;
|
|
@@ -306,6 +338,7 @@ export declare function describeVideoProject(project: VideoProject): {
|
|
|
306
338
|
fadeOut?: number;
|
|
307
339
|
transition?: import("./types.cjs").VideoTransition;
|
|
308
340
|
effects?: import("./types.cjs").VideoClipEffect[];
|
|
341
|
+
mask?: import("./types.cjs").VideoClipMask;
|
|
309
342
|
} | {
|
|
310
343
|
source?: {
|
|
311
344
|
in: number;
|
|
@@ -334,6 +367,7 @@ export declare function describeVideoProject(project: VideoProject): {
|
|
|
334
367
|
fadeOut?: number;
|
|
335
368
|
transition?: import("./types.cjs").VideoTransition;
|
|
336
369
|
effects?: import("./types.cjs").VideoClipEffect[];
|
|
370
|
+
mask?: import("./types.cjs").VideoClipMask;
|
|
337
371
|
} | {
|
|
338
372
|
source?: {
|
|
339
373
|
in: number;
|
|
@@ -356,9 +390,35 @@ export declare function describeVideoProject(project: VideoProject): {
|
|
|
356
390
|
fadeOut?: number;
|
|
357
391
|
transition?: import("./types.cjs").VideoTransition;
|
|
358
392
|
effects?: import("./types.cjs").VideoClipEffect[];
|
|
393
|
+
mask?: import("./types.cjs").VideoClipMask;
|
|
359
394
|
effect: string;
|
|
360
395
|
provider?: string;
|
|
361
396
|
values?: import("./types.cjs").VideoEffectValues;
|
|
397
|
+
} | {
|
|
398
|
+
source?: {
|
|
399
|
+
in: number;
|
|
400
|
+
out: number;
|
|
401
|
+
} | null | undefined;
|
|
402
|
+
end: number;
|
|
403
|
+
type: "adjustment";
|
|
404
|
+
scope?: import("./types.cjs").VideoAdjustmentScope;
|
|
405
|
+
targetTrack?: string;
|
|
406
|
+
id: string;
|
|
407
|
+
name?: string;
|
|
408
|
+
start: number;
|
|
409
|
+
duration: number;
|
|
410
|
+
opacity?: VideoAnimatable;
|
|
411
|
+
transform?: import("./types.cjs").VideoTransform;
|
|
412
|
+
fit?: import("./types.cjs").VideoFit;
|
|
413
|
+
blend?: import("./types.cjs").VideoBlendMode;
|
|
414
|
+
grade?: import("./types.cjs").VideoGrade;
|
|
415
|
+
animateIn?: import("./types.cjs").VideoClipAnimation;
|
|
416
|
+
animateOut?: import("./types.cjs").VideoClipAnimation;
|
|
417
|
+
fadeIn?: number;
|
|
418
|
+
fadeOut?: number;
|
|
419
|
+
transition?: import("./types.cjs").VideoTransition;
|
|
420
|
+
effects?: import("./types.cjs").VideoClipEffect[];
|
|
421
|
+
mask?: import("./types.cjs").VideoClipMask;
|
|
362
422
|
})[];
|
|
363
423
|
volume?: number | undefined;
|
|
364
424
|
syncLocked?: boolean | undefined;
|
|
@@ -462,6 +522,7 @@ export declare function describeVideoProject(project: VideoProject): {
|
|
|
462
522
|
fadeOut?: number;
|
|
463
523
|
transition?: import("./types.cjs").VideoTransition;
|
|
464
524
|
effects?: import("./types.cjs").VideoClipEffect[];
|
|
525
|
+
mask?: import("./types.cjs").VideoClipMask;
|
|
465
526
|
} | {
|
|
466
527
|
source?: {
|
|
467
528
|
in: number;
|
|
@@ -490,6 +551,7 @@ export declare function describeVideoProject(project: VideoProject): {
|
|
|
490
551
|
fadeOut?: number;
|
|
491
552
|
transition?: import("./types.cjs").VideoTransition;
|
|
492
553
|
effects?: import("./types.cjs").VideoClipEffect[];
|
|
554
|
+
mask?: import("./types.cjs").VideoClipMask;
|
|
493
555
|
} | {
|
|
494
556
|
source?: {
|
|
495
557
|
in: number;
|
|
@@ -513,6 +575,7 @@ export declare function describeVideoProject(project: VideoProject): {
|
|
|
513
575
|
fadeOut?: number;
|
|
514
576
|
transition?: import("./types.cjs").VideoTransition;
|
|
515
577
|
effects?: import("./types.cjs").VideoClipEffect[];
|
|
578
|
+
mask?: import("./types.cjs").VideoClipMask;
|
|
516
579
|
} | {
|
|
517
580
|
source?: {
|
|
518
581
|
in: number;
|
|
@@ -541,6 +604,7 @@ export declare function describeVideoProject(project: VideoProject): {
|
|
|
541
604
|
fadeOut?: number;
|
|
542
605
|
transition?: import("./types.cjs").VideoTransition;
|
|
543
606
|
effects?: import("./types.cjs").VideoClipEffect[];
|
|
607
|
+
mask?: import("./types.cjs").VideoClipMask;
|
|
544
608
|
} | {
|
|
545
609
|
source?: {
|
|
546
610
|
in: number;
|
|
@@ -563,9 +627,35 @@ export declare function describeVideoProject(project: VideoProject): {
|
|
|
563
627
|
fadeOut?: number;
|
|
564
628
|
transition?: import("./types.cjs").VideoTransition;
|
|
565
629
|
effects?: import("./types.cjs").VideoClipEffect[];
|
|
630
|
+
mask?: import("./types.cjs").VideoClipMask;
|
|
566
631
|
effect: string;
|
|
567
632
|
provider?: string;
|
|
568
633
|
values?: import("./types.cjs").VideoEffectValues;
|
|
634
|
+
} | {
|
|
635
|
+
source?: {
|
|
636
|
+
in: number;
|
|
637
|
+
out: number;
|
|
638
|
+
} | null | undefined;
|
|
639
|
+
end: number;
|
|
640
|
+
type: "adjustment";
|
|
641
|
+
scope?: import("./types.cjs").VideoAdjustmentScope;
|
|
642
|
+
targetTrack?: string;
|
|
643
|
+
id: string;
|
|
644
|
+
name?: string;
|
|
645
|
+
start: number;
|
|
646
|
+
duration: number;
|
|
647
|
+
opacity?: VideoAnimatable;
|
|
648
|
+
transform?: import("./types.cjs").VideoTransform;
|
|
649
|
+
fit?: import("./types.cjs").VideoFit;
|
|
650
|
+
blend?: import("./types.cjs").VideoBlendMode;
|
|
651
|
+
grade?: import("./types.cjs").VideoGrade;
|
|
652
|
+
animateIn?: import("./types.cjs").VideoClipAnimation;
|
|
653
|
+
animateOut?: import("./types.cjs").VideoClipAnimation;
|
|
654
|
+
fadeIn?: number;
|
|
655
|
+
fadeOut?: number;
|
|
656
|
+
transition?: import("./types.cjs").VideoTransition;
|
|
657
|
+
effects?: import("./types.cjs").VideoClipEffect[];
|
|
658
|
+
mask?: import("./types.cjs").VideoClipMask;
|
|
569
659
|
})[];
|
|
570
660
|
volume?: number | undefined;
|
|
571
661
|
syncLocked?: boolean | undefined;
|
|
@@ -68,6 +68,7 @@ export declare function describeVideoSequence(project: VideoProject, sequence: V
|
|
|
68
68
|
fadeOut?: number;
|
|
69
69
|
transition?: import("./types.js").VideoTransition;
|
|
70
70
|
effects?: import("./types.js").VideoClipEffect[];
|
|
71
|
+
mask?: import("./types.js").VideoClipMask;
|
|
71
72
|
} | {
|
|
72
73
|
source?: {
|
|
73
74
|
in: number;
|
|
@@ -96,6 +97,7 @@ export declare function describeVideoSequence(project: VideoProject, sequence: V
|
|
|
96
97
|
fadeOut?: number;
|
|
97
98
|
transition?: import("./types.js").VideoTransition;
|
|
98
99
|
effects?: import("./types.js").VideoClipEffect[];
|
|
100
|
+
mask?: import("./types.js").VideoClipMask;
|
|
99
101
|
} | {
|
|
100
102
|
source?: {
|
|
101
103
|
in: number;
|
|
@@ -119,6 +121,7 @@ export declare function describeVideoSequence(project: VideoProject, sequence: V
|
|
|
119
121
|
fadeOut?: number;
|
|
120
122
|
transition?: import("./types.js").VideoTransition;
|
|
121
123
|
effects?: import("./types.js").VideoClipEffect[];
|
|
124
|
+
mask?: import("./types.js").VideoClipMask;
|
|
122
125
|
} | {
|
|
123
126
|
source?: {
|
|
124
127
|
in: number;
|
|
@@ -147,6 +150,7 @@ export declare function describeVideoSequence(project: VideoProject, sequence: V
|
|
|
147
150
|
fadeOut?: number;
|
|
148
151
|
transition?: import("./types.js").VideoTransition;
|
|
149
152
|
effects?: import("./types.js").VideoClipEffect[];
|
|
153
|
+
mask?: import("./types.js").VideoClipMask;
|
|
150
154
|
} | {
|
|
151
155
|
source?: {
|
|
152
156
|
in: number;
|
|
@@ -169,9 +173,35 @@ export declare function describeVideoSequence(project: VideoProject, sequence: V
|
|
|
169
173
|
fadeOut?: number;
|
|
170
174
|
transition?: import("./types.js").VideoTransition;
|
|
171
175
|
effects?: import("./types.js").VideoClipEffect[];
|
|
176
|
+
mask?: import("./types.js").VideoClipMask;
|
|
172
177
|
effect: string;
|
|
173
178
|
provider?: string;
|
|
174
179
|
values?: import("./types.js").VideoEffectValues;
|
|
180
|
+
} | {
|
|
181
|
+
source?: {
|
|
182
|
+
in: number;
|
|
183
|
+
out: number;
|
|
184
|
+
} | null | undefined;
|
|
185
|
+
end: number;
|
|
186
|
+
type: "adjustment";
|
|
187
|
+
scope?: import("./types.js").VideoAdjustmentScope;
|
|
188
|
+
targetTrack?: string;
|
|
189
|
+
id: string;
|
|
190
|
+
name?: string;
|
|
191
|
+
start: number;
|
|
192
|
+
duration: number;
|
|
193
|
+
opacity?: VideoAnimatable;
|
|
194
|
+
transform?: import("./types.js").VideoTransform;
|
|
195
|
+
fit?: import("./types.js").VideoFit;
|
|
196
|
+
blend?: import("./types.js").VideoBlendMode;
|
|
197
|
+
grade?: import("./types.js").VideoGrade;
|
|
198
|
+
animateIn?: import("./types.js").VideoClipAnimation;
|
|
199
|
+
animateOut?: import("./types.js").VideoClipAnimation;
|
|
200
|
+
fadeIn?: number;
|
|
201
|
+
fadeOut?: number;
|
|
202
|
+
transition?: import("./types.js").VideoTransition;
|
|
203
|
+
effects?: import("./types.js").VideoClipEffect[];
|
|
204
|
+
mask?: import("./types.js").VideoClipMask;
|
|
175
205
|
})[];
|
|
176
206
|
volume?: number | undefined;
|
|
177
207
|
syncLocked?: boolean | undefined;
|
|
@@ -255,6 +285,7 @@ export declare function describeVideoProject(project: VideoProject): {
|
|
|
255
285
|
fadeOut?: number;
|
|
256
286
|
transition?: import("./types.js").VideoTransition;
|
|
257
287
|
effects?: import("./types.js").VideoClipEffect[];
|
|
288
|
+
mask?: import("./types.js").VideoClipMask;
|
|
258
289
|
} | {
|
|
259
290
|
source?: {
|
|
260
291
|
in: number;
|
|
@@ -283,6 +314,7 @@ export declare function describeVideoProject(project: VideoProject): {
|
|
|
283
314
|
fadeOut?: number;
|
|
284
315
|
transition?: import("./types.js").VideoTransition;
|
|
285
316
|
effects?: import("./types.js").VideoClipEffect[];
|
|
317
|
+
mask?: import("./types.js").VideoClipMask;
|
|
286
318
|
} | {
|
|
287
319
|
source?: {
|
|
288
320
|
in: number;
|
|
@@ -306,6 +338,7 @@ export declare function describeVideoProject(project: VideoProject): {
|
|
|
306
338
|
fadeOut?: number;
|
|
307
339
|
transition?: import("./types.js").VideoTransition;
|
|
308
340
|
effects?: import("./types.js").VideoClipEffect[];
|
|
341
|
+
mask?: import("./types.js").VideoClipMask;
|
|
309
342
|
} | {
|
|
310
343
|
source?: {
|
|
311
344
|
in: number;
|
|
@@ -334,6 +367,7 @@ export declare function describeVideoProject(project: VideoProject): {
|
|
|
334
367
|
fadeOut?: number;
|
|
335
368
|
transition?: import("./types.js").VideoTransition;
|
|
336
369
|
effects?: import("./types.js").VideoClipEffect[];
|
|
370
|
+
mask?: import("./types.js").VideoClipMask;
|
|
337
371
|
} | {
|
|
338
372
|
source?: {
|
|
339
373
|
in: number;
|
|
@@ -356,9 +390,35 @@ export declare function describeVideoProject(project: VideoProject): {
|
|
|
356
390
|
fadeOut?: number;
|
|
357
391
|
transition?: import("./types.js").VideoTransition;
|
|
358
392
|
effects?: import("./types.js").VideoClipEffect[];
|
|
393
|
+
mask?: import("./types.js").VideoClipMask;
|
|
359
394
|
effect: string;
|
|
360
395
|
provider?: string;
|
|
361
396
|
values?: import("./types.js").VideoEffectValues;
|
|
397
|
+
} | {
|
|
398
|
+
source?: {
|
|
399
|
+
in: number;
|
|
400
|
+
out: number;
|
|
401
|
+
} | null | undefined;
|
|
402
|
+
end: number;
|
|
403
|
+
type: "adjustment";
|
|
404
|
+
scope?: import("./types.js").VideoAdjustmentScope;
|
|
405
|
+
targetTrack?: string;
|
|
406
|
+
id: string;
|
|
407
|
+
name?: string;
|
|
408
|
+
start: number;
|
|
409
|
+
duration: number;
|
|
410
|
+
opacity?: VideoAnimatable;
|
|
411
|
+
transform?: import("./types.js").VideoTransform;
|
|
412
|
+
fit?: import("./types.js").VideoFit;
|
|
413
|
+
blend?: import("./types.js").VideoBlendMode;
|
|
414
|
+
grade?: import("./types.js").VideoGrade;
|
|
415
|
+
animateIn?: import("./types.js").VideoClipAnimation;
|
|
416
|
+
animateOut?: import("./types.js").VideoClipAnimation;
|
|
417
|
+
fadeIn?: number;
|
|
418
|
+
fadeOut?: number;
|
|
419
|
+
transition?: import("./types.js").VideoTransition;
|
|
420
|
+
effects?: import("./types.js").VideoClipEffect[];
|
|
421
|
+
mask?: import("./types.js").VideoClipMask;
|
|
362
422
|
})[];
|
|
363
423
|
volume?: number | undefined;
|
|
364
424
|
syncLocked?: boolean | undefined;
|
|
@@ -462,6 +522,7 @@ export declare function describeVideoProject(project: VideoProject): {
|
|
|
462
522
|
fadeOut?: number;
|
|
463
523
|
transition?: import("./types.js").VideoTransition;
|
|
464
524
|
effects?: import("./types.js").VideoClipEffect[];
|
|
525
|
+
mask?: import("./types.js").VideoClipMask;
|
|
465
526
|
} | {
|
|
466
527
|
source?: {
|
|
467
528
|
in: number;
|
|
@@ -490,6 +551,7 @@ export declare function describeVideoProject(project: VideoProject): {
|
|
|
490
551
|
fadeOut?: number;
|
|
491
552
|
transition?: import("./types.js").VideoTransition;
|
|
492
553
|
effects?: import("./types.js").VideoClipEffect[];
|
|
554
|
+
mask?: import("./types.js").VideoClipMask;
|
|
493
555
|
} | {
|
|
494
556
|
source?: {
|
|
495
557
|
in: number;
|
|
@@ -513,6 +575,7 @@ export declare function describeVideoProject(project: VideoProject): {
|
|
|
513
575
|
fadeOut?: number;
|
|
514
576
|
transition?: import("./types.js").VideoTransition;
|
|
515
577
|
effects?: import("./types.js").VideoClipEffect[];
|
|
578
|
+
mask?: import("./types.js").VideoClipMask;
|
|
516
579
|
} | {
|
|
517
580
|
source?: {
|
|
518
581
|
in: number;
|
|
@@ -541,6 +604,7 @@ export declare function describeVideoProject(project: VideoProject): {
|
|
|
541
604
|
fadeOut?: number;
|
|
542
605
|
transition?: import("./types.js").VideoTransition;
|
|
543
606
|
effects?: import("./types.js").VideoClipEffect[];
|
|
607
|
+
mask?: import("./types.js").VideoClipMask;
|
|
544
608
|
} | {
|
|
545
609
|
source?: {
|
|
546
610
|
in: number;
|
|
@@ -563,9 +627,35 @@ export declare function describeVideoProject(project: VideoProject): {
|
|
|
563
627
|
fadeOut?: number;
|
|
564
628
|
transition?: import("./types.js").VideoTransition;
|
|
565
629
|
effects?: import("./types.js").VideoClipEffect[];
|
|
630
|
+
mask?: import("./types.js").VideoClipMask;
|
|
566
631
|
effect: string;
|
|
567
632
|
provider?: string;
|
|
568
633
|
values?: import("./types.js").VideoEffectValues;
|
|
634
|
+
} | {
|
|
635
|
+
source?: {
|
|
636
|
+
in: number;
|
|
637
|
+
out: number;
|
|
638
|
+
} | null | undefined;
|
|
639
|
+
end: number;
|
|
640
|
+
type: "adjustment";
|
|
641
|
+
scope?: import("./types.js").VideoAdjustmentScope;
|
|
642
|
+
targetTrack?: string;
|
|
643
|
+
id: string;
|
|
644
|
+
name?: string;
|
|
645
|
+
start: number;
|
|
646
|
+
duration: number;
|
|
647
|
+
opacity?: VideoAnimatable;
|
|
648
|
+
transform?: import("./types.js").VideoTransform;
|
|
649
|
+
fit?: import("./types.js").VideoFit;
|
|
650
|
+
blend?: import("./types.js").VideoBlendMode;
|
|
651
|
+
grade?: import("./types.js").VideoGrade;
|
|
652
|
+
animateIn?: import("./types.js").VideoClipAnimation;
|
|
653
|
+
animateOut?: import("./types.js").VideoClipAnimation;
|
|
654
|
+
fadeIn?: number;
|
|
655
|
+
fadeOut?: number;
|
|
656
|
+
transition?: import("./types.js").VideoTransition;
|
|
657
|
+
effects?: import("./types.js").VideoClipEffect[];
|
|
658
|
+
mask?: import("./types.js").VideoClipMask;
|
|
569
659
|
})[];
|
|
570
660
|
volume?: number | undefined;
|
|
571
661
|
syncLocked?: boolean | undefined;
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import type { VideoEditorController } from './controller.cjs';
|
|
2
|
+
import type { VideoEditResult } from './edit.cjs';
|
|
3
|
+
import type { VideoEditPlan } from './plan.cjs';
|
|
4
|
+
import { type VideoDisfluency, type VideoDisfluencyKind, type VideoDisfluencyOptions, type VideoTimelineWord } from './transcript.cjs';
|
|
5
|
+
/** A snapshot of a transcript editor. The same object is returned until something changes. */
|
|
6
|
+
export interface TranscriptVideoState {
|
|
7
|
+
/** The track whose words are shown, or `null` when nothing is transcribed. */
|
|
8
|
+
track: string | null;
|
|
9
|
+
/** The words the timeline plays on that track, in order. */
|
|
10
|
+
words: readonly VideoTimelineWord[];
|
|
11
|
+
/** The words joined with single spaces: what `textOffset` and `timeAtOffset` count in. */
|
|
12
|
+
text: string;
|
|
13
|
+
/** Index of the word under the playhead, or -1. */
|
|
14
|
+
current: number;
|
|
15
|
+
/** Selected words, first and last index (inclusive), or `null`. */
|
|
16
|
+
selection: readonly [number, number] | null;
|
|
17
|
+
/** Fillers, pauses and stutters found in the words (see `detectVideoDisfluencies`). */
|
|
18
|
+
disfluencies: readonly VideoDisfluency[];
|
|
19
|
+
/** For each word index, the kinds of disfluency it is part of (absent when none). */
|
|
20
|
+
flags: Readonly<Record<number, readonly VideoDisfluencyKind[]>>;
|
|
21
|
+
/** Whether text edits may change the timeline (false while the project is read-only). */
|
|
22
|
+
editable: boolean;
|
|
23
|
+
/** Why the last action was refused, if it was. */
|
|
24
|
+
error: string | null;
|
|
25
|
+
}
|
|
26
|
+
export interface TranscriptVideoOptions {
|
|
27
|
+
/** Track whose words to follow (default: the first audio track with a transcribed clip, else the first video track with one). */
|
|
28
|
+
track?: string;
|
|
29
|
+
/** How disfluencies are found (see `detectVideoDisfluencies`). */
|
|
30
|
+
disfluencies?: VideoDisfluencyOptions;
|
|
31
|
+
/**
|
|
32
|
+
* Deleting words proposes a plan for review instead of cutting at once (default false). Cleanup
|
|
33
|
+
* (`planCleanup`) always proposes one.
|
|
34
|
+
*/
|
|
35
|
+
planFirst?: boolean;
|
|
36
|
+
}
|
|
37
|
+
/** What deleting or cleaning up did: the cut it applied, or the plan it proposed. */
|
|
38
|
+
export type TranscriptVideoResult = {
|
|
39
|
+
ok: true;
|
|
40
|
+
applied: VideoEditResult & {
|
|
41
|
+
ok: true;
|
|
42
|
+
};
|
|
43
|
+
plan?: undefined;
|
|
44
|
+
} | {
|
|
45
|
+
ok: true;
|
|
46
|
+
plan: VideoEditPlan;
|
|
47
|
+
applied?: undefined;
|
|
48
|
+
} | {
|
|
49
|
+
ok: false;
|
|
50
|
+
error: string;
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* Edit video by its words: a transcript view model over a `VideoEditorController`. It keeps the
|
|
54
|
+
* words the timeline plays (from the media's transcripts), the word under the playhead, a word
|
|
55
|
+
* selection and the disfluencies found, and turns text actions into timeline edits both ways:
|
|
56
|
+
* clicking a word seeks there, playing highlights the word, deleting words cuts that stretch out on
|
|
57
|
+
* every sync-locked track, and cleanup proposes one plan for every filler, pause and stutter. Each
|
|
58
|
+
* cut is one undo step. Framework bindings render it; agents use the same functions through tools.
|
|
59
|
+
*/
|
|
60
|
+
export declare class TranscriptVideoController {
|
|
61
|
+
readonly controller: VideoEditorController;
|
|
62
|
+
private readonly options;
|
|
63
|
+
private readonly listeners;
|
|
64
|
+
private unsubscribe;
|
|
65
|
+
private track;
|
|
66
|
+
private selection;
|
|
67
|
+
private error;
|
|
68
|
+
private state;
|
|
69
|
+
/** Words and disfluencies are worked out once per project. */
|
|
70
|
+
private cache;
|
|
71
|
+
constructor(controller: VideoEditorController, options?: TranscriptVideoOptions);
|
|
72
|
+
getState: () => TranscriptVideoState;
|
|
73
|
+
private connect;
|
|
74
|
+
/** Listens for changes. Subscribing after `destroy` follows the editor again (React StrictMode remounts). */
|
|
75
|
+
subscribe: (listener: (state: TranscriptVideoState) => void) => (() => void);
|
|
76
|
+
/** Stops following the editor. */
|
|
77
|
+
destroy(): void;
|
|
78
|
+
private words;
|
|
79
|
+
private compute;
|
|
80
|
+
private refresh;
|
|
81
|
+
/** Follows another track's words (`undefined`: the default track). */
|
|
82
|
+
setTrack(track: string | undefined): void;
|
|
83
|
+
/** Moves the playhead to the start of a word. */
|
|
84
|
+
seekToWord(index: number): void;
|
|
85
|
+
/** Selects words `a` to `b` (either order), or clears the selection with `null`. */
|
|
86
|
+
select(a: number | null, b?: number | null): void;
|
|
87
|
+
/** Index of the word playing at a timeline time, or -1. */
|
|
88
|
+
wordAt(time: number): number;
|
|
89
|
+
/** Where word `index` begins in `text` (characters). */
|
|
90
|
+
textOffset(index: number): number;
|
|
91
|
+
/** The word a caret at `offset` characters into `text` is in (or just after), as an index; -1 when there are no words. */
|
|
92
|
+
wordAtOffset(offset: number): number;
|
|
93
|
+
/** The timeline time a caret at `offset` characters into `text` stands for: the start of its word. */
|
|
94
|
+
timeAtOffset(offset: number): number | null;
|
|
95
|
+
private fail;
|
|
96
|
+
/** Cuts ranges out (or proposes a plan to, with `plan`), as one undo step. */
|
|
97
|
+
private cut;
|
|
98
|
+
/** Deletes the selected words, cutting their stretch out of the timeline (or proposing it with `planFirst`). */
|
|
99
|
+
deleteSelection(options?: {
|
|
100
|
+
plan?: boolean;
|
|
101
|
+
}): TranscriptVideoResult;
|
|
102
|
+
/** Cuts one disfluency out at once (its index in `disfluencies`), as one undo step. */
|
|
103
|
+
removeDisfluency(index: number): TranscriptVideoResult;
|
|
104
|
+
/** Proposes one plan that cuts every disfluency of the given kinds (default all), for review. */
|
|
105
|
+
planCleanup(kinds?: readonly VideoDisfluencyKind[]): TranscriptVideoResult;
|
|
106
|
+
}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import type { VideoEditorController } from './controller.js';
|
|
2
|
+
import type { VideoEditResult } from './edit.js';
|
|
3
|
+
import type { VideoEditPlan } from './plan.js';
|
|
4
|
+
import { type VideoDisfluency, type VideoDisfluencyKind, type VideoDisfluencyOptions, type VideoTimelineWord } from './transcript.js';
|
|
5
|
+
/** A snapshot of a transcript editor. The same object is returned until something changes. */
|
|
6
|
+
export interface TranscriptVideoState {
|
|
7
|
+
/** The track whose words are shown, or `null` when nothing is transcribed. */
|
|
8
|
+
track: string | null;
|
|
9
|
+
/** The words the timeline plays on that track, in order. */
|
|
10
|
+
words: readonly VideoTimelineWord[];
|
|
11
|
+
/** The words joined with single spaces: what `textOffset` and `timeAtOffset` count in. */
|
|
12
|
+
text: string;
|
|
13
|
+
/** Index of the word under the playhead, or -1. */
|
|
14
|
+
current: number;
|
|
15
|
+
/** Selected words, first and last index (inclusive), or `null`. */
|
|
16
|
+
selection: readonly [number, number] | null;
|
|
17
|
+
/** Fillers, pauses and stutters found in the words (see `detectVideoDisfluencies`). */
|
|
18
|
+
disfluencies: readonly VideoDisfluency[];
|
|
19
|
+
/** For each word index, the kinds of disfluency it is part of (absent when none). */
|
|
20
|
+
flags: Readonly<Record<number, readonly VideoDisfluencyKind[]>>;
|
|
21
|
+
/** Whether text edits may change the timeline (false while the project is read-only). */
|
|
22
|
+
editable: boolean;
|
|
23
|
+
/** Why the last action was refused, if it was. */
|
|
24
|
+
error: string | null;
|
|
25
|
+
}
|
|
26
|
+
export interface TranscriptVideoOptions {
|
|
27
|
+
/** Track whose words to follow (default: the first audio track with a transcribed clip, else the first video track with one). */
|
|
28
|
+
track?: string;
|
|
29
|
+
/** How disfluencies are found (see `detectVideoDisfluencies`). */
|
|
30
|
+
disfluencies?: VideoDisfluencyOptions;
|
|
31
|
+
/**
|
|
32
|
+
* Deleting words proposes a plan for review instead of cutting at once (default false). Cleanup
|
|
33
|
+
* (`planCleanup`) always proposes one.
|
|
34
|
+
*/
|
|
35
|
+
planFirst?: boolean;
|
|
36
|
+
}
|
|
37
|
+
/** What deleting or cleaning up did: the cut it applied, or the plan it proposed. */
|
|
38
|
+
export type TranscriptVideoResult = {
|
|
39
|
+
ok: true;
|
|
40
|
+
applied: VideoEditResult & {
|
|
41
|
+
ok: true;
|
|
42
|
+
};
|
|
43
|
+
plan?: undefined;
|
|
44
|
+
} | {
|
|
45
|
+
ok: true;
|
|
46
|
+
plan: VideoEditPlan;
|
|
47
|
+
applied?: undefined;
|
|
48
|
+
} | {
|
|
49
|
+
ok: false;
|
|
50
|
+
error: string;
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* Edit video by its words: a transcript view model over a `VideoEditorController`. It keeps the
|
|
54
|
+
* words the timeline plays (from the media's transcripts), the word under the playhead, a word
|
|
55
|
+
* selection and the disfluencies found, and turns text actions into timeline edits both ways:
|
|
56
|
+
* clicking a word seeks there, playing highlights the word, deleting words cuts that stretch out on
|
|
57
|
+
* every sync-locked track, and cleanup proposes one plan for every filler, pause and stutter. Each
|
|
58
|
+
* cut is one undo step. Framework bindings render it; agents use the same functions through tools.
|
|
59
|
+
*/
|
|
60
|
+
export declare class TranscriptVideoController {
|
|
61
|
+
readonly controller: VideoEditorController;
|
|
62
|
+
private readonly options;
|
|
63
|
+
private readonly listeners;
|
|
64
|
+
private unsubscribe;
|
|
65
|
+
private track;
|
|
66
|
+
private selection;
|
|
67
|
+
private error;
|
|
68
|
+
private state;
|
|
69
|
+
/** Words and disfluencies are worked out once per project. */
|
|
70
|
+
private cache;
|
|
71
|
+
constructor(controller: VideoEditorController, options?: TranscriptVideoOptions);
|
|
72
|
+
getState: () => TranscriptVideoState;
|
|
73
|
+
private connect;
|
|
74
|
+
/** Listens for changes. Subscribing after `destroy` follows the editor again (React StrictMode remounts). */
|
|
75
|
+
subscribe: (listener: (state: TranscriptVideoState) => void) => (() => void);
|
|
76
|
+
/** Stops following the editor. */
|
|
77
|
+
destroy(): void;
|
|
78
|
+
private words;
|
|
79
|
+
private compute;
|
|
80
|
+
private refresh;
|
|
81
|
+
/** Follows another track's words (`undefined`: the default track). */
|
|
82
|
+
setTrack(track: string | undefined): void;
|
|
83
|
+
/** Moves the playhead to the start of a word. */
|
|
84
|
+
seekToWord(index: number): void;
|
|
85
|
+
/** Selects words `a` to `b` (either order), or clears the selection with `null`. */
|
|
86
|
+
select(a: number | null, b?: number | null): void;
|
|
87
|
+
/** Index of the word playing at a timeline time, or -1. */
|
|
88
|
+
wordAt(time: number): number;
|
|
89
|
+
/** Where word `index` begins in `text` (characters). */
|
|
90
|
+
textOffset(index: number): number;
|
|
91
|
+
/** The word a caret at `offset` characters into `text` is in (or just after), as an index; -1 when there are no words. */
|
|
92
|
+
wordAtOffset(offset: number): number;
|
|
93
|
+
/** The timeline time a caret at `offset` characters into `text` stands for: the start of its word. */
|
|
94
|
+
timeAtOffset(offset: number): number | null;
|
|
95
|
+
private fail;
|
|
96
|
+
/** Cuts ranges out (or proposes a plan to, with `plan`), as one undo step. */
|
|
97
|
+
private cut;
|
|
98
|
+
/** Deletes the selected words, cutting their stretch out of the timeline (or proposing it with `planFirst`). */
|
|
99
|
+
deleteSelection(options?: {
|
|
100
|
+
plan?: boolean;
|
|
101
|
+
}): TranscriptVideoResult;
|
|
102
|
+
/** Cuts one disfluency out at once (its index in `disfluencies`), as one undo step. */
|
|
103
|
+
removeDisfluency(index: number): TranscriptVideoResult;
|
|
104
|
+
/** Proposes one plan that cuts every disfluency of the given kinds (default all), for review. */
|
|
105
|
+
planCleanup(kinds?: readonly VideoDisfluencyKind[]): TranscriptVideoResult;
|
|
106
|
+
}
|
|
@@ -85,3 +85,43 @@ export declare function videoWordsRange(words: readonly VideoTimelineWord[], a:
|
|
|
85
85
|
export declare function videoTranscriptEdit(assetId: string, text: string): VideoEdit;
|
|
86
86
|
/** The word playing at a timeline time, as its index in `words`, or -1. */
|
|
87
87
|
export declare function videoWordAt(words: readonly VideoTimelineWord[], time: number): number;
|
|
88
|
+
export interface VideoRepetitionOptions {
|
|
89
|
+
/** Longest phrase to look for repeated (words, default 3). */
|
|
90
|
+
maxPhrase?: number;
|
|
91
|
+
/** Longest gap between a phrase and its repeat that still counts as a stutter (ms, default 1000). */
|
|
92
|
+
maxGap?: number;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Words said twice in a row ("I I think", "we should we should"), as timeline ranges covering the
|
|
96
|
+
* first saying and the gap up to the repeat, so cutting them leaves the phrase said once. Longer
|
|
97
|
+
* phrases are tried first; "I I I" gives two ranges. Some repeats are meant ("very very"): check them.
|
|
98
|
+
*/
|
|
99
|
+
export declare function findVideoRepetitions(words: readonly VideoTimelineWord[], options?: VideoRepetitionOptions): VideoTranscriptRange[];
|
|
100
|
+
export type VideoDisfluencyKind = 'filler' | 'pause' | 'repetition';
|
|
101
|
+
export declare const VIDEO_DISFLUENCY_KINDS: readonly ["filler", "pause", "repetition"];
|
|
102
|
+
/** Something to tidy out of speech: where it is (timeline ms), what kind and what was said. */
|
|
103
|
+
export interface VideoDisfluency extends VideoTranscriptRange {
|
|
104
|
+
kind: VideoDisfluencyKind;
|
|
105
|
+
/** Indexes in the word list of the first and last word it covers (for a pause: the words either side). */
|
|
106
|
+
words: [number, number];
|
|
107
|
+
}
|
|
108
|
+
export interface VideoDisfluencyOptions {
|
|
109
|
+
/** Which kinds to look for (default all). */
|
|
110
|
+
kinds?: readonly VideoDisfluencyKind[];
|
|
111
|
+
/** Filler words and phrases (default `VIDEO_DEFAULT_FILLERS`). */
|
|
112
|
+
fillers?: readonly string[];
|
|
113
|
+
/** How pauses are measured (default: over 700 ms, keeping 150 ms of breath either side). */
|
|
114
|
+
pauses?: VideoPauseOptions;
|
|
115
|
+
repetitions?: VideoRepetitionOptions;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Fillers, long pauses and stutters in one pass, in time order, each with the words it covers, so
|
|
119
|
+
* a transcript can mark them and an agent can review them before cutting. Overlapping finds are
|
|
120
|
+
* all kept (a filler inside a repetition): `mergeVideoRanges` joins them when they are cut.
|
|
121
|
+
*/
|
|
122
|
+
export declare function detectVideoDisfluencies(words: readonly VideoTimelineWord[], options?: VideoDisfluencyOptions): VideoDisfluency[];
|
|
123
|
+
/** Cut ranges shrunk by `keep` ms at each end, so a little breath stays either side; ranges that vanish are dropped. */
|
|
124
|
+
export declare function videoCutsWithMargin<T extends {
|
|
125
|
+
from: number;
|
|
126
|
+
to: number;
|
|
127
|
+
}>(ranges: readonly T[], keep: number): T[];
|