@hypit/hypit 0.1.4 → 0.1.6

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 (462) hide show
  1. package/README.md +4 -2
  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 +77 -15
  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 +8 -1
  30. package/examples/semantic-composition/chat.svml +6 -5
  31. package/examples/semantic-composition/hypit.runtime.json +1 -1
  32. package/examples/semantic-composition/packages/chat-scene/README.md +3 -3
  33. package/examples/semantic-composition/packages/chat-scene/src/activation.ts +18 -21
  34. package/examples/semantic-composition/packages/chat-scene/src/render.ts +4 -4
  35. package/examples/semantic-composition/packages/performance-styles/README.md +42 -0
  36. package/examples/semantic-composition/packages/performance-styles/package.json +25 -0
  37. package/examples/semantic-composition/packages/performance-styles/src/activation.ts +57 -0
  38. package/examples/semantic-composition/packages/performance-styles/src/render.ts +54 -0
  39. package/examples/semantic-composition/packages/performance-styles/src/studio.ts +28 -0
  40. package/examples/semantic-composition/packages/performance-styles/tsconfig.json +18 -0
  41. package/examples/semantic-composition/packages/responsive-explainer/README.md +16 -9
  42. package/examples/semantic-composition/packages/responsive-explainer/src/activation.ts +12 -12
  43. package/examples/semantic-composition/packages/responsive-explainer/src/render.ts +5 -5
  44. package/examples/semantic-composition/packages/sound-styles/README.md +36 -0
  45. package/examples/semantic-composition/packages/sound-styles/package.json +25 -0
  46. package/examples/semantic-composition/packages/sound-styles/src/activation.ts +53 -0
  47. package/examples/semantic-composition/packages/sound-styles/src/render.ts +14 -0
  48. package/examples/semantic-composition/packages/sound-styles/tsconfig.json +18 -0
  49. package/package.json +35 -15
  50. package/packages/audio-track/README.md +20 -13
  51. package/packages/audio-track/package.json +1 -1
  52. package/packages/audio-track/src/component.ts +4 -4
  53. package/packages/audio-track/src/fragment.ts +6 -5
  54. package/packages/audio-track/src/index.ts +1 -1
  55. package/packages/audio-track/src/manifest.ts +17 -16
  56. package/packages/audio-track/src/program.ts +21 -25
  57. package/packages/audio-track/src/surface.ts +19 -18
  58. package/packages/audio-track-studio/README.md +23 -0
  59. package/packages/audio-track-studio/src/index.ts +28 -17
  60. package/packages/author-kit/README.md +1 -1
  61. package/packages/background-removal/README.md +4 -7
  62. package/packages/browser-capture/package.json +1 -1
  63. package/packages/build-result/README.md +11 -0
  64. package/packages/build-result/src/decode.ts +2 -0
  65. package/packages/build-result/src/execution-log.ts +17 -0
  66. package/packages/build-result/src/index.ts +1 -0
  67. package/packages/build-result/src/store.ts +14 -1
  68. package/packages/build-result/src/types.ts +3 -0
  69. package/packages/build-result-s3/src/repository.ts +4 -0
  70. package/packages/caption/README.md +61 -73
  71. package/packages/caption/package.json +3 -2
  72. package/packages/caption/src/activation.ts +2 -2
  73. package/packages/caption/src/component.ts +20 -5
  74. package/packages/caption/src/display.ts +3 -18
  75. package/packages/caption/src/fragment.ts +3 -7
  76. package/packages/caption/src/index.ts +6 -5
  77. package/packages/caption/src/manifest.ts +29 -46
  78. package/packages/caption/src/style.ts +24 -135
  79. package/packages/caption/src/surface.ts +12 -92
  80. package/packages/caption/src/temporalize.ts +18 -53
  81. package/packages/caption/src/types.ts +8 -35
  82. package/packages/caption/src/visibility.ts +23 -0
  83. package/packages/caption-fine/README.md +21 -9
  84. package/packages/caption-fine/package.json +4 -2
  85. package/packages/caption-fine/src/component.ts +3 -3
  86. package/packages/caption-fine/src/fragment.ts +7 -19
  87. package/packages/caption-fine/src/index.ts +2 -0
  88. package/packages/caption-fine/src/manifest.ts +26 -17
  89. package/packages/caption-fine/src/recipe.ts +7 -0
  90. package/packages/caption-fine/src/render.ts +14 -13
  91. package/packages/caption-fine/src/schedule.ts +39 -35
  92. package/packages/caption-fine/src/style.ts +10 -9
  93. package/packages/caption-fine/src/surface.ts +62 -35
  94. package/packages/caption-fine/src/types.ts +2 -0
  95. package/packages/caption-fine-studio/README.md +24 -2
  96. package/packages/caption-fine-studio/package.json +3 -1
  97. package/packages/caption-fine-studio/src/activation.ts +3 -3
  98. package/packages/caption-fine-studio/src/index.ts +54 -42
  99. package/packages/cli/README.md +57 -4
  100. package/packages/cli/package.json +1 -0
  101. package/packages/cli/src/arguments.ts +25 -6
  102. package/packages/cli/src/build-planning.ts +3 -2
  103. package/packages/cli/src/command.ts +6 -0
  104. package/packages/cli/src/commands/environment.ts +28 -18
  105. package/packages/cli/src/commands/execution.ts +81 -26
  106. package/packages/cli/src/commands/results.ts +7 -11
  107. package/packages/cli/src/index.ts +2 -2
  108. package/packages/cli/src/machine-view.ts +3 -2
  109. package/packages/cli/src/main.ts +34 -42
  110. package/packages/cli/src/observation.ts +7 -1
  111. package/packages/cli/src/output.ts +65 -23
  112. package/packages/cli/src/view.ts +66 -19
  113. package/packages/comment-sticker/README.md +3 -3
  114. package/packages/comment-sticker/package.json +1 -1
  115. package/packages/comment-sticker/src/component.ts +4 -4
  116. package/packages/comment-sticker/src/fragment.ts +5 -4
  117. package/packages/comment-sticker/src/manifest.ts +7 -6
  118. package/packages/comment-sticker/src/program.ts +9 -9
  119. package/packages/comment-sticker/src/surface.ts +6 -7
  120. package/packages/composition/README.md +21 -0
  121. package/packages/composition/src/audio-presentation.ts +44 -0
  122. package/packages/composition/src/index.ts +3 -0
  123. package/packages/composition/src/schema.ts +8 -3
  124. package/packages/composition/src/track.ts +15 -1
  125. package/packages/credential-store-env/README.md +1 -1
  126. package/packages/deck-track/README.md +3 -3
  127. package/packages/deck-track/package.json +1 -1
  128. package/packages/deck-track/src/component.ts +5 -5
  129. package/packages/deck-track/src/fragment.ts +6 -5
  130. package/packages/deck-track/src/lower.ts +12 -12
  131. package/packages/deck-track/src/manifest.ts +8 -7
  132. package/packages/deck-track/src/program.ts +13 -16
  133. package/packages/deck-track/src/surface.ts +9 -10
  134. package/packages/driver-node/src/driver.ts +41 -3
  135. package/packages/elevenlabs-speech/README.md +27 -0
  136. package/packages/{provider-xiaomi-mimo → elevenlabs-speech}/package.json +5 -8
  137. package/packages/elevenlabs-speech/src/activation.ts +26 -0
  138. package/packages/elevenlabs-speech/src/fragment.ts +11 -0
  139. package/packages/elevenlabs-speech/src/index.ts +111 -0
  140. package/packages/elevenlabs-speech/src/surface.ts +167 -0
  141. package/packages/endpoint-kit/README.md +24 -0
  142. package/packages/endpoint-kit/src/index.ts +7 -1
  143. package/packages/film/README.md +12 -7
  144. package/packages/film/package.json +1 -1
  145. package/packages/film/src/component.ts +4 -4
  146. package/packages/film/src/fragment.ts +6 -5
  147. package/packages/film/src/manifest.ts +11 -10
  148. package/packages/film/src/program.ts +5 -5
  149. package/packages/film/src/recipe.ts +2 -1
  150. package/packages/film/src/surface.ts +10 -7
  151. package/packages/film-studio/package.json +1 -1
  152. package/packages/film-studio/src/index.ts +2 -2
  153. package/packages/fishaudio-speech/README.md +33 -0
  154. package/packages/fishaudio-speech/package.json +21 -0
  155. package/packages/fishaudio-speech/src/activation.ts +32 -0
  156. package/packages/fishaudio-speech/src/fragment.ts +11 -0
  157. package/packages/fishaudio-speech/src/index.ts +156 -0
  158. package/packages/fishaudio-speech/src/surface.ts +192 -0
  159. package/packages/generation/README.md +11 -1
  160. package/packages/generation/src/mapping.ts +28 -30
  161. package/packages/gpt-image/README.md +1 -2
  162. package/packages/grok-imagine/README.md +1 -2
  163. package/packages/hyperframes/README.md +7 -3
  164. package/packages/hyperframes/src/browser-program.ts +11 -2
  165. package/packages/hyperframes/src/document.ts +15 -2
  166. package/packages/interview-emoji-reveal/README.md +4 -4
  167. package/packages/interview-emoji-reveal/package.json +1 -1
  168. package/packages/interview-emoji-reveal/src/component.ts +4 -4
  169. package/packages/interview-emoji-reveal/src/fragment.ts +6 -5
  170. package/packages/interview-emoji-reveal/src/manifest.ts +9 -8
  171. package/packages/interview-emoji-reveal/src/program.ts +14 -14
  172. package/packages/interview-emoji-reveal/src/surface.ts +8 -9
  173. package/packages/media-execution/README.md +7 -3
  174. package/packages/media-execution/src/audio-presentation.ts +23 -0
  175. package/packages/media-execution/src/execute.ts +2 -0
  176. package/packages/media-pipeline/README.md +7 -3
  177. package/packages/media-pipeline/src/audio-plan.ts +4 -1
  178. package/packages/media-pipeline/src/component.ts +16 -2
  179. package/packages/media-pipeline/src/manifest.ts +3 -1
  180. package/packages/media-pipeline/src/types.ts +2 -1
  181. package/packages/media-track/README.md +14 -47
  182. package/packages/media-track/package.json +1 -1
  183. package/packages/media-track/preview/preview.svml +5 -5
  184. package/packages/media-track/src/author.ts +12 -6
  185. package/packages/media-track/src/component.ts +10 -16
  186. package/packages/media-track/src/fragment.ts +8 -7
  187. package/packages/media-track/src/index.ts +3 -1
  188. package/packages/media-track/src/lower.ts +7 -7
  189. package/packages/media-track/src/manifest.ts +16 -38
  190. package/packages/media-track/src/program.ts +62 -67
  191. package/packages/media-track/src/sampling.ts +6 -6
  192. package/packages/media-track/src/sequence.ts +8 -8
  193. package/packages/media-track/src/surface.ts +25 -43
  194. package/packages/media-track-studio/README.md +9 -0
  195. package/packages/media-track-studio/src/index.ts +16 -11
  196. package/packages/mimo-speech/README.md +1 -1
  197. package/packages/minimax-h3/README.md +1 -1
  198. package/packages/nano-banana/README.md +1 -1
  199. package/packages/narrative/README.md +23 -1
  200. package/packages/narrative/src/identity.ts +11 -0
  201. package/packages/narrative/src/index.ts +3 -0
  202. package/packages/narrative/src/schema.ts +28 -27
  203. package/packages/narrative/src/selection.ts +52 -0
  204. package/packages/narrative/src/types.ts +2 -0
  205. package/packages/package-loader-node/README.md +30 -0
  206. package/packages/package-loader-node/package.json +5 -2
  207. package/packages/package-loader-node/src/distribution-resolution.ts +10 -3
  208. package/packages/package-loader-node/src/index.ts +1 -0
  209. package/packages/package-loader-node/src/loader.ts +12 -15
  210. package/packages/package-loader-node/src/location.ts +27 -1
  211. package/packages/package-loader-node/src/module-scope.ts +183 -0
  212. package/packages/package-loader-node/src/types.ts +4 -0
  213. package/packages/performance/README.md +83 -0
  214. package/packages/performance/package.json +30 -0
  215. package/packages/performance/src/activation.ts +11 -0
  216. package/packages/performance/src/component.ts +46 -0
  217. package/packages/performance/src/index.ts +6 -0
  218. package/packages/performance/src/manifest.ts +53 -0
  219. package/packages/{media-track/src/performance.ts → performance/src/media.ts} +9 -10
  220. package/packages/performance/src/program.ts +51 -0
  221. package/packages/performance/src/style.ts +35 -0
  222. package/packages/performance/src/surface.ts +99 -0
  223. package/packages/performance-studio/README.md +25 -0
  224. package/packages/performance-studio/package.json +21 -0
  225. package/packages/performance-studio/src/activation.ts +6 -0
  226. package/packages/performance-studio/src/index.ts +84 -0
  227. package/packages/program-space/README.md +9 -18
  228. package/packages/program-space/src/activation.ts +1 -5
  229. package/packages/program-space/src/index.ts +2 -11
  230. package/packages/program-space/src/surface.ts +1 -20
  231. package/packages/project-context-node/README.md +20 -0
  232. package/packages/project-context-node/package.json +10 -0
  233. package/packages/project-context-node/src/index.ts +3 -0
  234. package/packages/{cli → project-context-node}/src/runtime-selection.ts +7 -2
  235. package/packages/provider-hyperframes-local/README.md +43 -15
  236. package/packages/provider-hyperframes-local/src/activation.ts +4 -3
  237. package/packages/provider-hyperframes-local/src/capture-process.ts +26 -4
  238. package/packages/provider-hyperframes-local/src/capture.ts +96 -26
  239. package/packages/provider-hyperframes-local/src/concurrency.ts +86 -0
  240. package/packages/provider-hyperframes-local/src/opaque-capture.ts +92 -0
  241. package/packages/provider-hyperframes-local/src/options.ts +2 -0
  242. package/packages/provider-hyperframes-local/src/program.ts +6 -3
  243. package/packages/provider-hyperframes-local/src/progress.ts +53 -0
  244. package/packages/provider-hyperframes-local/src/provider.ts +18 -5
  245. package/packages/provider-hyperframes-local/src/render.ts +48 -7
  246. package/packages/provider-hypihub/README.md +48 -17
  247. package/packages/provider-hypihub/package.json +2 -0
  248. package/packages/provider-hypihub/src/mapping.ts +31 -7
  249. package/packages/provider-hypihub/src/oauth.ts +6 -0
  250. package/packages/provider-hypihub/src/provider.ts +25 -13
  251. package/packages/provider-hypihub/src/routes.ts +1 -2
  252. package/packages/provider-hypihub/src/upload.ts +2 -0
  253. package/packages/provider-media-local/README.md +3 -4
  254. package/packages/provider-whisperx-local/src/program.ts +1 -0
  255. package/packages/provider-whisperx-local/src/provider.ts +3 -0
  256. package/packages/ranking/README.md +8 -6
  257. package/packages/ranking/package.json +1 -1
  258. package/packages/ranking/src/component.ts +6 -6
  259. package/packages/ranking/src/fragment.ts +11 -7
  260. package/packages/ranking/src/manifest.ts +21 -14
  261. package/packages/ranking/src/render.ts +22 -26
  262. package/packages/ranking/src/schedule.ts +16 -19
  263. package/packages/ranking/src/surface.ts +12 -13
  264. package/packages/ranking-studio/README.md +18 -0
  265. package/packages/ranking-studio/src/index.ts +61 -9
  266. package/packages/render-hyperframes/README.md +7 -7
  267. package/packages/render-hyperframes/package.json +1 -1
  268. package/packages/render-hyperframes/src/component.ts +11 -1
  269. package/packages/render-hyperframes/src/fragment.ts +7 -4
  270. package/packages/render-hyperframes/src/manifest.ts +4 -4
  271. package/packages/render-hyperframes/src/surface.ts +6 -6
  272. package/packages/runtime/README.md +8 -1
  273. package/packages/runtime/src/execution.ts +15 -4
  274. package/packages/runtime/src/index.ts +2 -1
  275. package/packages/runtime/src/log.ts +51 -0
  276. package/packages/runtime/src/types.ts +5 -8
  277. package/packages/runtime-host-node/README.md +30 -0
  278. package/packages/runtime-host-node/package.json +1 -0
  279. package/packages/runtime-host-node/src/index.ts +24 -9
  280. package/packages/runtime-host-node/src/packages.ts +47 -50
  281. package/packages/runtime-kit/README.md +5 -0
  282. package/packages/runtime-kit/src/index.ts +3 -1
  283. package/packages/runtime-local/README.md +109 -4
  284. package/packages/runtime-local/src/config.ts +202 -56
  285. package/packages/runtime-local/src/control.ts +9 -1
  286. package/packages/runtime-local/src/executor.ts +66 -0
  287. package/packages/runtime-local/src/host.ts +37 -17
  288. package/packages/runtime-local/src/log.ts +48 -0
  289. package/packages/runtime-local/src/programs.ts +2 -1
  290. package/packages/runtime-local/src/result-writer.ts +2 -0
  291. package/packages/runtime-local/src/runtime.ts +8 -6
  292. package/packages/runtime-local/src/supervisor.ts +142 -0
  293. package/packages/runtime-local/src/types.ts +9 -2
  294. package/packages/runtime-local/src/worker-process.ts +7 -24
  295. package/packages/runtime-local/src/worker.ts +55 -83
  296. package/packages/screen-overlay/README.md +3 -3
  297. package/packages/screen-overlay/package.json +1 -1
  298. package/packages/screen-overlay/src/component.ts +3 -3
  299. package/packages/screen-overlay/src/fragment.ts +5 -4
  300. package/packages/screen-overlay/src/manifest.ts +7 -6
  301. package/packages/screen-overlay/src/program.ts +9 -9
  302. package/packages/screen-overlay/src/surface.ts +6 -7
  303. package/packages/script/README.md +30 -5
  304. package/packages/script/src/manifest.ts +4 -3
  305. package/packages/script/src/narrative.ts +1 -0
  306. package/packages/script/src/parser.ts +45 -6
  307. package/packages/script/src/surface.ts +4 -3
  308. package/packages/script/src/types.ts +1 -1
  309. package/packages/script-studio/package.json +9 -3
  310. package/packages/script-studio/src/index.ts +2 -0
  311. package/packages/script-studio/src/projection.ts +105 -0
  312. package/packages/seedance/README.md +30 -1
  313. package/packages/seedance/src/index.ts +18 -7
  314. package/packages/seedance/src/surface.ts +17 -4
  315. package/packages/seedance-kits/README.md +7 -1
  316. package/packages/seedream/README.md +1 -1
  317. package/packages/sound/README.md +81 -0
  318. package/packages/sound/package.json +25 -0
  319. package/packages/sound/src/activation.ts +11 -0
  320. package/packages/sound/src/component.ts +28 -0
  321. package/packages/sound/src/index.ts +5 -0
  322. package/packages/sound/src/manifest.ts +47 -0
  323. package/packages/sound/src/program.ts +84 -0
  324. package/packages/sound/src/style.ts +34 -0
  325. package/packages/sound/src/surface.ts +90 -0
  326. package/packages/sound-studio/README.md +22 -0
  327. package/packages/sound-studio/package.json +20 -0
  328. package/packages/sound-studio/src/activation.ts +6 -0
  329. package/packages/sound-studio/src/index.ts +74 -0
  330. package/packages/speech/README.md +2 -2
  331. package/packages/speech-alignment/src/local.ts +8 -0
  332. package/packages/speech-alignment/src/locate.ts +1 -1
  333. package/packages/store-sqlite/README.md +7 -0
  334. package/packages/store-sqlite/src/store.ts +84 -83
  335. package/packages/studio/INSPECTOR.md +15 -2
  336. package/packages/studio/LOCALIZATION.md +98 -0
  337. package/packages/studio/README.md +101 -14
  338. package/packages/studio/locales/en.json +197 -0
  339. package/packages/studio/locales/zh-CN.json +191 -0
  340. package/packages/studio/package.json +8 -7
  341. package/packages/studio/src/companion-assembly.ts +1 -0
  342. package/packages/studio/src/domain.ts +1 -1
  343. package/packages/studio/src/fallback-companions.ts +3 -3
  344. package/packages/studio/src/feedback-server.ts +51 -0
  345. package/packages/studio/src/feedback-store.ts +66 -0
  346. package/packages/studio/src/feedback.ts +60 -0
  347. package/packages/studio/src/localization-node.ts +46 -0
  348. package/packages/studio/src/localization.ts +85 -0
  349. package/packages/studio/src/parameter-values.ts +43 -1
  350. package/packages/studio/src/parameters.ts +114 -24
  351. package/packages/studio/src/preview/render.ts +5 -1
  352. package/packages/studio/src/preview/runtime-shim.ts +49 -3
  353. package/packages/studio/src/programme.ts +14 -30
  354. package/packages/studio/src/server.ts +10 -6
  355. package/packages/studio/src/shared.ts +4 -2
  356. package/packages/studio/src/snapshot.ts +21 -132
  357. package/packages/studio/src/studio-preflight.ts +3 -3
  358. package/packages/studio/src/studio-registry.ts +50 -6
  359. package/packages/studio/src/style.css +223 -50
  360. package/packages/studio/src/ui/artifact-name.ts +8 -6
  361. package/packages/studio/src/ui/artifact-preview.ts +5 -4
  362. package/packages/studio/src/ui/code.ts +17 -16
  363. package/packages/studio/src/ui/comments.ts +234 -0
  364. package/packages/studio/src/ui/dropdown.ts +68 -0
  365. package/packages/studio/src/ui/i18n.ts +109 -0
  366. package/packages/studio/src/ui/icons.ts +6 -0
  367. package/packages/studio/src/ui/library.ts +76 -65
  368. package/packages/studio/src/ui/main.ts +223 -211
  369. package/packages/studio/src/ui/overlay.ts +12 -8
  370. package/packages/studio/src/ui/scrub-preview.ts +110 -0
  371. package/packages/studio/src/ui/stage.ts +93 -29
  372. package/packages/studio/src/ui/timeline.ts +190 -118
  373. package/packages/studio/start.ts +41 -22
  374. package/packages/studio-adapter/README.md +130 -11
  375. package/packages/studio-adapter/src/index.ts +100 -13
  376. package/packages/temporal/README.md +6 -6
  377. package/packages/temporal/package.json +1 -1
  378. package/packages/temporal/src/component.ts +5 -6
  379. package/packages/temporal/src/index.ts +8 -6
  380. package/packages/temporal/src/location.ts +11 -11
  381. package/packages/temporal/src/projection.ts +19 -19
  382. package/packages/temporal/src/rational.ts +4 -4
  383. package/packages/temporal-markup/EDITING.md +2 -2
  384. package/packages/temporal-markup/README.md +27 -11
  385. package/packages/temporal-markup/package.json +1 -1
  386. package/packages/temporal-markup/src/index.ts +20 -25
  387. package/packages/temporal-markup/src/space.ts +10 -41
  388. package/packages/timeline/README.md +31 -0
  389. package/packages/{semantic-track → timeline}/package.json +1 -1
  390. package/packages/timeline/src/activation.ts +8 -0
  391. package/packages/timeline/src/component.ts +24 -0
  392. package/packages/timeline/src/identity.ts +60 -0
  393. package/packages/timeline/src/index.ts +6 -0
  394. package/packages/{semantic-track → timeline}/src/location.ts +20 -20
  395. package/packages/timeline/src/manifest.ts +39 -0
  396. package/packages/{semantic-track → timeline}/src/projection.ts +14 -14
  397. package/packages/timeline/src/types.ts +24 -0
  398. package/packages/timeline-author/README.md +68 -0
  399. package/packages/{speech-track → timeline-author}/package.json +6 -4
  400. package/packages/timeline-author/src/activation.ts +22 -0
  401. package/packages/{speech-track → timeline-author}/src/component.ts +15 -13
  402. package/packages/{speech-track → timeline-author}/src/fragment.ts +14 -23
  403. package/packages/timeline-author/src/index.ts +7 -0
  404. package/packages/timeline-author/src/manifest.ts +78 -0
  405. package/packages/timeline-author/src/program.ts +107 -0
  406. package/packages/timeline-author/src/surface.ts +46 -0
  407. package/packages/timeline-author/src/types.ts +6 -0
  408. package/packages/typography-track/README.md +4 -4
  409. package/packages/typography-track/package.json +1 -1
  410. package/packages/typography-track/src/component.ts +4 -4
  411. package/packages/typography-track/src/fragment.ts +4 -3
  412. package/packages/typography-track/src/manifest.ts +11 -9
  413. package/packages/typography-track/src/program.ts +15 -15
  414. package/packages/typography-track/src/surface.ts +17 -18
  415. package/packages/video-cli/README.md +4 -1
  416. package/packages/video-cli/package.json +2 -1
  417. package/packages/video-cli/src/creation.ts +14 -4
  418. package/packages/video-cli/src/index.ts +1 -1
  419. package/packages/video-cli/src/studio-distribution.ts +2 -1
  420. package/packages/volcengine-matting/README.md +3 -3
  421. package/packages/whisperx/README.md +1 -1
  422. package/services/whisperx/README.md +14 -0
  423. package/services/whisperx/pyproject.toml +2 -0
  424. package/services/whisperx/uv.lock +20 -20
  425. package/packages/provider-hyperframes-aws-lambda/README.md +0 -30
  426. package/packages/provider-hyperframes-aws-lambda/package.json +0 -30
  427. package/packages/provider-hyperframes-aws-lambda/src/activation.ts +0 -97
  428. package/packages/provider-hyperframes-aws-lambda/src/client.ts +0 -114
  429. package/packages/provider-hyperframes-aws-lambda/src/index.ts +0 -21
  430. package/packages/provider-hyperframes-aws-lambda/src/provider.ts +0 -522
  431. package/packages/provider-kie/README.md +0 -134
  432. package/packages/provider-kie/package.json +0 -43
  433. package/packages/provider-kie/src/activation.ts +0 -71
  434. package/packages/provider-kie/src/index.ts +0 -10
  435. package/packages/provider-kie/src/mapping.ts +0 -182
  436. package/packages/provider-kie/src/provider.ts +0 -657
  437. package/packages/provider-kie/src/routes.ts +0 -150
  438. package/packages/provider-xiaomi-mimo/README.md +0 -32
  439. package/packages/provider-xiaomi-mimo/src/activation.ts +0 -57
  440. package/packages/provider-xiaomi-mimo/src/index.ts +0 -5
  441. package/packages/provider-xiaomi-mimo/src/provider.ts +0 -214
  442. package/packages/runtime/src/environment.ts +0 -6
  443. package/packages/semantic-track/README.md +0 -21
  444. package/packages/semantic-track/src/activation.ts +0 -8
  445. package/packages/semantic-track/src/component.ts +0 -24
  446. package/packages/semantic-track/src/identity.ts +0 -58
  447. package/packages/semantic-track/src/index.ts +0 -6
  448. package/packages/semantic-track/src/manifest.ts +0 -38
  449. package/packages/semantic-track/src/types.ts +0 -26
  450. package/packages/speech-track/README.md +0 -51
  451. package/packages/speech-track/src/activation.ts +0 -19
  452. package/packages/speech-track/src/index.ts +0 -7
  453. package/packages/speech-track/src/manifest.ts +0 -73
  454. package/packages/speech-track/src/program.ts +0 -64
  455. package/packages/speech-track/src/surface.ts +0 -35
  456. package/packages/speech-track/src/types.ts +0 -6
  457. package/packages/speech-track-studio/README.md +0 -3
  458. package/packages/speech-track-studio/package.json +0 -14
  459. package/packages/speech-track-studio/src/activation.ts +0 -7
  460. package/packages/speech-track-studio/src/index.ts +0 -40
  461. /package/packages/{cli → project-context-node}/src/project-context.ts +0 -0
  462. /package/packages/{speech-track → timeline-author}/preview/Track.png +0 -0
@@ -0,0 +1,107 @@
1
+ import { assertProgramClockIdentity, type ProgramClock } from "@hypit/program-space";
2
+ import { durationInFrames } from "@hypit/temporal";
3
+ import { parseTemporalDuration } from "@hypit/temporal-markup";
4
+ import { assertSemanticTakeIdentity } from "@hypit/speech";
5
+ import type { SemanticTake } from "@hypit/speech";
6
+ import { sealTimeline } from "@hypit/timeline";
7
+ import type { Timeline } from "@hypit/timeline";
8
+ import type { TimelineAuthorHeader, TimelineAuthorSet, TimelineAuthorTake } from "./types.js";
9
+ function assert(condition: unknown, message: string): asserts condition {
10
+ if (!condition) throw new Error(message);
11
+ }
12
+ export function sealTimelineAuthorHeader(value: TimelineAuthorHeader): TimelineAuthorHeader { return structuredClone(value); }
13
+ export function assertTimelineAuthorHeader(value: TimelineAuthorHeader): void {
14
+ assert(value.id.trim().length > 0, "TimelineAuthorHeader id must not be empty");
15
+ }
16
+ function sealTimelineAuthorSet(value: TimelineAuthorSet): TimelineAuthorSet { return structuredClone(value); }
17
+ function assertTake(take: TimelineAuthorTake): void { assertSemanticTakeIdentity(take.semantic); }
18
+ export function assertTimelineAuthorSet(value: TimelineAuthorSet): void {
19
+ const segments = new Set<string>();
20
+ for (const take of value.takes) {
21
+ assertSemanticTakeIdentity(take.semantic);
22
+ const segmentId = take.semantic.segment.segmentId;
23
+ assert(!segments.has(segmentId), `Timeline repeats Segment ${segmentId}`);
24
+ segments.add(segmentId);
25
+ }
26
+ }
27
+
28
+ export function createTimelineAuthorSet(): TimelineAuthorSet {
29
+ return sealTimelineAuthorSet({
30
+ takes: [],
31
+ });
32
+ }
33
+
34
+ function appendTake(
35
+ set: TimelineAuthorSet,
36
+ take: TimelineAuthorTake,
37
+ ): TimelineAuthorSet {
38
+ assertTimelineAuthorSet(set);
39
+ assertTake(take);
40
+ assert(!set.takes.some((item) => item.semantic.segment.segmentId === take.semantic.segment.segmentId),
41
+ `Timeline repeats Segment ${take.semantic.segment.segmentId}`);
42
+ return sealTimelineAuthorSet({
43
+ takes: [...set.takes, take],
44
+ });
45
+ }
46
+
47
+ export function appendTimelineAuthorTake(set: TimelineAuthorSet, semantic: SemanticTake): TimelineAuthorSet {
48
+ return appendTake(set, { semantic });
49
+ }
50
+
51
+ export function assembleTimelineAuthor(
52
+ header: TimelineAuthorHeader,
53
+ set: TimelineAuthorSet,
54
+ clock: ProgramClock,
55
+ ): Timeline {
56
+ assertTimelineAuthorHeader(header);
57
+ assertTimelineAuthorSet(set);
58
+ assertProgramClockIdentity(clock);
59
+ if (header.at !== undefined && header.at.length !== set.takes.length) {
60
+ throw new Error("Timeline placement declarations must correspond to its Takes.");
61
+ }
62
+ const narrativeId = set.takes[0]?.semantic.narrativeId;
63
+ let previousEnd = 0;
64
+ let contentEnd = 0;
65
+ const items = set.takes.map((item, index) => {
66
+ const at = header.at?.[index] ?? (index === 0 ? "0f" : "previous.end");
67
+ const startFrame = placementFrame(at, clock, index === 0 ? undefined : previousEnd, "previous.end");
68
+ previousEnd = startFrame + item.semantic.media.timeline.frameCount;
69
+ contentEnd = Math.max(contentEnd, previousEnd);
70
+ return { take: item.semantic, startFrame };
71
+ });
72
+ const endFrame = placementFrame(header.end ?? "content.end", clock, contentEnd, "content.end");
73
+ assert(endFrame > 0, "Timeline needs a positive end; an empty Timeline requires an authored extent.");
74
+ assert(endFrame >= contentEnd, "Timeline end precedes placed content; choose an end that includes its Takes.");
75
+ return sealTimeline({
76
+ id: header.id, frameRate: clock.frameRate,
77
+ durationSec: endFrame * clock.frameRate.denominator / clock.frameRate.numerator,
78
+ ...(narrativeId === undefined ? {} : { narrativeId }), items,
79
+ });
80
+ }
81
+
82
+ /** Parse local placement syntax before any upstream material needs to run. */
83
+ export function placementExpression(expression: string, reference: string) {
84
+ const value = expression.trim();
85
+ if (!value.startsWith(reference)) return { relative: false, sign: 1,
86
+ duration: parseTemporalDuration(value, "Timeline position") };
87
+ const offset = value.slice(reference.length).trim();
88
+ if (offset === "") return { relative: true, sign: 1,
89
+ duration: parseTemporalDuration("0f", "Timeline offset") };
90
+ const match = /^([+-])\s*(.+)$/u.exec(offset);
91
+ if (match === null) throw new Error(`Invalid Timeline position ${expression}.`);
92
+ return { relative: true, sign: match[1] === "-" ? -1 : 1,
93
+ duration: parseTemporalDuration(match[2]!, "Timeline offset") };
94
+ }
95
+
96
+ /** Resolve local assembly expressions before a complete Timeline exists. */
97
+ export function placementFrame(expression: string, clock: ProgramClock, base: number | undefined, reference: string): number {
98
+ const parsed = placementExpression(expression, reference);
99
+ if (parsed.relative && base === undefined) throw new Error(`${reference} has no preceding Take.`);
100
+ const frames = durationInFrames(parsed.duration, clock);
101
+ if (frames.denominator !== 1n || frames.numerator > BigInt(Number.MAX_SAFE_INTEGER)) {
102
+ throw new Error(`Timeline duration ${expression} must land on an exact frame boundary.`);
103
+ }
104
+ const frame = (parsed.relative ? base! : 0) + parsed.sign * Number(frames.numerator);
105
+ if (!Number.isSafeInteger(frame) || frame < 0) throw new Error(`Timeline position ${expression} must resolve to a non-negative frame.`);
106
+ return frame;
107
+ }
@@ -0,0 +1,46 @@
1
+ import { placementExpression } from "./program.js";
2
+ import { programSpaceTypes } from "@hypit/program-space";
3
+ import { assertAttributes, assertEmptyElement, localName, textAttribute, type StructuredSurfaceHandler } from "@hypit/markup";
4
+ import { sameType } from "@hypit/protocol";
5
+ import { speechTypes } from "@hypit/speech";
6
+ import { createTimelineAuthorFragment } from "./fragment.js";
7
+ import { timelineAuthorTypes } from "./manifest.js";
8
+
9
+ export const decodeTimelineAuthorSurface: StructuredSurfaceHandler = ({ element, resolveReference }) => {
10
+ assertAttributes(element, ["id", "clock", "end"]);
11
+ const id = textAttribute(element, "id");
12
+ const rawClock = element.attributes.clock;
13
+ const clock = typeof rawClock === "object" && rawClock.kind === "reference" ? resolveReference(rawClock.path) : undefined;
14
+ if (clock === undefined || !sameType(clock.type, programSpaceTypes.clock)) throw new Error(`${element.name}.clock must reference a Clock.`);
15
+ if (element.attributes.end !== undefined) placementExpression(textAttribute(element, "end"), "content.end");
16
+ const at: string[] = [];
17
+ const takes = element.children.flatMap(child => {
18
+ if (child.kind === "text") {
19
+ if (child.value.trim()) throw new Error("Timeline accepts only Take children.");
20
+ return [];
21
+ }
22
+ if (localName(child.name) !== "Take") throw new Error("Timeline accepts only Take children.");
23
+ assertAttributes(child, ["source", "at"]);
24
+ at.push(child.attributes.at === undefined ? (at.length === 0 ? "0f" : "previous.end") : textAttribute(child, "at"));
25
+ const position = placementExpression(at.at(-1)!, "previous.end");
26
+ if (at.length === 1 && position.relative) throw new Error("The first Timeline Take has no previous.end.");
27
+ assertEmptyElement(child);
28
+ const source = child.attributes.source;
29
+ if (typeof source !== "object" || source.kind !== "reference") throw new Error("Timeline Take source must be a reference.");
30
+ const resolved = resolveReference(source.path);
31
+ if (resolved === undefined || !sameType(resolved.type, speechTypes.semanticTake)) throw new Error("Timeline Take source must be a SemanticTake.");
32
+ return [resolved];
33
+ });
34
+ const inputs = takes.map((_, index) => ({ takeName: `take-${index + 1}` }));
35
+ const fragment = createTimelineAuthorFragment({ takes: inputs });
36
+ return {
37
+ records: [{ id: `${id}.header`, type: timelineAuthorTypes.header, value: { kind: "inline", value: { id, at, ...(element.attributes.end === undefined ? {} : { end: textAttribute(element, "end") }) } }, range: element.range }],
38
+ fragments: [fragment],
39
+ components: [{ id, fragment: fragment.id, inputs: {
40
+ clock: clock.ref,
41
+ header: { kind: "record", id: `${id}.header` },
42
+ ...Object.fromEntries(takes.map((take, index) => [inputs[index]!.takeName, take.ref])),
43
+ }, outputs: { timeline: `${id}.timeline` }, range: element.range }],
44
+ exports: [`${id}.timeline`],
45
+ };
46
+ };
@@ -0,0 +1,6 @@
1
+ import type { SemanticTake } from "@hypit/speech";
2
+ export type TimelineAuthorHeader = { readonly id: string; readonly at?: readonly string[]; readonly end?: string };
3
+ export type TimelineAuthorTake = { readonly semantic: SemanticTake };
4
+ export type TimelineAuthorSet = { readonly takes: readonly TimelineAuthorTake[] };
5
+ export type TimelineAuthorInput = { readonly takeName: string };
6
+ export type TimelineAuthorFragmentOptions = { readonly takes: readonly TimelineAuthorInput[] };
@@ -1,14 +1,14 @@
1
1
  # `@hypit/typography-track`
2
2
 
3
- The Track Surface accepts `semantic={speech.semantic}` or `space={animation}`. Semantic context
4
- resolves Script Selections and Moments; authored space supports clock-based animation. Shared `at`
3
+ The Track Surface accepts `timeline={program.timeline}`. The same Timeline supports authored
4
+ positions and, where prepared Takes supply evidence, Script Selections and Moments. Shared `at`
5
5
  inputs accept a Moment or a time such as `2s`; `at` with `for` produces a Window where required.
6
6
 
7
7
  Place independently authored titles, labels, verdicts and other text in the video. Their lifetime
8
8
  can follow a Script Selection or Moment even when their wording differs from the speech. For words
9
9
  displayed as they are spoken, use a [Caption family](../caption-fine/README.md).
10
10
 
11
- The Track takes `semantic` or `space` to supply ProgramSpace. Items use explicit Point, Frame or Path
11
+ The Track takes the shared `timeline`. Items use explicit Point, Frame or Path
12
12
  placement, exact fonts and Styles. Timing can follow a Segment, Selection, Moment with duration, the
13
13
  whole program or explicit clock expressions. `.program` describes the text presentation; `.track`
14
14
  is the VisualTrack to include in Film. Each item has its own lifetime and stacking order.
@@ -26,7 +26,7 @@ Content has two explicit author forms:
26
26
 
27
27
  <copy:Value id="headline-copy">A useful idea, clearly shown.</copy:Value>
28
28
 
29
- <typo:Track id="titles" semantic={speech.semantic}>
29
+ <typo:Track id="titles" timeline={speech.timeline}>
30
30
  <typo:Area id="headline" content={headline-copy}
31
31
  placement={layout.headline} style={title-style} during="program"/>
32
32
 
@@ -18,7 +18,7 @@
18
18
  "@hypit/narrative": "workspace:*",
19
19
  "@hypit/protocol": "workspace:*",
20
20
  "@hypit/program-space": "workspace:*",
21
- "@hypit/semantic-track": "workspace:*",
21
+ "@hypit/timeline": "workspace:*",
22
22
  "@hypit/spatial": "workspace:*",
23
23
  "@hypit/svs": "workspace:*",
24
24
  "@hypit/temporal": "workspace:*",
@@ -1,5 +1,5 @@
1
+ import type { Timeline } from "@hypit/timeline";
1
2
  import type { ComponentPackage } from "@hypit/component-kit";
2
- import type { ProgramSpace } from "@hypit/program-space";
3
3
  import type { CompositableSurfaceRef } from "@hypit/media";
4
4
  import type { SpatialFrame, SpatialPath, SpatialPoint } from "@hypit/spatial";
5
5
  import type { StoredValue } from "@hypit/protocol";
@@ -58,7 +58,7 @@ export const typographyTrackComponent = {
58
58
  handler: ({ inputs }) => ({ outputs: { set: output(appendProjectedTextItem(
59
59
  inline<TypographyTrackSet>(inputs.set?.value, "TypographyTrackSet"),
60
60
  inline<TypographyTrackHeader>(inputs.header?.value, "TypographyTrackHeader"),
61
- inline<ProgramSpace>(inputs.space?.value, "ProgramSpace"),
61
+ inline<Timeline>(inputs.timeline?.value, "Timeline"),
62
62
  inline<TextPlacement>(inputs.placement?.value, "TextPlacement"),
63
63
  inline<TextItemSpec>(inputs.spec?.value, "TextItemSpec"),
64
64
  inline<TextStyle>(inputs.style?.value, "TextStyle"),
@@ -76,14 +76,14 @@ export const typographyTrackComponent = {
76
76
  {
77
77
  producer: typographyTrackProducers.render,
78
78
  handler: ({ inputs }) => ({ outputs: { track: output(renderTypographyTrack(
79
- inline<ProgramSpace>(inputs.space?.value, "ProgramSpace"),
79
+ inline<Timeline>(inputs.timeline?.value, "Timeline"),
80
80
  inline<TypographyTrackProgram>(inputs.program?.value, "TypographyTrackProgram"),
81
81
  )) }, needs: {} }),
82
82
  },
83
83
  {
84
84
  producer: typographyTrackProducers.renderMask,
85
85
  handler: ({ inputs }) => ({ outputs: { track: output(renderTextMaskTrack(
86
- inline<ProgramSpace>(inputs.space?.value, "ProgramSpace"),
86
+ inline<Timeline>(inputs.timeline?.value, "Timeline"),
87
87
  inline<TypographyTrackProgram>(inputs.program?.value, "TypographyTrackProgram"),
88
88
  inline<CompositableSurfaceRef>(inputs.material?.value, "CompositableSurfaceRef"),
89
89
  inline<TextMaskSpec>(inputs.spec?.value, "TextMaskSpec"),
@@ -1,4 +1,5 @@
1
- import { programSpaceTypes } from "@hypit/program-space";
1
+ import { timelineTypes } from "@hypit/timeline";
2
+
2
3
  import { compositionTypes } from "@hypit/composition";
3
4
  import type { VisualTrack } from "@hypit/composition";
4
5
  import { sealGraphFragment } from "@hypit/elaborator";
@@ -11,14 +12,14 @@ const operation = (id: string) => ({ kind: "fragment-operation" as const, operat
11
12
  /** Provider-free official lowering from TypographyTrackProgram to one peer VisualTrack. */
12
13
  export const typographyTrackFragment = sealGraphFragment({
13
14
  inputs: [
14
- { name: "space", type: programSpaceTypes.programSpace },
15
+ { name: "timeline", type: timelineTypes.track },
15
16
  { name: "program", type: typographyTrackTypes.program },
16
17
  ],
17
18
  operations: [
18
19
  {
19
20
  id: "render",
20
21
  producer: typographyTrackProducers.render,
21
- inputs: { space: input("space"), program: input("program") },
22
+ inputs: { timeline: input("timeline"), program: input("program") },
22
23
  result: { kind: "output", name: "track" },
23
24
  },
24
25
  ],
@@ -1,9 +1,11 @@
1
+ import { timelineTypes } from "@hypit/timeline";
2
+ import type { Timeline } from "@hypit/timeline";
1
3
  import { temporalContextAttributeVocabulary } from "@hypit/temporal-markup";
2
4
  import { readFile } from "node:fs/promises";
3
5
 
4
6
  import { narrativeDependency } from "@hypit/narrative";
5
- import { programSpaceDependency, programSpaceTypes } from "@hypit/program-space";
6
- import { semanticTrackDependency } from "@hypit/semantic-track";
7
+
8
+ import { timelineDependency } from "@hypit/timeline";
7
9
  import {
8
10
  compositionDependency,
9
11
  compositionTypes,
@@ -423,7 +425,7 @@ export const typographyTrackMarkupSurfaces = [
423
425
  },
424
426
  { name: "track", tag: "Track", mode: "structured", outputs: [typographyTrackTypes.header, typographyTrackTypes.itemSpec, typographyTrackTypes.plainItemSpec, typographyTrackTypes.motion, typographyTrackTypes.set, typographyTrackTypes.placement, temporalTypes.instantSpec, temporalTypes.windowSpec, temporalTypes.instant, temporalTypes.window, typographyTrackTypes.program, compositionTypes.visualTrack],
425
427
  vocabulary: {
426
- summary: "One Typography Track: independently placed and timed text items on a shared ProgramSpace, lowered to one addressable TypographyTrackProgram and one peer VisualTrack.",
428
+ summary: "One Typography Track: independently placed and timed text items on a shared Timeline, lowered to one addressable TypographyTrackProgram and one peer VisualTrack.",
427
429
  appearance: "Text alone on an otherwise empty Canvas: the glyphs, plus whatever Paint the Style puts around them — fills, outlines, glows, shadows and rounded, bordered, optionally tailed boxes drawn behind the frame, paragraph, line, run, word or grapheme. Each item holds its own region of the Canvas: a Point item is one unwrapped block that hugs its text and hangs off a single coordinate by its inline and block anchors, an Area item flows and wraps inside a rectangle under its own alignment, columns, clipping and overflow, and a Path item strings the glyphs along a curve, on one side of it, turning with it or standing upright. Items switch on and off at their own frame windows and overlap in the stacking order their Styles declare, so titles, labels and captions can occupy different corners at once and outlast or outlive one another. While an item is on screen it plays its Motion: the whole block translating, scaling, rotating, skewing, fading, blurring, recoloring or wiping open from an edge, and its paragraphs, lines, runs, words or graphemes arriving one behind another in a staggered run.",
428
430
  preview: previewImage("Track.png"),
429
431
  attributes: [
@@ -475,7 +477,7 @@ export const typographyTrackMarkupSurfaces = [
475
477
  { name: "track", type: compositionTypes.visualTrack,
476
478
  summary: "The rendered text, an ordinary peer VisualTrack." },
477
479
  ],
478
- example: `<text:Track id="titles" semantic={speech.semantic}>
480
+ example: `<text:Track id="titles" timeline={speech.timeline}>
479
481
  <text:Area id="title" placement={title-frame} style={title-style} during="program">
480
482
  EDIT MEANING, NOT TIMELINES
481
483
  </text:Area>
@@ -514,7 +516,7 @@ export const typographyTrackMarkupSurfaces = [
514
516
  { name: "track", type: compositionTypes.visualTrack,
515
517
  summary: "The masked picture, an ordinary peer VisualTrack." },
516
518
  ],
517
- example: `<text:Mask id="masked-titles" semantic={speech.semantic} text={mask-shape.program} material={material}/>`,
519
+ example: `<text:Mask id="masked-titles" timeline={speech.timeline} text={mask-shape.program} material={material}/>`,
518
520
  notes: [
519
521
  "A Mask is written empty and accepts no children.",
520
522
  "The material must be a still Surface; a timed material is refused and materializes through an independent package.",
@@ -529,7 +531,7 @@ export const typographyTrackManifest: ModuleManifest = {
529
531
  format: "hypit.module@1",
530
532
  name: typographyTrackModuleRef.name,
531
533
  version: typographyTrackModuleRef.version,
532
- dependencies: [narrativeDependency, programSpaceDependency, semanticTrackDependency, spatialDependency, mediaDependency, compositionDependency, textDependency, temporalDependency],
534
+ dependencies: [narrativeDependency, timelineDependency, spatialDependency, mediaDependency, compositionDependency, textDependency, temporalDependency],
533
535
  types: [
534
536
  { name: typographyTrackTypes.style.name },
535
537
  { name: typographyTrackTypes.motion.name },
@@ -548,9 +550,9 @@ export const typographyTrackManifest: ModuleManifest = {
548
550
  { name: typographyTrackProducers.bindArea.name, inputs: [{ name: "frame", type: spatialTypes.frame }], outputs: [{ name: "placement", type: typographyTrackTypes.placement }], needs: [] },
549
551
  { name: typographyTrackProducers.bindPath.name, inputs: [{ name: "path", type: spatialTypes.path }], outputs: [{ name: "placement", type: typographyTrackTypes.placement }], needs: [] },
550
552
  { name: typographyTrackProducers.createSet.name, inputs: [], outputs: [{ name: "set", type: typographyTrackTypes.set }], needs: [] },
551
- { name: typographyTrackProducers.appendItem.name, inputs: [{ name: "set", type: typographyTrackTypes.set }, { name: "header", type: typographyTrackTypes.header }, { name: "space", type: programSpaceTypes.programSpace }, { name: "placement", type: typographyTrackTypes.placement }, { name: "spec", type: typographyTrackTypes.itemSpec }, { name: "style", type: typographyTrackTypes.style }, { name: "motion", type: typographyTrackTypes.motion }, { name: "window", type: temporalTypes.window }], outputs: [{ name: "set", type: typographyTrackTypes.set }], needs: [] },
553
+ { name: typographyTrackProducers.appendItem.name, inputs: [{ name: "set", type: typographyTrackTypes.set }, { name: "header", type: typographyTrackTypes.header }, { name: "timeline", type: timelineTypes.track }, { name: "placement", type: typographyTrackTypes.placement }, { name: "spec", type: typographyTrackTypes.itemSpec }, { name: "style", type: typographyTrackTypes.style }, { name: "motion", type: typographyTrackTypes.motion }, { name: "window", type: temporalTypes.window }], outputs: [{ name: "set", type: typographyTrackTypes.set }], needs: [] },
552
554
  { name: typographyTrackProducers.finalize.name, inputs: [{ name: "header", type: typographyTrackTypes.header }, { name: "set", type: typographyTrackTypes.set }], outputs: [{ name: "program", type: typographyTrackTypes.program }], needs: [] },
553
- { name: typographyTrackProducers.render.name, inputs: [{ name: "space", type: programSpaceTypes.programSpace }, { name: "program", type: typographyTrackTypes.program }], outputs: [{ name: "track", type: compositionTypes.visualTrack }], needs: [] },
554
- { name: typographyTrackProducers.renderMask.name, inputs: [{ name: "space", type: programSpaceTypes.programSpace }, { name: "program", type: typographyTrackTypes.program }, { name: "material", type: mediaTypes.compositableSurface }, { name: "spec", type: typographyTrackTypes.maskSpec }], outputs: [{ name: "track", type: compositionTypes.visualTrack }], needs: [] },
555
+ { name: typographyTrackProducers.render.name, inputs: [{ name: "timeline", type: timelineTypes.track }, { name: "program", type: typographyTrackTypes.program }], outputs: [{ name: "track", type: compositionTypes.visualTrack }], needs: [] },
556
+ { name: typographyTrackProducers.renderMask.name, inputs: [{ name: "timeline", type: timelineTypes.track }, { name: "program", type: typographyTrackTypes.program }, { name: "material", type: mediaTypes.compositableSurface }, { name: "spec", type: typographyTrackTypes.maskSpec }], outputs: [{ name: "track", type: compositionTypes.visualTrack }], needs: [] },
555
557
  ],
556
558
  };
@@ -1,5 +1,5 @@
1
+ import type { Timeline } from "@hypit/timeline";
1
2
  import { assertProgramSpaceIdentity, programSpaceFrameCount } from "@hypit/program-space";
2
- import type { ProgramSpace } from "@hypit/program-space";
3
3
  import {
4
4
  assertSpatialFrame,
5
5
  assertSpatialPath,
@@ -304,7 +304,7 @@ function append(
304
304
  export function appendProjectedTextItem(
305
305
  set: TypographyTrackSet,
306
306
  header: TypographyTrackHeader,
307
- space: ProgramSpace,
307
+ timeline: Timeline,
308
308
  placement: TextPlacement,
309
309
  spec: TextItemSpec,
310
310
  style: TextStyle,
@@ -312,7 +312,7 @@ export function appendProjectedTextItem(
312
312
  window: ProjectedWindow,
313
313
  ): TypographyTrackSet {
314
314
  assertTextPlacement(placement);
315
- assertTemporalWindowFor(window, { subjectId: spec.id, space });
315
+ assertTemporalWindowFor(window, { subjectId: spec.id, space: timeline });
316
316
  return append(set, header, spec, style, motion, placement.geometry, window);
317
317
  }
318
318
 
@@ -332,18 +332,18 @@ export function sealTypographyTrackProgram(value: TypographyTrackProgram): Typog
332
332
  return programContent(value);
333
333
  }
334
334
 
335
- export function assertTypographyTrackProgramIdentity(program: TypographyTrackProgram, space: ProgramSpace): void {
336
- assertProgramSpaceIdentity(space);
335
+ export function assertTypographyTrackProgramIdentity(program: TypographyTrackProgram, timeline: Timeline): void {
336
+ assertProgramSpaceIdentity(timeline);
337
337
  nonEmpty(program.id, "TypographyTrackProgram id");
338
338
  if (program.items.length === 0) throw new Error("TypographyTrackProgram has no Items.");
339
- const total = programSpaceFrameCount(space);
339
+ const total = programSpaceFrameCount(timeline);
340
340
  const ids = new Set<string>();
341
341
  for (const item of program.items) {
342
342
  nonEmpty(item.id, "Text Item id");
343
343
  if (ids.has(item.id)) throw new Error(`TypographyTrackProgram repeats ${item.id}.`);
344
344
  ids.add(item.id);
345
345
  if (item.span.startFrame < 0 || item.span.endFrameExclusive <= item.span.startFrame || item.span.endFrameExclusive > total) {
346
- throw new Error(`${item.id} is outside ProgramSpace.`);
346
+ throw new Error(`${item.id} is outside Timeline.`);
347
347
  }
348
348
  assertGeometry(item.geometry);
349
349
  assertDocument(item.document, `${item.id} document`);
@@ -556,10 +556,10 @@ function elements(item: TextItem): VisualElement[] {
556
556
  return [root, motion, terminalTextElement(item, "motion", 2)];
557
557
  }
558
558
 
559
- export function renderTypographyTrack(space: ProgramSpace, program: TypographyTrackProgram): VisualTrack {
560
- assertTypographyTrackProgramIdentity(program, space);
559
+ export function renderTypographyTrack(timeline: Timeline, program: TypographyTrackProgram): VisualTrack {
560
+ assertTypographyTrackProgramIdentity(program, timeline);
561
561
  const track = sealVisualTrack({
562
- programSpaceId: space.id,
562
+ programSpaceId: timeline.id,
563
563
  visualIr: "hypit.visual-ir@1",
564
564
  id: program.id,
565
565
  presents: program.items.map((item) => ({
@@ -569,24 +569,24 @@ export function renderTypographyTrack(space: ProgramSpace, program: TypographyTr
569
569
  elements: elements(item),
570
570
  })),
571
571
  });
572
- assertVisualTrackIdentity(track, space);
572
+ assertVisualTrackIdentity(track, timeline);
573
573
  return track;
574
574
  }
575
575
 
576
576
  export function renderTextMaskTrack(
577
- space: ProgramSpace,
577
+ timeline: Timeline,
578
578
  program: TypographyTrackProgram,
579
579
  material: CompositableSurfaceRef,
580
580
  spec: TextMaskSpec,
581
581
  ): VisualTrack {
582
- assertTypographyTrackProgramIdentity(program, space);
582
+ assertTypographyTrackProgramIdentity(program, timeline);
583
583
  assertCompositableSurfaceRef(material);
584
584
  assertTextMaskSpec(spec);
585
585
  if (material.timing.kind !== "still") {
586
586
  throw new Error("Official Text Mask requires one explicit still material Surface; timed materials use an independent package.");
587
587
  }
588
588
  const track = sealVisualTrack({
589
- programSpaceId: space.id,
589
+ programSpaceId: timeline.id,
590
590
  visualIr: "hypit.visual-ir@1",
591
591
  id: spec.id,
592
592
  presents: program.items.map((item) => {
@@ -617,6 +617,6 @@ export function renderTextMaskTrack(
617
617
  };
618
618
  }),
619
619
  });
620
- assertVisualTrackIdentity(track, space);
620
+ assertVisualTrackIdentity(track, timeline);
621
621
  return track;
622
622
  }
@@ -1,5 +1,6 @@
1
- import { createTemporalSpace, resolveTemporalContext } from "@hypit/temporal-markup";
2
- import { programSpaceTypes } from "@hypit/program-space";
1
+ import { timelineTypes } from "@hypit/timeline";
2
+ import { resolveTemporalContext } from "@hypit/temporal-markup";
3
+
3
4
  import { compositionTypes } from "@hypit/composition";
4
5
  import type {
5
6
  VisualColorPaint,
@@ -649,7 +650,7 @@ function createTrackFragment(id: string, items: readonly FragmentItem[]): GraphF
649
650
  }
650
651
  const append = `text:set:append:${String(index + 1).padStart(4, "0")}`;
651
652
  const common = {
652
- set: operation(current), header: input("header"), space: input("space"), placement: operation(bind),
653
+ set: operation(current), header: input("header"), timeline: input("timeline"), placement: operation(bind),
653
654
  spec: item.contentName === undefined ? input(item.specName) : operation(materialized),
654
655
  style: input(item.styleName), motion: input(item.motionName), window: input(item.windowName),
655
656
  };
@@ -658,10 +659,10 @@ function createTrackFragment(id: string, items: readonly FragmentItem[]): GraphF
658
659
  }
659
660
  operations.push(
660
661
  { id: "text:finalize", producer: typographyTrackProducers.finalize, inputs: { header: input("header"), set: operation(current) }, result: { kind: "output", name: "program" } },
661
- { id: "text:render", producer: typographyTrackProducers.render, inputs: { space: input("space"), program: operation("text:finalize") }, result: { kind: "output", name: "track" } },
662
+ { id: "text:render", producer: typographyTrackProducers.render, inputs: { timeline: input("timeline"), program: operation("text:finalize") }, result: { kind: "output", name: "track" } },
662
663
  );
663
664
  const inputEntries = [
664
- { name: "space", type: programSpaceTypes.programSpace },
665
+ { name: "timeline", type: timelineTypes.track },
665
666
  { name: "header", type: typographyTrackTypes.header },
666
667
  ...items.flatMap((item) => [
667
668
  { name: item.geometryName, type: item.placementKind === "point" ? spatialTypes.point : item.placementKind === "area" ? spatialTypes.frame : spatialTypes.path },
@@ -688,10 +689,9 @@ function createTrackFragment(id: string, items: readonly FragmentItem[]): GraphF
688
689
  }
689
690
 
690
691
  export const decodeTypographyTrackSurface: StructuredSurfaceHandler = ({ element, resolveReference }) => {
691
- allowed(element, ["id", "semantic", "space"], ["id"]);
692
+ allowed(element, ["id", "timeline"], ["id"]);
692
693
  const id = text(element, "id");
693
694
  const context = resolveTemporalContext({ element, resolveReference });
694
- const time = createTemporalSpace({ id: id, element, ...context });
695
695
  const headerId = `${id}.__header`;
696
696
  const records: SurfaceRecordDraft[] = [{
697
697
  id: headerId, type: typographyTrackTypes.header,
@@ -699,8 +699,8 @@ export const decodeTypographyTrackSurface: StructuredSurfaceHandler = ({ element
699
699
  }];
700
700
  const defaultMotionId = `${id}.__still-motion`;
701
701
  records.push({ id: defaultMotionId, type: typographyTrackTypes.motion, value: { kind: "inline", value: stillTextMotion(defaultMotionId) }, range: element.range });
702
- const temporalComponents: SurfaceComponentDraft[] = [...time.components];
703
- const temporalFragments: ReturnType<typeof createTemporalWindowProjection>["fragments"][number][] = [...time.fragments];
702
+ const temporalComponents: SurfaceComponentDraft[] = [];
703
+ const temporalFragments: ReturnType<typeof createTemporalWindowProjection>["fragments"][number][] = [];
704
704
  const items: Array<FragmentItem & {
705
705
  readonly geometry: SurfaceResolvedReference;
706
706
  readonly style: SurfaceResolvedReference;
@@ -731,7 +731,7 @@ export const decodeTypographyTrackSurface: StructuredSurfaceHandler = ({ element
731
731
  "id", "content", "placement", "style", "motion", ...temporalWindowAttributeNames,
732
732
  ], ["id", "placement", "style"]);
733
733
  const itemId = text(child, "id");
734
- const temporal = createTemporalWindowProjection({ id: itemId, element: child, ...context, space: time.space, resolveReference });
734
+ const temporal = createTemporalWindowProjection({ id: itemId, element: child, ...context, resolveReference });
735
735
  records.push(...temporal.records); temporalComponents.push(...temporal.components); temporalFragments.push(...temporal.fragments);
736
736
  const placementKind = form.toLowerCase() as "point" | "area" | "path";
737
737
  const geometry = reference(child.attributes.placement, `${child.name}.placement`, placementKind === "point" ? spatialTypes.point : placementKind === "area" ? spatialTypes.frame : spatialTypes.path, resolveReference);
@@ -777,7 +777,7 @@ export const decodeTypographyTrackSurface: StructuredSurfaceHandler = ({ element
777
777
  components: [...temporalComponents, {
778
778
  id, fragment: fragment.id,
779
779
  inputs: {
780
- space: time.space.ref, header: { kind: "record", id: headerId },
780
+ timeline: context.timeline.ref, header: { kind: "record", id: headerId },
781
781
  ...Object.fromEntries(items.flatMap((item) => [
782
782
  [item.geometryName, item.geometry.ref], [item.specName, { kind: "record" as const, id: item.specId }],
783
783
  [item.windowName, item.window],
@@ -794,7 +794,7 @@ export const decodeTypographyTrackSurface: StructuredSurfaceHandler = ({ element
794
794
 
795
795
  function createMaskFragment(id: string): GraphFragment {
796
796
  const inputs = [
797
- { name: "space", type: programSpaceTypes.programSpace },
797
+ { name: "timeline", type: timelineTypes.track },
798
798
  { name: "program", type: typographyTrackTypes.program },
799
799
  { name: "material", type: mediaTypes.compositableSurface },
800
800
  { name: "spec", type: typographyTrackTypes.maskSpec },
@@ -804,7 +804,7 @@ function createMaskFragment(id: string): GraphFragment {
804
804
  operations: [
805
805
  {
806
806
  id: "text-mask:render", producer: typographyTrackProducers.renderMask,
807
- inputs: { space: input("space"), program: input("program"), material: input("material"), spec: input("spec") },
807
+ inputs: { timeline: input("timeline"), program: input("program"), material: input("material"), spec: input("spec") },
808
808
  result: { kind: "output", name: "track" },
809
809
  },
810
810
  ],
@@ -815,11 +815,10 @@ function createMaskFragment(id: string): GraphFragment {
815
815
  }
816
816
 
817
817
  export const decodeTypographyMaskSurface: StructuredSurfaceHandler = ({ element, resolveReference }) => {
818
- allowed(element, ["id", "semantic", "space", "text", "material", "mode", "fit"], ["id", "text", "material"]);
818
+ allowed(element, ["id", "timeline", "text", "material", "mode", "fit"], ["id", "text", "material"]);
819
819
  empty(element);
820
820
  const id = text(element, "id");
821
821
  const context = resolveTemporalContext({ element, resolveReference });
822
- const time = createTemporalSpace({ id: id, element, ...context });
823
822
  const program = reference(element.attributes.text, `${element.name}.text`, typographyTrackTypes.program, resolveReference);
824
823
  const material = reference(element.attributes.material, `${element.name}.material`, mediaTypes.compositableSurface, resolveReference);
825
824
  const specId = `${id}.__spec`;
@@ -831,12 +830,12 @@ export const decodeTypographyMaskSurface: StructuredSurfaceHandler = ({ element,
831
830
  const fragment = createMaskFragment(id);
832
831
  return {
833
832
  records: [{ id: specId, type: typographyTrackTypes.maskSpec, value: { kind: "inline", value: spec }, range: element.range }],
834
- components: [...time.components, {
833
+ components: [{
835
834
  id, fragment: fragment.id,
836
- inputs: { space: time.space.ref, program: program.ref, material: material.ref, spec: { kind: "record", id: specId } },
835
+ inputs: { timeline: context.timeline.ref, program: program.ref, material: material.ref, spec: { kind: "record", id: specId } },
837
836
  outputs: { track: `${id}.track` }, range: element.range,
838
837
  }],
839
- fragments: [...time.fragments, fragment],
838
+ fragments: [fragment],
840
839
  exports: [`${id}.track`],
841
840
  };
842
841
  };
@@ -46,7 +46,10 @@ Chinese speech containing English names; the requested language selects the reco
46
46
  model, independently of the eventual caption font or script's simplified/traditional characters.
47
47
 
48
48
  `transcribe` uses the Profile's `whisperx-alignment` Endpoint (after
49
- extracting 16 kHz mono speech audio with ffmpeg). `measure` counts a Segment's pronunciation units at a
49
+ extracting 16 kHz mono speech audio with ffmpeg). Direct invocation forwards the Provider's progress
50
+ and diagnostic callbacks; the CLI reports phase changes while waiting, with JSON progress on the
51
+ separate progress stream when supplied. Immediate invocation has no durable remote task receipt and
52
+ does not become resumable merely because it reports progress. `measure` counts a Segment's pronunciation units at a
50
53
  delivery policy and prints estimated seconds, the resolved rate, padding and rounding. Choose the
51
54
  literal `duration` from that estimate and the intended performance. `measure` opens no Profile and
52
55
  spends nothing. It accepts `--pace slow|normal|fast` or `--rate <units/s>`; JSON includes the resolved
@@ -20,6 +20,7 @@
20
20
  "@hypit/markup": "workspace:*",
21
21
  "@hypit/model-kit": "workspace:*",
22
22
  "@hypit/package-loader-node": "workspace:*",
23
+ "@hypit/project-context-node": "workspace:*",
23
24
  "@hypit/protocol": "workspace:*",
24
25
  "@hypit/provider-hypihub": "workspace:*",
25
26
  "@hypit/runtime": "workspace:*",
@@ -32,6 +33,6 @@
32
33
  "@hypit/whisperx": "workspace:*",
33
34
  "@hypit/workspace-fs-node": "workspace:*",
34
35
  "@hypit/yt-dlp": "workspace:*",
35
- "sharp": "0.35.3"
36
+ "sharp": "0.35.4"
36
37
  }
37
38
  }
@@ -2,7 +2,8 @@ import { mkdir, mkdtemp, readFile, rm, stat, writeFile } from "node:fs/promises"
2
2
  import { tmpdir } from "node:os";
3
3
  import { dirname, join, resolve } from "node:path";
4
4
 
5
- import { findRuntimeProfile, loadDiscoveredSourcePackages, resolveProjectRoot } from "@hypit/cli";
5
+ import { loadDiscoveredSourcePackages } from "@hypit/cli";
6
+ import { findRuntimeProfile, resolveProjectRoot } from "@hypit/project-context-node";
6
7
  import type { CliIo } from "@hypit/cli";
7
8
  import { MemoryResourceStore } from "@hypit/driver-node";
8
9
  import {
@@ -14,7 +15,7 @@ import {
14
15
  } from "@hypit/estimate";
15
16
  import type { CanonicalValue, CapabilityRef, Need, StoredValue } from "@hypit/protocol";
16
17
  import type { ResourceStore } from "@hypit/runtime";
17
- import type { RuntimeHostCapabilityProvider, RuntimeHostProviderQuery } from "@hypit/runtime-host-node";
18
+ import type { RuntimeHostCapabilityProvider, RuntimeHostProviderQuery, RuntimeInvocationObservation } from "@hypit/runtime-host-node";
18
19
  import { sealSpeechEvidenceAudio } from "@hypit/speech";
19
20
  import { speechEvidenceTypes } from "@hypit/speech-evidence";
20
21
  import type { AlignedTranscriptEvidence } from "@hypit/speech-evidence";
@@ -32,7 +33,7 @@ export type CreationCommand = typeof creationCommands[number];
32
33
  /** The slice of the Runtime host these commands use; tests hand in a fake. */
33
34
  export type CreationHost = {
34
35
  providers(requests: readonly RuntimeHostProviderQuery[]): Promise<readonly RuntimeHostCapabilityProvider[]>;
35
- invoke(need: Need, resources: ResourceStore): Promise<{ readonly value: StoredValue }>;
36
+ invoke(need: Need, resources: ResourceStore, observation?: RuntimeInvocationObservation): Promise<{ readonly value: StoredValue }>;
36
37
  };
37
38
 
38
39
  export type CreationEnvironment = {
@@ -297,7 +298,16 @@ async function transcribe(argv: readonly string[], io: CliIo, environment: Creat
297
298
  };
298
299
  const provider = await selectedProvider(host, need, profile);
299
300
  if (!parsed.json) io.write(`Transcribing through ${providerLine(provider)}\n`);
300
- const fulfillment = await host.invoke(need, resources);
301
+ const report = parsed.json ? io.writeProgress : io.writeProgress ?? io.write;
302
+ let previousPhase: string | undefined;
303
+ const fulfillment = await host.invoke(need, resources, {
304
+ reportProgress: async (progress) => {
305
+ if (progress.phase === previousPhase) return;
306
+ previousPhase = progress.phase;
307
+ report?.(` · ${progress.phase}\n`);
308
+ },
309
+ reportDiagnostic: async (diagnostic) => { report?.(` · ${diagnostic.message}\n`); },
310
+ });
301
311
  assert(fulfillment.value.kind === "inline", "the transcript came back by reference");
302
312
  const passages = passagesInSeconds(fulfillment.value.value as unknown as AlignedTranscriptEvidence);
303
313
  const words = passages.reduce((total, passage) => total + passage.words.length, 0);
@@ -28,7 +28,7 @@ export { runCaptureCli, writeCaptureHelp } from "./capture.js";
28
28
  export { listPackages, listSurfaces, runVocabularyCli, visualSchema, writeVocabularyHelp } from "./vocabulary.js";
29
29
  export type { PackageListing, SurfaceListing } from "./vocabulary.js";
30
30
  /** The project's selected Runtime Profile, read the way `hypit` reads it, for tools that run beside the CLI. */
31
- export { findRuntimeProfile } from "@hypit/cli";
31
+ export { findRuntimeProfile } from "@hypit/project-context-node";
32
32
 
33
33
  export function runVideoCli(
34
34
  argv: readonly string[],