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