playhead-cli 0.1.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/Dockerfile +24 -0
- package/LICENSE +21 -0
- package/README.md +184 -0
- package/action.yml +71 -0
- package/dist/audio/mux.d.ts +29 -0
- package/dist/audio/mux.d.ts.map +1 -0
- package/dist/audio/timing.d.ts +6 -0
- package/dist/audio/timing.d.ts.map +1 -0
- package/dist/audio/tts.d.ts +23 -0
- package/dist/audio/tts.d.ts.map +1 -0
- package/dist/authoring/author.d.ts +40 -0
- package/dist/authoring/author.d.ts.map +1 -0
- package/dist/authoring/catalog.d.ts +31 -0
- package/dist/authoring/catalog.d.ts.map +1 -0
- package/dist/authoring/explore.d.ts +30 -0
- package/dist/authoring/explore.d.ts.map +1 -0
- package/dist/authoring/serialize.d.ts +26 -0
- package/dist/authoring/serialize.d.ts.map +1 -0
- package/dist/authoring/validate.d.ts +31 -0
- package/dist/authoring/validate.d.ts.map +1 -0
- package/dist/beforeafter.d.ts +25 -0
- package/dist/beforeafter.d.ts.map +1 -0
- package/dist/bundle/hash.d.ts +3 -0
- package/dist/bundle/hash.d.ts.map +1 -0
- package/dist/bundle/reader.d.ts +6 -0
- package/dist/bundle/reader.d.ts.map +1 -0
- package/dist/bundle/types.d.ts +54 -0
- package/dist/bundle/types.d.ts.map +1 -0
- package/dist/bundle/writer.d.ts +35 -0
- package/dist/bundle/writer.d.ts.map +1 -0
- package/dist/capture/driver-api.d.ts +190 -0
- package/dist/capture/driver-api.d.ts.map +1 -0
- package/dist/capture/events.d.ts +78 -0
- package/dist/capture/events.d.ts.map +1 -0
- package/dist/capture/executor.d.ts +19 -0
- package/dist/capture/executor.d.ts.map +1 -0
- package/dist/capture/playwright-driver.d.ts +122 -0
- package/dist/capture/playwright-driver.d.ts.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +6648 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/compose/camera/interpolate.d.ts +9 -0
- package/dist/compose/camera/interpolate.d.ts.map +1 -0
- package/dist/compose/camera/planner.d.ts +19 -0
- package/dist/compose/camera/planner.d.ts.map +1 -0
- package/dist/compose/captions.d.ts +22 -0
- package/dist/compose/captions.d.ts.map +1 -0
- package/dist/compose/cursor/path.d.ts +17 -0
- package/dist/compose/cursor/path.d.ts.map +1 -0
- package/dist/compose/cursor/render.d.ts +10 -0
- package/dist/compose/cursor/render.d.ts.map +1 -0
- package/dist/compose/index.d.ts +25 -0
- package/dist/compose/index.d.ts.map +1 -0
- package/dist/compose/kinds.d.ts +27 -0
- package/dist/compose/kinds.d.ts.map +1 -0
- package/dist/compose/overlays/build.d.ts +7 -0
- package/dist/compose/overlays/build.d.ts.map +1 -0
- package/dist/compose/overlays/draw.d.ts +12 -0
- package/dist/compose/overlays/draw.d.ts.map +1 -0
- package/dist/compose/overlays/text.d.ts +18 -0
- package/dist/compose/overlays/text.d.ts.map +1 -0
- package/dist/compose/render/encoder.d.ts +13 -0
- package/dist/compose/render/encoder.d.ts.map +1 -0
- package/dist/compose/render/frameStore.d.ts +27 -0
- package/dist/compose/render/frameStore.d.ts.map +1 -0
- package/dist/compose/render/renderer.d.ts +5 -0
- package/dist/compose/render/renderer.d.ts.map +1 -0
- package/dist/compose/timeline/pacing.d.ts +36 -0
- package/dist/compose/timeline/pacing.d.ts.map +1 -0
- package/dist/compose/types.d.ts +236 -0
- package/dist/compose/types.d.ts.map +1 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4963 -0
- package/dist/index.js.map +1 -0
- package/dist/integrations/jira.d.ts +44 -0
- package/dist/integrations/jira.d.ts.map +1 -0
- package/dist/mcp/bin.d.ts +3 -0
- package/dist/mcp/bin.d.ts.map +1 -0
- package/dist/mcp/bin.js +5749 -0
- package/dist/mcp/bin.js.map +1 -0
- package/dist/mcp/server.d.ts +10 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/shared/easing.d.ts +9 -0
- package/dist/shared/easing.d.ts.map +1 -0
- package/dist/shared/exit.d.ts +32 -0
- package/dist/shared/exit.d.ts.map +1 -0
- package/dist/shared/ffmpeg.d.ts +19 -0
- package/dist/shared/ffmpeg.d.ts.map +1 -0
- package/dist/shared/geometry.d.ts +47 -0
- package/dist/shared/geometry.d.ts.map +1 -0
- package/dist/shared/log.d.ts +10 -0
- package/dist/shared/log.d.ts.map +1 -0
- package/dist/shared/version.d.ts +4 -0
- package/dist/shared/version.d.ts.map +1 -0
- package/dist/spec/locators.d.ts +62 -0
- package/dist/spec/locators.d.ts.map +1 -0
- package/dist/spec/parse.d.ts +16 -0
- package/dist/spec/parse.d.ts.map +1 -0
- package/dist/spec/schema.d.ts +365 -0
- package/dist/spec/schema.d.ts.map +1 -0
- package/dist/theme/index.d.ts +23 -0
- package/dist/theme/index.d.ts.map +1 -0
- package/dist/verify/checks.d.ts +27 -0
- package/dist/verify/checks.d.ts.map +1 -0
- package/dist/verify/contact-sheet.d.ts +7 -0
- package/dist/verify/contact-sheet.d.ts.map +1 -0
- package/dist/verify/media.d.ts +42 -0
- package/dist/verify/media.d.ts.map +1 -0
- package/dist/verify/report.d.ts +12 -0
- package/dist/verify/report.d.ts.map +1 -0
- package/dist/verify/runner.d.ts +13 -0
- package/dist/verify/runner.d.ts.map +1 -0
- package/dist/verify/types.d.ts +63 -0
- package/dist/verify/types.d.ts.map +1 -0
- package/dist/verify/vision.d.ts +19 -0
- package/dist/verify/vision.d.ts.map +1 -0
- package/package.json +74 -0
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { CameraKeyframe } from '../types.js';
|
|
2
|
+
import type { CameraState } from '../../shared/geometry.js';
|
|
3
|
+
/**
|
|
4
|
+
* Sample the camera path at an output time. Keyframes are (time, state, ease-from-previous);
|
|
5
|
+
* holds are expressed as consecutive keyframes with identical states. Zoom interpolates in
|
|
6
|
+
* log space (linear zoom feels like it accelerates).
|
|
7
|
+
*/
|
|
8
|
+
export declare function sampleCamera(keyframes: CameraKeyframe[], tOut: number): CameraState;
|
|
9
|
+
//# sourceMappingURL=interpolate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interpolate.d.ts","sourceRoot":"","sources":["../../../src/compose/camera/interpolate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAG5D;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW,CAsBnF"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { CameraKeyframe, OutputProfile, StepMapEntry } from '../types.js';
|
|
2
|
+
import type { EventLog } from '../../capture/events.js';
|
|
3
|
+
import { type Rect } from '../../shared/geometry.js';
|
|
4
|
+
export interface CameraPlanResult {
|
|
5
|
+
keyframes: CameraKeyframe[];
|
|
6
|
+
fallbacks: string[];
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Plan the camera path from measured step geometry. Craft rules: quantized zoom levels,
|
|
10
|
+
* legibility-driven zoom selection, caption-safe-area bias, pull-backs on navigation and
|
|
11
|
+
* long pans, and an analytic constraint pass that guarantees each target stays framed.
|
|
12
|
+
*/
|
|
13
|
+
export declare function planCamera(steps: StepMapEntry[], log: EventLog, profile: OutputProfile, durationMs: number, opts?: {
|
|
14
|
+
emphasis?: boolean;
|
|
15
|
+
}): CameraPlanResult;
|
|
16
|
+
/** The safe area, expressed in PLANE space (stage content coords when a stage is set): frame
|
|
17
|
+
* margins translated into the content rect, with a small floor so it never collapses. */
|
|
18
|
+
export declare function contentArea(profile: OutputProfile): Rect;
|
|
19
|
+
//# sourceMappingURL=planner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"planner.d.ts","sourceRoot":"","sources":["../../../src/compose/camera/planner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE/E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAExD,OAAO,EAGL,KAAK,IAAI,EASV,MAAM,0BAA0B,CAAC;AA6BlC,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,YAAY,EAAE,EACrB,GAAG,EAAE,QAAQ,EACb,OAAO,EAAE,aAAa,EACtB,UAAU,EAAE,MAAM,EAClB,IAAI,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,GAC5B,gBAAgB,CA+ClB;AAwLD;0FAC0F;AAC1F,wBAAgB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAOxD"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { ActionEvent } from '../capture/events.js';
|
|
2
|
+
/** Per-step text overrides from a LIVE spec, keyed by stepRef — the compose-time source of
|
|
3
|
+
* truth for caption/narration text. The copies baked into events.json are only the record of
|
|
4
|
+
* what was captured; preferring the live spec makes text edits a sub-second re-compose, never
|
|
5
|
+
* a re-capture (capture once, compose forever — including the words). */
|
|
6
|
+
export interface StepTexts {
|
|
7
|
+
caption?: string;
|
|
8
|
+
narration?: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Deterministic caption writer: turns a step + its recorded accessible label into
|
|
12
|
+
* instruction text. Text resolution: live-spec caption ?? captured caption ?? auto-written.
|
|
13
|
+
* Returns null for steps that produce no caption (expect/wait without caption).
|
|
14
|
+
*/
|
|
15
|
+
export declare function writeCaption(event: ActionEvent, texts?: StepTexts): string | null;
|
|
16
|
+
/**
|
|
17
|
+
* The SPOKEN line for a step: live-spec narration ?? live-spec caption ?? captured narration ??
|
|
18
|
+
* the caption. Narration is unconstrained by the caption card, so a spec can show a terse
|
|
19
|
+
* on-screen label while the voice says the full sentence.
|
|
20
|
+
*/
|
|
21
|
+
export declare function writeNarration(event: ActionEvent, texts?: StepTexts): string | null;
|
|
22
|
+
//# sourceMappingURL=captions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"captions.d.ts","sourceRoot":"","sources":["../../src/compose/captions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAGxD;;;0EAG0E;AAC1E,MAAM,WAAW,SAAS;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,CA8BjF;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,CAEnF"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { CursorSegment, ClickRipple, StepMapEntry } from '../types.js';
|
|
2
|
+
import type { EventLog } from '../../capture/events.js';
|
|
3
|
+
import { type Point } from '../../shared/geometry.js';
|
|
4
|
+
export interface CursorPlan {
|
|
5
|
+
segments: CursorSegment[];
|
|
6
|
+
ripples: ClickRipple[];
|
|
7
|
+
restStart: Point;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Re-synthesize cursor motion on the output clock: recorded waypoints give the path SHAPE,
|
|
11
|
+
* arrival is re-timed so the cursor lands on the target exactly at the action beat with a
|
|
12
|
+
* minimum-jerk profile.
|
|
13
|
+
*/
|
|
14
|
+
export declare function planCursor(steps: StepMapEntry[], log: EventLog): CursorPlan;
|
|
15
|
+
/** Position of the cursor at an output time (viewport space). */
|
|
16
|
+
export declare function sampleCursor(plan: CursorPlan, tOut: number): Point;
|
|
17
|
+
//# sourceMappingURL=path.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../../../src/compose/cursor/path.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAExD,OAAO,EAAE,KAAK,KAAK,EAAe,MAAM,0BAA0B,CAAC;AAOnE,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,SAAS,EAAE,KAAK,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,GAAG,EAAE,QAAQ,GAAG,UAAU,CAgC3E;AAED,iEAAiE;AACjE,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,KAAK,CAsBlE"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { SKRSContext2D } from '@napi-rs/canvas';
|
|
2
|
+
import type { Point } from '../../shared/geometry.js';
|
|
3
|
+
import type { ClickRipple } from '../types.js';
|
|
4
|
+
import type { ResolvedTheme } from '../../theme/index.js';
|
|
5
|
+
export type CursorGlyph = 'arrow' | 'ibeam';
|
|
6
|
+
/** Draw the vector cursor at an output-space point.
|
|
7
|
+
* `baseScale` (output px per viewport px) keeps the cursor proportioned to the UI it points
|
|
8
|
+
* at — without it the cursor renders 1.5× too small against upscaled content. */
|
|
9
|
+
export declare function drawCursor(ctx: SKRSContext2D, p: Point, zoom: number, tOut: number, ripples: ClickRipple[], rippleCenters: Point[], theme: ResolvedTheme, baseScale?: number, glyph?: CursorGlyph): void;
|
|
10
|
+
//# sourceMappingURL=render.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../../src/compose/cursor/render.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAM1D,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,OAAO,CAAC;AAE5C;;kFAEkF;AAClF,wBAAgB,UAAU,CACxB,GAAG,EAAE,aAAa,EAClB,CAAC,EAAE,KAAK,EACR,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,WAAW,EAAE,EACtB,aAAa,EAAE,KAAK,EAAE,EACtB,KAAK,EAAE,aAAa,EACpB,SAAS,SAAI,EACb,KAAK,GAAE,WAAqB,GAC3B,IAAI,CAoEN"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { BundleData } from '../bundle/types.js';
|
|
2
|
+
import type { Spec } from '../spec/schema.js';
|
|
3
|
+
import { type ResolvedTheme } from '../theme/index.js';
|
|
4
|
+
import type { ComposeManifest, OutputProfile } from './types.js';
|
|
5
|
+
import { type StepTexts } from './captions.js';
|
|
6
|
+
export interface ComposeResult {
|
|
7
|
+
videoPath: string;
|
|
8
|
+
manifestPath: string;
|
|
9
|
+
manifest: ComposeManifest;
|
|
10
|
+
}
|
|
11
|
+
/** Pure planning: bundle + spec + theme → compose manifest. No rendering. */
|
|
12
|
+
/** Per-step caption/narration text from the LIVE spec, keyed by stepRef — so text edits are a
|
|
13
|
+
* re-compose, never a re-capture. */
|
|
14
|
+
export declare function specStepTexts(spec: Spec): Map<string, StepTexts>;
|
|
15
|
+
export declare function plan(bundle: BundleData, spec: Spec, theme?: ResolvedTheme, profile?: OutputProfile, audioMs?: Map<string, number>): ComposeManifest;
|
|
16
|
+
export interface ComposeOptions {
|
|
17
|
+
outDir: string;
|
|
18
|
+
fileName?: string;
|
|
19
|
+
theme?: ResolvedTheme;
|
|
20
|
+
profile?: OutputProfile;
|
|
21
|
+
}
|
|
22
|
+
/** Full composition: plan + render + write manifest. Never touches the live app. */
|
|
23
|
+
export declare function compose(bundle: BundleData, spec: Spec, opts: ComposeOptions): Promise<ComposeResult>;
|
|
24
|
+
export declare function renderFromManifest(bundle: BundleData, manifest: ComposeManifest, videoPath: string): Promise<void>;
|
|
25
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/compose/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAE9C,OAAO,EAAgB,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,KAAK,EAAsB,eAAe,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAYrF,OAAO,EAAgC,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AAK7E,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,eAAe,CAAC;CAC3B;AAED,6EAA6E;AAC7E;sCACsC;AACtC,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAYhE;AAED,wBAAgB,IAAI,CAClB,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,IAAI,EACV,KAAK,CAAC,EAAE,aAAa,EACrB,OAAO,CAAC,EAAE,aAAa,EACvB,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAC5B,eAAe,CA2HjB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAED,oFAAoF;AACpF,wBAAsB,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAiE1G;AAED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAExH"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { OutputKind } from '../spec/schema.js';
|
|
2
|
+
export type CaptionStyle = 'instruction' | 'factual' | 'chapter';
|
|
3
|
+
/** How a given output kind is composed — the same capture, a different treatment. */
|
|
4
|
+
export interface KindProfile {
|
|
5
|
+
kind: OutputKind;
|
|
6
|
+
/** Default pacing when the spec doesn't set one. */
|
|
7
|
+
pacing: 'relaxed' | 'normal' | 'brisk';
|
|
8
|
+
/** Caption phrasing: instructional ("Click X"), factual repro ("Step 1 — click X"), or narrative. */
|
|
9
|
+
captionStyle: CaptionStyle;
|
|
10
|
+
/** Prefix each caption with its number ("1.", "2." …). */
|
|
11
|
+
numberedCaptions: boolean;
|
|
12
|
+
/** Draw a running elapsed-time clock (bug evidence). */
|
|
13
|
+
elapsedClock: boolean;
|
|
14
|
+
/** Insert a full-frame chapter card at each new scene (demo narrative structure). */
|
|
15
|
+
chapterCards: boolean;
|
|
16
|
+
/** Hold on the final state this long (ms) — bug-repro dwells on the defect. */
|
|
17
|
+
outroMs: number;
|
|
18
|
+
/** Typed input is shown as evidence even in fields that look sensitive (repro needs the values). */
|
|
19
|
+
showTypedInput: boolean;
|
|
20
|
+
/** Composition-driven camera emphasis + click spotlights. Off for bug-repro, which must stay
|
|
21
|
+
* a literal record of the screen. */
|
|
22
|
+
cameraEmphasis: boolean;
|
|
23
|
+
/** Render footage on a stage (matte + rounded card + browser chrome) instead of edge-to-edge. */
|
|
24
|
+
stage: boolean;
|
|
25
|
+
}
|
|
26
|
+
export declare function kindProfile(kind: OutputKind): KindProfile;
|
|
27
|
+
//# sourceMappingURL=kinds.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kinds.d.ts","sourceRoot":"","sources":["../../src/compose/kinds.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,MAAM,YAAY,GAAG,aAAa,GAAG,SAAS,GAAG,SAAS,CAAC;AAEjE,qFAAqF;AACrF,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,UAAU,CAAC;IACjB,oDAAoD;IACpD,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;IACvC,qGAAqG;IACrG,YAAY,EAAE,YAAY,CAAC;IAC3B,0DAA0D;IAC1D,gBAAgB,EAAE,OAAO,CAAC;IAC1B,wDAAwD;IACxD,YAAY,EAAE,OAAO,CAAC;IACtB,qFAAqF;IACrF,YAAY,EAAE,OAAO,CAAC;IACtB,+EAA+E;IAC/E,OAAO,EAAE,MAAM,CAAC;IAChB,oGAAoG;IACpG,cAAc,EAAE,OAAO,CAAC;IACxB;0CACsC;IACtC,cAAc,EAAE,OAAO,CAAC;IACxB,iGAAiG;IACjG,KAAK,EAAE,OAAO,CAAC;CAChB;AA0CD,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,WAAW,CAEzD"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { CameraKeyframe, ComposeDiagnostics, OutputProfile, OverlayEntry, StepMapEntry } from '../types.js';
|
|
2
|
+
import type { EventLog } from '../../capture/events.js';
|
|
3
|
+
import type { ResolvedTheme } from '../../theme/index.js';
|
|
4
|
+
import type { KindProfile } from '../kinds.js';
|
|
5
|
+
import { type StepTexts } from '../captions.js';
|
|
6
|
+
export declare function buildOverlays(steps: StepMapEntry[], log: EventLog, theme: ResolvedTheme, profile: OutputProfile, title: string, subtitle: string, titleCardEndMs: number, diagnostics: ComposeDiagnostics, kind: KindProfile, sceneTitles?: Map<string, string>, camera?: CameraKeyframe[], specTexts?: Map<string, StepTexts>): OverlayEntry[];
|
|
7
|
+
//# sourceMappingURL=build.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../src/compose/overlays/build.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAkB,kBAAkB,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEjI,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAgB,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAkB9D,wBAAgB,aAAa,CAC3B,KAAK,EAAE,YAAY,EAAE,EACrB,GAAG,EAAE,QAAQ,EACb,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,aAAa,EACtB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,kBAAkB,EAC/B,IAAI,EAAE,WAAW,EACjB,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EACjC,MAAM,CAAC,EAAE,cAAc,EAAE,EACzB,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,GACjC,YAAY,EAAE,CAgGhB"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { SKRSContext2D } from '@napi-rs/canvas';
|
|
2
|
+
import type { OutputProfile, OverlayEntry, TitleCardOverlay } from '../types.js';
|
|
3
|
+
import type { ResolvedTheme } from '../../theme/index.js';
|
|
4
|
+
export declare function drawOverlays(ctx: SKRSContext2D, overlays: OverlayEntry[], tOut: number, theme: ResolvedTheme, profile: OutputProfile): void;
|
|
5
|
+
/** The failure clip's closing card: what step broke and why, in evidence red. */
|
|
6
|
+
export declare function drawFailureCard(ctx: SKRSContext2D, card: {
|
|
7
|
+
stepRef: string;
|
|
8
|
+
message: string;
|
|
9
|
+
tStart: number;
|
|
10
|
+
}, tOut: number, theme: ResolvedTheme, profile: OutputProfile): void;
|
|
11
|
+
export declare function drawTitleCard(ctx: SKRSContext2D, card: TitleCardOverlay, tOut: number, theme: ResolvedTheme, profile: OutputProfile): void;
|
|
12
|
+
//# sourceMappingURL=draw.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"draw.d.ts","sourceRoot":"","sources":["../../../src/compose/overlays/draw.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,KAAK,EAAkB,aAAa,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACjG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAO1D,wBAAgB,YAAY,CAC1B,GAAG,EAAE,aAAa,EAClB,QAAQ,EAAE,YAAY,EAAE,EACxB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,aAAa,GACrB,IAAI,CAgDN;AAyHD,iFAAiF;AACjF,wBAAgB,eAAe,CAC7B,GAAG,EAAE,aAAa,EAClB,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAC1D,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,aAAa,GACrB,IAAI,CA8CN;AAED,wBAAgB,aAAa,CAC3B,GAAG,EAAE,aAAa,EAClB,IAAI,EAAE,gBAAgB,EACtB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,aAAa,GACrB,IAAI,CAyCN"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type SKRSContext2D } from '@napi-rs/canvas';
|
|
2
|
+
export declare function measureText(text: string, font: string): number;
|
|
3
|
+
export interface WrapResult {
|
|
4
|
+
lines: string[];
|
|
5
|
+
fontPx: number;
|
|
6
|
+
widest: number;
|
|
7
|
+
shrunk: boolean;
|
|
8
|
+
truncated: boolean;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Greedy word-wrap with overflow as a first-class fact: try at fontPx; if the text needs
|
|
12
|
+
* more than maxLines, shrink once to minFontPx; if it still overflows, truncate the last
|
|
13
|
+
* line with an ellipsis AND report it — never silently clip.
|
|
14
|
+
*/
|
|
15
|
+
export declare function wrapText(text: string, fontFor: (px: number) => string, maxWidth: number, fontPx: number, minFontPx: number, maxLines: number): WrapResult;
|
|
16
|
+
/** Rounded-rect path helper shared by overlay drawing. */
|
|
17
|
+
export declare function roundRect(c: SKRSContext2D, x: number, y: number, w: number, h: number, r: number): void;
|
|
18
|
+
//# sourceMappingURL=text.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../../src/compose/overlays/text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AASnE,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAI9D;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CACtB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,EAC/B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACf,UAAU,CAiBZ;AAuBD,0DAA0D;AAC1D,wBAAgB,SAAS,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CASvG"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Streaming H.264 encoder: raw RGBA frames in on stdin, MP4 out. Backpressure is
|
|
3
|
+
* respected — write() resolves only when the pipe can take more.
|
|
4
|
+
*/
|
|
5
|
+
export declare class Encoder {
|
|
6
|
+
private child;
|
|
7
|
+
private stderrTail;
|
|
8
|
+
private exit;
|
|
9
|
+
constructor(outPath: string, width: number, height: number, fps: number);
|
|
10
|
+
write(rgba: Buffer): Promise<void>;
|
|
11
|
+
finish(): Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=encoder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encoder.d.ts","sourceRoot":"","sources":["../../../src/compose/render/encoder.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,qBAAa,OAAO;IAClB,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,IAAI,CAAkB;IAE9B,YAAY,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAoCtE;IAEK,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMvC;IAEK,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAM5B;CACF"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type Canvas } from '@napi-rs/canvas';
|
|
2
|
+
import type { BundleData } from '../../bundle/types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Timestamp-indexed source-frame store with an LRU of decoded frames and one-ahead
|
|
5
|
+
* prefetch. Access during a render is monotonic in time, so a small cache wins.
|
|
6
|
+
*/
|
|
7
|
+
export declare class FrameStore {
|
|
8
|
+
private readonly bundle;
|
|
9
|
+
private cache;
|
|
10
|
+
constructor(bundle: BundleData);
|
|
11
|
+
/** Decoded canvas for the frame that should be on screen at capture-relative tMs. */
|
|
12
|
+
frameForTime(tMs: number): Promise<Canvas>;
|
|
13
|
+
/**
|
|
14
|
+
* The frame at tMs plus its successor with a blend factor: the capture is ~20fps but output
|
|
15
|
+
* is 30fps, so nearest-frame playback holds each source frame in a 2-1-2-1 judder pattern.
|
|
16
|
+
* Blending adjacent frames during real motion smooths it without optical flow.
|
|
17
|
+
*/
|
|
18
|
+
framePairForTime(tMs: number): Promise<{
|
|
19
|
+
a: Canvas;
|
|
20
|
+
b: Canvas | null;
|
|
21
|
+
mix: number;
|
|
22
|
+
gapMs: number;
|
|
23
|
+
}>;
|
|
24
|
+
private get;
|
|
25
|
+
private decode;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=frameStore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frameStore.d.ts","sourceRoot":"","sources":["../../../src/compose/render/frameStore.ts"],"names":[],"mappings":"AACA,OAAO,EAA2B,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAKxD;;;GAGG;AACH,qBAAa,UAAU;IAGT,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFnC,OAAO,CAAC,KAAK,CAAsC;IAEnD,YAA6B,MAAM,EAAE,UAAU,EAAI;IAEnD,qFAAqF;IAC/E,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAM/C;IAED;;;;OAIG;IACG,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAUxG;IAED,OAAO,CAAC,GAAG;YAiBG,MAAM;CAUrB"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { BundleData } from '../../bundle/types.js';
|
|
2
|
+
import type { ComposeManifest } from '../types.js';
|
|
3
|
+
/** Render the full output from a bundle + compose manifest. Pure playback of the plan. */
|
|
4
|
+
export declare function renderVideo(bundle: BundleData, manifest: ComposeManifest, outPath: string): Promise<void>;
|
|
5
|
+
//# sourceMappingURL=renderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../../src/compose/render/renderer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAkC,MAAM,aAAa,CAAC;AAmBnF,0FAA0F;AAC1F,wBAAsB,WAAW,CAC/B,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAoJf"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { EventLog, ActionEvent, ActionKind } from '../../capture/events.js';
|
|
2
|
+
import type { TimeSegment, StepMapEntry } from '../types.js';
|
|
3
|
+
export interface PacingConfig {
|
|
4
|
+
factor: number;
|
|
5
|
+
titleCardMs: number;
|
|
6
|
+
introMaxMs: number;
|
|
7
|
+
outroMs: number;
|
|
8
|
+
idleGapMaxMs: number;
|
|
9
|
+
idleGapOutMs: number;
|
|
10
|
+
minStepMs: number;
|
|
11
|
+
maxTypeOutMs: number;
|
|
12
|
+
holds: Record<ActionKind, number>;
|
|
13
|
+
}
|
|
14
|
+
export declare function pacingConfig(mode: 'relaxed' | 'normal' | 'brisk', kind?: {
|
|
15
|
+
outroMs: number;
|
|
16
|
+
}): PacingConfig;
|
|
17
|
+
export interface TimelinePlan {
|
|
18
|
+
segments: TimeSegment[];
|
|
19
|
+
steps: StepMapEntry[];
|
|
20
|
+
durationMs: number;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Build the output timeline: title card, per-step source spans with compose-time
|
|
24
|
+
* pacing (idle-gap trimming, post-action freezes, min-step extension), and an
|
|
25
|
+
* outro hold on the final state.
|
|
26
|
+
*/
|
|
27
|
+
export declare function buildTimeline(log: EventLog, cfg: PacingConfig, audioMs?: Map<string, number>): TimelinePlan;
|
|
28
|
+
/** Map an output time to a source time (null on card segments). */
|
|
29
|
+
export declare function sampleSource(segments: TimeSegment[], tOut: number): {
|
|
30
|
+
srcAt: number | null;
|
|
31
|
+
segment: TimeSegment;
|
|
32
|
+
};
|
|
33
|
+
export declare function segmentAt(segments: TimeSegment[], tOut: number): TimeSegment;
|
|
34
|
+
/** Events keyed by stepRef, for callers pairing steps back to their events. */
|
|
35
|
+
export declare function eventByStepRef(log: EventLog): Map<string, ActionEvent>;
|
|
36
|
+
//# sourceMappingURL=pacing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pacing.d.ts","sourceRoot":"","sources":["../../../src/compose/timeline/pacing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAEjF,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG7D,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,SAAS,GAAG,QAAQ,GAAG,OAAO,EAAE,IAAI,CAAC,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,YAAY,CAwB3G;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,YAAY,CA6E3G;AAED,mEAAmE;AACnE,wBAAgB,YAAY,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,WAAW,CAAA;CAAE,CAYlH;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW,CAW5E;AAED,+EAA+E;AAC/E,wBAAgB,cAAc,CAAC,GAAG,EAAE,QAAQ,GAAG,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAItE"}
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
import type { Rect, Point, CameraState } from '../shared/geometry.js';
|
|
2
|
+
import type { BezierParams } from '../shared/easing.js';
|
|
3
|
+
import type { ResolvedTheme } from '../theme/index.js';
|
|
4
|
+
import type { ActionKind } from '../capture/events.js';
|
|
5
|
+
export interface OutputProfile {
|
|
6
|
+
width: number;
|
|
7
|
+
height: number;
|
|
8
|
+
fps: number;
|
|
9
|
+
/** Output-px margins content must respect; bottom includes the caption band. */
|
|
10
|
+
safeArea: {
|
|
11
|
+
top: number;
|
|
12
|
+
right: number;
|
|
13
|
+
bottom: number;
|
|
14
|
+
left: number;
|
|
15
|
+
};
|
|
16
|
+
zoomQuantums: number[];
|
|
17
|
+
/** Minimum rendered size (output px) of a focus rect's smaller dimension. */
|
|
18
|
+
minFocusPx: number;
|
|
19
|
+
captionMaxWidth: number;
|
|
20
|
+
/**
|
|
21
|
+
* The stage: footage renders inside `content` (a matte with rounded corners, shadow, and an
|
|
22
|
+
* optional browser-chrome bar above it) instead of edge-to-edge. ALL camera math — planner,
|
|
23
|
+
* renderer, cursor projection, verification — runs in content space via `stageContent()`,
|
|
24
|
+
* so plan and pixels can never disagree about where footage lives. Absent = full-frame.
|
|
25
|
+
*/
|
|
26
|
+
stage?: {
|
|
27
|
+
/** Output-px rect the footage is drawn into. */
|
|
28
|
+
content: Rect;
|
|
29
|
+
/** Height of the browser-chrome bar drawn directly above `content` (0 = none). */
|
|
30
|
+
chromeH: number;
|
|
31
|
+
radius: number;
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
/** The rect footage renders into: the stage's content when present, else the full frame. */
|
|
35
|
+
export declare function stageContent(profile: OutputProfile): Rect;
|
|
36
|
+
/** Compute a stage for the profile: uniform matte margins + a chrome bar, preserving the
|
|
37
|
+
* content's aspect (= the capture viewport's), so camera math scales cleanly. */
|
|
38
|
+
export declare function withStage(profile: OutputProfile, chrome: boolean): OutputProfile;
|
|
39
|
+
export declare const PROFILE_16x9: OutputProfile;
|
|
40
|
+
/** Portrait: reserve more top/bottom for platform UI chrome; captions span most of the width. */
|
|
41
|
+
export declare const PROFILE_9x16: OutputProfile;
|
|
42
|
+
export declare const PROFILE_1x1: OutputProfile;
|
|
43
|
+
/** Resolve the output profile for an aspect, overlaying the spec's resolution + fps. */
|
|
44
|
+
export declare function profileForAspect(aspect: '16:9' | '9:16' | '1:1', resolution: {
|
|
45
|
+
w: number;
|
|
46
|
+
h: number;
|
|
47
|
+
}, fps: number): OutputProfile;
|
|
48
|
+
export type TimeSegment = {
|
|
49
|
+
kind: 'source';
|
|
50
|
+
outStart: number;
|
|
51
|
+
outEnd: number;
|
|
52
|
+
srcStart: number;
|
|
53
|
+
srcEnd: number;
|
|
54
|
+
} | {
|
|
55
|
+
kind: 'freeze';
|
|
56
|
+
outStart: number;
|
|
57
|
+
outEnd: number;
|
|
58
|
+
srcAt: number;
|
|
59
|
+
} | {
|
|
60
|
+
kind: 'card';
|
|
61
|
+
outStart: number;
|
|
62
|
+
outEnd: number;
|
|
63
|
+
cardId: string;
|
|
64
|
+
};
|
|
65
|
+
export interface CameraKeyframe {
|
|
66
|
+
tOut: number;
|
|
67
|
+
state: CameraState;
|
|
68
|
+
/** Ease applied travelling from the previous keyframe to this one. */
|
|
69
|
+
ease: BezierParams;
|
|
70
|
+
}
|
|
71
|
+
export interface CursorSegment {
|
|
72
|
+
tStart: number;
|
|
73
|
+
tEnd: number;
|
|
74
|
+
/** Arc-length-resampled polyline in viewport space. */
|
|
75
|
+
path: Point[];
|
|
76
|
+
clickAtEnd: boolean;
|
|
77
|
+
}
|
|
78
|
+
export interface ClickRipple {
|
|
79
|
+
tOut: number;
|
|
80
|
+
/** Viewport space. */
|
|
81
|
+
x: number;
|
|
82
|
+
y: number;
|
|
83
|
+
}
|
|
84
|
+
export interface CaptionOverlay {
|
|
85
|
+
kind: 'caption';
|
|
86
|
+
stepRef: string;
|
|
87
|
+
ordinal: number;
|
|
88
|
+
totalSteps: number;
|
|
89
|
+
/** Whether to draw the numbered step badge (off for demo/release/social/factual styles). */
|
|
90
|
+
showBadge: boolean;
|
|
91
|
+
text: string;
|
|
92
|
+
lines: string[];
|
|
93
|
+
fontPx: number;
|
|
94
|
+
/** Output-space card rect as rendered. */
|
|
95
|
+
box: Rect;
|
|
96
|
+
tStart: number;
|
|
97
|
+
tEnd: number;
|
|
98
|
+
shrunk: boolean;
|
|
99
|
+
truncated: boolean;
|
|
100
|
+
}
|
|
101
|
+
export interface TitleCardOverlay {
|
|
102
|
+
kind: 'titleCard';
|
|
103
|
+
cardId: string;
|
|
104
|
+
title: string;
|
|
105
|
+
subtitle?: string;
|
|
106
|
+
tStart: number;
|
|
107
|
+
tEnd: number;
|
|
108
|
+
}
|
|
109
|
+
export interface DipTransition {
|
|
110
|
+
kind: 'dip';
|
|
111
|
+
tStart: number;
|
|
112
|
+
tEnd: number;
|
|
113
|
+
/** 'in' fades FROM the theme background into footage (post-title); 'out' fades footage
|
|
114
|
+
* INTO the background (pre-end-card). Default 'in'. */
|
|
115
|
+
direction?: 'in' | 'out';
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Act→react camera windows for a step that clicks one place and focuses another ("click here,
|
|
119
|
+
* LOOK there"): the camera frames the action target around the beat, then hands off to the
|
|
120
|
+
* focused payoff for the settled hold. Shared by the planner (to emit the handoff) and the
|
|
121
|
+
* verifier (to assert each rect during ITS window) so plan and checks agree by construction.
|
|
122
|
+
* Returns null when the step has no handoff (single rect, or too little hold to travel in).
|
|
123
|
+
*/
|
|
124
|
+
export declare function actReactWindows(step: StepMapEntry): {
|
|
125
|
+
act: {
|
|
126
|
+
rect: Rect;
|
|
127
|
+
from: number;
|
|
128
|
+
to: number;
|
|
129
|
+
};
|
|
130
|
+
react: {
|
|
131
|
+
rect: Rect;
|
|
132
|
+
from: number;
|
|
133
|
+
to: number;
|
|
134
|
+
};
|
|
135
|
+
} | null;
|
|
136
|
+
/** A persistent elapsed-time readout (bug-repro evidence). Rendered against the output clock. */
|
|
137
|
+
export interface ElapsedClockOverlay {
|
|
138
|
+
kind: 'elapsedClock';
|
|
139
|
+
tStart: number;
|
|
140
|
+
tEnd: number;
|
|
141
|
+
/** Output ms to subtract so the clock reads 0 at the first real action, not the title card. */
|
|
142
|
+
zeroAtMs: number;
|
|
143
|
+
}
|
|
144
|
+
/** A brief scene-title label at each new scene (demo/before-after narrative structure). */
|
|
145
|
+
export interface ChapterLabelOverlay {
|
|
146
|
+
kind: 'chapterLabel';
|
|
147
|
+
title: string;
|
|
148
|
+
ordinal: number;
|
|
149
|
+
tStart: number;
|
|
150
|
+
tEnd: number;
|
|
151
|
+
}
|
|
152
|
+
/** Closing card for a FAILED capture: the failure clip ends on what broke and why. */
|
|
153
|
+
export interface FailureCardOverlay {
|
|
154
|
+
kind: 'failureCard';
|
|
155
|
+
stepRef: string;
|
|
156
|
+
message: string;
|
|
157
|
+
tStart: number;
|
|
158
|
+
tEnd: number;
|
|
159
|
+
}
|
|
160
|
+
export type OverlayEntry = CaptionOverlay | TitleCardOverlay | DipTransition | ElapsedClockOverlay | ChapterLabelOverlay | FailureCardOverlay;
|
|
161
|
+
export interface StepMapEntry {
|
|
162
|
+
stepRef: string;
|
|
163
|
+
sceneId: string;
|
|
164
|
+
ordinal: number;
|
|
165
|
+
kind: ActionKind;
|
|
166
|
+
locator?: string;
|
|
167
|
+
/** True for masked type steps — their visible effect is intentionally suppressed. */
|
|
168
|
+
masked?: boolean;
|
|
169
|
+
/** Viewport-space target rect at action time (bboxPre), when the step had a target. */
|
|
170
|
+
targetRectVp?: Rect;
|
|
171
|
+
/** Camera hint from the spec: 'target' | 'wide' | a locator string. */
|
|
172
|
+
focus?: string;
|
|
173
|
+
/** Shot-boundary control from the spec: 'cut' | 'continue'. */
|
|
174
|
+
shot?: string;
|
|
175
|
+
/** Measured rect of a locator-valued focus hint at the settled moment — the payoff the
|
|
176
|
+
* camera should frame instead of the action target ("click here, look there"). */
|
|
177
|
+
focusRectVp?: Rect;
|
|
178
|
+
outStart: number;
|
|
179
|
+
/** Output-clock moment the action lands. */
|
|
180
|
+
outBeat: number;
|
|
181
|
+
outEnd: number;
|
|
182
|
+
srcAction: number;
|
|
183
|
+
srcSettled: number;
|
|
184
|
+
}
|
|
185
|
+
export interface ComposeDiagnostics {
|
|
186
|
+
overflows: {
|
|
187
|
+
stepRef: string;
|
|
188
|
+
text: string;
|
|
189
|
+
action: 'shrunk' | 'truncated';
|
|
190
|
+
}[];
|
|
191
|
+
cameraFallbacks: string[];
|
|
192
|
+
clockWarnings: string[];
|
|
193
|
+
}
|
|
194
|
+
export interface ComposeManifest {
|
|
195
|
+
schema: 'playhead/compose@1';
|
|
196
|
+
profile: OutputProfile;
|
|
197
|
+
viewport: {
|
|
198
|
+
w: number;
|
|
199
|
+
h: number;
|
|
200
|
+
};
|
|
201
|
+
durationMs: number;
|
|
202
|
+
totalFrames: number;
|
|
203
|
+
segments: TimeSegment[];
|
|
204
|
+
camera: CameraKeyframe[];
|
|
205
|
+
cursor: CursorSegment[];
|
|
206
|
+
ripples: ClickRipple[];
|
|
207
|
+
overlays: OverlayEntry[];
|
|
208
|
+
/** Cross-dissolve windows at scene boundaries: old footage (held at srcFrom) fades into new. */
|
|
209
|
+
transitions?: {
|
|
210
|
+
tStart: number;
|
|
211
|
+
tEnd: number;
|
|
212
|
+
srcFrom: number;
|
|
213
|
+
}[];
|
|
214
|
+
steps: StepMapEntry[];
|
|
215
|
+
theme: ResolvedTheme;
|
|
216
|
+
diagnostics: ComposeDiagnostics;
|
|
217
|
+
bundleHashes: {
|
|
218
|
+
events: string;
|
|
219
|
+
framesIndex: string;
|
|
220
|
+
};
|
|
221
|
+
videoSha256?: string;
|
|
222
|
+
/** Present when voice narration was muxed in. `clips` records where each spoken line landed
|
|
223
|
+
* on the output clock, so verification can reason about voice-covered windows. */
|
|
224
|
+
audio?: {
|
|
225
|
+
narrated: boolean;
|
|
226
|
+
provider: string;
|
|
227
|
+
voice: string;
|
|
228
|
+
lines: number;
|
|
229
|
+
clips?: {
|
|
230
|
+
stepRef: string;
|
|
231
|
+
tStart: number;
|
|
232
|
+
durMs: number;
|
|
233
|
+
}[];
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/compose/types.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Playhead — product video as a build artifact.
|
|
3
|
+
* spec + live product → capture bundle → composed, verified video.
|
|
4
|
+
*/
|
|
5
|
+
export { parseSpec, loadSpec, SpecError } from './spec/parse.js';
|
|
6
|
+
export { specSchema, flattenSteps } from './spec/schema.js';
|
|
7
|
+
export type { Spec, Scene, Step, AddressedStep, OutputSettings } from './spec/schema.js';
|
|
8
|
+
export { parseLocator, locatorDisplayName } from './spec/locators.js';
|
|
9
|
+
export type { ParsedLocator } from './spec/locators.js';
|
|
10
|
+
export { capture } from './capture/executor.js';
|
|
11
|
+
export type { CaptureOptions } from './capture/executor.js';
|
|
12
|
+
export type { Driver } from './capture/driver-api.js';
|
|
13
|
+
export type { EventLog, ActionEvent, CaptureEvent, TargetInfo } from './capture/events.js';
|
|
14
|
+
export { openBundle } from './bundle/reader.js';
|
|
15
|
+
export type { BundleData, BundleManifest } from './bundle/types.js';
|
|
16
|
+
export { compose, plan, renderFromManifest } from './compose/index.js';
|
|
17
|
+
export type { ComposeResult } from './compose/index.js';
|
|
18
|
+
export type { ComposeManifest, OutputProfile, TimeSegment, CameraKeyframe } from './compose/types.js';
|
|
19
|
+
export { PROFILE_16x9 } from './compose/types.js';
|
|
20
|
+
export { writeCaption } from './compose/captions.js';
|
|
21
|
+
export { verify } from './verify/runner.js';
|
|
22
|
+
export type { Verdict, CheckResult } from './verify/types.js';
|
|
23
|
+
export { resolveTheme, registerFonts } from './theme/index.js';
|
|
24
|
+
export type { ResolvedTheme } from './theme/index.js';
|
|
25
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC5D,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACzF,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACtE,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,YAAY,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACtD,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAE3F,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEpE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACvE,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACtG,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAE9D,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC/D,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC"}
|