@vosjs/studio-core 0.4.1 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts 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
- /** shadow strength 0..1. */
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: Segment[];
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
@@ -1342,6 +1426,19 @@ declare const FRAME_BORDER_DEFAULT = 0.35;
1342
1426
  */
1343
1427
  declare const FRAME_BORDER_WIDTH_DEFAULT = 1.5;
1344
1428
  declare const FRAME_BORDER_COLOR_DEFAULT = "#ffffff";
1429
+ /**
1430
+ * How far past the card's rounded clip the footage and the browser-bar fill
1431
+ * are drawn, in device pixels, so the clip is the ONE edge the eye sees.
1432
+ * A clipped drawImage whose destination rect lands exactly on the clip path
1433
+ * anti-aliases that edge twice wherever it falls on a fractional device
1434
+ * pixel (the studio canvas is the fitted box at device pixel ratio, and any
1435
+ * zoom rescales everything about its focus), leaving a partially covered
1436
+ * seam pixel along every straight edge that the arc, drawn by the clip
1437
+ * alone, never has. One pixel covers the seam and changes the footage scale
1438
+ * by less than a part in a thousand. Read by ON_FRAME; the layout tests
1439
+ * expect the destination rect to be the mirror's grown by this much.
1440
+ */
1441
+ declare const CARD_EDGE_OVERDRAW = 1;
1345
1442
  /**
1346
1443
  * The realistic browser-bar kind matching the recorder's OS — seeds Default
1347
1444
  * mode so the synthetic chrome looks native to where the take was recorded
@@ -1792,7 +1889,15 @@ interface CardLayout {
1792
1889
  declare function computeCardLayout(frame: FrameStyle, video: {
1793
1890
  width: number;
1794
1891
  height: number;
1795
- }, W: number, H: number): CardLayout;
1892
+ }, W: number, H: number,
1893
+ /**
1894
+ * The zoom track's current focus, for a frame whose cover crop FOLLOWS
1895
+ * the camera (`focusFollow: 'camera'`); absent = the frame's own focus.
1896
+ */
1897
+ zoomFocus?: {
1898
+ cx: number;
1899
+ cy: number;
1900
+ }): CardLayout;
1796
1901
  /**
1797
1902
  * The doc's card layout at design size (H = 1080, W from the output aspect).
1798
1903
  * All layout terms scale linearly with the canvas at a fixed aspect, so the
@@ -2316,7 +2421,7 @@ declare function studioLayerData(layers: {
2316
2421
  objects?: ObjectClip[];
2317
2422
  audio?: AudioClip[];
2318
2423
  }, duration: number): Record<string, unknown>;
2319
- declare function lowerToComposition(doc: ProjectDoc): LoweredComposition;
2424
+ declare function lowerToComposition(input: ProjectDoc): LoweredComposition;
2320
2425
 
2321
2426
  /**
2322
2427
  * ONE lowering for the document family: the anchor's program
@@ -2402,10 +2507,31 @@ interface Destination {
2402
2507
  accepts: string;
2403
2508
  /** How footage meets an off-ratio frame (a still fills, a video letterboxes). */
2404
2509
  fit: 'contain' | 'cover';
2510
+ /**
2511
+ * The destination's word policy: 'none' = the picture carries it alone (a
2512
+ * tile, a store screenshot), 'allowed', 'expected' = a card that should
2513
+ * say something. The picture checks read it.
2514
+ */
2515
+ text: 'none' | 'allowed' | 'expected';
2516
+ /**
2517
+ * The rect, as fractions of the frame, every text box must sit inside:
2518
+ * the platform's own chrome or crop covers the rest.
2519
+ */
2520
+ safe: {
2521
+ x: number;
2522
+ y: number;
2523
+ w: number;
2524
+ h: number;
2525
+ };
2526
+ /**
2527
+ * The poster template a card destination renders from by default (the
2528
+ * family that ships with the CLI); absent on screenshots and videos.
2529
+ */
2530
+ template?: string;
2405
2531
  notes: string;
2406
2532
  }
2407
2533
  declare const CHANNEL_SPECS_VERIFIED = "2026-08-04";
2408
- declare const CHANNEL_SPECS_HASH = "7a3ad4301f96507ec471a35fa37f367dcaf4bd405b008f551d0ac4cd395d61f7";
2534
+ declare const CHANNEL_SPECS_HASH = "e48926c22737b5dfaabf5cb33916a50a5eccd4b93498c2059a1468bd963a0a86";
2409
2535
  declare const DESTINATIONS: Destination[];
2410
2536
  declare function destinationById(id: string): Destination | undefined;
2411
2537
  declare function destinationsForChannel(channel: string): Destination[];
@@ -2505,6 +2631,145 @@ declare const AUDIO_PLAN_STEP: number;
2505
2631
  declare function envelopeAt(env: readonly EnvelopePoint[], t: number, def: number): number;
2506
2632
  declare function studioAudioPlan(clips: readonly LoweredAudioClip[], duckEnv: readonly EnvelopePoint[], duration: number, step?: number): StudioAudioPlan;
2507
2633
 
2634
+ /**
2635
+ * A LOOK is how the card is presented: the ground it sits on, how much of
2636
+ * the frame it takes, the shadow that makes it an object, the stroke that
2637
+ * separates a light card from a light ground. Three house looks cover the
2638
+ * feature-clip and poster grammar the premium tools default to (a cream
2639
+ * plate with a soft wide shadow; a warm gradient; a near-black plate with a
2640
+ * light streak and a glow), and a maker's brand kit resolves to one of them
2641
+ * with its own colours. Pure: a look resolves to `FrameStyle` fields, so
2642
+ * every renderer and every still reads the same placement.
2643
+ */
2644
+
2645
+ type LookKind = 'plate' | 'gradient' | 'dark';
2646
+ /**
2647
+ * Where the card goes. `hero` is the feature-clip grammar: the card at
2648
+ * ~84% of the width with headroom above and its bottom edge running off
2649
+ * the frame ("this continues"). `card` is the poster grammar: the card
2650
+ * centred on the ground with even room around it; on a frame too wide to
2651
+ * hold the whole card it falls back to `hero`.
2652
+ */
2653
+ type LookPlacement = 'hero' | 'card';
2654
+ interface Look {
2655
+ kind: LookKind;
2656
+ /** CSS ground painted under the card (a colour or a gradient). */
2657
+ ground: string;
2658
+ /** The card's width as a fraction of the frame. */
2659
+ cardWidth: number;
2660
+ /** Room above the card in the hero placement, a fraction of the height. */
2661
+ headroom: number;
2662
+ /** Corner radius in design px. */
2663
+ radius: number;
2664
+ /** Ambient shadow 0..1. */
2665
+ shadow: number;
2666
+ /** Contact shadow 0..1. */
2667
+ shadowContact: number;
2668
+ /** `#rrggbb`; absent = black. */
2669
+ shadowColor?: string;
2670
+ /** Hairline stroke alpha 0..1 (0 = none). */
2671
+ border: number;
2672
+ borderColor?: string;
2673
+ }
2674
+ /** The frontmatter roles a brand kit carries that a look reads. */
2675
+ interface LookBrand {
2676
+ look?: string | null;
2677
+ ground?: string | null;
2678
+ bgA?: string | null;
2679
+ bgB?: string | null;
2680
+ bgC?: string | null;
2681
+ accent?: string | null;
2682
+ ink?: string | null;
2683
+ }
2684
+ /** The house coral, the ground every take opened on before looks existed. */
2685
+ declare const HOUSE_GRADIENT = "linear-gradient(135deg, #ff5148, #ffb03a)";
2686
+ /** The Chrome feature-clip plate, measured on three clips. */
2687
+ declare const PLATE_GROUND = "#f0f2f4";
2688
+ /** Near-black with a warm light streak from the top right. */
2689
+ declare const DARK_GROUND = "radial-gradient(ellipse at 82% 0%, #2a1d16, #07080b)";
2690
+ declare const LOOK_KINDS: LookKind[];
2691
+ declare function isLookKind(v: unknown): v is LookKind;
2692
+ /** One of the three house looks, copied. */
2693
+ declare function houseLook(kind: LookKind): Look;
2694
+ /**
2695
+ * Which house look a site's own ground asks for: a paper site is a plate, a
2696
+ * dark site is dark, anything else takes the gradient. What `vos brand`
2697
+ * writes as the `look` role, so an outside maker never gets the house coral
2698
+ * by accident.
2699
+ */
2700
+ declare function lookKindForGround(bgA: string | null | undefined): LookKind;
2701
+ /**
2702
+ * Resolve a brand kit to a look: the `look` role picks the kind (else the
2703
+ * site's ground decides), `ground` overrides the ground outright, and the
2704
+ * kit's colours colour the house look (plate = bgB, gradient = accent →
2705
+ * bgC, dark = bgA with a lifted shadow). A kit with none of them is the
2706
+ * house look unchanged.
2707
+ */
2708
+ declare function lookFromBrand(brand: LookBrand | null | undefined): Look;
2709
+ /**
2710
+ * The card's per-side inset for a frame of `frameW:frameH` holding footage
2711
+ * of `videoW:videoH` under contain fit, as fractions of the frame. Card
2712
+ * height follows from the width (contain keeps the footage aspect): a card
2713
+ * that fits is centred (`card`) or given headroom (`hero`); one taller than
2714
+ * the frame bleeds off the bottom by at least 2%, the feature-clip cue.
2715
+ */
2716
+ declare function cardInset(look: Pick<Look, 'cardWidth' | 'headroom'>, frame: {
2717
+ w: number;
2718
+ h: number;
2719
+ }, video: {
2720
+ w: number;
2721
+ h: number;
2722
+ }, placement: LookPlacement): NonNullable<FrameStyle['inset']>;
2723
+ /**
2724
+ * Apply a look to a frame for one output size and placement: the ground,
2725
+ * the inset, the radius, both shadow layers and the hairline. The bar and
2726
+ * the media layer are the document's own (a look presents the card, it
2727
+ * does not decide what chrome the card wears). `fit` is forced to contain,
2728
+ * because the card IS the footage's aspect under a look.
2729
+ */
2730
+ declare function applyLook(frame: FrameStyle, look: Look, size: {
2731
+ w: number;
2732
+ h: number;
2733
+ }, video: {
2734
+ w: number;
2735
+ h: number;
2736
+ }, placement: LookPlacement): FrameStyle;
2737
+
2738
+ /** The entrance's default length, seconds. */
2739
+ declare const ENTRANCE_SECONDS = 1.2;
2740
+ /** The end card's default length, seconds. */
2741
+ declare const END_CARD_SECONDS = 2.5;
2742
+ declare function entranceSeconds(e: FrameEntrance | null | undefined): number;
2743
+ /**
2744
+ * The rated segments with every `hold` expanded: after the last rated
2745
+ * piece of a held segment, a freeze piece whose tiny source span at the
2746
+ * segment's end plays for `hold` output seconds. Every consumer of the
2747
+ * rated list (mapTime, the zoom remap, the audio splice, the duration)
2748
+ * inherits the hold from this one seam.
2749
+ */
2750
+ declare function withHolds(docSegments: readonly (Segment & {
2751
+ hold?: number;
2752
+ })[], rated: Segment[]): Segment[];
2753
+ /**
2754
+ * The card-pose track [scale, dy, opacity] in OUTPUT seconds: the entrance
2755
+ * settles the card in from a slightly smaller, lower, transparent pose;
2756
+ * the end card recedes it under the words. Undefined when neither
2757
+ * exists, so a doc without them lowers byte-identically.
2758
+ */
2759
+ declare function cardPoseTrack(e: FrameEntrance | null | undefined, endStart: number | null, endSeconds: number): KeyframeTrack<number[]> | undefined;
2760
+ /**
2761
+ * A doc with its end card expanded: the last segment holds for the card's
2762
+ * seconds and the card's words ride as OUTPUT-anchored text overlays over
2763
+ * the receding footage (the house presets, so they resolve at lowering like
2764
+ * any title). Returns the output second the card starts at, for the pose
2765
+ * track. A doc with no end card comes back as itself.
2766
+ */
2767
+ declare function expandEndCard(doc: ProjectDoc, outputDuration: number): {
2768
+ doc: ProjectDoc;
2769
+ endStart: number | null;
2770
+ seconds: number;
2771
+ };
2772
+
2508
2773
  /**
2509
2774
  * Compositor v2 — the layer stage geometry.
2510
2775
  *
@@ -3064,4 +3329,4 @@ declare function rejectSpan(rejected: RejectedSpan[] | undefined, lane: Rejected
3064
3329
  anchor?: StepAnchor;
3065
3330
  }, note?: string): RejectedSpan;
3066
3331
 
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 };
3332
+ 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_EDGE_OVERDRAW, 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 };