@hypit/hypit 0.1.4 → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (462) hide show
  1. package/README.md +4 -2
  2. package/dist/public/caption.d.ts +206 -183
  3. package/dist/public/composition.d.ts +25 -3
  4. package/dist/public/endpoint-kit.d.ts +24 -2
  5. package/dist/public/generation.d.ts +5 -1
  6. package/dist/public/hyperframes.d.ts +19 -1
  7. package/dist/public/narrative.d.ts +17 -3
  8. package/dist/public/performance.d.ts +1590 -0
  9. package/dist/public/program-space.d.ts +179 -32
  10. package/dist/public/runtime-kit.d.ts +21 -8
  11. package/dist/public/sound.d.ts +822 -0
  12. package/dist/public/speech.d.ts +41 -0
  13. package/dist/public/studio-adapter.d.ts +77 -15
  14. package/dist/public/temporal-markup.d.ts +9 -44
  15. package/dist/public/temporal.d.ts +37 -28
  16. package/dist/public/{semantic-track.d.ts → timeline.d.ts} +62 -49
  17. package/examples/README.md +18 -10
  18. package/examples/minimal-author-package/packages/example-component/preview/preview.svml +19 -12
  19. package/examples/minimal-author-package/packages/example-component/src/component.ts +5 -5
  20. package/examples/minimal-author-package/packages/example-component/src/fragment.ts +3 -5
  21. package/examples/minimal-author-package/packages/example-component/src/manifest.ts +8 -10
  22. package/examples/minimal-author-package/packages/example-component/src/surface.ts +2 -2
  23. package/examples/provider-package/README.md +78 -0
  24. package/examples/provider-package/hypit.runtime.json +12 -0
  25. package/examples/provider-package/packages/provider-images/package.json +11 -0
  26. package/examples/provider-package/packages/provider-images/src/activation.ts +24 -0
  27. package/examples/provider-package/packages/provider-images/src/provider.ts +122 -0
  28. package/examples/provider-package/packages/provider-images/tsconfig.json +9 -0
  29. package/examples/semantic-composition/README.md +8 -1
  30. package/examples/semantic-composition/chat.svml +6 -5
  31. package/examples/semantic-composition/hypit.runtime.json +1 -1
  32. package/examples/semantic-composition/packages/chat-scene/README.md +3 -3
  33. package/examples/semantic-composition/packages/chat-scene/src/activation.ts +18 -21
  34. package/examples/semantic-composition/packages/chat-scene/src/render.ts +4 -4
  35. package/examples/semantic-composition/packages/performance-styles/README.md +42 -0
  36. package/examples/semantic-composition/packages/performance-styles/package.json +25 -0
  37. package/examples/semantic-composition/packages/performance-styles/src/activation.ts +57 -0
  38. package/examples/semantic-composition/packages/performance-styles/src/render.ts +54 -0
  39. package/examples/semantic-composition/packages/performance-styles/src/studio.ts +28 -0
  40. package/examples/semantic-composition/packages/performance-styles/tsconfig.json +18 -0
  41. package/examples/semantic-composition/packages/responsive-explainer/README.md +16 -9
  42. package/examples/semantic-composition/packages/responsive-explainer/src/activation.ts +12 -12
  43. package/examples/semantic-composition/packages/responsive-explainer/src/render.ts +5 -5
  44. package/examples/semantic-composition/packages/sound-styles/README.md +36 -0
  45. package/examples/semantic-composition/packages/sound-styles/package.json +25 -0
  46. package/examples/semantic-composition/packages/sound-styles/src/activation.ts +53 -0
  47. package/examples/semantic-composition/packages/sound-styles/src/render.ts +14 -0
  48. package/examples/semantic-composition/packages/sound-styles/tsconfig.json +18 -0
  49. package/package.json +35 -15
  50. package/packages/audio-track/README.md +20 -13
  51. package/packages/audio-track/package.json +1 -1
  52. package/packages/audio-track/src/component.ts +4 -4
  53. package/packages/audio-track/src/fragment.ts +6 -5
  54. package/packages/audio-track/src/index.ts +1 -1
  55. package/packages/audio-track/src/manifest.ts +17 -16
  56. package/packages/audio-track/src/program.ts +21 -25
  57. package/packages/audio-track/src/surface.ts +19 -18
  58. package/packages/audio-track-studio/README.md +23 -0
  59. package/packages/audio-track-studio/src/index.ts +28 -17
  60. package/packages/author-kit/README.md +1 -1
  61. package/packages/background-removal/README.md +4 -7
  62. package/packages/browser-capture/package.json +1 -1
  63. package/packages/build-result/README.md +11 -0
  64. package/packages/build-result/src/decode.ts +2 -0
  65. package/packages/build-result/src/execution-log.ts +17 -0
  66. package/packages/build-result/src/index.ts +1 -0
  67. package/packages/build-result/src/store.ts +14 -1
  68. package/packages/build-result/src/types.ts +3 -0
  69. package/packages/build-result-s3/src/repository.ts +4 -0
  70. package/packages/caption/README.md +61 -73
  71. package/packages/caption/package.json +3 -2
  72. package/packages/caption/src/activation.ts +2 -2
  73. package/packages/caption/src/component.ts +20 -5
  74. package/packages/caption/src/display.ts +3 -18
  75. package/packages/caption/src/fragment.ts +3 -7
  76. package/packages/caption/src/index.ts +6 -5
  77. package/packages/caption/src/manifest.ts +29 -46
  78. package/packages/caption/src/style.ts +24 -135
  79. package/packages/caption/src/surface.ts +12 -92
  80. package/packages/caption/src/temporalize.ts +18 -53
  81. package/packages/caption/src/types.ts +8 -35
  82. package/packages/caption/src/visibility.ts +23 -0
  83. package/packages/caption-fine/README.md +21 -9
  84. package/packages/caption-fine/package.json +4 -2
  85. package/packages/caption-fine/src/component.ts +3 -3
  86. package/packages/caption-fine/src/fragment.ts +7 -19
  87. package/packages/caption-fine/src/index.ts +2 -0
  88. package/packages/caption-fine/src/manifest.ts +26 -17
  89. package/packages/caption-fine/src/recipe.ts +7 -0
  90. package/packages/caption-fine/src/render.ts +14 -13
  91. package/packages/caption-fine/src/schedule.ts +39 -35
  92. package/packages/caption-fine/src/style.ts +10 -9
  93. package/packages/caption-fine/src/surface.ts +62 -35
  94. package/packages/caption-fine/src/types.ts +2 -0
  95. package/packages/caption-fine-studio/README.md +24 -2
  96. package/packages/caption-fine-studio/package.json +3 -1
  97. package/packages/caption-fine-studio/src/activation.ts +3 -3
  98. package/packages/caption-fine-studio/src/index.ts +54 -42
  99. package/packages/cli/README.md +57 -4
  100. package/packages/cli/package.json +1 -0
  101. package/packages/cli/src/arguments.ts +25 -6
  102. package/packages/cli/src/build-planning.ts +3 -2
  103. package/packages/cli/src/command.ts +6 -0
  104. package/packages/cli/src/commands/environment.ts +28 -18
  105. package/packages/cli/src/commands/execution.ts +81 -26
  106. package/packages/cli/src/commands/results.ts +7 -11
  107. package/packages/cli/src/index.ts +2 -2
  108. package/packages/cli/src/machine-view.ts +3 -2
  109. package/packages/cli/src/main.ts +34 -42
  110. package/packages/cli/src/observation.ts +7 -1
  111. package/packages/cli/src/output.ts +65 -23
  112. package/packages/cli/src/view.ts +66 -19
  113. package/packages/comment-sticker/README.md +3 -3
  114. package/packages/comment-sticker/package.json +1 -1
  115. package/packages/comment-sticker/src/component.ts +4 -4
  116. package/packages/comment-sticker/src/fragment.ts +5 -4
  117. package/packages/comment-sticker/src/manifest.ts +7 -6
  118. package/packages/comment-sticker/src/program.ts +9 -9
  119. package/packages/comment-sticker/src/surface.ts +6 -7
  120. package/packages/composition/README.md +21 -0
  121. package/packages/composition/src/audio-presentation.ts +44 -0
  122. package/packages/composition/src/index.ts +3 -0
  123. package/packages/composition/src/schema.ts +8 -3
  124. package/packages/composition/src/track.ts +15 -1
  125. package/packages/credential-store-env/README.md +1 -1
  126. package/packages/deck-track/README.md +3 -3
  127. package/packages/deck-track/package.json +1 -1
  128. package/packages/deck-track/src/component.ts +5 -5
  129. package/packages/deck-track/src/fragment.ts +6 -5
  130. package/packages/deck-track/src/lower.ts +12 -12
  131. package/packages/deck-track/src/manifest.ts +8 -7
  132. package/packages/deck-track/src/program.ts +13 -16
  133. package/packages/deck-track/src/surface.ts +9 -10
  134. package/packages/driver-node/src/driver.ts +41 -3
  135. package/packages/elevenlabs-speech/README.md +27 -0
  136. package/packages/{provider-xiaomi-mimo → elevenlabs-speech}/package.json +5 -8
  137. package/packages/elevenlabs-speech/src/activation.ts +26 -0
  138. package/packages/elevenlabs-speech/src/fragment.ts +11 -0
  139. package/packages/elevenlabs-speech/src/index.ts +111 -0
  140. package/packages/elevenlabs-speech/src/surface.ts +167 -0
  141. package/packages/endpoint-kit/README.md +24 -0
  142. package/packages/endpoint-kit/src/index.ts +7 -1
  143. package/packages/film/README.md +12 -7
  144. package/packages/film/package.json +1 -1
  145. package/packages/film/src/component.ts +4 -4
  146. package/packages/film/src/fragment.ts +6 -5
  147. package/packages/film/src/manifest.ts +11 -10
  148. package/packages/film/src/program.ts +5 -5
  149. package/packages/film/src/recipe.ts +2 -1
  150. package/packages/film/src/surface.ts +10 -7
  151. package/packages/film-studio/package.json +1 -1
  152. package/packages/film-studio/src/index.ts +2 -2
  153. package/packages/fishaudio-speech/README.md +33 -0
  154. package/packages/fishaudio-speech/package.json +21 -0
  155. package/packages/fishaudio-speech/src/activation.ts +32 -0
  156. package/packages/fishaudio-speech/src/fragment.ts +11 -0
  157. package/packages/fishaudio-speech/src/index.ts +156 -0
  158. package/packages/fishaudio-speech/src/surface.ts +192 -0
  159. package/packages/generation/README.md +11 -1
  160. package/packages/generation/src/mapping.ts +28 -30
  161. package/packages/gpt-image/README.md +1 -2
  162. package/packages/grok-imagine/README.md +1 -2
  163. package/packages/hyperframes/README.md +7 -3
  164. package/packages/hyperframes/src/browser-program.ts +11 -2
  165. package/packages/hyperframes/src/document.ts +15 -2
  166. package/packages/interview-emoji-reveal/README.md +4 -4
  167. package/packages/interview-emoji-reveal/package.json +1 -1
  168. package/packages/interview-emoji-reveal/src/component.ts +4 -4
  169. package/packages/interview-emoji-reveal/src/fragment.ts +6 -5
  170. package/packages/interview-emoji-reveal/src/manifest.ts +9 -8
  171. package/packages/interview-emoji-reveal/src/program.ts +14 -14
  172. package/packages/interview-emoji-reveal/src/surface.ts +8 -9
  173. package/packages/media-execution/README.md +7 -3
  174. package/packages/media-execution/src/audio-presentation.ts +23 -0
  175. package/packages/media-execution/src/execute.ts +2 -0
  176. package/packages/media-pipeline/README.md +7 -3
  177. package/packages/media-pipeline/src/audio-plan.ts +4 -1
  178. package/packages/media-pipeline/src/component.ts +16 -2
  179. package/packages/media-pipeline/src/manifest.ts +3 -1
  180. package/packages/media-pipeline/src/types.ts +2 -1
  181. package/packages/media-track/README.md +14 -47
  182. package/packages/media-track/package.json +1 -1
  183. package/packages/media-track/preview/preview.svml +5 -5
  184. package/packages/media-track/src/author.ts +12 -6
  185. package/packages/media-track/src/component.ts +10 -16
  186. package/packages/media-track/src/fragment.ts +8 -7
  187. package/packages/media-track/src/index.ts +3 -1
  188. package/packages/media-track/src/lower.ts +7 -7
  189. package/packages/media-track/src/manifest.ts +16 -38
  190. package/packages/media-track/src/program.ts +62 -67
  191. package/packages/media-track/src/sampling.ts +6 -6
  192. package/packages/media-track/src/sequence.ts +8 -8
  193. package/packages/media-track/src/surface.ts +25 -43
  194. package/packages/media-track-studio/README.md +9 -0
  195. package/packages/media-track-studio/src/index.ts +16 -11
  196. package/packages/mimo-speech/README.md +1 -1
  197. package/packages/minimax-h3/README.md +1 -1
  198. package/packages/nano-banana/README.md +1 -1
  199. package/packages/narrative/README.md +23 -1
  200. package/packages/narrative/src/identity.ts +11 -0
  201. package/packages/narrative/src/index.ts +3 -0
  202. package/packages/narrative/src/schema.ts +28 -27
  203. package/packages/narrative/src/selection.ts +52 -0
  204. package/packages/narrative/src/types.ts +2 -0
  205. package/packages/package-loader-node/README.md +30 -0
  206. package/packages/package-loader-node/package.json +5 -2
  207. package/packages/package-loader-node/src/distribution-resolution.ts +10 -3
  208. package/packages/package-loader-node/src/index.ts +1 -0
  209. package/packages/package-loader-node/src/loader.ts +12 -15
  210. package/packages/package-loader-node/src/location.ts +27 -1
  211. package/packages/package-loader-node/src/module-scope.ts +183 -0
  212. package/packages/package-loader-node/src/types.ts +4 -0
  213. package/packages/performance/README.md +83 -0
  214. package/packages/performance/package.json +30 -0
  215. package/packages/performance/src/activation.ts +11 -0
  216. package/packages/performance/src/component.ts +46 -0
  217. package/packages/performance/src/index.ts +6 -0
  218. package/packages/performance/src/manifest.ts +53 -0
  219. package/packages/{media-track/src/performance.ts → performance/src/media.ts} +9 -10
  220. package/packages/performance/src/program.ts +51 -0
  221. package/packages/performance/src/style.ts +35 -0
  222. package/packages/performance/src/surface.ts +99 -0
  223. package/packages/performance-studio/README.md +25 -0
  224. package/packages/performance-studio/package.json +21 -0
  225. package/packages/performance-studio/src/activation.ts +6 -0
  226. package/packages/performance-studio/src/index.ts +84 -0
  227. package/packages/program-space/README.md +9 -18
  228. package/packages/program-space/src/activation.ts +1 -5
  229. package/packages/program-space/src/index.ts +2 -11
  230. package/packages/program-space/src/surface.ts +1 -20
  231. package/packages/project-context-node/README.md +20 -0
  232. package/packages/project-context-node/package.json +10 -0
  233. package/packages/project-context-node/src/index.ts +3 -0
  234. package/packages/{cli → project-context-node}/src/runtime-selection.ts +7 -2
  235. package/packages/provider-hyperframes-local/README.md +43 -15
  236. package/packages/provider-hyperframes-local/src/activation.ts +4 -3
  237. package/packages/provider-hyperframes-local/src/capture-process.ts +26 -4
  238. package/packages/provider-hyperframes-local/src/capture.ts +96 -26
  239. package/packages/provider-hyperframes-local/src/concurrency.ts +86 -0
  240. package/packages/provider-hyperframes-local/src/opaque-capture.ts +92 -0
  241. package/packages/provider-hyperframes-local/src/options.ts +2 -0
  242. package/packages/provider-hyperframes-local/src/program.ts +6 -3
  243. package/packages/provider-hyperframes-local/src/progress.ts +53 -0
  244. package/packages/provider-hyperframes-local/src/provider.ts +18 -5
  245. package/packages/provider-hyperframes-local/src/render.ts +48 -7
  246. package/packages/provider-hypihub/README.md +48 -17
  247. package/packages/provider-hypihub/package.json +2 -0
  248. package/packages/provider-hypihub/src/mapping.ts +31 -7
  249. package/packages/provider-hypihub/src/oauth.ts +6 -0
  250. package/packages/provider-hypihub/src/provider.ts +25 -13
  251. package/packages/provider-hypihub/src/routes.ts +1 -2
  252. package/packages/provider-hypihub/src/upload.ts +2 -0
  253. package/packages/provider-media-local/README.md +3 -4
  254. package/packages/provider-whisperx-local/src/program.ts +1 -0
  255. package/packages/provider-whisperx-local/src/provider.ts +3 -0
  256. package/packages/ranking/README.md +8 -6
  257. package/packages/ranking/package.json +1 -1
  258. package/packages/ranking/src/component.ts +6 -6
  259. package/packages/ranking/src/fragment.ts +11 -7
  260. package/packages/ranking/src/manifest.ts +21 -14
  261. package/packages/ranking/src/render.ts +22 -26
  262. package/packages/ranking/src/schedule.ts +16 -19
  263. package/packages/ranking/src/surface.ts +12 -13
  264. package/packages/ranking-studio/README.md +18 -0
  265. package/packages/ranking-studio/src/index.ts +61 -9
  266. package/packages/render-hyperframes/README.md +7 -7
  267. package/packages/render-hyperframes/package.json +1 -1
  268. package/packages/render-hyperframes/src/component.ts +11 -1
  269. package/packages/render-hyperframes/src/fragment.ts +7 -4
  270. package/packages/render-hyperframes/src/manifest.ts +4 -4
  271. package/packages/render-hyperframes/src/surface.ts +6 -6
  272. package/packages/runtime/README.md +8 -1
  273. package/packages/runtime/src/execution.ts +15 -4
  274. package/packages/runtime/src/index.ts +2 -1
  275. package/packages/runtime/src/log.ts +51 -0
  276. package/packages/runtime/src/types.ts +5 -8
  277. package/packages/runtime-host-node/README.md +30 -0
  278. package/packages/runtime-host-node/package.json +1 -0
  279. package/packages/runtime-host-node/src/index.ts +24 -9
  280. package/packages/runtime-host-node/src/packages.ts +47 -50
  281. package/packages/runtime-kit/README.md +5 -0
  282. package/packages/runtime-kit/src/index.ts +3 -1
  283. package/packages/runtime-local/README.md +109 -4
  284. package/packages/runtime-local/src/config.ts +202 -56
  285. package/packages/runtime-local/src/control.ts +9 -1
  286. package/packages/runtime-local/src/executor.ts +66 -0
  287. package/packages/runtime-local/src/host.ts +37 -17
  288. package/packages/runtime-local/src/log.ts +48 -0
  289. package/packages/runtime-local/src/programs.ts +2 -1
  290. package/packages/runtime-local/src/result-writer.ts +2 -0
  291. package/packages/runtime-local/src/runtime.ts +8 -6
  292. package/packages/runtime-local/src/supervisor.ts +142 -0
  293. package/packages/runtime-local/src/types.ts +9 -2
  294. package/packages/runtime-local/src/worker-process.ts +7 -24
  295. package/packages/runtime-local/src/worker.ts +55 -83
  296. package/packages/screen-overlay/README.md +3 -3
  297. package/packages/screen-overlay/package.json +1 -1
  298. package/packages/screen-overlay/src/component.ts +3 -3
  299. package/packages/screen-overlay/src/fragment.ts +5 -4
  300. package/packages/screen-overlay/src/manifest.ts +7 -6
  301. package/packages/screen-overlay/src/program.ts +9 -9
  302. package/packages/screen-overlay/src/surface.ts +6 -7
  303. package/packages/script/README.md +30 -5
  304. package/packages/script/src/manifest.ts +4 -3
  305. package/packages/script/src/narrative.ts +1 -0
  306. package/packages/script/src/parser.ts +45 -6
  307. package/packages/script/src/surface.ts +4 -3
  308. package/packages/script/src/types.ts +1 -1
  309. package/packages/script-studio/package.json +9 -3
  310. package/packages/script-studio/src/index.ts +2 -0
  311. package/packages/script-studio/src/projection.ts +105 -0
  312. package/packages/seedance/README.md +30 -1
  313. package/packages/seedance/src/index.ts +18 -7
  314. package/packages/seedance/src/surface.ts +17 -4
  315. package/packages/seedance-kits/README.md +7 -1
  316. package/packages/seedream/README.md +1 -1
  317. package/packages/sound/README.md +81 -0
  318. package/packages/sound/package.json +25 -0
  319. package/packages/sound/src/activation.ts +11 -0
  320. package/packages/sound/src/component.ts +28 -0
  321. package/packages/sound/src/index.ts +5 -0
  322. package/packages/sound/src/manifest.ts +47 -0
  323. package/packages/sound/src/program.ts +84 -0
  324. package/packages/sound/src/style.ts +34 -0
  325. package/packages/sound/src/surface.ts +90 -0
  326. package/packages/sound-studio/README.md +22 -0
  327. package/packages/sound-studio/package.json +20 -0
  328. package/packages/sound-studio/src/activation.ts +6 -0
  329. package/packages/sound-studio/src/index.ts +74 -0
  330. package/packages/speech/README.md +2 -2
  331. package/packages/speech-alignment/src/local.ts +8 -0
  332. package/packages/speech-alignment/src/locate.ts +1 -1
  333. package/packages/store-sqlite/README.md +7 -0
  334. package/packages/store-sqlite/src/store.ts +84 -83
  335. package/packages/studio/INSPECTOR.md +15 -2
  336. package/packages/studio/LOCALIZATION.md +98 -0
  337. package/packages/studio/README.md +101 -14
  338. package/packages/studio/locales/en.json +197 -0
  339. package/packages/studio/locales/zh-CN.json +191 -0
  340. package/packages/studio/package.json +8 -7
  341. package/packages/studio/src/companion-assembly.ts +1 -0
  342. package/packages/studio/src/domain.ts +1 -1
  343. package/packages/studio/src/fallback-companions.ts +3 -3
  344. package/packages/studio/src/feedback-server.ts +51 -0
  345. package/packages/studio/src/feedback-store.ts +66 -0
  346. package/packages/studio/src/feedback.ts +60 -0
  347. package/packages/studio/src/localization-node.ts +46 -0
  348. package/packages/studio/src/localization.ts +85 -0
  349. package/packages/studio/src/parameter-values.ts +43 -1
  350. package/packages/studio/src/parameters.ts +114 -24
  351. package/packages/studio/src/preview/render.ts +5 -1
  352. package/packages/studio/src/preview/runtime-shim.ts +49 -3
  353. package/packages/studio/src/programme.ts +14 -30
  354. package/packages/studio/src/server.ts +10 -6
  355. package/packages/studio/src/shared.ts +4 -2
  356. package/packages/studio/src/snapshot.ts +21 -132
  357. package/packages/studio/src/studio-preflight.ts +3 -3
  358. package/packages/studio/src/studio-registry.ts +50 -6
  359. package/packages/studio/src/style.css +223 -50
  360. package/packages/studio/src/ui/artifact-name.ts +8 -6
  361. package/packages/studio/src/ui/artifact-preview.ts +5 -4
  362. package/packages/studio/src/ui/code.ts +17 -16
  363. package/packages/studio/src/ui/comments.ts +234 -0
  364. package/packages/studio/src/ui/dropdown.ts +68 -0
  365. package/packages/studio/src/ui/i18n.ts +109 -0
  366. package/packages/studio/src/ui/icons.ts +6 -0
  367. package/packages/studio/src/ui/library.ts +76 -65
  368. package/packages/studio/src/ui/main.ts +223 -211
  369. package/packages/studio/src/ui/overlay.ts +12 -8
  370. package/packages/studio/src/ui/scrub-preview.ts +110 -0
  371. package/packages/studio/src/ui/stage.ts +93 -29
  372. package/packages/studio/src/ui/timeline.ts +190 -118
  373. package/packages/studio/start.ts +41 -22
  374. package/packages/studio-adapter/README.md +130 -11
  375. package/packages/studio-adapter/src/index.ts +100 -13
  376. package/packages/temporal/README.md +6 -6
  377. package/packages/temporal/package.json +1 -1
  378. package/packages/temporal/src/component.ts +5 -6
  379. package/packages/temporal/src/index.ts +8 -6
  380. package/packages/temporal/src/location.ts +11 -11
  381. package/packages/temporal/src/projection.ts +19 -19
  382. package/packages/temporal/src/rational.ts +4 -4
  383. package/packages/temporal-markup/EDITING.md +2 -2
  384. package/packages/temporal-markup/README.md +27 -11
  385. package/packages/temporal-markup/package.json +1 -1
  386. package/packages/temporal-markup/src/index.ts +20 -25
  387. package/packages/temporal-markup/src/space.ts +10 -41
  388. package/packages/timeline/README.md +31 -0
  389. package/packages/{semantic-track → timeline}/package.json +1 -1
  390. package/packages/timeline/src/activation.ts +8 -0
  391. package/packages/timeline/src/component.ts +24 -0
  392. package/packages/timeline/src/identity.ts +60 -0
  393. package/packages/timeline/src/index.ts +6 -0
  394. package/packages/{semantic-track → timeline}/src/location.ts +20 -20
  395. package/packages/timeline/src/manifest.ts +39 -0
  396. package/packages/{semantic-track → timeline}/src/projection.ts +14 -14
  397. package/packages/timeline/src/types.ts +24 -0
  398. package/packages/timeline-author/README.md +68 -0
  399. package/packages/{speech-track → timeline-author}/package.json +6 -4
  400. package/packages/timeline-author/src/activation.ts +22 -0
  401. package/packages/{speech-track → timeline-author}/src/component.ts +15 -13
  402. package/packages/{speech-track → timeline-author}/src/fragment.ts +14 -23
  403. package/packages/timeline-author/src/index.ts +7 -0
  404. package/packages/timeline-author/src/manifest.ts +78 -0
  405. package/packages/timeline-author/src/program.ts +107 -0
  406. package/packages/timeline-author/src/surface.ts +46 -0
  407. package/packages/timeline-author/src/types.ts +6 -0
  408. package/packages/typography-track/README.md +4 -4
  409. package/packages/typography-track/package.json +1 -1
  410. package/packages/typography-track/src/component.ts +4 -4
  411. package/packages/typography-track/src/fragment.ts +4 -3
  412. package/packages/typography-track/src/manifest.ts +11 -9
  413. package/packages/typography-track/src/program.ts +15 -15
  414. package/packages/typography-track/src/surface.ts +17 -18
  415. package/packages/video-cli/README.md +4 -1
  416. package/packages/video-cli/package.json +2 -1
  417. package/packages/video-cli/src/creation.ts +14 -4
  418. package/packages/video-cli/src/index.ts +1 -1
  419. package/packages/video-cli/src/studio-distribution.ts +2 -1
  420. package/packages/volcengine-matting/README.md +3 -3
  421. package/packages/whisperx/README.md +1 -1
  422. package/services/whisperx/README.md +14 -0
  423. package/services/whisperx/pyproject.toml +2 -0
  424. package/services/whisperx/uv.lock +20 -20
  425. package/packages/provider-hyperframes-aws-lambda/README.md +0 -30
  426. package/packages/provider-hyperframes-aws-lambda/package.json +0 -30
  427. package/packages/provider-hyperframes-aws-lambda/src/activation.ts +0 -97
  428. package/packages/provider-hyperframes-aws-lambda/src/client.ts +0 -114
  429. package/packages/provider-hyperframes-aws-lambda/src/index.ts +0 -21
  430. package/packages/provider-hyperframes-aws-lambda/src/provider.ts +0 -522
  431. package/packages/provider-kie/README.md +0 -134
  432. package/packages/provider-kie/package.json +0 -43
  433. package/packages/provider-kie/src/activation.ts +0 -71
  434. package/packages/provider-kie/src/index.ts +0 -10
  435. package/packages/provider-kie/src/mapping.ts +0 -182
  436. package/packages/provider-kie/src/provider.ts +0 -657
  437. package/packages/provider-kie/src/routes.ts +0 -150
  438. package/packages/provider-xiaomi-mimo/README.md +0 -32
  439. package/packages/provider-xiaomi-mimo/src/activation.ts +0 -57
  440. package/packages/provider-xiaomi-mimo/src/index.ts +0 -5
  441. package/packages/provider-xiaomi-mimo/src/provider.ts +0 -214
  442. package/packages/runtime/src/environment.ts +0 -6
  443. package/packages/semantic-track/README.md +0 -21
  444. package/packages/semantic-track/src/activation.ts +0 -8
  445. package/packages/semantic-track/src/component.ts +0 -24
  446. package/packages/semantic-track/src/identity.ts +0 -58
  447. package/packages/semantic-track/src/index.ts +0 -6
  448. package/packages/semantic-track/src/manifest.ts +0 -38
  449. package/packages/semantic-track/src/types.ts +0 -26
  450. package/packages/speech-track/README.md +0 -51
  451. package/packages/speech-track/src/activation.ts +0 -19
  452. package/packages/speech-track/src/index.ts +0 -7
  453. package/packages/speech-track/src/manifest.ts +0 -73
  454. package/packages/speech-track/src/program.ts +0 -64
  455. package/packages/speech-track/src/surface.ts +0 -35
  456. package/packages/speech-track/src/types.ts +0 -6
  457. package/packages/speech-track-studio/README.md +0 -3
  458. package/packages/speech-track-studio/package.json +0 -14
  459. package/packages/speech-track-studio/src/activation.ts +0 -7
  460. package/packages/speech-track-studio/src/index.ts +0 -40
  461. /package/packages/{cli → project-context-node}/src/project-context.ts +0 -0
  462. /package/packages/{speech-track → timeline-author}/preview/Track.png +0 -0
@@ -106,7 +106,8 @@ ordered layers, `startFrame`, `endFrameExclusive` and `stackOrder`. Useful optio
106
106
 
107
107
  | Field/helper | Purpose |
108
108
  | --- | --- |
109
- | `presentation` | Name the entity's role and choose `standard`, `group` or `point` chrome |
109
+ | `selectionGroup` | Link disjoint displayed intervals of one author entity; selection highlights them together without changing their independent timing |
110
+ | `presentation` | Name the entity's role and choose `standard`, `group`, `point` or `compact` chrome (a single-line primary label) |
110
111
  | `textLayer(text)` | Put explicit domain text in the timeline body |
111
112
  | `previewLayer(artifactPreview(kind, resource), layout)` | Show a declared image/video/audio Resource with a finite layout; Studio resolves transport |
112
113
  | `renderIds` | Relate an entity to its actual rendered elements |
@@ -114,6 +115,7 @@ ordered layers, `startFrame`, `endFrameExclusive` and `stackOrder`. Useful optio
114
115
  | `temporal` | Carry the executed Instant/Window lineage and its edit authority |
115
116
  | `lane` and Companion `attachments` | Put child entities on a declared additional lane, with its own bindings and Inspector |
116
117
  | `childEntities` / `authoredChildFor` | Resolve children from public identity and exact Spec Types rather than source order guesses |
118
+ | `authoredItemTitle` | Prefer an explicit author id, then a source reference from the attributes chosen by the Companion; presentation leaves editing identity unchanged |
117
119
 
118
120
  Use the program's frame space and half-open intervals. Persistent visibility and its activation are
119
121
  different facts: a board item can remain visible until the board ends while its reveal occupies only
@@ -152,12 +154,11 @@ physical package identity, so executable package code cannot impersonate an
152
154
  official Companion. The Source closure selects project packages; Studio does not
153
155
  scan `node_modules` for plugins or use Runtime Profiles to select Companions.
154
156
 
155
- The same host facet can contribute Film and Script boundary companions. A Film companion declares
156
- the accepted `timeSources` (author attribute and Type) and its terminal Tracks. Film accepts either
157
- a SemanticTrack or a declared ProgramSpace. Track Companion context includes `semantic` when the
158
- time source supplies a semantic timeline; pure animation leaves it undefined. A Script companion owns
159
- raw source observation and marker adjustment. Studio core only matches and invokes these declarations;
160
- it does not import either domain package.
157
+ The same host facet can contribute Film, Script and parameter Companions. A Film Companion
158
+ identifies its Timeline and terminal Tracks. The Timeline supplies the program range; semantic
159
+ rows are populated when it carries Script anchors. A Script Companion owns source observation,
160
+ projection of its values into Studio's segment/word/marker rows, and marker adjustment. Studio
161
+ consumes that projection without reading the Script package's Narrative representation.
161
162
 
162
163
  For a domain item whose Spec is consumed beside a Window or Instant, call
163
164
  `temporalLineageFor(context, item.id, "window")` using the actual projection input name. Attach the
@@ -172,8 +173,8 @@ Inspector editing deliberately has two declarations:
172
173
 
173
174
  - `bindings` names exact author endpoints, including explicit reference paths
174
175
  into authored elements or SVS Recipes. A binding is not visible by itself;
175
- - `inspector` selects writable bindings and gives them a `where`, `how` or
176
- `when` domain, an optional package-owned page, a section and one of Studio's
176
+ - `inspector` selects bindings and gives them a `where`, `when` or
177
+ `how` domain, an optional package-owned page, a section and one of Studio's
177
178
  finite controls (`text`, `number`, `boolean`, `select`, `color`, `list` or
178
179
  `record`). A domain Recipe may declare a shared canonical-value schema; the
179
180
  companion chooses its presentation while Studio derives and validates the
@@ -181,8 +182,11 @@ Inspector editing deliberately has two declarations:
181
182
 
182
183
  This keeps source traversal, timeline inverses and editor presentation from
183
184
  silently becoming one policy. Studio resolves the declarations against the
184
- current Source closure, publishes only real writable fields, renders all DOM
185
- and CSS itself, and commits changes through `parameter.adjust`.
185
+ current Source closure. Visible read-only bindings render as text alongside editable fields.
186
+ A projected entity can also supply `inspector` values with an `id`, `label`, `domain`, `section`
187
+ and `value`, such as its resolved interval. These facts need no Source endpoint.
188
+ Only resolved fields with an `edit` endpoint accept `parameter.adjust`. Studio renders all DOM
189
+ and CSS itself; grouping does not grant edit authority.
186
190
 
187
191
  Fields can declare `number` display scaling, supported suffixes, limits and step; `unit` alone is
188
192
  only a label. Select options can carry separate scalar values, labels, descriptions and color/font
@@ -205,3 +209,118 @@ is selected, its field reaches the correct Source or Recipe, and changing it rec
205
209
  For semantic handles, verify the exact marker and its other consumers too. Read-only derived timing
206
210
  is preferable to an invented inverse. The Companion explains the component; its Producers remain
207
211
  responsible for identical video behavior in Studio, seeking and encoded rendering.
212
+
213
+ Compact chrome uses `display.title` as its complete single-line content: a Cue can put its subtitle
214
+ text there and a Use can put its Style name there. It has no separate thumbnail/body region or
215
+ inline duration. Time remains in the tooltip and Companion-selected Inspector facts. Tone and lane
216
+ height are independent declarations; compact does not recognize Caption or Use names.
217
+
218
+ Choose lane tones explicitly. The `blue-muted`, `green-muted`, `magenta-muted`
219
+ and `orange-muted` palette entries provide quieter rows within the same color
220
+ family. For example, content and its presentation Uses can share a hue while
221
+ the Uses take the muted tone. Studio does not derive tone from attachment depth
222
+ or the entity name.
223
+
224
+ ### Internal bands and child Tracks
225
+
226
+ A Track can place independently timed entities in internal `bands`. These strips share its label
227
+ and meet without gaps. Use them for aspects of the same content, such as a bottom strip of
228
+ presentation rules. Keep `attachments` for independently represented child objects with their own
229
+ labels, such as a ranking board's reveals. These declarations affect Studio presentation only.
230
+
231
+ ```ts
232
+ {
233
+ lane: { heightPx: 60 },
234
+ bands: [{
235
+ id: "rules",
236
+ placement: "after",
237
+ heightPx: 15,
238
+ display: "label",
239
+ bindings: [{ name: "style" }],
240
+ inspector: [{
241
+ binding: "style", label: "Style", domain: "how", control: "text",
242
+ section: { id: "presentation", label: "Presentation" },
243
+ }],
244
+ }],
245
+ }
246
+ ```
247
+
248
+ The projection puts `band: "rules"` on the corresponding entity drafts. Other entities remain in
249
+ the main content area. A band can be `before` or `after` that area; declarations retain their order
250
+ within each placement. `display: "label"` fills the strip with entity titles, while `"content"`
251
+ retains the entity's normal chrome and body. An optional `tone` selects another palette entry;
252
+ omission inherits the Track tone. Heights are independent, so a label band can match the 15px
253
+ standard item header.
254
+
255
+ An entity selects either an internal `band` or a child `lane`. Bands retain their own intervals,
256
+ overlap ordering, selection, Inspector declarations and temporal writeback. A rule spanning three
257
+ content blocks stays one entity; Studio does not split it at content boundaries. Band entities stay
258
+ in the Track's `clips` collection, so ordinary selection and editing use the same identities.
259
+
260
+ ### Parameters owned by referenced objects
261
+
262
+ A consumer opts a reference into its owner's parameter Companion:
263
+
264
+ ```ts
265
+ bindings: [{ name: "style", companion: true }]
266
+ ```
267
+
268
+ The package that authors the referenced object contributes through
269
+ `createStudioCompanionHostFacet({ parameters: [...] })`:
270
+
271
+ ```ts
272
+ {
273
+ id: "slide",
274
+ match: { module: myModule, surface: "slide" },
275
+ bindings: [{ name: "distance", writable: true, fallback: 0.25 }],
276
+ inspector: [{
277
+ binding: "distance", label: "Travel", domain: "where",
278
+ section: { id: "path", label: "Path" }, control: "number",
279
+ unit: "%", number: { scale: 100 },
280
+ }],
281
+ }
282
+ ```
283
+
284
+ Studio resolves the actual reference and matches its Module/Surface. It prefixes this object's
285
+ bindings and fields under the consumer reference; the example becomes `style.distance`.
286
+ Nested `referenced` and `recipe` bindings use the same composition. The Use retains its own
287
+ Window and time gestures. Several Uses referencing one Style edit the same source object.
288
+ A project Style can therefore publish controls without replacing the Performance, Sound or
289
+ Caption Track Companion. No parameter Companion means the reference remains visible with only
290
+ its consumer-declared fields.
291
+
292
+ A source or Recipe binding may declare a typed `fallback`, or a function of the authored
293
+ properties for a dependent default. For example, Sound's end gain follows its start gain until
294
+ authored explicitly. The field displays the fallback; the first edit inserts the attribute/property
295
+ in its owning SVML/SVS file. Source recompilation remains the owner of current values.
296
+ Only expose omitted defaults whose insertion preserves valid author semantics; geometry inputs
297
+ whose legality depends on a different Frame form can remain tied to the authored form.
298
+
299
+ Fields without `page` remain visible alongside the selected named page within Where, When or How.
300
+ Read-only and editable fields can share a section. Each package chooses a small useful field set.
301
+
302
+ ### Edit related attributes together
303
+
304
+ A source binding can expose several scalar attributes as one `record` field:
305
+
306
+ ```ts
307
+ { name: "layout", writable: true, attributes: ["mode", "columns"],
308
+ fallback: { mode: "flow" },
309
+ schema: { kind: "oneOf", variants: [
310
+ { kind: "object", fields: { mode: { schema: { kind: "literal", value: "flow" } } } },
311
+ { kind: "object", fields: {
312
+ mode: { schema: { kind: "literal", value: "grid" } },
313
+ columns: { schema: { kind: "number", integer: true, minimum: 1 } },
314
+ } },
315
+ ] } }
316
+ ```
317
+
318
+ The synthetic binding name is editor vocabulary; it creates no `layout` Source attribute.
319
+ The field's `control: "record"` saves a complete, valid value when editing ends. Object alternatives with a shared, distinct
320
+ literal field provide a mode selector; selecting one prepares that alternative's fields.
321
+ Incomplete values stay in the editor with a completion hint until the required fields are filled.
322
+ Only the declared attributes are replaced together. Omitted members are removed, while unrelated
323
+ attributes, references and child content survive. Existing references within the group remain
324
+ read-only. Domain validation still owns valid author values; existing transactions reject an
325
+ invalid edit without leaving invalid Source behind. Source grouping is available on direct and
326
+ referenced element bindings and stays data-only across the editor boundary.
@@ -21,18 +21,21 @@ export type StudioIcon =
21
21
  /** Studio-owned visual palette. Domain families never become CSS selectors. */
22
22
  export type StudioTimelineTone =
23
23
  | "blue"
24
+ | "blue-muted"
24
25
  | "green"
26
+ | "green-muted"
25
27
  | "teal"
26
28
  | "violet"
27
29
  | "magenta"
30
+ | "magenta-muted"
28
31
  | "orange"
29
32
  | "orange-muted"
30
33
  | "neutral";
31
34
 
32
35
  export type StudioTimelinePresentation = {
33
36
  readonly entity: string;
34
- /** Studio-owned shell. It never decides whether title, time or body exists. */
35
- readonly chrome: "standard" | "group" | "point";
37
+ /** Studio-owned shell. Compact presents the primary label in one line, with time in details. */
38
+ readonly chrome: "standard" | "group" | "point" | "compact";
36
39
  };
37
40
 
38
41
  export type StudioTemporalSource = {
@@ -140,6 +143,12 @@ export type StudioNumberPresentation = {
140
143
  readonly step?: number;
141
144
  };
142
145
 
146
+ /** Attribute ranges are relative to the owning element's source preimage. */
147
+ export type StudioAttributeGroupEdit = {
148
+ readonly insertionOffset: number;
149
+ readonly ranges: Readonly<Record<string, Range | null>>;
150
+ };
151
+
143
152
  /** A real author endpoint. Its existence never implies Inspector visibility. */
144
153
  export type StudioSourceBinding = {
145
154
  readonly id: string;
@@ -162,10 +171,11 @@ export type StudioSourceBinding = {
162
171
  readonly prefix?: string;
163
172
  readonly suffix?: string;
164
173
  };
174
+ readonly attributes?: StudioAttributeGroupEdit;
165
175
  readonly disabledReason?: string;
166
176
  };
167
177
 
168
- export type StudioInspectorDomain = "where" | "how" | "when";
178
+ export type StudioInspectorDomain = "where" | "when" | "how";
169
179
 
170
180
  export type StudioInspectorPageDeclaration = {
171
181
  readonly id: string;
@@ -177,7 +187,7 @@ export type StudioInspectorSectionDeclaration = {
177
187
  readonly label: string;
178
188
  };
179
189
 
180
- /** One visible, writable field selected from a Companion's source bindings. */
190
+ /** One visible field selected from a Companion's source bindings. */
181
191
  export type StudioInspectorFieldDeclaration = {
182
192
  readonly binding: string;
183
193
  readonly label: string;
@@ -196,14 +206,25 @@ export type StudioInspectorFieldDeclaration = {
196
206
  readonly swatches?: readonly string[];
197
207
  };
198
208
 
199
- /** Resolved Inspector DTO. Studio renders it and executes its exact source write. */
200
- export type StudioInspectorField = Omit<StudioInspectorFieldDeclaration, "control"> & {
209
+ /** A selected entity's package-owned fact, with no author write endpoint. */
210
+ export type StudioInspectorValue = Pick<StudioInspectorFieldDeclaration,
211
+ "label" | "domain" | "page" | "section" | "summary" | "unit"> & {
212
+ readonly id: string;
213
+ readonly value: CanonicalValue;
214
+ };
215
+
216
+ /** Display and edit authority are independent of the Where / When / How grouping. */
217
+ export type StudioInspectorField = Omit<StudioInspectorFieldDeclaration, "binding" | "control"> & {
218
+ readonly binding?: string;
201
219
  readonly id: string;
202
220
  readonly control: StudioParameterControl;
203
221
  readonly value: CanonicalValue;
204
222
  readonly schema?: ValueSchema;
205
- readonly language: StudioParameterLanguage;
206
- readonly source: StudioSourceBinding["source"];
223
+ readonly edit?: {
224
+ readonly language: StudioParameterLanguage;
225
+ readonly source: StudioSourceBinding["source"];
226
+ readonly attributes?: StudioAttributeGroupEdit;
227
+ };
207
228
  };
208
229
 
209
230
  /** Companion-owned source allowlist. It contains no editor presentation. */
@@ -211,6 +232,12 @@ export type StudioSourceBindingDeclaration = {
211
232
  readonly name: string;
212
233
  readonly writable?: boolean;
213
234
  readonly schema?: ValueSchema;
235
+ /** Typed value used when this editable attribute is omitted. */
236
+ readonly fallback?: CanonicalValue | ((authored: Readonly<Record<string, CanonicalValue>>) => CanonicalValue | undefined);
237
+ /** Compose the referenced object's package-owned parameter Companion. */
238
+ readonly companion?: boolean;
239
+ /** Edit these scalar attributes together as one schema-described record. */
240
+ readonly attributes?: readonly string[];
214
241
  /** Optional declaration for the authored element named by a reference. */
215
242
  readonly referenced?: readonly StudioSourceBindingDeclaration[];
216
243
  /**
@@ -234,7 +261,7 @@ export type StudioRecipeBindingDeclaration = {
234
261
  /** Domain-owned public Recipe value structure, never editor presentation. */
235
262
  readonly schema?: ValueSchema;
236
263
  /** Typed public fallback; Studio writes the property only after the author changes it. */
237
- readonly fallback?: CanonicalValue;
264
+ readonly fallback?: CanonicalValue | ((authored: Readonly<Record<string, CanonicalValue>>) => CanonicalValue | undefined);
238
265
  };
239
266
 
240
267
  export type StudioTimelineGesture =
@@ -323,7 +350,7 @@ export type StudioDisplayLayer =
323
350
  };
324
351
 
325
352
  export type StudioEntityDisplay = {
326
- /** First row. Studio always places computed time immediately after it. */
353
+ /** Primary label: a header in standard chrome, the complete single-line content in compact chrome. */
327
354
  readonly title: string;
328
355
  /** Ordered back-to-front body layers. */
329
356
  readonly layers: readonly StudioDisplayLayer[];
@@ -486,7 +513,7 @@ export type StudioResolvedTrack = {
486
513
  };
487
514
 
488
515
  export type StudioViewRole =
489
- | "semantic-track"
516
+ | "timeline"
490
517
  | "supporting-value"
491
518
  | "track";
492
519
 
@@ -514,10 +541,16 @@ export type StudioEntityDraft = {
514
541
  readonly renderIds?: readonly string[];
515
542
  /** Resolved author references that differ per derived entity, such as one Cue's actual Style. */
516
543
  readonly parameterReferences?: Readonly<Record<string, string>>;
544
+ /** Disjoint displayed intervals belonging to one selectable author entity. */
545
+ readonly selectionGroup?: string;
546
+ /** Deliberately selected facts, presented beside bound Inspector fields. */
547
+ readonly inspector?: readonly StudioInspectorValue[];
517
548
  readonly presentation?: StudioTimelinePresentation;
518
549
  readonly temporal?: StudioTemporalLineage;
519
- /** Studio-local lane partition; omitted means the root lane. */
550
+ /** Independent child Track partition; omitted means this Track. */
520
551
  readonly lane?: string;
552
+ /** Internal band of this Track; mutually exclusive with lane. */
553
+ readonly band?: string;
521
554
  };
522
555
 
523
556
  export type StudioTrackCompanionContext = {
@@ -550,6 +583,8 @@ export type StudioTrackCompanion = {
550
583
  /** Opts root timeline entities into the component's package-owned Surface preview. */
551
584
  readonly poster?: { readonly source: "surface-preview" };
552
585
  readonly attachments?: readonly StudioLaneAttachment[];
586
+ /** Internal bands share this Track’s label and contain independently timed entities. */
587
+ readonly bands?: readonly StudioTrackBand[];
553
588
  /** Same-Surface output values required to project this Track for Studio. */
554
589
  readonly requiredValues?: readonly string[];
555
590
  readonly lane?: StudioLaneDescription;
@@ -560,11 +595,20 @@ export type StudioTrackCompanion = {
560
595
  readonly project?: (context: StudioTrackCompanionContext) => readonly StudioEntityDraft[];
561
596
  };
562
597
 
598
+ /** Parameters owned by an authored object, independently of its consumers. */
599
+ export type StudioParameterCompanion = {
600
+ readonly id: string;
601
+ readonly match: { readonly module: ModuleRef; readonly surface: string };
602
+ readonly bindings: readonly StudioSourceBindingDeclaration[];
603
+ readonly inspector: readonly StudioInspectorFieldDeclaration[];
604
+ };
605
+
563
606
  export type StudioCompanionContribution = {
564
607
  readonly format: "hypit.studio-companions@1";
565
608
  readonly tracks: readonly StudioTrackCompanion[];
566
609
  readonly films?: readonly StudioFilmCompanion[];
567
610
  readonly scripts?: readonly StudioScriptCompanion[];
611
+ readonly parameters?: readonly StudioParameterCompanion[];
568
612
  };
569
613
 
570
614
  /** Declarative Film boundary. Studio follows only the references named here. */
@@ -605,6 +649,13 @@ export type StudioScriptAdjustment =
605
649
  | { readonly kind: "selection"; readonly id: string; readonly startAnchorId: string; readonly endAnchorId: string }
606
650
  | { readonly kind: "moment"; readonly id: string; readonly anchorId: string };
607
651
 
652
+ export type StudioScriptProjection = Pick<StudioSemanticTimeline, "anchors" | "segments" | "tokens" | "selections" | "moments">;
653
+ export type StudioScriptProjectionInput = {
654
+ readonly source: StudioScriptSourceMap;
655
+ readonly values: readonly StudioObservedValue[];
656
+ readonly anchors: ReadonlyMap<string, number>;
657
+ };
658
+
608
659
  /** Script grammar companion. It owns source observation and semantic inverse edits. */
609
660
  export type StudioScriptCompanion = {
610
661
  readonly id: string;
@@ -619,6 +670,7 @@ export type StudioScriptCompanion = {
619
670
  readonly nextOffset?: number;
620
671
  readonly attributes: Readonly<Record<string, unknown>>;
621
672
  }) => Omit<StudioScriptSourceMap, "companion"> | undefined;
673
+ readonly project?: (input: StudioScriptProjectionInput) => StudioScriptProjection;
622
674
  readonly adjust: (input: {
623
675
  readonly sourceName: string;
624
676
  readonly source: string;
@@ -642,6 +694,7 @@ export function createStudioCompanionHostFacet(input: {
642
694
  readonly tracks?: readonly StudioTrackCompanion[];
643
695
  readonly films?: readonly StudioFilmCompanion[];
644
696
  readonly scripts?: readonly StudioScriptCompanion[];
697
+ readonly parameters?: readonly StudioParameterCompanion[];
645
698
  }): StudioCompanionHostFacet {
646
699
  return {
647
700
  abi: studioCompanionHostAbi,
@@ -650,6 +703,7 @@ export function createStudioCompanionHostFacet(input: {
650
703
  tracks: input.tracks ?? [],
651
704
  ...(input.films === undefined ? {} : { films: input.films }),
652
705
  ...(input.scripts === undefined ? {} : { scripts: input.scripts }),
706
+ ...(input.parameters === undefined ? {} : { parameters: input.parameters }),
653
707
  },
654
708
  };
655
709
  }
@@ -658,6 +712,7 @@ export type StudioPackageContribution = {
658
712
  readonly tracks: readonly StudioTrackCompanion[];
659
713
  readonly films: readonly StudioFilmCompanion[];
660
714
  readonly scripts: readonly StudioScriptCompanion[];
715
+ readonly parameters: readonly StudioParameterCompanion[];
661
716
  };
662
717
 
663
718
  function qualify(owner: string, local: string, subject: string): string {
@@ -675,6 +730,7 @@ export function studioContributionFromPackage(
675
730
  const tracks: StudioTrackCompanion[] = [];
676
731
  const films: StudioFilmCompanion[] = [];
677
732
  const scripts: StudioScriptCompanion[] = [];
733
+ const parameters: StudioParameterCompanion[] = [];
678
734
  for (const facet of facets) {
679
735
  if (facet.abi !== studioCompanionHostAbi) continue;
680
736
  const contribution = facet.implementation as Partial<StudioCompanionContribution>;
@@ -689,12 +745,15 @@ export function studioContributionFromPackage(
689
745
  ...film,
690
746
  id: qualify(owner, film.id, "Studio Film companion"),
691
747
  })));
748
+ parameters.push(...(contribution.parameters ?? []).map((parameter) => ({
749
+ ...parameter, id: qualify(owner, parameter.id, "Studio Parameter companion"),
750
+ })));
692
751
  scripts.push(...(contribution.scripts ?? []).map((script) => ({
693
752
  ...script,
694
753
  id: qualify(owner, script.id, "Studio Script companion"),
695
754
  })));
696
755
  }
697
- return { tracks, films, scripts };
756
+ return { tracks, films, scripts, parameters };
698
757
  }
699
758
 
700
759
  /**
@@ -708,6 +767,18 @@ export function studioTrackCompanionsFromPackage(
708
767
  return studioContributionFromPackage(owner, facets).tracks;
709
768
  }
710
769
 
770
+ /** A contiguous internal strip, not a child Track. Declaration order is visual order. */
771
+ export type StudioTrackBand = {
772
+ readonly id: string;
773
+ readonly placement: "before" | "after";
774
+ readonly heightPx: number;
775
+ /** Label bands use the whole strip for each entity's title; content bands retain its chrome. */
776
+ readonly display: "label" | "content";
777
+ readonly tone?: StudioTimelineTone;
778
+ readonly bindings?: readonly StudioSourceBindingDeclaration[];
779
+ readonly inspector?: readonly StudioInspectorFieldDeclaration[];
780
+ };
781
+
711
782
  export type StudioLaneAttachment = {
712
783
  readonly id: string;
713
784
  readonly family: StudioTrackFamily;
@@ -836,6 +907,22 @@ export function temporalSemanticSource(lineage: StudioTemporalLineage | undefine
836
907
  : undefined;
837
908
  }
838
909
 
910
+ /** A package chooses which source references can name an otherwise unnamed Item. */
911
+ export function authoredItemTitle(
912
+ context: StudioTrackCompanionContext,
913
+ authoredId: string,
914
+ sourceTypes: readonly TypeRef[],
915
+ sourceAttributes: readonly string[],
916
+ ): string {
917
+ const child = authoredChildFor(context, authoredId, sourceTypes);
918
+ if (child?.attributes.id) return child.attributes.id;
919
+ for (const attribute of sourceAttributes) {
920
+ const reference = child?.referenceAttributes[attribute];
921
+ if (reference) return reference;
922
+ }
923
+ return authoredId;
924
+ }
925
+
839
926
  export function childEntities(
840
927
  context: StudioTrackCompanionContext,
841
928
  items: readonly {
@@ -12,20 +12,20 @@ or editor metadata. A graph-qualified projection `id` and its author-facing `sub
12
12
  on purpose.
13
13
 
14
14
  Author syntax does not live here. `@hypit/temporal-markup` lowers SVML timing forms into ordinary
15
- Instant projection and Window composition operations. The graph supplies ProgramSpace separately;
16
- domain components receive only ProgramSpace plus the resulting Instant or Window and never locate a
15
+ Instant projection and Window composition operations. The graph supplies one Timeline;
16
+ domain components receive that Timeline plus the resulting Instant or Window and never locate a
17
17
  Selection, Segment or Moment themselves.
18
18
 
19
19
  Every official consumer verifies the projection at its public boundary: `subjectId` must name the
20
- domain object being built, both endpoints must retain one ProgramSpace, and that identity
21
- must equal the explicitly supplied ProgramSpace. ProgramSpace is therefore an ordinary graph input
20
+ domain object being built, both endpoints must retain one time-range identity, and that identity
21
+ must equal the explicitly supplied Timeline. Timeline is therefore an ordinary graph input
22
22
  to the consumer, not ambient renderer state.
23
23
 
24
24
  Temporal rejects Instants outside ProgramSpace and Windows that are reversed or empty. It does not
25
25
  clip or repair author time. The package also provides sibling-window validation and triggered-stage
26
26
  scheduling, but no renderer, Provider, media policy or Studio behavior.
27
27
 
28
- Program-bound projection receives ProgramSpace directly. Semantic-bound projection receives the
29
- SemanticTrack that locates its Script anchors. Both produce the same Instant type; program-bound
28
+ All projection Producers receive Timeline. Program-bound projection uses its complete range;
29
+ semantic-bound projection locates its Script anchors. Both produce the same Instant type; program-bound
30
30
  sources have no Narrative identity. A Window can combine a semantic endpoint with a program endpoint
31
31
  on the same time axis. `absolute` expressions may include a duration offset, as used by `at`/`for`.
@@ -15,6 +15,6 @@
15
15
  "@hypit/narrative": "workspace:*",
16
16
  "@hypit/program-space": "workspace:*",
17
17
  "@hypit/protocol": "workspace:*",
18
- "@hypit/semantic-track": "workspace:*"
18
+ "@hypit/timeline": "workspace:*"
19
19
  }
20
20
  }
@@ -2,8 +2,7 @@ import type { ComponentPackage, ProducerHandlerContext } from "@hypit/component-
2
2
  import { canonicalize } from "@hypit/protocol";
3
3
  import type { StoredValue } from "@hypit/protocol";
4
4
  import type { NarrativeExcerpt, NarrativeMomentRef, NarrativeSelectionRef } from "@hypit/narrative";
5
- import type { ProgramSpace } from "@hypit/program-space";
6
- import type { SemanticTrack } from "@hypit/semantic-track";
5
+ import type { Timeline } from "@hypit/timeline";
7
6
 
8
7
  import {
9
8
  composeTemporalWindow,
@@ -31,14 +30,14 @@ export const temporalComponent = {
31
30
  { producer: temporalProducers.projectProgramInstant, handler: ({ inputs }) => ({ outputs: { instant: output(projectProgramInstant({
32
31
  itemId: instantSpec(inputs).id,
33
32
  subjectId: instantSpec(inputs).subjectId,
34
- space: inline<ProgramSpace>(inputs.space?.value, "ProgramSpace"),
33
+ timeline: inline<Timeline>(inputs.timeline?.value, "Timeline"),
35
34
  projection: instantSpec(inputs).projection,
36
35
  authority: instantSpec(inputs).authority,
37
36
  })) }, needs: {} }) },
38
37
  { producer: temporalProducers.projectSelectionInstant, handler: ({ inputs }) => ({ outputs: { instant: output(projectSelectionInstant({
39
38
  itemId: instantSpec(inputs).id,
40
39
  subjectId: instantSpec(inputs).subjectId,
41
- semantic: inline<SemanticTrack>(inputs.semantic?.value, "SemanticTrack"),
40
+ timeline: inline<Timeline>(inputs.timeline?.value, "Timeline"),
42
41
  selection: inline<NarrativeSelectionRef>(inputs.selection?.value, "NarrativeSelection"),
43
42
  projection: instantSpec(inputs).projection,
44
43
  authority: instantSpec(inputs).authority,
@@ -46,7 +45,7 @@ export const temporalComponent = {
46
45
  { producer: temporalProducers.projectSegmentInstant, handler: ({ inputs }) => ({ outputs: { instant: output(projectSegmentInstant({
47
46
  itemId: instantSpec(inputs).id,
48
47
  subjectId: instantSpec(inputs).subjectId,
49
- semantic: inline<SemanticTrack>(inputs.semantic?.value, "SemanticTrack"),
48
+ timeline: inline<Timeline>(inputs.timeline?.value, "Timeline"),
50
49
  segment: inline<NarrativeExcerpt>(inputs.segment?.value, "NarrativeExcerpt"),
51
50
  projection: instantSpec(inputs).projection,
52
51
  authority: instantSpec(inputs).authority,
@@ -54,7 +53,7 @@ export const temporalComponent = {
54
53
  { producer: temporalProducers.projectMomentInstant, handler: ({ inputs }) => ({ outputs: { instant: output(projectMomentInstant({
55
54
  itemId: instantSpec(inputs).id,
56
55
  subjectId: instantSpec(inputs).subjectId,
57
- semantic: inline<SemanticTrack>(inputs.semantic?.value, "SemanticTrack"),
56
+ timeline: inline<Timeline>(inputs.timeline?.value, "Timeline"),
58
57
  moment: inline<NarrativeMomentRef>(inputs.moment?.value, "NarrativeMoment"),
59
58
  projection: instantSpec(inputs).projection,
60
59
  authority: instantSpec(inputs).authority,
@@ -1,6 +1,6 @@
1
1
  import type { ModuleManifest, ProducerRef, TypeRef, ValueSchema } from "@hypit/protocol";
2
2
  import { narrativeDependency, narrativeTypes } from "@hypit/narrative";
3
- import { semanticTrackDependency, semanticTrackTypes } from "@hypit/semantic-track";
3
+ import { timelineDependency, timelineTypes } from "@hypit/timeline";
4
4
  import { programSpaceDependency, programSpaceTypes } from "@hypit/program-space";
5
5
 
6
6
  const string = { kind: "string", minLength: 1 } as const;
@@ -65,7 +65,7 @@ export const temporalManifest: ModuleManifest = {
65
65
  format: "hypit.module@1",
66
66
  name: temporalModuleRef.name,
67
67
  version: temporalModuleRef.version,
68
- dependencies: [narrativeDependency, programSpaceDependency, semanticTrackDependency],
68
+ dependencies: [narrativeDependency, programSpaceDependency, timelineDependency],
69
69
  types: [
70
70
  { name: temporalTypes.instantSpec.name },
71
71
  { name: temporalTypes.instant.name },
@@ -75,16 +75,16 @@ export const temporalManifest: ModuleManifest = {
75
75
  capabilities: [],
76
76
  producers: [
77
77
  { name: temporalProducers.projectProgramInstant.name,
78
- inputs: [{ name: "space", type: programSpaceTypes.programSpace }, { name: "spec", type: temporalTypes.instantSpec }],
78
+ inputs: [{ name: "timeline", type: timelineTypes.track }, { name: "spec", type: temporalTypes.instantSpec }],
79
79
  outputs: [{ name: "instant", type: temporalTypes.instant }], needs: [] },
80
80
  { name: temporalProducers.projectSelectionInstant.name,
81
- inputs: [{ name: "semantic", type: semanticTrackTypes.track }, { name: "selection", type: narrativeTypes.selection }, { name: "spec", type: temporalTypes.instantSpec }],
81
+ inputs: [{ name: "timeline", type: timelineTypes.track }, { name: "selection", type: narrativeTypes.selection }, { name: "spec", type: temporalTypes.instantSpec }],
82
82
  outputs: [{ name: "instant", type: temporalTypes.instant }], needs: [] },
83
83
  { name: temporalProducers.projectSegmentInstant.name,
84
- inputs: [{ name: "semantic", type: semanticTrackTypes.track }, { name: "segment", type: narrativeTypes.excerpt }, { name: "spec", type: temporalTypes.instantSpec }],
84
+ inputs: [{ name: "timeline", type: timelineTypes.track }, { name: "segment", type: narrativeTypes.excerpt }, { name: "spec", type: temporalTypes.instantSpec }],
85
85
  outputs: [{ name: "instant", type: temporalTypes.instant }], needs: [] },
86
86
  { name: temporalProducers.projectMomentInstant.name,
87
- inputs: [{ name: "semantic", type: semanticTrackTypes.track }, { name: "moment", type: narrativeTypes.moment }, { name: "spec", type: temporalTypes.instantSpec }],
87
+ inputs: [{ name: "timeline", type: timelineTypes.track }, { name: "moment", type: narrativeTypes.moment }, { name: "spec", type: temporalTypes.instantSpec }],
88
88
  outputs: [{ name: "instant", type: temporalTypes.instant }], needs: [] },
89
89
  { name: temporalProducers.composeWindow.name,
90
90
  inputs: [{ name: "spec", type: temporalTypes.windowSpec }, { name: "start", type: temporalTypes.instant }, { name: "end", type: temporalTypes.instant }],
@@ -108,3 +108,5 @@ export const temporalWindowSchema: ValueSchema = object({
108
108
  end: { schema: temporalInstantSchema },
109
109
  span: { schema: frameSpanSchema },
110
110
  });
111
+
112
+ export { durationInFrames } from "./rational.js";
@@ -2,11 +2,11 @@ import type { NarrativeExcerpt, NarrativeMomentRef, NarrativeSelectionRef } from
2
2
  import { programSpaceFrameCount } from "@hypit/program-space";
3
3
  import {
4
4
  momentFrame,
5
- projectSemanticProgramSpace,
5
+ projectTimelineSpace,
6
6
  segmentFrameSpan,
7
7
  selectionFrameSpan,
8
- } from "@hypit/semantic-track";
9
- import type { SemanticTrack } from "@hypit/semantic-track";
8
+ } from "@hypit/timeline";
9
+ import type { Timeline } from "@hypit/timeline";
10
10
 
11
11
  import type {
12
12
  LocatedMoment,
@@ -22,10 +22,10 @@ function assertLocatedFrame(frame: number, totalFrames: number, label: string):
22
22
  }
23
23
 
24
24
  export function locateSelection(
25
- semantic: SemanticTrack,
25
+ semantic: Timeline,
26
26
  selection: NarrativeSelectionRef,
27
27
  ): LocatedSelection {
28
- const space = projectSemanticProgramSpace(semantic);
28
+ const space = projectTimelineSpace(semantic);
29
29
  const totalFrames = programSpaceFrameCount(space);
30
30
  const span = selectionFrameSpan(semantic, selection);
31
31
  assertLocatedFrame(span.startFrame, totalFrames, `NarrativeSelection ${selection.id} start`);
@@ -34,26 +34,26 @@ export function locateSelection(
34
34
  }
35
35
 
36
36
  export function locateMoment(
37
- semantic: SemanticTrack,
37
+ semantic: Timeline,
38
38
  moment: NarrativeMomentRef,
39
39
  ): LocatedMoment {
40
- const space = projectSemanticProgramSpace(semantic);
40
+ const space = projectTimelineSpace(semantic);
41
41
  const totalFrames = programSpaceFrameCount(space);
42
42
  const frame = momentFrame(semantic, moment);
43
43
  assertLocatedFrame(frame, totalFrames, `NarrativeMoment ${moment.id} cue`);
44
44
  return { id: moment.id, cue: { frame } };
45
45
  }
46
46
 
47
- export function locateProgram(semantic: SemanticTrack): LocatedProgram {
48
- const space = projectSemanticProgramSpace(semantic);
47
+ export function locateProgram(semantic: Timeline): LocatedProgram {
48
+ const space = projectTimelineSpace(semantic);
49
49
  return { id: "program", start: { frame: 0 }, end: { frame: programSpaceFrameCount(space) } };
50
50
  }
51
51
 
52
52
  export function locateSegment(
53
- semantic: SemanticTrack,
53
+ semantic: Timeline,
54
54
  segment: NarrativeExcerpt,
55
55
  ): LocatedSegment {
56
- const space = projectSemanticProgramSpace(semantic);
56
+ const space = projectTimelineSpace(semantic);
57
57
  const totalFrames = programSpaceFrameCount(space);
58
58
  const span = segmentFrameSpan(semantic, segment);
59
59
  assertLocatedFrame(span.startFrame, totalFrames, `Narrative Segment ${segment.id} start`);