@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
@@ -8,16 +8,23 @@ With prepared Takes, a Canvas and an exact FontStack already available:
8
8
  ```svml
9
9
  <import as="explainer" from="@example/responsive-explainer@1"/>
10
10
 
11
- <speech:Track id="speech">
12
- <speech:Take source={opening.take}/>
13
- <speech:Take source={explanation.take}/>
14
- </speech:Track>
15
- <explainer:Scene id="scene" semantic={speech.semantic} canvas={canvas} font={font}
11
+ <time:Clock id="clock" frame-rate="30"/>
12
+ <time:Timeline id="speech" clock={clock}>
13
+ <time:Take source={opening.take}/>
14
+ <time:Take source={explanation.take}/>
15
+ </time:Timeline>
16
+ <explainer:Scene id="scene" timeline={speech.timeline} canvas={canvas} font={font}
16
17
  during="program" reveal={story.moment.demonstrate} title="Make room for meaning"
17
18
  transition-frames="24" stack-order="0"/>
18
- <film:Film id="main" canvas={canvas} semantic={speech.semantic} appearance={look.film}>
19
+ <import as="sound" from="@hypit/sound@1"/>
20
+ <sound:Style id="voice-style"/>
21
+ <sound:Track id="voice" timeline={speech.timeline}>
22
+ <sound:Use style={voice-style}/>
23
+ </sound:Track>
24
+
25
+ <film:Film id="main" canvas={canvas} timeline={speech.timeline} appearance={look.film}>
19
26
  <film:Track source={scene.visual}/>
20
- <film:Track source={speech.audio}/>
27
+ <film:Track source={voice.audio}/>
21
28
  <film:Track source={captions.track}/>
22
29
  </film:Film>
23
30
  ```
@@ -28,11 +35,11 @@ the Script or using another delivery changes the projected frame while retaining
28
35
  `transition-frames` is the duration of that change, separate from the scene's lifetime. `stack-order`
29
36
  places this scene among other contributions. The caller supplies its title and exact fonts.
30
37
 
31
- `projectSemanticMedia` selects all intersecting prepared Takes. Each video's target interval is
38
+ `projectTimelineMedia` selects all intersecting prepared Takes. Each video's target interval is
32
39
  Present-local and its source offset is preserved. The parent viewport changes size and position;
33
40
  playback is never restarted by the layout change. The component owns the diagram and the viewport,
34
41
  so its internal overlap, rounded clipping and backdrop blur are ordinary HTML/CSS relationships.
35
- The original audio stays independently selectable as `speech.audio`.
42
+ Sound independently presents the existing audio as `voice.audio`.
36
43
 
37
44
  `src/activation.ts` declares the Module, Surface, semantic projections and Producer Fragment.
38
45
  `src/render.ts` emits a browser program with HTML slots for typed video and text children. Its render
@@ -5,8 +5,8 @@ import { compositionTypes } from "@hypit/hypit/composition";
5
5
  import { mediaTypes } from "@hypit/hypit/media";
6
6
  import type { FontStackRef } from "@hypit/hypit/media";
7
7
  import { narrativeTypes } from "@hypit/hypit/narrative";
8
- import { semanticTrackTypes } from "@hypit/hypit/semantic-track";
9
- import type { SemanticTrack } from "@hypit/hypit/semantic-track";
8
+ import { timelineTypes } from "@hypit/hypit/timeline";
9
+ import type { Timeline } from "@hypit/hypit/timeline";
10
10
  import { spatialTypes } from "@hypit/hypit/spatial";
11
11
  import type { CanvasSpace } from "@hypit/hypit/spatial";
12
12
  import { temporalTypes } from "@hypit/hypit/temporal";
@@ -20,12 +20,12 @@ const module = { name: "@example/responsive-explainer", version: "1" } as const;
20
20
  const optionsType = { module, name: "ExplainerOptions" };
21
21
  const producer = { module, name: "compose" };
22
22
  const inputs = [
23
- { name: "semantic", type: semanticTrackTypes.track }, { name: "canvas", type: spatialTypes.canvas },
23
+ { name: "timeline", type: timelineTypes.track }, { name: "canvas", type: spatialTypes.canvas },
24
24
  { name: "window", type: temporalTypes.window }, { name: "reveal", type: temporalTypes.instant },
25
25
  { name: "font", type: mediaTypes.fontStack }, { name: "options", type: optionsType },
26
26
  ];
27
27
  export const manifest: ModuleManifest = { format: "hypit.module@1", ...module,
28
- dependencies: [compositionTypes.visualTrack, mediaTypes.fontStack, semanticTrackTypes.track,
28
+ dependencies: [compositionTypes.visualTrack, mediaTypes.fontStack, timelineTypes.track,
29
29
  spatialTypes.canvas, temporalTypes.window].map(type => ({ module: type.module })),
30
30
  types: [{ name: optionsType.name }], capabilities: [],
31
31
  producers: [{ name: producer.name, inputs, outputs: [{ name: "visual", type: compositionTypes.visualTrack }], needs: [] }],
@@ -40,12 +40,12 @@ const inline = <T>(record: { value: { kind: string; value?: unknown } } | undefi
40
40
  return record.value.value as T;
41
41
  };
42
42
  const component: ComponentPackage = { producers: [{ producer, handler: ({ inputs }) => ({ needs: {}, outputs: {
43
- visual: { kind: "inline", value: canonicalize(renderExplainer(inline<SemanticTrack>(inputs.semantic),
43
+ visual: { kind: "inline", value: canonicalize(renderExplainer(inline<Timeline>(inputs.timeline),
44
44
  inline<CanvasSpace>(inputs.canvas), inline<TemporalWindow>(inputs.window), inline<TemporalInstant>(inputs.reveal),
45
45
  inline<FontStackRef>(inputs.font).faces, inline<ExplainerOptions>(inputs.options))) },
46
46
  } }) }] };
47
47
  export const decodeSurface: StructuredSurfaceHandler = ({ element, resolveReference }) => {
48
- assertAttributes(element, ["id", "semantic", "canvas", "font", "reveal", "title", "transition-frames", "stack-order", ...temporalWindowAttributeNames]);
48
+ assertAttributes(element, ["id", "timeline", "canvas", "font", "reveal", "title", "transition-frames", "stack-order", ...temporalWindowAttributeNames]);
49
49
  assertEmptyElement(element);
50
50
  const id = textAttribute(element, "id");
51
51
  const reference = (name: string, type: TypeRef): SurfaceResolvedReference => {
@@ -55,19 +55,19 @@ export const decodeSurface: StructuredSurfaceHandler = ({ element, resolveRefere
55
55
  if (value === undefined || !sameType(type, value.type)) throw new Error(`${name} has the wrong type.`);
56
56
  return value;
57
57
  };
58
- const semantic = reference("semantic", semanticTrackTypes.track);
59
- const window = createTemporalWindowProjection({ id: `${id}.window`, element, semantic, resolveReference });
58
+ const timeline = reference("timeline", timelineTypes.track);
59
+ const window = createTemporalWindowProjection({ id: `${id}.window`, element, timeline, resolveReference });
60
60
  // Reveal has its own Moment; the outer Window independently controls this scene's lifetime.
61
61
  reference("reveal", narrativeTypes.moment);
62
62
  const reveal = createTemporalInstantProjection({ id: `${id}.reveal`,
63
- element: { ...element, attributes: { at: element.attributes.reveal! } }, semantic, resolveReference });
63
+ element: { ...element, attributes: { at: element.attributes.reveal! } }, timeline, resolveReference });
64
64
  const options: ExplainerOptions = { id, title: textAttribute(element, "title"),
65
65
  transitionFrames: Number(textAttribute(element, "transition-frames")), stackingOrder: Number(textAttribute(element, "stack-order")) };
66
66
  return { records: [...window.records, ...reveal.records, { id: `${id}.options`, type: optionsType,
67
67
  value: { kind: "inline", value: canonicalize(options) }, range: element.range }],
68
68
  fragments: [...window.fragments, ...reveal.fragments, fragment],
69
69
  components: [...window.components, ...reveal.components, { id, fragment: fragment.id,
70
- inputs: { semantic: semantic.ref, canvas: reference("canvas", spatialTypes.canvas).ref,
70
+ inputs: { timeline: timeline.ref, canvas: reference("canvas", spatialTypes.canvas).ref,
71
71
  font: reference("font", mediaTypes.fontStack).ref, window: window.ref, reveal: reveal.ref,
72
72
  options: { kind: "record", id: `${id}.options` } }, outputs: { visual: `${id}.visual` }, range: element.range }],
73
73
  exports: [`${id}.visual`] };
@@ -77,12 +77,12 @@ const declaration = { name: "scene", tag: "Scene", mode: "structured" as const,
77
77
  vocabulary: { summary: "A continuously playing performance makes room for a diagram on a semantic Moment.",
78
78
  attributes: [
79
79
  ...["id", "title", "transition-frames", "stack-order"].map(name => ({ name, kind: "literal" as const, required: true, summary: name })),
80
- ...[{ name: "semantic", type: semanticTrackTypes.track }, { name: "canvas", type: spatialTypes.canvas },
80
+ ...[{ name: "timeline", type: timelineTypes.track }, { name: "canvas", type: spatialTypes.canvas },
81
81
  { name: "font", type: mediaTypes.fontStack }, { name: "reveal", type: narrativeTypes.moment }]
82
82
  .map(({ name, type }) => ({ name, kind: "reference" as const, required: true, accepts: [type], summary: name })),
83
83
  ...temporalWindowAttributeVocabulary,
84
84
  ], ports: [{ name: "visual", type: compositionTypes.visualTrack, summary: "The coordinated scene." }],
85
- example: '<explainer:Scene id="scene" semantic={speech.semantic} canvas={canvas} font={font} during="program" reveal={story.moment.reveal} title="How it works" transition-frames="18" stack-order="0"/>',
85
+ example: '<explainer:Scene id="scene" timeline={speech.timeline} canvas={canvas} font={font} during="program" reveal={story.moment.reveal} title="How it works" transition-frames="18" stack-order="0"/>',
86
86
  },
87
87
  };
88
88
  export const hypitPackage = { format: "hypit.node-package@1" as const, modules: [{ manifest }], components: [component],
@@ -2,22 +2,22 @@ import { sealVisualTrack } from "@hypit/hypit/composition";
2
2
  import type { VisualElement } from "@hypit/hypit/composition";
3
3
  import { browserProgram } from "@hypit/hypit/hyperframes";
4
4
  import type { FontArtifactRef } from "@hypit/hypit/media";
5
- import { projectSemanticMedia, projectSemanticProgramSpace } from "@hypit/hypit/semantic-track";
6
- import type { SemanticTrack } from "@hypit/hypit/semantic-track";
5
+ import { projectTimelineMedia, projectTimelineSpace } from "@hypit/hypit/timeline";
6
+ import type { Timeline } from "@hypit/hypit/timeline";
7
7
  import type { CanvasSpace } from "@hypit/hypit/spatial";
8
8
  import type { TemporalInstant, TemporalWindow } from "@hypit/hypit/temporal";
9
9
 
10
10
  export type ExplainerOptions = { id: string; title: string; transitionFrames: number; stackingOrder: number };
11
11
 
12
12
  /** One scene owns the moving performance viewport and the diagram it makes room for. */
13
- export function renderExplainer(semantic: SemanticTrack, canvas: CanvasSpace, window: TemporalWindow,
13
+ export function renderExplainer(semantic: Timeline, canvas: CanvasSpace, window: TemporalWindow,
14
14
  reveal: TemporalInstant, fonts: readonly FontArtifactRef[], options: ExplainerOptions) {
15
- const space = projectSemanticProgramSpace(semantic);
15
+ const space = projectTimelineSpace(semantic);
16
16
  if (window.start.source.spaceId !== space.id || reveal.source.spaceId !== space.id)
17
17
  throw new Error("Explainer timing must belong to its semantic performance.");
18
18
  if (!Number.isSafeInteger(options.transitionFrames) || options.transitionFrames < 1)
19
19
  throw new Error("Explainer transitionFrames must be a positive integer.");
20
- const clips = projectSemanticMedia(semantic, window.span).filter(clip => clip.media.visual !== undefined);
20
+ const clips = projectTimelineMedia(semantic, window.span).filter(clip => clip.media.visual !== undefined);
21
21
  const videos: VisualElement[] = clips.map((clip, i) => ({
22
22
  id: `take-${i}`, parent: "scene", kind: "video", order: i + 1,
23
23
  artifact: clip.media.visual!.artifact, muted: true,
@@ -0,0 +1,36 @@
1
+ # Project sound Style: explicit crossfade
2
+
3
+ This ordinary project package demonstrates `soundStyle(fragment, bindings)`. It publishes one
4
+ `Crossfade` Style with explicit outgoing and incoming Segment inputs. It uses public
5
+ `@hypit/hypit/*` imports and returns ordinary AudioTrack data. Copy it into a video's `packages/`,
6
+ select the installed Hypit version as its development dependency, build it and declare it in the
7
+ project's ordinary package configuration.
8
+
9
+ ```svml
10
+ <import as="sound" from="@hypit/sound@1"/>
11
+ <import as="mix" from="@example/sound-styles@1"/>
12
+ <sound:Style id="normal"/>
13
+ <mix:Crossfade id="handoff"
14
+ outgoing={story.segment.first} incoming={story.segment.second}/>
15
+ <sound:Track id="voice" timeline={program.timeline}>
16
+ <sound:Use style={normal}/>
17
+ <sound:Use style={handoff}
18
+ start-source={story.segment.second} start="segment.start"
19
+ end-source={story.segment.first} end="segment.end"/>
20
+ </sound:Track>
21
+ ```
22
+
23
+ The Window describes an actual overlap, even though its endpoints are reversed in Script order.
24
+ The two Style inputs declare roles; temporal endpoints do not infer them. Outgoing gain decreases
25
+ from 1 to 0 and incoming gain increases from 0 to 1 across that Window. Playback stays at each
26
+ Take's existing source position. A known source with no audio contributes nothing; an unknown source
27
+ is an error. Both roles must name distinct Segments.
28
+
29
+ Linear crossfade is this family's chosen behavior, not a universal acoustic rule. A different
30
+ project family can use another envelope or more sources without changing Timeline or the renderer.
31
+ For intentional simultaneous speech, a family can return both explicit `sourceSound` results at
32
+ unity gain. Independently included Sound Tracks can also coexist.
33
+
34
+ The implementation is in [render.ts](src/render.ts); [activation.ts](src/activation.ts) declares the
35
+ Surface, typed inputs, fragment and Producer. Build with `pnpm --filter @example/sound-styles build`
36
+ inside this repository after public declarations are available.
@@ -0,0 +1,25 @@
1
+ {
2
+ "name": "@example/sound-styles",
3
+ "version": "0.0.0-dev",
4
+ "private": true,
5
+ "type": "module",
6
+ "hypit": {
7
+ "activation": "./dist/activation.js"
8
+ },
9
+ "exports": {
10
+ ".": "./dist/render.js"
11
+ },
12
+ "files": [
13
+ "dist",
14
+ "README.md"
15
+ ],
16
+ "scripts": {
17
+ "build": "tsc -p tsconfig.json",
18
+ "prepack": "npm run build"
19
+ },
20
+ "devDependencies": {
21
+ "@hypit/hypit": "workspace:*",
22
+ "typescript": "5.9.3",
23
+ "@types/node": "24.10.1"
24
+ }
25
+ }
@@ -0,0 +1,53 @@
1
+ import { assertAttributes, assertEmptyElement, canonicalize, createMarkupSurfaceHostFacet, sameType, sealGraphFragment, textAttribute } from "@hypit/hypit/author-kit";
2
+ import type { ComponentPackage, ModuleManifest, StructuredSurfaceHandler, SurfaceResolvedReference } from "@hypit/hypit/author-kit";
3
+ import { compositionTypes } from "@hypit/hypit/composition";
4
+ import { soundStyle, soundTypes, soundModuleRef } from "@hypit/hypit/sound";
5
+ import { timelineTypes } from "@hypit/hypit/timeline";
6
+ import type { Timeline } from "@hypit/hypit/timeline";
7
+ import { temporalTypes } from "@hypit/hypit/temporal";
8
+ import type { TemporalWindow } from "@hypit/hypit/temporal";
9
+ import { narrativeTypes } from "@hypit/hypit/narrative";
10
+ import type { NarrativeExcerpt } from "@hypit/hypit/narrative";
11
+ import { crossfadeSound } from "./render.js";
12
+
13
+ const module = { name: "@example/sound-styles", version: "1" } as const;
14
+ const common = [{ name: "timeline", type: timelineTypes.track }, { name: "window", type: temporalTypes.window }];
15
+ const mixInputs = [...common, { name: "outgoing", type: narrativeTypes.excerpt }, { name: "incoming", type: narrativeTypes.excerpt }];
16
+ const families = [{ name: "crossfade", tag: "Crossfade", ports: mixInputs }];
17
+ export const manifest: ModuleManifest = { format: "hypit.module@1", ...module,
18
+ dependencies: [soundModuleRef, compositionTypes.audioTrack.module, timelineTypes.track.module, temporalTypes.window.module, narrativeTypes.excerpt.module].map(module => ({ module })),
19
+ types: [], capabilities: [], producers: families.map(family => ({ name: family.name, inputs: family.ports, outputs: [{ name: "audio", type: compositionTypes.audioTrack }], needs: [] })) };
20
+ const fragments = families.map(family => sealGraphFragment({ inputs: family.ports,
21
+ operations: [{ id: "render", producer: { module, name: family.name }, inputs: Object.fromEntries(family.ports.map(port => [port.name, { kind: "fragment-input" as const, name: port.name }])), result: { kind: "output", name: "audio" } }],
22
+ exports: [{ name: "audio", type: compositionTypes.audioTrack, root: { kind: "fragment-operation", operation: "render" } }] }));
23
+ const component: ComponentPackage = { producers: families.map(family => ({ producer: { module, name: family.name }, handler: ({ inputs }) => {
24
+ const values = Object.fromEntries(Object.entries(inputs).map(([key, record]) => {
25
+ if (record.value.kind !== "inline") throw new Error(`${key} must be inline`);
26
+ return [key, record.value.value];
27
+ }));
28
+ const audio = crossfadeSound(values.timeline as unknown as Timeline, values.window as unknown as TemporalWindow,
29
+ values.outgoing as unknown as NarrativeExcerpt, values.incoming as unknown as NarrativeExcerpt);
30
+ return { outputs: { audio: { kind: "inline", value: canonicalize(audio) } }, needs: {} };
31
+ } })) };
32
+ const hostFacets = families.map((family,index) => {
33
+ const params = family.ports.slice(common.length);
34
+ const handler: StructuredSurfaceHandler = ({ element, resolveReference }) => {
35
+ assertAttributes(element, ["id", ...params.map(port => port.name)]); assertEmptyElement(element);
36
+ const bindings: Record<string, SurfaceResolvedReference> = {};
37
+ for (const param of params) {
38
+ const raw = element.attributes[param.name];
39
+ if (typeof raw !== "object" || raw.kind !== "reference") throw new Error(`${param.name} must be a reference`);
40
+ const value = resolveReference(raw.path);
41
+ if (value === undefined || !sameType(value.type,param.type)) throw new Error(`${param.name} has the wrong Type`);
42
+ bindings[param.name] = value;
43
+ }
44
+ return { records: [{ id: textAttribute(element,"id"), type: soundTypes.style,
45
+ value: { kind: "inline", value: canonicalize(soundStyle(fragments[index]!,bindings)) }, range: element.range }], components: [], fragments: [] };
46
+ };
47
+ return createMarkupSurfaceHostFacet({ module, declaration: { name: family.name, tag: family.tag, mode: "structured", outputs: [soundTypes.style], vocabulary: {
48
+ summary: `Project-owned ${family.name} presentation Style.`, example: `<styles:${family.tag} id="look" ${params.map(port => `${port.name}={${port.name}}`).join(' ')}/>`,
49
+ attributes: [{ name: "id", kind: "identifier", required: true, summary: "Style identity." }, ...params.map(port => ({ name: port.name, kind: "reference" as const, required: true, accepts: [port.type], summary: `Explicit ${port.name} input.` }))],
50
+ } }, handler });
51
+ });
52
+ export const hypitPackage = { format: "hypit.node-package@1" as const, modules: [{ manifest }], components: [component], hostFacets };
53
+ export default hypitPackage;
@@ -0,0 +1,14 @@
1
+ import { sealAudioTrack } from "@hypit/hypit/composition";
2
+ import { sourceSound } from "@hypit/hypit/sound";
3
+ import type { Timeline } from "@hypit/hypit/timeline";
4
+ import type { TemporalWindow } from "@hypit/hypit/temporal";
5
+ import type { NarrativeExcerpt } from "@hypit/hypit/narrative";
6
+
7
+ /** The family explicitly chooses the two roles; the Window only controls the blend progress. */
8
+ export function crossfadeSound(timeline: Timeline, window: TemporalWindow,
9
+ outgoing: NarrativeExcerpt, incoming: NarrativeExcerpt) {
10
+ if (outgoing.id === incoming.id && outgoing.narrativeId === incoming.narrativeId) throw new Error("Crossfade needs two distinct sources.");
11
+ const left = sourceSound(timeline, window, outgoing, { gain: 1, endGain: 0 });
12
+ const right = sourceSound(timeline, window, incoming, { gain: 0, endGain: 1 });
13
+ return sealAudioTrack({ id: window.subjectId, programSpaceId: timeline.id, clips: [...left.clips, ...right.clips] });
14
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2023",
4
+ "module": "NodeNext",
5
+ "moduleResolution": "NodeNext",
6
+ "lib": ["ES2023"],
7
+ "strict": true,
8
+ "noUncheckedIndexedAccess": true,
9
+ "exactOptionalPropertyTypes": true,
10
+ "verbatimModuleSyntax": true,
11
+ "declaration": true,
12
+ "sourceMap": true,
13
+ "rootDir": "src",
14
+ "outDir": "dist",
15
+ "skipLibCheck": true
16
+ },
17
+ "include": ["src/**/*.ts"]
18
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hypit/hypit",
3
- "version": "0.1.4",
3
+ "version": "0.1.5",
4
4
  "homepage": "https://hypit.ai",
5
5
  "repository": {
6
6
  "type": "git",
@@ -58,9 +58,9 @@
58
58
  "types": "./dist/public/runtime-kit.d.ts",
59
59
  "import": "./packages/runtime-kit/src/index.ts"
60
60
  },
61
- "./semantic-track": {
62
- "types": "./dist/public/semantic-track.d.ts",
63
- "import": "./packages/semantic-track/src/index.ts"
61
+ "./timeline": {
62
+ "types": "./dist/public/timeline.d.ts",
63
+ "import": "./packages/timeline/src/index.ts"
64
64
  },
65
65
  "./spatial": {
66
66
  "types": "./dist/public/spatial.d.ts",
@@ -97,6 +97,14 @@
97
97
  "./hyperframes": {
98
98
  "types": "./dist/public/hyperframes.d.ts",
99
99
  "import": "./packages/hyperframes/src/index.ts"
100
+ },
101
+ "./performance": {
102
+ "types": "./dist/public/performance.d.ts",
103
+ "import": "./packages/performance/src/index.ts"
104
+ },
105
+ "./sound": {
106
+ "types": "./dist/public/sound.d.ts",
107
+ "import": "./packages/sound/src/index.ts"
100
108
  }
101
109
  },
102
110
  "bin": {
@@ -149,7 +157,12 @@
149
157
  "examples/semantic-composition/*.svml",
150
158
  "examples/semantic-composition/*.svrun",
151
159
  "examples/semantic-composition/*.svs",
152
- "examples/semantic-composition/hypit.runtime.json"
160
+ "examples/semantic-composition/hypit.runtime.json",
161
+ "examples/provider-package/README.md",
162
+ "examples/provider-package/packages/*/package.json",
163
+ "examples/provider-package/packages/*/tsconfig.json",
164
+ "examples/provider-package/packages/*/src/**/*",
165
+ "examples/provider-package/hypit.runtime.json"
153
166
  ],
154
167
  "scripts": {
155
168
  "pack:distribution": "node scripts/pack-distribution.mjs",
@@ -166,15 +179,15 @@
166
179
  "prepack": "npm run build:public-types"
167
180
  },
168
181
  "engines": {
169
- "node": ">=22.12.0"
182
+ "node": ">=22.15.0"
170
183
  },
171
184
  "devDependencies": {
172
- "@hypit/browser-capture": "workspace:*",
173
185
  "@hypit/artifact": "workspace:*",
174
186
  "@hypit/audio-track": "workspace:*",
175
187
  "@hypit/audio-track-studio": "workspace:*",
176
188
  "@hypit/author-kit": "workspace:*",
177
189
  "@hypit/background-removal": "workspace:*",
190
+ "@hypit/browser-capture": "workspace:*",
178
191
  "@hypit/build-result": "workspace:*",
179
192
  "@hypit/build-result-fs": "workspace:*",
180
193
  "@hypit/build-result-kit": "workspace:*",
@@ -189,9 +202,11 @@
189
202
  "@hypit/credential-store-os": "workspace:*",
190
203
  "@hypit/deck-track": "workspace:*",
191
204
  "@hypit/deck-track-studio": "workspace:*",
205
+ "@hypit/elevenlabs-speech": "workspace:*",
192
206
  "@hypit/estimate": "workspace:*",
193
207
  "@hypit/film": "workspace:*",
194
208
  "@hypit/film-studio": "workspace:*",
209
+ "@hypit/fishaudio-speech": "workspace:*",
195
210
  "@hypit/fonts-open": "workspace:*",
196
211
  "@hypit/generation": "workspace:*",
197
212
  "@hypit/gpt-image": "workspace:*",
@@ -209,16 +224,16 @@
209
224
  "@hypit/minimax-h3": "workspace:*",
210
225
  "@hypit/nano-banana": "workspace:*",
211
226
  "@hypit/narrative": "workspace:*",
227
+ "@hypit/performance": "workspace:*",
228
+ "@hypit/performance-studio": "workspace:*",
212
229
  "@hypit/program-space": "workspace:*",
230
+ "@hypit/project-context-node": "workspace:*",
213
231
  "@hypit/protocol": "workspace:*",
214
- "@hypit/provider-hyperframes-aws-lambda": "workspace:*",
215
232
  "@hypit/provider-hyperframes-local": "workspace:*",
216
233
  "@hypit/provider-hypihub": "workspace:*",
217
234
  "@hypit/provider-image-opencv-local": "workspace:*",
218
- "@hypit/provider-kie": "workspace:*",
219
235
  "@hypit/provider-media-local": "workspace:*",
220
236
  "@hypit/provider-whisperx-local": "workspace:*",
221
- "@hypit/provider-xiaomi-mimo": "workspace:*",
222
237
  "@hypit/ranking": "workspace:*",
223
238
  "@hypit/ranking-studio": "workspace:*",
224
239
  "@hypit/raster": "workspace:*",
@@ -236,19 +251,20 @@
236
251
  "@hypit/seedance": "workspace:*",
237
252
  "@hypit/seedance-kits": "workspace:*",
238
253
  "@hypit/seedream": "workspace:*",
239
- "@hypit/semantic-track": "workspace:*",
254
+ "@hypit/sound": "workspace:*",
255
+ "@hypit/sound-studio": "workspace:*",
240
256
  "@hypit/spatial": "workspace:*",
241
257
  "@hypit/speech": "workspace:*",
242
258
  "@hypit/speech-alignment": "workspace:*",
243
259
  "@hypit/speech-evidence": "workspace:*",
244
- "@hypit/speech-track": "workspace:*",
245
- "@hypit/speech-track-studio": "workspace:*",
246
260
  "@hypit/store-sqlite": "workspace:*",
247
261
  "@hypit/studio-adapter": "workspace:*",
248
262
  "@hypit/svs": "workspace:*",
249
263
  "@hypit/temporal": "workspace:*",
250
264
  "@hypit/temporal-markup": "workspace:*",
251
265
  "@hypit/text": "workspace:*",
266
+ "@hypit/timeline": "workspace:*",
267
+ "@hypit/timeline-author": "workspace:*",
252
268
  "@hypit/typography-track": "workspace:*",
253
269
  "@hypit/typography-track-studio": "workspace:*",
254
270
  "@hypit/visual-ir": "workspace:*",
@@ -263,10 +279,11 @@
263
279
  "@puppeteer/browsers": "3.2.2",
264
280
  "koffi": "3.2.1",
265
281
  "puppeteer-core": "25.10.0",
266
- "sharp": "0.35.3",
282
+ "sharp": "0.35.4",
267
283
  "cmu-pronouncing-dictionary": "3.0.0",
268
284
  "tsx": "4.21.0",
269
285
  "typescript": "5.9.3",
270
- "vite": "8.2.2"
286
+ "vite": "8.2.2",
287
+ "cjs-module-lexer": "2.2.1"
271
288
  }
272
289
  }
@@ -1,37 +1,37 @@
1
1
  # `@hypit/audio-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 music, ambience and sound effects in the assembled video. A reveal sound can follow a Script
8
8
  Moment; music can occupy a Segment or the program; an explicitly timed sound can use clock placement.
9
- Performance audio normally comes from [Speech Track](../speech-track/README.md) and can continue
9
+ Performance audio is presented by [Sound](../sound/README.md) from the assembled Timeline and can continue
10
10
  under these independent sounds and [Media Track](../media-track/README.md) coverage.
11
11
 
12
- Each Clip consumes normalized audio-bearing media and a projected Window. Gain, fades, trim and
12
+ Each Item consumes normalized audio-bearing media and a projected Window. Gain, fades, trim and
13
13
  playback express the mix. Normalization preserves the source level; choose the balance and any
14
- music ducking for the actual performance. The resulting `.track` is a peer AudioTrack in Film.
14
+ music ducking for the actual performance. The resulting `.audio` is a peer AudioTrack in Film.
15
15
 
16
- ## Authoring clips
16
+ ## Authoring items
17
17
 
18
- The Markup Track selects `semantic` or `space`; its Fragment receives the resulting ProgramSpace.
19
- Each Clip accepts one shared temporal Window form: `during="program"`, a Selection or Segment,
18
+ The Markup Track selects `timeline`; its Fragment receives the same Timeline.
19
+ Each Item accepts one shared temporal Window form: `during="program"`, a Selection or Segment,
20
20
  a Moment paired with `for`, or explicit `start`/`end` expressions. The source must already contain
21
- normalized audio. This excerpt assumes imports, Script, SemanticTrack, Clock and source media exist:
21
+ normalized audio. This excerpt assumes imports, Script, Timeline, Clock and source media exist:
22
22
 
23
23
  ```svml
24
24
  <pipeline:Normalize id="hit-media" source={hit-source}
25
25
  video="none" audio="default" span-authority="audio" clock={clock}/>
26
- <audio:Track id="effects" semantic={speech.semantic}>
27
- <audio:Clip source={hit-media.media} at={story.moment.reveal} for="600ms"
26
+ <audio:Track id="effects" timeline={speech.timeline}>
27
+ <audio:Item source={hit-media.media} at={story.moment.reveal} for="600ms"
28
28
  playback="once" gain="0.45" fade-in="0f" fade-out="3f"/>
29
29
  </audio:Track>
30
30
  ```
31
31
 
32
- The Track publishes `.program` and `.track`; include the latter as a peer Film Track. `gain` is a
32
+ The Track publishes `.program` and `.audio`; include the latter as a peer Film Track. `gain` is a
33
33
  linear multiplier, defaulting to `1`; fade durations default to `0f`. Trim boundaries are source
34
- durations (`f`, integer `ms`, or fractional `s`), distinct from the Clip's destination Window.
34
+ durations (`f`, integer `ms`, or fractional `s`), distinct from the Item's destination Window.
35
35
  `trim-end` is the exclusive source endpoint, not an amount to subtract from the tail. For example,
36
36
  `trim-start="1s" trim-end="3s"` selects the source interval from one to three seconds.
37
37
 
@@ -41,3 +41,10 @@ requires authored `min-rate` and `max-rate` bounds. Other playback modes reject
41
41
  Choose occupancy from the intended sound; the Track does not silently loop music or stretch a hit
42
42
  to fill a longer Window. Its source level is retained unless gain or another explicit audio operation
43
43
  changes it.
44
+
45
+ Media Track and Audio Track both place independent Items on the same Timeline.
46
+ Overlapping pictures compose by draw order; overlapping sounds mix together.
47
+ Give an Item an `id` when it needs a recognizable author name. Studio otherwise
48
+ displays its source reference; the generated internal identity still owns
49
+ selection and writeback. Reusing a source in two Items keeps two independent
50
+ placements, even when their displayed names match.
@@ -18,7 +18,7 @@
18
18
  "@hypit/narrative": "workspace:*",
19
19
  "@hypit/program-space": "workspace:*",
20
20
  "@hypit/protocol": "workspace:*",
21
- "@hypit/semantic-track": "workspace:*",
21
+ "@hypit/timeline": "workspace:*",
22
22
  "@hypit/temporal": "workspace:*",
23
23
  "@hypit/temporal-markup": "workspace:*",
24
24
  "@hypit/markup": "workspace:*"
@@ -1,8 +1,8 @@
1
+ import type { Timeline } from "@hypit/timeline";
1
2
  import type { ComponentPackage } from "@hypit/component-kit";
2
3
  import type { SynchronizedMedia } from "@hypit/media";
3
4
  import { canonicalize } from "@hypit/protocol";
4
5
  import type { StoredValue } from "@hypit/protocol";
5
- import type { ProgramSpace } from "@hypit/program-space";
6
6
 
7
7
  import { audioTrackProducers, audioTrackTypes } from "./manifest.js";
8
8
  import { appendProjectedAudioItem, assertAudioTrackProgram, createAudioTrackSet, finalizeAudioTrack, renderAudioTrack } from "./program.js";
@@ -15,14 +15,14 @@ function inline<T>(value: StoredValue | undefined, label: string): T {
15
15
  }
16
16
  const output = (value: unknown) => ({ kind: "inline" as const, value: canonicalize(value) });
17
17
 
18
- const base = (inputs: [AudioTrackSet, AudioTrackHeader, ProgramSpace, SynchronizedMedia, AudioClipSpec, TemporalWindow]) => output(appendProjectedAudioItem(...inputs));
18
+ const base = (inputs: [AudioTrackSet, AudioTrackHeader, Timeline, SynchronizedMedia, AudioClipSpec, TemporalWindow]) => output(appendProjectedAudioItem(...inputs));
19
19
 
20
20
  export const audioTrackComponent = {
21
21
  producers: [
22
22
  { producer: audioTrackProducers.createSet, handler: () => ({ outputs: { set: output(createAudioTrackSet()) }, needs: {} }) },
23
23
  { producer: audioTrackProducers.appendItem, handler: ({ inputs }) => ({ outputs: { set: base([
24
24
  inline<AudioTrackSet>(inputs.set?.value, "AudioTrackSet"), inline<AudioTrackHeader>(inputs.header?.value, "AudioTrackHeader"),
25
- inline<ProgramSpace>(inputs.space?.value, "ProgramSpace"), inline<SynchronizedMedia>(inputs.media?.value, "SynchronizedMedia"),
25
+ inline<Timeline>(inputs.timeline?.value, "Timeline"), inline<SynchronizedMedia>(inputs.media?.value, "SynchronizedMedia"),
26
26
  inline<AudioClipSpec>(inputs.spec?.value, "AudioClipSpec"),
27
27
  inline<TemporalWindow>(inputs.window?.value, "TemporalWindow"),
28
28
  ]) }, needs: {} }) },
@@ -30,7 +30,7 @@ export const audioTrackComponent = {
30
30
  inline<AudioTrackSet>(inputs.set?.value, "AudioTrackSet"), inline<AudioTrackHeader>(inputs.header?.value, "AudioTrackHeader"),
31
31
  )) }, needs: {} }) },
32
32
  { producer: audioTrackProducers.render, handler: ({ inputs }) => ({ outputs: { track: output(renderAudioTrack(
33
- inline<ProgramSpace>(inputs.space?.value, "ProgramSpace"), inline<AudioTrackProgram>(inputs.program?.value, "AudioTrackProgram"),
33
+ inline<Timeline>(inputs.timeline?.value, "Timeline"), inline<AudioTrackProgram>(inputs.program?.value, "AudioTrackProgram"),
34
34
  )) }, needs: {} }) },
35
35
  ],
36
36
  validators: [{
@@ -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 { sealGraphFragment } from "@hypit/elaborator";
4
5
  import type { FragmentOperation } from "@hypit/elaborator";
@@ -32,7 +33,7 @@ export function createAudioTrackFragment(items: readonly AudioTrackFragmentItem[
32
33
  id,
33
34
  producer: audioTrackProducers.appendItem,
34
35
  inputs: {
35
- set: operation(current), header: input("header"), space: input("space"),
36
+ set: operation(current), header: input("header"), timeline: input("timeline"),
36
37
  media: input(item.mediaName), spec: input(item.specName),
37
38
  window: input(item.windowName),
38
39
  },
@@ -42,18 +43,18 @@ export function createAudioTrackFragment(items: readonly AudioTrackFragmentItem[
42
43
  });
43
44
  operations.push(
44
45
  { id: "audio:program", producer: audioTrackProducers.finalize, inputs: { set: operation(current), header: input("header") }, result: { kind: "output", name: "program" } },
45
- { id: "audio:track", producer: audioTrackProducers.render, inputs: { space: input("space"), program: operation("audio:program") }, result: { kind: "output", name: "track" } },
46
+ { id: "audio:track", producer: audioTrackProducers.render, inputs: { timeline: input("timeline"), program: operation("audio:program") }, result: { kind: "output", name: "track" } },
46
47
  );
47
48
  return sealGraphFragment({
48
49
  inputs: [
49
50
  { name: "header", type: audioTrackTypes.header },
50
- { name: "space", type: programSpaceTypes.programSpace },
51
+ { name: "timeline", type: timelineTypes.track },
51
52
  ...[...inputTypes].map(([inputName, type]) => ({ name: inputName, type })),
52
53
  ],
53
54
  operations,
54
55
  exports: [
55
56
  { name: "program", type: audioTrackTypes.program, root: operation("audio:program") },
56
- { name: "track", type: compositionTypes.audioTrack, root: operation("audio:track") },
57
+ { name: "audio", type: compositionTypes.audioTrack, root: operation("audio:track") },
57
58
  ],
58
59
  });
59
60
  }
@@ -2,6 +2,6 @@ export { audioTrackComponent } from "./component.js";
2
2
  export { createAudioTrackFragment, programAudioTrackFragment } from "./fragment.js";
3
3
  export type { AudioTrackFragmentItem } from "./fragment.js";
4
4
  export { audioClipSpecSchema, audioTrackDependency, audioTrackHeaderSchema, audioTrackManifest, audioTrackMarkupSurfaces, audioTrackModuleRef, audioTrackProducers, audioTrackProgramSchema, audioTrackSetSchema, audioTrackTypes } from "./manifest.js";
5
- export { decodeAudioTrackSurface } from "./surface.js";
5
+ export { decodeAudioTrackSurface, audioItemDefaults } from "./surface.js";
6
6
  export { appendProjectedAudioItem, assertAudioClipSpec, assertAudioTrackHeader, assertAudioTrackProgram, assertAudioTrackSet, createAudioTrackSet, finalizeAudioTrack, renderAudioTrack, sealAudioClipSpec, sealAudioTrackHeader, sealAudioTrackProgram } from "./program.js";
7
7
  export type * from "./types.js";