@vosjs/studio-core 0.4.0 → 0.5.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/README.md +69 -52
- package/dist/index.d.ts +258 -6
- package/dist/index.js +474 -38
- package/dist/index.js.map +1 -1
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -1,69 +1,86 @@
|
|
|
1
|
-
# @
|
|
1
|
+
# @vosjs/studio-core
|
|
2
2
|
|
|
3
|
-
The
|
|
4
|
-
screen recording into an editable, re-renderable video: the `ProjectDoc` schema,
|
|
5
|
-
the element-aware auto-zoom planner, and the lowering that compiles a doc down to
|
|
6
|
-
a vos composition.
|
|
3
|
+
> The document model of a screen recording: the `ProjectDoc` schema, the planners that read a cursor track (auto-zoom, speed, tilt), the digest that lets an agent see a recording, and the lowering from a document to a vos program.
|
|
7
4
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
5
|
+
[](https://www.npmjs.com/package/@vosjs/studio-core)
|
|
6
|
+
[](https://github.com/vosjs/vos/blob/main/LICENSE)
|
|
7
|
+
|
|
8
|
+
Part of [vos](https://github.com/vosjs/vos), the open programmatic video engine behind [vos.so](https://vos.so). This package holds the opinions that turn raw footage plus a cursor track into an editable, re-renderable video. It is pure logic: no DOM, no React, no engine import at run time (`@vosjs/core` is a peer for types). The generic editing mechanics (patch store, edit classifier, bridge client, view-model math) live in [`@vosjs/editor`](../editor); the time math in [`@vosjs/timeline`](../timeline). The `vos` CLI and the vos.so studio both build on this package, so a document cut on the command line opens in the studio with every span intact.
|
|
9
|
+
|
|
10
|
+
## Install
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
pnpm add @vosjs/studio-core
|
|
14
|
+
```
|
|
13
15
|
|
|
14
16
|
## The pipeline
|
|
15
17
|
|
|
16
18
|
```
|
|
17
|
-
RecordingArtifact ──projectFromArtifact──▶ ProjectDoc ──
|
|
18
|
-
|
|
19
|
-
|
|
19
|
+
RecordingArtifact ──projectFromArtifact──▶ ProjectDoc ──lowerStudioDoc──▶ { config, data, stack, duration }
|
|
20
|
+
(footage + cursor track) normalize capture space, (doc.json: the constant program + ctx.data,
|
|
21
|
+
plan zoom / speed / tilt editable surface) so every edit is live
|
|
20
22
|
```
|
|
21
23
|
|
|
22
|
-
- **`projectFromArtifact(artifact)`**
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
24
|
+
- **`projectFromArtifact(artifact, videoUrl, { frame? })`** builds the initial `ProjectDoc` from a recording: normalize the capture space (`normalizeCaptureSpace`; a viewport crop for window takes via `deriveViewportCrop`, fail-closed below `CAPTURE_COVERAGE_MIN`), then seed the automatic spans. Returns `{ doc, videoUrl }`.
|
|
25
|
+
- **The planners** read the cursor track, never the pixels. `planAutoZoom(track, { width, height, style?, params? })` emits `source: 'auto'` zoom spans from click clusters (`z…`), typing sessions (`k…`) and dwells (`d…`); `planAutoSpeed` proposes speed-ups over idle gaps and scroll runs; `planAutoTilt` leans the card toward each zoom's focus. Every planner honors the wand contract: `source: 'manual'` spans are never touched, and a deleted proposal stays deleted (`rejectSpan` writes `doc.rejected`, `isRejected` filters the next plan).
|
|
26
|
+
- **`lowerStudioDoc(doc)`** lowers a document to a constant vos program plus a `ctx.data` payload. Zoom, tilt and cam-motion spans expand into output-time keyframe tracks; trims, speed, cursor follow, click effects and audio envelopes all bake into data. Because the program string is constant, edits replay live through `SET_DATA` and `SET_DURATION`; nothing recompiles for a retime or a zoom tweak. `lowerToComposition` is the recording-only path underneath it.
|
|
27
|
+
|
|
28
|
+
## Two documents, one editor
|
|
29
|
+
|
|
30
|
+
`StudioDoc = ProjectDoc | ProgramAnchorDoc`, discriminated on `source`. A `ProjectDoc` is a recording: footage, `segments` (the kept source spans), `zoom`, `speed`, `tilt`, `camMotion`, the frame and cursor styles, plus the shared layers. A `ProgramAnchorDoc` is a vos program that gained the same shared layers (text, image and video overlays, 3D objects, audio clips, speed spans, a tween-retime overlay) without those being written into its config. `anchorKindOf`, `isRecordingDoc` and `isProgramDoc` read the discriminator; `lowerProgramDoc` lowers the program kind. Hosted documents carry `docSchemaVersion` (`DOC_SCHEMA_VERSION`, currently 2) and are upgraded on read with `migrateHostedDoc`.
|
|
31
|
+
|
|
32
|
+
The shared layers lower as one engine `stack` entry, `STUDIO_ENTRY_ID` (`'vosso.studio'`), with its own data (`studioLayerData`), so either document kind hosts them and the engine's `SET_DATA { target }` updates them alone. `studioAudioPlan` turns the entry's audio clips and duck curve into the plan `@vosjs/core/audio` mixes.
|
|
33
|
+
|
|
34
|
+
## Time and space conventions
|
|
35
|
+
|
|
36
|
+
- **Seconds everywhere.** Zoom, speed, tilt and cam-motion spans and the cursor samples are anchored in source time, so they follow footage through trims. Overlays, audio clips and click effects are anchored in output time, so a title keeps its perceived length through a speed change. `ratedSegments`, `effectiveSegments`, `docOutputDuration` and `outputRangeToSource` are the remaps.
|
|
37
|
+
- **Normalized coordinates.** A zoom's `cx`/`cy` and an overlay's `transform.x`/`y` are fractions of the frame in `[0, 1]`, never pixels, so a document survives an aspect-ratio switch. `focusBounds` and `clampFocus` keep a focus inside the card at a given `level`.
|
|
38
|
+
- **Camera styles.** `ZOOM_STYLES` names eight camera personalities (`glide`, the default, then `focus`, `cinema`, `snappy`, `cut`, `keynote`, `drift`, `none`); a style parametrizes both the planner and the camera motion, and `doc.zoomParams` layers per-document overrides.
|
|
39
|
+
- **The stage.** `CARD_FOV`, `CARD_Z`, `OVERLAY_Z`, `BACKGROUND_Z` and `planeSizeAtDepth` define the frustum-filling planes the program draws (background, the tiltable card, the overlay); `computeCardLayout` and `docCardLayout` are the host-side mirror of the program's card math, pinned to it by tests.
|
|
40
|
+
- **Backdrops.** `withBackdrop(frame, backdrop)` and `backdropMedia` put a looping video or a still behind the card, output-anchored modulo its duration. The package carries the mechanism and `BASE_FRAME_STYLE`; which loop a host opens on is the host's choice.
|
|
41
|
+
|
|
42
|
+
## Seeing a recording: the digest
|
|
43
|
+
|
|
44
|
+
`momentsFromDoc`, `sceneChanges` and `buildDigest` derive the moments of a recording from its cursor track (click clusters, typing sessions, scroll runs, dwells, idle gaps, head, tail, frame-diff scene changes), each with source and output extents, a normalized focus rectangle a zoom span can copy, and the ids of the planner's proposals over it. `zoomCoversRect` and `zoomWindow` are the framing lint that closes the loop. The CLI's `vos digest` writes it as `digest.json` beside footage frames and crops; `STYLE_FIELDS`, `copyStyle` and `pickStyle` carry a signed-off document's look onto the next take.
|
|
45
|
+
|
|
46
|
+
## Destinations
|
|
47
|
+
|
|
48
|
+
`DESTINATIONS` is the table of launch destinations (store listings, Product Hunt, social, OG cards, README loops) with exact pixel sizes, byte and duration ceilings, generated from `channel-specs.json` in `@vosjs/cli` and hash-gated by a test. `destinationById`, `destinationsForChannel`, `exportSizeFor(ratio, resolution)` and `resolveExportSize` size an export; `ExportResolution` is `720p | 1080p | 2k | 4k`.
|
|
49
|
+
|
|
50
|
+
## Exports by area
|
|
51
|
+
|
|
52
|
+
| Area | Exports |
|
|
53
|
+
| -------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
54
|
+
| Ingest | `projectFromArtifact`, `normalizeCaptureSpace`, `deriveViewportCrop`, `docToCropSpace`, `docToFullSpace`, `CAPTURE_COVERAGE_MIN`, `WINDOW_FOCUS_MIN` |
|
|
55
|
+
| Document | `StudioDoc`, `ProjectDoc`, `ProgramAnchorDoc`, `anchorKindOf`, `isRecordingDoc`, `isProgramDoc`, `DOC_SCHEMA_VERSION`, `migrateHostedDoc`, `DEFAULT_FRAME_STYLE`, `BASE_FRAME_STYLE`, the constants (`ZOOM_LEVELS`, `TILT_DEG_MAX`, …) |
|
|
56
|
+
| Planners | `planAutoZoom`, `planAutoSpeed`, `planAutoTilt`, `smoothCursor`, `idleGaps`, `scrollRuns`, `rejectSpan`, `isRejected`, `withoutRejected` |
|
|
57
|
+
| Camera styles | `ZOOM_STYLES`, `ZOOM_STYLE_OPTIONS`, `DEFAULT_ZOOM_STYLE`, `resolveZoomStyle` |
|
|
58
|
+
| Lowering | `lowerStudioDoc`, `lowerProgramDoc`, `lowerToComposition`, `zoomTrackFromDoc`, `tiltTrackFromDoc`, `camTrackFromDoc`, `motionTrack`, `followFocusEvents`, `extractClicks`, `cursorIdleFade`, `ratedSegments`, `STUDIO_ENTRY_ID`, `studioEntry`, `studioLayerData` |
|
|
59
|
+
| Layout | `computeCardLayout`, `docCardLayout`, `focusBounds`, `clampFocus`, `camBubbleRectAt`, `overlayRect`, `overlayHit`, `CARD_FOV`, `CARD_Z`, `planeSizeAtDepth`, `recommendedExportResolution` |
|
|
60
|
+
| Text | `TEXT_PRESETS`, `OVERLAY_FONT_FACES`, `resolveOverlayStyle`, `resolveOverlayBox`, `resolveText3dAsset` |
|
|
61
|
+
| Audio | `studioAudioPlan`, `clipEnvelope`, `duckCurve`, `computePeaks`, `computeMicRms`, `voiceKey`, `musicBedClip`, `refillAudioBeds` |
|
|
62
|
+
| Backdrops | `withBackdrop`, `backdropMedia` |
|
|
63
|
+
| Digest | `momentsFromDoc`, `planForDigest`, `buildDigest`, `sceneChanges`, `zoomCoversRect`, `zoomWindow`, `cropBox`, `frameGeometry`, `STYLE_FIELDS`, `copyStyle`, `pickStyle`, `DIGEST_VERSION` |
|
|
64
|
+
| Destinations | `DESTINATIONS`, `destinationById`, `destinationsForChannel`, `exportSizeFor`, `resolveExportSize`, `ASPECT_RATIOS` |
|
|
65
|
+
| Timeline lanes | `videoLane`, `micLane`, `camLane`, `zoomLane`, `tiltLane`, `camMoveLane`, `speedLane`, `overlaysLane`, `objectsLane`, `audioLane`; range actions `outputRangeToSource`, `removeSourceRange`, `setSpeedInRange`, `zoomSpanForRange` |
|
|
66
|
+
|
|
67
|
+
The full document shape is in [`src/types.ts`](src/types.ts); the JSON Schema that ships to users is [`doc.schema.json`](../cli/schema/doc.schema.json) in `@vosjs/cli`.
|
|
49
68
|
|
|
50
69
|
## Design rules
|
|
51
70
|
|
|
52
|
-
- **Never bake
|
|
53
|
-
|
|
54
|
-
- **
|
|
55
|
-
be a pure function of `t`, so cursor follow, click effects, and zoom are all
|
|
56
|
-
computed from the doc up front.
|
|
57
|
-
- **Source-anchored spans.** Zoom and speed spans are anchored in source time and
|
|
58
|
-
follow footage through trims; the lowering remaps them to output time.
|
|
71
|
+
- **Never bake a document value into the program string.** The program is a structural hash; all editable state travels in `ctx.data`. Baking a value breaks live editing.
|
|
72
|
+
- **Lowering is deterministic.** No stateful springs, no wall clock: `seek(t)` is a pure function of `t`, so cursor follow, click effects and zoom are computed from the document up front.
|
|
73
|
+
- **Perception reads the recording, never the composition.** The planners and the digest read the cursor track and the footage; they never inspect a rendered frame.
|
|
59
74
|
|
|
60
75
|
## Development
|
|
61
76
|
|
|
62
77
|
```bash
|
|
63
|
-
pnpm --filter @
|
|
64
|
-
pnpm --filter @
|
|
78
|
+
pnpm --filter @vosjs/studio-core test
|
|
79
|
+
pnpm --filter @vosjs/studio-core typecheck
|
|
65
80
|
```
|
|
66
81
|
|
|
67
|
-
The
|
|
68
|
-
|
|
69
|
-
|
|
82
|
+
The test suite pins the invariants that are easy to break: the capture-space fail-closed matrix, zoom keyframe expansion, click extraction, layout-to-program parity, byte-identical lowering when a feature is absent, and the destinations hash. Extend it when touching the lowering.
|
|
83
|
+
|
|
84
|
+
## License
|
|
85
|
+
|
|
86
|
+
[MIT](https://github.com/vosjs/vos/blob/main/LICENSE) © vosso
|
package/dist/index.d.ts
CHANGED
|
@@ -180,6 +180,15 @@ declare function isPlayback(activity: readonly number[] | null | undefined, a: n
|
|
|
180
180
|
* these types are intentionally generic so the core stays extraction-ready.
|
|
181
181
|
*/
|
|
182
182
|
|
|
183
|
+
/**
|
|
184
|
+
* A kept span with an optional HOLD: after its last frame, a freeze for
|
|
185
|
+
* `hold` output seconds (the beat before a cut, the ground for the end
|
|
186
|
+
* card). Lowered as a rated segment whose tiny source span plays for the
|
|
187
|
+
* hold, so every consumer of the rated list inherits it.
|
|
188
|
+
*/
|
|
189
|
+
type DocSegment = Segment & {
|
|
190
|
+
hold?: number;
|
|
191
|
+
};
|
|
183
192
|
/** A single input event captured in the page, relative to the recording's t0. */
|
|
184
193
|
interface CursorEvent {
|
|
185
194
|
/** ms since t0 (recording start). */
|
|
@@ -810,8 +819,40 @@ interface FrameStyle {
|
|
|
810
819
|
backgroundMedia?: BackgroundMedia | null;
|
|
811
820
|
padding: number;
|
|
812
821
|
radius: number;
|
|
813
|
-
/**
|
|
822
|
+
/**
|
|
823
|
+
* Ambient shadow strength 0..1: the wide, soft layer under the card
|
|
824
|
+
* (blur 60, offset 24 design px). The look presets set it with
|
|
825
|
+
* `shadowContact`; every existing doc keeps its single layer.
|
|
826
|
+
*/
|
|
814
827
|
shadow: number;
|
|
828
|
+
/**
|
|
829
|
+
* Contact shadow strength 0..1: a second, tight layer (blur 10, offset 3
|
|
830
|
+
* design px) drawn over the ambient one. It is what makes a light card sit
|
|
831
|
+
* on a light ground, where a wide soft shadow alone reads as haze. Absent
|
|
832
|
+
* = 0 (no second layer; byte-identical to before the field existed).
|
|
833
|
+
*/
|
|
834
|
+
shadowContact?: number;
|
|
835
|
+
/**
|
|
836
|
+
* Shadow colour as a `#rrggbb` hex; the strengths are its alpha. Absent =
|
|
837
|
+
* black. A dark look lifts it toward its accent so the card glows instead
|
|
838
|
+
* of sinking.
|
|
839
|
+
*/
|
|
840
|
+
shadowColor?: string;
|
|
841
|
+
/**
|
|
842
|
+
* Per-side card placement as FRACTIONS of the frame (left/right of its
|
|
843
|
+
* width, top/bottom of its height), each overriding `padding` on its side
|
|
844
|
+
* when present. A negative side BLEEDS the card past the frame edge (the
|
|
845
|
+
* feature-clip grammar: headroom above, the window running off the
|
|
846
|
+
* bottom). Absent sides keep `padding`, so every existing doc is untouched.
|
|
847
|
+
* Under contain the card centres inside the inset area; under cover the
|
|
848
|
+
* inset area IS the card.
|
|
849
|
+
*/
|
|
850
|
+
inset?: {
|
|
851
|
+
top?: number;
|
|
852
|
+
right?: number;
|
|
853
|
+
bottom?: number;
|
|
854
|
+
left?: number;
|
|
855
|
+
};
|
|
815
856
|
/** stroke around the card, 0..1 alpha (0 = off). The switch AND the opacity. */
|
|
816
857
|
border: number;
|
|
817
858
|
/**
|
|
@@ -850,6 +891,43 @@ interface FrameStyle {
|
|
|
850
891
|
* as the zoom camera moves (depth cue). 0/absent = static.
|
|
851
892
|
*/
|
|
852
893
|
parallax?: number;
|
|
894
|
+
/**
|
|
895
|
+
* How the card ENTERS at t = 0 (the feature-clip grammar: no clip opens
|
|
896
|
+
* on a static, centred, flat window). `tilt-in` swings in from a
|
|
897
|
+
* perspective pose while the card settles up and in; `pull-out` opens
|
|
898
|
+
* zoomed in and pulls out; `rise` settles up and in flat. Lowered into
|
|
899
|
+
* the tilt or zoom track's head and a card-pose track, so the card's only
|
|
900
|
+
* rotation is still the tilt track. Absent = none, byte-identical.
|
|
901
|
+
*/
|
|
902
|
+
entrance?: FrameEntrance;
|
|
903
|
+
/**
|
|
904
|
+
* Under `fit:'cover'`, follow the zoom track's focus with the crop
|
|
905
|
+
* (`'camera'`), so a 9:16 cut of a 16:9 take keeps the affordance in
|
|
906
|
+
* frame instead of the centre. Absent = `focus` (or the centre).
|
|
907
|
+
*/
|
|
908
|
+
focusFollow?: 'camera';
|
|
909
|
+
}
|
|
910
|
+
interface FrameEntrance {
|
|
911
|
+
kind: 'tilt-in' | 'pull-out' | 'rise' | 'none';
|
|
912
|
+
/** Seconds to settle (default 1.2, clamped 0.2..3). */
|
|
913
|
+
seconds?: number;
|
|
914
|
+
}
|
|
915
|
+
/**
|
|
916
|
+
* The end card: the last frame holds for `seconds` while the card recedes
|
|
917
|
+
* and the words rise over it (the house title, caption and label presets,
|
|
918
|
+
* so they lower like any overlay). The clip's last frame is its poster.
|
|
919
|
+
*/
|
|
920
|
+
interface EndCard {
|
|
921
|
+
seconds?: number;
|
|
922
|
+
headline?: string;
|
|
923
|
+
sub?: string;
|
|
924
|
+
wordmark?: string;
|
|
925
|
+
/**
|
|
926
|
+
* The words' colour (any CSS colour). The house presets are white for
|
|
927
|
+
* footage; over a light plate the brand's ink is what reads. Absent =
|
|
928
|
+
* the presets' own.
|
|
929
|
+
*/
|
|
930
|
+
ink?: string;
|
|
853
931
|
}
|
|
854
932
|
/**
|
|
855
933
|
* Overlay clips (compositor v2: "elements-shaped data"). Screen-
|
|
@@ -1216,7 +1294,7 @@ interface ProjectDoc {
|
|
|
1216
1294
|
* their concatenation — trim/split/cut are all segment edits. Canonical form
|
|
1217
1295
|
* is one full-source segment; an empty list is tolerated and means "untrimmed".
|
|
1218
1296
|
*/
|
|
1219
|
-
segments:
|
|
1297
|
+
segments: DocSegment[];
|
|
1220
1298
|
/**
|
|
1221
1299
|
* Speed-change spans (SOURCE time, footage-anchored — see SpeedSpan).
|
|
1222
1300
|
* Optional for backward compatibility with persisted docs; absent = all 1×.
|
|
@@ -1287,6 +1365,12 @@ interface ProjectDoc {
|
|
|
1287
1365
|
* Card presentation (tilt / entrance) — compositor v2. Optional: absent
|
|
1288
1366
|
* lowers byte-identically to a pre-v2 doc and renders pixel-identically.
|
|
1289
1367
|
*/
|
|
1368
|
+
/**
|
|
1369
|
+
* The end card the clip closes on: a hold on the last frame, the card
|
|
1370
|
+
* receding, the words rising. Absent = the clip ends where the footage
|
|
1371
|
+
* ends.
|
|
1372
|
+
*/
|
|
1373
|
+
endCard?: EndCard;
|
|
1290
1374
|
/**
|
|
1291
1375
|
* Screen-space overlay clips (text; later image/video) — compositor v2.
|
|
1292
1376
|
* OUTPUT-anchored spans on the overlay layer. Optional: absent lowers
|
|
@@ -1792,7 +1876,15 @@ interface CardLayout {
|
|
|
1792
1876
|
declare function computeCardLayout(frame: FrameStyle, video: {
|
|
1793
1877
|
width: number;
|
|
1794
1878
|
height: number;
|
|
1795
|
-
}, W: number, H: number
|
|
1879
|
+
}, W: number, H: number,
|
|
1880
|
+
/**
|
|
1881
|
+
* The zoom track's current focus, for a frame whose cover crop FOLLOWS
|
|
1882
|
+
* the camera (`focusFollow: 'camera'`); absent = the frame's own focus.
|
|
1883
|
+
*/
|
|
1884
|
+
zoomFocus?: {
|
|
1885
|
+
cx: number;
|
|
1886
|
+
cy: number;
|
|
1887
|
+
}): CardLayout;
|
|
1796
1888
|
/**
|
|
1797
1889
|
* The doc's card layout at design size (H = 1080, W from the output aspect).
|
|
1798
1890
|
* All layout terms scale linearly with the canvas at a fixed aspect, so the
|
|
@@ -2316,7 +2408,7 @@ declare function studioLayerData(layers: {
|
|
|
2316
2408
|
objects?: ObjectClip[];
|
|
2317
2409
|
audio?: AudioClip[];
|
|
2318
2410
|
}, duration: number): Record<string, unknown>;
|
|
2319
|
-
declare function lowerToComposition(
|
|
2411
|
+
declare function lowerToComposition(input: ProjectDoc): LoweredComposition;
|
|
2320
2412
|
|
|
2321
2413
|
/**
|
|
2322
2414
|
* ONE lowering for the document family: the anchor's program
|
|
@@ -2402,10 +2494,31 @@ interface Destination {
|
|
|
2402
2494
|
accepts: string;
|
|
2403
2495
|
/** How footage meets an off-ratio frame (a still fills, a video letterboxes). */
|
|
2404
2496
|
fit: 'contain' | 'cover';
|
|
2497
|
+
/**
|
|
2498
|
+
* The destination's word policy: 'none' = the picture carries it alone (a
|
|
2499
|
+
* tile, a store screenshot), 'allowed', 'expected' = a card that should
|
|
2500
|
+
* say something. The picture checks read it.
|
|
2501
|
+
*/
|
|
2502
|
+
text: 'none' | 'allowed' | 'expected';
|
|
2503
|
+
/**
|
|
2504
|
+
* The rect, as fractions of the frame, every text box must sit inside:
|
|
2505
|
+
* the platform's own chrome or crop covers the rest.
|
|
2506
|
+
*/
|
|
2507
|
+
safe: {
|
|
2508
|
+
x: number;
|
|
2509
|
+
y: number;
|
|
2510
|
+
w: number;
|
|
2511
|
+
h: number;
|
|
2512
|
+
};
|
|
2513
|
+
/**
|
|
2514
|
+
* The poster template a card destination renders from by default (the
|
|
2515
|
+
* family that ships with the CLI); absent on screenshots and videos.
|
|
2516
|
+
*/
|
|
2517
|
+
template?: string;
|
|
2405
2518
|
notes: string;
|
|
2406
2519
|
}
|
|
2407
2520
|
declare const CHANNEL_SPECS_VERIFIED = "2026-08-04";
|
|
2408
|
-
declare const CHANNEL_SPECS_HASH = "
|
|
2521
|
+
declare const CHANNEL_SPECS_HASH = "e48926c22737b5dfaabf5cb33916a50a5eccd4b93498c2059a1468bd963a0a86";
|
|
2409
2522
|
declare const DESTINATIONS: Destination[];
|
|
2410
2523
|
declare function destinationById(id: string): Destination | undefined;
|
|
2411
2524
|
declare function destinationsForChannel(channel: string): Destination[];
|
|
@@ -2505,6 +2618,145 @@ declare const AUDIO_PLAN_STEP: number;
|
|
|
2505
2618
|
declare function envelopeAt(env: readonly EnvelopePoint[], t: number, def: number): number;
|
|
2506
2619
|
declare function studioAudioPlan(clips: readonly LoweredAudioClip[], duckEnv: readonly EnvelopePoint[], duration: number, step?: number): StudioAudioPlan;
|
|
2507
2620
|
|
|
2621
|
+
/**
|
|
2622
|
+
* A LOOK is how the card is presented: the ground it sits on, how much of
|
|
2623
|
+
* the frame it takes, the shadow that makes it an object, the stroke that
|
|
2624
|
+
* separates a light card from a light ground. Three house looks cover the
|
|
2625
|
+
* feature-clip and poster grammar the premium tools default to (a cream
|
|
2626
|
+
* plate with a soft wide shadow; a warm gradient; a near-black plate with a
|
|
2627
|
+
* light streak and a glow), and a maker's brand kit resolves to one of them
|
|
2628
|
+
* with its own colours. Pure: a look resolves to `FrameStyle` fields, so
|
|
2629
|
+
* every renderer and every still reads the same placement.
|
|
2630
|
+
*/
|
|
2631
|
+
|
|
2632
|
+
type LookKind = 'plate' | 'gradient' | 'dark';
|
|
2633
|
+
/**
|
|
2634
|
+
* Where the card goes. `hero` is the feature-clip grammar: the card at
|
|
2635
|
+
* ~84% of the width with headroom above and its bottom edge running off
|
|
2636
|
+
* the frame ("this continues"). `card` is the poster grammar: the card
|
|
2637
|
+
* centred on the ground with even room around it; on a frame too wide to
|
|
2638
|
+
* hold the whole card it falls back to `hero`.
|
|
2639
|
+
*/
|
|
2640
|
+
type LookPlacement = 'hero' | 'card';
|
|
2641
|
+
interface Look {
|
|
2642
|
+
kind: LookKind;
|
|
2643
|
+
/** CSS ground painted under the card (a colour or a gradient). */
|
|
2644
|
+
ground: string;
|
|
2645
|
+
/** The card's width as a fraction of the frame. */
|
|
2646
|
+
cardWidth: number;
|
|
2647
|
+
/** Room above the card in the hero placement, a fraction of the height. */
|
|
2648
|
+
headroom: number;
|
|
2649
|
+
/** Corner radius in design px. */
|
|
2650
|
+
radius: number;
|
|
2651
|
+
/** Ambient shadow 0..1. */
|
|
2652
|
+
shadow: number;
|
|
2653
|
+
/** Contact shadow 0..1. */
|
|
2654
|
+
shadowContact: number;
|
|
2655
|
+
/** `#rrggbb`; absent = black. */
|
|
2656
|
+
shadowColor?: string;
|
|
2657
|
+
/** Hairline stroke alpha 0..1 (0 = none). */
|
|
2658
|
+
border: number;
|
|
2659
|
+
borderColor?: string;
|
|
2660
|
+
}
|
|
2661
|
+
/** The frontmatter roles a brand kit carries that a look reads. */
|
|
2662
|
+
interface LookBrand {
|
|
2663
|
+
look?: string | null;
|
|
2664
|
+
ground?: string | null;
|
|
2665
|
+
bgA?: string | null;
|
|
2666
|
+
bgB?: string | null;
|
|
2667
|
+
bgC?: string | null;
|
|
2668
|
+
accent?: string | null;
|
|
2669
|
+
ink?: string | null;
|
|
2670
|
+
}
|
|
2671
|
+
/** The house coral, the ground every take opened on before looks existed. */
|
|
2672
|
+
declare const HOUSE_GRADIENT = "linear-gradient(135deg, #ff5148, #ffb03a)";
|
|
2673
|
+
/** The Chrome feature-clip plate, measured on three clips. */
|
|
2674
|
+
declare const PLATE_GROUND = "#f0f2f4";
|
|
2675
|
+
/** Near-black with a warm light streak from the top right. */
|
|
2676
|
+
declare const DARK_GROUND = "radial-gradient(ellipse at 82% 0%, #2a1d16, #07080b)";
|
|
2677
|
+
declare const LOOK_KINDS: LookKind[];
|
|
2678
|
+
declare function isLookKind(v: unknown): v is LookKind;
|
|
2679
|
+
/** One of the three house looks, copied. */
|
|
2680
|
+
declare function houseLook(kind: LookKind): Look;
|
|
2681
|
+
/**
|
|
2682
|
+
* Which house look a site's own ground asks for: a paper site is a plate, a
|
|
2683
|
+
* dark site is dark, anything else takes the gradient. What `vos brand`
|
|
2684
|
+
* writes as the `look` role, so an outside maker never gets the house coral
|
|
2685
|
+
* by accident.
|
|
2686
|
+
*/
|
|
2687
|
+
declare function lookKindForGround(bgA: string | null | undefined): LookKind;
|
|
2688
|
+
/**
|
|
2689
|
+
* Resolve a brand kit to a look: the `look` role picks the kind (else the
|
|
2690
|
+
* site's ground decides), `ground` overrides the ground outright, and the
|
|
2691
|
+
* kit's colours colour the house look (plate = bgB, gradient = accent →
|
|
2692
|
+
* bgC, dark = bgA with a lifted shadow). A kit with none of them is the
|
|
2693
|
+
* house look unchanged.
|
|
2694
|
+
*/
|
|
2695
|
+
declare function lookFromBrand(brand: LookBrand | null | undefined): Look;
|
|
2696
|
+
/**
|
|
2697
|
+
* The card's per-side inset for a frame of `frameW:frameH` holding footage
|
|
2698
|
+
* of `videoW:videoH` under contain fit, as fractions of the frame. Card
|
|
2699
|
+
* height follows from the width (contain keeps the footage aspect): a card
|
|
2700
|
+
* that fits is centred (`card`) or given headroom (`hero`); one taller than
|
|
2701
|
+
* the frame bleeds off the bottom by at least 2%, the feature-clip cue.
|
|
2702
|
+
*/
|
|
2703
|
+
declare function cardInset(look: Pick<Look, 'cardWidth' | 'headroom'>, frame: {
|
|
2704
|
+
w: number;
|
|
2705
|
+
h: number;
|
|
2706
|
+
}, video: {
|
|
2707
|
+
w: number;
|
|
2708
|
+
h: number;
|
|
2709
|
+
}, placement: LookPlacement): NonNullable<FrameStyle['inset']>;
|
|
2710
|
+
/**
|
|
2711
|
+
* Apply a look to a frame for one output size and placement: the ground,
|
|
2712
|
+
* the inset, the radius, both shadow layers and the hairline. The bar and
|
|
2713
|
+
* the media layer are the document's own (a look presents the card, it
|
|
2714
|
+
* does not decide what chrome the card wears). `fit` is forced to contain,
|
|
2715
|
+
* because the card IS the footage's aspect under a look.
|
|
2716
|
+
*/
|
|
2717
|
+
declare function applyLook(frame: FrameStyle, look: Look, size: {
|
|
2718
|
+
w: number;
|
|
2719
|
+
h: number;
|
|
2720
|
+
}, video: {
|
|
2721
|
+
w: number;
|
|
2722
|
+
h: number;
|
|
2723
|
+
}, placement: LookPlacement): FrameStyle;
|
|
2724
|
+
|
|
2725
|
+
/** The entrance's default length, seconds. */
|
|
2726
|
+
declare const ENTRANCE_SECONDS = 1.2;
|
|
2727
|
+
/** The end card's default length, seconds. */
|
|
2728
|
+
declare const END_CARD_SECONDS = 2.5;
|
|
2729
|
+
declare function entranceSeconds(e: FrameEntrance | null | undefined): number;
|
|
2730
|
+
/**
|
|
2731
|
+
* The rated segments with every `hold` expanded: after the last rated
|
|
2732
|
+
* piece of a held segment, a freeze piece whose tiny source span at the
|
|
2733
|
+
* segment's end plays for `hold` output seconds. Every consumer of the
|
|
2734
|
+
* rated list (mapTime, the zoom remap, the audio splice, the duration)
|
|
2735
|
+
* inherits the hold from this one seam.
|
|
2736
|
+
*/
|
|
2737
|
+
declare function withHolds(docSegments: readonly (Segment & {
|
|
2738
|
+
hold?: number;
|
|
2739
|
+
})[], rated: Segment[]): Segment[];
|
|
2740
|
+
/**
|
|
2741
|
+
* The card-pose track [scale, dy, opacity] in OUTPUT seconds: the entrance
|
|
2742
|
+
* settles the card in from a slightly smaller, lower, transparent pose;
|
|
2743
|
+
* the end card recedes it under the words. Undefined when neither
|
|
2744
|
+
* exists, so a doc without them lowers byte-identically.
|
|
2745
|
+
*/
|
|
2746
|
+
declare function cardPoseTrack(e: FrameEntrance | null | undefined, endStart: number | null, endSeconds: number): KeyframeTrack<number[]> | undefined;
|
|
2747
|
+
/**
|
|
2748
|
+
* A doc with its end card expanded: the last segment holds for the card's
|
|
2749
|
+
* seconds and the card's words ride as OUTPUT-anchored text overlays over
|
|
2750
|
+
* the receding footage (the house presets, so they resolve at lowering like
|
|
2751
|
+
* any title). Returns the output second the card starts at, for the pose
|
|
2752
|
+
* track. A doc with no end card comes back as itself.
|
|
2753
|
+
*/
|
|
2754
|
+
declare function expandEndCard(doc: ProjectDoc, outputDuration: number): {
|
|
2755
|
+
doc: ProjectDoc;
|
|
2756
|
+
endStart: number | null;
|
|
2757
|
+
seconds: number;
|
|
2758
|
+
};
|
|
2759
|
+
|
|
2508
2760
|
/**
|
|
2509
2761
|
* Compositor v2 — the layer stage geometry.
|
|
2510
2762
|
*
|
|
@@ -3064,4 +3316,4 @@ declare function rejectSpan(rejected: RejectedSpan[] | undefined, lane: Rejected
|
|
|
3064
3316
|
anchor?: StepAnchor;
|
|
3065
3317
|
}, note?: string): RejectedSpan;
|
|
3066
3318
|
|
|
3067
|
-
export { ASPECT_RATIOS, AUDIO_PLAN_STEP, type AnchorKind, type AspectRatioOption, type AudioClip, type AudioPlanPoint, type AudioPlanTrack, BACKGROUND_Z, BASE_FRAME_STYLE, type Backdrop, type BackgroundMedia, type BakedText3dAsset, type BakedText3dMaterial, type BrowserBarStyle, type BuildDigestInput, CAMERA_FAR, CAMERA_NEAR, CAM_CHAIN_GAP, CAM_EASE, CAM_PAN, CAM_PAN_EASE, CAM_RAMP_IN, CAM_RAMP_OUT, CAM_SIZE_MAX, CAM_SIZE_MIN, CAM_SPAN_MIN, CAPTURE_COVERAGE_MIN, CARD_FOV, CARD_Z, CHANNEL_SPECS_HASH, CHANNEL_SPECS_VERIFIED, CLICK_FX_INTENSITY, CLICK_FX_PRE, CLICK_HIGHLIGHT_FADE, CLICK_PAIR_MAX, CLICK_PULSE_DUR, CLICK_RECT_MAX_FRAC, CLICK_RIPPLE_DUR, CLICK_SYNTH_RELEASE, CROP_MAX_PX, CROP_MIN_FRAC, CROP_MIN_PX, CROP_PAD, CURSOR_IDLE_EPS_FRAC, CURSOR_IDLE_FADE_IN, CURSOR_IDLE_FADE_OUT, CURSOR_IDLE_HOLD, type CamBubbleRect, type CamPoseSpan, type CamStyle, type CaptureNormalization, type CardLayout, type ClickFxStyle, type CursorEvent, type CursorFadeKey, type CursorIdleOptions, type CursorStyle, type CursorTrack, DEFAULT_BROWSER_BAR, DEFAULT_CAM_POSE, DEFAULT_CAM_STYLE, DEFAULT_CLICK_FX, DEFAULT_CURSOR_STYLE, DEFAULT_DUCK, DEFAULT_FRAME_STYLE, DEFAULT_SPEED_PARAMS, DEFAULT_TILT_POSE, DEFAULT_ZOOM_LEVEL, DEFAULT_ZOOM_STYLE, DESTINATIONS, DIGEST_CROP_MAX, DIGEST_FULL_MAX, DIGEST_VERSION, DOC_SCHEMA_VERSION, DRAG_FIT_LEVEL, type Destination, type Digest, type DigestImageRef, type DigestPlan, type DigestTakeFacts, type DuckOptions, EXPORT_RESOLUTION_OPTIONS, EXPORT_SHORT_EDGE, type EnvelopePoint, type ExportResolution, type ExtractClickOptions, FOLLOW_RECENTER, FOLLOW_SAFE_RATIO, FRAME_BORDER_COLOR_DEFAULT, FRAME_BORDER_DEFAULT, FRAME_BORDER_WIDTH_DEFAULT, type FocusBounds, type FollowEvent, type FollowOptions, type FrameGeometry, type FrameStyle, type IngestOptions, type LowerProgramOptions, type LoweredAudioClip, type LoweredClick, type LoweredComposition, type LoweredZoomSpan, MINIMAL_BAR_THEMES, MOTION_DELTA, MOTION_EASE, type MediaOverlayClip, type MicRms, type MinimalBarTheme, type Moment, type MomentKind, type MomentsOptions, type MotionKey, type MotionPose, type MotionPose3D, type MusicBedInput, type NormRect, OBJECT_DEFAULT_SCALE, OVERLAY_FONT_FACES, OVERLAY_LINE_HEIGHT, OVERLAY_MEDIA_DEFAULT_RADIUS, OVERLAY_MEDIA_DEFAULT_WIDTH, OVERLAY_MIN_DURATION, OVERLAY_SCALE_MAX, OVERLAY_SIZE_MAX, OVERLAY_SIZE_MIN, OVERLAY_TRANSITION_DUR, OVERLAY_Z, type ObjectAnimation, type ObjectAsset, type ObjectClip, type ObjectPrimitiveShape, type OverlayClip, type OverlayFontFace, type OverlayKind, type OverlayPresetStyle, type OverlayRect, type OverlayTransform, type OverlayTransition, PLAYBACK_ACTIVITY, PROGRAM_RETIME, type PlanOptions, type PlanTiltOptions, type PlaneSize, type ProgramAnchorDoc, type ProgramTweenEdit, type ProjectDoc, type PxRect, REJECT_OVERLAP, type RecordingArtifact, type RecordingMeta, type Rect, type RejectedLane, type RejectedSpan, type ResolvedOverlayBox, type ResolvedOverlayStyle, SCENE_MOTION, SCENE_QUIET, SPEED_RATE_MAX, SPEED_RATE_MIN, SPEED_SPAN_MIN, STUDIO_ENTRY_ID, STYLE_FIELDS, type SmoothOptions, type SmoothPoint, type SpeedParams, type SpeedSpan, type StepAnchor, type StepSpan, type StudioAudioPlan, type StudioDoc, type StudioEntry, type StyleField, TEXT3D_DEPTH_DEFAULT, TEXT3D_DEPTH_MAX, TEXT3D_DEPTH_MIN, TEXT_PRESETS, TILT_AUTO_DEAD_ZONE, TILT_AUTO_MIN, TILT_CHAIN_GAP, TILT_DEG_MAX, TILT_EASE, TILT_INTENSITY_MAX, TILT_PAN, TILT_PAN_EASE, TILT_RAMP_IN, TILT_RAMP_OUT, TILT_SPAN_MIN, TILT_UI_DEG_MAX, TRANSITION_SPEED_MULT, type Text3dMaterial, type TextFxDirection, type TextFxKind, type TextFxSpec, type TextFxUnit, type TextOverlayBox, type TextOverlayClip, type TextOverlayPreset, type TextOverlayStroke, type TiltPersonality, type TiltSpan, type TiltStyleName, type TranscriptSegment, type TransitionSpeed, WINDOW_FOCUS_MIN, ZOOM_CHAIN_GAP, ZOOM_EASE, ZOOM_LEVELS, ZOOM_LEVEL_MAX, ZOOM_LEVEL_MIN, ZOOM_PAN, ZOOM_PAN_EASE, ZOOM_RAMP_IN, ZOOM_RAMP_IN_OVERLAP, ZOOM_RAMP_OUT, ZOOM_SPAN_MIN, ZOOM_STYLES, ZOOM_STYLE_OPTIONS, type ZoomSpan, type ZoomStyleName, type ZoomStyleParams, type ZoomWindow, anchorKindOf, anchorSourceDuration, aspectRatioValue, audioLane, backdropMedia, buildDigest, camBubbleRect, camBubbleRectAt, camLane, camMoveLane, camRectFromPose, camRestPose, camTrackFromDoc, cardPointToScreen, clampCamFrac, clampCamSize, clampFocus, clampSpeedRate, clampTiltDeg, clampZoomLevel, clipEnvelope, clipLength, computeCardLayout, computeMicRms, computePeaks, copyStyle, cropBox, cursorIdleFade, deriveViewportCrop, destinationById, destinationsForChannel, docCardLayout, docOutputDuration, docToCropSpace, docToFullSpace, duckCurve, effectiveSegments, envelopeAt, envelopeValueAt, expectedFrameSize, exportSizeFor, extractClicks, focusBounds, followFocusEvents, frameGeometry, hexToRgbTriplet, idleGaps, isMusicBed, isPlayback, isProgramDoc, isRecordingDoc, isRejected, levelForFocusFraction, lowerProgramDoc, lowerStudioDoc, lowerToComposition, micLane, migrateHostedDoc, momentsFromDoc, motionTrack, musicBedClip, normalizeCaptureSpace, objectMotionBase, objectMotionPoseAt, objectsLane, outputDurationOf, outputRangeToSource, overlapFraction, overlayFaceFor, overlayFontFaces, overlayFontString, overlayHit, overlayLines, overlayMotionBase, overlayMotionPoseAt, overlayRect, overlaysLane, pageDisplayUrl, parsePoseId, pickStyle, planAutoSpeed, planAutoTilt, planAutoZoom, planForDigest, planeSizeAtDepth, platformBarKind, programDuration, projectFromArtifact, ratedSegments, recommendedExportResolution, refillAudioBeds, rejectSpan, removeSourceRange, removeSpeedInRange, resolveExportSize, resolveOverlayBox, resolveOverlayStyle, resolveText3dAsset, resolveZoomStyle, sceneChanges, scrollRuns, setSpeedInRange, smoothCursor, spanOutputExtent, speedLane, studioAudioPlan, studioEntry, studioLayerData, tiltLane, tiltTrackFromDoc, transitionMult, videoLane, voiceKey, withBackdrop, withoutRejected, wrapProgramLength, zoomCoversRect, zoomLane, zoomSpanForRange, zoomTrackFromDoc, zoomWindow };
|
|
3319
|
+
export { ASPECT_RATIOS, AUDIO_PLAN_STEP, type AnchorKind, type AspectRatioOption, type AudioClip, type AudioPlanPoint, type AudioPlanTrack, BACKGROUND_Z, BASE_FRAME_STYLE, type Backdrop, type BackgroundMedia, type BakedText3dAsset, type BakedText3dMaterial, type BrowserBarStyle, type BuildDigestInput, CAMERA_FAR, CAMERA_NEAR, CAM_CHAIN_GAP, CAM_EASE, CAM_PAN, CAM_PAN_EASE, CAM_RAMP_IN, CAM_RAMP_OUT, CAM_SIZE_MAX, CAM_SIZE_MIN, CAM_SPAN_MIN, CAPTURE_COVERAGE_MIN, CARD_FOV, CARD_Z, CHANNEL_SPECS_HASH, CHANNEL_SPECS_VERIFIED, CLICK_FX_INTENSITY, CLICK_FX_PRE, CLICK_HIGHLIGHT_FADE, CLICK_PAIR_MAX, CLICK_PULSE_DUR, CLICK_RECT_MAX_FRAC, CLICK_RIPPLE_DUR, CLICK_SYNTH_RELEASE, CROP_MAX_PX, CROP_MIN_FRAC, CROP_MIN_PX, CROP_PAD, CURSOR_IDLE_EPS_FRAC, CURSOR_IDLE_FADE_IN, CURSOR_IDLE_FADE_OUT, CURSOR_IDLE_HOLD, type CamBubbleRect, type CamPoseSpan, type CamStyle, type CaptureNormalization, type CardLayout, type ClickFxStyle, type CursorEvent, type CursorFadeKey, type CursorIdleOptions, type CursorStyle, type CursorTrack, DARK_GROUND, DEFAULT_BROWSER_BAR, DEFAULT_CAM_POSE, DEFAULT_CAM_STYLE, DEFAULT_CLICK_FX, DEFAULT_CURSOR_STYLE, DEFAULT_DUCK, DEFAULT_FRAME_STYLE, DEFAULT_SPEED_PARAMS, DEFAULT_TILT_POSE, DEFAULT_ZOOM_LEVEL, DEFAULT_ZOOM_STYLE, DESTINATIONS, DIGEST_CROP_MAX, DIGEST_FULL_MAX, DIGEST_VERSION, DOC_SCHEMA_VERSION, DRAG_FIT_LEVEL, type Destination, type Digest, type DigestImageRef, type DigestPlan, type DigestTakeFacts, type DocSegment, type DuckOptions, END_CARD_SECONDS, ENTRANCE_SECONDS, EXPORT_RESOLUTION_OPTIONS, EXPORT_SHORT_EDGE, type EndCard, type EnvelopePoint, type ExportResolution, type ExtractClickOptions, FOLLOW_RECENTER, FOLLOW_SAFE_RATIO, FRAME_BORDER_COLOR_DEFAULT, FRAME_BORDER_DEFAULT, FRAME_BORDER_WIDTH_DEFAULT, type FocusBounds, type FollowEvent, type FollowOptions, type FrameEntrance, type FrameGeometry, type FrameStyle, HOUSE_GRADIENT, type IngestOptions, LOOK_KINDS, type Look, type LookBrand, type LookKind, type LookPlacement, type LowerProgramOptions, type LoweredAudioClip, type LoweredClick, type LoweredComposition, type LoweredZoomSpan, MINIMAL_BAR_THEMES, MOTION_DELTA, MOTION_EASE, type MediaOverlayClip, type MicRms, type MinimalBarTheme, type Moment, type MomentKind, type MomentsOptions, type MotionKey, type MotionPose, type MotionPose3D, type MusicBedInput, type NormRect, OBJECT_DEFAULT_SCALE, OVERLAY_FONT_FACES, OVERLAY_LINE_HEIGHT, OVERLAY_MEDIA_DEFAULT_RADIUS, OVERLAY_MEDIA_DEFAULT_WIDTH, OVERLAY_MIN_DURATION, OVERLAY_SCALE_MAX, OVERLAY_SIZE_MAX, OVERLAY_SIZE_MIN, OVERLAY_TRANSITION_DUR, OVERLAY_Z, type ObjectAnimation, type ObjectAsset, type ObjectClip, type ObjectPrimitiveShape, type OverlayClip, type OverlayFontFace, type OverlayKind, type OverlayPresetStyle, type OverlayRect, type OverlayTransform, type OverlayTransition, PLATE_GROUND, PLAYBACK_ACTIVITY, PROGRAM_RETIME, type PlanOptions, type PlanTiltOptions, type PlaneSize, type ProgramAnchorDoc, type ProgramTweenEdit, type ProjectDoc, type PxRect, REJECT_OVERLAP, type RecordingArtifact, type RecordingMeta, type Rect, type RejectedLane, type RejectedSpan, type ResolvedOverlayBox, type ResolvedOverlayStyle, SCENE_MOTION, SCENE_QUIET, SPEED_RATE_MAX, SPEED_RATE_MIN, SPEED_SPAN_MIN, STUDIO_ENTRY_ID, STYLE_FIELDS, type SmoothOptions, type SmoothPoint, type SpeedParams, type SpeedSpan, type StepAnchor, type StepSpan, type StudioAudioPlan, type StudioDoc, type StudioEntry, type StyleField, TEXT3D_DEPTH_DEFAULT, TEXT3D_DEPTH_MAX, TEXT3D_DEPTH_MIN, TEXT_PRESETS, TILT_AUTO_DEAD_ZONE, TILT_AUTO_MIN, TILT_CHAIN_GAP, TILT_DEG_MAX, TILT_EASE, TILT_INTENSITY_MAX, TILT_PAN, TILT_PAN_EASE, TILT_RAMP_IN, TILT_RAMP_OUT, TILT_SPAN_MIN, TILT_UI_DEG_MAX, TRANSITION_SPEED_MULT, type Text3dMaterial, type TextFxDirection, type TextFxKind, type TextFxSpec, type TextFxUnit, type TextOverlayBox, type TextOverlayClip, type TextOverlayPreset, type TextOverlayStroke, type TiltPersonality, type TiltSpan, type TiltStyleName, type TranscriptSegment, type TransitionSpeed, WINDOW_FOCUS_MIN, ZOOM_CHAIN_GAP, ZOOM_EASE, ZOOM_LEVELS, ZOOM_LEVEL_MAX, ZOOM_LEVEL_MIN, ZOOM_PAN, ZOOM_PAN_EASE, ZOOM_RAMP_IN, ZOOM_RAMP_IN_OVERLAP, ZOOM_RAMP_OUT, ZOOM_SPAN_MIN, ZOOM_STYLES, ZOOM_STYLE_OPTIONS, type ZoomSpan, type ZoomStyleName, type ZoomStyleParams, type ZoomWindow, anchorKindOf, anchorSourceDuration, applyLook, aspectRatioValue, audioLane, backdropMedia, buildDigest, camBubbleRect, camBubbleRectAt, camLane, camMoveLane, camRectFromPose, camRestPose, camTrackFromDoc, cardInset, cardPointToScreen, cardPoseTrack, clampCamFrac, clampCamSize, clampFocus, clampSpeedRate, clampTiltDeg, clampZoomLevel, clipEnvelope, clipLength, computeCardLayout, computeMicRms, computePeaks, copyStyle, cropBox, cursorIdleFade, deriveViewportCrop, destinationById, destinationsForChannel, docCardLayout, docOutputDuration, docToCropSpace, docToFullSpace, duckCurve, effectiveSegments, entranceSeconds, envelopeAt, envelopeValueAt, expandEndCard, expectedFrameSize, exportSizeFor, extractClicks, focusBounds, followFocusEvents, frameGeometry, hexToRgbTriplet, houseLook, idleGaps, isLookKind, isMusicBed, isPlayback, isProgramDoc, isRecordingDoc, isRejected, levelForFocusFraction, lookFromBrand, lookKindForGround, lowerProgramDoc, lowerStudioDoc, lowerToComposition, micLane, migrateHostedDoc, momentsFromDoc, motionTrack, musicBedClip, normalizeCaptureSpace, objectMotionBase, objectMotionPoseAt, objectsLane, outputDurationOf, outputRangeToSource, overlapFraction, overlayFaceFor, overlayFontFaces, overlayFontString, overlayHit, overlayLines, overlayMotionBase, overlayMotionPoseAt, overlayRect, overlaysLane, pageDisplayUrl, parsePoseId, pickStyle, planAutoSpeed, planAutoTilt, planAutoZoom, planForDigest, planeSizeAtDepth, platformBarKind, programDuration, projectFromArtifact, ratedSegments, recommendedExportResolution, refillAudioBeds, rejectSpan, removeSourceRange, removeSpeedInRange, resolveExportSize, resolveOverlayBox, resolveOverlayStyle, resolveText3dAsset, resolveZoomStyle, sceneChanges, scrollRuns, setSpeedInRange, smoothCursor, spanOutputExtent, speedLane, studioAudioPlan, studioEntry, studioLayerData, tiltLane, tiltTrackFromDoc, transitionMult, videoLane, voiceKey, withBackdrop, withHolds, withoutRejected, wrapProgramLength, zoomCoversRect, zoomLane, zoomSpanForRange, zoomTrackFromDoc, zoomWindow };
|