@omnimedia/omnitool 1.1.0-9 → 1.1.0-91

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 (448) hide show
  1. package/README.md +358 -73
  2. package/package.json +19 -17
  3. package/s/context.ts +0 -7
  4. package/s/demo/demo.bundle.ts +104 -43
  5. package/s/demo/demo.css +244 -14
  6. package/s/demo/routines/export-test.ts +16 -0
  7. package/s/demo/routines/filmstrip-test.ts +22 -18
  8. package/s/demo/routines/load-video.ts +2 -3
  9. package/s/demo/routines/playback-test.ts +61 -0
  10. package/s/demo/routines/timeline-setup.ts +49 -0
  11. package/s/demo/routines/transcode-test.ts +19 -5
  12. package/s/demo/routines/transitions-test.ts +2 -2
  13. package/s/demo/routines/waveform-test.ts +35 -8
  14. package/s/driver/driver-worker.ts +9 -0
  15. package/s/driver/driver.test.ts +1 -1
  16. package/s/driver/driver.ts +43 -42
  17. package/s/driver/fns/schematic.ts +26 -6
  18. package/s/driver/fns/work.ts +65 -189
  19. package/s/driver/parts/compositor.ts +316 -0
  20. package/s/driver/parts/machina.ts +19 -20
  21. package/s/driver/utils/find-pixi-filter.ts +24 -0
  22. package/s/index.html.ts +103 -25
  23. package/s/index.ts +1 -0
  24. package/s/tests.bundle.ts +11 -0
  25. package/s/tests.html.ts +28 -0
  26. package/s/timeline/index.ts +9 -1
  27. package/s/timeline/parts/animations/make.ts +38 -0
  28. package/s/timeline/parts/animations/presets.ts +138 -0
  29. package/s/timeline/parts/animations/properties.ts +30 -0
  30. package/s/timeline/parts/animations/registry.ts +13 -0
  31. package/s/timeline/parts/animations/types.ts +80 -0
  32. package/s/timeline/parts/filmstrip.ts +43 -16
  33. package/s/timeline/parts/filters.ts +453 -0
  34. package/s/timeline/parts/item.ts +59 -7
  35. package/s/timeline/parts/media.ts +12 -2
  36. package/s/timeline/parts/resource-pool.ts +8 -5
  37. package/s/timeline/parts/resource.ts +3 -0
  38. package/s/timeline/parts/waveform/parts/collect.ts +72 -0
  39. package/s/timeline/parts/waveform/parts/render.ts +45 -0
  40. package/s/timeline/parts/waveform/parts/types.ts +24 -0
  41. package/s/timeline/parts/waveform/waveform.ts +161 -0
  42. package/s/timeline/renderers/export/parts/audio-gain.ts +17 -0
  43. package/s/timeline/renderers/export/parts/audio-mix.ts +133 -0
  44. package/s/timeline/renderers/export/parts/cursor.ts +292 -0
  45. package/s/timeline/renderers/export/parts/produce-audio.ts +64 -0
  46. package/s/timeline/renderers/export/parts/produce-video.ts +49 -0
  47. package/s/timeline/renderers/export/parts/resamplers.ts +48 -0
  48. package/s/timeline/renderers/export/produce.ts +28 -0
  49. package/s/timeline/renderers/parts/handy.ts +418 -0
  50. package/s/timeline/renderers/parts/samplers/audio/parts/find.ts +19 -0
  51. package/s/timeline/renderers/parts/samplers/audio/parts/init.ts +60 -0
  52. package/s/timeline/renderers/parts/samplers/audio/parts/sink.ts +38 -0
  53. package/s/timeline/renderers/parts/samplers/audio/parts/types.ts +16 -0
  54. package/s/timeline/renderers/parts/samplers/audio/sampler.ts +35 -0
  55. package/s/timeline/renderers/parts/samplers/visual/parts/defaults.ts +16 -0
  56. package/s/timeline/renderers/parts/samplers/visual/parts/sample.ts +69 -0
  57. package/s/timeline/renderers/parts/samplers/visual/parts/sequence.ts +111 -0
  58. package/s/timeline/renderers/parts/samplers/visual/parts/sink.ts +38 -0
  59. package/s/timeline/renderers/parts/samplers/visual/parts/transition.ts +28 -0
  60. package/s/timeline/renderers/parts/samplers/visual/parts/types.ts +10 -0
  61. package/s/timeline/renderers/parts/samplers/visual/sampler.ts +28 -0
  62. package/s/timeline/renderers/parts/schedulers.ts +96 -0
  63. package/s/timeline/renderers/player/parts/playback.ts +213 -0
  64. package/s/timeline/renderers/player/player.ts +86 -0
  65. package/s/timeline/renderers/renderers.test.ts +403 -0
  66. package/s/timeline/sugar/helpers.ts +215 -0
  67. package/s/timeline/sugar/o.ts +274 -54
  68. package/s/timeline/sugar/omni.test.ts +210 -0
  69. package/s/timeline/sugar/omni.ts +25 -9
  70. package/s/timeline/types.ts +36 -3
  71. package/s/timeline/utils/anim.ts +63 -0
  72. package/s/timeline/utils/checksum.ts +3 -1
  73. package/s/timeline/utils/datafile.ts +15 -4
  74. package/s/timeline/utils/dummy-data.ts +3 -3
  75. package/s/timeline/utils/matrix.ts +21 -0
  76. package/s/timeline/utils/terps.ts +81 -0
  77. package/s/units/fps.ts +8 -0
  78. package/s/units/ms.ts +8 -0
  79. package/s/units/seconds.ts +8 -0
  80. package/x/WebGLRenderer-4CHIZDHY.js +2 -0
  81. package/x/WebGLRenderer-4CHIZDHY.js.map +7 -0
  82. package/x/WebGPURenderer-O6WXU2QR.js +2 -0
  83. package/x/WebGPURenderer-O6WXU2QR.js.map +7 -0
  84. package/x/browserAll-WNIOTNNP.js +2 -0
  85. package/x/browserAll-WNIOTNNP.js.map +7 -0
  86. package/x/chunk-23FOBGX6.js +2 -0
  87. package/x/chunk-23FOBGX6.js.map +7 -0
  88. package/x/chunk-73XOWA4F.js +393 -0
  89. package/x/chunk-73XOWA4F.js.map +7 -0
  90. package/x/chunk-IAWJKNX5.js +42 -0
  91. package/x/chunk-IAWJKNX5.js.map +7 -0
  92. package/x/chunk-KCMVLWBS.js +157 -0
  93. package/x/chunk-KCMVLWBS.js.map +7 -0
  94. package/x/chunk-MR32SQ27.js +2 -0
  95. package/x/chunk-MR32SQ27.js.map +7 -0
  96. package/x/chunk-VCUJJYRJ.js +327 -0
  97. package/x/chunk-VCUJJYRJ.js.map +7 -0
  98. package/x/chunk-XNIZ4L5W.js +269 -0
  99. package/x/chunk-XNIZ4L5W.js.map +7 -0
  100. package/x/chunk-ZLGNQFUI.js +15 -0
  101. package/x/chunk-ZLGNQFUI.js.map +7 -0
  102. package/x/context.d.ts +1 -4
  103. package/x/context.js +1 -5
  104. package/x/context.js.map +1 -1
  105. package/x/demo/WebGLRenderer-RSJAHIG2.js +2 -0
  106. package/x/demo/WebGLRenderer-RSJAHIG2.js.map +7 -0
  107. package/x/demo/WebGPURenderer-MGFAJCYY.js +2 -0
  108. package/x/demo/WebGPURenderer-MGFAJCYY.js.map +7 -0
  109. package/x/demo/browserAll-PTRBXBRP.js +2 -0
  110. package/x/demo/browserAll-PTRBXBRP.js.map +7 -0
  111. package/x/demo/chunk-CUYOGHWU.js +42 -0
  112. package/x/demo/chunk-CUYOGHWU.js.map +7 -0
  113. package/x/demo/chunk-DGTDNJ7W.js +2 -0
  114. package/x/demo/chunk-DGTDNJ7W.js.map +7 -0
  115. package/x/demo/chunk-FZ5BYF63.js +15 -0
  116. package/x/demo/chunk-FZ5BYF63.js.map +7 -0
  117. package/x/demo/chunk-KWN4NNES.js +269 -0
  118. package/x/demo/chunk-KWN4NNES.js.map +7 -0
  119. package/x/demo/chunk-OJ3FPXW7.js +157 -0
  120. package/x/demo/chunk-OJ3FPXW7.js.map +7 -0
  121. package/x/demo/chunk-PSLUOGTZ.js +393 -0
  122. package/x/demo/chunk-PSLUOGTZ.js.map +7 -0
  123. package/x/demo/chunk-VLCVEIFU.js +327 -0
  124. package/x/demo/chunk-VLCVEIFU.js.map +7 -0
  125. package/x/demo/chunk-ZWCPT5FR.js +2 -0
  126. package/x/demo/chunk-ZWCPT5FR.js.map +7 -0
  127. package/x/demo/demo.bundle.js +94 -40
  128. package/x/demo/demo.bundle.js.map +1 -1
  129. package/x/demo/demo.bundle.min.js +7340 -90
  130. package/x/demo/demo.bundle.min.js.map +4 -4
  131. package/x/demo/demo.css +244 -14
  132. package/x/demo/routines/export-test.d.ts +2 -0
  133. package/x/demo/routines/export-test.js +10 -0
  134. package/x/demo/routines/export-test.js.map +1 -0
  135. package/x/demo/routines/filmstrip-test.d.ts +1 -1
  136. package/x/demo/routines/filmstrip-test.js +20 -17
  137. package/x/demo/routines/filmstrip-test.js.map +1 -1
  138. package/x/demo/routines/load-video.d.ts +1 -1
  139. package/x/demo/routines/load-video.js +1 -2
  140. package/x/demo/routines/load-video.js.map +1 -1
  141. package/x/demo/routines/playback-test.d.ts +2 -0
  142. package/x/demo/routines/playback-test.js +51 -0
  143. package/x/demo/routines/playback-test.js.map +1 -0
  144. package/x/demo/routines/timeline-setup.d.ts +6 -0
  145. package/x/demo/routines/timeline-setup.js +33 -0
  146. package/x/demo/routines/timeline-setup.js.map +1 -0
  147. package/x/demo/routines/transcode-test.js +15 -5
  148. package/x/demo/routines/transcode-test.js.map +1 -1
  149. package/x/demo/routines/transitions-test.js +2 -2
  150. package/x/demo/routines/transitions-test.js.map +1 -1
  151. package/x/demo/routines/waveform-test.d.ts +2 -1
  152. package/x/demo/routines/waveform-test.js +29 -8
  153. package/x/demo/routines/waveform-test.js.map +1 -1
  154. package/x/demo/webworkerAll-JENRT6BT.js +2 -0
  155. package/x/demo/webworkerAll-JENRT6BT.js.map +7 -0
  156. package/x/driver/driver-worker.d.ts +1 -0
  157. package/x/driver/driver-worker.js +6 -0
  158. package/x/driver/driver-worker.js.map +1 -0
  159. package/x/driver/driver.d.ts +25 -8
  160. package/x/driver/driver.js +43 -39
  161. package/x/driver/driver.js.map +1 -1
  162. package/x/driver/driver.test.js +1 -1
  163. package/x/driver/driver.test.js.map +1 -1
  164. package/x/driver/driver.worker.bundle.min.js +117 -3506
  165. package/x/driver/driver.worker.bundle.min.js.map +4 -4
  166. package/x/driver/fns/host.d.ts +3 -2
  167. package/x/driver/fns/schematic.d.ts +25 -4
  168. package/x/driver/fns/work.d.ts +4 -4
  169. package/x/driver/fns/work.js +55 -155
  170. package/x/driver/fns/work.js.map +1 -1
  171. package/x/driver/parts/compositor.d.ts +39 -0
  172. package/x/driver/parts/compositor.js +261 -0
  173. package/x/driver/parts/compositor.js.map +1 -0
  174. package/x/driver/parts/machina.d.ts +0 -20
  175. package/x/driver/parts/machina.js +6 -10
  176. package/x/driver/parts/machina.js.map +1 -1
  177. package/x/driver/utils/find-pixi-filter.d.ts +5 -0
  178. package/x/driver/utils/find-pixi-filter.js +13 -0
  179. package/x/driver/utils/find-pixi-filter.js.map +1 -0
  180. package/x/features/speech/transcribe/parts/prep-audio.d.ts +1 -1
  181. package/x/features/speech/transcribe/worker.bundle.min.js +899 -899
  182. package/x/features/speech/transcribe/worker.bundle.min.js.map +4 -4
  183. package/x/index.d.ts +1 -0
  184. package/x/index.html +347 -38
  185. package/x/index.html.js +103 -24
  186. package/x/index.html.js.map +1 -1
  187. package/x/index.js +1 -0
  188. package/x/index.js.map +1 -1
  189. package/x/tests.bundle.js +8 -0
  190. package/x/tests.bundle.js.map +1 -0
  191. package/x/tests.bundle.min.js +7374 -0
  192. package/x/tests.bundle.min.js.map +7 -0
  193. package/x/tests.html +316 -0
  194. package/x/tests.html.d.ts +2 -0
  195. package/x/tests.html.js +22 -0
  196. package/x/tests.html.js.map +1 -0
  197. package/x/timeline/index.d.ts +8 -0
  198. package/x/timeline/index.js +8 -0
  199. package/x/timeline/index.js.map +1 -1
  200. package/x/timeline/parts/animations/make.d.ts +3 -0
  201. package/x/timeline/parts/animations/make.js +29 -0
  202. package/x/timeline/parts/animations/make.js.map +1 -0
  203. package/x/timeline/parts/animations/presets.d.ts +170 -0
  204. package/x/timeline/parts/animations/presets.js +135 -0
  205. package/x/timeline/parts/animations/presets.js.map +1 -0
  206. package/x/timeline/parts/animations/properties.d.ts +84 -0
  207. package/x/timeline/parts/animations/properties.js +25 -0
  208. package/x/timeline/parts/animations/properties.js.map +1 -0
  209. package/x/timeline/parts/animations/registry.d.ts +218 -0
  210. package/x/timeline/parts/animations/registry.js +11 -0
  211. package/x/timeline/parts/animations/registry.js.map +1 -0
  212. package/x/timeline/parts/animations/types.d.ts +60 -0
  213. package/x/timeline/parts/animations/types.js.map +1 -0
  214. package/x/timeline/parts/filmstrip.d.ts +4 -3
  215. package/x/timeline/parts/filmstrip.js +29 -10
  216. package/x/timeline/parts/filmstrip.js.map +1 -1
  217. package/x/timeline/parts/filters.d.ts +108 -0
  218. package/x/timeline/parts/filters.js +340 -0
  219. package/x/timeline/parts/filters.js.map +1 -0
  220. package/x/timeline/parts/item.d.ts +47 -4
  221. package/x/timeline/parts/item.js +4 -1
  222. package/x/timeline/parts/item.js.map +1 -1
  223. package/x/timeline/parts/media.d.ts +2 -0
  224. package/x/timeline/parts/media.js +11 -2
  225. package/x/timeline/parts/media.js.map +1 -1
  226. package/x/timeline/parts/resource-pool.d.ts +3 -0
  227. package/x/timeline/parts/resource-pool.js +7 -4
  228. package/x/timeline/parts/resource-pool.js.map +1 -1
  229. package/x/timeline/parts/resource.d.ts +3 -0
  230. package/x/timeline/parts/waveform/parts/collect.d.ts +11 -0
  231. package/x/timeline/parts/waveform/parts/collect.js +56 -0
  232. package/x/timeline/parts/waveform/parts/collect.js.map +1 -0
  233. package/x/timeline/parts/waveform/parts/render.d.ts +5 -0
  234. package/x/timeline/parts/waveform/parts/render.js +29 -0
  235. package/x/timeline/parts/waveform/parts/render.js.map +1 -0
  236. package/x/timeline/parts/waveform/parts/types.d.ts +21 -0
  237. package/x/timeline/parts/waveform/parts/types.js +2 -0
  238. package/x/timeline/parts/waveform/parts/types.js.map +1 -0
  239. package/x/timeline/parts/waveform/waveform.d.ts +19 -0
  240. package/x/timeline/parts/waveform/waveform.js +133 -0
  241. package/x/timeline/parts/waveform/waveform.js.map +1 -0
  242. package/x/timeline/renderers/export/parts/audio-gain.d.ts +1 -0
  243. package/x/timeline/renderers/export/parts/audio-gain.js +13 -0
  244. package/x/timeline/renderers/export/parts/audio-gain.js.map +1 -0
  245. package/x/timeline/renderers/export/parts/audio-mix.d.ts +21 -0
  246. package/x/timeline/renderers/export/parts/audio-mix.js +89 -0
  247. package/x/timeline/renderers/export/parts/audio-mix.js.map +1 -0
  248. package/x/timeline/renderers/export/parts/cursor.d.ts +35 -0
  249. package/x/timeline/renderers/export/parts/cursor.js +237 -0
  250. package/x/timeline/renderers/export/parts/cursor.js.map +1 -0
  251. package/x/timeline/renderers/export/parts/produce-audio.d.ts +6 -0
  252. package/x/timeline/renderers/export/parts/produce-audio.js +41 -0
  253. package/x/timeline/renderers/export/parts/produce-audio.js.map +1 -0
  254. package/x/timeline/renderers/export/parts/produce-video.d.ts +10 -0
  255. package/x/timeline/renderers/export/parts/produce-video.js +26 -0
  256. package/x/timeline/renderers/export/parts/produce-video.js.map +1 -0
  257. package/x/timeline/renderers/export/parts/resamplers.d.ts +12 -0
  258. package/x/timeline/renderers/export/parts/resamplers.js +29 -0
  259. package/x/timeline/renderers/export/parts/resamplers.js.map +1 -0
  260. package/x/timeline/renderers/export/produce.d.ts +13 -0
  261. package/x/timeline/renderers/export/produce.js +15 -0
  262. package/x/timeline/renderers/export/produce.js.map +1 -0
  263. package/x/timeline/renderers/parts/handy.d.ts +36 -0
  264. package/x/timeline/renderers/parts/handy.js +254 -0
  265. package/x/timeline/renderers/parts/handy.js.map +1 -0
  266. package/x/timeline/renderers/parts/samplers/audio/parts/find.d.ts +6 -0
  267. package/x/timeline/renderers/parts/samplers/audio/parts/find.js +15 -0
  268. package/x/timeline/renderers/parts/samplers/audio/parts/find.js.map +1 -0
  269. package/x/timeline/renderers/parts/samplers/audio/parts/init.d.ts +5 -0
  270. package/x/timeline/renderers/parts/samplers/audio/parts/init.js +40 -0
  271. package/x/timeline/renderers/parts/samplers/audio/parts/init.js.map +1 -0
  272. package/x/timeline/renderers/parts/samplers/audio/parts/sink.d.ts +8 -0
  273. package/x/timeline/renderers/parts/samplers/audio/parts/sink.js +24 -0
  274. package/x/timeline/renderers/parts/samplers/audio/parts/sink.js.map +1 -0
  275. package/x/timeline/renderers/parts/samplers/audio/parts/types.d.ts +14 -0
  276. package/x/timeline/renderers/parts/samplers/audio/parts/types.js +2 -0
  277. package/x/timeline/renderers/parts/samplers/audio/parts/types.js.map +1 -0
  278. package/x/timeline/renderers/parts/samplers/audio/sampler.d.ts +11 -0
  279. package/x/timeline/renderers/parts/samplers/audio/sampler.js +22 -0
  280. package/x/timeline/renderers/parts/samplers/audio/sampler.js.map +1 -0
  281. package/x/timeline/renderers/parts/samplers/visual/parts/defaults.d.ts +5 -0
  282. package/x/timeline/renderers/parts/samplers/visual/parts/defaults.js +10 -0
  283. package/x/timeline/renderers/parts/samplers/visual/parts/defaults.js.map +1 -0
  284. package/x/timeline/renderers/parts/samplers/visual/parts/sample.d.ts +6 -0
  285. package/x/timeline/renderers/parts/samplers/visual/parts/sample.js +48 -0
  286. package/x/timeline/renderers/parts/samplers/visual/parts/sample.js.map +1 -0
  287. package/x/timeline/renderers/parts/samplers/visual/parts/sequence.d.ts +6 -0
  288. package/x/timeline/renderers/parts/samplers/visual/parts/sequence.js +75 -0
  289. package/x/timeline/renderers/parts/samplers/visual/parts/sequence.js.map +1 -0
  290. package/x/timeline/renderers/parts/samplers/visual/parts/sink.d.ts +8 -0
  291. package/x/timeline/renderers/parts/samplers/visual/parts/sink.js +24 -0
  292. package/x/timeline/renderers/parts/samplers/visual/parts/sink.js.map +1 -0
  293. package/x/timeline/renderers/parts/samplers/visual/parts/transition.d.ts +3 -0
  294. package/x/timeline/renderers/parts/samplers/visual/parts/transition.js +18 -0
  295. package/x/timeline/renderers/parts/samplers/visual/parts/transition.js.map +1 -0
  296. package/x/timeline/renderers/parts/samplers/visual/parts/types.d.ts +8 -0
  297. package/x/timeline/renderers/parts/samplers/visual/parts/types.js +2 -0
  298. package/x/timeline/renderers/parts/samplers/visual/parts/types.js.map +1 -0
  299. package/x/timeline/renderers/parts/samplers/visual/sampler.d.ts +7 -0
  300. package/x/timeline/renderers/parts/samplers/visual/sampler.js +17 -0
  301. package/x/timeline/renderers/parts/samplers/visual/sampler.js.map +1 -0
  302. package/x/timeline/renderers/parts/schedulers.d.ts +17 -0
  303. package/x/timeline/renderers/parts/schedulers.js +64 -0
  304. package/x/timeline/renderers/parts/schedulers.js.map +1 -0
  305. package/x/timeline/renderers/player/parts/playback.d.ts +39 -0
  306. package/x/timeline/renderers/player/parts/playback.js +160 -0
  307. package/x/timeline/renderers/player/parts/playback.js.map +1 -0
  308. package/x/timeline/renderers/player/player.d.ts +27 -0
  309. package/x/timeline/renderers/player/player.js +64 -0
  310. package/x/timeline/renderers/player/player.js.map +1 -0
  311. package/x/timeline/renderers/renderers.test.d.ts +33 -0
  312. package/x/timeline/renderers/renderers.test.js +321 -0
  313. package/x/timeline/renderers/renderers.test.js.map +1 -0
  314. package/x/timeline/sugar/helpers.d.ts +64 -0
  315. package/x/timeline/sugar/helpers.js +114 -0
  316. package/x/timeline/sugar/helpers.js.map +1 -0
  317. package/x/timeline/sugar/o.d.ts +38 -9
  318. package/x/timeline/sugar/o.js +200 -39
  319. package/x/timeline/sugar/o.js.map +1 -1
  320. package/x/timeline/sugar/omni.d.ts +9 -3
  321. package/x/timeline/sugar/omni.js +20 -7
  322. package/x/timeline/sugar/omni.js.map +1 -1
  323. package/x/timeline/sugar/omni.test.d.ts +27 -0
  324. package/x/timeline/sugar/omni.test.js +128 -0
  325. package/x/timeline/sugar/omni.test.js.map +1 -0
  326. package/x/timeline/types.d.ts +15 -2
  327. package/x/timeline/utils/anim.d.ts +3 -0
  328. package/x/timeline/utils/anim.js +40 -0
  329. package/x/timeline/utils/anim.js.map +1 -0
  330. package/x/timeline/utils/checksum.d.ts +3 -2
  331. package/x/timeline/utils/checksum.js.map +1 -1
  332. package/x/timeline/utils/datafile.d.ts +5 -3
  333. package/x/timeline/utils/datafile.js +18 -5
  334. package/x/timeline/utils/datafile.js.map +1 -1
  335. package/x/timeline/utils/dummy-data.d.ts +1 -2
  336. package/x/timeline/utils/dummy-data.js +4 -2
  337. package/x/timeline/utils/dummy-data.js.map +1 -1
  338. package/x/timeline/utils/matrix.d.ts +9 -0
  339. package/x/timeline/utils/matrix.js +10 -0
  340. package/x/timeline/utils/matrix.js.map +1 -1
  341. package/x/timeline/utils/terps.d.ts +11 -0
  342. package/x/timeline/utils/terps.js +57 -0
  343. package/x/timeline/utils/terps.js.map +1 -0
  344. package/x/units/fps.d.ts +6 -0
  345. package/x/units/fps.js +2 -0
  346. package/x/units/fps.js.map +1 -0
  347. package/x/units/ms.d.ts +6 -0
  348. package/x/units/ms.js +2 -0
  349. package/x/units/ms.js.map +1 -0
  350. package/x/units/seconds.d.ts +6 -0
  351. package/x/units/seconds.js +2 -0
  352. package/x/units/seconds.js.map +1 -0
  353. package/x/webworkerAll-RLCTMSDD.js +2 -0
  354. package/x/webworkerAll-RLCTMSDD.js.map +7 -0
  355. package/s/tests.test.ts +0 -8
  356. package/s/timeline/parts/compositor/export.ts +0 -77
  357. package/s/timeline/parts/compositor/parts/html-tree.ts +0 -37
  358. package/s/timeline/parts/compositor/parts/schedulers.ts +0 -85
  359. package/s/timeline/parts/compositor/parts/tree-builder.ts +0 -184
  360. package/s/timeline/parts/compositor/parts/webcodecs-tree.ts +0 -30
  361. package/s/timeline/parts/compositor/playback.ts +0 -81
  362. package/s/timeline/parts/compositor/samplers/html.ts +0 -115
  363. package/s/timeline/parts/compositor/samplers/webcodecs.ts +0 -60
  364. package/s/timeline/parts/waveform.ts +0 -62
  365. package/s/timeline/sugar/builders.ts +0 -102
  366. package/s/timeline/sugar/omni-test.ts +0 -38
  367. package/s/timeline/utils/audio-stream.ts +0 -15
  368. package/s/timeline/utils/video-cursor.ts +0 -40
  369. package/s/tools/common/loader.ts +0 -26
  370. package/s/tools/common/transformer-pipeline.ts +0 -26
  371. package/s/tools/speech-recognition/common/model.ts +0 -26
  372. package/s/tools/speech-recognition/whisper/fns/host.ts +0 -25
  373. package/s/tools/speech-recognition/whisper/fns/schematic.ts +0 -23
  374. package/s/tools/speech-recognition/whisper/fns/work.ts +0 -91
  375. package/s/tools/speech-recognition/whisper/parts/types.ts +0 -38
  376. package/s/tools/speech-recognition/whisper/parts/worker.bundle.ts +0 -7
  377. package/s/tools/speech-recognition/whisper/tool.ts +0 -70
  378. package/x/tests.test.js +0 -6
  379. package/x/tests.test.js.map +0 -1
  380. package/x/timeline/parts/compositor/export.d.ts +0 -9
  381. package/x/timeline/parts/compositor/export.js +0 -64
  382. package/x/timeline/parts/compositor/export.js.map +0 -1
  383. package/x/timeline/parts/compositor/parts/html-tree.d.ts +0 -3
  384. package/x/timeline/parts/compositor/parts/html-tree.js +0 -40
  385. package/x/timeline/parts/compositor/parts/html-tree.js.map +0 -1
  386. package/x/timeline/parts/compositor/parts/schedulers.d.ts +0 -15
  387. package/x/timeline/parts/compositor/parts/schedulers.js +0 -64
  388. package/x/timeline/parts/compositor/parts/schedulers.js.map +0 -1
  389. package/x/timeline/parts/compositor/parts/tree-builder.d.ts +0 -37
  390. package/x/timeline/parts/compositor/parts/tree-builder.js +0 -147
  391. package/x/timeline/parts/compositor/parts/tree-builder.js.map +0 -1
  392. package/x/timeline/parts/compositor/parts/webcodecs-tree.d.ts +0 -3
  393. package/x/timeline/parts/compositor/parts/webcodecs-tree.js +0 -28
  394. package/x/timeline/parts/compositor/parts/webcodecs-tree.js.map +0 -1
  395. package/x/timeline/parts/compositor/playback.d.ts +0 -19
  396. package/x/timeline/parts/compositor/playback.js +0 -71
  397. package/x/timeline/parts/compositor/playback.js.map +0 -1
  398. package/x/timeline/parts/compositor/samplers/html.d.ts +0 -3
  399. package/x/timeline/parts/compositor/samplers/html.js +0 -106
  400. package/x/timeline/parts/compositor/samplers/html.js.map +0 -1
  401. package/x/timeline/parts/compositor/samplers/webcodecs.d.ts +0 -2
  402. package/x/timeline/parts/compositor/samplers/webcodecs.js +0 -55
  403. package/x/timeline/parts/compositor/samplers/webcodecs.js.map +0 -1
  404. package/x/timeline/parts/waveform.d.ts +0 -8
  405. package/x/timeline/parts/waveform.js +0 -51
  406. package/x/timeline/parts/waveform.js.map +0 -1
  407. package/x/timeline/sugar/builders.d.ts +0 -1
  408. package/x/timeline/sugar/builders.js +0 -104
  409. package/x/timeline/sugar/builders.js.map +0 -1
  410. package/x/timeline/sugar/omni-test.d.ts +0 -1
  411. package/x/timeline/sugar/omni-test.js +0 -22
  412. package/x/timeline/sugar/omni-test.js.map +0 -1
  413. package/x/timeline/utils/audio-stream.d.ts +0 -6
  414. package/x/timeline/utils/audio-stream.js +0 -17
  415. package/x/timeline/utils/audio-stream.js.map +0 -1
  416. package/x/timeline/utils/video-cursor.d.ts +0 -10
  417. package/x/timeline/utils/video-cursor.js +0 -36
  418. package/x/timeline/utils/video-cursor.js.map +0 -1
  419. package/x/tools/common/loader.d.ts +0 -19
  420. package/x/tools/common/loader.js +0 -18
  421. package/x/tools/common/loader.js.map +0 -1
  422. package/x/tools/common/transformer-pipeline.d.ts +0 -8
  423. package/x/tools/common/transformer-pipeline.js +0 -24
  424. package/x/tools/common/transformer-pipeline.js.map +0 -1
  425. package/x/tools/speech-recognition/common/model.d.ts +0 -14
  426. package/x/tools/speech-recognition/common/model.js +0 -16
  427. package/x/tools/speech-recognition/common/model.js.map +0 -1
  428. package/x/tools/speech-recognition/whisper/fns/host.d.ts +0 -13
  429. package/x/tools/speech-recognition/whisper/fns/host.js +0 -19
  430. package/x/tools/speech-recognition/whisper/fns/host.js.map +0 -1
  431. package/x/tools/speech-recognition/whisper/fns/schematic.d.ts +0 -19
  432. package/x/tools/speech-recognition/whisper/fns/schematic.js +0 -2
  433. package/x/tools/speech-recognition/whisper/fns/schematic.js.map +0 -1
  434. package/x/tools/speech-recognition/whisper/fns/work.d.ts +0 -12
  435. package/x/tools/speech-recognition/whisper/fns/work.js +0 -74
  436. package/x/tools/speech-recognition/whisper/fns/work.js.map +0 -1
  437. package/x/tools/speech-recognition/whisper/parts/types.d.ts +0 -31
  438. package/x/tools/speech-recognition/whisper/parts/types.js.map +0 -1
  439. package/x/tools/speech-recognition/whisper/parts/worker.bundle.d.ts +0 -1
  440. package/x/tools/speech-recognition/whisper/parts/worker.bundle.js +0 -4
  441. package/x/tools/speech-recognition/whisper/parts/worker.bundle.js.map +0 -1
  442. package/x/tools/speech-recognition/whisper/parts/worker.bundle.min.js +0 -8
  443. package/x/tools/speech-recognition/whisper/parts/worker.bundle.min.js.map +0 -7
  444. package/x/tools/speech-recognition/whisper/tool.d.ts +0 -12
  445. package/x/tools/speech-recognition/whisper/tool.js +0 -63
  446. package/x/tools/speech-recognition/whisper/tool.js.map +0 -1
  447. /package/x/{tests.test.d.ts → tests.bundle.d.ts} +0 -0
  448. /package/x/{tools/speech-recognition/whisper/parts → timeline/parts/animations}/types.js +0 -0
@@ -0,0 +1,292 @@
1
+
2
+ import {ALL_FORMATS, Input, VideoSampleSink} from "mediabunny"
3
+
4
+ import {ms, Ms} from "../../../../units/ms.js"
5
+ import {Driver} from "../../../../driver/driver.js"
6
+ import {TimelineFile} from "../../../parts/basics.js"
7
+ import {DecoderSource} from "../../../../driver/fns/schematic.js"
8
+ import {loadDecoderSource} from "../../../../driver/utils/load-decoder-source.js"
9
+ import {createVisualSampler} from "../../parts/samplers/visual/sampler.js"
10
+
11
+ type StreamCursor<T> = {
12
+ next(target: number): Promise<T | undefined>
13
+ cancel(): Promise<void>
14
+ }
15
+
16
+ type VideoFrameCursor = StreamCursor<VideoFrame>
17
+
18
+ abstract class BaseVisualSampler {
19
+ readonly #videoCursors = new Map<number, VideoFrameCursor>()
20
+ readonly #sampler
21
+
22
+ constructor(
23
+ protected driver: Driver,
24
+ protected resolveMedia: (hash: string) => DecoderSource,
25
+ protected timeline: TimelineFile
26
+ ) {
27
+ this.#sampler = createVisualSampler(this.resolveMedia, (item, time) => {
28
+ const targetUs = toUs(time)
29
+ let cursor = this.#videoCursors.get(item.id)
30
+
31
+ if (!cursor) {
32
+ const source = this.resolveMedia(item.mediaHash)
33
+ const endUs = toUs(ms(item.start + item.duration))
34
+ cursor = this.createCursor(source, targetUs, endUs)
35
+ this.#videoCursors.set(item.id, cursor)
36
+ }
37
+
38
+ return cursor.next(targetUs)
39
+ })
40
+ }
41
+
42
+ protected abstract createCursor(source: DecoderSource, startUs: number, endUs: number): VideoFrameCursor
43
+
44
+ protected sample(timecode: Ms) {
45
+ return this.#sampler.sample(this.timeline, timecode)
46
+ }
47
+
48
+ async cancel() {
49
+ await Promise.all([...this.#videoCursors.values()].map(c => c.cancel()))
50
+ this.#videoCursors.clear()
51
+ }
52
+ }
53
+
54
+ /**
55
+ * forward-only frame cursor optimized for export purposes.
56
+ * it uses mediabunny internally so the support for non-clients
57
+ * should be done from mediabunny custom decoder/encoder
58
+ */
59
+
60
+ export class CursorVisualSampler extends BaseVisualSampler {
61
+ #lastTimecode = -Infinity
62
+
63
+ next(timecode: Ms) {
64
+ if (timecode < this.#lastTimecode)
65
+ throw new Error(`Forward-only cursor regression: ${timecode}ms < ${this.#lastTimecode}ms`)
66
+
67
+ this.#lastTimecode = timecode
68
+ return this.sample(timecode)
69
+ }
70
+
71
+ protected createCursor(source: DecoderSource, startUs: number, endUs: number): VideoFrameCursor {
72
+ const video = this.driver.decodeVideo({source, start: startUs / 1_000_000, end: endUs / 1_000_000})
73
+ const reader = video.readable.getReader()
74
+
75
+ let current: VideoFrame | null = null
76
+ let nextPromise: Promise<VideoFrame | null> | null = null
77
+ let ended = false
78
+
79
+ const readNext = async () => {
80
+ if (ended) return null
81
+ const {done, value} = await reader.read()
82
+ if (done) return (ended = true, null)
83
+
84
+ const frame = new VideoFrame(value)
85
+ value.close()
86
+ return frame
87
+ }
88
+
89
+ return {
90
+ async next(targetUs: number): Promise<VideoFrame | undefined> {
91
+ current ??= await readNext()
92
+ if (!current) return undefined
93
+
94
+ while (true) {
95
+ nextPromise ??= readNext()
96
+ const nextFrame = await nextPromise
97
+
98
+ if (!nextFrame) return new VideoFrame(current)
99
+
100
+ const currentUs = current.timestamp ?? -Infinity
101
+ const nextUs = nextFrame.timestamp ?? currentUs
102
+
103
+ if (nextUs < targetUs) {
104
+ current.close()
105
+ current = nextFrame
106
+ nextPromise = null
107
+ continue
108
+ }
109
+
110
+ const useNext = Math.abs(nextUs - targetUs) < Math.abs(currentUs - targetUs)
111
+
112
+ if (useNext) {
113
+ current.close()
114
+ current = nextFrame
115
+ nextPromise = null
116
+ continue
117
+ }
118
+
119
+ return new VideoFrame(current)
120
+ }
121
+ },
122
+
123
+ async cancel() {
124
+ const pending = nextPromise
125
+ nextPromise = null
126
+ ended = true
127
+
128
+ const buffered = await pending?.catch(() => null)
129
+ buffered?.close()
130
+
131
+ current?.close()
132
+ current = null
133
+
134
+ video.cancel()
135
+ }
136
+ }
137
+ }
138
+ }
139
+
140
+ export class ReverseCursorVisualSampler extends BaseVisualSampler {
141
+ #lastTimecode = Infinity
142
+
143
+ next(timecode: Ms) {
144
+ if (timecode > this.#lastTimecode)
145
+ throw new Error(`Reverse-only cursor regression: ${timecode}ms > ${this.#lastTimecode}ms`)
146
+
147
+ this.#lastTimecode = timecode
148
+ return this.sample(timecode)
149
+ }
150
+
151
+ protected createCursor(source: DecoderSource, _initialTargetUs: number, endUs: number): VideoFrameCursor {
152
+ const startUs = 0
153
+ const windowUs = 1_000_000
154
+ const prefetchThreshold = windowUs * 0.5
155
+
156
+ let frames: VideoFrame[] = []
157
+ let windowStart = Infinity
158
+ let windowEnd = -Infinity
159
+ let input: Input | null = null
160
+ let sink: VideoSampleSink | null = null
161
+ let prefetchPromise: Promise<{frames: VideoFrame[], windowStart: number, windowEnd: number}> | null = null
162
+ let activeFetches = 0
163
+ let idle: Promise<void> = Promise.resolve()
164
+ let resolveIdle: (() => void) | null = null
165
+ let canceled = false
166
+
167
+ const clear = () => {
168
+ for (const frame of frames)
169
+ frame.close()
170
+ frames = []
171
+ }
172
+
173
+ const startFetch = () => {
174
+ if (activeFetches++ === 0)
175
+ idle = new Promise<void>(resolve => resolveIdle = resolve)
176
+ }
177
+
178
+ const endFetch = () => {
179
+ if (--activeFetches === 0) {
180
+ resolveIdle?.()
181
+ resolveIdle = null
182
+ }
183
+ }
184
+
185
+ const getSink = async () => {
186
+ if (sink) return sink
187
+
188
+ input = new Input({
189
+ source: await loadDecoderSource(source),
190
+ formats: ALL_FORMATS,
191
+ })
192
+
193
+ const track = await input.getPrimaryVideoTrack()
194
+ sink = track && await track.canDecode()
195
+ ? new VideoSampleSink(track)
196
+ : null
197
+
198
+ return sink
199
+ }
200
+
201
+ const fetchFrames = async (targetUs: number) => {
202
+ startFetch()
203
+ const wEnd = Math.min(endUs, targetUs + 1)
204
+ const wStart = Math.max(startUs, wEnd - windowUs)
205
+ const newFrames: VideoFrame[] = []
206
+
207
+ const videoSink = await getSink()
208
+ if (videoSink) {
209
+ for await (const sample of videoSink.samples(wStart / 1_000_000, wEnd / 1_000_000)) {
210
+ newFrames.push(sample.toVideoFrame())
211
+ sample.close()
212
+ }
213
+ }
214
+
215
+ endFetch()
216
+ return {frames: newFrames, windowStart: wStart, windowEnd: wEnd}
217
+ }
218
+
219
+ const loadWindow = async (targetUs: number) => {
220
+ clear()
221
+ const result = await fetchFrames(targetUs)
222
+ frames = result.frames
223
+ windowStart = result.windowStart
224
+ windowEnd = result.windowEnd
225
+ }
226
+
227
+ return {
228
+ async next(targetUs: number): Promise<VideoFrame | undefined> {
229
+ if (canceled)
230
+ return undefined
231
+
232
+ if (targetUs < windowStart || targetUs > windowEnd) {
233
+ if (prefetchPromise) {
234
+ const prefetched = await prefetchPromise
235
+ prefetchPromise = null
236
+
237
+ if (canceled) {
238
+ for (const f of prefetched.frames) f.close()
239
+ return undefined
240
+ }
241
+
242
+ if (targetUs >= prefetched.windowStart && targetUs <= prefetched.windowEnd) {
243
+ clear()
244
+ frames = prefetched.frames
245
+ windowStart = prefetched.windowStart
246
+ windowEnd = prefetched.windowEnd
247
+ } else {
248
+ for (const f of prefetched.frames) f.close()
249
+ await loadWindow(targetUs)
250
+ }
251
+ } else {
252
+ await loadWindow(targetUs)
253
+ }
254
+ }
255
+
256
+ if (!prefetchPromise && targetUs < windowStart + prefetchThreshold && windowStart > startUs)
257
+ prefetchPromise = fetchFrames(windowStart - 1)
258
+
259
+ let best: VideoFrame | undefined
260
+ let bestDistance = Infinity
261
+
262
+ for (const frame of frames) {
263
+ const distance = Math.abs((frame.timestamp ?? targetUs) - targetUs)
264
+ if (distance < bestDistance) {
265
+ best = frame
266
+ bestDistance = distance
267
+ }
268
+ }
269
+
270
+ return best ? new VideoFrame(best) : undefined
271
+ },
272
+
273
+ async cancel() {
274
+ canceled = true
275
+ const pending = prefetchPromise
276
+ prefetchPromise = null
277
+
278
+ const prefetched = await pending?.catch(() => null)
279
+ if (prefetched)
280
+ for (const f of prefetched.frames) f.close()
281
+
282
+ await idle
283
+ clear()
284
+ input?.dispose()
285
+ input = null
286
+ sink = null
287
+ }
288
+ }
289
+ }
290
+ }
291
+
292
+ const toUs = (ms: Ms) => Math.round(ms * 1_000)
@@ -0,0 +1,64 @@
1
+
2
+ import {AudioMix} from "./audio-mix.js"
3
+ import {ms} from "../../../../units/ms.js"
4
+ import {resampleToPlanar} from "./resamplers.js"
5
+ import {applyGainToPlanar} from "./audio-gain.js"
6
+ import {TimelineFile} from "../../../parts/basics.js"
7
+ import {DecoderSource} from "../../../../driver/fns/schematic.js"
8
+ import {createAudioSampler} from "../../parts/samplers/audio/sampler.js"
9
+
10
+ export function produceAudio({
11
+ timeline,
12
+ resolveMedia
13
+ }: {
14
+ timeline: TimelineFile,
15
+ resolveMedia: (hash: string) => DecoderSource
16
+ }) {
17
+ const mixer = new AudioMix()
18
+ const audio = streamAudio(timeline, resolveMedia)
19
+ const stream = new TransformStream<AudioData, AudioData>()
20
+ const writer = stream.writable.getWriter()
21
+
22
+ async function produce() {
23
+ for await (const chunk of mixer.mix(audio)) {
24
+ const data = new AudioData({
25
+ format: 'f32-planar',
26
+ sampleRate: chunk.sampleRate,
27
+ numberOfFrames: chunk.frames,
28
+ numberOfChannels: chunk.channels,
29
+ timestamp: Math.round(
30
+ (chunk.startFrame / chunk.sampleRate) * 1_000_000
31
+ ),
32
+ data: new Float32Array(chunk.planar)
33
+ })
34
+
35
+ await writer.write(data)
36
+ }
37
+
38
+ await writer.close()
39
+ }
40
+
41
+ produce()
42
+
43
+ return stream.readable
44
+ }
45
+
46
+ async function *streamAudio(timeline: TimelineFile, resolveMedia: (hash: string) => DecoderSource) {
47
+ const audioSampler = createAudioSampler(resolveMedia)
48
+
49
+ for await (const {sample, timestamp, gain}
50
+ of audioSampler.sampleAudio(timeline, ms(0))) {
51
+
52
+ const {data} = resampleToPlanar(sample, 48000)
53
+ applyGainToPlanar(data, gain)
54
+
55
+ yield {
56
+ planes: data,
57
+ sampleRate: 48000,
58
+ timestamp
59
+ }
60
+
61
+ sample.close()
62
+ }
63
+ }
64
+
@@ -0,0 +1,49 @@
1
+
2
+ import {Fps} from "../../../../units/fps.js"
3
+ import {CursorVisualSampler} from "./cursor.js"
4
+ import {Driver} from "../../../../driver/driver.js"
5
+ import {fixedStep} from "../../parts/schedulers.js"
6
+ import {TimelineFile} from "../../../parts/basics.js"
7
+ import {computeItemDuration} from "../../parts/handy.js"
8
+ import {DecoderSource} from "../../../../driver/fns/schematic.js"
9
+
10
+ export function produceVideo({
11
+ timeline,
12
+ fps,
13
+ driver,
14
+ resolveMedia,
15
+ }: {
16
+ driver: Driver
17
+ resolveMedia: (hash: string) => DecoderSource
18
+ timeline: TimelineFile
19
+ fps: Fps
20
+ }) {
21
+
22
+ const stream = new TransformStream<VideoFrame, VideoFrame>()
23
+ const writer = stream.writable.getWriter()
24
+ const sampler = new CursorVisualSampler(driver, resolveMedia, timeline)
25
+ const dt = 1 / fps
26
+ const duration = computeItemDuration(timeline.rootId, timeline)
27
+
28
+ async function produce() {
29
+ await fixedStep({fps, duration}, async (timecode, i) => {
30
+ const layers = await sampler.next(timecode)
31
+ const composed = await driver.composite(layers)
32
+
33
+ const frame = new VideoFrame(composed, {
34
+ timestamp: Math.round(i * dt * 1_000_000),
35
+ duration: Math.round(dt * 1_000_000)
36
+ })
37
+
38
+ await writer.write(frame)
39
+ composed.close()
40
+ })
41
+
42
+ await writer.close()
43
+ }
44
+
45
+ produce()
46
+
47
+ return stream.readable
48
+ }
49
+
@@ -0,0 +1,48 @@
1
+
2
+ const resampleLinear = (
3
+ src: Float32Array,
4
+ fromRate: number,
5
+ targetRate: number
6
+ ) => {
7
+ if (fromRate === targetRate)
8
+ return src
9
+
10
+ const ratio = targetRate / fromRate
11
+ const outFrames = Math.max(1, Math.round(src.length * ratio))
12
+ const out = new Float32Array(outFrames)
13
+
14
+ for (let i = 0; i < outFrames; i++) {
15
+ const t = i / ratio
16
+ const i0 = Math.floor(t)
17
+ const i1 = Math.min(i0 + 1, src.length - 1)
18
+ const frac = t - i0
19
+ out[i] = src[i0] * (1 - frac) + src[i1] * frac
20
+ }
21
+
22
+ return out
23
+ }
24
+
25
+ export const resampleToPlanar = (
26
+ sample: {
27
+ numberOfFrames: number
28
+ numberOfChannels: number
29
+ sampleRate: number
30
+ copyTo: (dest: Float32Array, options: {planeIndex: number; format: 'f32-planar'}) => void
31
+ },
32
+ targetRate: number
33
+ ): {data: Float32Array[]; frames: number} => {
34
+ const channels = sample.numberOfChannels
35
+ const data = new Array<Float32Array>(channels)
36
+ let frames = 0
37
+
38
+ for (let ch = 0; ch < channels; ch++) {
39
+ const plane = new Float32Array(sample.numberOfFrames)
40
+ sample.copyTo(plane, {planeIndex: ch, format: 'f32-planar'})
41
+ const resampled = resampleLinear(plane, sample.sampleRate, targetRate)
42
+ data[ch] = resampled
43
+ frames = resampled.length
44
+ }
45
+
46
+ return {data, frames}
47
+ }
48
+
@@ -0,0 +1,28 @@
1
+
2
+ import {Fps} from "../../../units/fps.js"
3
+ import {Driver} from "../../../driver/driver.js"
4
+ import {TimelineFile} from "../../parts/basics.js"
5
+ import {produceAudio} from "./parts/produce-audio.js"
6
+ import {produceVideo} from "./parts/produce-video.js"
7
+ import {DecoderSource} from "../../../driver/fns/schematic.js"
8
+
9
+ export function produce(opts: {
10
+ timeline: TimelineFile
11
+ fps: Fps
12
+ driver: Driver
13
+ resolveMedia: (hash: string) => DecoderSource
14
+ }) {
15
+
16
+ const audio = produceAudio({...opts})
17
+ const video = produceVideo({...opts})
18
+
19
+ return opts.driver.encode({
20
+ video,
21
+ audio,
22
+ config: {
23
+ audio: {codec: 'opus', bitrate: 128000},
24
+ video: {codec: 'vp9', bitrate: 1000000}
25
+ }
26
+ })
27
+ }
28
+