frameyard 0.8.0 → 0.10.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 (327) hide show
  1. package/CHANGELOG.md +177 -14
  2. package/GLOSSARY.md +112 -2
  3. package/README.md +302 -265
  4. package/dist/assets/integrations.d.ts +8 -4
  5. package/dist/assets/integrations.d.ts.map +1 -1
  6. package/dist/assets/integrations.js +8 -4
  7. package/dist/assets/integrations.js.map +1 -1
  8. package/dist/assets/provenance.d.ts +2 -2
  9. package/dist/assets/provenance.d.ts.map +1 -1
  10. package/dist/assets/provenance.js +5 -3
  11. package/dist/assets/provenance.js.map +1 -1
  12. package/dist/assets/tts-supertonic.d.ts +28 -0
  13. package/dist/assets/tts-supertonic.d.ts.map +1 -0
  14. package/dist/assets/tts-supertonic.js +156 -0
  15. package/dist/assets/tts-supertonic.js.map +1 -0
  16. package/dist/assets/tts.d.ts +18 -6
  17. package/dist/assets/tts.d.ts.map +1 -1
  18. package/dist/assets/tts.js +219 -97
  19. package/dist/assets/tts.js.map +1 -1
  20. package/dist/cli.js +1685 -93
  21. package/dist/cli.js.map +1 -1
  22. package/dist/composition/format.d.ts +1 -1
  23. package/dist/composition/format.d.ts.map +1 -1
  24. package/dist/composition/format.js +1 -1
  25. package/dist/composition/format.js.map +1 -1
  26. package/dist/context.d.ts +82 -0
  27. package/dist/context.d.ts.map +1 -0
  28. package/dist/context.js +277 -0
  29. package/dist/context.js.map +1 -0
  30. package/dist/contracts.d.ts +25 -0
  31. package/dist/contracts.d.ts.map +1 -1
  32. package/dist/contracts.js.map +1 -1
  33. package/dist/doctor.d.ts +14 -1
  34. package/dist/doctor.d.ts.map +1 -1
  35. package/dist/doctor.js +166 -7
  36. package/dist/doctor.js.map +1 -1
  37. package/dist/errors.d.ts +1 -1
  38. package/dist/errors.d.ts.map +1 -1
  39. package/dist/errors.js.map +1 -1
  40. package/dist/fonts/add.d.ts +41 -0
  41. package/dist/fonts/add.d.ts.map +1 -0
  42. package/dist/fonts/add.js +259 -0
  43. package/dist/fonts/add.js.map +1 -0
  44. package/dist/fonts/binary.d.ts +4 -0
  45. package/dist/fonts/binary.d.ts.map +1 -0
  46. package/dist/fonts/binary.js +21 -0
  47. package/dist/fonts/binary.js.map +1 -0
  48. package/dist/fonts/css.d.ts +4 -0
  49. package/dist/fonts/css.d.ts.map +1 -0
  50. package/dist/fonts/css.js +50 -0
  51. package/dist/fonts/css.js.map +1 -0
  52. package/dist/fonts/fontsource.d.ts +107 -0
  53. package/dist/fonts/fontsource.d.ts.map +1 -0
  54. package/dist/fonts/fontsource.js +565 -0
  55. package/dist/fonts/fontsource.js.map +1 -0
  56. package/dist/fonts/index.d.ts +11 -0
  57. package/dist/fonts/index.d.ts.map +1 -0
  58. package/dist/fonts/index.js +11 -0
  59. package/dist/fonts/index.js.map +1 -0
  60. package/dist/fonts/install.d.ts +24 -0
  61. package/dist/fonts/install.d.ts.map +1 -0
  62. package/dist/fonts/install.js +145 -0
  63. package/dist/fonts/install.js.map +1 -0
  64. package/dist/fonts/manifest.d.ts +21 -0
  65. package/dist/fonts/manifest.d.ts.map +1 -0
  66. package/dist/fonts/manifest.js +96 -0
  67. package/dist/fonts/manifest.js.map +1 -0
  68. package/dist/fonts/options.d.ts +9 -0
  69. package/dist/fonts/options.d.ts.map +1 -0
  70. package/dist/fonts/options.js +66 -0
  71. package/dist/fonts/options.js.map +1 -0
  72. package/dist/fonts/schema.d.ts +4 -0
  73. package/dist/fonts/schema.d.ts.map +1 -0
  74. package/dist/fonts/schema.js +316 -0
  75. package/dist/fonts/schema.js.map +1 -0
  76. package/dist/fonts/summary.d.ts +16 -0
  77. package/dist/fonts/summary.d.ts.map +1 -0
  78. package/dist/fonts/summary.js +22 -0
  79. package/dist/fonts/summary.js.map +1 -0
  80. package/dist/fonts/types.d.ts +56 -0
  81. package/dist/fonts/types.d.ts.map +1 -0
  82. package/dist/fonts/types.js +8 -0
  83. package/dist/fonts/types.js.map +1 -0
  84. package/dist/fonts/verify.d.ts +33 -0
  85. package/dist/fonts/verify.d.ts.map +1 -0
  86. package/dist/fonts/verify.js +200 -0
  87. package/dist/fonts/verify.js.map +1 -0
  88. package/dist/html/validate.d.ts.map +1 -1
  89. package/dist/html/validate.js +59 -0
  90. package/dist/html/validate.js.map +1 -1
  91. package/dist/index.d.ts +3 -3
  92. package/dist/index.d.ts.map +1 -1
  93. package/dist/index.js +1 -1
  94. package/dist/index.js.map +1 -1
  95. package/dist/inspect.d.ts +61 -0
  96. package/dist/inspect.d.ts.map +1 -0
  97. package/dist/inspect.js +325 -0
  98. package/dist/inspect.js.map +1 -0
  99. package/dist/lint.d.ts +63 -0
  100. package/dist/lint.d.ts.map +1 -0
  101. package/dist/lint.js +265 -0
  102. package/dist/lint.js.map +1 -0
  103. package/dist/policy.d.ts +69 -0
  104. package/dist/policy.d.ts.map +1 -0
  105. package/dist/policy.js +361 -0
  106. package/dist/policy.js.map +1 -0
  107. package/dist/preview/fonts/LICENSE-figtree.txt +93 -0
  108. package/dist/preview/fonts/LICENSE-space-mono.txt +93 -0
  109. package/dist/preview/fonts/README.md +23 -0
  110. package/dist/preview/fonts/figtree-latin-wght-normal.woff2 +0 -0
  111. package/dist/preview/fonts/space-mono-latin-400-normal.woff2 +0 -0
  112. package/dist/preview/fonts/space-mono-latin-700-normal.woff2 +0 -0
  113. package/dist/preview/main.js +5 -2
  114. package/dist/preview/main.js.map +1 -1
  115. package/dist/preview/timeline-data.d.ts +17 -69
  116. package/dist/preview/timeline-data.d.ts.map +1 -1
  117. package/dist/preview/timeline-host.d.ts.map +1 -1
  118. package/dist/preview/timeline-host.js +70 -45
  119. package/dist/preview/timeline-host.js.map +1 -1
  120. package/dist/preview/timeline-main.d.ts.map +1 -1
  121. package/dist/preview/timeline-main.js +88 -27
  122. package/dist/preview/timeline-main.js.map +1 -1
  123. package/dist/project.d.ts +10 -3
  124. package/dist/project.d.ts.map +1 -1
  125. package/dist/project.js +20 -17
  126. package/dist/project.js.map +1 -1
  127. package/dist/renderer/audio.d.ts +6 -0
  128. package/dist/renderer/audio.d.ts.map +1 -1
  129. package/dist/renderer/audio.js +3 -1
  130. package/dist/renderer/audio.js.map +1 -1
  131. package/dist/renderer/browser.d.ts.map +1 -1
  132. package/dist/renderer/browser.js +13 -0
  133. package/dist/renderer/browser.js.map +1 -1
  134. package/dist/renderer/concurrency.d.ts +6 -0
  135. package/dist/renderer/concurrency.d.ts.map +1 -0
  136. package/dist/renderer/concurrency.js +27 -0
  137. package/dist/renderer/concurrency.js.map +1 -0
  138. package/dist/renderer/ffmpeg.d.ts +104 -5
  139. package/dist/renderer/ffmpeg.d.ts.map +1 -1
  140. package/dist/renderer/ffmpeg.js +580 -67
  141. package/dist/renderer/ffmpeg.js.map +1 -1
  142. package/dist/renderer/index.js +1 -1
  143. package/dist/renderer/index.js.map +1 -1
  144. package/dist/renderer/keyframe-expressions.d.ts +39 -0
  145. package/dist/renderer/keyframe-expressions.d.ts.map +1 -0
  146. package/dist/renderer/keyframe-expressions.js +180 -0
  147. package/dist/renderer/keyframe-expressions.js.map +1 -0
  148. package/dist/renderer/session-pool.d.ts +28 -0
  149. package/dist/renderer/session-pool.d.ts.map +1 -0
  150. package/dist/renderer/session-pool.js +91 -0
  151. package/dist/renderer/session-pool.js.map +1 -0
  152. package/dist/renderer/timeline.d.ts +2 -0
  153. package/dist/renderer/timeline.d.ts.map +1 -1
  154. package/dist/renderer/timeline.js +600 -147
  155. package/dist/renderer/timeline.js.map +1 -1
  156. package/dist/renderer/timings.d.ts +13 -0
  157. package/dist/renderer/timings.d.ts.map +1 -0
  158. package/dist/renderer/timings.js +29 -0
  159. package/dist/renderer/timings.js.map +1 -0
  160. package/dist/runtime/host.d.ts.map +1 -1
  161. package/dist/runtime/host.js +4 -0
  162. package/dist/runtime/host.js.map +1 -1
  163. package/dist/scaffold.d.ts +3 -0
  164. package/dist/scaffold.d.ts.map +1 -1
  165. package/dist/scaffold.js +48 -320
  166. package/dist/scaffold.js.map +1 -1
  167. package/dist/server/composition-html.d.ts +2 -0
  168. package/dist/server/composition-html.d.ts.map +1 -1
  169. package/dist/server/composition-html.js +7 -0
  170. package/dist/server/composition-html.js.map +1 -1
  171. package/dist/server/preview-html.d.ts.map +1 -1
  172. package/dist/server/preview-html.js +74 -188
  173. package/dist/server/preview-html.js.map +1 -1
  174. package/dist/server/preview-style.d.ts +11 -0
  175. package/dist/server/preview-style.d.ts.map +1 -0
  176. package/dist/server/preview-style.js +298 -0
  177. package/dist/server/preview-style.js.map +1 -0
  178. package/dist/server/server.d.ts.map +1 -1
  179. package/dist/server/server.js +31 -1
  180. package/dist/server/server.js.map +1 -1
  181. package/dist/server/timeline-preview-data.d.ts.map +1 -1
  182. package/dist/server/timeline-preview-data.js +12 -34
  183. package/dist/server/timeline-preview-data.js.map +1 -1
  184. package/dist/server/timeline-preview-html.d.ts.map +1 -1
  185. package/dist/server/timeline-preview-html.js +140 -148
  186. package/dist/server/timeline-preview-html.js.map +1 -1
  187. package/dist/templates.d.ts +16 -0
  188. package/dist/templates.d.ts.map +1 -0
  189. package/dist/templates.js +186 -0
  190. package/dist/templates.js.map +1 -0
  191. package/dist/timeline/easing.d.ts +36 -0
  192. package/dist/timeline/easing.d.ts.map +1 -0
  193. package/dist/timeline/easing.js +225 -0
  194. package/dist/timeline/easing.js.map +1 -0
  195. package/dist/timeline/keyframes.d.ts +23 -0
  196. package/dist/timeline/keyframes.d.ts.map +1 -0
  197. package/dist/timeline/keyframes.js +95 -0
  198. package/dist/timeline/keyframes.js.map +1 -0
  199. package/dist/timeline/plan.d.ts +6 -12
  200. package/dist/timeline/plan.d.ts.map +1 -1
  201. package/dist/timeline/plan.js +17 -30
  202. package/dist/timeline/plan.js.map +1 -1
  203. package/dist/timeline/resolve.d.ts +12 -0
  204. package/dist/timeline/resolve.d.ts.map +1 -1
  205. package/dist/timeline/resolve.js +105 -9
  206. package/dist/timeline/resolve.js.map +1 -1
  207. package/dist/timeline/scene.d.ts +126 -0
  208. package/dist/timeline/scene.d.ts.map +1 -0
  209. package/dist/timeline/scene.js +109 -0
  210. package/dist/timeline/scene.js.map +1 -0
  211. package/dist/timeline/schema.d.ts +31 -0
  212. package/dist/timeline/schema.d.ts.map +1 -1
  213. package/dist/timeline/schema.js +240 -9
  214. package/dist/timeline/schema.js.map +1 -1
  215. package/dist/timeline/transitions.d.ts +21 -0
  216. package/dist/timeline/transitions.d.ts.map +1 -0
  217. package/dist/timeline/transitions.js +23 -0
  218. package/dist/timeline/transitions.js.map +1 -0
  219. package/dist/version.d.ts +1 -1
  220. package/dist/version.d.ts.map +1 -1
  221. package/dist/version.js +1 -1
  222. package/dist/version.js.map +1 -1
  223. package/docs/adr/0007-make-html-documents-the-composition-unit.md +1 -1
  224. package/docs/adr/0010-make-timelines-the-render-unit.md +3 -2
  225. package/docs/adr/0012-render-timelines-with-segmented-lossless-clip-intermediates.md +1 -1
  226. package/docs/adr/0014-compose-timeline-clips-with-css-blend-modes.md +2 -1
  227. package/docs/adr/0015-inherit-composition-format-from-the-project.md +2 -2
  228. package/docs/adr/0016-author-compositions-as-html-fragments.md +1 -1
  229. package/docs/adr/0018-animate-timeline-clips-with-keyframes.md +35 -0
  230. package/docs/adr/0019-make-same-track-overlap-the-transition-window.md +36 -0
  231. package/docs/adr/0020-crossfade-audio-clips-on-audio-tracks.md +27 -0
  232. package/docs/adr/0021-project-timeline-scenes-once.md +32 -0
  233. package/docs/adr/0022-gate-heavy-operations-with-a-workspace-resource-policy.md +35 -0
  234. package/docs/adr/0023-pin-fonts-as-project-assets.md +98 -0
  235. package/docs/adr/0024-stream-composition-captures-and-skip-trivial-composites.md +86 -0
  236. package/docs/adr/0025-capture-timeline-layers-in-parallel-with-a-global-limit.md +67 -0
  237. package/docs/adr/0026-reuse-loaded-composition-sessions-across-segments.md +70 -0
  238. package/docs/adr/0027-encode-two-full-frame-layers-through-dual-pipes.md +76 -0
  239. package/docs/adr/0028-encode-full-frame-video-segments-directly.md +65 -0
  240. package/docs/migration-0.4.md +2 -2
  241. package/docs/preview-testing.md +27 -6
  242. package/docs/{v0.1-design.md → v0.x-design.md} +57 -32
  243. package/examples/blend/README.md +3 -3
  244. package/examples/demo/README.md +2 -2
  245. package/examples/intro/README.md +71 -0
  246. package/examples/intro/assets/fonts/figtree/LICENSE.txt +93 -0
  247. package/examples/intro/assets/fonts/figtree/figtree-latin-wght-normal.woff2 +0 -0
  248. package/examples/intro/assets/fonts/instrument-serif/LICENSE.txt +93 -0
  249. package/examples/intro/assets/fonts/instrument-serif/instrument-serif-latin-400-italic.woff2 +0 -0
  250. package/examples/intro/assets/fonts/space-mono/LICENSE.txt +93 -0
  251. package/examples/intro/assets/fonts/space-mono/space-mono-latin-400-normal.woff2 +0 -0
  252. package/examples/intro/assets/fonts/space-mono/space-mono-latin-700-normal.woff2 +0 -0
  253. package/examples/intro/assets/grain.png +0 -0
  254. package/examples/intro/assets/score.ogg +0 -0
  255. package/examples/intro/compositions/brand.html +412 -0
  256. package/examples/intro/compositions/chrome.controller.js +63 -0
  257. package/examples/intro/compositions/chrome.html +256 -0
  258. package/examples/intro/compositions/lattice.controller.js +148 -0
  259. package/examples/intro/compositions/lattice.html +308 -0
  260. package/examples/intro/compositions/opening.html +504 -0
  261. package/examples/intro/compositions/studio.html +930 -0
  262. package/examples/intro/compositions/theme.css +218 -0
  263. package/examples/intro/fy.config.js +13 -0
  264. package/examples/intro/fy.fonts.json +100 -0
  265. package/examples/intro/scripts/make-grain.mjs +79 -0
  266. package/examples/intro/scripts/make-score.mjs +702 -0
  267. package/examples/intro/timelines/intro.timeline.json +60 -0
  268. package/examples/keyframes/README.md +76 -0
  269. package/examples/keyframes/compositions/backdrop.html +60 -0
  270. package/examples/keyframes/compositions/card.html +99 -0
  271. package/examples/keyframes/fy.config.js +10 -0
  272. package/examples/keyframes/timelines/keyframes.timeline.json +60 -0
  273. package/examples/nested/README.md +112 -0
  274. package/examples/nested/assets/pulse.wav +0 -0
  275. package/examples/nested/compositions/backdrop.html +84 -0
  276. package/examples/nested/compositions/card.html +275 -0
  277. package/examples/nested/compositions/overlay.html +307 -0
  278. package/examples/nested/fy.config.js +13 -0
  279. package/examples/nested/scripts/make-pulse.sh +20 -0
  280. package/examples/nested/timelines/chapter-a.timeline.json +39 -0
  281. package/examples/nested/timelines/chapter-b.timeline.json +39 -0
  282. package/examples/nested/timelines/nested-reel.timeline.json +52 -0
  283. package/examples/static/README.md +2 -2
  284. package/examples/transitions/README.md +128 -0
  285. package/examples/transitions/assets/alpha.wav +0 -0
  286. package/examples/transitions/assets/beta.wav +0 -0
  287. package/examples/transitions/assets/gamma.wav +0 -0
  288. package/examples/transitions/compositions/alpha.html +56 -0
  289. package/examples/transitions/compositions/beta.html +56 -0
  290. package/examples/transitions/compositions/gamma.html +56 -0
  291. package/examples/transitions/fy.config.js +12 -0
  292. package/examples/transitions/timelines/audio-crossfade.timeline.json +44 -0
  293. package/examples/transitions/timelines/transitions.timeline.json +31 -0
  294. package/examples/video/README.md +4 -4
  295. package/examples/webgl/README.md +1 -1
  296. package/package.json +13 -6
  297. package/scaffolds/init/AGENTS.md +131 -0
  298. package/scaffolds/init/README.md +56 -0
  299. package/scaffolds/init/compositions/hello.html +79 -0
  300. package/scaffolds/init/fy.config.js +9 -0
  301. package/scaffolds/init/gitignore.template +1 -0
  302. package/scaffolds/init/package.json +11 -0
  303. package/scaffolds/init/props/hello.json +4 -0
  304. package/scaffolds/init/props/main.json +6 -0
  305. package/scaffolds/init/timelines/main.timeline.json +20 -0
  306. package/scaffolds/local-models/LOCAL-MODELS.md +77 -0
  307. package/scaffolds/local-models/fy.policy.json +5 -0
  308. package/scaffolds/local-models/opencode/opencode.jsonc +17 -0
  309. package/scaffolds/local-models/pi/APPEND_SYSTEM.md +21 -0
  310. package/scaffolds/local-models/pi/sandbox.json +15 -0
  311. package/scaffolds/local-models/pi/settings.json +15 -0
  312. package/skills/frameyard/README.md +1 -0
  313. package/skills/frameyard/SKILL.md +59 -61
  314. package/skills/frameyard/references/audio-assets.md +32 -3
  315. package/skills/frameyard/references/common-mistakes.md +53 -2
  316. package/skills/frameyard/references/deterministic-authoring.md +10 -3
  317. package/skills/frameyard/references/diagnostics.md +31 -1
  318. package/skills/frameyard/references/failure-recovery.md +32 -6
  319. package/skills/frameyard/references/fonts.md +132 -0
  320. package/skills/frameyard/references/json-results.md +119 -6
  321. package/skills/frameyard/references/quick-reference.md +222 -0
  322. package/skills/frameyard/references/timelines.md +97 -7
  323. /package/examples/blend/{video.config.js → fy.config.js} +0 -0
  324. /package/examples/demo/{video.config.js → fy.config.js} +0 -0
  325. /package/examples/static/{video.config.js → fy.config.js} +0 -0
  326. /package/examples/video/{video.config.js → fy.config.js} +0 -0
  327. /package/examples/webgl/{video.config.js → fy.config.js} +0 -0
@@ -1,4 +1,6 @@
1
1
  import { createTimelineHost } from "./timeline-host.js";
2
+ import { keyframeChannelsAt, keyframeMarkerFrames } from "../timeline/keyframes.js";
3
+ import { transitionGain } from "../timeline/transitions.js";
2
4
  function byId(id) {
3
5
  const element = document.getElementById(id);
4
6
  if (!element) {
@@ -55,6 +57,16 @@ function renderDiagnostics(data) {
55
57
  return line;
56
58
  }));
57
59
  }
60
+ function renderRuler(scale, duration) {
61
+ scale.replaceChildren();
62
+ for (const fraction of [0, 0.25, 0.5, 0.75, 1]) {
63
+ const tick = document.createElement("span");
64
+ tick.className = "ruler-tick";
65
+ tick.style.left = `${fraction * 100}%`;
66
+ tick.textContent = String(Math.round((duration - 1) * fraction));
67
+ scale.append(tick);
68
+ }
69
+ }
58
70
  function clipClass(clip) {
59
71
  if (clip.source.kind === "composition") {
60
72
  return "clip composition";
@@ -70,8 +82,6 @@ function clipClass(clip) {
70
82
  function renderTracks(data) {
71
83
  const container = byId("tracks");
72
84
  container.replaceChildren();
73
- const playheads = [];
74
- const labels = new Map();
75
85
  for (const track of data.tracks) {
76
86
  const row = document.createElement("div");
77
87
  row.className = "track";
@@ -82,33 +92,44 @@ function renderTracks(data) {
82
92
  label.title = `${track.kind} ${track.id}`;
83
93
  const lane = document.createElement("div");
84
94
  lane.className = "lane";
85
- labels.set(track.id, name);
86
95
  const clips = data.clips.filter((clip) => clip.track === track.id).sort((left, right) => left.start - right.start);
87
96
  for (const clip of clips) {
88
97
  const element = document.createElement("div");
89
98
  element.className = clipClass(clip);
90
99
  element.style.left = `${(clip.start / data.durationInFrames) * 100}%`;
91
100
  element.style.width = `${(clip.duration / data.durationInFrames) * 100}%`;
92
- const blendLabel = clip.blend === "normal" ? "" : ` · ${clip.blend}`;
93
- element.textContent = `${clip.id}${blendLabel}`;
94
- element.title = `${clip.id} · ${clip.source.kind} · ${clip.start}..${clip.end}${blendLabel}`;
101
+ const blend = clip.blend ?? "normal";
102
+ const blendLabel = blend === "normal" ? "" : ` · ${blend}`;
103
+ const label = document.createElement("span");
104
+ label.className = "clip-label";
105
+ label.textContent = `${clip.id}${blendLabel}`;
106
+ element.append(label);
107
+ const keyframeFrames = keyframeMarkerFrames(clip.keyframes);
108
+ for (const frame of keyframeFrames) {
109
+ const marker = document.createElement("span");
110
+ marker.className = "keyframe-marker";
111
+ marker.dataset.frame = String(clip.start + frame);
112
+ marker.style.left = `${clip.duration > 0 ? (frame / clip.duration) * 100 : 0}%`;
113
+ const channels = keyframeChannelsAt(clip.keyframes, frame)
114
+ .map((entry) => `${entry.channel} ${entry.value}`)
115
+ .join(", ");
116
+ marker.title = `Keyframe ${frame}${channels.length > 0 ? ` · ${channels}` : ""}`;
117
+ element.append(marker);
118
+ }
119
+ element.title = `${clip.id} · ${clip.source.kind} · ${clip.start}..${clip.end}${blendLabel}${keyframeFrames.length > 0 ? ` · ${keyframeFrames.length} keyframe${keyframeFrames.length === 1 ? "" : "s"}` : ""}`;
95
120
  lane.append(element);
96
121
  }
97
- const playhead = document.createElement("div");
98
- playhead.style.position = "absolute";
99
- playhead.style.top = "0";
100
- playhead.style.bottom = "0";
101
- playhead.style.width = "1px";
102
- playhead.style.background = "#b8f36b";
103
- playhead.style.boxShadow = "0 0 10px rgba(184,243,107,.7)";
104
- playhead.style.pointerEvents = "none";
105
- playhead.style.left = "0%";
106
- lane.append(playhead);
107
- playheads.push(playhead);
122
+ for (const transition of data.transitions.filter((entry) => entry.track === track.id)) {
123
+ const band = document.createElement("div");
124
+ band.className = "transition";
125
+ band.style.left = `${(transition.start / data.durationInFrames) * 100}%`;
126
+ band.style.width = `${((transition.end - transition.start) / data.durationInFrames) * 100}%`;
127
+ band.title = `${transition.kind} ${transition.from} → ${transition.to} · ${transition.start}..${transition.end}`;
128
+ lane.append(band);
129
+ }
108
130
  row.append(label, lane);
109
131
  container.append(row);
110
132
  }
111
- return { playheads, labels };
112
133
  }
113
134
  function fitStage(stage, wrap, viewport, format) {
114
135
  const availableWidth = Math.max(80, viewport.clientWidth - 40);
@@ -159,13 +180,16 @@ async function main() {
159
180
  const clockLabel = byId("clock");
160
181
  const muteCheckbox = byId("mute");
161
182
  const volumeSlider = byId("volume");
183
+ const rulerScale = byId("ruler-scale");
184
+ const timelineInner = byId("timeline-inner");
162
185
  const audioEntries = data.audioClips.map((clip) => {
163
186
  const audio = new Audio(clip.url);
164
187
  audio.preload = "auto";
165
188
  audio.volume = clip.volume;
166
189
  return { clip, audio };
167
190
  });
168
- const { playheads } = renderTracks(data);
191
+ renderTracks(data);
192
+ renderRuler(rulerScale, data.durationInFrames);
169
193
  const fps = data.format.fps;
170
194
  const framesPerSecond = Math.max(1, Math.round(fps));
171
195
  const duration = data.durationInFrames;
@@ -183,12 +207,33 @@ async function main() {
183
207
  document.title = `${data.timeline} — Frameyard Timeline`;
184
208
  scrubber.max = String(Math.max(0, duration - 1));
185
209
  durationLabel.textContent = String(duration);
210
+ let activeAudio = new Set();
186
211
  const updateAudio = (forceSeek) => {
212
+ const nextActive = new Set();
187
213
  for (const { clip, audio } of audioEntries) {
188
- const endFrame = clip.trimDuration !== undefined ? clip.startFrame + clip.trimDuration * fps : Number.POSITIVE_INFINITY;
214
+ // A composition's embedded audio without data-fy-duration is mapped to
215
+ // the end of its timeline clip. Stop at the end of the source instead of
216
+ // restarting it for the rest of that window.
217
+ const remainingSourceDuration = Number.isFinite(audio.duration)
218
+ ? Math.max(0, audio.duration - clip.trimStart)
219
+ : Number.POSITIVE_INFINITY;
220
+ const clipDuration = clip.trimDuration === undefined
221
+ ? remainingSourceDuration
222
+ : Math.min(clip.trimDuration, remainingSourceDuration);
223
+ const endFrame = Number.isFinite(clipDuration) ? clip.startFrame + clipDuration * fps : Number.POSITIVE_INFINITY;
189
224
  const active = currentFrame >= clip.startFrame && currentFrame < endFrame;
225
+ if (active) {
226
+ nextActive.add(audio);
227
+ }
228
+ const wasActive = activeAudio.has(audio);
190
229
  const desired = clip.trimStart + Math.max(0, (currentFrame - clip.startFrame) / fps);
191
- audio.volume = Math.max(0, Math.min(1, clip.volume * masterVolume * (muted ? 0 : 1)));
230
+ const envelopeGain = (clip.envelopes ?? []).reduce((gain, envelope) => gain *
231
+ transitionGain({
232
+ start: envelope.startFrame,
233
+ end: envelope.endFrame,
234
+ ...(envelope.easing !== undefined ? { easing: envelope.easing } : {}),
235
+ }, currentFrame, envelope.role), 1);
236
+ audio.volume = Math.max(0, Math.min(1, clip.volume * envelopeGain * masterVolume * (muted ? 0 : 1)));
192
237
  if (forceSeek || !playing) {
193
238
  if (active && Number.isFinite(desired)) {
194
239
  audio.currentTime = desired;
@@ -196,25 +241,30 @@ async function main() {
196
241
  }
197
242
  if (playing && active) {
198
243
  if (audio.paused) {
199
- if (Math.abs(audio.currentTime - desired) > 0.25) {
244
+ // Re-entering the window restarts an ended source; staying inside it
245
+ // leaves an ended source stopped.
246
+ const needsSeek = !wasActive || Math.abs(audio.currentTime - desired) > 0.25;
247
+ if (needsSeek) {
200
248
  audio.currentTime = desired;
201
249
  }
202
- void audio.play().catch(() => undefined);
250
+ if (needsSeek || !audio.ended) {
251
+ void audio.play().catch(() => undefined);
252
+ }
203
253
  }
204
254
  }
205
255
  else {
206
256
  audio.pause();
207
257
  }
208
258
  }
259
+ activeAudio = nextActive;
209
260
  };
210
261
  const updateUi = () => {
211
262
  frameLabel.textContent = String(currentFrame);
212
263
  scrubber.value = String(currentFrame);
213
264
  clockLabel.textContent = `${(currentFrame / fps).toFixed(2)}s`;
214
- const percent = duration <= 1 ? 0 : (currentFrame / (duration - 1)) * 100;
215
- for (const playhead of playheads) {
216
- playhead.style.left = `${percent}%`;
217
- }
265
+ const fraction = duration <= 1 ? 0 : currentFrame / (duration - 1);
266
+ scrubber.style.setProperty("--progress", `${fraction * 100}%`);
267
+ timelineInner.style.setProperty("--playhead-factor", String(fraction));
218
268
  };
219
269
  const renderFrame = async (target) => {
220
270
  if (seeking) {
@@ -305,6 +355,17 @@ async function main() {
305
355
  void renderFrame(target);
306
356
  }
307
357
  };
358
+ for (const marker of document.querySelectorAll(".keyframe-marker")) {
359
+ marker.addEventListener("click", (event) => {
360
+ event.stopPropagation();
361
+ const frame = Number(marker.dataset.frame);
362
+ if (!Number.isFinite(frame)) {
363
+ return;
364
+ }
365
+ stopPlayback();
366
+ void renderFrame(frame);
367
+ });
368
+ }
308
369
  const isTextEntry = (target) => {
309
370
  // Keys forwarded from layer iframes carry elements from another realm,
310
371
  // where `instanceof HTMLElement` is false.
@@ -1 +1 @@
1
- {"version":3,"file":"timeline-main.js","sourceRoot":"","sources":["../../src/preview/timeline-main.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"timeline-main.js","sourceRoot":"","sources":["../../src/preview/timeline-main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAqB,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACpF,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAmB5D,SAAS,IAAI,CAAwB,EAAU;IAC7C,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;IAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,uCAAuC,EAAE,GAAG,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,OAAY,CAAC;AACtB,CAAC;AAED,SAAS,UAAU,CAAC,KAAa,EAAE,QAAgB;IACjD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,UAAkB;IACjD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,yBAAyB,kBAAkB,CAAC,UAAU,CAAC,OAAO,EAAE;QAC3F,KAAK,EAAE,UAAU;KAClB,CAAC,CAAC;IACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,IAAI,OAAO,GAAG,iCAAiC,QAAQ,CAAC,MAAM,IAAI,CAAC;QACnE,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAqC,CAAC;YACzE,IAAI,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC;gBACxB,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;YAC/B,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,2BAA2B;QAC7B,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAwB,CAAC;AACxD,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,GAAG,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACtE,MAA+D,CAAC,iBAAiB,GAAG,EAAE,OAAO,EAAE,CAAC;IACnG,CAAC;IACD,MAAM,GAAG,GAAG,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IAC7C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IACD,GAAG,CAAC,MAAM,GAAG,KAAK,CAAC;IACnB,GAAG,CAAC,WAAW,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACzE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAyB;IAClD,MAAM,GAAG,GAAG,QAAQ,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;IACnD,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO;IACT,CAAC;IACD,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;IACrC,GAAG,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC;IACtC,GAAG,CAAC,eAAe,CACjB,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE;QAChC,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,CAAC,WAAW,GAAG,GAAG,UAAU,CAAC,QAAQ,MAAM,UAAU,CAAC,IAAI,KAAK,UAAU,CAAC,OAAO,EAAE,CAAC;QACxF,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CACH,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,KAAkB,EAAE,QAAgB;IACvD,KAAK,CAAC,eAAe,EAAE,CAAC;IACxB,KAAK,MAAM,QAAQ,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,QAAQ,GAAG,GAAG,GAAG,CAAC;QACvC,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;QACjE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,IAAyB;IAC1C,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QACvC,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QACpC,OAAO,aAAa,CAAC;IACvB,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACjC,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,YAAY,CAAC,IAAyB;IAC7C,MAAM,SAAS,GAAG,IAAI,CAAiB,QAAQ,CAAC,CAAC;IACjD,SAAS,CAAC,eAAe,EAAE,CAAC;IAE5B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC1C,GAAG,CAAC,SAAS,GAAG,OAAO,CAAC;QACxB,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC5C,KAAK,CAAC,SAAS,GAAG,aAAa,CAAC;QAChC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;QACpC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;QACzB,KAAK,CAAC,KAAK,GAAG,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC;QAExB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QACnH,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC9C,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;YACpC,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,GAAG,GAAG,CAAC;YACtE,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,GAAG,GAAG,CAAC;YAC1E,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC;YACrC,MAAM,UAAU,GAAG,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC;YAC3D,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAC7C,KAAK,CAAC,SAAS,GAAG,YAAY,CAAC;YAC/B,KAAK,CAAC,WAAW,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,UAAU,EAAE,CAAC;YAC9C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACtB,MAAM,cAAc,GAAG,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC5D,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;gBACnC,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;gBAC9C,MAAM,CAAC,SAAS,GAAG,iBAAiB,CAAC;gBACrC,MAAM,CAAC,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC;gBAClD,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;gBAChF,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC;qBACvD,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;qBACjD,IAAI,CAAC,IAAI,CAAC,CAAC;gBACd,MAAM,CAAC,KAAK,GAAG,YAAY,KAAK,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBACjF,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACzB,CAAC;YACD,OAAO,CAAC,KAAK,GAAG,GAAG,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,GAAG,GAAG,UAAU,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,cAAc,CAAC,MAAM,YAAY,cAAc,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YAChN,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;QAED,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;YACtF,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC3C,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC;YAC9B,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,GAAG,GAAG,CAAC;YACzE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,GAAG,GAAG,CAAC;YAC7F,IAAI,CAAC,KAAK,GAAG,GAAG,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI,MAAM,UAAU,CAAC,EAAE,MAAM,UAAU,CAAC,KAAK,KAAK,UAAU,CAAC,GAAG,EAAE,CAAC;YACjH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;QAED,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACxB,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CACf,KAAkB,EAClB,IAAiB,EACjB,QAAqB,EACrB,MAAqC;IAErC,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,WAAW,GAAG,EAAE,CAAC,CAAC;IAC/D,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC;IACjE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,GAAG,MAAM,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IACvF,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,SAAS,KAAK,GAAG,CAAC;IAC1C,KAAK,CAAC,KAAK,CAAC,eAAe,GAAG,UAAU,CAAC;IACzC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,MAAM,CAAC,KAAK,GAAG,KAAK,IAAI,CAAC;IAC/C,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,KAAK,IAAI,CAAC;AACnD,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;IAC3B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;IAC3C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC1C,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,UAAU,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,IAAI,CAAiB,OAAO,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,GAAG,CAAC;IAE5C,IAAI,QAAQ,EAAE,CAAC;QACb,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;QAClC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC;QACxB,MAAM,IAAI,GAAG,kBAAkB,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,aAAa,EAAE,CAAC,CAAC;QAC/F,MAAM,CAAC,YAAY,GAAG;YACpB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE;YACvB,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;YACjC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE;YAC3B,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE;SAC9B,CAAC;QACF,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAc,UAAU,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,IAAI,CAAiB,YAAY,CAAC,CAAC;IACrD,MAAM,IAAI,GAAiB,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC3D,MAAM,IAAI,GAAG,IAAI,CAAiB,MAAM,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,IAAI,CAAkB,OAAO,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG,IAAI,CAAoB,aAAa,CAAC,CAAC;IAC1D,MAAM,cAAc,GAAG,IAAI,CAAoB,WAAW,CAAC,CAAC;IAC5D,MAAM,cAAc,GAAG,IAAI,CAAoB,WAAW,CAAC,CAAC;IAC5D,MAAM,iBAAiB,GAAG,IAAI,CAAoB,cAAc,CAAC,CAAC;IAClE,MAAM,iBAAiB,GAAG,IAAI,CAAoB,cAAc,CAAC,CAAC;IAClE,MAAM,QAAQ,GAAG,IAAI,CAAmB,OAAO,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,IAAI,CAAc,OAAO,CAAC,CAAC;IAC9C,MAAM,aAAa,GAAG,IAAI,CAAc,UAAU,CAAC,CAAC;IACpD,MAAM,UAAU,GAAG,IAAI,CAAc,OAAO,CAAC,CAAC;IAC9C,MAAM,YAAY,GAAG,IAAI,CAAmB,MAAM,CAAC,CAAC;IACpD,MAAM,YAAY,GAAG,IAAI,CAAmB,QAAQ,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,IAAI,CAAiB,aAAa,CAAC,CAAC;IACvD,MAAM,aAAa,GAAG,IAAI,CAAiB,gBAAgB,CAAC,CAAC;IAE7D,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAA8B,EAAE,EAAE;QAC1E,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;QACvB,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IACH,YAAY,CAAC,IAAI,CAAC,CAAC;IACnB,WAAW,CAAC,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;IAC5B,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC;IACvC,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,YAAY,GAAkB,IAAI,CAAC;IACvC,IAAI,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC;IACrD,IAAI,KAAK,GAAG,KAAK,CAAC;IAElB,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC;IAClC,IAAI,CAAC,WAAW,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,MAAM,GAAG,UAAU,QAAQ,aAAa,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACpI,QAAQ,CAAC,KAAK,GAAG,GAAG,IAAI,CAAC,QAAQ,uBAAuB,CAAC;IACzD,QAAQ,CAAC,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC;IACjD,aAAa,CAAC,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IAE7C,IAAI,WAAW,GAAG,IAAI,GAAG,EAAoB,CAAC;IAE9C,MAAM,WAAW,GAAG,CAAC,SAAkB,EAAQ,EAAE;QAC/C,MAAM,UAAU,GAAG,IAAI,GAAG,EAAoB,CAAC;QAC/C,KAAK,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,YAAY,EAAE,CAAC;YAC3C,uEAAuE;YACvE,yEAAyE;YACzE,6CAA6C;YAC7C,MAAM,uBAAuB,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;gBAC7D,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC9C,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC;YAC7B,MAAM,YAAY,GAChB,IAAI,CAAC,YAAY,KAAK,SAAS;gBAC7B,CAAC,CAAC,uBAAuB;gBACzB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,uBAAuB,CAAC,CAAC;YAC3D,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,GAAG,YAAY,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC;YACjH,MAAM,MAAM,GAAG,YAAY,IAAI,IAAI,CAAC,UAAU,IAAI,YAAY,GAAG,QAAQ,CAAC;YAC1E,IAAI,MAAM,EAAE,CAAC;gBACX,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACxB,CAAC;YACD,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACzC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,CAAC;YACrF,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,MAAM,CAChD,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,CACjB,IAAI;gBACJ,cAAc,CACZ;oBACE,KAAK,EAAE,QAAQ,CAAC,UAAU;oBAC1B,GAAG,EAAE,QAAQ,CAAC,QAAQ;oBACtB,GAAG,CAAC,QAAQ,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACtE,EACD,YAAY,EACZ,QAAQ,CAAC,IAAI,CACd,EACH,CAAC,CACF,CAAC;YACF,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,YAAY,GAAG,YAAY,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACrG,IAAI,SAAS,IAAI,CAAC,OAAO,EAAE,CAAC;gBAC1B,IAAI,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;oBACvC,KAAK,CAAC,WAAW,GAAG,OAAO,CAAC;gBAC9B,CAAC;YACH,CAAC;YACD,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;gBACtB,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;oBACjB,qEAAqE;oBACrE,kCAAkC;oBAClC,MAAM,SAAS,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC;oBAC7E,IAAI,SAAS,EAAE,CAAC;wBACd,KAAK,CAAC,WAAW,GAAG,OAAO,CAAC;oBAC9B,CAAC;oBACD,IAAI,SAAS,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;wBAC9B,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;oBAC3C,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,KAAK,EAAE,CAAC;YAChB,CAAC;QACH,CAAC;QACD,WAAW,GAAG,UAAU,CAAC;IAC3B,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,GAAS,EAAE;QAC1B,UAAU,CAAC,WAAW,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;QAC9C,QAAQ,CAAC,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;QACtC,UAAU,CAAC,WAAW,GAAG,GAAG,CAAC,YAAY,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;QAC/D,MAAM,QAAQ,GAAG,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;QACnE,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,EAAE,GAAG,QAAQ,GAAG,GAAG,GAAG,CAAC,CAAC;QAC/D,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC,mBAAmB,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IACzE,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,KAAK,EAAE,MAAc,EAAiB,EAAE;QAC1D,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAC1C,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;gBAC1B,YAAY,GAAG,IAAI,CAAC;gBACpB,YAAY,GAAG,IAAI,CAAC;gBACpB,QAAQ,EAAE,CAAC;YACb,CAAC;YACD,OAAO;QACT,CAAC;QACD,OAAO,GAAG,IAAI,CAAC;QACf,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC/C,YAAY,GAAG,SAAS,CAAC;QACzB,QAAQ,EAAE,CAAC;QACX,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,GAAG,IAAI,CAAC;YACd,OAAO,GAAG,KAAK,CAAC;YAChB,YAAY,GAAG,IAAI,CAAC;YACpB,WAAW,CAAC,IAAI,CAAC,CAAC;YAClB,SAAS,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC;gBAAS,CAAC;YACT,OAAO,GAAG,KAAK,CAAC;QAClB,CAAC;QACD,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC;QACtB,IAAI,CAAC,MAAM,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;YACrC,MAAM,IAAI,GAAG,YAAY,CAAC;YAC1B,YAAY,GAAG,IAAI,CAAC;YACpB,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvB,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,GAAS,EAAE;QAC9B,OAAO,GAAG,KAAK,CAAC;QAChB,oBAAoB,CAAC,cAAc,CAAC,CAAC;QACrC,UAAU,CAAC,SAAS,GAAG,SAAS,CAAC;QACjC,WAAW,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,GAAS,EAAE;QACtB,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QACD,MAAM,MAAM,GAAG,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,cAAc,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;QAChG,IAAI,MAAM,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;YAC3B,YAAY,GAAG,QAAQ,GAAG,CAAC,CAAC;YAC5B,OAAO,GAAG,KAAK,CAAC;YAChB,UAAU,CAAC,SAAS,GAAG,SAAS,CAAC;YACjC,QAAQ,EAAE,CAAC;YACX,KAAK,WAAW,CAAC,YAAY,CAAC,CAAC;YAC/B,WAAW,CAAC,KAAK,CAAC,CAAC;YACnB,OAAO;QACT,CAAC;QACD,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;YAC5B,KAAK,WAAW,CAAC,MAAM,CAAC,CAAC;QAC3B,CAAC;QACD,cAAc,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,CAAC,KAAc,EAAQ,EAAE;QAC1C,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO;YACT,CAAC;YACD,IAAI,YAAY,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;gBACjC,YAAY,GAAG,CAAC,CAAC;gBACjB,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC;YACtB,CAAC;YACD,OAAO,GAAG,IAAI,CAAC;YACf,cAAc,GAAG,YAAY,CAAC;YAC9B,cAAc,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;YACnC,UAAU,CAAC,SAAS,GAAG,kBAAkB,CAAC;YAC1C,WAAW,CAAC,IAAI,CAAC,CAAC;YAClB,cAAc,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAC/C,CAAC;aAAM,CAAC;YACN,YAAY,EAAE,CAAC;QACjB,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,CAAC,KAAa,EAAQ,EAAE;QACxC,YAAY,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,UAAU,CAAC,YAAY,GAAG,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC1D,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;YAC5B,KAAK,WAAW,CAAC,MAAM,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC,CAAC;IAEF,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,gBAAgB,CAAc,kBAAkB,CAAC,EAAE,CAAC;QAChF,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACzC,KAAK,CAAC,eAAe,EAAE,CAAC;YACxB,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC3C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC5B,OAAO;YACT,CAAC;YACD,YAAY,EAAE,CAAC;YACf,KAAK,WAAW,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,WAAW,GAAG,CAAC,MAA0B,EAAW,EAAE;QAC1D,uEAAuE;QACvE,2CAA2C;QAC3C,IAAI,CAAC,MAAM,IAAI,OAAQ,MAAkB,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC/D,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,OAAO,GAAG,MAAqB,CAAC;QACtC,OAAO,CACL,OAAO,CAAC,iBAAiB;YACzB,OAAO,CAAC,OAAO,KAAK,OAAO;YAC3B,OAAO,CAAC,OAAO,KAAK,UAAU;YAC9B,OAAO,CAAC,OAAO,KAAK,QAAQ,CAC7B,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,kBAAkB,GAAG,CAAC,KAAoB,EAAQ,EAAE;QACxD,IAAI,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,IAAI,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1G,OAAO;QACT,CAAC;QACD,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;QACpD,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,EAAE,CAAC;YAC9B,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;QACrB,CAAC;aAAM,IAAI,KAAK,CAAC,GAAG,KAAK,YAAY,EAAE,CAAC;YACtC,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,SAAS,CAAC,MAAM,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,CAAC;IAEF,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC;IACvC,UAAU,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACjE,cAAc,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9D,iBAAiB,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAChE,cAAc,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;IAC5E,iBAAiB,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC;IAC9E,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;IACvD,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;QACtC,YAAY,EAAE,CAAC;QACf,KAAK,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IACH,YAAY,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE;QAC3C,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC;QAC7B,WAAW,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;IACH,YAAY,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;QAC1C,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAC1C,WAAW,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAE3F,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAClD,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACxB,QAAQ,EAAE,CAAC;IACX,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;IAClB,MAAM,WAAW,CAAC,CAAC,CAAC,CAAC;AACvB,CAAC;AAED,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;IACzC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;AACH,CAAC,CAAC,CAAC;AACH,MAAM,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,CAAC,KAAK,EAAE,EAAE;IACtD,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC1B,CAAC,CAAC,CAAC;AAEH,KAAK,IAAI,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC"}
package/dist/project.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { type CompositionFormat } from "./contracts.js";
2
+ import type { FontManifest } from "./fonts/types.js";
2
3
  export type CompositionKind = "html";
3
4
  export type TimelineKind = "timeline";
4
5
  /** The project format is the composition format the project fixes for every entry. */
@@ -23,9 +24,15 @@ export interface Project {
23
24
  format?: ProjectFormat;
24
25
  compositions: Map<string, ProjectComposition>;
25
26
  timelines: Map<string, ProjectTimeline>;
27
+ /** Parsed optional project font manifest. */
28
+ fonts?: FontManifest;
26
29
  }
27
- /** Walks up from a directory until it finds video.config.js. */
30
+ export interface LoadProjectOptions {
31
+ /** Set to false when the caller wants to read the font manifest itself. */
32
+ fonts?: boolean;
33
+ }
34
+ /** Walks up from a directory until it finds fy.config.js. */
28
35
  export declare function resolveProjectRoot(start?: string): Promise<string>;
29
- /** Loads video.config.js and validates its explicit composition and timeline entries. */
30
- export declare function loadProject(projectRoot: string): Promise<Project>;
36
+ /** Loads fy.config.js and validates its explicit composition and timeline entries. */
37
+ export declare function loadProject(projectRoot: string, options?: LoadProjectOptions): Promise<Project>;
31
38
  //# sourceMappingURL=project.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"AAIA,OAAO,EAAiB,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEvE,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC;AACrC,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC;AAEtC,sFAAsF;AACtF,MAAM,MAAM,aAAa,GAAG,iBAAiB,CAAC;AAE9C,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,iFAAiF;IACjF,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,eAAe,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,iFAAiF;IACjF,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,YAAY,CAAC;CACpB;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAC9C,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CACzC;AAYD,gEAAgE;AAChE,wBAAsB,kBAAkB,CAAC,KAAK,SAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAwB/E;AA+CD,yFAAyF;AACzF,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAoGvE"}
1
+ {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"AAIA,OAAO,EAAiB,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC;AACrC,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC;AAEtC,sFAAsF;AACtF,MAAM,MAAM,aAAa,GAAG,iBAAiB,CAAC;AAE9C,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,iFAAiF;IACjF,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,eAAe,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,iFAAiF;IACjF,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,YAAY,CAAC;CACpB;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAC9C,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACxC,6CAA6C;IAC7C,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,2EAA2E;IAC3E,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAYD,6DAA6D;AAC7D,wBAAsB,kBAAkB,CAAC,KAAK,SAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAwB/E;AA+CD,sFAAsF;AACtF,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,OAAO,CAAC,CAsGzG"}
package/dist/project.js CHANGED
@@ -3,6 +3,7 @@ import path from "node:path";
3
3
  import { pathToFileURL } from "node:url";
4
4
  import { FrameyardError } from "./errors.js";
5
5
  import { isPlainObject } from "./contracts.js";
6
+ import { readFontManifest } from "./fonts/manifest.js";
6
7
  const PROJECT_ID = /^[A-Za-z0-9][A-Za-z0-9._-]*$/;
7
8
  async function isFile(filePath) {
8
9
  try {
@@ -12,7 +13,7 @@ async function isFile(filePath) {
12
13
  return false;
13
14
  }
14
15
  }
15
- /** Walks up from a directory until it finds video.config.js. */
16
+ /** Walks up from a directory until it finds fy.config.js. */
16
17
  export async function resolveProjectRoot(start = process.cwd()) {
17
18
  let current = path.resolve(start);
18
19
  try {
@@ -24,29 +25,29 @@ export async function resolveProjectRoot(start = process.cwd()) {
24
25
  throw new FrameyardError("CONFIG_NOT_FOUND", `Project directory does not exist: ${current}`);
25
26
  }
26
27
  while (true) {
27
- if (await isFile(path.join(current, "video.config.js"))) {
28
+ if (await isFile(path.join(current, "fy.config.js"))) {
28
29
  return current;
29
30
  }
30
31
  const parent = path.dirname(current);
31
32
  if (parent === current) {
32
- throw new FrameyardError("CONFIG_NOT_FOUND", `No video.config.js found from ${path.resolve(start)} upward. Run inside a Frameyard project or pass --project.`);
33
+ throw new FrameyardError("CONFIG_NOT_FOUND", `No fy.config.js found from ${path.resolve(start)} upward. Run inside a Frameyard project or pass --project.`);
33
34
  }
34
35
  current = parent;
35
36
  }
36
37
  }
37
38
  function normalizeFormat(value) {
38
39
  if (!isPlainObject(value)) {
39
- throw new FrameyardError("CONFIG_INVALID", "video.config.js format must be an object with width, height, and fps.");
40
+ throw new FrameyardError("CONFIG_INVALID", "fy.config.js format must be an object with width, height, and fps.");
40
41
  }
41
42
  const { width, height, fps } = value;
42
43
  if (!Number.isInteger(width) || width <= 0) {
43
- throw new FrameyardError("CONFIG_INVALID", "video.config.js format.width must be a positive integer.");
44
+ throw new FrameyardError("CONFIG_INVALID", "fy.config.js format.width must be a positive integer.");
44
45
  }
45
46
  if (!Number.isInteger(height) || height <= 0) {
46
- throw new FrameyardError("CONFIG_INVALID", "video.config.js format.height must be a positive integer.");
47
+ throw new FrameyardError("CONFIG_INVALID", "fy.config.js format.height must be a positive integer.");
47
48
  }
48
49
  if (typeof fps !== "number" || !Number.isFinite(fps) || fps <= 0) {
49
- throw new FrameyardError("CONFIG_INVALID", "video.config.js format.fps must be a positive number.");
50
+ throw new FrameyardError("CONFIG_INVALID", "fy.config.js format.fps must be a positive number.");
50
51
  }
51
52
  return { width: width, height: height, fps };
52
53
  }
@@ -67,12 +68,12 @@ function entryPath(root, id, entryValue, extension) {
67
68
  }
68
69
  return { entry: path.relative(root, absoluteEntry).split(path.sep).join("/"), absoluteEntry };
69
70
  }
70
- /** Loads video.config.js and validates its explicit composition and timeline entries. */
71
- export async function loadProject(projectRoot) {
71
+ /** Loads fy.config.js and validates its explicit composition and timeline entries. */
72
+ export async function loadProject(projectRoot, options = {}) {
72
73
  const root = path.resolve(projectRoot);
73
- const configPath = path.join(root, "video.config.js");
74
+ const configPath = path.join(root, "fy.config.js");
74
75
  if (!(await isFile(configPath))) {
75
- throw new FrameyardError("CONFIG_NOT_FOUND", `No video.config.js found in ${root}.`);
76
+ throw new FrameyardError("CONFIG_NOT_FOUND", `No fy.config.js found in ${root}.`);
76
77
  }
77
78
  let configModule;
78
79
  try {
@@ -85,18 +86,18 @@ export async function loadProject(projectRoot) {
85
86
  }
86
87
  const config = configModule.default;
87
88
  if (!isPlainObject(config)) {
88
- throw new FrameyardError("CONFIG_INVALID", "video.config.js must default-export a configuration object.");
89
+ throw new FrameyardError("CONFIG_INVALID", "fy.config.js must default-export a configuration object.");
89
90
  }
90
91
  const rawCompositions = config.compositions;
91
92
  const rawTimelines = config.timelines;
92
93
  if (rawCompositions === undefined && rawTimelines === undefined) {
93
- throw new FrameyardError("CONFIG_INVALID", "video.config.js must contain a compositions or timelines object.");
94
+ throw new FrameyardError("CONFIG_INVALID", "fy.config.js must contain a compositions or timelines object.");
94
95
  }
95
96
  if (rawCompositions !== undefined && !isPlainObject(rawCompositions)) {
96
- throw new FrameyardError("CONFIG_INVALID", "video.config.js must contain a compositions object.");
97
+ throw new FrameyardError("CONFIG_INVALID", "fy.config.js must contain a compositions object.");
97
98
  }
98
99
  if (rawTimelines !== undefined && !isPlainObject(rawTimelines)) {
99
- throw new FrameyardError("CONFIG_INVALID", "video.config.js timelines must be an object.");
100
+ throw new FrameyardError("CONFIG_INVALID", "fy.config.js timelines must be an object.");
100
101
  }
101
102
  const format = config.format === undefined ? undefined : normalizeFormat(config.format);
102
103
  const compositions = new Map();
@@ -131,17 +132,19 @@ export async function loadProject(projectRoot) {
131
132
  timelines.set(id, { id, ...location, kind: "timeline" });
132
133
  }
133
134
  if (compositions.size === 0 && timelines.size === 0) {
134
- throw new FrameyardError("CONFIG_INVALID", "video.config.js must list at least one composition or timeline.");
135
+ throw new FrameyardError("CONFIG_INVALID", "fy.config.js must list at least one composition or timeline.");
135
136
  }
136
137
  if (timelines.size > 0 && !format) {
137
- throw new FrameyardError("CONFIG_INVALID", "video.config.js must declare format { width, height, fps } when it lists timelines.");
138
+ throw new FrameyardError("CONFIG_INVALID", "fy.config.js must declare format { width, height, fps } when it lists timelines.");
138
139
  }
140
+ const fonts = options.fonts === false ? undefined : await readFontManifest(root);
139
141
  return {
140
142
  root,
141
143
  configPath,
142
144
  ...(format ? { format } : {}),
143
145
  compositions,
144
146
  timelines,
147
+ ...(fonts !== undefined ? { fonts } : {}),
145
148
  };
146
149
  }
147
150
  //# sourceMappingURL=project.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"project.js","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,12 @@ export interface AudioAsset {
9
9
  /** A timeline clip that may legitimately have no audio stream, such as an embedded video. */
10
10
  export type InspectAudioClip = ResolvedAudioClip & {
11
11
  allowSilent?: boolean;
12
+ /**
13
+ * The source may end before the mapped timeline window. Composition audio
14
+ * without an explicit duration plays to its natural end, so the remaining
15
+ * silence is expected rather than an overrun.
16
+ */
17
+ allowShortSource?: boolean;
12
18
  };
13
19
  export interface AudioInspection {
14
20
  assets: AudioAsset[];
@@ -1 +1 @@
1
- {"version":3,"file":"audio.d.ts","sourceRoot":"","sources":["../../src/renderer/audio.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAIzD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,iBAAiB,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,qBAAqB,EAAE,MAAM,CAAC;IAC9B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,6FAA6F;AAC7F,MAAM,MAAM,gBAAgB,GAAG,iBAAiB,GAAG;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAE7E,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,KAAK,EAAE,KAAK,CAAC;QACX,GAAG,EAAE,MAAM,CAAC;QACZ,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;QACnB,qBAAqB,EAAE,MAAM,CAAC;QAC9B,SAAS,EAAE,MAAM,CAAC;QAClB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;IACH,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAMD,mFAAmF;AACnF,wBAAsB,oBAAoB,CAAC,OAAO,EAAE;IAClD,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,GAAG,OAAO,CAAC,eAAe,CAAC,CA4G3B"}
1
+ {"version":3,"file":"audio.d.ts","sourceRoot":"","sources":["../../src/renderer/audio.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAIzD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,iBAAiB,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,qBAAqB,EAAE,MAAM,CAAC;IAC9B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,6FAA6F;AAC7F,MAAM,MAAM,gBAAgB,GAAG,iBAAiB,GAAG;IACjD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,CAAC;AAEF,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,KAAK,EAAE,KAAK,CAAC;QACX,GAAG,EAAE,MAAM,CAAC;QACZ,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;QACnB,qBAAqB,EAAE,MAAM,CAAC;QAC9B,SAAS,EAAE,MAAM,CAAC;QAClB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;IACH,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAMD,mFAAmF;AACnF,wBAAsB,oBAAoB,CAAC,OAAO,EAAE;IAClD,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,GAAG,OAAO,CAAC,eAAe,CAAC,CAgH3B"}
@@ -48,7 +48,9 @@ export async function inspectTimelineAudio(options) {
48
48
  if (clip.trimStart >= sourceDurationSeconds) {
49
49
  warnings.push(`Audio clip ${clipIndex + 1} (${clip.src}) trimStart ${clip.trimStart}s is at or beyond the source duration ${sourceDurationSeconds.toFixed(2)}s.`);
50
50
  }
51
- if (clip.trimDuration !== undefined && clip.trimStart + clip.trimDuration > sourceDurationSeconds + 0.001) {
51
+ if (clip.allowShortSource !== true &&
52
+ clip.trimDuration !== undefined &&
53
+ clip.trimStart + clip.trimDuration > sourceDurationSeconds + 0.001) {
52
54
  warnings.push(`Audio clip ${clipIndex + 1} (${clip.src}) trim range ends at ${(clip.trimStart + clip.trimDuration).toFixed(2)}s, beyond the source duration ${sourceDurationSeconds.toFixed(2)}s.`);
53
55
  }
54
56
  const timelineStartSeconds = clip.startFrame / options.fps;
@@ -1 +1 @@
1
- {"version":3,"file":"audio.js","sourceRoot":"","sources":["../../src/renderer/audio.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"audio.js","sourceRoot":"","sources":["../../src/renderer/audio.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/renderer/browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,OAAO,EAAmD,MAAM,YAAY,CAAC;AACrG,OAAO,KAAK,EACV,qBAAqB,EACrB,qBAAqB,EACrB,KAAK,EACL,iBAAiB,EACjB,2BAA2B,EAC3B,sBAAsB,EACvB,MAAM,iBAAiB,CAAC;AAGzB,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE;QAAE,IAAI,EAAE,QAAQ,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,UAAU,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACnF,QAAQ,CAAC,QAAQ,EAAE,2BAA2B,CAAC;IAC/C,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,iBAAiB,EAAE,CAAC;IACzC,QAAQ,CAAC,kBAAkB,EAAE,iBAAiB,EAAE,CAAC;IACjD,QAAQ,CAAC,eAAe,EAAE,sBAAsB,EAAE,CAAC;IACnD,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3B,eAAe,IAAI,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAC;IACpD,aAAa,IAAI,IAAI,CAAC;IACtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAqBD,eAAO,MAAM,YAAY,EAAE,MAAM,EAkBhC,CAAC;AAEF,KAAK,qBAAqB,GAAG,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAElE,eAAO,MAAM,uBAAuB,EAAE,qBAOrC,CAAC;AA8DF,wBAAsB,sBAAsB,CAAC,OAAO,EAAE;IACpD,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,qBAAqB,CAAC;IAC5B,iBAAiB,EAAE,SAAS,qBAAqB,EAAE,CAAC;IACpD,mEAAmE;IACnE,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAmP9B"}
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/renderer/browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,OAAO,EAAmD,MAAM,YAAY,CAAC;AACrG,OAAO,KAAK,EACV,qBAAqB,EACrB,qBAAqB,EACrB,KAAK,EACL,iBAAiB,EACjB,2BAA2B,EAC3B,sBAAsB,EACvB,MAAM,iBAAiB,CAAC;AAIzB,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE;QAAE,IAAI,EAAE,QAAQ,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,UAAU,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACnF,QAAQ,CAAC,QAAQ,EAAE,2BAA2B,CAAC;IAC/C,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,iBAAiB,EAAE,CAAC;IACzC,QAAQ,CAAC,kBAAkB,EAAE,iBAAiB,EAAE,CAAC;IACjD,QAAQ,CAAC,eAAe,EAAE,sBAAsB,EAAE,CAAC;IACnD,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3B,eAAe,IAAI,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAC;IACpD,aAAa,IAAI,IAAI,CAAC;IACtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAqBD,eAAO,MAAM,YAAY,EAAE,MAAM,EAkBhC,CAAC;AAEF,KAAK,qBAAqB,GAAG,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAElE,eAAO,MAAM,uBAAuB,EAAE,qBAOrC,CAAC;AA8DF,wBAAsB,sBAAsB,CAAC,OAAO,EAAE;IACpD,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,qBAAqB,CAAC;IAC5B,iBAAiB,EAAE,SAAS,qBAAqB,EAAE,CAAC;IACpD,mEAAmE;IACnE,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA+P9B"}
@@ -1,5 +1,6 @@
1
1
  import { chromium } from "playwright";
2
2
  import { FrameyardError, isFrameyardError } from "../errors.js";
3
+ import { startTiming } from "./timings.js";
3
4
  export const BROWSER_ARGS = [
4
5
  "--force-color-profile=srgb",
5
6
  "--disable-lcd-text",
@@ -83,7 +84,9 @@ function mergeDiagnostics(...groups) {
83
84
  return result;
84
85
  }
85
86
  export async function openCompositionSession(options) {
87
+ const sessionTiming = startTiming("browser.session", { entry: options.entry });
86
88
  let browser;
89
+ const launchTiming = startTiming("browser.launch", { entry: options.entry });
87
90
  try {
88
91
  browser = await chromium.launch({
89
92
  headless: true,
@@ -93,6 +96,7 @@ export async function openCompositionSession(options) {
93
96
  catch (error) {
94
97
  throw new FrameyardError("BROWSER_FAILED", `Chromium could not start. Install the pinned browser with "npx playwright install chromium".\n${browserError(error)}`, { cause: error });
95
98
  }
99
+ launchTiming.finish();
96
100
  let context;
97
101
  let page;
98
102
  let cdp;
@@ -118,12 +122,14 @@ export async function openCompositionSession(options) {
118
122
  });
119
123
  const compositionUrl = new URL(options.entry, options.serverUrl);
120
124
  compositionUrl.searchParams.set("__fy-manual", "1");
125
+ const gotoTiming = startTiming("browser.goto", { entry: options.entry });
121
126
  await page.goto(compositionUrl.href, {
122
127
  waitUntil: "domcontentloaded",
123
128
  timeout: 60_000,
124
129
  });
125
130
  await page.waitForFunction(() => Boolean(window.__fy) ||
126
131
  Boolean(window.__fyError), undefined, { timeout: 30_000 });
132
+ gotoTiming.finish();
127
133
  const initError = await page.evaluate(() => window.__fyError);
128
134
  if (initError) {
129
135
  throw new FrameyardError(initError.code, initError.message, {
@@ -131,6 +137,7 @@ export async function openCompositionSession(options) {
131
137
  });
132
138
  }
133
139
  let loaded;
140
+ const hostLoadTiming = startTiming("browser.host_load", { entry: options.entry });
134
141
  try {
135
142
  loaded = await page.evaluate(async ({ props }) => {
136
143
  const api = window.__fy;
@@ -154,18 +161,23 @@ export async function openCompositionSession(options) {
154
161
  catch (error) {
155
162
  throw browserCommandError(error);
156
163
  }
164
+ hostLoadTiming.finish();
157
165
  if (!metadataMatches(loaded.metadata, options.info.metadata)) {
158
166
  throw new FrameyardError("COMPOSITION_INVALID", `Composition "${options.entry}" metadata changed between static validation and browser load.`, { diagnostics: [...options.staticDiagnostics] });
159
167
  }
168
+ const networkTiming = startTiming("browser.networkidle", { entry: options.entry });
160
169
  try {
161
170
  await page.waitForLoadState("networkidle", { timeout: 30_000 });
162
171
  }
163
172
  catch (error) {
164
173
  throw new FrameyardError("RENDER_FAILED", "Timed out waiting for composition assets and network requests to finish loading.", { cause: error });
165
174
  }
175
+ networkTiming.finish();
176
+ const paintTiming = startTiming("browser.first_paint", { entry: options.entry });
166
177
  await page.evaluate(() => new Promise((resolve) => {
167
178
  requestAnimationFrame(() => requestAnimationFrame(() => resolve()));
168
179
  }));
180
+ paintTiming.finish();
169
181
  // Loading is complete. Frame production must not depend on new network data.
170
182
  await page.route("**/*", (route) => route.abort("blockedbyclient"));
171
183
  const activePage = page;
@@ -259,6 +271,7 @@ export async function openCompositionSession(options) {
259
271
  await closeQuietly(async () => browser.close());
260
272
  },
261
273
  };
274
+ sessionTiming.finish();
262
275
  return session;
263
276
  }
264
277
  catch (error) {