@clipkit/runtime 1.0.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/LICENSE +54 -0
- package/README.md +98 -0
- package/dist/animation/easings.d.ts +9 -0
- package/dist/animation/easings.d.ts.map +1 -0
- package/dist/animation/easings.js +230 -0
- package/dist/animation/easings.js.map +1 -0
- package/dist/animation/expr.d.ts +44 -0
- package/dist/animation/expr.d.ts.map +1 -0
- package/dist/animation/expr.js +236 -0
- package/dist/animation/expr.js.map +1 -0
- package/dist/animation/keyframes.d.ts +23 -0
- package/dist/animation/keyframes.d.ts.map +1 -0
- package/dist/animation/keyframes.js +117 -0
- package/dist/animation/keyframes.js.map +1 -0
- package/dist/animation/motion-path.d.ts +18 -0
- package/dist/animation/motion-path.d.ts.map +1 -0
- package/dist/animation/motion-path.js +269 -0
- package/dist/animation/motion-path.js.map +1 -0
- package/dist/animation/noise1d.d.ts +5 -0
- package/dist/animation/noise1d.d.ts.map +1 -0
- package/dist/animation/noise1d.js +27 -0
- package/dist/animation/noise1d.js.map +1 -0
- package/dist/animation/presets.d.ts +60 -0
- package/dist/animation/presets.d.ts.map +1 -0
- package/dist/animation/presets.js +221 -0
- package/dist/animation/presets.js.map +1 -0
- package/dist/assets/cache.d.ts +18 -0
- package/dist/assets/cache.d.ts.map +1 -0
- package/dist/assets/cache.js +56 -0
- package/dist/assets/cache.js.map +1 -0
- package/dist/assets/fonts.d.ts +20 -0
- package/dist/assets/fonts.d.ts.map +1 -0
- package/dist/assets/fonts.js +127 -0
- package/dist/assets/fonts.js.map +1 -0
- package/dist/assets/loader.d.ts +18 -0
- package/dist/assets/loader.d.ts.map +1 -0
- package/dist/assets/loader.js +87 -0
- package/dist/assets/loader.js.map +1 -0
- package/dist/assets/lut.d.ts +5 -0
- package/dist/assets/lut.d.ts.map +1 -0
- package/dist/assets/lut.js +77 -0
- package/dist/assets/lut.js.map +1 -0
- package/dist/assets/media-time.d.ts +31 -0
- package/dist/assets/media-time.d.ts.map +1 -0
- package/dist/assets/media-time.js +65 -0
- package/dist/assets/media-time.js.map +1 -0
- package/dist/assets/mp4-frame-source.d.ts +44 -0
- package/dist/assets/mp4-frame-source.d.ts.map +1 -0
- package/dist/assets/mp4-frame-source.js +387 -0
- package/dist/assets/mp4-frame-source.js.map +1 -0
- package/dist/audio/encoder.d.ts +31 -0
- package/dist/audio/encoder.d.ts.map +1 -0
- package/dist/audio/encoder.js +96 -0
- package/dist/audio/encoder.js.map +1 -0
- package/dist/audio/fades.d.ts +16 -0
- package/dist/audio/fades.d.ts.map +1 -0
- package/dist/audio/fades.js +43 -0
- package/dist/audio/fades.js.map +1 -0
- package/dist/audio/limiter.d.ts +8 -0
- package/dist/audio/limiter.d.ts.map +1 -0
- package/dist/audio/limiter.js +39 -0
- package/dist/audio/limiter.js.map +1 -0
- package/dist/audio/loader.d.ts +6 -0
- package/dist/audio/loader.d.ts.map +1 -0
- package/dist/audio/loader.js +42 -0
- package/dist/audio/loader.js.map +1 -0
- package/dist/audio/mixer.d.ts +17 -0
- package/dist/audio/mixer.d.ts.map +1 -0
- package/dist/audio/mixer.js +204 -0
- package/dist/audio/mixer.js.map +1 -0
- package/dist/audio/varispeed.d.ts +24 -0
- package/dist/audio/varispeed.d.ts.map +1 -0
- package/dist/audio/varispeed.js +114 -0
- package/dist/audio/varispeed.js.map +1 -0
- package/dist/audio/wav.d.ts +6 -0
- package/dist/audio/wav.d.ts.map +1 -0
- package/dist/audio/wav.js +62 -0
- package/dist/audio/wav.js.map +1 -0
- package/dist/backend/backend.d.ts +579 -0
- package/dist/backend/backend.d.ts.map +1 -0
- package/dist/backend/backend.js +17 -0
- package/dist/backend/backend.js.map +1 -0
- package/dist/backend/webgl-backend.d.ts +97 -0
- package/dist/backend/webgl-backend.d.ts.map +1 -0
- package/dist/backend/webgl-backend.js +2142 -0
- package/dist/backend/webgl-backend.js.map +1 -0
- package/dist/backend/webgpu-backend.d.ts +121 -0
- package/dist/backend/webgpu-backend.d.ts.map +1 -0
- package/dist/backend/webgpu-backend.js +2481 -0
- package/dist/backend/webgpu-backend.js.map +1 -0
- package/dist/compositor/bitfont.d.ts +8 -0
- package/dist/compositor/bitfont.d.ts.map +1 -0
- package/dist/compositor/bitfont.js +52 -0
- package/dist/compositor/bitfont.js.map +1 -0
- package/dist/compositor/camera.d.ts +5 -0
- package/dist/compositor/camera.d.ts.map +1 -0
- package/dist/compositor/camera.js +114 -0
- package/dist/compositor/camera.js.map +1 -0
- package/dist/compositor/color.d.ts +26 -0
- package/dist/compositor/color.d.ts.map +1 -0
- package/dist/compositor/color.js +189 -0
- package/dist/compositor/color.js.map +1 -0
- package/dist/compositor/element-renderers/caption.d.ts +4 -0
- package/dist/compositor/element-renderers/caption.d.ts.map +1 -0
- package/dist/compositor/element-renderers/caption.js +376 -0
- package/dist/compositor/element-renderers/caption.js.map +1 -0
- package/dist/compositor/element-renderers/group.d.ts +12 -0
- package/dist/compositor/element-renderers/group.d.ts.map +1 -0
- package/dist/compositor/element-renderers/group.js +259 -0
- package/dist/compositor/element-renderers/group.js.map +1 -0
- package/dist/compositor/element-renderers/image.d.ts +4 -0
- package/dist/compositor/element-renderers/image.d.ts.map +1 -0
- package/dist/compositor/element-renderers/image.js +97 -0
- package/dist/compositor/element-renderers/image.js.map +1 -0
- package/dist/compositor/element-renderers/lit.d.ts +6 -0
- package/dist/compositor/element-renderers/lit.d.ts.map +1 -0
- package/dist/compositor/element-renderers/lit.js +82 -0
- package/dist/compositor/element-renderers/lit.js.map +1 -0
- package/dist/compositor/element-renderers/particles.d.ts +4 -0
- package/dist/compositor/element-renderers/particles.d.ts.map +1 -0
- package/dist/compositor/element-renderers/particles.js +212 -0
- package/dist/compositor/element-renderers/particles.js.map +1 -0
- package/dist/compositor/element-renderers/shape.d.ts +4 -0
- package/dist/compositor/element-renderers/shape.d.ts.map +1 -0
- package/dist/compositor/element-renderers/shape.js +171 -0
- package/dist/compositor/element-renderers/shape.js.map +1 -0
- package/dist/compositor/element-renderers/svg.d.ts +4 -0
- package/dist/compositor/element-renderers/svg.d.ts.map +1 -0
- package/dist/compositor/element-renderers/svg.js +210 -0
- package/dist/compositor/element-renderers/svg.js.map +1 -0
- package/dist/compositor/element-renderers/text.d.ts +25 -0
- package/dist/compositor/element-renderers/text.d.ts.map +1 -0
- package/dist/compositor/element-renderers/text.js +1358 -0
- package/dist/compositor/element-renderers/text.js.map +1 -0
- package/dist/compositor/element-renderers/video.d.ts +12 -0
- package/dist/compositor/element-renderers/video.d.ts.map +1 -0
- package/dist/compositor/element-renderers/video.js +109 -0
- package/dist/compositor/element-renderers/video.js.map +1 -0
- package/dist/compositor/fit.d.ts +18 -0
- package/dist/compositor/fit.d.ts.map +1 -0
- package/dist/compositor/fit.js +106 -0
- package/dist/compositor/fit.js.map +1 -0
- package/dist/compositor/lighting.d.ts +63 -0
- package/dist/compositor/lighting.d.ts.map +1 -0
- package/dist/compositor/lighting.js +141 -0
- package/dist/compositor/lighting.js.map +1 -0
- package/dist/compositor/mat4.d.ts +88 -0
- package/dist/compositor/mat4.d.ts.map +1 -0
- package/dist/compositor/mat4.js +245 -0
- package/dist/compositor/mat4.js.map +1 -0
- package/dist/compositor/project.d.ts +24 -0
- package/dist/compositor/project.d.ts.map +1 -0
- package/dist/compositor/project.js +105 -0
- package/dist/compositor/project.js.map +1 -0
- package/dist/compositor/render-context.d.ts +194 -0
- package/dist/compositor/render-context.d.ts.map +1 -0
- package/dist/compositor/render-context.js +10 -0
- package/dist/compositor/render-context.js.map +1 -0
- package/dist/compositor/resolve.d.ts +80 -0
- package/dist/compositor/resolve.d.ts.map +1 -0
- package/dist/compositor/resolve.js +276 -0
- package/dist/compositor/resolve.js.map +1 -0
- package/dist/compositor/scene.d.ts +10 -0
- package/dist/compositor/scene.d.ts.map +1 -0
- package/dist/compositor/scene.js +658 -0
- package/dist/compositor/scene.js.map +1 -0
- package/dist/compositor/transform.d.ts +73 -0
- package/dist/compositor/transform.d.ts.map +1 -0
- package/dist/compositor/transform.js +229 -0
- package/dist/compositor/transform.js.map +1 -0
- package/dist/compositor/unit.d.ts +27 -0
- package/dist/compositor/unit.d.ts.map +1 -0
- package/dist/compositor/unit.js +74 -0
- package/dist/compositor/unit.js.map +1 -0
- package/dist/encoder/exporter.d.ts +95 -0
- package/dist/encoder/exporter.d.ts.map +1 -0
- package/dist/encoder/exporter.js +341 -0
- package/dist/encoder/exporter.js.map +1 -0
- package/dist/encoder/index.d.ts +3 -0
- package/dist/encoder/index.d.ts.map +1 -0
- package/dist/encoder/index.js +2 -0
- package/dist/encoder/index.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +13 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +32 -0
- package/dist/logger.js.map +1 -0
- package/dist/runtime.d.ts +216 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +1012 -0
- package/dist/runtime.js.map +1 -0
- package/dist/svg/morph.d.ts +6 -0
- package/dist/svg/morph.d.ts.map +1 -0
- package/dist/svg/morph.js +62 -0
- package/dist/svg/morph.js.map +1 -0
- package/dist/svg/svg-renderer.d.ts +18 -0
- package/dist/svg/svg-renderer.d.ts.map +1 -0
- package/dist/svg/svg-renderer.js +142 -0
- package/dist/svg/svg-renderer.js.map +1 -0
- package/dist/text/caption-chunk.d.ts +17 -0
- package/dist/text/caption-chunk.d.ts.map +1 -0
- package/dist/text/caption-chunk.js +76 -0
- package/dist/text/caption-chunk.js.map +1 -0
- package/dist/text/font-atlas.d.ts +63 -0
- package/dist/text/font-atlas.d.ts.map +1 -0
- package/dist/text/font-atlas.js +225 -0
- package/dist/text/font-atlas.js.map +1 -0
- package/dist/text/measure.d.ts +38 -0
- package/dist/text/measure.d.ts.map +1 -0
- package/dist/text/measure.js +164 -0
- package/dist/text/measure.js.map +1 -0
- package/dist/text/text-animation.d.ts +52 -0
- package/dist/text/text-animation.d.ts.map +1 -0
- package/dist/text/text-animation.js +133 -0
- package/dist/text/text-animation.js.map +1 -0
- package/package.json +47 -0
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
import type { Source } from '@clipkit/protocol';
|
|
2
|
+
import { type ExportOptions, type FrameProducer } from './encoder/exporter.js';
|
|
3
|
+
export interface RuntimeInitOptions {
|
|
4
|
+
/**
|
|
5
|
+
* Preferred backend. Defaults to 'auto' (try WebGPU, fall back to WebGL2).
|
|
6
|
+
* Use 'webgpu' or 'webgl2' to force a specific backend, e.g. for testing.
|
|
7
|
+
*/
|
|
8
|
+
backend?: 'auto' | 'webgpu' | 'webgl2';
|
|
9
|
+
}
|
|
10
|
+
export declare class ClipkitRuntime implements FrameProducer {
|
|
11
|
+
readonly canvas: HTMLCanvasElement | OffscreenCanvas;
|
|
12
|
+
private backend;
|
|
13
|
+
private currentSource;
|
|
14
|
+
/** When true, frame() clears to a transparent background if the Source has no
|
|
15
|
+
* background_color — set during alpha (transparent) frame export. */
|
|
16
|
+
private transparentBackground;
|
|
17
|
+
private images;
|
|
18
|
+
private videos;
|
|
19
|
+
private audioBuffers;
|
|
20
|
+
private fontAtlases;
|
|
21
|
+
private svgRasters;
|
|
22
|
+
private maskedTexts;
|
|
23
|
+
private groupTargets;
|
|
24
|
+
/**
|
|
25
|
+
* Eviction epoch for the groupTargets pool — bumped once per frame() and once
|
|
26
|
+
* per renderFinalFrame(), threaded into RenderContext.frameIndex so pool
|
|
27
|
+
* entries can be stamped last-touched for frame-boundary LRU eviction. NOT a
|
|
28
|
+
* clean 1:1 output-frame ordinal: it advances per motion-blur SAMPLE (each
|
|
29
|
+
* export sample funnels through frame()) and the renderFinalFrame→frame()
|
|
30
|
+
* fallback bumps twice. Only ever compared for equality at eviction time, so
|
|
31
|
+
* gaps/jumps are harmless — do not treat it as a frame number.
|
|
32
|
+
*/
|
|
33
|
+
private frameIndex;
|
|
34
|
+
/**
|
|
35
|
+
* Soft cap (bytes) on the offscreen-FBO pool (groupTargets). After each render
|
|
36
|
+
* pass's endFrame(), entries NOT touched this frame are evicted LRU-first
|
|
37
|
+
* until total pooled bytes (logical w*h*4 per target) drop under this. SOFT:
|
|
38
|
+
* targets touched this frame are never evicted, so a single frame whose
|
|
39
|
+
* working set exceeds the cap stays above it (graceful — never thrashes).
|
|
40
|
+
* Default 512 MiB: a glassy element peaks at ~3 full-surface 1080p targets
|
|
41
|
+
* (::bd + ::fx + ::fx-scratch ≈ 25 MB), so 512 MiB holds ~18-20
|
|
42
|
+
* concurrently-active glass elements — well above any real frame's live set —
|
|
43
|
+
* while bounding the cross-timeline tail of inactive-element keys that is the
|
|
44
|
+
* unbounded-growth / cloud-BLACK cause. Logical bytes ≈ real VRAM only when
|
|
45
|
+
* pixelRatio=1 (the cloud Job, renderResolution='source'); high-DPI preview
|
|
46
|
+
* under-accounts by pixelRatio² (harmless — just a looser bound off-cloud).
|
|
47
|
+
* Override via setGroupTargetPoolCap(); ≤ 0 disables eviction (legacy).
|
|
48
|
+
*/
|
|
49
|
+
private groupTargetPoolCapBytes;
|
|
50
|
+
private luts;
|
|
51
|
+
/** Scratch targets for renderFinalFrame's blur accumulation. */
|
|
52
|
+
private blurTargets;
|
|
53
|
+
private initialized;
|
|
54
|
+
private disposed;
|
|
55
|
+
constructor(canvas: HTMLCanvasElement | OffscreenCanvas);
|
|
56
|
+
init(options?: RuntimeInitOptions): Promise<boolean>;
|
|
57
|
+
/** Which graphics API this runtime is using. Only valid after init() resolves true. */
|
|
58
|
+
get api(): 'webgpu' | 'webgl2' | null;
|
|
59
|
+
/** Set the current source. Does NOT trigger asset loading — call preload(). */
|
|
60
|
+
load(source: Source): void;
|
|
61
|
+
/**
|
|
62
|
+
* Load every external asset referenced by the current source. Images
|
|
63
|
+
* and videos are downloaded; fonts are requested via FontFace API.
|
|
64
|
+
* Idempotent — already-loaded URLs are skipped.
|
|
65
|
+
*/
|
|
66
|
+
preload(source?: Source): Promise<void>;
|
|
67
|
+
private preloadAudio;
|
|
68
|
+
/**
|
|
69
|
+
* Decode a video's embedded audio track. decodeAudioData accepts MP4
|
|
70
|
+
* containers directly (it extracts the first audio track), so this is
|
|
71
|
+
* the same loadAudio path audio elements use. Failures are expected
|
|
72
|
+
* (video without audio) and logged at debug. Workers skip — the
|
|
73
|
+
* main-thread AudioScheduler owns preview audio.
|
|
74
|
+
*/
|
|
75
|
+
private preloadVideoAudio;
|
|
76
|
+
private preloadLut;
|
|
77
|
+
private preloadImage;
|
|
78
|
+
/**
|
|
79
|
+
* Preload an arbitrary image URL into the shared image cache (used by
|
|
80
|
+
* image elements AND material normal maps, §4.8 Phase 2). Normal maps
|
|
81
|
+
* upload as plain rgba8unorm and are sampled linearly — no premultiply
|
|
82
|
+
* or sRGB transform corrupts the encoded normals.
|
|
83
|
+
*/
|
|
84
|
+
/** Average color of each loaded equirect environment image (§4.8). */
|
|
85
|
+
private envAvg;
|
|
86
|
+
/**
|
|
87
|
+
* Preload an equirect environment image AND compute its average color
|
|
88
|
+
* (downscale to 1×1) for the roughness-blurred reflection fallback.
|
|
89
|
+
*/
|
|
90
|
+
private preloadEnvImage;
|
|
91
|
+
private preloadImageUrl;
|
|
92
|
+
private preloadVideo;
|
|
93
|
+
/** Whether a decodable video asset exists for this URL. */
|
|
94
|
+
hasVideoAsset(url: string): boolean;
|
|
95
|
+
/**
|
|
96
|
+
* Walk the element tree and collect every ACTIVE video element with
|
|
97
|
+
* the LOCAL clock value it should be evaluated at. Groups translate
|
|
98
|
+
* the clock (child times are group-relative) and, with time_remap
|
|
99
|
+
* (§5.8.4), WARP it — so nested videos inside speed-ramped/frozen/
|
|
100
|
+
* reversed groups decode the right frames. Fixes the former flat
|
|
101
|
+
* scan, which never updated videos nested in groups at all.
|
|
102
|
+
*/
|
|
103
|
+
private collectActiveVideos;
|
|
104
|
+
/**
|
|
105
|
+
* Decode + upload the exact video frame each active frameSource-backed
|
|
106
|
+
* video element needs at composition time `time`. Await this before
|
|
107
|
+
* the synchronous `frame(time)` pass in contexts that use the
|
|
108
|
+
* WebCodecs path (the playback worker). Element-backed and externally
|
|
109
|
+
* pumped assets are untouched.
|
|
110
|
+
*/
|
|
111
|
+
prepareVideoFrames(time: number): Promise<void>;
|
|
112
|
+
/**
|
|
113
|
+
* Feed one decoded video frame for a source URL from outside the
|
|
114
|
+
* runtime. This is the worker-context video path: the host decodes
|
|
115
|
+
* with an HTMLVideoElement on the main thread, transfers ImageBitmaps
|
|
116
|
+
* here, and the video renderer samples the resulting texture exactly
|
|
117
|
+
* like an element-backed asset.
|
|
118
|
+
*
|
|
119
|
+
* The bitmap is uploaded immediately and then closed. If the media
|
|
120
|
+
* dimensions change (different bitmap size), the texture is recreated.
|
|
121
|
+
*/
|
|
122
|
+
pushExternalVideoFrame(url: string, bitmap: ImageBitmap): void;
|
|
123
|
+
/** Render one frame at the given time. Synchronous. */
|
|
124
|
+
frame(time: number): void;
|
|
125
|
+
/**
|
|
126
|
+
* Whole-frame bloom post (§4.8): extract pixels above the threshold,
|
|
127
|
+
* Gaussian-blur them, and add them back over the scene. Bright regions
|
|
128
|
+
* (specular highlights, emissive surfaces, bright media) bleed light;
|
|
129
|
+
* the amount is driven by each region's own brightness. Draws the final
|
|
130
|
+
* composite to the CURRENT target (the surface). Reuses blur slots 3/4.
|
|
131
|
+
*/
|
|
132
|
+
private applyBloom;
|
|
133
|
+
/**
|
|
134
|
+
* Render one frame WITH source-level motion blur (§2.1) — the
|
|
135
|
+
* preview's "final quality" path, used when the playhead is parked.
|
|
136
|
+
* Renders N sub-frame samples into an offscreen layer and keeps a
|
|
137
|
+
* GPU running average (avg_k = avg_{k-1}·k/(k+1) + sample·1/(k+1)),
|
|
138
|
+
* then composites the result to the canvas. Within a few 8-bit
|
|
139
|
+
* rounding steps of the exporter's exact float average — preview
|
|
140
|
+
* parity, not the normative path. Falls back to frame() when the
|
|
141
|
+
* source has no motion blur. Video textures are decoded once at the
|
|
142
|
+
* frame time (call prepareVideoFrames first), not per sample —
|
|
143
|
+
* WebGPU executes the whole frame's draws at submit, so per-sample
|
|
144
|
+
* uploads would all show the last sample's pixels anyway.
|
|
145
|
+
*/
|
|
146
|
+
renderFinalFrame(time: number, sampleOverride?: number): void;
|
|
147
|
+
/** Resolve when all submitted GPU work has executed (see Backend.finish). */
|
|
148
|
+
gpuFinish(): Promise<void>;
|
|
149
|
+
/**
|
|
150
|
+
* Set the soft cap (bytes) for the offscreen-FBO pool. ≤ 0 disables eviction
|
|
151
|
+
* (unbounded — the legacy behavior). Lets the cloud render Job tighten the cap
|
|
152
|
+
* on memory-constrained SwiftShader instances.
|
|
153
|
+
*/
|
|
154
|
+
setGroupTargetPoolCap(bytes: number): void;
|
|
155
|
+
/**
|
|
156
|
+
* Frame-boundary LRU eviction of the groupTargets offscreen-FBO pool. MUST be
|
|
157
|
+
* called only AFTER backend.endFrame() (post queue.submit on WebGPU) so
|
|
158
|
+
* destroyRenderTarget()'s synchronous gpuTexture.destroy() can never race a
|
|
159
|
+
* not-yet-submitted command encoder. Entries touched THIS frame (lastTouched
|
|
160
|
+
* === this.frameIndex) are never candidates; stale entries are dropped
|
|
161
|
+
* least-recently-touched first until total pooled bytes (w*h*4) fall under the
|
|
162
|
+
* cap. Safe because every pooled target is fully rewritten (create-or-reuse →
|
|
163
|
+
* pushTarget+clear+draw) each frame it is used, so evicting an unused entry
|
|
164
|
+
* only costs a realloc next time. No double-destroy: delete() removes the
|
|
165
|
+
* entry, so the size-change path (group.ts/scene.ts) and dispose() never see
|
|
166
|
+
* it again. MUST stay STATELESS across calls (no cached candidate/untouched
|
|
167
|
+
* set) — frameIndex can advance >1 per output frame (per motion-blur sample +
|
|
168
|
+
* the renderFinalFrame→frame() fallback).
|
|
169
|
+
*/
|
|
170
|
+
private evictGroupTargets;
|
|
171
|
+
private acquireBlurTarget;
|
|
172
|
+
/**
|
|
173
|
+
* Render one frame at the given time, awaiting any per-element async
|
|
174
|
+
* work (video seeking) first. Used by the exporter to render frames
|
|
175
|
+
* deterministically.
|
|
176
|
+
*/
|
|
177
|
+
renderAsync(source: Source, time: number): Promise<void>;
|
|
178
|
+
/**
|
|
179
|
+
* Export to MP4. Renders frames serially through the same backend used
|
|
180
|
+
* for preview — the canvas visibly resizes during export. For an off-
|
|
181
|
+
* screen export, construct a separate ClipkitRuntime around an
|
|
182
|
+
* OffscreenCanvas at the desired dimensions.
|
|
183
|
+
*/
|
|
184
|
+
/**
|
|
185
|
+
* Render each frame and stream its PNG (with alpha when `alpha`) to `onFrame`.
|
|
186
|
+
* The transparent export path — the PNGs are assembled by a server-side ffmpeg
|
|
187
|
+
* (ProRes 4444 / VP9-alpha). WebCodecs can't encode alpha, so this is the only
|
|
188
|
+
* route to transparent output.
|
|
189
|
+
*/
|
|
190
|
+
/**
|
|
191
|
+
* Mix all of the loaded Source's audio (audio elements + video-embedded
|
|
192
|
+
* tracks) into one AudioBuffer for export. Shared by both export paths —
|
|
193
|
+
* the opaque MP4 path (export → WebCodecs muxer) and the transparent frame
|
|
194
|
+
* path (exportFrames → WAV → ffmpeg) — so they never diverge. Returns null
|
|
195
|
+
* when the comp has no audio (or the mix fails); the caller exports silently.
|
|
196
|
+
*/
|
|
197
|
+
private mixExportAudio;
|
|
198
|
+
exportFrames(options: {
|
|
199
|
+
framerate?: number;
|
|
200
|
+
alpha?: boolean;
|
|
201
|
+
onFrame: (index: number, pngBase64: string) => void | Promise<void>;
|
|
202
|
+
/**
|
|
203
|
+
* Receives the mixed audio as a 16-bit PCM WAV (raw bytes) once, before
|
|
204
|
+
* the frames stream. Not called when the comp has no audio. The frame
|
|
205
|
+
* path has no muxer, so audio rides as a separate WAV the server-side
|
|
206
|
+
* ffmpeg maps in as a second input.
|
|
207
|
+
*/
|
|
208
|
+
onAudio?: (wav: ArrayBuffer) => void | Promise<void>;
|
|
209
|
+
onProgress?: (progress: number) => void;
|
|
210
|
+
}): Promise<number>;
|
|
211
|
+
export(options?: ExportOptions): Promise<Blob>;
|
|
212
|
+
/** Release all GPU resources. After this the runtime is unusable. */
|
|
213
|
+
dispose(): void;
|
|
214
|
+
private makeContext;
|
|
215
|
+
}
|
|
216
|
+
//# sourceMappingURL=runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
|