@open-take/compositor 0.1.1 → 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 +154 -37
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +544 -218
- package/dist/index.js.map +1 -1
- package/package.json +8 -6
- package/src/camera.ts +324 -0
- package/src/ffmpeg.ts +27 -0
- package/src/index.ts +2 -1
- package/src/math.ts +158 -126
- package/src/plan.ts +102 -66
- package/src/presets.ts +10 -5
- package/src/render.ts +214 -80
- package/src/scene/scene.tsx +10 -17
- package/src/scene/tsconfig.json +14 -0
- 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;
|
|
@@ -363,10 +458,9 @@ type RenderTakeOpts = {
|
|
|
363
458
|
planOpts?: PlanOpts;
|
|
364
459
|
logProgress?: boolean;
|
|
365
460
|
/** Chrome binary for the headless render. Pass the same Chrome-for-Testing
|
|
366
|
-
* the capture path uses so a single browser serves both stages
|
|
367
|
-
*
|
|
368
|
-
|
|
369
|
-
chromePath?: string;
|
|
461
|
+
* the capture path uses so a single browser serves both stages. The
|
|
462
|
+
* higher-level runtime resolves and supplies this to puppeteer-core. */
|
|
463
|
+
chromePath: string;
|
|
370
464
|
/** the capture log, for cross-checking that an edited composition didn't
|
|
371
465
|
* drift an action's capture-locked tMs (see validateComposition). Optional —
|
|
372
466
|
* the structural checks run regardless. */
|
|
@@ -421,13 +515,12 @@ declare function formatIssues(issues: CompositionIssue[]): string;
|
|
|
421
515
|
//#region src/math.d.ts
|
|
422
516
|
//# sourceMappingURL=validate.d.ts.map
|
|
423
517
|
declare namespace math_d_exports {
|
|
424
|
-
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 };
|
|
425
519
|
}
|
|
426
520
|
declare function smoother(t: number): number;
|
|
427
521
|
declare function cubicBezier(x1: number, y1: number, x2: number, y2: number): (x: number) => number;
|
|
428
522
|
declare function springEase(bounce: number): (p: number) => number;
|
|
429
523
|
declare function stageEasing(cursor: TakeComposition["cursor"]): (u: number) => number;
|
|
430
|
-
declare function panEasing(cursor: TakeComposition["cursor"]): (u: number) => number;
|
|
431
524
|
declare function gradientEndpoints(angleDeg: number | undefined, oW: number, oH: number): {
|
|
432
525
|
x0: number;
|
|
433
526
|
y0: number;
|
|
@@ -435,8 +528,7 @@ declare function gradientEndpoints(angleDeg: number | undefined, oW: number, oH:
|
|
|
435
528
|
y1: number;
|
|
436
529
|
};
|
|
437
530
|
type KF<T> = [number, T];
|
|
438
|
-
declare function keyvalN(t: number, kfs: KF<number>[], ease?: (u: number) => number
|
|
439
|
-
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;
|
|
440
532
|
/**
|
|
441
533
|
* Scale (absolute, video-px → output-px) that fits `bbox` into `fillFrac`
|
|
442
534
|
* of the output frame, capped at `maxScale` and floored at `restScale`.
|
|
@@ -457,12 +549,37 @@ declare function restStageScale(videoW: number, videoH: number, outW: number, ou
|
|
|
457
549
|
* panning past the recording's edge.
|
|
458
550
|
*/
|
|
459
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
|
+
};
|
|
460
559
|
type StageKeyframes = {
|
|
461
|
-
|
|
462
|
-
c: KF<Pt>[];
|
|
560
|
+
r: KF<CamRect>[];
|
|
463
561
|
T: number;
|
|
464
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;
|
|
465
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
|
+
};
|
|
466
583
|
type Leg = {
|
|
467
584
|
t0: number;
|
|
468
585
|
t1: number;
|
|
@@ -478,5 +595,5 @@ declare function cursorPos(t: number, legs: Leg[], comp: TakeComposition): Pt;
|
|
|
478
595
|
declare function isDragging(t: number, legs: Leg[]): boolean;
|
|
479
596
|
|
|
480
597
|
//#endregion
|
|
481
|
-
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 };
|
|
482
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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"}
|