@open-take/compositor 0.1.2 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +155 -33
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +413 -171
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
- package/src/camera.ts +343 -0
- package/src/index.ts +1 -0
- package/src/math.ts +156 -124
- package/src/plan.ts +114 -69
- package/src/presets.ts +10 -5
- package/src/scene/scene.tsx +8 -16
- package/src/types.ts +90 -23
- package/src/validate.ts +18 -0
package/dist/index.d.ts
CHANGED
|
@@ -26,8 +26,22 @@ type CaptureEventBase = {
|
|
|
26
26
|
/** selector / note, kept for editability */
|
|
27
27
|
sel?: string;
|
|
28
28
|
note?: string;
|
|
29
|
-
/** selective-zoom intent from the plan
|
|
29
|
+
/** selective-zoom intent from the plan. Absent/"auto" ⇒ the camera director
|
|
30
|
+
* decides from the ground-truth log; "always"/"never" hard-override it (and
|
|
31
|
+
* cut the beat out of any cluster — an override is a segment boundary). */
|
|
30
32
|
zoom?: ZoomIntent;
|
|
33
|
+
/** CAPTURE-DERIVED (frame-diff / mutation pass — the `effectBox` seam): the
|
|
34
|
+
* region that actually CHANGED after the action, viewport CSS px. The
|
|
35
|
+
* director frames THIS over `box` when present — a `type`'s result region, or
|
|
36
|
+
* a payoff that lands somewhere other than where you clicked. Absent ⇒ the
|
|
37
|
+
* director shapes an ROI from `box`/kind instead. */
|
|
38
|
+
effectBox?: BBox;
|
|
39
|
+
/** CAPTURE-DERIVED (same pass): fraction of the frame that changed after the
|
|
40
|
+
* action, 0..1. ≥ camera.pullOutCoverage ⇒ the action repainted most of the
|
|
41
|
+
* frame (nav / global restyle) ⇒ pull out to full view. Absent ⇒ the pull-out
|
|
42
|
+
* branch is skipped (the director can't tell nav from popover on bbox alone —
|
|
43
|
+
* it says so in the beat's `reason`). */
|
|
44
|
+
changeCoverage?: number;
|
|
31
45
|
};
|
|
32
46
|
/** A click (or a type's focus-click): an instantaneous action at a point. */
|
|
33
47
|
type CaptureClick = CaptureEventBase & {
|
|
@@ -196,23 +210,27 @@ type CursorConfig = {
|
|
|
196
210
|
rippleMs: number;
|
|
197
211
|
/** ms to hold a zoom after the action settles, before zooming back out */
|
|
198
212
|
holdMs: number;
|
|
199
|
-
/** ms for
|
|
213
|
+
/** ms for a zoom-OUT / pull-out ramp (to rest OR to any wider framing).
|
|
214
|
+
* Measured on a reference export: the pull-out is ~1.8× slower than the
|
|
215
|
+
* punch-in (their zoom-out spring ω≈5.2 rad/s ⇒ ~1340ms of critically-damped
|
|
216
|
+
* settle) — a slow, soft release reads premium; a fast one reads like a
|
|
217
|
+
* flinch. */
|
|
200
218
|
zoomOutMs: number;
|
|
201
219
|
/** ms for the zoom-IN ramp (into a target). Decoupled from travelMs so the
|
|
202
|
-
* zoom can be slower/gentler than the cursor
|
|
220
|
+
* zoom can be slower/gentler than the cursor. Measured reference punch-in spring
|
|
221
|
+
* ω≈9.4 rad/s ⇒ ~730ms. */
|
|
203
222
|
zoomInMs: number;
|
|
204
|
-
/**
|
|
205
|
-
*
|
|
206
|
-
*
|
|
207
|
-
*
|
|
223
|
+
/** Optional cubic-bezier easing for the camera-rect ramps (centre + size in
|
|
224
|
+
* lockstep — see math.ts stageCamera). Absent ⇒ the default critically-
|
|
225
|
+
* damped spring (the measured reference curve). Set this only to force a
|
|
226
|
+
* bezier feel; `zoomSpring` wins over it when both are set. */
|
|
208
227
|
zoomEase?: [number, number, number, number];
|
|
209
|
-
/** Spring easing for the
|
|
210
|
-
* 0 = critically damped (
|
|
211
|
-
*
|
|
212
|
-
*
|
|
213
|
-
*
|
|
214
|
-
*
|
|
215
|
-
* zoom-OUT (momentary backdrop dead-space) — keep it small for zoom. */
|
|
228
|
+
/** Spring easing for the camera-rect ramps, as a `bounce` amount ∈ [0,~0.6):
|
|
229
|
+
* 0 = critically damped (the measured reference zoom curve — also the
|
|
230
|
+
* default when neither zoomSpring nor zoomEase is set), higher = more
|
|
231
|
+
* overshoot/snap. The segment duration stays zoomInMs/zoomOutMs; bounce only
|
|
232
|
+
* shapes the curve. Bounce > 0 overshoots the RECT (a touch past the target
|
|
233
|
+
* frame, then settle) — keep it small. */
|
|
216
234
|
zoomSpring?: number;
|
|
217
235
|
/** ms to delay the synthetic cursor along a DRAG stroke, compensating for the
|
|
218
236
|
* capture pipeline latency: the captured ink appears ~this long after the pen
|
|
@@ -262,6 +280,40 @@ type ReviewDecor = {
|
|
|
262
280
|
/** constant bottom-left variant label for A/B reels, e.g. "B · tight ×1.8" */
|
|
263
281
|
label?: string;
|
|
264
282
|
};
|
|
283
|
+
/** The auto-camera director's tuning. ON by default (a plan that specifies no
|
|
284
|
+
* zoom must still come out with sensible framing — the whole point). The
|
|
285
|
+
* numbers are the FEEL knobs; judge them by eye on a rendered clip, not on
|
|
286
|
+
* paper. `enabled: false` is the clean escape hatch: the director doesn't run
|
|
287
|
+
* and ONLY explicit `zoom: "always"/"never"` produce zoom (auto/absent hold
|
|
288
|
+
* full view). There is no legacy per-event heuristic to fall back to. */
|
|
289
|
+
type CameraConfig = {
|
|
290
|
+
enabled: boolean;
|
|
291
|
+
/** an ROI fills this fraction of the frame when framed (bigger ⇒ tighter). */
|
|
292
|
+
fillFrac: number;
|
|
293
|
+
/** hard ceiling on scale. NOT the main lever — ROI SIZE drives the actual
|
|
294
|
+
* scale (a big type-ROI lands medium, a tiny icon lands tight); this just
|
|
295
|
+
* stops a pinpoint ROI zooming past legibility. */
|
|
296
|
+
maxScale: number;
|
|
297
|
+
/** a punch that can't stay on screen this long is dropped to full view (a
|
|
298
|
+
* sub-second punch reads as a flinch). Enforced AFTER hard breaks — the hold
|
|
299
|
+
* extends into the gap before the next break, never merges across one. */
|
|
300
|
+
minHoldMs: number;
|
|
301
|
+
/** a scale below this isn't worth a distinct frame: a single beat that fits
|
|
302
|
+
* under it holds full view, and a coalesced cluster whose UNION falls under
|
|
303
|
+
* it splits instead (the two are "different regions" → chain/pull, not hold). */
|
|
304
|
+
minZoomScale: number;
|
|
305
|
+
/** gap between two actions greater than this ⇒ they cannot share a frame. */
|
|
306
|
+
coalesceWindowMs: number;
|
|
307
|
+
/** two ROIs whose centres are closer than this (fraction of video width) MAY
|
|
308
|
+
* coalesce into one shared, held frame — the "cluster" (a thumbnail rail, a
|
|
309
|
+
* toolbar). Farther apart ⇒ a re-frame (progressive/deeper), not a hold. */
|
|
310
|
+
travelThreshold: number;
|
|
311
|
+
/** changeCoverage ≥ this ⇒ the action repainted most of the frame (nav /
|
|
312
|
+
* global) ⇒ pull out to full view. The nav-vs-popover divider — the one knob
|
|
313
|
+
* to tune by eye on real captures (frame-diff pass populates the input). */
|
|
314
|
+
pullOutCoverage: number;
|
|
315
|
+
};
|
|
316
|
+
declare const DEFAULT_CAMERA: CameraConfig;
|
|
265
317
|
type TakeComposition = {
|
|
266
318
|
output: {
|
|
267
319
|
width: number;
|
|
@@ -270,6 +322,10 @@ type TakeComposition = {
|
|
|
270
322
|
};
|
|
271
323
|
source: {
|
|
272
324
|
videoUrl: string;
|
|
325
|
+
/** stage size the source video is DRAWN at (capture viewport CSS px) —
|
|
326
|
+
* the coordinate space of every event/bbox below. A Retina capture's
|
|
327
|
+
* file is denser (viewport × captureScale); the scene stretches it to
|
|
328
|
+
* this size, so the extra pixels only sharpen sampling under zoom. */
|
|
273
329
|
videoWidth: number;
|
|
274
330
|
videoHeight: number;
|
|
275
331
|
viewport: {
|
|
@@ -306,7 +362,9 @@ declare const ZOOM_LEVELS: {
|
|
|
306
362
|
type ZoomLevelName = keyof typeof ZOOM_LEVELS;
|
|
307
363
|
/** Name a scale if it sits within tolerance of a preset; else null (custom). */
|
|
308
364
|
declare function zoomLevelName(scale: number, tol?: number): ZoomLevelName | null;
|
|
309
|
-
type MotionPreset = Pick<CursorConfig, "travelWidthsPerSec" | "holdMs" | "zoomInMs" | "zoomOutMs"
|
|
365
|
+
type MotionPreset = Pick<CursorConfig, "travelWidthsPerSec" | "holdMs" | "zoomInMs" | "zoomOutMs"> & {
|
|
366
|
+
zoomEase?: undefined;
|
|
367
|
+
};
|
|
310
368
|
declare const MOTION: Record<"calm" | "natural" | "brisk", MotionPreset>;
|
|
311
369
|
type MotionName = keyof typeof MOTION;
|
|
312
370
|
declare function motionName(cursor: CursorConfig): MotionName | null;
|
|
@@ -335,22 +393,63 @@ type PlanOpts = {
|
|
|
335
393
|
};
|
|
336
394
|
framing?: Partial<FramingConfig>;
|
|
337
395
|
cursor?: Partial<CursorConfig>;
|
|
338
|
-
/**
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
*
|
|
342
|
-
|
|
343
|
-
maxScale?: number;
|
|
344
|
-
/** require fit-scale to exceed rest*this to bother zooming (default 1.3) */
|
|
345
|
-
zoomRatio?: number;
|
|
346
|
-
/** never zoom the first (orienting) action by default (Finding 1) */
|
|
347
|
-
zoomFirst?: boolean;
|
|
396
|
+
/** auto-camera director tuning (default DEFAULT_CAMERA — ON). The director
|
|
397
|
+
* decides zoom from the ground-truth log; these are its feel knobs. Set
|
|
398
|
+
* `camera.enabled = false` for the manual escape hatch (only explicit
|
|
399
|
+
* event `zoom: "always"/"never"` produce zoom then). */
|
|
400
|
+
camera?: Partial<CameraConfig>;
|
|
348
401
|
};
|
|
349
402
|
declare function planComposition(log: CaptureLog, opts?: PlanOpts): TakeComposition;
|
|
350
403
|
|
|
351
404
|
//#endregion
|
|
352
|
-
//#region src/
|
|
405
|
+
//#region src/camera.d.ts
|
|
353
406
|
//# sourceMappingURL=plan.d.ts.map
|
|
407
|
+
/** One action, already mapped into video-px, handed to the director. */
|
|
408
|
+
type Beat = {
|
|
409
|
+
kind: "click" | "type" | "drag" | "scroll" | "hover" | "press";
|
|
410
|
+
tMs: number;
|
|
411
|
+
durationMs: number;
|
|
412
|
+
/** element bbox (for a drag: the path's bbox), video-px — or undefined for a
|
|
413
|
+
* bare press (no located element). */
|
|
414
|
+
box?: BBox;
|
|
415
|
+
/** the region that actually changed after the action (frame-diff seam),
|
|
416
|
+
* video-px. Framed over `box` when present. */
|
|
417
|
+
effectBox?: BBox;
|
|
418
|
+
/** fraction of the frame that changed after the action, 0..1. */
|
|
419
|
+
changeCoverage?: number;
|
|
420
|
+
/** anchor / cursor rest point, video-px (for the reason only). */
|
|
421
|
+
point: Pt;
|
|
422
|
+
/** plan override; absent ⇒ "auto" (the director decides). */
|
|
423
|
+
intent: ZoomIntent;
|
|
424
|
+
/** short label (sel / note) for the cluster tag in the reason. */
|
|
425
|
+
label?: string;
|
|
426
|
+
/** press only: the key chord (for the Escape-dismissal rule). */
|
|
427
|
+
keys?: string;
|
|
428
|
+
};
|
|
429
|
+
/** The director's per-beat verdict. plan.ts adds `inAtMs` to make a full
|
|
430
|
+
* ZoomDecision. */
|
|
431
|
+
type Framing = {
|
|
432
|
+
enabled: boolean;
|
|
433
|
+
scale: number;
|
|
434
|
+
center: Pt;
|
|
435
|
+
reason: string;
|
|
436
|
+
};
|
|
437
|
+
/**
|
|
438
|
+
* Decide framing for every beat. `endMs` is when the last frame can hold until
|
|
439
|
+
* (for the min-hold check on the final segment). `rest` is the stage scale at
|
|
440
|
+
* full view.
|
|
441
|
+
*/
|
|
442
|
+
declare function directCamera(beats: Beat[], video: {
|
|
443
|
+
w: number;
|
|
444
|
+
h: number;
|
|
445
|
+
}, out: {
|
|
446
|
+
w: number;
|
|
447
|
+
h: number;
|
|
448
|
+
}, cam: CameraConfig, rest: number, endMs: number): Framing[];
|
|
449
|
+
|
|
450
|
+
//#endregion
|
|
451
|
+
//#region src/render.d.ts
|
|
452
|
+
//# sourceMappingURL=camera.d.ts.map
|
|
354
453
|
type RenderTakeOpts = {
|
|
355
454
|
/** input capture video (webm or mp4) */
|
|
356
455
|
videoPath: string;
|
|
@@ -420,13 +519,12 @@ declare function formatIssues(issues: CompositionIssue[]): string;
|
|
|
420
519
|
//#region src/math.d.ts
|
|
421
520
|
//# sourceMappingURL=validate.d.ts.map
|
|
422
521
|
declare namespace math_d_exports {
|
|
423
|
-
export { StageKeyframes, bboxFitScale, buildLegs, buildStageKeyframes, clampCenter, cubicBezier, cursorPos, gradientEndpoints, isDragging, keyvalN,
|
|
522
|
+
export { CamRect, StageKeyframes, bboxFitScale, buildLegs, buildStageKeyframes, clampCenter, cubicBezier, cursorPos, gradientEndpoints, isDragging, keyvalN, keyvalR, restStageScale, smoother, springEase, stageCamera, stageEasing };
|
|
424
523
|
}
|
|
425
524
|
declare function smoother(t: number): number;
|
|
426
525
|
declare function cubicBezier(x1: number, y1: number, x2: number, y2: number): (x: number) => number;
|
|
427
526
|
declare function springEase(bounce: number): (p: number) => number;
|
|
428
527
|
declare function stageEasing(cursor: TakeComposition["cursor"]): (u: number) => number;
|
|
429
|
-
declare function panEasing(cursor: TakeComposition["cursor"]): (u: number) => number;
|
|
430
528
|
declare function gradientEndpoints(angleDeg: number | undefined, oW: number, oH: number): {
|
|
431
529
|
x0: number;
|
|
432
530
|
y0: number;
|
|
@@ -434,8 +532,7 @@ declare function gradientEndpoints(angleDeg: number | undefined, oW: number, oH:
|
|
|
434
532
|
y1: number;
|
|
435
533
|
};
|
|
436
534
|
type KF<T> = [number, T];
|
|
437
|
-
declare function keyvalN(t: number, kfs: KF<number>[], ease?: (u: number) => number
|
|
438
|
-
declare function keyvalP(t: number, kfs: KF<Pt>[], ease?: (u: number) => number): Pt;
|
|
535
|
+
declare function keyvalN(t: number, kfs: KF<number>[], ease?: (u: number) => number): number;
|
|
439
536
|
/**
|
|
440
537
|
* Scale (absolute, video-px → output-px) that fits `bbox` into `fillFrac`
|
|
441
538
|
* of the output frame, capped at `maxScale` and floored at `restScale`.
|
|
@@ -456,12 +553,37 @@ declare function restStageScale(videoW: number, videoH: number, outW: number, ou
|
|
|
456
553
|
* panning past the recording's edge.
|
|
457
554
|
*/
|
|
458
555
|
declare function clampCenter(center: Pt, scale: number, videoW: number, videoH: number, outW: number, outH: number): Pt;
|
|
556
|
+
/** The camera as a viewport RECT in video-px: centre + full viewport width
|
|
557
|
+
* (height is implied by the output aspect: h = w·oH/oW). scale = oW / w. */
|
|
558
|
+
type CamRect = {
|
|
559
|
+
cx: number;
|
|
560
|
+
cy: number;
|
|
561
|
+
w: number;
|
|
562
|
+
};
|
|
459
563
|
type StageKeyframes = {
|
|
460
|
-
|
|
461
|
-
c: KF<Pt>[];
|
|
564
|
+
r: KF<CamRect>[];
|
|
462
565
|
T: number;
|
|
463
566
|
};
|
|
567
|
+
/** Interpolate the rect track: centre AND size move under the SAME eased
|
|
568
|
+
* parameter. This is the whole trick (verified
|
|
569
|
+
* by frame-tracking a reference export: its pan curve overlays its viewport-WIDTH
|
|
570
|
+
* curve exactly, not its scale curve): lerping the rect keeps every corner on
|
|
571
|
+
* a straight line, so the screen-space path of the zoom target is strictly
|
|
572
|
+
* monotone toward frame centre — no wrong-way "bounce" for ANY scale pair,
|
|
573
|
+
* which scale+centre lerp can't guarantee (it hooks when scale > 2×rest). */
|
|
574
|
+
declare function keyvalR(t: number, kfs: KF<CamRect>[], ease: (u: number) => number): CamRect;
|
|
464
575
|
declare function buildStageKeyframes(comp: TakeComposition): StageKeyframes;
|
|
576
|
+
/** The one camera evaluator — scene.tsx (render) and the editor preview both
|
|
577
|
+
* consume THIS, so preview and export can never drift. */
|
|
578
|
+
declare function stageCamera(comp: TakeComposition): {
|
|
579
|
+
T: number;
|
|
580
|
+
rest: number;
|
|
581
|
+
peakScale: number;
|
|
582
|
+
at: (t: number) => {
|
|
583
|
+
scale: number;
|
|
584
|
+
center: Pt;
|
|
585
|
+
};
|
|
586
|
+
};
|
|
465
587
|
type Leg = {
|
|
466
588
|
t0: number;
|
|
467
589
|
t1: number;
|
|
@@ -477,5 +599,5 @@ declare function cursorPos(t: number, legs: Leg[], comp: TakeComposition): Pt;
|
|
|
477
599
|
declare function isDragging(t: number, legs: Leg[]): boolean;
|
|
478
600
|
|
|
479
601
|
//#endregion
|
|
480
|
-
export { BBox, CaptureClick, CaptureDrag, CaptureEvent, CaptureEventBase, CaptureHover, CaptureLog, CapturePress, CaptureScroll, CaptureType, CompEvent, CompositionIssue, CursorConfig, DEFAULT_CURSOR, DEFAULT_FRAMING, DEFAULT_MOTION_BLUR, FINISH, FinishName, FramingConfig, LOOKS, LookName, LookPreset, MOTION, MotionBlurConfig, MotionName, MotionPreset, PlanOpts, Pt, RenderTakeOpts, ReviewBadge, ReviewDecor, TakeComposition, ValidateOpts, ZOOM_LEVELS, ZoomDecision, ZoomIntent, ZoomLevelName, finishName, formatIssues, lookName, math_d_exports as math, motionBlurActive, motionName, planComposition, renderTake, resolveFfmpeg, resolveFfprobe, validateComposition, zoomLevelName };
|
|
602
|
+
export { BBox, Beat, CameraConfig, CaptureClick, CaptureDrag, CaptureEvent, CaptureEventBase, CaptureHover, CaptureLog, CapturePress, CaptureScroll, CaptureType, CompEvent, CompositionIssue, CursorConfig, DEFAULT_CAMERA, DEFAULT_CURSOR, DEFAULT_FRAMING, DEFAULT_MOTION_BLUR, FINISH, FinishName, Framing, FramingConfig, LOOKS, LookName, LookPreset, MOTION, MotionBlurConfig, MotionName, MotionPreset, PlanOpts, Pt, RenderTakeOpts, ReviewBadge, ReviewDecor, TakeComposition, ValidateOpts, ZOOM_LEVELS, ZoomDecision, ZoomIntent, ZoomLevelName, directCamera, finishName, formatIssues, lookName, math_d_exports as math, motionBlurActive, motionName, planComposition, renderTake, resolveFfmpeg, resolveFfprobe, validateComposition, zoomLevelName };
|
|
481
603
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/types.ts","../src/presets.ts","../src/ffmpeg.ts","../src/plan.ts","../src/render.ts","../src/validate.ts","../src/math.ts"],"sourcesContent":null,"mappings":";;;KAMY,EAAA;;;AAAZ,CAAA;AACY,KAAA,IAAA,GAAI;;EAKJ,CAAA,EAAA,MAAA;;;AAIZ,CAAA;;AAKQ,KATI,UAAA,GASJ,MAAA,GAAA,OAAA,GAAA,QAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/types.ts","../src/presets.ts","../src/ffmpeg.ts","../src/plan.ts","../src/camera.ts","../src/render.ts","../src/validate.ts","../src/math.ts"],"sourcesContent":null,"mappings":"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"}
|