frameyard 0.4.0 → 0.6.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 (175) hide show
  1. package/CHANGELOG.md +101 -0
  2. package/GLOSSARY.md +156 -24
  3. package/README.md +103 -31
  4. package/dist/cli.js +112 -19
  5. package/dist/cli.js.map +1 -1
  6. package/dist/composition/adapter.d.ts +30 -0
  7. package/dist/composition/adapter.d.ts.map +1 -0
  8. package/dist/composition/adapter.js +2 -0
  9. package/dist/composition/adapter.js.map +1 -0
  10. package/dist/composition/animation.d.ts +19 -0
  11. package/dist/composition/animation.d.ts.map +1 -0
  12. package/dist/composition/animation.js +55 -0
  13. package/dist/composition/animation.js.map +1 -0
  14. package/dist/composition/attributes.d.ts +7 -0
  15. package/dist/composition/attributes.d.ts.map +1 -0
  16. package/dist/composition/attributes.js +24 -0
  17. package/dist/composition/attributes.js.map +1 -0
  18. package/dist/composition/descriptor.d.ts +30 -0
  19. package/dist/composition/descriptor.d.ts.map +1 -0
  20. package/dist/composition/descriptor.js +188 -0
  21. package/dist/composition/descriptor.js.map +1 -0
  22. package/dist/composition/diagnostics.d.ts +12 -0
  23. package/dist/composition/diagnostics.d.ts.map +1 -0
  24. package/dist/composition/diagnostics.js +38 -0
  25. package/dist/composition/diagnostics.js.map +1 -0
  26. package/dist/composition/index.d.ts +12 -0
  27. package/dist/composition/index.d.ts.map +1 -0
  28. package/dist/composition/index.js +7 -0
  29. package/dist/composition/index.js.map +1 -0
  30. package/dist/composition/media.d.ts +27 -0
  31. package/dist/composition/media.d.ts.map +1 -0
  32. package/dist/composition/media.js +162 -0
  33. package/dist/composition/media.js.map +1 -0
  34. package/dist/composition/paths.d.ts +5 -0
  35. package/dist/composition/paths.d.ts.map +1 -0
  36. package/dist/composition/paths.js +16 -0
  37. package/dist/composition/paths.js.map +1 -0
  38. package/dist/composition/transcripts.d.ts +19 -0
  39. package/dist/composition/transcripts.d.ts.map +1 -0
  40. package/dist/composition/transcripts.js +57 -0
  41. package/dist/composition/transcripts.js.map +1 -0
  42. package/dist/composition/walk.d.ts +10 -0
  43. package/dist/composition/walk.d.ts.map +1 -0
  44. package/dist/composition/walk.js +32 -0
  45. package/dist/composition/walk.js.map +1 -0
  46. package/dist/contracts.d.ts +14 -0
  47. package/dist/contracts.d.ts.map +1 -1
  48. package/dist/contracts.js.map +1 -1
  49. package/dist/errors.d.ts +1 -1
  50. package/dist/errors.d.ts.map +1 -1
  51. package/dist/errors.js.map +1 -1
  52. package/dist/html/document-adapter.d.ts +5 -0
  53. package/dist/html/document-adapter.d.ts.map +1 -0
  54. package/dist/html/document-adapter.js +17 -0
  55. package/dist/html/document-adapter.js.map +1 -0
  56. package/dist/html/parse.d.ts +2 -6
  57. package/dist/html/parse.d.ts.map +1 -1
  58. package/dist/html/parse.js.map +1 -1
  59. package/dist/html/validate.d.ts.map +1 -1
  60. package/dist/html/validate.js +92 -375
  61. package/dist/html/validate.js.map +1 -1
  62. package/dist/index.d.ts +2 -0
  63. package/dist/index.d.ts.map +1 -1
  64. package/dist/index.js +1 -0
  65. package/dist/index.js.map +1 -1
  66. package/dist/preview/main.d.ts.map +1 -1
  67. package/dist/preview/main.js +93 -13
  68. package/dist/preview/main.js.map +1 -1
  69. package/dist/preview/timeline-data.d.ts +85 -0
  70. package/dist/preview/timeline-data.d.ts.map +1 -0
  71. package/dist/preview/timeline-data.js +2 -0
  72. package/dist/preview/timeline-data.js.map +1 -0
  73. package/dist/preview/timeline-host.d.ts +19 -0
  74. package/dist/preview/timeline-host.d.ts.map +1 -0
  75. package/dist/preview/timeline-host.js +297 -0
  76. package/dist/preview/timeline-host.js.map +1 -0
  77. package/dist/preview/timeline-main.d.ts +17 -0
  78. package/dist/preview/timeline-main.d.ts.map +1 -0
  79. package/dist/preview/timeline-main.js +364 -0
  80. package/dist/preview/timeline-main.js.map +1 -0
  81. package/dist/project.d.ts +16 -1
  82. package/dist/project.d.ts.map +1 -1
  83. package/dist/project.js +81 -26
  84. package/dist/project.js.map +1 -1
  85. package/dist/renderer/browser.d.ts +2 -0
  86. package/dist/renderer/browser.d.ts.map +1 -1
  87. package/dist/renderer/browser.js +38 -6
  88. package/dist/renderer/browser.js.map +1 -1
  89. package/dist/renderer/ffmpeg.d.ts +61 -0
  90. package/dist/renderer/ffmpeg.d.ts.map +1 -1
  91. package/dist/renderer/ffmpeg.js +198 -0
  92. package/dist/renderer/ffmpeg.js.map +1 -1
  93. package/dist/renderer/index.d.ts.map +1 -1
  94. package/dist/renderer/index.js +18 -7
  95. package/dist/renderer/index.js.map +1 -1
  96. package/dist/renderer/timeline.d.ts +109 -0
  97. package/dist/renderer/timeline.d.ts.map +1 -0
  98. package/dist/renderer/timeline.js +984 -0
  99. package/dist/renderer/timeline.js.map +1 -0
  100. package/dist/runtime/document-adapter.d.ts +4 -0
  101. package/dist/runtime/document-adapter.d.ts.map +1 -0
  102. package/dist/runtime/document-adapter.js +19 -0
  103. package/dist/runtime/document-adapter.js.map +1 -0
  104. package/dist/runtime/host.d.ts +2 -0
  105. package/dist/runtime/host.d.ts.map +1 -1
  106. package/dist/runtime/host.js +78 -183
  107. package/dist/runtime/host.js.map +1 -1
  108. package/dist/runtime/media.d.ts.map +1 -1
  109. package/dist/runtime/media.js +19 -50
  110. package/dist/runtime/media.js.map +1 -1
  111. package/dist/scaffold.d.ts.map +1 -1
  112. package/dist/scaffold.js +93 -23
  113. package/dist/scaffold.js.map +1 -1
  114. package/dist/server/preview-html.d.ts.map +1 -1
  115. package/dist/server/preview-html.js +15 -1
  116. package/dist/server/preview-html.js.map +1 -1
  117. package/dist/server/server.d.ts.map +1 -1
  118. package/dist/server/server.js +39 -1
  119. package/dist/server/server.js.map +1 -1
  120. package/dist/server/timeline-preview-data.d.ts +4 -0
  121. package/dist/server/timeline-preview-data.d.ts.map +1 -0
  122. package/dist/server/timeline-preview-data.js +97 -0
  123. package/dist/server/timeline-preview-data.js.map +1 -0
  124. package/dist/server/timeline-preview-html.d.ts +4 -0
  125. package/dist/server/timeline-preview-html.d.ts.map +1 -0
  126. package/dist/server/timeline-preview-html.js +227 -0
  127. package/dist/server/timeline-preview-html.js.map +1 -0
  128. package/dist/timeline/plan.d.ts +32 -0
  129. package/dist/timeline/plan.d.ts.map +1 -0
  130. package/dist/timeline/plan.js +68 -0
  131. package/dist/timeline/plan.js.map +1 -0
  132. package/dist/timeline/resolve.d.ts +60 -0
  133. package/dist/timeline/resolve.d.ts.map +1 -0
  134. package/dist/timeline/resolve.js +523 -0
  135. package/dist/timeline/resolve.js.map +1 -0
  136. package/dist/timeline/schema.d.ts +71 -0
  137. package/dist/timeline/schema.d.ts.map +1 -0
  138. package/dist/timeline/schema.js +425 -0
  139. package/dist/timeline/schema.js.map +1 -0
  140. package/dist/version.d.ts +1 -1
  141. package/dist/version.js +1 -1
  142. package/docs/adr/0002-make-frame-and-props-the-only-animation-state.md +2 -0
  143. package/docs/adr/0005-keep-parallel-rendering-opt-in-and-frame-ordered.md +2 -0
  144. package/docs/adr/0006-seek-embedded-media-from-the-frame-clock.md +4 -0
  145. package/docs/adr/0007-make-html-documents-the-composition-unit.md +1 -1
  146. package/docs/adr/0008-share-the-composition-document-grammar.md +18 -0
  147. package/docs/adr/0009-composite-production-frames-in-software.md +37 -0
  148. package/docs/adr/0010-make-timelines-the-render-unit.md +24 -0
  149. package/docs/adr/0011-compose-timeline-frames-in-a-live-browser-host.md +22 -0
  150. package/docs/adr/0012-render-timelines-with-segmented-lossless-clip-intermediates.md +31 -0
  151. package/docs/v0.1-design.md +135 -85
  152. package/examples/demo/README.md +11 -4
  153. package/examples/demo/timelines/demo.timeline.json +12 -0
  154. package/examples/demo/video.config.js +4 -0
  155. package/examples/video/README.md +105 -0
  156. package/examples/video/assets/clip.mp4 +0 -0
  157. package/examples/video/assets/clip.webm +0 -0
  158. package/examples/video/compositions/video-mp4.html +362 -0
  159. package/examples/video/compositions/video-overlay.html +350 -0
  160. package/examples/video/compositions/video.html +362 -0
  161. package/examples/video/props/video-timeline.json +10 -0
  162. package/examples/video/props/video.json +8 -0
  163. package/examples/video/scripts/make-clip.sh +109 -0
  164. package/examples/video/timelines/video-timeline-mp4.timeline.json +44 -0
  165. package/examples/video/timelines/video-timeline.timeline.json +44 -0
  166. package/examples/video/video.config.js +12 -0
  167. package/examples/webgl/README.md +30 -0
  168. package/examples/webgl/compositions/webgl.controller.js +200 -0
  169. package/examples/webgl/compositions/webgl.html +215 -0
  170. package/examples/webgl/props/webgl.json +6 -0
  171. package/examples/webgl/video.config.js +5 -0
  172. package/package.json +4 -2
  173. package/skills/frameyard/SKILL.md +18 -13
  174. package/skills/frameyard/references/json-results.md +2 -2
  175. package/skills/frameyard/references/timelines.md +141 -0
@@ -0,0 +1,297 @@
1
+ function sourceSize(source, data) {
2
+ if (source.kind === "composition" || source.kind === "timeline") {
3
+ return { width: source.width, height: source.height };
4
+ }
5
+ return {
6
+ width: source.width ?? data.format.width,
7
+ height: source.height ?? data.format.height,
8
+ };
9
+ }
10
+ function clipBox(transform, stage) {
11
+ if (transform.width !== undefined && transform.height !== undefined) {
12
+ return { width: transform.width, height: transform.height };
13
+ }
14
+ return { width: stage.width, height: stage.height };
15
+ }
16
+ function fitScale(transform, source, box) {
17
+ if (transform.fit === "stretch") {
18
+ return {
19
+ x: box.width / source.width,
20
+ y: box.height / source.height,
21
+ };
22
+ }
23
+ const contain = transform.fit === "contain";
24
+ const raw = contain
25
+ ? Math.min(box.width / source.width, box.height / source.height)
26
+ : Math.max(box.width / source.width, box.height / source.height);
27
+ return { x: raw, y: raw };
28
+ }
29
+ function waitFor(predicate, timeout = 30_000) {
30
+ return new Promise((resolve, reject) => {
31
+ const started = performance.now();
32
+ const tick = () => {
33
+ const value = predicate();
34
+ if (value !== undefined) {
35
+ resolve(value);
36
+ return;
37
+ }
38
+ if (performance.now() - started > timeout) {
39
+ reject(new Error("Timed out waiting for a timeline source."));
40
+ return;
41
+ }
42
+ setTimeout(tick, 16);
43
+ };
44
+ tick();
45
+ });
46
+ }
47
+ function cloneProps(frame, props) {
48
+ if (props === undefined) {
49
+ return undefined;
50
+ }
51
+ const contentWindow = frame.contentWindow;
52
+ const serialized = JSON.stringify(props);
53
+ return contentWindow?.JSON ? contentWindow.JSON.parse(serialized) : JSON.parse(serialized);
54
+ }
55
+ function waitForVideo(video) {
56
+ if (video.readyState >= 2) {
57
+ video.pause();
58
+ return Promise.resolve();
59
+ }
60
+ return new Promise((resolve, reject) => {
61
+ video.addEventListener("loadeddata", () => {
62
+ video.pause();
63
+ resolve();
64
+ }, { once: true });
65
+ video.addEventListener("error", () => reject(new Error(`Could not load ${video.src}`)), { once: true });
66
+ });
67
+ }
68
+ function seekVideo(video, time) {
69
+ return new Promise((resolve, reject) => {
70
+ if (Math.abs(video.currentTime - time) <= 0.001 && video.readyState >= 2) {
71
+ requestAnimationFrame(() => requestAnimationFrame(() => resolve()));
72
+ return;
73
+ }
74
+ let onSeeked;
75
+ let onError;
76
+ const cleanup = () => {
77
+ video.removeEventListener("seeked", onSeeked);
78
+ video.removeEventListener("error", onError);
79
+ };
80
+ onSeeked = () => {
81
+ cleanup();
82
+ requestAnimationFrame(() => requestAnimationFrame(() => resolve()));
83
+ };
84
+ onError = () => {
85
+ cleanup();
86
+ reject(new Error(`Could not seek ${video.src}`));
87
+ };
88
+ video.addEventListener("seeked", onSeeked);
89
+ video.addEventListener("error", onError);
90
+ video.currentTime = time;
91
+ });
92
+ }
93
+ export function createTimelineHost(stage, data, options = {}) {
94
+ const maxCachedLayers = options.maxCachedLayers ?? 12;
95
+ const stageSize = { width: data.format.width, height: data.format.height };
96
+ stage.style.position = "relative";
97
+ stage.style.width = `${stageSize.width}px`;
98
+ stage.style.height = `${stageSize.height}px`;
99
+ stage.style.overflow = "hidden";
100
+ stage.style.background = options.background ?? data.background ?? "#000";
101
+ const visualClips = data.clips.filter((clip) => clip.source.kind !== "audio");
102
+ const layers = new Map();
103
+ let currentFrame = 0;
104
+ const disposeLayer = (layer) => {
105
+ const frame = layer.element instanceof HTMLIFrameElement ? layer.element : undefined;
106
+ if (frame) {
107
+ try {
108
+ const win = frame.contentWindow;
109
+ void win?.__fy?.dispose?.();
110
+ void win?.__fyTimeline?.dispose?.();
111
+ }
112
+ catch {
113
+ // Preview cleanup is best-effort.
114
+ }
115
+ }
116
+ layer.wrapper.remove();
117
+ layers.delete(layer.clip.id);
118
+ };
119
+ const ensureLayer = (clip) => {
120
+ const existing = layers.get(clip.id);
121
+ if (existing) {
122
+ return existing;
123
+ }
124
+ const source = clip.source;
125
+ const size = sourceSize(source, data);
126
+ const box = clipBox(clip.transform, stageSize);
127
+ const fit = fitScale(clip.transform, size, box);
128
+ const scale = clip.transform.width === undefined ? clip.transform.scale : 1;
129
+ const wrapper = document.createElement("div");
130
+ wrapper.className = "timeline-layer";
131
+ wrapper.style.width = `${box.width}px`;
132
+ wrapper.style.height = `${box.height}px`;
133
+ wrapper.style.overflow = "hidden";
134
+ wrapper.style.display = "none";
135
+ wrapper.style.opacity = String(clip.transform.opacity);
136
+ wrapper.style.transform = `translate(-50%, -50%) translate(${clip.transform.x}px, ${clip.transform.y}px) rotate(${clip.transform.rotation}deg) scale(${scale})`;
137
+ const place = (element) => {
138
+ element.style.position = "absolute";
139
+ element.style.left = "50%";
140
+ element.style.top = "50%";
141
+ element.style.transformOrigin = "center";
142
+ element.style.transform = `translate(-50%, -50%) scale(${fit.x}, ${fit.y})`;
143
+ };
144
+ let element;
145
+ let load;
146
+ if (source.kind === "composition" || source.kind === "timeline") {
147
+ const frame = document.createElement("iframe");
148
+ frame.src = source.url;
149
+ frame.width = String(size.width);
150
+ frame.height = String(size.height);
151
+ frame.style.width = `${size.width}px`;
152
+ frame.style.height = `${size.height}px`;
153
+ frame.style.border = "0";
154
+ // The preview pages are dark. Without this, Chromium gives an iframe that
155
+ // inherits the dark color scheme a white base behind transparent
156
+ // compositions.
157
+ frame.style.colorScheme = "normal";
158
+ frame.title = `${source.kind} ${source.id}`;
159
+ place(frame);
160
+ wrapper.append(frame);
161
+ stage.append(wrapper);
162
+ element = frame;
163
+ load = (async () => {
164
+ const loaded = await waitFor(() => {
165
+ const frameWindow = frame.contentWindow;
166
+ return (frameWindow?.__fy || frameWindow?.__fyTimeline || frameWindow?.__fyError || frameWindow?.__fyTimelineError);
167
+ });
168
+ if ("__fyError" in loaded) {
169
+ throw new Error(loaded.message ?? `${source.kind} failed to initialize.`);
170
+ }
171
+ if (source.kind === "composition") {
172
+ const api = await waitFor(() => frame.contentWindow?.__fy);
173
+ await api.ready;
174
+ await api.load({ props: cloneProps(frame, clip.props) });
175
+ }
176
+ else {
177
+ const api = await waitFor(() => frame.contentWindow?.__fyTimeline);
178
+ await api.ready;
179
+ await api.load();
180
+ }
181
+ })();
182
+ }
183
+ else if (source.kind === "video") {
184
+ const video = document.createElement("video");
185
+ video.src = source.url;
186
+ video.width = size.width;
187
+ video.height = size.height;
188
+ video.style.width = `${size.width}px`;
189
+ video.style.height = `${size.height}px`;
190
+ video.muted = true;
191
+ video.playsInline = true;
192
+ video.preload = "auto";
193
+ place(video);
194
+ wrapper.append(video);
195
+ stage.append(wrapper);
196
+ element = video;
197
+ load = waitForVideo(video);
198
+ }
199
+ else {
200
+ const image = document.createElement("img");
201
+ image.src = source.url;
202
+ image.width = size.width;
203
+ image.height = size.height;
204
+ image.style.width = `${size.width}px`;
205
+ image.style.height = `${size.height}px`;
206
+ image.alt = "";
207
+ place(image);
208
+ wrapper.append(image);
209
+ stage.append(wrapper);
210
+ element = image;
211
+ load = image.decode().catch(() => undefined);
212
+ }
213
+ const layer = { clip, wrapper, element, load, lastActive: -1 };
214
+ layers.set(clip.id, layer);
215
+ return layer;
216
+ };
217
+ const seek = async (target) => {
218
+ const frame = Math.max(0, Math.min(data.durationInFrames - 1, Math.floor(target)));
219
+ currentFrame = frame;
220
+ const active = visualClips.filter((clip) => clip.start <= frame && frame < clip.end);
221
+ const activeIds = new Set(active.map((clip) => clip.id));
222
+ const activeLayers = active.map((clip) => ensureLayer(clip));
223
+ await Promise.all(activeLayers.map((layer) => layer.load));
224
+ for (const layer of activeLayers) {
225
+ layer.lastActive = frame;
226
+ layer.wrapper.style.display = "block";
227
+ const clip = layer.clip;
228
+ const localFrame = clip.sourceIn + (frame - clip.start);
229
+ if (clip.source.kind === "composition" || clip.source.kind === "timeline") {
230
+ const contentWindow = layer.element.contentWindow;
231
+ if (!contentWindow) {
232
+ continue;
233
+ }
234
+ if (clip.source.kind === "composition") {
235
+ const api = contentWindow.__fy;
236
+ if (api) {
237
+ api.seek(localFrame);
238
+ await api.settle();
239
+ }
240
+ }
241
+ else {
242
+ const api = contentWindow.__fyTimeline;
243
+ if (api) {
244
+ await api.seek(localFrame);
245
+ await api.settle();
246
+ }
247
+ }
248
+ }
249
+ else if (clip.source.kind === "video") {
250
+ await seekVideo(layer.element, localFrame / data.format.fps + 0.001);
251
+ }
252
+ }
253
+ for (const layer of layers.values()) {
254
+ if (!activeIds.has(layer.clip.id)) {
255
+ layer.wrapper.style.display = "none";
256
+ }
257
+ }
258
+ for (const clip of visualClips) {
259
+ if (clip.start > frame && clip.start <= frame + data.format.fps * 2 && !layers.has(clip.id)) {
260
+ const prefetched = ensureLayer(clip);
261
+ void prefetched.load.catch(() => disposeLayer(prefetched));
262
+ }
263
+ }
264
+ if (layers.size > maxCachedLayers) {
265
+ const inactive = [...layers.values()]
266
+ .filter((layer) => !activeIds.has(layer.clip.id))
267
+ .sort((left, right) => left.lastActive - right.lastActive);
268
+ while (layers.size > maxCachedLayers && inactive.length > 0) {
269
+ const layer = inactive.shift();
270
+ if (layer) {
271
+ disposeLayer(layer);
272
+ }
273
+ }
274
+ }
275
+ };
276
+ return {
277
+ format: data.format,
278
+ durationInFrames: data.durationInFrames,
279
+ get frame() {
280
+ return currentFrame;
281
+ },
282
+ ready: Promise.resolve(),
283
+ async load() {
284
+ // Layers are loaded on demand around the playhead.
285
+ },
286
+ seek,
287
+ async settle() {
288
+ await new Promise((resolve) => requestAnimationFrame(() => requestAnimationFrame(() => resolve())));
289
+ },
290
+ async dispose() {
291
+ for (const layer of Array.from(layers.values())) {
292
+ disposeLayer(layer);
293
+ }
294
+ },
295
+ };
296
+ }
297
+ //# sourceMappingURL=timeline-host.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeline-host.js","sourceRoot":"","sources":["../../src/preview/timeline-host.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { TimelinePreviewData } from "./timeline-data.js";
2
+ interface TimelineHostApi {
3
+ ready: Promise<void>;
4
+ format: TimelinePreviewData["format"];
5
+ durationInFrames: number;
6
+ load(): Promise<void>;
7
+ seek(frame: number): Promise<void>;
8
+ settle(): Promise<void>;
9
+ dispose(): Promise<void>;
10
+ }
11
+ declare global {
12
+ interface Window {
13
+ __fyTimeline?: TimelineHostApi;
14
+ }
15
+ }
16
+ export {};
17
+ //# sourceMappingURL=timeline-main.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeline-main.d.ts","sourceRoot":"","sources":["../../src/preview/timeline-main.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAiD,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE7G,UAAU,eAAe;IACvB,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACrB,MAAM,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IACtC,gBAAgB,EAAE,MAAM,CAAC;IACzB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,YAAY,CAAC,EAAE,eAAe,CAAC;KAChC;CACF"}