@hypit/hypit 0.1.3 → 0.1.5

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 (486) hide show
  1. package/README.md +5 -3
  2. package/dist/public/caption.d.ts +206 -183
  3. package/dist/public/composition.d.ts +25 -3
  4. package/dist/public/endpoint-kit.d.ts +24 -2
  5. package/dist/public/generation.d.ts +5 -1
  6. package/dist/public/hyperframes.d.ts +19 -1
  7. package/dist/public/narrative.d.ts +17 -3
  8. package/dist/public/performance.d.ts +1590 -0
  9. package/dist/public/program-space.d.ts +179 -32
  10. package/dist/public/runtime-kit.d.ts +21 -8
  11. package/dist/public/sound.d.ts +822 -0
  12. package/dist/public/speech.d.ts +41 -0
  13. package/dist/public/studio-adapter.d.ts +107 -16
  14. package/dist/public/temporal-markup.d.ts +9 -44
  15. package/dist/public/temporal.d.ts +37 -28
  16. package/dist/public/{semantic-track.d.ts → timeline.d.ts} +62 -49
  17. package/examples/README.md +18 -10
  18. package/examples/minimal-author-package/packages/example-component/preview/preview.svml +19 -12
  19. package/examples/minimal-author-package/packages/example-component/src/component.ts +5 -5
  20. package/examples/minimal-author-package/packages/example-component/src/fragment.ts +3 -5
  21. package/examples/minimal-author-package/packages/example-component/src/manifest.ts +8 -10
  22. package/examples/minimal-author-package/packages/example-component/src/surface.ts +2 -2
  23. package/examples/provider-package/README.md +78 -0
  24. package/examples/provider-package/hypit.runtime.json +12 -0
  25. package/examples/provider-package/packages/provider-images/package.json +11 -0
  26. package/examples/provider-package/packages/provider-images/src/activation.ts +24 -0
  27. package/examples/provider-package/packages/provider-images/src/provider.ts +122 -0
  28. package/examples/provider-package/packages/provider-images/tsconfig.json +9 -0
  29. package/examples/semantic-composition/README.md +6 -0
  30. package/examples/semantic-composition/chat.svml +6 -5
  31. package/examples/semantic-composition/packages/chat-scene/README.md +3 -3
  32. package/examples/semantic-composition/packages/chat-scene/src/activation.ts +18 -21
  33. package/examples/semantic-composition/packages/chat-scene/src/render.ts +4 -4
  34. package/examples/semantic-composition/packages/performance-styles/README.md +42 -0
  35. package/examples/semantic-composition/packages/performance-styles/package.json +25 -0
  36. package/examples/semantic-composition/packages/performance-styles/src/activation.ts +57 -0
  37. package/examples/semantic-composition/packages/performance-styles/src/render.ts +54 -0
  38. package/examples/semantic-composition/packages/performance-styles/src/studio.ts +28 -0
  39. package/examples/semantic-composition/packages/performance-styles/tsconfig.json +18 -0
  40. package/examples/semantic-composition/packages/responsive-explainer/README.md +16 -9
  41. package/examples/semantic-composition/packages/responsive-explainer/src/activation.ts +12 -12
  42. package/examples/semantic-composition/packages/responsive-explainer/src/render.ts +5 -5
  43. package/examples/semantic-composition/packages/sound-styles/README.md +36 -0
  44. package/examples/semantic-composition/packages/sound-styles/package.json +25 -0
  45. package/examples/semantic-composition/packages/sound-styles/src/activation.ts +53 -0
  46. package/examples/semantic-composition/packages/sound-styles/src/render.ts +14 -0
  47. package/examples/semantic-composition/packages/sound-styles/tsconfig.json +18 -0
  48. package/package.json +35 -15
  49. package/packages/audio-track/README.md +20 -13
  50. package/packages/audio-track/package.json +1 -1
  51. package/packages/audio-track/src/component.ts +4 -4
  52. package/packages/audio-track/src/fragment.ts +6 -5
  53. package/packages/audio-track/src/index.ts +1 -1
  54. package/packages/audio-track/src/manifest.ts +17 -16
  55. package/packages/audio-track/src/program.ts +21 -25
  56. package/packages/audio-track/src/surface.ts +19 -18
  57. package/packages/audio-track-studio/README.md +23 -0
  58. package/packages/audio-track-studio/src/index.ts +33 -19
  59. package/packages/author-kit/README.md +1 -1
  60. package/packages/background-removal/README.md +4 -7
  61. package/packages/browser-capture/package.json +1 -1
  62. package/packages/build-result/README.md +69 -0
  63. package/packages/build-result/package.json +2 -1
  64. package/packages/build-result/src/decode.ts +12 -8
  65. package/packages/build-result/src/execution-log.ts +17 -0
  66. package/packages/build-result/src/file-reference.ts +42 -0
  67. package/packages/build-result/src/index.ts +4 -0
  68. package/packages/build-result/src/replace-file-windows.ts +58 -0
  69. package/packages/build-result/src/replace-file.ts +11 -0
  70. package/packages/build-result/src/store.ts +58 -14
  71. package/packages/build-result/src/types.ts +41 -8
  72. package/packages/build-result/src/writer.ts +12 -1
  73. package/packages/build-result-fs/README.md +23 -1
  74. package/packages/build-result-s3/README.md +5 -0
  75. package/packages/build-result-s3/src/repository.ts +23 -5
  76. package/packages/caption/README.md +61 -73
  77. package/packages/caption/package.json +3 -2
  78. package/packages/caption/src/activation.ts +2 -2
  79. package/packages/caption/src/component.ts +20 -5
  80. package/packages/caption/src/display.ts +3 -18
  81. package/packages/caption/src/fragment.ts +3 -7
  82. package/packages/caption/src/index.ts +6 -5
  83. package/packages/caption/src/manifest.ts +29 -46
  84. package/packages/caption/src/style.ts +24 -135
  85. package/packages/caption/src/surface.ts +12 -92
  86. package/packages/caption/src/temporalize.ts +18 -53
  87. package/packages/caption/src/types.ts +8 -35
  88. package/packages/caption/src/visibility.ts +23 -0
  89. package/packages/caption-fine/README.md +31 -11
  90. package/packages/caption-fine/package.json +4 -2
  91. package/packages/caption-fine/src/component.ts +3 -3
  92. package/packages/caption-fine/src/fragment.ts +7 -19
  93. package/packages/caption-fine/src/index.ts +2 -0
  94. package/packages/caption-fine/src/manifest.ts +27 -18
  95. package/packages/caption-fine/src/recipe.ts +7 -0
  96. package/packages/caption-fine/src/render.ts +62 -49
  97. package/packages/caption-fine/src/schedule.ts +39 -35
  98. package/packages/caption-fine/src/style.ts +10 -9
  99. package/packages/caption-fine/src/surface.ts +62 -35
  100. package/packages/caption-fine/src/types.ts +2 -0
  101. package/packages/caption-fine-studio/README.md +24 -2
  102. package/packages/caption-fine-studio/package.json +10 -3
  103. package/packages/caption-fine-studio/src/activation.ts +3 -3
  104. package/packages/caption-fine-studio/src/index.ts +61 -40
  105. package/packages/cli/README.md +81 -3
  106. package/packages/cli/package.json +1 -0
  107. package/packages/cli/src/arguments.ts +39 -15
  108. package/packages/cli/src/build-planning.ts +9 -3
  109. package/packages/cli/src/command.ts +7 -1
  110. package/packages/cli/src/commands/environment.ts +66 -27
  111. package/packages/cli/src/commands/execution.ts +81 -26
  112. package/packages/cli/src/commands/results.ts +7 -11
  113. package/packages/cli/src/index.ts +2 -2
  114. package/packages/cli/src/machine-view.ts +15 -5
  115. package/packages/cli/src/main.ts +38 -42
  116. package/packages/cli/src/observation.ts +7 -1
  117. package/packages/cli/src/output.ts +92 -34
  118. package/packages/cli/src/result-export.ts +22 -13
  119. package/packages/cli/src/run-file.ts +19 -8
  120. package/packages/cli/src/view.ts +64 -18
  121. package/packages/comment-sticker/README.md +3 -3
  122. package/packages/comment-sticker/package.json +1 -1
  123. package/packages/comment-sticker/src/component.ts +4 -4
  124. package/packages/comment-sticker/src/fragment.ts +5 -4
  125. package/packages/comment-sticker/src/manifest.ts +7 -6
  126. package/packages/comment-sticker/src/program.ts +9 -9
  127. package/packages/comment-sticker/src/surface.ts +6 -7
  128. package/packages/comment-sticker-studio/src/index.ts +2 -1
  129. package/packages/compiler-node/src/compiler.ts +1 -0
  130. package/packages/composition/README.md +21 -0
  131. package/packages/composition/src/audio-presentation.ts +44 -0
  132. package/packages/composition/src/index.ts +3 -0
  133. package/packages/composition/src/schema.ts +8 -3
  134. package/packages/composition/src/track.ts +15 -1
  135. package/packages/credential-store-env/README.md +1 -1
  136. package/packages/deck-track/README.md +3 -3
  137. package/packages/deck-track/package.json +1 -1
  138. package/packages/deck-track/src/component.ts +5 -5
  139. package/packages/deck-track/src/fragment.ts +6 -5
  140. package/packages/deck-track/src/lower.ts +12 -12
  141. package/packages/deck-track/src/manifest.ts +8 -7
  142. package/packages/deck-track/src/program.ts +13 -16
  143. package/packages/deck-track/src/surface.ts +9 -10
  144. package/packages/driver-node/src/driver.ts +41 -3
  145. package/packages/elevenlabs-speech/README.md +27 -0
  146. package/packages/{provider-xiaomi-mimo → elevenlabs-speech}/package.json +5 -8
  147. package/packages/elevenlabs-speech/src/activation.ts +26 -0
  148. package/packages/elevenlabs-speech/src/fragment.ts +11 -0
  149. package/packages/elevenlabs-speech/src/index.ts +111 -0
  150. package/packages/elevenlabs-speech/src/surface.ts +167 -0
  151. package/packages/endpoint-kit/README.md +24 -0
  152. package/packages/endpoint-kit/src/index.ts +7 -1
  153. package/packages/estimate/README.md +56 -3
  154. package/packages/estimate/src/program.ts +7 -8
  155. package/packages/film/README.md +12 -7
  156. package/packages/film/package.json +1 -1
  157. package/packages/film/src/component.ts +4 -4
  158. package/packages/film/src/fragment.ts +6 -5
  159. package/packages/film/src/manifest.ts +11 -10
  160. package/packages/film/src/program.ts +5 -5
  161. package/packages/film/src/recipe.ts +2 -1
  162. package/packages/film/src/surface.ts +6 -6
  163. package/packages/film-studio/package.json +1 -1
  164. package/packages/film-studio/src/index.ts +2 -2
  165. package/packages/fishaudio-speech/README.md +33 -0
  166. package/packages/fishaudio-speech/package.json +21 -0
  167. package/packages/fishaudio-speech/src/activation.ts +32 -0
  168. package/packages/fishaudio-speech/src/fragment.ts +11 -0
  169. package/packages/fishaudio-speech/src/index.ts +156 -0
  170. package/packages/fishaudio-speech/src/surface.ts +192 -0
  171. package/packages/fonts-open/README.md +5 -0
  172. package/packages/fonts-open/package.json +5 -1
  173. package/packages/fonts-open/src/studio.ts +21 -0
  174. package/packages/generation/README.md +11 -1
  175. package/packages/generation/src/mapping.ts +28 -30
  176. package/packages/gpt-image/README.md +1 -2
  177. package/packages/grok-imagine/README.md +1 -2
  178. package/packages/hyperframes/README.md +7 -3
  179. package/packages/hyperframes/src/browser-program.ts +11 -2
  180. package/packages/hyperframes/src/document.ts +15 -2
  181. package/packages/interview-emoji-reveal/README.md +4 -4
  182. package/packages/interview-emoji-reveal/package.json +1 -1
  183. package/packages/interview-emoji-reveal/src/component.ts +4 -4
  184. package/packages/interview-emoji-reveal/src/fragment.ts +6 -5
  185. package/packages/interview-emoji-reveal/src/manifest.ts +9 -8
  186. package/packages/interview-emoji-reveal/src/program.ts +14 -14
  187. package/packages/interview-emoji-reveal/src/surface.ts +8 -9
  188. package/packages/media-execution/README.md +7 -3
  189. package/packages/media-execution/src/audio-presentation.ts +23 -0
  190. package/packages/media-execution/src/execute.ts +2 -0
  191. package/packages/media-pipeline/README.md +7 -3
  192. package/packages/media-pipeline/src/audio-plan.ts +4 -1
  193. package/packages/media-pipeline/src/component.ts +16 -2
  194. package/packages/media-pipeline/src/manifest.ts +3 -1
  195. package/packages/media-pipeline/src/types.ts +2 -1
  196. package/packages/media-track/README.md +14 -47
  197. package/packages/media-track/package.json +1 -1
  198. package/packages/media-track/preview/preview.svml +5 -5
  199. package/packages/media-track/src/author.ts +12 -6
  200. package/packages/media-track/src/component.ts +10 -16
  201. package/packages/media-track/src/fragment.ts +8 -7
  202. package/packages/media-track/src/index.ts +3 -1
  203. package/packages/media-track/src/lower.ts +7 -7
  204. package/packages/media-track/src/manifest.ts +16 -38
  205. package/packages/media-track/src/program.ts +62 -67
  206. package/packages/media-track/src/sampling.ts +6 -6
  207. package/packages/media-track/src/sequence.ts +8 -8
  208. package/packages/media-track/src/surface.ts +25 -43
  209. package/packages/media-track-studio/README.md +9 -0
  210. package/packages/media-track-studio/src/index.ts +23 -13
  211. package/packages/mimo-speech/README.md +1 -1
  212. package/packages/minimax-h3/README.md +1 -1
  213. package/packages/nano-banana/README.md +1 -1
  214. package/packages/narrative/README.md +23 -1
  215. package/packages/narrative/src/identity.ts +11 -0
  216. package/packages/narrative/src/index.ts +3 -0
  217. package/packages/narrative/src/schema.ts +28 -27
  218. package/packages/narrative/src/selection.ts +52 -0
  219. package/packages/narrative/src/types.ts +2 -0
  220. package/packages/package-loader-node/README.md +30 -0
  221. package/packages/package-loader-node/package.json +5 -2
  222. package/packages/package-loader-node/src/distribution-resolution.ts +10 -3
  223. package/packages/package-loader-node/src/index.ts +1 -0
  224. package/packages/package-loader-node/src/loader.ts +12 -15
  225. package/packages/package-loader-node/src/location.ts +27 -1
  226. package/packages/package-loader-node/src/module-scope.ts +183 -0
  227. package/packages/package-loader-node/src/types.ts +4 -0
  228. package/packages/performance/README.md +83 -0
  229. package/packages/performance/package.json +30 -0
  230. package/packages/performance/src/activation.ts +11 -0
  231. package/packages/performance/src/component.ts +46 -0
  232. package/packages/performance/src/index.ts +6 -0
  233. package/packages/performance/src/manifest.ts +53 -0
  234. package/packages/{media-track/src/performance.ts → performance/src/media.ts} +9 -10
  235. package/packages/performance/src/program.ts +51 -0
  236. package/packages/performance/src/style.ts +35 -0
  237. package/packages/performance/src/surface.ts +99 -0
  238. package/packages/performance-studio/README.md +25 -0
  239. package/packages/performance-studio/package.json +21 -0
  240. package/packages/performance-studio/src/activation.ts +6 -0
  241. package/packages/performance-studio/src/index.ts +84 -0
  242. package/packages/program-space/README.md +9 -18
  243. package/packages/program-space/src/activation.ts +1 -5
  244. package/packages/program-space/src/index.ts +2 -11
  245. package/packages/program-space/src/surface.ts +1 -20
  246. package/packages/project-context-node/README.md +20 -0
  247. package/packages/project-context-node/package.json +10 -0
  248. package/packages/project-context-node/src/index.ts +3 -0
  249. package/packages/{cli → project-context-node}/src/runtime-selection.ts +7 -2
  250. package/packages/provider-hyperframes-local/README.md +43 -15
  251. package/packages/provider-hyperframes-local/src/activation.ts +4 -3
  252. package/packages/provider-hyperframes-local/src/capture-process.ts +26 -4
  253. package/packages/provider-hyperframes-local/src/capture.ts +96 -26
  254. package/packages/provider-hyperframes-local/src/concurrency.ts +86 -0
  255. package/packages/provider-hyperframes-local/src/opaque-capture.ts +92 -0
  256. package/packages/provider-hyperframes-local/src/options.ts +2 -0
  257. package/packages/provider-hyperframes-local/src/program.ts +6 -3
  258. package/packages/provider-hyperframes-local/src/progress.ts +53 -0
  259. package/packages/provider-hyperframes-local/src/provider.ts +18 -5
  260. package/packages/provider-hyperframes-local/src/render.ts +48 -7
  261. package/packages/provider-hypihub/README.md +48 -17
  262. package/packages/provider-hypihub/package.json +2 -0
  263. package/packages/provider-hypihub/src/mapping.ts +31 -7
  264. package/packages/provider-hypihub/src/oauth.ts +6 -0
  265. package/packages/provider-hypihub/src/provider.ts +25 -13
  266. package/packages/provider-hypihub/src/routes.ts +1 -2
  267. package/packages/provider-hypihub/src/upload.ts +2 -0
  268. package/packages/provider-media-local/README.md +3 -4
  269. package/packages/provider-whisperx-local/README.md +57 -0
  270. package/packages/provider-whisperx-local/src/program.ts +1 -0
  271. package/packages/provider-whisperx-local/src/provider.ts +3 -0
  272. package/packages/ranking/README.md +8 -6
  273. package/packages/ranking/package.json +1 -1
  274. package/packages/ranking/src/component.ts +6 -6
  275. package/packages/ranking/src/fragment.ts +11 -7
  276. package/packages/ranking/src/manifest.ts +21 -14
  277. package/packages/ranking/src/render.ts +33 -35
  278. package/packages/ranking/src/schedule.ts +16 -19
  279. package/packages/ranking/src/surface.ts +12 -13
  280. package/packages/ranking-studio/README.md +29 -0
  281. package/packages/ranking-studio/package.json +8 -3
  282. package/packages/ranking-studio/src/index.ts +71 -12
  283. package/packages/render-hyperframes/README.md +7 -7
  284. package/packages/render-hyperframes/package.json +1 -1
  285. package/packages/render-hyperframes/src/component.ts +11 -1
  286. package/packages/render-hyperframes/src/fragment.ts +7 -4
  287. package/packages/render-hyperframes/src/manifest.ts +4 -4
  288. package/packages/render-hyperframes/src/surface.ts +6 -6
  289. package/packages/runtime/README.md +8 -1
  290. package/packages/runtime/src/catalog.ts +2 -0
  291. package/packages/runtime/src/execution.ts +15 -4
  292. package/packages/runtime/src/index.ts +2 -1
  293. package/packages/runtime/src/log.ts +51 -0
  294. package/packages/runtime/src/types.ts +5 -8
  295. package/packages/runtime-host-node/README.md +30 -0
  296. package/packages/runtime-host-node/package.json +1 -0
  297. package/packages/runtime-host-node/src/index.ts +25 -9
  298. package/packages/runtime-host-node/src/packages.ts +47 -50
  299. package/packages/runtime-kit/README.md +5 -0
  300. package/packages/runtime-kit/src/index.ts +3 -1
  301. package/packages/runtime-local/README.md +111 -4
  302. package/packages/runtime-local/src/config.ts +202 -56
  303. package/packages/runtime-local/src/control.ts +9 -1
  304. package/packages/runtime-local/src/executor.ts +66 -0
  305. package/packages/runtime-local/src/host.ts +37 -17
  306. package/packages/runtime-local/src/log.ts +48 -0
  307. package/packages/runtime-local/src/programs.ts +41 -25
  308. package/packages/runtime-local/src/result-writer.ts +2 -0
  309. package/packages/runtime-local/src/runtime.ts +10 -6
  310. package/packages/runtime-local/src/supervisor.ts +142 -0
  311. package/packages/runtime-local/src/types.ts +9 -2
  312. package/packages/runtime-local/src/worker-process.ts +7 -24
  313. package/packages/runtime-local/src/worker.ts +55 -83
  314. package/packages/screen-overlay/README.md +3 -3
  315. package/packages/screen-overlay/package.json +1 -1
  316. package/packages/screen-overlay/src/component.ts +3 -3
  317. package/packages/screen-overlay/src/fragment.ts +5 -4
  318. package/packages/screen-overlay/src/manifest.ts +7 -6
  319. package/packages/screen-overlay/src/program.ts +9 -9
  320. package/packages/screen-overlay/src/surface.ts +6 -7
  321. package/packages/script/README.md +37 -2
  322. package/packages/script/src/edit.ts +123 -73
  323. package/packages/script/src/lexical.ts +40 -6
  324. package/packages/script/src/manifest.ts +2 -2
  325. package/packages/script/src/narrative.ts +1 -0
  326. package/packages/script/src/parser.ts +36 -8
  327. package/packages/script/src/surface.ts +4 -3
  328. package/packages/script/src/types.ts +5 -1
  329. package/packages/script-studio/package.json +9 -3
  330. package/packages/script-studio/src/index.ts +2 -0
  331. package/packages/script-studio/src/projection.ts +105 -0
  332. package/packages/seedance/README.md +30 -1
  333. package/packages/seedance/src/index.ts +18 -7
  334. package/packages/seedance/src/surface.ts +17 -4
  335. package/packages/seedance-kits/README.md +10 -2
  336. package/packages/seedance-kits/kits/speaker-v1.svs +5 -5
  337. package/packages/seedream/README.md +1 -1
  338. package/packages/sound/README.md +81 -0
  339. package/packages/sound/package.json +25 -0
  340. package/packages/sound/src/activation.ts +11 -0
  341. package/packages/sound/src/component.ts +28 -0
  342. package/packages/sound/src/index.ts +5 -0
  343. package/packages/sound/src/manifest.ts +47 -0
  344. package/packages/sound/src/program.ts +84 -0
  345. package/packages/sound/src/style.ts +34 -0
  346. package/packages/sound/src/surface.ts +90 -0
  347. package/packages/sound-studio/README.md +22 -0
  348. package/packages/sound-studio/package.json +20 -0
  349. package/packages/sound-studio/src/activation.ts +6 -0
  350. package/packages/sound-studio/src/index.ts +74 -0
  351. package/packages/speech/README.md +2 -2
  352. package/packages/speech-alignment/src/align.ts +45 -21
  353. package/packages/speech-alignment/src/local.ts +8 -0
  354. package/packages/speech-alignment/src/locate.ts +1 -1
  355. package/packages/store-sqlite/README.md +7 -0
  356. package/packages/store-sqlite/src/store.ts +84 -83
  357. package/packages/studio/INSPECTOR.md +117 -0
  358. package/packages/studio/README.md +149 -14
  359. package/packages/studio/package.json +8 -7
  360. package/packages/studio/src/build-library.ts +99 -84
  361. package/packages/studio/src/companion-assembly.ts +1 -0
  362. package/packages/studio/src/domain.ts +1 -1
  363. package/packages/studio/src/fallback-companions.ts +3 -3
  364. package/packages/studio/src/feedback-server.ts +51 -0
  365. package/packages/studio/src/feedback-store.ts +66 -0
  366. package/packages/studio/src/feedback.ts +60 -0
  367. package/packages/studio/src/library-media.ts +19 -0
  368. package/packages/studio/src/parameter-values.ts +83 -1
  369. package/packages/studio/src/parameters.ts +132 -43
  370. package/packages/studio/src/preview/render.ts +5 -1
  371. package/packages/studio/src/preview/runtime-shim.ts +49 -3
  372. package/packages/studio/src/programme.ts +14 -30
  373. package/packages/studio/src/server.ts +66 -34
  374. package/packages/studio/src/shared.ts +24 -8
  375. package/packages/studio/src/snapshot.ts +21 -132
  376. package/packages/studio/src/studio-preflight.ts +3 -3
  377. package/packages/studio/src/studio-registry.ts +72 -6
  378. package/packages/studio/src/style.css +342 -190
  379. package/packages/studio/src/temporal-edit.ts +131 -0
  380. package/packages/studio/src/ui/artifact-name.ts +80 -0
  381. package/packages/studio/src/ui/artifact-preview.ts +99 -0
  382. package/packages/studio/src/ui/comments.ts +233 -0
  383. package/packages/studio/src/ui/icons.ts +10 -1
  384. package/packages/studio/src/ui/library.ts +373 -192
  385. package/packages/studio/src/ui/main.ts +291 -110
  386. package/packages/studio/src/ui/material-preview.ts +1 -1
  387. package/packages/studio/src/ui/overlay.ts +31 -26
  388. package/packages/studio/src/ui/scrub-preview.ts +108 -0
  389. package/packages/studio/src/ui/sidebar-panel.ts +31 -0
  390. package/packages/studio/src/ui/stage.ts +188 -9
  391. package/packages/studio/src/ui/timeline.ts +187 -281
  392. package/packages/studio/start.ts +19 -5
  393. package/packages/studio-adapter/README.md +151 -11
  394. package/packages/studio-adapter/src/index.ts +126 -14
  395. package/packages/temporal/README.md +6 -6
  396. package/packages/temporal/package.json +1 -1
  397. package/packages/temporal/src/component.ts +5 -6
  398. package/packages/temporal/src/index.ts +8 -6
  399. package/packages/temporal/src/location.ts +11 -11
  400. package/packages/temporal/src/projection.ts +19 -19
  401. package/packages/temporal/src/rational.ts +4 -4
  402. package/packages/temporal-markup/EDITING.md +183 -0
  403. package/packages/temporal-markup/README.md +31 -11
  404. package/packages/temporal-markup/package.json +1 -1
  405. package/packages/temporal-markup/src/index.ts +20 -25
  406. package/packages/temporal-markup/src/space.ts +10 -41
  407. package/packages/timeline/README.md +31 -0
  408. package/packages/{semantic-track → timeline}/package.json +1 -1
  409. package/packages/timeline/src/activation.ts +8 -0
  410. package/packages/timeline/src/component.ts +24 -0
  411. package/packages/timeline/src/identity.ts +60 -0
  412. package/packages/timeline/src/index.ts +6 -0
  413. package/packages/{semantic-track → timeline}/src/location.ts +20 -20
  414. package/packages/timeline/src/manifest.ts +39 -0
  415. package/packages/{semantic-track → timeline}/src/projection.ts +14 -14
  416. package/packages/timeline/src/types.ts +24 -0
  417. package/packages/timeline-author/README.md +68 -0
  418. package/packages/{speech-track → timeline-author}/package.json +6 -4
  419. package/packages/timeline-author/src/activation.ts +22 -0
  420. package/packages/{speech-track → timeline-author}/src/component.ts +15 -13
  421. package/packages/{speech-track → timeline-author}/src/fragment.ts +14 -23
  422. package/packages/timeline-author/src/index.ts +7 -0
  423. package/packages/timeline-author/src/manifest.ts +78 -0
  424. package/packages/timeline-author/src/program.ts +107 -0
  425. package/packages/timeline-author/src/surface.ts +46 -0
  426. package/packages/timeline-author/src/types.ts +6 -0
  427. package/packages/typography-track/README.md +4 -4
  428. package/packages/typography-track/package.json +1 -1
  429. package/packages/typography-track/src/component.ts +4 -4
  430. package/packages/typography-track/src/fragment.ts +4 -3
  431. package/packages/typography-track/src/manifest.ts +11 -9
  432. package/packages/typography-track/src/program.ts +15 -15
  433. package/packages/typography-track/src/surface.ts +17 -18
  434. package/packages/typography-track-studio/package.json +8 -3
  435. package/packages/typography-track-studio/src/index.ts +5 -1
  436. package/packages/video-cli/README.md +16 -4
  437. package/packages/video-cli/package.json +2 -1
  438. package/packages/video-cli/src/creation.ts +25 -9
  439. package/packages/video-cli/src/index.ts +1 -1
  440. package/packages/video-cli/src/studio-distribution.ts +2 -1
  441. package/packages/volcengine-matting/README.md +3 -3
  442. package/packages/whisperx/README.md +8 -1
  443. package/packages/workspace/src/index.ts +2 -0
  444. package/packages/workspace-fs-node/README.md +4 -1
  445. package/packages/workspace-fs-node/src/workspace.ts +3 -1
  446. package/services/whisperx/README.md +14 -0
  447. package/services/whisperx/pyproject.toml +2 -0
  448. package/services/whisperx/uv.lock +20 -20
  449. package/packages/provider-hyperframes-aws-lambda/README.md +0 -30
  450. package/packages/provider-hyperframes-aws-lambda/package.json +0 -30
  451. package/packages/provider-hyperframes-aws-lambda/src/activation.ts +0 -97
  452. package/packages/provider-hyperframes-aws-lambda/src/client.ts +0 -114
  453. package/packages/provider-hyperframes-aws-lambda/src/index.ts +0 -21
  454. package/packages/provider-hyperframes-aws-lambda/src/provider.ts +0 -522
  455. package/packages/provider-kie/README.md +0 -134
  456. package/packages/provider-kie/package.json +0 -43
  457. package/packages/provider-kie/src/activation.ts +0 -71
  458. package/packages/provider-kie/src/index.ts +0 -10
  459. package/packages/provider-kie/src/mapping.ts +0 -182
  460. package/packages/provider-kie/src/provider.ts +0 -657
  461. package/packages/provider-kie/src/routes.ts +0 -150
  462. package/packages/provider-xiaomi-mimo/README.md +0 -32
  463. package/packages/provider-xiaomi-mimo/src/activation.ts +0 -57
  464. package/packages/provider-xiaomi-mimo/src/index.ts +0 -5
  465. package/packages/provider-xiaomi-mimo/src/provider.ts +0 -214
  466. package/packages/runtime/src/environment.ts +0 -6
  467. package/packages/semantic-track/README.md +0 -21
  468. package/packages/semantic-track/src/activation.ts +0 -8
  469. package/packages/semantic-track/src/component.ts +0 -24
  470. package/packages/semantic-track/src/identity.ts +0 -58
  471. package/packages/semantic-track/src/index.ts +0 -6
  472. package/packages/semantic-track/src/manifest.ts +0 -38
  473. package/packages/semantic-track/src/types.ts +0 -26
  474. package/packages/speech-track/README.md +0 -51
  475. package/packages/speech-track/src/activation.ts +0 -19
  476. package/packages/speech-track/src/index.ts +0 -7
  477. package/packages/speech-track/src/manifest.ts +0 -73
  478. package/packages/speech-track/src/program.ts +0 -64
  479. package/packages/speech-track/src/surface.ts +0 -35
  480. package/packages/speech-track/src/types.ts +0 -6
  481. package/packages/speech-track-studio/README.md +0 -3
  482. package/packages/speech-track-studio/package.json +0 -14
  483. package/packages/speech-track-studio/src/activation.ts +0 -7
  484. package/packages/speech-track-studio/src/index.ts +0 -40
  485. /package/packages/{cli → project-context-node}/src/project-context.ts +0 -0
  486. /package/packages/{speech-track → timeline-author}/preview/Track.png +0 -0
@@ -1,4 +1,4 @@
1
- import { createTemporalSpace, resolveTemporalContext } from "@hypit/temporal-markup";
1
+ import { resolveTemporalContext } from "@hypit/temporal-markup";
2
2
  import {
3
3
  assertEmptyElement as empty,
4
4
  assertAttributes as allowed,
@@ -199,7 +199,7 @@ const variantDefinition = {
199
199
 
200
200
  function rankingSurface(variant: RankingVariant): StructuredSurfaceHandler {
201
201
  return ({ element, resolveReference }) => {
202
- const common = ["id", "semantic", "space", "frame", "during", "terminal", "style", "appear-sound", "move-sound"];
202
+ const common = ["id", "timeline", "frame", "during", "terminal", "style", "appear-sound", "move-sound"];
203
203
  const attributes = variant === "column" || variant === "tier-board"
204
204
  ? [...common.filter((name) => name !== "terminal"), "canvas"]
205
205
  : common;
@@ -207,31 +207,30 @@ function rankingSurface(variant: RankingVariant): StructuredSurfaceHandler {
207
207
  const id = text(element, "id");
208
208
  const selected = variantDefinition[variant];
209
209
  const context = resolveTemporalContext({ element, resolveReference });
210
- const time = createTemporalSpace({ id, element, ...context });
211
210
  const canvas = variant === "column" || variant === "tier-board"
212
211
  ? reference(element.attributes.canvas, `${element.name}.canvas`, spatialTypes.canvas, resolveReference)
213
212
  : undefined;
214
213
  const frame = reference(element.attributes.frame, `${element.name}.frame`, spatialTypes.frame, resolveReference);
215
- const outerTemporal = createTemporalWindowProjection({ id: `${id}.outer`, subjectId: id, element, ...context, space: time.space, resolveReference });
214
+ const outerTemporal = createTemporalWindowProjection({ id: `${id}.outer`, subjectId: id, element, ...context, resolveReference });
216
215
  const terminalTemporal = variant === "top-three"
217
216
  ? createTemporalInstantProjection({
218
- id: `${id}.terminal`, subjectId: id, element, ...context, space: time.space, resolveReference,
217
+ id: `${id}.terminal`, subjectId: id, element, ...context, resolveReference,
219
218
  semanticAttribute: "terminal", projectedAttribute: false,
220
219
  })
221
220
  : undefined;
222
221
  const styleRaw = element.attributes.style;
223
222
  const style = reference(styleRaw, `${element.name}.style`, selected.style, resolveReference);
224
223
  const records: SurfaceRecordDraft[] = [...outerTemporal.records, ...(terminalTemporal?.records ?? [])];
225
- const temporalComponents: SurfaceComponentDraft[] = [...time.components, ...outerTemporal.components, ...(terminalTemporal?.components ?? [])];
226
- const temporalFragments = [...time.fragments, ...outerTemporal.fragments, ...(terminalTemporal?.fragments ?? [])];
224
+ const temporalComponents: SurfaceComponentDraft[] = [...outerTemporal.components, ...(terminalTemporal?.components ?? [])];
225
+ const temporalFragments = [...outerTemporal.fragments, ...(terminalTemporal?.fragments ?? [])];
227
226
  const headerId = `${id}.header`;
228
227
  records.push({
229
228
  id: headerId, type: rankingTypes.header,
230
229
  value: { kind: "inline", value: sealRankingHeader({ id, variant }) as unknown as CanonicalValue },
231
230
  range: element.range,
232
231
  });
233
- const inputs: Record<string, typeof time.space.ref> = {
234
- header: { kind: "record", id: headerId }, space: time.space.ref, frame: frame.ref,
232
+ const inputs: Record<string, typeof context.timeline.ref> = {
233
+ header: { kind: "record", id: headerId }, timeline: context.timeline.ref, frame: frame.ref,
235
234
  outer: outerTemporal.ref, style: style.ref,
236
235
  ...(canvas === undefined ? {} : { canvas: canvas.ref }),
237
236
  ...(terminalTemporal === undefined ? {} : { terminal: terminalTemporal.ref }),
@@ -260,8 +259,8 @@ function rankingSurface(variant: RankingVariant): StructuredSurfaceHandler {
260
259
  const contentName = authored.content === undefined ? undefined : `item-${suffix}-content`;
261
260
  if (authored.content !== undefined) inputs[contentName!] = authored.content.ref;
262
261
  const itemTemporal = !authored.timed ? undefined : variant === "top-three"
263
- ? createTemporalInstantProjection({ id: `${id}.item.${suffix}`, subjectId: spec.id, element: child, ...context, space: time.space, resolveReference })
264
- : createTemporalWindowProjection({ id: `${id}.item.${suffix}`, subjectId: spec.id, element: child, ...context, space: time.space, resolveReference });
262
+ ? createTemporalInstantProjection({ id: `${id}.item.${suffix}`, subjectId: spec.id, element: child, ...context, resolveReference })
263
+ : createTemporalWindowProjection({ id: `${id}.item.${suffix}`, subjectId: spec.id, element: child, ...context, resolveReference });
265
264
  if (itemTemporal !== undefined) {
266
265
  records.push(...itemTemporal.records);
267
266
  temporalComponents.push(...itemTemporal.components);
@@ -307,12 +306,12 @@ function rankingSurface(variant: RankingVariant): StructuredSurfaceHandler {
307
306
  id, fragment: fragment.id, inputs,
308
307
  outputs: {
309
308
  schedule: `${id}.schedule`, program: `${id}.program`, visual: `${id}.visual`,
310
- ...(sound.appearName === undefined && sound.moveName === undefined ? {} : { audio: `${id}.audio` }),
309
+ ...(sound.appearName === undefined && sound.moveName === undefined ? {} : { events: `${id}.events`, audio: `${id}.audio` }),
311
310
  },
312
311
  range: element.range,
313
312
  }],
314
313
  fragments: [...temporalFragments, fragment],
315
- exports: [`${id}.schedule`, `${id}.program`, `${id}.visual`, ...(sound.appearName === undefined && sound.moveName === undefined ? [] : [`${id}.audio`])],
314
+ exports: [`${id}.schedule`, `${id}.program`, `${id}.visual`, ...(sound.appearName === undefined && sound.moveName === undefined ? [] : [`${id}.events`, `${id}.audio`])],
316
315
  };
317
316
  };
318
317
  }
@@ -1,3 +1,32 @@
1
1
  # `@hypit/ranking-studio`
2
2
 
3
3
  Hypit Studio Companion for the Ranking module's Column, Tier and Top Three surfaces.
4
+
5
+ Each surface has separate visual and audio Companion declarations in this one
6
+ package. Film chooses `.visual` and `.audio` independently; selecting the visual
7
+ output does not connect its sound.
8
+
9
+ The root lane represents the board; `attachments` expose reveal or activation
10
+ events on a detail lane. Both use Studio's ordinary item selection and overlap
11
+ behavior. Their time ranges remain the authored event ranges.
12
+
13
+ Ranking's renderer assigns `subjectId` to each item's rendered phases. The
14
+ Companion associates those phases with the item's `renderIds`, so clicking an
15
+ entering or settled icon selects the same detail entity. The board and preset
16
+ items without a detail event remain associated with the root. Studio measures
17
+ the visible parts at the current frame; the Companion does not duplicate motion
18
+ geometry or infer identities from rendered ID strings.
19
+
20
+ The audio Companion presents a `Ranking Sounds` lane. Each emitted clip shows
21
+ its item and phase (`Appear` or `Move`) with a waveform. It joins the board's
22
+ exported `.events` to the rendered audio clips by exact event identity, so a
23
+ phase without a supplied sound contributes no audio item. `Move` is the motion
24
+ into the board, not an exit sound.
25
+
26
+ Selecting a sound exposes the event trigger as a read-only fact and the shared
27
+ Ranking Style's sound gains and fade-in length as editable fields. Gain is
28
+ displayed as a percentage; edits write the original linear gain to the Style's
29
+ recipe. These fields affect every matching event using that recipe. Event
30
+ timing comes from the Ranking animation; changing the visual event timing
31
+ updates its sound too. The visual Companion owns layout and motion controls,
32
+ while the audio Companion owns the sound controls.
@@ -4,11 +4,16 @@
4
4
  "license": "SEE LICENSE IN LICENSE",
5
5
  "private": true,
6
6
  "type": "module",
7
- "exports": { ".": "./src/index.ts" },
8
- "hypit": { "activation": "./src/activation.ts" },
7
+ "exports": {
8
+ ".": "./src/index.ts"
9
+ },
10
+ "hypit": {
11
+ "activation": "./src/activation.ts"
12
+ },
9
13
  "dependencies": {
10
14
  "@hypit/ranking": "workspace:*",
11
15
  "@hypit/composition": "workspace:*",
12
- "@hypit/studio-adapter": "workspace:*"
16
+ "@hypit/studio-adapter": "workspace:*",
17
+ "@hypit/fonts-open": "workspace:*"
13
18
  }
14
19
  }
@@ -1,17 +1,25 @@
1
+ import { openFontStudioFields } from "@hypit/fonts-open/studio";
1
2
  import { rankingMarkupSurfaces, rankingModuleRef, rankingTypes } from "@hypit/ranking";
2
- import type { RankingProgram, RankingSchedule } from "@hypit/ranking";
3
+ import type { RankingProgram, RankingSchedule, RankingSoundEventPlan } from "@hypit/ranking";
3
4
  import { compositionTypes } from "@hypit/composition";
5
+ import type { AudioTrack } from "@hypit/composition";
4
6
  import type { StudioTrackCompanion, StudioTrackCompanionContext, StudioEntityDraft, StudioInspectorFieldDeclaration, StudioSourceBindingDeclaration } from "@hypit/studio-adapter";
5
7
  import { artifactPreview, authoredChildFor, previewLayer, requiredSurfaceValue, temporalLineageFor, temporalSemanticSource } from "@hypit/studio-adapter";
6
8
 
9
+
10
+ const fontInspector = openFontStudioFields("style");
11
+
7
12
  const frameParameters: readonly StudioSourceBindingDeclaration[] = [
8
13
  { name: "within" },
9
14
  ...["left", "top", "right", "bottom", "x", "y", "width", "height"].map((name) => ({ name, writable: true })),
10
15
  ];
11
16
 
12
- function rankingProperties(surface: "column-style" | "tier-style" | "top-three-style") {
13
- return rankingMarkupSurfaces.find((candidate) => candidate.name === surface)
14
- ?.vocabulary.attributes.find((attribute) => attribute.name === "recipe")?.recipe ?? [];
17
+ const soundProperties = new Set(["appear-gain", "move-gain", "sound-fade-frames"]);
18
+
19
+ function rankingProperties(surface: "column-style" | "tier-style" | "top-three-style", audio = false) {
20
+ return (rankingMarkupSurfaces.find((candidate) => candidate.name === surface)
21
+ ?.vocabulary.attributes.find((attribute) => attribute.name === "recipe")?.recipe ?? [])
22
+ .filter((property) => soundProperties.has(property.name) === audio);
15
23
  }
16
24
 
17
25
  function title(name: string): string {
@@ -76,7 +84,7 @@ const rankingInspectorPlacement = {
76
84
  } as const satisfies Readonly<Record<string, RankingInspectorPlacement>>;
77
85
 
78
86
  function rankingInspector(surface: "column-style" | "tier-style" | "top-three-style"): readonly StudioInspectorFieldDeclaration[] {
79
- return rankingProperties(surface).map((property) => {
87
+ return [...fontInspector.fields, ...rankingProperties(surface).map((property) => {
80
88
  const placement = rankingInspectorPlacement[property.name as keyof typeof rankingInspectorPlacement];
81
89
  if (placement === undefined) throw new Error(`Ranking Studio has no explicit placement for ${property.name}.`);
82
90
  return {
@@ -85,13 +93,14 @@ function rankingInspector(surface: "column-style" | "tier-style" | "top-three-st
85
93
  ...placement,
86
94
  ...(property.summary === undefined ? {} : { summary: property.summary }),
87
95
  };
88
- });
96
+ })];
89
97
  }
90
98
 
91
- function rankingStyle(surface: "column-style" | "tier-style" | "top-three-style"): StudioSourceBindingDeclaration {
99
+ function rankingStyle(surface: "column-style" | "tier-style" | "top-three-style", audio = false): StudioSourceBindingDeclaration {
92
100
  return {
93
101
  name: "style",
94
- recipe: { through: ["recipe"], bindings: rankingProperties(surface).map(({ name, schema, fallback }) => ({
102
+ ...(audio ? {} : { referenced: [fontInspector.binding] }),
103
+ recipe: { through: ["recipe"], bindings: rankingProperties(surface, audio).map(({ name, schema, fallback }) => ({
95
104
  name,
96
105
  schema,
97
106
  ...(fallback === undefined ? {} : { fallback }),
@@ -133,6 +142,7 @@ function projectRanking(context: StudioTrackCompanionContext): readonly StudioEn
133
142
  return [{
134
143
  id: `${context.track.outputRef}:entity:${entry.itemId}`,
135
144
  authoredId: entry.itemId,
145
+ renderIds: context.spans.filter((span) => span.subjectId === entry.itemId).map((span) => span.id),
136
146
  ...(semanticSource?.id === undefined ? {} : { markerId: semanticSource.id }),
137
147
  display: {
138
148
  title: label,
@@ -147,23 +157,72 @@ function projectRanking(context: StudioTrackCompanionContext): readonly StudioEn
147
157
  ...(temporal === undefined ? {} : { temporal }),
148
158
  }];
149
159
  }).sort((left, right) => left.startFrame - right.startFrame || left.id.localeCompare(right.id));
150
- return [group, ...reveals];
160
+ const childRenderIds = new Set(reveals.flatMap((entity) => entity.renderIds ?? []));
161
+ return [{ ...group, renderIds: group.renderIds!.filter((id) => !childRenderIds.has(id)) }, ...reveals];
151
162
  }
152
163
 
153
164
  const commonBindings: readonly StudioSourceBindingDeclaration[] = [
154
165
  { name: "frame", referenced: frameParameters },
155
- { name: "appear-sound" },
156
- { name: "move-sound" },
157
166
  ];
158
167
 
168
+ function projectRankingAudio(context: StudioTrackCompanionContext): readonly StudioEntityDraft[] {
169
+ const events = requiredSurfaceValue(context, "events") as RankingSoundEventPlan;
170
+ const byId = new Map(events.events.map((event) => [event.id, event]));
171
+ const clips = new Map((context.track.value as AudioTrack).clips.map((clip) => [clip.id, clip]));
172
+ const boardId = context.placement?.id ?? context.track.outputRef;
173
+ return context.spans.map((span): StudioEntityDraft => {
174
+ const event = byId.get(span.id);
175
+ const clip = clips.get(span.id);
176
+ if (event === undefined || clip === undefined) throw new Error(`Ranking sound ${span.id} has no event or audio clip.`);
177
+ const child = authoredChildFor(context, event.itemId, [rankingTypes.itemSpec, rankingTypes.textItemShell]);
178
+ const label = child?.attributes.label ?? event.itemId;
179
+ const phase = event.kind === "appear" ? "Appear" : "Move";
180
+ return {
181
+ id: `${context.track.outputRef}:entity:${event.id}`,
182
+ authoredId: boardId,
183
+ display: { title: `${label} · ${phase}`, layers: [previewLayer(artifactPreview("audio", clip.artifact.resource), "waveform")] },
184
+ startFrame: span.startFrame, endFrameExclusive: span.endFrameExclusive, stackOrder: span.stackOrder,
185
+ ...(context.placement === undefined ? {} : { elementRange: context.placement.range }),
186
+ presentation: { entity: "ranking-sound", chrome: "standard" },
187
+ inspector: [{
188
+ id: "trigger", label: "Trigger", domain: "when", page: { id: "sound", label: "Sound" }, section: { id: "event", label: "Event" },
189
+ value: `${label} · ${phase} · ${event.frame}f`,
190
+ summary: "Follows the Ranking item's animation event. Adjust its visual timing to move the sound with it.",
191
+ }],
192
+ };
193
+ });
194
+ }
195
+
196
+ function rankingAudioCompanion(surface: "column" | "tier" | "top-three"): StudioTrackCompanion {
197
+ const style = `${surface}-style` as const;
198
+ return {
199
+ id: `${surface}-audio`, role: "track",
200
+ output: { type: compositionTypes.audioTrack, surface, modules: [rankingModuleRef] },
201
+ family: "audio", tone: "green", label: "Ranking Sounds", icon: "waveform",
202
+ lane: { heightPx: 48 }, requiredValues: ["events"],
203
+ bindings: [{ name: "appear-sound" }, ...(surface === "top-three" ? [] : [{ name: "move-sound" }]), rankingStyle(style, true)],
204
+ inspector: rankingProperties(style, true).map((property) => ({
205
+ binding: `style.${property.name}`, label: property.name === "sound-fade-frames" ? "Fade In" : title(property.name),
206
+ ...rankingInspectorPlacement[property.name as keyof typeof rankingInspectorPlacement],
207
+ control: "number",
208
+ ...(property.name === "sound-fade-frames"
209
+ ? { unit: "f", number: { minimum: 0, step: 1 } }
210
+ : { unit: "%", number: { scale: 100, minimum: 0, step: 1 } }),
211
+ summary: "Shared by every matching sound event using this Ranking style.",
212
+ })),
213
+ project: projectRankingAudio,
214
+ };
215
+ }
216
+
159
217
  const frameInspector: readonly StudioInspectorFieldDeclaration[] = frameParameters
160
218
  .filter(({ writable }) => writable === true)
161
219
  .map(({ name }) => ({
162
220
  binding: `frame.${name}`, label: title(name), domain: "where",
163
- page: { id: "frame", label: "Frame" }, section: { id: "frame", label: "Frame" }, control: "text",
221
+ page: { id: "frame", label: "Frame" }, section: { id: "frame", label: "Frame" }, control: "number", number: { suffixes: ["%", "px"], step: 1 },
164
222
  }));
165
223
 
166
224
  export const rankingStudioTrackCompanions: readonly StudioTrackCompanion[] = [
225
+ ...(["column", "tier", "top-three"] as const).map(rankingAudioCompanion),
167
226
  {
168
227
  id: "column", role: "track",
169
228
  output: { type: compositionTypes.visualTrack, surface: "column", modules: [rankingModuleRef] },
@@ -1,14 +1,14 @@
1
1
  # `@hypit/render-hyperframes`
2
2
 
3
- The Surface accepts `semantic={speech.semantic}` for performance time or `space={animation}` for an
4
- authored ProgramSpace. Its Fragment receives `space` directly; rendering does not require Script
5
- or prepared performance media. Both time sources use the same frame and audio pipeline.
3
+ The Surface accepts `timeline={program.timeline}` and projects its complete ProgramSpace.
4
+ Its Fragment receives that range as `space`; rendering works with partial, overlapping or absent
5
+ semantic coverage through the same frame and audio pipeline.
6
6
 
7
7
  Explicit author and capability boundary for final HyperFrames video rendering.
8
8
 
9
9
  The package owns `<render:Video composition={...}/>` and lowers it to ordinary Operations that:
10
10
 
11
- 1. obtain the `ProgramSpace` from the semantic input and compile the referenced `Composition` into a `HyperframesDocument`;
11
+ 1. obtain the `ProgramSpace` from the Timeline input and compile the referenced `Composition` into a `HyperframesDocument`;
12
12
  2. request a silent, frame-exact `RenderedVisual`;
13
13
  3. compile every peer `AudioTrack` into one `AudioProgramPlan`;
14
14
  4. request an exact 48 kHz `TimelineAudio`;
@@ -29,7 +29,7 @@ Core therefore sees three real byte-operation Needs, not one opaque mega-render.
29
29
  contiguous or interleaved chunks, retries and image-sequence assembly remain inside the selected
30
30
  visual Endpoint; clip decoding/mixing remains inside the audio Endpoint; container encoding remains
31
31
  inside the mux Endpoint. A single Provider package may implement all three locally, or a Runtime may
32
- bind them to separate Lambda-backed Endpoints. The author still sees one `<render:Video>` result.
32
+ bind them to separate compatible Endpoints. The author still sees one `<render:Video>` result.
33
33
 
34
34
  Film is not a dependency of this author meaning. Any package that produces the common Composition
35
35
  contract can feed the render Surface. Conversely, targeting Composition never demands this package;
@@ -43,7 +43,7 @@ stream with the declared canvas, rational frame rate and frame count.
43
43
  Select a contiguous interval using zero-based, half-open frame bounds:
44
44
 
45
45
  ```xml
46
- <render:Video id="preview" composition={main.composition} semantic={speech.semantic}
46
+ <render:Video id="preview" composition={main.composition} timeline={speech.timeline}
47
47
  start-frame="240" end-frame-exclusive="360"/>
48
48
  ```
49
49
 
@@ -54,5 +54,5 @@ Provider's Runtime configuration.
54
54
 
55
55
  In TypeScript, `hyperframesVisualRequest(document, { range })` constructs the visual request;
56
56
  `createRenderHyperframesFragment(true)` accepts a `MediaFrameRange` input and connects it to visual
57
- and audio requests. The AWS Lambda Provider currently declines range requests. Selection limits
57
+ and audio requests. Provider support checks establish range support for other deployments. Selection limits
58
58
  final rendering work; it does not prune upstream generation dependencies.
@@ -20,7 +20,7 @@
20
20
  "@hypit/media-pipeline": "workspace:*",
21
21
  "@hypit/program-space": "workspace:*",
22
22
  "@hypit/protocol": "workspace:*",
23
- "@hypit/semantic-track": "workspace:*",
23
+ "@hypit/timeline": "workspace:*",
24
24
  "@hypit/markup": "workspace:*",
25
25
  "@hypit/temporal-markup": "workspace:*"
26
26
  },
@@ -4,6 +4,7 @@ import type { ComponentPackage } from "@hypit/component-kit";
4
4
  import type { StoredValue } from "@hypit/protocol";
5
5
 
6
6
  import { hyperframesVisualRequest } from "./product.js";
7
+ import type { HyperframesVisualRequest } from "./product.js";
7
8
  import { renderHyperframesCapabilities, renderHyperframesProducers } from "./manifest.js";
8
9
 
9
10
  /** Declares the visual Need. It contains no renderer, queue, credentials or deployment choice. */
@@ -26,7 +27,16 @@ export const renderHyperframesComponent = {
26
27
  return { constraints: {}, pendingInputs: plannedNeedInputs(state, step) };
27
28
  },
28
29
  present(specification) {
29
- return { fields: {}, references: {} };
30
+ const request = specification.constraints as Partial<HyperframesVisualRequest>;
31
+ if (request.document === undefined) return { fields: {}, references: {} };
32
+ const { document, range } = request;
33
+ const startFrame = range?.startFrame ?? 0;
34
+ const endFrameExclusive = range?.endFrameExclusive ?? document.frameCount;
35
+ return { fields: {
36
+ width: [document.canvas.width], height: [document.canvas.height],
37
+ startFrame: [startFrame], endFrameExclusive: [endFrameExclusive],
38
+ frameRate: [`${document.frameRate.numerator}/${document.frameRate.denominator}`],
39
+ }, references: {} };
30
40
  },
31
41
  })),
32
42
  } satisfies ComponentPackage;
@@ -1,6 +1,7 @@
1
+ import { timelineProducers, timelineTypes } from "@hypit/timeline";
1
2
  import { mediaTypes } from "@hypit/media";
2
3
  import { artifactTypes } from "@hypit/artifact";
3
- import { programSpaceTypes } from "@hypit/program-space";
4
+
4
5
  import { compositionTypes } from "@hypit/composition";
5
6
  import { sealGraphFragment } from "@hypit/elaborator";
6
7
  import { hyperframesProducers } from "@hypit/hyperframes";
@@ -17,14 +18,16 @@ export function createRenderHyperframesFragment(selectedRange = false) {
17
18
  return sealGraphFragment({
18
19
  inputs: [
19
20
  { name: "composition", type: compositionTypes.composition },
20
- { name: "space", type: programSpaceTypes.programSpace },
21
+ { name: "timeline", type: timelineTypes.track },
21
22
  ...(selectedRange ? [{ name: "range", type: mediaTypes.frameRange }] : []),
22
23
  ],
23
24
  operations: [
25
+ { id: "render-range", producer: timelineProducers.projectProgramSpace,
26
+ inputs: { track: input("timeline") }, result: { kind: "output", name: "space" } },
24
27
  {
25
28
  id: "compile-document",
26
29
  producer: hyperframesProducers.compile,
27
- inputs: { composition: input("composition"), space: input("space") },
30
+ inputs: { composition: input("composition"), space: operation("render-range") },
28
31
  result: { kind: "output", name: "document" },
29
32
  },
30
33
  {
@@ -36,7 +39,7 @@ export function createRenderHyperframesFragment(selectedRange = false) {
36
39
  {
37
40
  id: "compile-audio-program",
38
41
  producer: mediaPipelineProducers.planAudio,
39
- inputs: { composition: input("composition"), space: input("space") },
42
+ inputs: { composition: input("composition"), space: operation("render-range") },
40
43
  result: { kind: "output", name: "plan" },
41
44
  },
42
45
  {
@@ -2,7 +2,7 @@ import { temporalContextAttributeVocabulary } from "@hypit/temporal-markup";
2
2
  import { artifactDependency, artifactTypes } from "@hypit/artifact";
3
3
  import { mediaDependency, mediaTypes } from "@hypit/media";
4
4
  import { compositionDependency, compositionTypes } from "@hypit/composition";
5
- import { semanticTrackDependency } from "@hypit/semantic-track";
5
+ import { timelineDependency } from "@hypit/timeline";
6
6
  import {
7
7
  hyperframesManifest,
8
8
  hyperframesModuleRef,
@@ -48,9 +48,9 @@ export const renderHyperframesMarkupSurfaces = [{
48
48
  { name: "video", type: artifactTypes.blob,
49
49
  summary: "The final muxed video Artifact, addressed as `<id>.video`." },
50
50
  ],
51
- example: '<render:Video id="final" composition={main.composition} semantic={speech.semantic}/>',
51
+ example: '<render:Video id="final" composition={main.composition} timeline={speech.timeline}/>',
52
52
  notes: [
53
- "Supply id, composition and one time source: semantic or space. Write both frame bounds to select a range. The element is empty.",
53
+ "Supply id, composition and timeline. Write both frame bounds to select a range. The element is empty.",
54
54
  "The visual render, the audio render and the mux are three separate Needs, each realized by a Provider this package does not choose.",
55
55
  "The published Artifact carries no duration or lineage metadata, so a consumer that needs stream facts requests explicit media inspection.",
56
56
  ],
@@ -66,7 +66,7 @@ export const renderHyperframesManifest: ModuleManifest = {
66
66
  artifactDependency,
67
67
  mediaDependency,
68
68
  compositionDependency,
69
- semanticTrackDependency,
69
+ timelineDependency,
70
70
  { module: hyperframesModuleRef },
71
71
  { module: mediaPipelineModuleRef },
72
72
  ],
@@ -1,4 +1,4 @@
1
- import { createTemporalSpace, resolveTemporalContext } from "@hypit/temporal-markup";
1
+ import { resolveTemporalContext } from "@hypit/temporal-markup";
2
2
  import { compositionTypes } from "@hypit/composition";
3
3
  import { mediaTypes, verifyMediaFrameRange } from "@hypit/media";
4
4
  import type {
@@ -25,7 +25,7 @@ function referenceAttribute(element: StructuredElement, name: string): string {
25
25
 
26
26
  export const decodeHyperframesRenderSurface: StructuredSurfaceHandler = ({ element, resolveReference }) => {
27
27
  const names = Object.keys(element.attributes).sort();
28
- if (names.some((name) => !["composition", "id", "semantic", "space", "start-frame", "end-frame-exclusive"].includes(name))) {
28
+ if (names.some((name) => !["composition", "id", "timeline", "start-frame", "end-frame-exclusive"].includes(name))) {
29
29
  throw new Error(`${element.name} contains unsupported attributes`);
30
30
  }
31
31
  if (element.children.some((child) => child.kind === "element" || child.value.trim().length > 0)) {
@@ -40,7 +40,7 @@ export const decodeHyperframesRenderSurface: StructuredSurfaceHandler = ({ eleme
40
40
  || composition.type.name !== compositionTypes.composition.name) {
41
41
  throw new Error(`${element.name}.composition must reference Composition`);
42
42
  }
43
- const time = createTemporalSpace({ id, element, ...resolveTemporalContext({ element, resolveReference }) });
43
+ const context = resolveTemporalContext({ element, resolveReference });
44
44
  const selected = element.attributes["start-frame"] !== undefined || element.attributes["end-frame-exclusive"] !== undefined;
45
45
  const frame = (name: string): number => {
46
46
  const text = stringAttribute(element, name);
@@ -53,13 +53,13 @@ export const decodeHyperframesRenderSurface: StructuredSurfaceHandler = ({ eleme
53
53
  const rangeId = `${id}.frame-range`;
54
54
  return {
55
55
  records: range === undefined ? [] : [{ id: rangeId, type: mediaTypes.frameRange, value: { kind: "inline", value: range }, range: element.range }],
56
- components: [...time.components, {
56
+ components: [{
57
57
  id,
58
58
  fragment: fragment.id,
59
- inputs: { composition: composition.ref, space: time.space.ref, ...(selected ? { range: { kind: "record" as const, id: rangeId } } : {}) },
59
+ inputs: { composition: composition.ref, timeline: context.timeline.ref, ...(selected ? { range: { kind: "record" as const, id: rangeId } } : {}) },
60
60
  outputs: { video: `${id}.video` },
61
61
  range: element.range,
62
62
  }],
63
- fragments: [...time.fragments, fragment],
63
+ fragments: [fragment],
64
64
  };
65
65
  };
@@ -7,7 +7,7 @@ The package defines the small ports used by a runtime:
7
7
  * `BuildStore` keeps one active Build definition and its accepted facts until the Result is saved and active state is removed.
8
8
  * `OperationStore` keeps asynchronous external work only while the owning Build is active.
9
9
  * `PendingBuildStore` owns the short submission transaction before the Build becomes active.
10
- * `BuildExecutionStore` owns active scheduling facts, a stop request, the immutable decision, attention and shared capacity reservations.
10
+ * `BuildExecutionStore` owns active scheduling facts, opaque Host execution choices, a stop request, the immutable decision, attention and shared capacity reservations.
11
11
  * `ResourceStore` is the transient byte gateway used during Provider execution.
12
12
  * `CredentialStore` resolves secrets outside source and build state.
13
13
  * `RuntimeCommandExecutor` turns the commands regenerated by Core into component or endpoint calls.
@@ -37,3 +37,10 @@ Capacity claims describe occupancy; action rate budgets describe admissions over
37
37
  Operation holds its declared occupancy while Runtime manages the remote task. Its submit, poll and
38
38
  collect actions can have separate concurrency and rate limits. Waiting claims park until a resource
39
39
  release or their next eligible time; polling does not require rematerializing the whole Build.
40
+
41
+ The local Host uses one code context per Build. `claim(owner, now, build)` limits an executor to its
42
+ own work; `start` records launch, and `interrupt` concludes a lost executor after its owner confirms
43
+ exit. These stores do not prescribe processes or module loading. They retain one active execution
44
+ record, while components and Providers remain ordinary replaceable implementations.
45
+ There is no turn-reclaim operation that makes a lost attempt runnable again. Result-writer ownership
46
+ can be cleared independently so an already decided outcome can still be saved.
@@ -3,6 +3,8 @@ import type {
3
3
  } from "@hypit/protocol";
4
4
 
5
5
  export type BuildPublishedOutput = {
6
+ /** Author-provided display name; the Output identifier remains unchanged. */
7
+ readonly displayName?: string;
6
8
  readonly name: string;
7
9
  readonly ref: LogicalOutputRef;
8
10
  };
@@ -10,7 +10,9 @@ export type BuildOutcome = "complete" | "failed" | "cancelled";
10
10
 
11
11
  export type BuildExecutionRequest = {
12
12
  readonly build: string;
13
- /** Installed component packages loaded when a Worker takes an execution turn. */
13
+ /** Host-owned execution choices. Opaque to the graph and Core. */
14
+ readonly context?: import("@hypit/protocol").CanonicalValue;
15
+ /** Installed component packages loaded when this execution context starts. */
14
16
  readonly componentPackages: readonly string[];
15
17
  /** Exact project Result Repository selected at submission. */
16
18
  readonly result: BuildResultRepositoryLocation;
@@ -48,6 +50,8 @@ export type BuildResultWriteLease = BuildExecutionTurn;
48
50
  */
49
51
  export type BuildExecutionSnapshot = BuildExecutionRequest & {
50
52
  readonly createdAt: number;
53
+ /** An execution context has been assigned; losing it ends this attempt. */
54
+ readonly startedAt?: number;
51
55
  /** Absent when waiting for a resource release. */
52
56
  readonly wakeAt?: number;
53
57
  /** Only these Operations can advance the Build until their next outcome. */
@@ -79,10 +83,14 @@ export type BuildExecutionStore = {
79
83
  create(request: BuildExecutionRequest, options?: { readonly now?: number }): Promise<BuildExecutionSnapshot>;
80
84
  read(build: string): Promise<BuildExecutionSnapshot | undefined>;
81
85
  list(): Promise<readonly BuildExecutionSnapshot[]>;
86
+ /** Lightweight scheduling views; no Definition, Profile or Operation payloads are loaded. */
87
+ listUnstarted(): Promise<readonly string[]>;
88
+ listReady(now?: number): Promise<readonly string[]>;
82
89
  /** Atomically take one ready, undecided execution turn for this Worker owner. */
83
- claim(owner: string, now?: number): Promise<BuildExecutionSnapshot | undefined>;
84
- /** A new owning Worker clears turns left by the previous process; no external action is repeated here. */
85
- reclaimTurns(now?: number): Promise<readonly string[]>;
90
+ claim(owner: string, now?: number, build?: string): Promise<BuildExecutionSnapshot | undefined>;
91
+ start(build: string, now?: number): Promise<BuildExecutionSnapshot>;
92
+ /** Conclude after the owner confirms this execution context has ended. Never repeats external work. */
93
+ interrupt(build: string, reason: string): Promise<BuildExecutionSnapshot>;
86
94
  /** An unobserved stop wakes the next turn immediately to finish the attempt. */
87
95
  releaseTurn(build: string, owner: string, wakeAt: number | undefined, operationWait?: readonly string[]): Promise<BuildExecutionSnapshot>;
88
96
  /** Freeze the one conclusion. An execution with a decision can never be claimed again. */
@@ -106,6 +114,8 @@ export type CommandExecutionReceipt = {
106
114
  readonly command: string;
107
115
  readonly status: "started" | "completed";
108
116
  readonly event?: CommandResult;
117
+ /** Current Provider-reported activity; discarded when this call completes. */
118
+ readonly activity?: { readonly endpoint: string; readonly progress: import("./operations.js").OperationProgress };
109
119
  };
110
120
 
111
121
  export type CommandExecutionBegin = {
@@ -119,6 +129,7 @@ export type CommandExecutionBegin = {
119
129
  */
120
130
  export type CommandExecutionStore = {
121
131
  begin(build: string, command: string): Promise<CommandExecutionBegin>;
132
+ reportProgress(build: string, command: string, activity: NonNullable<CommandExecutionReceipt["activity"]>): Promise<void>;
122
133
  complete(build: string, command: string, event: CommandResult): Promise<CommandExecutionReceipt>;
123
134
  list(build: string): Promise<readonly CommandExecutionReceipt[]>;
124
135
  removeBuild(build: string): Promise<void>;
@@ -14,7 +14,6 @@ export type * from "./capacity.js";
14
14
  export { capacityUnits } from "./capacity.js";
15
15
  export { buildExecutionActivity } from "./execution.js";
16
16
  export type * from "./execution.js";
17
- export type * from "./environment.js";
18
17
  export type * from "./operations.js";
19
18
  export { LocalBuildScheduler } from "./scheduler.js";
20
19
  export type * from "./submission.js";
@@ -22,3 +21,5 @@ export {
22
21
  isStreamingResourceStore,
23
22
  } from "./types.js";
24
23
  export type * from "./types.js";
24
+ export type * from "./log.js";
25
+ export { readExecutionLog } from "./log.js";
@@ -0,0 +1,51 @@
1
+ /** Provider-authored diagnostic text suitable for users; never credentials or request bodies. */
2
+ export type ExecutionDiagnostic = {
3
+ readonly level: "info" | "warning" | "error";
4
+ readonly message: string;
5
+ readonly stream?: "stdout" | "stderr";
6
+ };
7
+
8
+ export type ExecutionLogEvent = { readonly endpoint: string } & (
9
+ | { readonly kind: "started" | "completed" }
10
+ | { readonly kind: "failed"; readonly message: string }
11
+ | { readonly kind: "phase"; readonly phase: string }
12
+ | ({ readonly kind: "diagnostic" } & ExecutionDiagnostic)
13
+ );
14
+
15
+ export type ExecutionLogRecord = ExecutionLogEvent & {
16
+ readonly format: "hypit.execution-log@1";
17
+ readonly time: number;
18
+ readonly command: string;
19
+ };
20
+
21
+ export type ExecutionLogView = {
22
+ readonly records: readonly ExecutionLogRecord[];
23
+ readonly total: number;
24
+ };
25
+
26
+ /** Read a bounded tail without loading the whole log. Storage and transport remain caller-owned. */
27
+ export async function readExecutionLog(chunks: AsyncIterable<Uint8Array>, limit: number): Promise<ExecutionLogView> {
28
+ if (!Number.isSafeInteger(limit) || limit < 1) throw new Error("Log line count must be a positive integer");
29
+ const decoder = new TextDecoder();
30
+ const records: ExecutionLogRecord[] = [];
31
+ let pending = "";
32
+ let total = 0;
33
+ const consume = (line: string) => {
34
+ if (!line.trim()) return;
35
+ const record = JSON.parse(line) as ExecutionLogRecord;
36
+ if (record.format !== "hypit.execution-log@1") throw new Error("Unsupported execution log format");
37
+ records[total % limit] = record;
38
+ total++;
39
+ };
40
+ for await (const chunk of chunks) {
41
+ pending += decoder.decode(chunk, { stream: true });
42
+ let newline: number;
43
+ while ((newline = pending.indexOf("\n")) >= 0) {
44
+ consume(pending.slice(0, newline));
45
+ pending = pending.slice(newline + 1);
46
+ }
47
+ }
48
+ // A running writer may still be appending its last record; only complete lines are visible.
49
+ const offset = total > limit ? total % limit : 0;
50
+ return { records: [...records.slice(offset), ...records.slice(0, offset)], total };
51
+ }