@open-take/compositor 0.1.2 → 0.2.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/index.d.ts +151 -33
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +396 -170
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
- package/src/camera.ts +324 -0
- package/src/index.ts +1 -0
- package/src/math.ts +156 -124
- package/src/plan.ts +102 -66
- package/src/presets.ts +10 -5
- package/src/scene/scene.tsx +8 -16
- package/src/types.ts +86 -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;
|
|
@@ -306,7 +358,9 @@ declare const ZOOM_LEVELS: {
|
|
|
306
358
|
type ZoomLevelName = keyof typeof ZOOM_LEVELS;
|
|
307
359
|
/** Name a scale if it sits within tolerance of a preset; else null (custom). */
|
|
308
360
|
declare function zoomLevelName(scale: number, tol?: number): ZoomLevelName | null;
|
|
309
|
-
type MotionPreset = Pick<CursorConfig, "travelWidthsPerSec" | "holdMs" | "zoomInMs" | "zoomOutMs"
|
|
361
|
+
type MotionPreset = Pick<CursorConfig, "travelWidthsPerSec" | "holdMs" | "zoomInMs" | "zoomOutMs"> & {
|
|
362
|
+
zoomEase?: undefined;
|
|
363
|
+
};
|
|
310
364
|
declare const MOTION: Record<"calm" | "natural" | "brisk", MotionPreset>;
|
|
311
365
|
type MotionName = keyof typeof MOTION;
|
|
312
366
|
declare function motionName(cursor: CursorConfig): MotionName | null;
|
|
@@ -335,22 +389,63 @@ type PlanOpts = {
|
|
|
335
389
|
};
|
|
336
390
|
framing?: Partial<FramingConfig>;
|
|
337
391
|
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;
|
|
392
|
+
/** auto-camera director tuning (default DEFAULT_CAMERA — ON). The director
|
|
393
|
+
* decides zoom from the ground-truth log; these are its feel knobs. Set
|
|
394
|
+
* `camera.enabled = false` for the manual escape hatch (only explicit
|
|
395
|
+
* event `zoom: "always"/"never"` produce zoom then). */
|
|
396
|
+
camera?: Partial<CameraConfig>;
|
|
348
397
|
};
|
|
349
398
|
declare function planComposition(log: CaptureLog, opts?: PlanOpts): TakeComposition;
|
|
350
399
|
|
|
351
400
|
//#endregion
|
|
352
|
-
//#region src/
|
|
401
|
+
//#region src/camera.d.ts
|
|
353
402
|
//# sourceMappingURL=plan.d.ts.map
|
|
403
|
+
/** One action, already mapped into video-px, handed to the director. */
|
|
404
|
+
type Beat = {
|
|
405
|
+
kind: "click" | "type" | "drag" | "scroll" | "hover" | "press";
|
|
406
|
+
tMs: number;
|
|
407
|
+
durationMs: number;
|
|
408
|
+
/** element bbox (for a drag: the path's bbox), video-px — or undefined for a
|
|
409
|
+
* bare press (no located element). */
|
|
410
|
+
box?: BBox;
|
|
411
|
+
/** the region that actually changed after the action (frame-diff seam),
|
|
412
|
+
* video-px. Framed over `box` when present. */
|
|
413
|
+
effectBox?: BBox;
|
|
414
|
+
/** fraction of the frame that changed after the action, 0..1. */
|
|
415
|
+
changeCoverage?: number;
|
|
416
|
+
/** anchor / cursor rest point, video-px (for the reason only). */
|
|
417
|
+
point: Pt;
|
|
418
|
+
/** plan override; absent ⇒ "auto" (the director decides). */
|
|
419
|
+
intent: ZoomIntent;
|
|
420
|
+
/** short label (sel / note) for the cluster tag in the reason. */
|
|
421
|
+
label?: string;
|
|
422
|
+
/** press only: the key chord (for the Escape-dismissal rule). */
|
|
423
|
+
keys?: string;
|
|
424
|
+
};
|
|
425
|
+
/** The director's per-beat verdict. plan.ts adds `inAtMs` to make a full
|
|
426
|
+
* ZoomDecision. */
|
|
427
|
+
type Framing = {
|
|
428
|
+
enabled: boolean;
|
|
429
|
+
scale: number;
|
|
430
|
+
center: Pt;
|
|
431
|
+
reason: string;
|
|
432
|
+
};
|
|
433
|
+
/**
|
|
434
|
+
* Decide framing for every beat. `endMs` is when the last frame can hold until
|
|
435
|
+
* (for the min-hold check on the final segment). `rest` is the stage scale at
|
|
436
|
+
* full view.
|
|
437
|
+
*/
|
|
438
|
+
declare function directCamera(beats: Beat[], video: {
|
|
439
|
+
w: number;
|
|
440
|
+
h: number;
|
|
441
|
+
}, out: {
|
|
442
|
+
w: number;
|
|
443
|
+
h: number;
|
|
444
|
+
}, cam: CameraConfig, rest: number, endMs: number): Framing[];
|
|
445
|
+
|
|
446
|
+
//#endregion
|
|
447
|
+
//#region src/render.d.ts
|
|
448
|
+
//# sourceMappingURL=camera.d.ts.map
|
|
354
449
|
type RenderTakeOpts = {
|
|
355
450
|
/** input capture video (webm or mp4) */
|
|
356
451
|
videoPath: string;
|
|
@@ -420,13 +515,12 @@ declare function formatIssues(issues: CompositionIssue[]): string;
|
|
|
420
515
|
//#region src/math.d.ts
|
|
421
516
|
//# sourceMappingURL=validate.d.ts.map
|
|
422
517
|
declare namespace math_d_exports {
|
|
423
|
-
export { StageKeyframes, bboxFitScale, buildLegs, buildStageKeyframes, clampCenter, cubicBezier, cursorPos, gradientEndpoints, isDragging, keyvalN,
|
|
518
|
+
export { CamRect, StageKeyframes, bboxFitScale, buildLegs, buildStageKeyframes, clampCenter, cubicBezier, cursorPos, gradientEndpoints, isDragging, keyvalN, keyvalR, restStageScale, smoother, springEase, stageCamera, stageEasing };
|
|
424
519
|
}
|
|
425
520
|
declare function smoother(t: number): number;
|
|
426
521
|
declare function cubicBezier(x1: number, y1: number, x2: number, y2: number): (x: number) => number;
|
|
427
522
|
declare function springEase(bounce: number): (p: number) => number;
|
|
428
523
|
declare function stageEasing(cursor: TakeComposition["cursor"]): (u: number) => number;
|
|
429
|
-
declare function panEasing(cursor: TakeComposition["cursor"]): (u: number) => number;
|
|
430
524
|
declare function gradientEndpoints(angleDeg: number | undefined, oW: number, oH: number): {
|
|
431
525
|
x0: number;
|
|
432
526
|
y0: number;
|
|
@@ -434,8 +528,7 @@ declare function gradientEndpoints(angleDeg: number | undefined, oW: number, oH:
|
|
|
434
528
|
y1: number;
|
|
435
529
|
};
|
|
436
530
|
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;
|
|
531
|
+
declare function keyvalN(t: number, kfs: KF<number>[], ease?: (u: number) => number): number;
|
|
439
532
|
/**
|
|
440
533
|
* Scale (absolute, video-px → output-px) that fits `bbox` into `fillFrac`
|
|
441
534
|
* of the output frame, capped at `maxScale` and floored at `restScale`.
|
|
@@ -456,12 +549,37 @@ declare function restStageScale(videoW: number, videoH: number, outW: number, ou
|
|
|
456
549
|
* panning past the recording's edge.
|
|
457
550
|
*/
|
|
458
551
|
declare function clampCenter(center: Pt, scale: number, videoW: number, videoH: number, outW: number, outH: number): Pt;
|
|
552
|
+
/** The camera as a viewport RECT in video-px: centre + full viewport width
|
|
553
|
+
* (height is implied by the output aspect: h = w·oH/oW). scale = oW / w. */
|
|
554
|
+
type CamRect = {
|
|
555
|
+
cx: number;
|
|
556
|
+
cy: number;
|
|
557
|
+
w: number;
|
|
558
|
+
};
|
|
459
559
|
type StageKeyframes = {
|
|
460
|
-
|
|
461
|
-
c: KF<Pt>[];
|
|
560
|
+
r: KF<CamRect>[];
|
|
462
561
|
T: number;
|
|
463
562
|
};
|
|
563
|
+
/** Interpolate the rect track: centre AND size move under the SAME eased
|
|
564
|
+
* parameter. This is the whole trick (verified
|
|
565
|
+
* by frame-tracking a reference export: its pan curve overlays its viewport-WIDTH
|
|
566
|
+
* curve exactly, not its scale curve): lerping the rect keeps every corner on
|
|
567
|
+
* a straight line, so the screen-space path of the zoom target is strictly
|
|
568
|
+
* monotone toward frame centre — no wrong-way "bounce" for ANY scale pair,
|
|
569
|
+
* which scale+centre lerp can't guarantee (it hooks when scale > 2×rest). */
|
|
570
|
+
declare function keyvalR(t: number, kfs: KF<CamRect>[], ease: (u: number) => number): CamRect;
|
|
464
571
|
declare function buildStageKeyframes(comp: TakeComposition): StageKeyframes;
|
|
572
|
+
/** The one camera evaluator — scene.tsx (render) and the editor preview both
|
|
573
|
+
* consume THIS, so preview and export can never drift. */
|
|
574
|
+
declare function stageCamera(comp: TakeComposition): {
|
|
575
|
+
T: number;
|
|
576
|
+
rest: number;
|
|
577
|
+
peakScale: number;
|
|
578
|
+
at: (t: number) => {
|
|
579
|
+
scale: number;
|
|
580
|
+
center: Pt;
|
|
581
|
+
};
|
|
582
|
+
};
|
|
465
583
|
type Leg = {
|
|
466
584
|
t0: number;
|
|
467
585
|
t1: number;
|
|
@@ -477,5 +595,5 @@ declare function cursorPos(t: number, legs: Leg[], comp: TakeComposition): Pt;
|
|
|
477
595
|
declare function isDragging(t: number, legs: Leg[]): boolean;
|
|
478
596
|
|
|
479
597
|
//#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 };
|
|
598
|
+
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
599
|
//# 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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"}
|