@hypit/hypit 0.1.4 → 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 (449) 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 +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 +32 -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 +28 -17
  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 +11 -0
  63. package/packages/build-result/src/decode.ts +2 -0
  64. package/packages/build-result/src/execution-log.ts +17 -0
  65. package/packages/build-result/src/index.ts +1 -0
  66. package/packages/build-result/src/store.ts +14 -1
  67. package/packages/build-result/src/types.ts +3 -0
  68. package/packages/build-result-s3/src/repository.ts +4 -0
  69. package/packages/caption/README.md +61 -73
  70. package/packages/caption/package.json +3 -2
  71. package/packages/caption/src/activation.ts +2 -2
  72. package/packages/caption/src/component.ts +20 -5
  73. package/packages/caption/src/display.ts +3 -18
  74. package/packages/caption/src/fragment.ts +3 -7
  75. package/packages/caption/src/index.ts +6 -5
  76. package/packages/caption/src/manifest.ts +29 -46
  77. package/packages/caption/src/style.ts +24 -135
  78. package/packages/caption/src/surface.ts +12 -92
  79. package/packages/caption/src/temporalize.ts +18 -53
  80. package/packages/caption/src/types.ts +8 -35
  81. package/packages/caption/src/visibility.ts +23 -0
  82. package/packages/caption-fine/README.md +14 -9
  83. package/packages/caption-fine/package.json +4 -2
  84. package/packages/caption-fine/src/component.ts +3 -3
  85. package/packages/caption-fine/src/fragment.ts +7 -19
  86. package/packages/caption-fine/src/index.ts +2 -0
  87. package/packages/caption-fine/src/manifest.ts +26 -17
  88. package/packages/caption-fine/src/recipe.ts +7 -0
  89. package/packages/caption-fine/src/render.ts +14 -13
  90. package/packages/caption-fine/src/schedule.ts +39 -35
  91. package/packages/caption-fine/src/style.ts +10 -9
  92. package/packages/caption-fine/src/surface.ts +62 -35
  93. package/packages/caption-fine/src/types.ts +2 -0
  94. package/packages/caption-fine-studio/README.md +24 -2
  95. package/packages/caption-fine-studio/package.json +3 -1
  96. package/packages/caption-fine-studio/src/activation.ts +3 -3
  97. package/packages/caption-fine-studio/src/index.ts +54 -42
  98. package/packages/cli/README.md +57 -4
  99. package/packages/cli/package.json +1 -0
  100. package/packages/cli/src/arguments.ts +25 -6
  101. package/packages/cli/src/build-planning.ts +3 -2
  102. package/packages/cli/src/command.ts +6 -0
  103. package/packages/cli/src/commands/environment.ts +28 -18
  104. package/packages/cli/src/commands/execution.ts +81 -26
  105. package/packages/cli/src/commands/results.ts +7 -11
  106. package/packages/cli/src/index.ts +2 -2
  107. package/packages/cli/src/machine-view.ts +3 -2
  108. package/packages/cli/src/main.ts +34 -42
  109. package/packages/cli/src/observation.ts +7 -1
  110. package/packages/cli/src/output.ts +65 -23
  111. package/packages/cli/src/view.ts +64 -18
  112. package/packages/comment-sticker/README.md +3 -3
  113. package/packages/comment-sticker/package.json +1 -1
  114. package/packages/comment-sticker/src/component.ts +4 -4
  115. package/packages/comment-sticker/src/fragment.ts +5 -4
  116. package/packages/comment-sticker/src/manifest.ts +7 -6
  117. package/packages/comment-sticker/src/program.ts +9 -9
  118. package/packages/comment-sticker/src/surface.ts +6 -7
  119. package/packages/composition/README.md +21 -0
  120. package/packages/composition/src/audio-presentation.ts +44 -0
  121. package/packages/composition/src/index.ts +3 -0
  122. package/packages/composition/src/schema.ts +8 -3
  123. package/packages/composition/src/track.ts +15 -1
  124. package/packages/credential-store-env/README.md +1 -1
  125. package/packages/deck-track/README.md +3 -3
  126. package/packages/deck-track/package.json +1 -1
  127. package/packages/deck-track/src/component.ts +5 -5
  128. package/packages/deck-track/src/fragment.ts +6 -5
  129. package/packages/deck-track/src/lower.ts +12 -12
  130. package/packages/deck-track/src/manifest.ts +8 -7
  131. package/packages/deck-track/src/program.ts +13 -16
  132. package/packages/deck-track/src/surface.ts +9 -10
  133. package/packages/driver-node/src/driver.ts +41 -3
  134. package/packages/elevenlabs-speech/README.md +27 -0
  135. package/packages/{provider-xiaomi-mimo → elevenlabs-speech}/package.json +5 -8
  136. package/packages/elevenlabs-speech/src/activation.ts +26 -0
  137. package/packages/elevenlabs-speech/src/fragment.ts +11 -0
  138. package/packages/elevenlabs-speech/src/index.ts +111 -0
  139. package/packages/elevenlabs-speech/src/surface.ts +167 -0
  140. package/packages/endpoint-kit/README.md +24 -0
  141. package/packages/endpoint-kit/src/index.ts +7 -1
  142. package/packages/film/README.md +12 -7
  143. package/packages/film/package.json +1 -1
  144. package/packages/film/src/component.ts +4 -4
  145. package/packages/film/src/fragment.ts +6 -5
  146. package/packages/film/src/manifest.ts +11 -10
  147. package/packages/film/src/program.ts +5 -5
  148. package/packages/film/src/recipe.ts +2 -1
  149. package/packages/film/src/surface.ts +6 -6
  150. package/packages/film-studio/package.json +1 -1
  151. package/packages/film-studio/src/index.ts +2 -2
  152. package/packages/fishaudio-speech/README.md +33 -0
  153. package/packages/fishaudio-speech/package.json +21 -0
  154. package/packages/fishaudio-speech/src/activation.ts +32 -0
  155. package/packages/fishaudio-speech/src/fragment.ts +11 -0
  156. package/packages/fishaudio-speech/src/index.ts +156 -0
  157. package/packages/fishaudio-speech/src/surface.ts +192 -0
  158. package/packages/generation/README.md +11 -1
  159. package/packages/generation/src/mapping.ts +28 -30
  160. package/packages/gpt-image/README.md +1 -2
  161. package/packages/grok-imagine/README.md +1 -2
  162. package/packages/hyperframes/README.md +7 -3
  163. package/packages/hyperframes/src/browser-program.ts +11 -2
  164. package/packages/hyperframes/src/document.ts +15 -2
  165. package/packages/interview-emoji-reveal/README.md +4 -4
  166. package/packages/interview-emoji-reveal/package.json +1 -1
  167. package/packages/interview-emoji-reveal/src/component.ts +4 -4
  168. package/packages/interview-emoji-reveal/src/fragment.ts +6 -5
  169. package/packages/interview-emoji-reveal/src/manifest.ts +9 -8
  170. package/packages/interview-emoji-reveal/src/program.ts +14 -14
  171. package/packages/interview-emoji-reveal/src/surface.ts +8 -9
  172. package/packages/media-execution/README.md +7 -3
  173. package/packages/media-execution/src/audio-presentation.ts +23 -0
  174. package/packages/media-execution/src/execute.ts +2 -0
  175. package/packages/media-pipeline/README.md +7 -3
  176. package/packages/media-pipeline/src/audio-plan.ts +4 -1
  177. package/packages/media-pipeline/src/component.ts +16 -2
  178. package/packages/media-pipeline/src/manifest.ts +3 -1
  179. package/packages/media-pipeline/src/types.ts +2 -1
  180. package/packages/media-track/README.md +14 -47
  181. package/packages/media-track/package.json +1 -1
  182. package/packages/media-track/preview/preview.svml +5 -5
  183. package/packages/media-track/src/author.ts +12 -6
  184. package/packages/media-track/src/component.ts +10 -16
  185. package/packages/media-track/src/fragment.ts +8 -7
  186. package/packages/media-track/src/index.ts +3 -1
  187. package/packages/media-track/src/lower.ts +7 -7
  188. package/packages/media-track/src/manifest.ts +16 -38
  189. package/packages/media-track/src/program.ts +62 -67
  190. package/packages/media-track/src/sampling.ts +6 -6
  191. package/packages/media-track/src/sequence.ts +8 -8
  192. package/packages/media-track/src/surface.ts +25 -43
  193. package/packages/media-track-studio/README.md +9 -0
  194. package/packages/media-track-studio/src/index.ts +16 -11
  195. package/packages/mimo-speech/README.md +1 -1
  196. package/packages/minimax-h3/README.md +1 -1
  197. package/packages/nano-banana/README.md +1 -1
  198. package/packages/narrative/README.md +23 -1
  199. package/packages/narrative/src/identity.ts +11 -0
  200. package/packages/narrative/src/index.ts +3 -0
  201. package/packages/narrative/src/schema.ts +28 -27
  202. package/packages/narrative/src/selection.ts +52 -0
  203. package/packages/narrative/src/types.ts +2 -0
  204. package/packages/package-loader-node/README.md +30 -0
  205. package/packages/package-loader-node/package.json +5 -2
  206. package/packages/package-loader-node/src/distribution-resolution.ts +10 -3
  207. package/packages/package-loader-node/src/index.ts +1 -0
  208. package/packages/package-loader-node/src/loader.ts +12 -15
  209. package/packages/package-loader-node/src/location.ts +27 -1
  210. package/packages/package-loader-node/src/module-scope.ts +183 -0
  211. package/packages/package-loader-node/src/types.ts +4 -0
  212. package/packages/performance/README.md +83 -0
  213. package/packages/performance/package.json +30 -0
  214. package/packages/performance/src/activation.ts +11 -0
  215. package/packages/performance/src/component.ts +46 -0
  216. package/packages/performance/src/index.ts +6 -0
  217. package/packages/performance/src/manifest.ts +53 -0
  218. package/packages/{media-track/src/performance.ts → performance/src/media.ts} +9 -10
  219. package/packages/performance/src/program.ts +51 -0
  220. package/packages/performance/src/style.ts +35 -0
  221. package/packages/performance/src/surface.ts +99 -0
  222. package/packages/performance-studio/README.md +25 -0
  223. package/packages/performance-studio/package.json +21 -0
  224. package/packages/performance-studio/src/activation.ts +6 -0
  225. package/packages/performance-studio/src/index.ts +84 -0
  226. package/packages/program-space/README.md +9 -18
  227. package/packages/program-space/src/activation.ts +1 -5
  228. package/packages/program-space/src/index.ts +2 -11
  229. package/packages/program-space/src/surface.ts +1 -20
  230. package/packages/project-context-node/README.md +20 -0
  231. package/packages/project-context-node/package.json +10 -0
  232. package/packages/project-context-node/src/index.ts +3 -0
  233. package/packages/{cli → project-context-node}/src/runtime-selection.ts +7 -2
  234. package/packages/provider-hyperframes-local/README.md +43 -15
  235. package/packages/provider-hyperframes-local/src/activation.ts +4 -3
  236. package/packages/provider-hyperframes-local/src/capture-process.ts +26 -4
  237. package/packages/provider-hyperframes-local/src/capture.ts +96 -26
  238. package/packages/provider-hyperframes-local/src/concurrency.ts +86 -0
  239. package/packages/provider-hyperframes-local/src/opaque-capture.ts +92 -0
  240. package/packages/provider-hyperframes-local/src/options.ts +2 -0
  241. package/packages/provider-hyperframes-local/src/program.ts +6 -3
  242. package/packages/provider-hyperframes-local/src/progress.ts +53 -0
  243. package/packages/provider-hyperframes-local/src/provider.ts +18 -5
  244. package/packages/provider-hyperframes-local/src/render.ts +48 -7
  245. package/packages/provider-hypihub/README.md +48 -17
  246. package/packages/provider-hypihub/package.json +2 -0
  247. package/packages/provider-hypihub/src/mapping.ts +31 -7
  248. package/packages/provider-hypihub/src/oauth.ts +6 -0
  249. package/packages/provider-hypihub/src/provider.ts +25 -13
  250. package/packages/provider-hypihub/src/routes.ts +1 -2
  251. package/packages/provider-hypihub/src/upload.ts +2 -0
  252. package/packages/provider-media-local/README.md +3 -4
  253. package/packages/provider-whisperx-local/src/program.ts +1 -0
  254. package/packages/provider-whisperx-local/src/provider.ts +3 -0
  255. package/packages/ranking/README.md +8 -6
  256. package/packages/ranking/package.json +1 -1
  257. package/packages/ranking/src/component.ts +6 -6
  258. package/packages/ranking/src/fragment.ts +11 -7
  259. package/packages/ranking/src/manifest.ts +21 -14
  260. package/packages/ranking/src/render.ts +22 -26
  261. package/packages/ranking/src/schedule.ts +16 -19
  262. package/packages/ranking/src/surface.ts +12 -13
  263. package/packages/ranking-studio/README.md +18 -0
  264. package/packages/ranking-studio/src/index.ts +61 -9
  265. package/packages/render-hyperframes/README.md +7 -7
  266. package/packages/render-hyperframes/package.json +1 -1
  267. package/packages/render-hyperframes/src/component.ts +11 -1
  268. package/packages/render-hyperframes/src/fragment.ts +7 -4
  269. package/packages/render-hyperframes/src/manifest.ts +4 -4
  270. package/packages/render-hyperframes/src/surface.ts +6 -6
  271. package/packages/runtime/README.md +8 -1
  272. package/packages/runtime/src/execution.ts +15 -4
  273. package/packages/runtime/src/index.ts +2 -1
  274. package/packages/runtime/src/log.ts +51 -0
  275. package/packages/runtime/src/types.ts +5 -8
  276. package/packages/runtime-host-node/README.md +30 -0
  277. package/packages/runtime-host-node/package.json +1 -0
  278. package/packages/runtime-host-node/src/index.ts +24 -9
  279. package/packages/runtime-host-node/src/packages.ts +47 -50
  280. package/packages/runtime-kit/README.md +5 -0
  281. package/packages/runtime-kit/src/index.ts +3 -1
  282. package/packages/runtime-local/README.md +92 -4
  283. package/packages/runtime-local/src/config.ts +202 -56
  284. package/packages/runtime-local/src/control.ts +9 -1
  285. package/packages/runtime-local/src/executor.ts +66 -0
  286. package/packages/runtime-local/src/host.ts +37 -17
  287. package/packages/runtime-local/src/log.ts +48 -0
  288. package/packages/runtime-local/src/programs.ts +2 -1
  289. package/packages/runtime-local/src/result-writer.ts +2 -0
  290. package/packages/runtime-local/src/runtime.ts +8 -6
  291. package/packages/runtime-local/src/supervisor.ts +142 -0
  292. package/packages/runtime-local/src/types.ts +9 -2
  293. package/packages/runtime-local/src/worker-process.ts +7 -24
  294. package/packages/runtime-local/src/worker.ts +55 -83
  295. package/packages/screen-overlay/README.md +3 -3
  296. package/packages/screen-overlay/package.json +1 -1
  297. package/packages/screen-overlay/src/component.ts +3 -3
  298. package/packages/screen-overlay/src/fragment.ts +5 -4
  299. package/packages/screen-overlay/src/manifest.ts +7 -6
  300. package/packages/screen-overlay/src/program.ts +9 -9
  301. package/packages/screen-overlay/src/surface.ts +6 -7
  302. package/packages/script/README.md +15 -2
  303. package/packages/script/src/manifest.ts +2 -2
  304. package/packages/script/src/narrative.ts +1 -0
  305. package/packages/script/src/surface.ts +4 -3
  306. package/packages/script/src/types.ts +1 -1
  307. package/packages/script-studio/package.json +9 -3
  308. package/packages/script-studio/src/index.ts +2 -0
  309. package/packages/script-studio/src/projection.ts +105 -0
  310. package/packages/seedance/README.md +30 -1
  311. package/packages/seedance/src/index.ts +18 -7
  312. package/packages/seedance/src/surface.ts +17 -4
  313. package/packages/seedance-kits/README.md +7 -1
  314. package/packages/seedream/README.md +1 -1
  315. package/packages/sound/README.md +81 -0
  316. package/packages/sound/package.json +25 -0
  317. package/packages/sound/src/activation.ts +11 -0
  318. package/packages/sound/src/component.ts +28 -0
  319. package/packages/sound/src/index.ts +5 -0
  320. package/packages/sound/src/manifest.ts +47 -0
  321. package/packages/sound/src/program.ts +84 -0
  322. package/packages/sound/src/style.ts +34 -0
  323. package/packages/sound/src/surface.ts +90 -0
  324. package/packages/sound-studio/README.md +22 -0
  325. package/packages/sound-studio/package.json +20 -0
  326. package/packages/sound-studio/src/activation.ts +6 -0
  327. package/packages/sound-studio/src/index.ts +74 -0
  328. package/packages/speech/README.md +2 -2
  329. package/packages/speech-alignment/src/local.ts +8 -0
  330. package/packages/speech-alignment/src/locate.ts +1 -1
  331. package/packages/store-sqlite/README.md +7 -0
  332. package/packages/store-sqlite/src/store.ts +84 -83
  333. package/packages/studio/INSPECTOR.md +15 -2
  334. package/packages/studio/README.md +88 -14
  335. package/packages/studio/package.json +8 -7
  336. package/packages/studio/src/companion-assembly.ts +1 -0
  337. package/packages/studio/src/domain.ts +1 -1
  338. package/packages/studio/src/fallback-companions.ts +3 -3
  339. package/packages/studio/src/feedback-server.ts +51 -0
  340. package/packages/studio/src/feedback-store.ts +66 -0
  341. package/packages/studio/src/feedback.ts +60 -0
  342. package/packages/studio/src/parameter-values.ts +43 -1
  343. package/packages/studio/src/parameters.ts +114 -24
  344. package/packages/studio/src/preview/render.ts +5 -1
  345. package/packages/studio/src/preview/runtime-shim.ts +49 -3
  346. package/packages/studio/src/programme.ts +14 -30
  347. package/packages/studio/src/server.ts +10 -6
  348. package/packages/studio/src/shared.ts +4 -2
  349. package/packages/studio/src/snapshot.ts +21 -132
  350. package/packages/studio/src/studio-preflight.ts +3 -3
  351. package/packages/studio/src/studio-registry.ts +50 -6
  352. package/packages/studio/src/style.css +209 -48
  353. package/packages/studio/src/ui/comments.ts +233 -0
  354. package/packages/studio/src/ui/icons.ts +5 -0
  355. package/packages/studio/src/ui/main.ts +145 -86
  356. package/packages/studio/src/ui/overlay.ts +12 -8
  357. package/packages/studio/src/ui/scrub-preview.ts +108 -0
  358. package/packages/studio/src/ui/stage.ts +67 -4
  359. package/packages/studio/src/ui/timeline.ts +177 -108
  360. package/packages/studio/start.ts +4 -2
  361. package/packages/studio-adapter/README.md +130 -11
  362. package/packages/studio-adapter/src/index.ts +100 -13
  363. package/packages/temporal/README.md +6 -6
  364. package/packages/temporal/package.json +1 -1
  365. package/packages/temporal/src/component.ts +5 -6
  366. package/packages/temporal/src/index.ts +8 -6
  367. package/packages/temporal/src/location.ts +11 -11
  368. package/packages/temporal/src/projection.ts +19 -19
  369. package/packages/temporal/src/rational.ts +4 -4
  370. package/packages/temporal-markup/EDITING.md +2 -2
  371. package/packages/temporal-markup/README.md +27 -11
  372. package/packages/temporal-markup/package.json +1 -1
  373. package/packages/temporal-markup/src/index.ts +20 -25
  374. package/packages/temporal-markup/src/space.ts +10 -41
  375. package/packages/timeline/README.md +31 -0
  376. package/packages/{semantic-track → timeline}/package.json +1 -1
  377. package/packages/timeline/src/activation.ts +8 -0
  378. package/packages/timeline/src/component.ts +24 -0
  379. package/packages/timeline/src/identity.ts +60 -0
  380. package/packages/timeline/src/index.ts +6 -0
  381. package/packages/{semantic-track → timeline}/src/location.ts +20 -20
  382. package/packages/timeline/src/manifest.ts +39 -0
  383. package/packages/{semantic-track → timeline}/src/projection.ts +14 -14
  384. package/packages/timeline/src/types.ts +24 -0
  385. package/packages/timeline-author/README.md +68 -0
  386. package/packages/{speech-track → timeline-author}/package.json +6 -4
  387. package/packages/timeline-author/src/activation.ts +22 -0
  388. package/packages/{speech-track → timeline-author}/src/component.ts +15 -13
  389. package/packages/{speech-track → timeline-author}/src/fragment.ts +14 -23
  390. package/packages/timeline-author/src/index.ts +7 -0
  391. package/packages/timeline-author/src/manifest.ts +78 -0
  392. package/packages/timeline-author/src/program.ts +107 -0
  393. package/packages/timeline-author/src/surface.ts +46 -0
  394. package/packages/timeline-author/src/types.ts +6 -0
  395. package/packages/typography-track/README.md +4 -4
  396. package/packages/typography-track/package.json +1 -1
  397. package/packages/typography-track/src/component.ts +4 -4
  398. package/packages/typography-track/src/fragment.ts +4 -3
  399. package/packages/typography-track/src/manifest.ts +11 -9
  400. package/packages/typography-track/src/program.ts +15 -15
  401. package/packages/typography-track/src/surface.ts +17 -18
  402. package/packages/video-cli/README.md +4 -1
  403. package/packages/video-cli/package.json +2 -1
  404. package/packages/video-cli/src/creation.ts +14 -4
  405. package/packages/video-cli/src/index.ts +1 -1
  406. package/packages/video-cli/src/studio-distribution.ts +2 -1
  407. package/packages/volcengine-matting/README.md +3 -3
  408. package/packages/whisperx/README.md +1 -1
  409. package/services/whisperx/README.md +14 -0
  410. package/services/whisperx/pyproject.toml +2 -0
  411. package/services/whisperx/uv.lock +20 -20
  412. package/packages/provider-hyperframes-aws-lambda/README.md +0 -30
  413. package/packages/provider-hyperframes-aws-lambda/package.json +0 -30
  414. package/packages/provider-hyperframes-aws-lambda/src/activation.ts +0 -97
  415. package/packages/provider-hyperframes-aws-lambda/src/client.ts +0 -114
  416. package/packages/provider-hyperframes-aws-lambda/src/index.ts +0 -21
  417. package/packages/provider-hyperframes-aws-lambda/src/provider.ts +0 -522
  418. package/packages/provider-kie/README.md +0 -134
  419. package/packages/provider-kie/package.json +0 -43
  420. package/packages/provider-kie/src/activation.ts +0 -71
  421. package/packages/provider-kie/src/index.ts +0 -10
  422. package/packages/provider-kie/src/mapping.ts +0 -182
  423. package/packages/provider-kie/src/provider.ts +0 -657
  424. package/packages/provider-kie/src/routes.ts +0 -150
  425. package/packages/provider-xiaomi-mimo/README.md +0 -32
  426. package/packages/provider-xiaomi-mimo/src/activation.ts +0 -57
  427. package/packages/provider-xiaomi-mimo/src/index.ts +0 -5
  428. package/packages/provider-xiaomi-mimo/src/provider.ts +0 -214
  429. package/packages/runtime/src/environment.ts +0 -6
  430. package/packages/semantic-track/README.md +0 -21
  431. package/packages/semantic-track/src/activation.ts +0 -8
  432. package/packages/semantic-track/src/component.ts +0 -24
  433. package/packages/semantic-track/src/identity.ts +0 -58
  434. package/packages/semantic-track/src/index.ts +0 -6
  435. package/packages/semantic-track/src/manifest.ts +0 -38
  436. package/packages/semantic-track/src/types.ts +0 -26
  437. package/packages/speech-track/README.md +0 -51
  438. package/packages/speech-track/src/activation.ts +0 -19
  439. package/packages/speech-track/src/index.ts +0 -7
  440. package/packages/speech-track/src/manifest.ts +0 -73
  441. package/packages/speech-track/src/program.ts +0 -64
  442. package/packages/speech-track/src/surface.ts +0 -35
  443. package/packages/speech-track/src/types.ts +0 -6
  444. package/packages/speech-track-studio/README.md +0 -3
  445. package/packages/speech-track-studio/package.json +0 -14
  446. package/packages/speech-track-studio/src/activation.ts +0 -7
  447. package/packages/speech-track-studio/src/index.ts +0 -40
  448. /package/packages/{cli → project-context-node}/src/project-context.ts +0 -0
  449. /package/packages/{speech-track → timeline-author}/preview/Track.png +0 -0
@@ -1,7 +1,7 @@
1
+ import type { Timeline } from "@hypit/timeline";
1
2
  import { assertVisualTrackIdentity, sealVisualTrack } from "@hypit/composition";
2
3
  import type { VisualAnimation, VisualElement, VisualTrack } from "@hypit/composition";
3
4
  import { assertProgramSpaceIdentity } from "@hypit/program-space";
4
- import type { ProgramSpace } from "@hypit/program-space";
5
5
  import { canonicalize } from "@hypit/protocol";
6
6
  import type { BlobRef } from "@hypit/protocol";
7
7
  import { assertCanvasSpace } from "@hypit/spatial";
@@ -67,11 +67,11 @@ export function assertEmojiRevealSet(value: EmojiRevealSet): void {
67
67
  }
68
68
  }
69
69
 
70
- export function appendEmojiRevealItem(set: EmojiRevealSet, space: ProgramSpace, spec: EmojiRevealItemSpec, icon: BlobRef, activation: TemporalInstant): EmojiRevealSet {
71
- assertEmojiRevealSet(set); assertProgramSpaceIdentity(space); assertEmojiRevealItemSpec(spec);
70
+ export function appendEmojiRevealItem(set: EmojiRevealSet, timeline: Timeline, spec: EmojiRevealItemSpec, icon: BlobRef, activation: TemporalInstant): EmojiRevealSet {
71
+ assertEmojiRevealSet(set); assertProgramSpaceIdentity(timeline); assertEmojiRevealItemSpec(spec);
72
72
  assert(!spec.preset, `Emoji Reveal Item ${spec.id} with preset=true cannot have an activation.`);
73
73
  assertIconImage(icon, `Emoji Reveal Item ${spec.id} icon`);
74
- assertTemporalInstantFor(activation, { subjectId: spec.id, space });
74
+ assertTemporalInstantFor(activation, { subjectId: spec.id, space: timeline });
75
75
  assert(!set.items.some((item) => item.spec.id === spec.id), `Duplicate Emoji Reveal Item ${spec.id}.`);
76
76
  return { items: [...set.items, { spec: structuredClone(spec), icon: structuredClone(icon), activation: structuredClone(activation) }] };
77
77
  }
@@ -85,11 +85,11 @@ export function appendPresetEmojiRevealItem(set: EmojiRevealSet, spec: EmojiReve
85
85
  }
86
86
 
87
87
  export function finalizeEmojiReveal(
88
- header: EmojiRevealHeader, space: ProgramSpace, outer: TemporalWindow, style: EmojiRevealStyle, placeholder: BlobRef, set: EmojiRevealSet,
88
+ header: EmojiRevealHeader, timeline: Timeline, outer: TemporalWindow, style: EmojiRevealStyle, placeholder: BlobRef, set: EmojiRevealSet,
89
89
  ): EmojiRevealProgram {
90
- assertEmojiRevealHeader(header); assertProgramSpaceIdentity(space); assertEmojiRevealStyle(style); assertEmojiRevealSet(set);
90
+ assertEmojiRevealHeader(header); assertProgramSpaceIdentity(timeline); assertEmojiRevealStyle(style); assertEmojiRevealSet(set);
91
91
  assertIconImage(placeholder, "Emoji Reveal placeholder");
92
- assertTemporalWindowFor(outer, { subjectId: header.id, space });
92
+ assertTemporalWindowFor(outer, { subjectId: header.id, space: timeline });
93
93
  assert(set.items.length > 0, "Emoji Reveal requires at least one Item.");
94
94
  let previous = outer.span.startFrame - 1;
95
95
  let revealStarted = false;
@@ -106,7 +106,7 @@ export function finalizeEmojiReveal(
106
106
  previous = frame;
107
107
  }
108
108
  const program: EmojiRevealProgram = {
109
- id: header.id, programSpaceId: space.id, outer: structuredClone(outer), style: structuredClone(style),
109
+ id: header.id, programSpaceId: timeline.id, outer: structuredClone(outer), style: structuredClone(style),
110
110
  placeholder: structuredClone(placeholder), items: structuredClone(set.items),
111
111
  };
112
112
  assertEmojiRevealProgram(program);
@@ -183,10 +183,10 @@ function iconElement(input: {
183
183
  };
184
184
  }
185
185
 
186
- export function renderEmojiReveal(canvas: CanvasSpace, space: ProgramSpace, program: EmojiRevealProgram): VisualTrack {
187
- assertCanvasSpace(canvas); assertProgramSpaceIdentity(space); assertEmojiRevealProgram(program);
188
- assert(program.programSpaceId === space.id, "EmojiRevealProgram belongs to another ProgramSpace.");
189
- assertTemporalWindowFor(program.outer, { subjectId: program.id, space });
186
+ export function renderEmojiReveal(canvas: CanvasSpace, timeline: Timeline, program: EmojiRevealProgram): VisualTrack {
187
+ assertCanvasSpace(canvas); assertProgramSpaceIdentity(timeline); assertEmojiRevealProgram(program);
188
+ assert(program.programSpaceId === timeline.id, "EmojiRevealProgram belongs to another Timeline.");
189
+ assertTemporalWindowFor(program.outer, { subjectId: program.id, space: timeline });
190
190
  const { style } = program;
191
191
  const count = program.items.length;
192
192
  const width = style.paddingXPx * 2 + style.slotSizePx * count + style.gapPx * (count - 1);
@@ -234,9 +234,9 @@ export function renderEmojiReveal(canvas: CanvasSpace, space: ProgramSpace, prog
234
234
  );
235
235
  });
236
236
  const track = sealVisualTrack({
237
- programSpaceId: space.id, visualIr: "hypit.visual-ir@1", id: program.id,
237
+ programSpaceId: timeline.id, visualIr: "hypit.visual-ir@1", id: program.id,
238
238
  presents: [{ id: program.id, subjectId: program.id, span: { ...program.outer.span },
239
239
  stacking: { order: style.stackingOrder, tieBreak: program.id }, elements }],
240
240
  });
241
- assertVisualTrackIdentity(track, space); return track;
241
+ assertVisualTrackIdentity(track, timeline); return track;
242
242
  }
@@ -1,4 +1,4 @@
1
- import { createTemporalSpace, resolveTemporalContext } from "@hypit/temporal-markup";
1
+ import { resolveTemporalContext } from "@hypit/temporal-markup";
2
2
  import {
3
3
  assertAttributes, assertEmptyElement, optionalTextAttribute, textAttribute, type MarkupAttributeValue, type StructuredSurfaceHandler,
4
4
  type SurfaceComponentDraft, type SurfaceRecordDraft, type SurfaceResolvedReference,
@@ -48,24 +48,23 @@ export const decodeEmojiRevealStyleSurface: StructuredSurfaceHandler = ({ elemen
48
48
  };
49
49
 
50
50
  export const decodeEmojiRevealTrackSurface: StructuredSurfaceHandler = ({ element, resolveReference }) => {
51
- assertAttributes(element, ["id", "semantic", "space", "canvas", "style", "placeholder", ...temporalWindowAttributeNames]);
51
+ assertAttributes(element, ["id", "timeline", "canvas", "style", "placeholder", ...temporalWindowAttributeNames]);
52
52
  const id = textAttribute(element, "id");
53
53
  const context = resolveTemporalContext({ element, resolveReference });
54
- const time = createTemporalSpace({ id: id, element, ...context });
55
54
  const canvas = reference(element.attributes.canvas, `${element.name}.canvas`, spatialTypes.canvas, resolveReference);
56
55
  const style = reference(element.attributes.style, `${element.name}.style`, emojiRevealTypes.style, resolveReference);
57
56
  const placeholder = reference(element.attributes.placeholder, `${element.name}.placeholder`, artifactTypes.blob, resolveReference);
58
- const outer = createTemporalWindowProjection({ id, subjectId: id, element, ...context, space: time.space, resolveReference });
57
+ const outer = createTemporalWindowProjection({ id, subjectId: id, element, ...context, resolveReference });
59
58
  const headerId = `${id}.header`;
60
59
  const records: SurfaceRecordDraft[] = [...outer.records, {
61
60
  id: headerId, type: emojiRevealTypes.header,
62
61
  value: { kind: "inline", value: sealEmojiRevealHeader({ id }) as unknown as CanonicalValue }, range: element.range,
63
62
  }];
64
- const temporalComponents: SurfaceComponentDraft[] = [...time.components, ...outer.components];
65
- const temporalFragments = [...time.fragments, ...outer.fragments];
63
+ const temporalComponents: SurfaceComponentDraft[] = [...outer.components];
64
+ const temporalFragments = [...outer.fragments];
66
65
  const items: { specName: string; iconName: string; activationName?: string }[] = [];
67
- const inputs: Record<string, typeof time.space.ref> = {
68
- header: { kind: "record", id: headerId }, space: time.space.ref, canvas: canvas.ref, style: style.ref,
66
+ const inputs: Record<string, typeof context.timeline.ref> = {
67
+ header: { kind: "record", id: headerId }, timeline: context.timeline.ref, canvas: canvas.ref, style: style.ref,
69
68
  placeholder: placeholder.ref, outer: outer.ref,
70
69
  };
71
70
  const ids = new Set<string>();
@@ -92,7 +91,7 @@ export const decodeEmojiRevealTrackSurface: StructuredSurfaceHandler = ({ elemen
92
91
  else {
93
92
  const activation = createTemporalInstantProjection({
94
93
  id: `${id}.item.${suffix}.activation`, subjectId: itemId,
95
- element: child, ...context, space: time.space, resolveReference, semanticAttribute: "at", projectedAttribute: false,
94
+ element: child, ...context, resolveReference, semanticAttribute: "at", projectedAttribute: false,
96
95
  });
97
96
  records.push(...activation.records); temporalComponents.push(...activation.components); temporalFragments.push(...activation.fragments);
98
97
  const activationName = `item-${suffix}-activation`;
@@ -20,9 +20,13 @@ owns the byte-level implementations of the eight current operations:
20
20
  - render an exact sample-domain audio program;
21
21
  - mux rendered visual and audio products.
22
22
 
23
- Local and AWS Lambda Providers call these same functions with different Artifact I/O and FFmpeg
24
- launch environments. They therefore share stream selection, timing, codec and validation behavior
25
- instead of reimplementing media semantics per deployment.
23
+ The local Provider calls these functions with its Artifact I/O and FFmpeg launch environment. Other
24
+ deployments can reuse the same functions to preserve stream selection, timing, codec and validation behavior.
26
25
 
27
26
  This is not an author package, Provider, queue or Core extension. It performs no endpoint selection,
28
27
  credential lookup or SVML parsing.
28
+
29
+ Audio gain envelopes and audible subranges are evaluated per sample after tempo/looping and Clip
30
+ fades, before the requested range is cropped. Original source and envelope progress therefore survive
31
+ local silence and range rendering. This is generic AudioProgramPlan execution, independent of author
32
+ component or Style names.
@@ -0,0 +1,23 @@
1
+ import type { AudioProgramClip } from "@hypit/media-pipeline";
2
+
3
+ /** Per-sample gain after source playback/fades, before any requested render-range crop. */
4
+ export function audioPresentationFilter(clip: AudioProgramClip): string[] {
5
+ if (clip.gainEnvelope === undefined && clip.audibility === undefined) return [];
6
+ const sample = `(n+${clip.targetStartSample})`;
7
+ let gain = "1";
8
+ const points = clip.gainEnvelope;
9
+ if (points !== undefined) {
10
+ gain = String(points.at(-1)!.gain);
11
+ for (let index = points.length - 1; index > 0; index--) {
12
+ const left = points[index - 1]!, right = points[index]!;
13
+ const line = `(${left.gain}+(${right.gain}-${left.gain})*(${sample}-${left.sample})/${right.sample-left.sample})`;
14
+ gain = `if(lt(${sample},${right.sample}),${line},${gain})`;
15
+ }
16
+ gain = `if(lt(${sample},${points[0]!.sample}),${points[0]!.gain},${gain})`;
17
+ }
18
+ if (clip.audibility !== undefined) {
19
+ const active = clip.audibility.map(span => `(gte(${sample},${span.startSample})*lt(${sample},${span.endSampleExclusive}))`).join("+") || "0";
20
+ gain = `(${gain})*(${active})`;
21
+ }
22
+ return [`aeval=exprs='val(0)*(${gain})|val(1)*(${gain})'`];
23
+ }
@@ -1,3 +1,4 @@
1
+ import { audioPresentationFilter } from "./audio-presentation.js";
1
2
  import { spawn } from "node:child_process";
2
3
  import { randomUUID } from "node:crypto";
3
4
  import { createReadStream } from "node:fs";
@@ -556,6 +557,7 @@ function audioClipFilter(clip: AudioProgramClip, inputIndex: number, outputIndex
556
557
  ...(clip.fadeOutSamples === 0 ? [] : [
557
558
  `afade=t=out:start_sample=${length - clip.fadeOutSamples}:nb_samples=${clip.fadeOutSamples}`,
558
559
  ]),
560
+ ...audioPresentationFilter(clip),
559
561
  // Crop after tempo, looping and envelopes, keeping their original phase.
560
562
  `atrim=start_sample=${left - clip.targetStartSample}:end_sample=${right - clip.targetStartSample}`,
561
563
  "asetpts=N/SR/TB",
@@ -37,7 +37,7 @@ This package is the shared execution vocabulary. Speech authoring makes the boun
37
37
  alignment produce one `SemanticTake`. Media Track consumes that prepared value; it never owns an
38
38
  implicit visual-only normalization policy.
39
39
 
40
- The frame clock is a separate program fact and can be shared by every Normalize and Speech Track:
40
+ The frame clock is a separate program fact and can be shared by every Normalize and Timeline assembly:
41
41
 
42
42
  ```svml
43
43
  <program:Clock id="clock" frame-rate="30"/>
@@ -109,5 +109,9 @@ RenderedVisual + TimelineAudio -> mux-program-media Need -> MuxedMedia
109
109
  Compiling an `AudioProgramPlan` is ordinary deterministic code. Reading Artifact bytes, decoding,
110
110
  resampling, mixing, encoding or muxing is never a Producer shortcut: it is an explicit Provider
111
111
  Need. The plan fixes exact 48 kHz sample boundaries, gain/fade/playback parameters and the absence
112
- of hidden normalization/limiting. The local FFmpeg and AWS Lambda Providers consume the same shared
113
- execution body and return the same public contracts.
112
+ of hidden normalization/limiting. The local FFmpeg Provider consumes the shared execution body. Other Providers implement the same
113
+ public request and result semantics.
114
+
115
+ AudioProgramPlan preserves AudioClip `gainEnvelope` and `audibility` on the full program sample
116
+ clock. The [Composition definition](../composition/README.md#audio-presentation-on-the-program-clock)
117
+ owns their semantics; the plan does not reinterpret source choice or presentation precedence.
@@ -1,6 +1,6 @@
1
1
  import { programFrameSampleBoundary, programSpaceFrameCount } from "@hypit/program-space";
2
2
  import type { ProgramSpace } from "@hypit/program-space";
3
- import { assertCompositionIdentity } from "@hypit/composition";
3
+ import { assertCompositionIdentity, assertAudioPresentation } from "@hypit/composition";
4
4
  import type { Composition } from "@hypit/composition";
5
5
  import { canonicalize, isResourceId } from "@hypit/protocol";
6
6
 
@@ -62,6 +62,7 @@ export function verifyAudioProgramPlan(value: unknown): asserts value is AudioPr
62
62
  assert(clip.pitch === "preserve", `AudioProgramPlan clip ${clip.id} pitch policy is invalid`);
63
63
  assert(Number.isFinite(clip.gain) && clip.gain >= 0 && clip.gain <= 64,
64
64
  `AudioProgramPlan clip ${clip.id} gain is invalid`);
65
+ assertAudioPresentation(clip, { startSample: clip.targetStartSample, endSampleExclusive: clip.targetEndSampleExclusive }, item.sampleFrames);
65
66
  const length = clip.targetEndSampleExclusive - clip.targetStartSample;
66
67
  assert(Number.isSafeInteger(clip.fadeInSamples) && clip.fadeInSamples >= 0 && clip.fadeInSamples <= length
67
68
  && Number.isSafeInteger(clip.fadeOutSamples) && clip.fadeOutSamples >= 0 && clip.fadeOutSamples <= length,
@@ -100,6 +101,8 @@ export function compileAudioProgramPlan(composition: Composition, programSpace:
100
101
  gain: clip.gain,
101
102
  fadeInSamples: clip.fadeInSamples,
102
103
  fadeOutSamples: clip.fadeOutSamples,
104
+ ...(clip.gainEnvelope === undefined ? {} : { gainEnvelope: clip.gainEnvelope }),
105
+ ...(clip.audibility === undefined ? {} : { audibility: clip.audibility }),
103
106
  };
104
107
  }));
105
108
  return sealAudioProgramPlan({
@@ -66,6 +66,7 @@ function plannedMediaNeed(
66
66
  port: string,
67
67
  capability: CapabilityRef,
68
68
  roles: Readonly<Record<string, string>> = {},
69
+ present?: PlannedNeedFacet["present"],
69
70
  ): PlannedNeedFacet {
70
71
  return {
71
72
  producer,
@@ -75,6 +76,7 @@ function plannedMediaNeed(
75
76
  return { constraints: {}, pendingInputs: plannedNeedInputs(state, step, roles) };
76
77
  },
77
78
  present(specification) {
79
+ if (present !== undefined) return present(specification);
78
80
  const references: Record<string, number> = {};
79
81
  for (const item of specification.pendingInputs) {
80
82
  const role = item.role;
@@ -86,6 +88,18 @@ function plannedMediaNeed(
86
88
  };
87
89
  }
88
90
 
91
+ const presentAudioRender: NonNullable<PlannedNeedFacet["present"]> = (specification) => {
92
+ const request = specification.constraints as Partial<RenderAudioNeed>;
93
+ if (request.plan === undefined) return { fields: {}, references: {} };
94
+ const { plan, range } = request;
95
+ return { fields: {
96
+ startFrame: [range?.startFrame ?? 0],
97
+ endFrameExclusive: [range?.endFrameExclusive ?? plan.frameCount],
98
+ frameRate: [`${plan.frameRate.numerator}/${plan.frameRate.denominator}`],
99
+ sampleRate: [plan.sampleRate],
100
+ }, references: {} };
101
+ };
102
+
89
103
  export const mediaPipelineComponent = {
90
104
  validators: [
91
105
  {
@@ -363,8 +377,8 @@ export const mediaPipelineComponent = {
363
377
  mediaPipelineCapabilities.projectSpeechEvidenceAudio,
364
378
  { media: "audio" },
365
379
  ),
366
- plannedMediaNeed(mediaPipelineProducers.renderAudio, "audio", mediaPipelineCapabilities.renderAudio, { plan: "audio" }),
367
- plannedMediaNeed(mediaPipelineProducers.renderAudioRange, "audio", mediaPipelineCapabilities.renderAudio, { plan: "audio" }),
380
+ plannedMediaNeed(mediaPipelineProducers.renderAudio, "audio", mediaPipelineCapabilities.renderAudio, {}, presentAudioRender),
381
+ plannedMediaNeed(mediaPipelineProducers.renderAudioRange, "audio", mediaPipelineCapabilities.renderAudio, {}, presentAudioRender),
368
382
  plannedMediaNeed(mediaPipelineProducers.mux, "media", mediaPipelineCapabilities.mux, { visual: "video", audio: "audio" }),
369
383
  ],
370
384
  } satisfies ComponentPackage;
@@ -3,7 +3,7 @@ import { mediaDependency, mediaTypes } from "@hypit/media";
3
3
  import { programSpaceDependency, programSpaceTypes } from "@hypit/program-space";
4
4
  import { svsModuleRef, svsRecipeType } from "@hypit/svs";
5
5
  import { speechDependency, speechTypes } from "@hypit/speech";
6
- import { compositionDependency, compositionTypes } from "@hypit/composition";
6
+ import { compositionDependency, compositionTypes, audioSampleSpanSchema, audioGainEnvelopeSchema } from "@hypit/composition";
7
7
  import { artifactTypes } from "@hypit/artifact";
8
8
  import type {
9
9
  CapabilityRef,
@@ -237,6 +237,8 @@ export const audioProgramPlanSchema: ValueSchema = {
237
237
  gain: { schema: { kind: "number", minimum: 0, maximum: 64 } },
238
238
  fadeInSamples: { schema: integer },
239
239
  fadeOutSamples: { schema: integer },
240
+ gainEnvelope: { schema: audioGainEnvelopeSchema, optional: true },
241
+ audibility: { schema: { kind: "array", items: audioSampleSpanSchema }, optional: true },
240
242
  },
241
243
  } } },
242
244
  mix: { schema: {
@@ -1,3 +1,4 @@
1
+ import type { AudioPresentation } from "@hypit/composition";
1
2
  import type { BlobRef } from "@hypit/protocol";
2
3
  import type { MediaFrameRange, MediaInspection, MediaRational, MediaStreamSelection, RenderedVisual, TimelineAudio } from "@hypit/media";
3
4
 
@@ -134,7 +135,7 @@ export type ProjectSpeechEvidenceAudioNeed = {
134
135
  readonly evidenceSampleFrames: number;
135
136
  };
136
137
 
137
- export type AudioProgramClip = {
138
+ export type AudioProgramClip = AudioPresentation & {
138
139
  readonly id: string;
139
140
  readonly artifact: BlobRef;
140
141
  readonly targetStartSample: number;
@@ -1,61 +1,28 @@
1
1
  # `@hypit/media-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
- `Performance` still needs `semantic`, which supplies its ordered prepared footage.
6
+ [Performance](../performance/README.md) separately obtains existing footage and source positions from Timeline.
7
7
 
8
8
  Place images, prepared video or compositable surfaces over the semantic timeline. B-roll is a common
9
- use: the picture can illustrate a phrase while the A-roll's speech continues. Performance presents the semantic material as a full picture, inset or cutout.
9
+ use: the picture can illustrate a phrase while the A-roll's speech continues.
10
10
  Media Items own independently timed pictures;
11
11
  a Sequence owns one visual slot whose Members replace each other through Handoffs.
12
12
 
13
- The Markup Track takes `canvas` and a time source (`semantic` or `space`). Its Surface projects
13
+ The Markup Track takes `canvas` and `timeline`. Its Surface projects
14
14
  authored Selections, Moments, Segments or clock expressions into Windows and Instants. The component
15
- consumes those projected times with Frames, media and appearance; its Fragment receives ProgramSpace.
15
+ consumes those projected times with Frames, media and appearance; its Fragment receives the same Timeline.
16
16
 
17
17
  Moving media enters after [normalization](../media-pipeline/README.md), with the intended streams and
18
18
  frame clock already selected. Still images use their actual intrinsic Extent. Placement, fitting,
19
19
  sampling and motion remain separate authored choices.
20
20
 
21
- ## Display a semantic performance
21
+ ## Present existing Timeline footage
22
22
 
23
- ```svml
24
- <media:Track id="performance" semantic={speech.semantic} canvas={canvas}>
25
- <media:Performance during="program" frame={layout.full}
26
- appearance={look.performance}/>
27
- </media:Track>
28
- ```
29
-
30
- `Performance` displays the prepared material in its enclosing Track's `semantic` input. `during`
31
- selects the whole program, a Segment or a Selection; the other Window forms work as usual. One
32
- Performance can span any number of Takes. Each plays at its original program position: if a Take
33
- begins at program second 5, a Window from seconds 7 to 10 shows source seconds 2 to 5. An audio-only
34
- interval contributes no picture. The presentation shares one frame, appearance and lifecycle across
35
- Take boundaries.
36
-
37
- Its appearance Recipe needs `stack-order` and can set fit, crop anchors, opacity, filters, clipping,
38
- padding, border, shadow and frame paint. `motion` moves the framed presentation, and `Sampling`
39
- children transform the fitted picture over the complete selected Window, without restarting at
40
- Take boundaries. `Sound` children attach prepared effects to its entrance or exit. Its original
41
- sound is independently available as `speech.audio` for Film. Use an Item with direct `media` for
42
- independent playback or source trim; Performance preserves the semantic assembly's source timing.
43
-
44
- ```svml
45
- <media:Performance during={story.segment.explanation} frame={layout.full}
46
- appearance={look.performance}>
47
- <media:Sampling at="start" zoom="1"/>
48
- <media:Sampling at="end" zoom="1.08"/>
49
- </media:Performance>
50
- ```
51
-
52
- This excerpt belongs inside the same Media Track. Its selected passage determines the appearance
53
- interval, while the two Sampling keys direct a gradual push-in inside the unchanged Frame.
54
-
55
- For a fixed card, full picture, circle or cutout this is ordinary Media presentation. If video and
56
- graphics must resize, mask or move together, write a project component that owns that relationship.
57
- `projectSemanticMedia` supplies the same material spans to its drawing function. The component can
58
- use a browser program from `@hypit/hypit/hyperframes` while Caption and independent overlays remain peers.
23
+ [Performance](../performance/README.md) obtains existing footage from Timeline and applies broad
24
+ and local Use rules. Use Media Items here for independently supplied assets and playback choices.
25
+ Both reuse the same geometry and fitting capabilities.
59
26
 
60
27
  ## Place the frame, then fit its contents
61
28
 
@@ -115,10 +82,10 @@ a deliberate pan or rotation may reveal the backing or lower layers.
115
82
  ## Author Items and replacement Sequences
116
83
 
117
84
  These excerpts assume the imports, named assets, normalized media, Frames, Extents, Script,
118
- SemanticTrack and Recipes are already declared:
85
+ Timeline and Recipes are already declared:
119
86
 
120
87
  ```svml
121
- <media-track:Track id="coverage" semantic={speech.semantic} canvas={vertical}>
88
+ <media-track:Track id="coverage" timeline={speech.timeline} canvas={vertical}>
122
89
  <media-track:Item image={photo} extent={photo-extent} frame={full-frame}
123
90
  during={story.selection.example} appearance={recipes.media.still}/>
124
91
  <media-track:Item media={clip-media.media} frame={full-frame}
@@ -132,7 +99,7 @@ Appearance owns stack order, fit, clipping and source sampling; a `motion` Recip
132
99
  movement. `Sampling` children can move the sampled content inside the Frame independently.
133
100
 
134
101
  ```svml
135
- <media-track:Track id="cards" semantic={speech.semantic} canvas={vertical}>
102
+ <media-track:Track id="cards" timeline={speech.timeline} canvas={vertical}>
136
103
  <media-track:Sequence id="steps" frame={card-frame} appearance={recipes.media.card}
137
104
  until={story.selection.demo} until-boundary="end">
138
105
  <media-track:Member id="one" image={first} extent={card-extent}
@@ -177,7 +144,7 @@ separately controls which source frames it occupies there. `playback` defaults t
177
144
  `trim-start` and `trim-end` are a pair of integer source-frame boundaries, with an exclusive end.
178
145
  Omit both to use the full source. The playback rules apply to the trimmed range when present.
179
146
  For `stretch`, the source-frame advance is `sourceLength / targetLength`. For native playback, moving
180
- media has already been normalized to ProgramSpace's frame rate, so one program frame advances one
147
+ media has already been normalized to Timeline's frame rate, so one program frame advances one
181
148
  source frame. These are source sampling choices; they do not move a Selection's semantic boundaries.
182
149
 
183
150
  A two-second Item can use the beginning of a four-second generated clip without requesting a
@@ -19,7 +19,7 @@
19
19
  "@hypit/narrative": "workspace:*",
20
20
  "@hypit/program-space": "workspace:*",
21
21
  "@hypit/protocol": "workspace:*",
22
- "@hypit/semantic-track": "workspace:*",
22
+ "@hypit/timeline": "workspace:*",
23
23
  "@hypit/spatial": "workspace:*",
24
24
  "@hypit/svs": "workspace:*",
25
25
  "@hypit/markup": "workspace:*",
@@ -6,7 +6,7 @@
6
6
  <import from="@hypit/script@1"/>
7
7
  <import as="media" from="@hypit/media@1"/>
8
8
  <import as="pipeline" from="@hypit/media-pipeline@1"/>
9
- <import as="speech" from="@hypit/speech-track@1"/>
9
+ <import as="time" from="@hypit/timeline-author@1"/>
10
10
  <import as="whisperx" from="@hypit/whisperx@1"/>
11
11
  <import as="media-track" from="@hypit/media-track@1"/>
12
12
  <import as="space" from="@hypit/spatial@1"/>
@@ -32,16 +32,16 @@
32
32
  video="primary-moving" audio="none" span-authority="video"/>
33
33
  <whisperx:SemanticTake id="showcase-time" narrative={story}
34
34
  segment={story.segment.empty} media={duration-media.media}/>
35
- <speech:Track id="speech"><speech:Take source={showcase-time.take}/></speech:Track>
35
+ <time:Timeline id="speech" clock={clock}><time:Take source={showcase-time.take}/></time:Timeline>
36
36
 
37
- <media-track:Track id="showcase" semantic={speech.semantic} canvas={vertical}>
37
+ <media-track:Track id="showcase" timeline={speech.timeline} canvas={vertical}>
38
38
  <media-track:Item id="rounded-card" image={picture-a} extent={picture-size} during="program"
39
39
  frame={card-a} appearance={recipes.media.card} motion={recipes.motion.card}/>
40
40
  <media-track:Item id="flush-card" image={picture-b} extent={picture-size} during="program"
41
41
  frame={card-b} appearance={recipes.media.wide} motion={recipes.motion.card}/>
42
42
  </media-track:Track>
43
- <film:Film id="main" canvas={vertical} semantic={speech.semantic} appearance={recipes.film.vertical}>
43
+ <film:Film id="main" canvas={vertical} timeline={speech.timeline} appearance={recipes.film.vertical}>
44
44
  <film:Track source={showcase.visual}/>
45
45
  </film:Film>
46
- <render:Video id="final" composition={main.composition} semantic={speech.semantic}/>
46
+ <render:Video id="final" composition={main.composition} timeline={speech.timeline}/>
47
47
  </svml>
@@ -182,12 +182,18 @@ export function decodeMediaSampleSpec(
182
182
  }
183
183
 
184
184
  /** Decode visual-only sample styling without choosing playback or source trim. */
185
+ /** Public authored defaults shared by decoding and optional editor fields. */
186
+ export const mediaAppearanceDefaults = {
187
+ opacity: 1, blur: 0, brightness: 1, contrast: 1, saturation: 1,
188
+ clip: "frame", radius: 0,
189
+ } as const;
190
+
185
191
  export function decodeMediaSampleAppearance(recipe: SvsRecipe): MediaSampleAppearance {
186
192
  return {
187
- opacity: number(recipe, "opacity", 1),
193
+ opacity: number(recipe, "opacity", mediaAppearanceDefaults.opacity),
188
194
  filter: {
189
- blurPx: number(recipe, "blur", 0), brightness: number(recipe, "brightness", 1),
190
- contrast: number(recipe, "contrast", 1), saturation: number(recipe, "saturation", 1),
195
+ blurPx: number(recipe, "blur", mediaAppearanceDefaults.blur), brightness: number(recipe, "brightness", mediaAppearanceDefaults.brightness),
196
+ contrast: number(recipe, "contrast", mediaAppearanceDefaults.contrast), saturation: number(recipe, "saturation", mediaAppearanceDefaults.saturation),
191
197
  },
192
198
  };
193
199
  }
@@ -236,10 +242,10 @@ export function decodeMediaMotion(recipe: SvsRecipe | undefined): MediaLifecycle
236
242
  }
237
243
 
238
244
  export function decodeMediaPresentation(recipe: SvsRecipe): MediaFramePresentation {
239
- const clip = oneOf(recipe, "clip", ["none", "frame", "rounded"] as const, "frame");
245
+ const clip = oneOf(recipe, "clip", ["none", "frame", "rounded"] as const, mediaAppearanceDefaults.clip);
240
246
  const borderWidth = number(recipe, "border-width", 0);
241
247
  return {
242
- clip: clip === "rounded" ? { kind: "rounded", radiusPx: number(recipe, "radius", 0) } : { kind: clip },
248
+ clip: clip === "rounded" ? { kind: "rounded", radiusPx: number(recipe, "radius", mediaAppearanceDefaults.radius) } : { kind: clip },
243
249
  padding: padding(recipe),
244
250
  ...(borderWidth === 0 ? {} : { border: {
245
251
  widthPx: borderWidth,
@@ -278,7 +284,7 @@ export function decodeMediaFramePaint(recipe: SvsRecipe, id: string): MediaPaint
278
284
  export function decodeMediaPaintSpec(recipe: SvsRecipe, id: string): MediaPaintLayerSpec {
279
285
  assertKeys(recipe, ["paint", "opacity"]);
280
286
  return sealMediaPaintLayerSpec({
281
- id, paint: paint(recipe), opacity: number(recipe, "opacity", 1),
287
+ id, paint: paint(recipe), opacity: number(recipe, "opacity", mediaAppearanceDefaults.opacity),
282
288
  });
283
289
  }
284
290
 
@@ -1,10 +1,8 @@
1
- import { appendMediaPerformance } from "./performance.js";
2
- import type { SemanticTrack } from "@hypit/semantic-track";
1
+ import type { Timeline } from "@hypit/timeline";
3
2
  import type { ComponentPackage, ProducerHandlerContext } from "@hypit/component-kit";
4
3
  import type { CompositableSurfaceRef, SynchronizedMedia } from "@hypit/media";
5
4
  import { canonicalize } from "@hypit/protocol";
6
5
  import type { BlobRef, StoredValue } from "@hypit/protocol";
7
- import type { ProgramSpace } from "@hypit/program-space";
8
6
  import type { CanvasSpace, ContentFit, IntrinsicExtent, SpatialFrame, SpatialPath } from "@hypit/spatial";
9
7
  import type { TemporalInstant, TemporalWindow } from "@hypit/temporal";
10
8
 
@@ -54,7 +52,7 @@ function itemInputs(inputs: ProducerHandlerContext["inputs"]) {
54
52
  return {
55
53
  set: inline<MediaTrackSet>(inputs.set?.value, "MediaTrackSet"),
56
54
  header: inline<MediaTrackHeader>(inputs.header?.value, "MediaTrackHeader"),
57
- space: inline<ProgramSpace>(inputs.space?.value, "ProgramSpace"),
55
+ timeline: inline<Timeline>(inputs.timeline?.value, "Timeline"),
58
56
  canvas: inline<CanvasSpace>(inputs.canvas?.value, "CanvasSpace"),
59
57
  layers: inline<MediaLayerSet>(inputs.layers?.value, "MediaLayerSet"),
60
58
  frame: inline<SpatialFrame>(inputs.frame?.value, "SpatialFrame"),
@@ -67,7 +65,7 @@ function itemInputs(inputs: ProducerHandlerContext["inputs"]) {
67
65
  function memberInputs(inputs: ProducerHandlerContext["inputs"]) {
68
66
  return {
69
67
  members: inline<MediaSequenceMemberSet>(inputs.members?.value, "MediaSequenceMemberSet"),
70
- space: inline<ProgramSpace>(inputs.space?.value, "ProgramSpace"),
68
+ timeline: inline<Timeline>(inputs.timeline?.value, "Timeline"),
71
69
  layers: inline<MediaLayerSet>(inputs.layers?.value, "MediaLayerSet"),
72
70
  spec: inline<MediaSequenceMemberSpec>(inputs.spec?.value, "MediaSequenceMemberSpec"),
73
71
  activation: inline<TemporalInstant>(inputs.activation?.value, "TemporalInstant"),
@@ -78,7 +76,7 @@ function sequenceInputs(inputs: ProducerHandlerContext["inputs"]) {
78
76
  return {
79
77
  set: inline<MediaTrackSet>(inputs.set?.value, "MediaTrackSet"),
80
78
  header: inline<MediaTrackHeader>(inputs.header?.value, "MediaTrackHeader"),
81
- space: inline<ProgramSpace>(inputs.space?.value, "ProgramSpace"),
79
+ timeline: inline<Timeline>(inputs.timeline?.value, "Timeline"),
82
80
  canvas: inline<CanvasSpace>(inputs.canvas?.value, "CanvasSpace"),
83
81
  members: inline<MediaSequenceMemberSet>(inputs.members?.value, "MediaSequenceMemberSet"),
84
82
  frame: inline<SpatialFrame>(inputs.frame?.value, "SpatialFrame"),
@@ -90,10 +88,6 @@ function sequenceInputs(inputs: ProducerHandlerContext["inputs"]) {
90
88
 
91
89
  export const mediaTrackComponent = {
92
90
  producers: [
93
- { producer: mediaTrackProducers.appendPerformance, handler: ({ inputs }) => ({ outputs: { set: output(appendMediaPerformance(
94
- itemInputs(inputs), inline<SemanticTrack>(inputs.semantic?.value, "SemanticTrack"),
95
- inline<ContentFit>(inputs.fit?.value, "ContentFit"), inline<MediaSampleLayerSpec>(inputs.sampleSpec?.value, "MediaSampleLayerSpec"),
96
- )) }, needs: {} }) },
97
91
  { producer: mediaTrackProducers.createLayers, handler: () => ({ outputs: { layers: output(createMediaLayerSet()) }, needs: {} }) },
98
92
  { producer: mediaTrackProducers.appendPaintLayer, handler: ({ inputs }) => ({ outputs: { layers: output(appendMediaPaintLayer(
99
93
  inline<MediaLayerSet>(inputs.layers?.value, "MediaLayerSet"),
@@ -121,7 +115,7 @@ export const mediaTrackComponent = {
121
115
  { producer: mediaTrackProducers.createSet, handler: () => ({ outputs: { set: output(createMediaTrackSet()) }, needs: {} }) },
122
116
  { producer: mediaTrackProducers.appendItem, handler: ({ inputs }) => {
123
117
  const value = itemInputs(inputs);
124
- return { outputs: { set: output(appendMediaItem(value.set, value.header, value.space, value.canvas, value.layers, value.frame, value.spec, value.sounds, value.window)) }, needs: {} };
118
+ return { outputs: { set: output(appendMediaItem(value.set, value.header, value.timeline, value.canvas, value.layers, value.frame, value.spec, value.sounds, value.window)) }, needs: {} };
125
119
  } },
126
120
  { producer: mediaTrackProducers.bindItemClipPath, handler: ({ inputs }) => ({ outputs: { spec: output(bindMediaItemClipPath(
127
121
  inline<MediaItemSpec>(inputs.spec?.value, "MediaItemSpec"),
@@ -135,24 +129,24 @@ export const mediaTrackComponent = {
135
129
  { producer: mediaTrackProducers.appendMember, handler: ({ inputs }) => {
136
130
  const value = memberInputs(inputs);
137
131
  return { outputs: { members: output(appendMediaSequenceMember(
138
- value.members, value.space, value.layers, value.spec, value.activation,
132
+ value.members, value.timeline, value.layers, value.spec, value.activation,
139
133
  )) }, needs: {} };
140
134
  } },
141
135
  { producer: mediaTrackProducers.appendSequence, handler: ({ inputs }) => {
142
136
  const value = sequenceInputs(inputs);
143
137
  return { outputs: { set: output(appendMediaSequence(
144
- value.set, value.header, value.space, value.canvas, value.members, value.frame, value.spec, value.sounds, value.terminal,
138
+ value.set, value.header, value.timeline, value.canvas, value.members, value.frame, value.spec, value.sounds, value.terminal,
145
139
  )) }, needs: {} };
146
140
  } },
147
141
  { producer: mediaTrackProducers.finalize, handler: ({ inputs }) => ({ outputs: { program: output(finalizeMediaTrack(
148
142
  inline<MediaTrackSet>(inputs.set?.value, "MediaTrackSet"), inline<MediaTrackHeader>(inputs.header?.value, "MediaTrackHeader"),
149
- inline<ProgramSpace>(inputs.space?.value, "ProgramSpace"),
143
+ inline<Timeline>(inputs.timeline?.value, "Timeline"),
150
144
  )) }, needs: {} }) },
151
145
  { producer: mediaTrackProducers.projectVisual, handler: ({ inputs }) => ({ outputs: { track: output(projectMediaVisualTrack(
152
- inline<ProgramSpace>(inputs.space?.value, "ProgramSpace"), inline<MediaTrackProgram>(inputs.program?.value, "MediaTrackProgram"),
146
+ inline<Timeline>(inputs.timeline?.value, "Timeline"), inline<MediaTrackProgram>(inputs.program?.value, "MediaTrackProgram"),
153
147
  )) }, needs: {} }) },
154
148
  { producer: mediaTrackProducers.projectAudio, handler: ({ inputs }) => ({ outputs: { track: output(projectMediaAudioTrack(
155
- inline<ProgramSpace>(inputs.space?.value, "ProgramSpace"), inline<MediaTrackProgram>(inputs.program?.value, "MediaTrackProgram"),
149
+ inline<Timeline>(inputs.timeline?.value, "Timeline"), inline<MediaTrackProgram>(inputs.program?.value, "MediaTrackProgram"),
156
150
  )) }, needs: {} }) },
157
151
  ],
158
152
  validators: [{