@smoove/core 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (307) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +80 -0
  3. package/dist/animation/color.d.ts +9 -0
  4. package/dist/animation/color.d.ts.map +1 -0
  5. package/dist/animation/color.js +224 -0
  6. package/dist/animation/color.js.map +1 -0
  7. package/dist/animation/easing.d.ts +22 -0
  8. package/dist/animation/easing.d.ts.map +1 -0
  9. package/dist/animation/easing.js +59 -0
  10. package/dist/animation/easing.js.map +1 -0
  11. package/dist/animation/interpolate-colors.d.ts +7 -0
  12. package/dist/animation/interpolate-colors.d.ts.map +1 -0
  13. package/dist/animation/interpolate-colors.js +19 -0
  14. package/dist/animation/interpolate-colors.js.map +1 -0
  15. package/dist/animation/interpolate.d.ts +12 -0
  16. package/dist/animation/interpolate.d.ts.map +1 -0
  17. package/dist/animation/interpolate.js +65 -0
  18. package/dist/animation/interpolate.js.map +1 -0
  19. package/dist/audio/asset.d.ts +21 -0
  20. package/dist/audio/asset.d.ts.map +1 -0
  21. package/dist/audio/asset.js +2 -0
  22. package/dist/audio/asset.js.map +1 -0
  23. package/dist/audio/audio-driver.d.ts +34 -0
  24. package/dist/audio/audio-driver.d.ts.map +1 -0
  25. package/dist/audio/audio-driver.js +2 -0
  26. package/dist/audio/audio-driver.js.map +1 -0
  27. package/dist/audio/audio-for-preview.d.ts +12 -0
  28. package/dist/audio/audio-for-preview.d.ts.map +1 -0
  29. package/dist/audio/audio-for-preview.js +70 -0
  30. package/dist/audio/audio-for-preview.js.map +1 -0
  31. package/dist/audio/audio-for-rendering.d.ts +16 -0
  32. package/dist/audio/audio-for-rendering.d.ts.map +1 -0
  33. package/dist/audio/audio-for-rendering.js +32 -0
  34. package/dist/audio/audio-for-rendering.js.map +1 -0
  35. package/dist/audio/audio-source-browser.d.ts +30 -0
  36. package/dist/audio/audio-source-browser.d.ts.map +1 -0
  37. package/dist/audio/audio-source-browser.js +139 -0
  38. package/dist/audio/audio-source-browser.js.map +1 -0
  39. package/dist/audio/audio-source.d.ts +38 -0
  40. package/dist/audio/audio-source.d.ts.map +1 -0
  41. package/dist/audio/audio-source.js +2 -0
  42. package/dist/audio/audio-source.js.map +1 -0
  43. package/dist/audio/index.d.ts +45 -0
  44. package/dist/audio/index.d.ts.map +1 -0
  45. package/dist/audio/index.js +143 -0
  46. package/dist/audio/index.js.map +1 -0
  47. package/dist/audio/mixer.d.ts +43 -0
  48. package/dist/audio/mixer.d.ts.map +1 -0
  49. package/dist/audio/mixer.js +51 -0
  50. package/dist/audio/mixer.js.map +1 -0
  51. package/dist/audio/types.d.ts +31 -0
  52. package/dist/audio/types.d.ts.map +1 -0
  53. package/dist/audio/types.js +2 -0
  54. package/dist/audio/types.js.map +1 -0
  55. package/dist/block.d.ts +16 -0
  56. package/dist/block.d.ts.map +1 -0
  57. package/dist/block.js +173 -0
  58. package/dist/block.js.map +1 -0
  59. package/dist/composition.d.ts.map +1 -0
  60. package/dist/composition.js.map +1 -0
  61. package/dist/easing.d.ts +22 -0
  62. package/dist/easing.d.ts.map +1 -0
  63. package/dist/easing.js +59 -0
  64. package/dist/easing.js.map +1 -0
  65. package/dist/emitter.d.ts +7 -0
  66. package/dist/emitter.d.ts.map +1 -0
  67. package/dist/emitter.js +29 -0
  68. package/dist/emitter.js.map +1 -0
  69. package/dist/engine/composition.d.ts +182 -0
  70. package/dist/engine/composition.d.ts.map +1 -0
  71. package/dist/engine/composition.js +527 -0
  72. package/dist/engine/composition.js.map +1 -0
  73. package/dist/engine/emitter.d.ts +7 -0
  74. package/dist/engine/emitter.d.ts.map +1 -0
  75. package/dist/engine/emitter.js +29 -0
  76. package/dist/engine/emitter.js.map +1 -0
  77. package/dist/engine/environment.d.ts +30 -0
  78. package/dist/engine/environment.d.ts.map +1 -0
  79. package/dist/engine/environment.js +27 -0
  80. package/dist/engine/environment.js.map +1 -0
  81. package/dist/engine/offsets.d.ts +39 -0
  82. package/dist/engine/offsets.d.ts.map +1 -0
  83. package/dist/engine/offsets.js +54 -0
  84. package/dist/engine/offsets.js.map +1 -0
  85. package/dist/engine/runtime-defaults.d.ts +50 -0
  86. package/dist/engine/runtime-defaults.d.ts.map +1 -0
  87. package/dist/engine/runtime-defaults.js +77 -0
  88. package/dist/engine/runtime-defaults.js.map +1 -0
  89. package/dist/engine/sequence.d.ts +44 -0
  90. package/dist/engine/sequence.d.ts.map +1 -0
  91. package/dist/engine/sequence.js +101 -0
  92. package/dist/engine/sequence.js.map +1 -0
  93. package/dist/engine/series.d.ts +40 -0
  94. package/dist/engine/series.d.ts.map +1 -0
  95. package/dist/engine/series.js +58 -0
  96. package/dist/engine/series.js.map +1 -0
  97. package/dist/engine/signal.d.ts +10 -0
  98. package/dist/engine/signal.d.ts.map +1 -0
  99. package/dist/engine/signal.js +39 -0
  100. package/dist/engine/signal.js.map +1 -0
  101. package/dist/environment.d.ts.map +1 -0
  102. package/dist/environment.js.map +1 -0
  103. package/dist/flex-engine.d.ts +31 -0
  104. package/dist/flex-engine.d.ts.map +1 -0
  105. package/dist/flex-engine.js +186 -0
  106. package/dist/flex-engine.js.map +1 -0
  107. package/dist/flex-types.d.ts +165 -0
  108. package/dist/flex-types.d.ts.map +1 -0
  109. package/dist/flex-types.js +2 -0
  110. package/dist/flex-types.js.map +1 -0
  111. package/dist/flex.d.ts +26 -0
  112. package/dist/flex.d.ts.map +1 -0
  113. package/dist/flex.js +179 -0
  114. package/dist/flex.js.map +1 -0
  115. package/dist/image.d.ts +10 -0
  116. package/dist/image.d.ts.map +1 -0
  117. package/dist/image.js +156 -0
  118. package/dist/image.js.map +1 -0
  119. package/dist/index.d.ts +34 -0
  120. package/dist/index.d.ts.map +1 -0
  121. package/dist/index.js +28 -0
  122. package/dist/index.js.map +1 -0
  123. package/dist/interpolate-colors.d.ts +7 -0
  124. package/dist/interpolate-colors.d.ts.map +1 -0
  125. package/dist/interpolate-colors.js +240 -0
  126. package/dist/interpolate-colors.js.map +1 -0
  127. package/dist/interpolate.d.ts +12 -0
  128. package/dist/interpolate.d.ts.map +1 -0
  129. package/dist/interpolate.js +65 -0
  130. package/dist/interpolate.js.map +1 -0
  131. package/dist/layout/block.d.ts +54 -0
  132. package/dist/layout/block.d.ts.map +1 -0
  133. package/dist/layout/block.js +186 -0
  134. package/dist/layout/block.js.map +1 -0
  135. package/dist/layout/contract.d.ts +41 -0
  136. package/dist/layout/contract.d.ts.map +1 -0
  137. package/dist/layout/contract.js +8 -0
  138. package/dist/layout/contract.js.map +1 -0
  139. package/dist/layout/flex/engine.d.ts +31 -0
  140. package/dist/layout/flex/engine.d.ts.map +1 -0
  141. package/dist/layout/flex/engine.js +186 -0
  142. package/dist/layout/flex/engine.js.map +1 -0
  143. package/dist/layout/flex/flex.d.ts +31 -0
  144. package/dist/layout/flex/flex.d.ts.map +1 -0
  145. package/dist/layout/flex/flex.js +175 -0
  146. package/dist/layout/flex/flex.js.map +1 -0
  147. package/dist/layout/flex/mixin.d.ts +52 -0
  148. package/dist/layout/flex/mixin.d.ts.map +1 -0
  149. package/dist/layout/flex/mixin.js +114 -0
  150. package/dist/layout/flex/mixin.js.map +1 -0
  151. package/dist/layout/flex/types.d.ts +31 -0
  152. package/dist/layout/flex/types.d.ts.map +1 -0
  153. package/dist/layout/flex/types.js +2 -0
  154. package/dist/layout/flex/types.js.map +1 -0
  155. package/dist/layout/image.d.ts +46 -0
  156. package/dist/layout/image.d.ts.map +1 -0
  157. package/dist/layout/image.js +198 -0
  158. package/dist/layout/image.js.map +1 -0
  159. package/dist/layout/shapes.d.ts +72 -0
  160. package/dist/layout/shapes.d.ts.map +1 -0
  161. package/dist/layout/shapes.js +29 -0
  162. package/dist/layout/shapes.js.map +1 -0
  163. package/dist/layout/text/font.d.ts +92 -0
  164. package/dist/layout/text/font.d.ts.map +1 -0
  165. package/dist/layout/text/font.js +166 -0
  166. package/dist/layout/text/font.js.map +1 -0
  167. package/dist/layout/text/geometry.d.ts +31 -0
  168. package/dist/layout/text/geometry.d.ts.map +1 -0
  169. package/dist/layout/text/geometry.js +81 -0
  170. package/dist/layout/text/geometry.js.map +1 -0
  171. package/dist/layout/text/text.d.ts +98 -0
  172. package/dist/layout/text/text.d.ts.map +1 -0
  173. package/dist/layout/text/text.js +676 -0
  174. package/dist/layout/text/text.js.map +1 -0
  175. package/dist/layout/text/types.d.ts +103 -0
  176. package/dist/layout/text/types.d.ts.map +1 -0
  177. package/dist/layout/text/types.js +2 -0
  178. package/dist/layout/text/types.js.map +1 -0
  179. package/dist/media/audio/asset.d.ts +21 -0
  180. package/dist/media/audio/asset.d.ts.map +1 -0
  181. package/dist/media/audio/asset.js +2 -0
  182. package/dist/media/audio/asset.js.map +1 -0
  183. package/dist/media/audio/audio-driver.d.ts +34 -0
  184. package/dist/media/audio/audio-driver.d.ts.map +1 -0
  185. package/dist/media/audio/audio-driver.js +2 -0
  186. package/dist/media/audio/audio-driver.js.map +1 -0
  187. package/dist/media/audio/audio-for-preview.d.ts +47 -0
  188. package/dist/media/audio/audio-for-preview.d.ts.map +1 -0
  189. package/dist/media/audio/audio-for-preview.js +232 -0
  190. package/dist/media/audio/audio-for-preview.js.map +1 -0
  191. package/dist/media/audio/audio-for-rendering.d.ts +16 -0
  192. package/dist/media/audio/audio-for-rendering.d.ts.map +1 -0
  193. package/dist/media/audio/audio-for-rendering.js +32 -0
  194. package/dist/media/audio/audio-for-rendering.js.map +1 -0
  195. package/dist/media/audio/audio-source-browser.d.ts +30 -0
  196. package/dist/media/audio/audio-source-browser.d.ts.map +1 -0
  197. package/dist/media/audio/audio-source-browser.js +139 -0
  198. package/dist/media/audio/audio-source-browser.js.map +1 -0
  199. package/dist/media/audio/audio-source-mediabunny.d.ts +45 -0
  200. package/dist/media/audio/audio-source-mediabunny.d.ts.map +1 -0
  201. package/dist/media/audio/audio-source-mediabunny.js +79 -0
  202. package/dist/media/audio/audio-source-mediabunny.js.map +1 -0
  203. package/dist/media/audio/audio-source.d.ts +38 -0
  204. package/dist/media/audio/audio-source.d.ts.map +1 -0
  205. package/dist/media/audio/audio-source.js +2 -0
  206. package/dist/media/audio/audio-source.js.map +1 -0
  207. package/dist/media/audio/index.d.ts +57 -0
  208. package/dist/media/audio/index.d.ts.map +1 -0
  209. package/dist/media/audio/index.js +170 -0
  210. package/dist/media/audio/index.js.map +1 -0
  211. package/dist/media/audio/mixer.d.ts +43 -0
  212. package/dist/media/audio/mixer.d.ts.map +1 -0
  213. package/dist/media/audio/mixer.js +51 -0
  214. package/dist/media/audio/mixer.js.map +1 -0
  215. package/dist/media/audio/shared-audio-context.d.ts +30 -0
  216. package/dist/media/audio/shared-audio-context.d.ts.map +1 -0
  217. package/dist/media/audio/shared-audio-context.js +68 -0
  218. package/dist/media/audio/shared-audio-context.js.map +1 -0
  219. package/dist/media/audio/types.d.ts +31 -0
  220. package/dist/media/audio/types.d.ts.map +1 -0
  221. package/dist/media/audio/types.js +2 -0
  222. package/dist/media/audio/types.js.map +1 -0
  223. package/dist/media/media-marker.d.ts +26 -0
  224. package/dist/media/media-marker.d.ts.map +1 -0
  225. package/dist/media/media-marker.js +26 -0
  226. package/dist/media/media-marker.js.map +1 -0
  227. package/dist/media/media-time.d.ts +17 -0
  228. package/dist/media/media-time.d.ts.map +1 -0
  229. package/dist/media/media-time.js +17 -0
  230. package/dist/media/media-time.js.map +1 -0
  231. package/dist/media/video/driver.d.ts +31 -0
  232. package/dist/media/video/driver.d.ts.map +1 -0
  233. package/dist/media/video/driver.js +3 -0
  234. package/dist/media/video/driver.js.map +1 -0
  235. package/dist/media/video/index.d.ts +66 -0
  236. package/dist/media/video/index.d.ts.map +1 -0
  237. package/dist/media/video/index.js +372 -0
  238. package/dist/media/video/index.js.map +1 -0
  239. package/dist/media/video/types.d.ts +36 -0
  240. package/dist/media/video/types.d.ts.map +1 -0
  241. package/dist/media/video/types.js +2 -0
  242. package/dist/media/video/types.js.map +1 -0
  243. package/dist/media/video/video-for-preview.d.ts +17 -0
  244. package/dist/media/video/video-for-preview.d.ts.map +1 -0
  245. package/dist/media/video/video-for-preview.js +30 -0
  246. package/dist/media/video/video-for-preview.js.map +1 -0
  247. package/dist/media/video/video-for-rendering.d.ts +17 -0
  248. package/dist/media/video/video-for-rendering.d.ts.map +1 -0
  249. package/dist/media/video/video-for-rendering.js +59 -0
  250. package/dist/media/video/video-for-rendering.js.map +1 -0
  251. package/dist/media/video/video-source-browser.d.ts +37 -0
  252. package/dist/media/video/video-source-browser.d.ts.map +1 -0
  253. package/dist/media/video/video-source-browser.js +171 -0
  254. package/dist/media/video/video-source-browser.js.map +1 -0
  255. package/dist/media/video/video-source-mediabunny.d.ts +69 -0
  256. package/dist/media/video/video-source-mediabunny.d.ts.map +1 -0
  257. package/dist/media/video/video-source-mediabunny.js +236 -0
  258. package/dist/media/video/video-source-mediabunny.js.map +1 -0
  259. package/dist/media/video/video-source.d.ts +48 -0
  260. package/dist/media/video/video-source.d.ts.map +1 -0
  261. package/dist/media/video/video-source.js +2 -0
  262. package/dist/media/video/video-source.js.map +1 -0
  263. package/dist/media-marker.d.ts +19 -0
  264. package/dist/media-marker.d.ts.map +1 -0
  265. package/dist/media-marker.js +19 -0
  266. package/dist/media-marker.js.map +1 -0
  267. package/dist/media-time.d.ts +17 -0
  268. package/dist/media-time.d.ts.map +1 -0
  269. package/dist/media-time.js +17 -0
  270. package/dist/media-time.js.map +1 -0
  271. package/dist/signal.d.ts +10 -0
  272. package/dist/signal.d.ts.map +1 -0
  273. package/dist/signal.js +39 -0
  274. package/dist/signal.js.map +1 -0
  275. package/dist/text.d.ts +91 -0
  276. package/dist/text.d.ts.map +1 -0
  277. package/dist/text.js +704 -0
  278. package/dist/text.js.map +1 -0
  279. package/dist/video/driver.d.ts +31 -0
  280. package/dist/video/driver.d.ts.map +1 -0
  281. package/dist/video/driver.js +3 -0
  282. package/dist/video/driver.js.map +1 -0
  283. package/dist/video/index.d.ts +45 -0
  284. package/dist/video/index.d.ts.map +1 -0
  285. package/dist/video/index.js +276 -0
  286. package/dist/video/index.js.map +1 -0
  287. package/dist/video/types.d.ts +35 -0
  288. package/dist/video/types.d.ts.map +1 -0
  289. package/dist/video/types.js +2 -0
  290. package/dist/video/types.js.map +1 -0
  291. package/dist/video/video-for-preview.d.ts +12 -0
  292. package/dist/video/video-for-preview.d.ts.map +1 -0
  293. package/dist/video/video-for-preview.js +73 -0
  294. package/dist/video/video-for-preview.js.map +1 -0
  295. package/dist/video/video-for-rendering.d.ts +16 -0
  296. package/dist/video/video-for-rendering.d.ts.map +1 -0
  297. package/dist/video/video-for-rendering.js +45 -0
  298. package/dist/video/video-for-rendering.js.map +1 -0
  299. package/dist/video/video-source-browser.d.ts +37 -0
  300. package/dist/video/video-source-browser.d.ts.map +1 -0
  301. package/dist/video/video-source-browser.js +171 -0
  302. package/dist/video/video-source-browser.js.map +1 -0
  303. package/dist/video/video-source.d.ts +48 -0
  304. package/dist/video/video-source.d.ts.map +1 -0
  305. package/dist/video/video-source.js +2 -0
  306. package/dist/video/video-source.js.map +1 -0
  307. package/package.json +42 -0
@@ -0,0 +1,182 @@
1
+ import Konva from "konva";
2
+ import type { AudioAsset } from "../media/audio/asset.js";
3
+ import { AudioMixer } from "../media/audio/mixer.js";
4
+ import { type Environment, type EnvironmentMode } from "./environment.js";
5
+ import { type SequenceProvider } from "./sequence.js";
6
+ import { type ReadonlySignal } from "./signal.js";
7
+ export type CompositionOptions<P extends Record<string, unknown> = Record<string, unknown>> = Konva.StageConfig & {
8
+ id: string;
9
+ fps: number;
10
+ durationInFrames: number;
11
+ loop?: boolean;
12
+ /** Initial props handed to the scene. Read live with `comp.props.get()` in
13
+ updaters; pushed to with `comp.setProps()` by a player or the studio. */
14
+ props?: P;
15
+ /** Force the runtime environment. Defaults to ambient detection (see `detectEnvironment`). */
16
+ mode?: EnvironmentMode;
17
+ };
18
+ export type CompositionEvent = {
19
+ frame: number;
20
+ durationInFrames: number;
21
+ };
22
+ /**
23
+ * Asset-buffering state. `"idle"` — nothing pending; `"buffering"` — one or more
24
+ * assets (fonts, …) are still loading; `"ready"` — everything registered so far
25
+ * has settled. Observe it to show a spinner; `play()` honors it (see below).
26
+ */
27
+ export type BufferState = "idle" | "buffering" | "ready";
28
+ export type CompositionEventMap = {
29
+ play: CompositionEvent;
30
+ stop: CompositionEvent;
31
+ time: CompositionEvent;
32
+ };
33
+ export type CompositionEventName = keyof CompositionEventMap;
34
+ export declare function getComposition(stage: Konva.Stage): Composition | null;
35
+ export declare class Composition<P extends Record<string, unknown> = Record<string, unknown>> extends Konva.Stage {
36
+ readonly fps: number;
37
+ readonly environment: Environment;
38
+ /** Composition-level audio bus — master volume/mute scaling every Video and Audio. */
39
+ readonly mixer: AudioMixer;
40
+ readonly frame: ReadonlySignal<number>;
41
+ readonly isPlaying: ReadonlySignal<boolean>;
42
+ readonly durationInFrames: ReadonlySignal<number>;
43
+ readonly isStopped: ReadonlySignal<boolean>;
44
+ readonly isPaused: ReadonlySignal<boolean>;
45
+ readonly loop: ReadonlySignal<boolean>;
46
+ /** Playback speed multiplier. 1 = realtime; negative plays in reverse. */
47
+ readonly playbackRate: ReadonlySignal<number>;
48
+ /** Live props the scene reads. Pushed to with {@link setProps} by a player or
49
+ the studio form; updaters read it via `comp.props.get()`. */
50
+ readonly props: ReadonlySignal<P>;
51
+ /** Asset-buffering state — `"idle"` | `"buffering"` | `"ready"`. See {@link registerAsset}. */
52
+ readonly buffer: ReadonlySignal<BufferState>;
53
+ /** Convenience: `buffer.get() === "buffering"`. */
54
+ readonly isBuffering: ReadonlySignal<boolean>;
55
+ private readonly _frame;
56
+ private readonly _props;
57
+ private readonly _isPlaying;
58
+ private readonly _durationInFrames;
59
+ private readonly _loop;
60
+ private readonly _playbackRate;
61
+ private readonly _buffer;
62
+ private readonly _emitter;
63
+ private _rafId;
64
+ private _startWallMs;
65
+ private _startFrame;
66
+ private _suspended;
67
+ private readonly _assets;
68
+ private _readyWaiters;
69
+ private _resumeOnReady;
70
+ private readonly _renderHandles;
71
+ private _nextHandle;
72
+ private _renderWaiters;
73
+ private _audioAssets;
74
+ private _captureCanvas;
75
+ constructor(opts: CompositionOptions<P>);
76
+ on(evtStr: any, handler: any): any;
77
+ off(evtStr?: any, handler?: any): any;
78
+ add(first: Konva.Layer | SequenceProvider, ...rest: (Konva.Layer | SequenceProvider)[]): this;
79
+ play(): void;
80
+ private _startClock;
81
+ destroy(): this;
82
+ pause(): void;
83
+ /** `true` between {@link suspend} and {@link resume}. */
84
+ get isSuspended(): boolean;
85
+ /**
86
+ * Release background work — halt the clock and tell every media node to drop
87
+ * its source, so a composition that isn't being shown (e.g. a `<smoove-player>`
88
+ * removed from the DOM) stops downloading/decoding video and audio. This does
89
+ * NOT tear the composition down: the scene graph stays intact and {@link resume}
90
+ * re-acquires the sources. No-op if already suspended.
91
+ */
92
+ suspend(): void;
93
+ /**
94
+ * Undo {@link suspend}: re-acquire the media sources released while suspended
95
+ * (they re-download and redraw once ready) and repaint the current frame.
96
+ * No-op if not suspended.
97
+ */
98
+ resume(): void;
99
+ /** Walk every media node (Video/Audio) across all sequences. */
100
+ private _forEachMedia;
101
+ stop(): void;
102
+ setLoop(value: boolean): void;
103
+ /**
104
+ * Set the playback speed multiplier. `1` is realtime; `2` is double speed;
105
+ * negative values play in reverse. Clamped to `[-10, 10]`; `0` throws (it
106
+ * would freeze the clock). Changing the rate mid-playback resyncs the clock
107
+ * so the new speed takes effect from the current frame onward.
108
+ */
109
+ setPlaybackRate(rate: number): void;
110
+ setFrame(target: number): void;
111
+ /**
112
+ * Re-apply the **current** frame to every sequence without advancing the
113
+ * playhead — the engine's "re-render" hook. Call this after mutating external
114
+ * state that updaters read (e.g. live-edited props) so the change shows
115
+ * immediately while paused. Updaters re-run, `Flex`/`Block` re-layout, and
116
+ * active sequences `batchDraw` — exactly like a normal tick at the same frame.
117
+ */
118
+ refresh(): void;
119
+ /**
120
+ * Replace the live props and re-render the current frame. Any holder — a bare
121
+ * `<smoove-player>` or the studio form — drives the scene by calling this; the
122
+ * `createSignal` `Object.is` guard skips a redundant refresh when nothing
123
+ * changed. Pass an updater to derive the next value from the previous one.
124
+ */
125
+ setProps(next: P | ((prev: P) => P)): void;
126
+ /**
127
+ * Register an outstanding asset load (e.g. a {@link Font}). While any asset is
128
+ * pending, {@link buffer} is `"buffering"`; once all settle it flips to
129
+ * `"ready"` and {@link whenReady} waiters resolve. A `play()` issued while
130
+ * buffering is deferred and starts automatically here. Errors are swallowed
131
+ * (the asset logs its own) so one bad asset can't wedge playback.
132
+ *
133
+ * This is the preview-side buffer; offline rendering uses the per-frame
134
+ * {@link delayRender}/{@link renderFrame} gate instead.
135
+ */
136
+ registerAsset(load: Promise<unknown>, _label?: string): void;
137
+ /** Resolves once no assets are pending — immediately if idle/ready. */
138
+ whenReady(): Promise<void>;
139
+ /**
140
+ * Register an outstanding async task that must finish before the current
141
+ * frame is considered fully rendered — Remotion's `delayRender`. Returns a
142
+ * handle to clear with {@link continueRender}.
143
+ */
144
+ delayRender(_label?: string): number;
145
+ /** Clear a {@link delayRender} handle; resolves `renderFrame()` once all clear. */
146
+ continueRender(handle: number): void;
147
+ /**
148
+ * Apply a frame and wait until all {@link delayRender} handles registered
149
+ * during that application clear. This is the offline / server render
150
+ * entrypoint — e.g. `for (f) { await comp.renderFrame(f); capture(); }`.
151
+ */
152
+ renderFrame(target: number): Promise<void>;
153
+ /**
154
+ * Composite every visible sequence layer into a single canvas and return it.
155
+ * Works headlessly (no DOM container needed); under the server skia backend
156
+ * the result is a skia `Canvas`, on which a renderer can call
157
+ * `.toBufferSync("raw")` for RGBA pixels.
158
+ *
159
+ * Unlike `Stage.toCanvas()`, this **reuses one scratch canvas** across calls.
160
+ * Allocating a fresh skia `Canvas` per frame leaks native memory (invisible to
161
+ * V8's GC), which balloons RSS and collapses throughput over a long render.
162
+ */
163
+ captureCanvas(): HTMLCanvasElement;
164
+ /** @internal — {@link RenderingAudioDriver} records one sample per audio per frame. */
165
+ _collectAudioAsset(asset: AudioAsset): void;
166
+ /**
167
+ * Audio samples collected during offline rendering — one per {@link Audio}
168
+ * per rendered frame. Feed these to an external mux pass (e.g. ffmpeg) to
169
+ * assemble the audio track. Empty during preview.
170
+ */
171
+ getAudioAssets(): AudioAsset[];
172
+ /** Reset the collected audio samples — call before re-rendering a range. */
173
+ clearAudioAssets(): void;
174
+ private _event;
175
+ private _applyFrame;
176
+ /** Hide every sequence (transparent stage) — used while buffering assets. */
177
+ private _hideAllSequences;
178
+ private _scheduleTick;
179
+ private _cancelTick;
180
+ private _tick;
181
+ }
182
+ //# sourceMappingURL=composition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composition.d.ts","sourceRoot":"","sources":["../../src/engine/composition.ts"],"names":[],"mappings":"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"}