@omnimedia/omnitool 1.1.0-5 → 1.1.0-51

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 (380) hide show
  1. package/README.md +143 -80
  2. package/package.json +18 -16
  3. package/s/context.ts +0 -7
  4. package/s/demo/demo.bundle.ts +102 -43
  5. package/s/demo/demo.css +246 -11
  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 +76 -0
  10. package/s/demo/routines/timeline-setup.ts +24 -0
  11. package/s/demo/routines/transcode-test.ts +21 -5
  12. package/s/demo/routines/transitions-test.ts +2 -2
  13. package/s/demo/routines/waveform-test.ts +8 -6
  14. package/s/driver/driver-worker.ts +9 -0
  15. package/s/driver/driver.test.ts +1 -1
  16. package/s/driver/driver.ts +32 -44
  17. package/s/driver/fns/schematic.ts +52 -25
  18. package/s/driver/fns/work.ts +71 -200
  19. package/s/driver/parts/compositor.ts +178 -0
  20. package/s/driver/parts/machina.ts +19 -20
  21. package/s/index.html.ts +103 -19
  22. package/s/index.ts +1 -0
  23. package/s/tests.bundle.ts +11 -0
  24. package/s/tests.html.ts +28 -0
  25. package/s/timeline/index.ts +3 -0
  26. package/s/timeline/parts/basics.ts +1 -1
  27. package/s/timeline/parts/filmstrip.ts +43 -16
  28. package/s/timeline/parts/item.ts +59 -6
  29. package/s/timeline/parts/media.ts +32 -1
  30. package/s/timeline/parts/resource-pool.ts +8 -5
  31. package/s/timeline/parts/resource.ts +2 -0
  32. package/s/timeline/parts/waveform.ts +3 -4
  33. package/s/timeline/renderers/export/parts/audio-gain.ts +17 -0
  34. package/s/timeline/renderers/export/parts/audio-mix.ts +133 -0
  35. package/s/timeline/renderers/export/parts/cursor.ts +109 -0
  36. package/s/timeline/renderers/export/parts/produce-audio.ts +64 -0
  37. package/s/timeline/renderers/export/parts/produce-video.ts +50 -0
  38. package/s/timeline/renderers/export/parts/resamplers.ts +48 -0
  39. package/s/timeline/renderers/export/produce.ts +28 -0
  40. package/s/timeline/renderers/parts/handy.ts +360 -0
  41. package/s/timeline/renderers/parts/samplers/audio/parts/find.ts +19 -0
  42. package/s/timeline/renderers/parts/samplers/audio/parts/init.ts +60 -0
  43. package/s/timeline/renderers/parts/samplers/audio/parts/sink.ts +38 -0
  44. package/s/timeline/renderers/parts/samplers/audio/parts/types.ts +16 -0
  45. package/s/timeline/renderers/parts/samplers/audio/sampler.ts +35 -0
  46. package/s/timeline/renderers/parts/samplers/visual/parts/defaults.ts +16 -0
  47. package/s/timeline/renderers/parts/samplers/visual/parts/sample.ts +59 -0
  48. package/s/timeline/renderers/parts/samplers/visual/parts/sequence.ts +111 -0
  49. package/s/timeline/renderers/parts/samplers/visual/parts/sink.ts +38 -0
  50. package/s/timeline/renderers/parts/samplers/visual/parts/transition.ts +28 -0
  51. package/s/timeline/renderers/parts/samplers/visual/parts/types.ts +10 -0
  52. package/s/timeline/renderers/parts/samplers/visual/sampler.ts +28 -0
  53. package/s/timeline/renderers/parts/schedulers.ts +96 -0
  54. package/s/timeline/renderers/player/parts/playback.ts +125 -0
  55. package/s/timeline/renderers/player/player.ts +71 -0
  56. package/s/timeline/renderers/renderers.test.ts +387 -0
  57. package/s/timeline/sugar/helpers.ts +85 -0
  58. package/s/timeline/sugar/o.ts +178 -38
  59. package/s/timeline/sugar/omni.test.ts +210 -0
  60. package/s/timeline/sugar/omni.ts +38 -12
  61. package/s/timeline/types.ts +29 -0
  62. package/s/timeline/utils/checksum.ts +3 -1
  63. package/s/timeline/utils/datafile.ts +15 -4
  64. package/s/timeline/utils/dummy-data.ts +3 -3
  65. package/s/timeline/utils/matrix.ts +33 -0
  66. package/s/units/fps.ts +8 -0
  67. package/s/units/ms.ts +8 -0
  68. package/s/units/seconds.ts +8 -0
  69. package/x/WebGLRenderer-7X274AYV.js +2 -0
  70. package/x/WebGLRenderer-7X274AYV.js.map +7 -0
  71. package/x/WebGPURenderer-XMCMEXAO.js +2 -0
  72. package/x/WebGPURenderer-XMCMEXAO.js.map +7 -0
  73. package/x/browserAll-6TVTCHHE.js +2 -0
  74. package/x/browserAll-6TVTCHHE.js.map +7 -0
  75. package/x/chunk-4ONWQOPX.js +157 -0
  76. package/x/chunk-4ONWQOPX.js.map +7 -0
  77. package/x/chunk-63NSCXPX.js +2 -0
  78. package/x/chunk-63NSCXPX.js.map +7 -0
  79. package/x/chunk-A45M2HJC.js +2 -0
  80. package/x/chunk-A45M2HJC.js.map +7 -0
  81. package/x/chunk-OTQK6FAJ.js +15 -0
  82. package/x/chunk-OTQK6FAJ.js.map +7 -0
  83. package/x/chunk-Q7JBQNE4.js +42 -0
  84. package/x/chunk-Q7JBQNE4.js.map +7 -0
  85. package/x/chunk-W33LM336.js +393 -0
  86. package/x/chunk-W33LM336.js.map +7 -0
  87. package/x/chunk-W5CN46AR.js +327 -0
  88. package/x/chunk-W5CN46AR.js.map +7 -0
  89. package/x/chunk-WFT3KTZG.js +269 -0
  90. package/x/chunk-WFT3KTZG.js.map +7 -0
  91. package/x/context.d.ts +1 -4
  92. package/x/context.js +1 -5
  93. package/x/context.js.map +1 -1
  94. package/x/demo/WebGLRenderer-NLGJGAXK.js +2 -0
  95. package/x/demo/WebGLRenderer-NLGJGAXK.js.map +7 -0
  96. package/x/demo/WebGPURenderer-RBOFXPL5.js +2 -0
  97. package/x/demo/WebGPURenderer-RBOFXPL5.js.map +7 -0
  98. package/x/demo/browserAll-5AZHDDG6.js +2 -0
  99. package/x/demo/browserAll-5AZHDDG6.js.map +7 -0
  100. package/x/demo/chunk-5ZZYIILO.js +393 -0
  101. package/x/demo/chunk-5ZZYIILO.js.map +7 -0
  102. package/x/demo/chunk-P3PTHHFE.js +42 -0
  103. package/x/demo/chunk-P3PTHHFE.js.map +7 -0
  104. package/x/demo/chunk-PYG4RZZ2.js +269 -0
  105. package/x/demo/chunk-PYG4RZZ2.js.map +7 -0
  106. package/x/demo/chunk-Q4MWBZHL.js +157 -0
  107. package/x/demo/chunk-Q4MWBZHL.js.map +7 -0
  108. package/x/demo/chunk-T3METYEY.js +15 -0
  109. package/x/demo/chunk-T3METYEY.js.map +7 -0
  110. package/x/demo/chunk-USLRKDKD.js +2 -0
  111. package/x/demo/chunk-USLRKDKD.js.map +7 -0
  112. package/x/demo/chunk-YISSXWBT.js +327 -0
  113. package/x/demo/chunk-YISSXWBT.js.map +7 -0
  114. package/x/demo/chunk-YJQWVIHX.js +2 -0
  115. package/x/demo/chunk-YJQWVIHX.js.map +7 -0
  116. package/x/demo/demo.bundle.js +92 -40
  117. package/x/demo/demo.bundle.js.map +1 -1
  118. package/x/demo/demo.bundle.min.js +2450 -35
  119. package/x/demo/demo.bundle.min.js.map +4 -4
  120. package/x/demo/demo.css +246 -11
  121. package/x/demo/routines/export-test.d.ts +2 -0
  122. package/x/demo/routines/export-test.js +10 -0
  123. package/x/demo/routines/export-test.js.map +1 -0
  124. package/x/demo/routines/filmstrip-test.d.ts +1 -1
  125. package/x/demo/routines/filmstrip-test.js +20 -17
  126. package/x/demo/routines/filmstrip-test.js.map +1 -1
  127. package/x/demo/routines/load-video.d.ts +1 -1
  128. package/x/demo/routines/load-video.js +1 -2
  129. package/x/demo/routines/load-video.js.map +1 -1
  130. package/x/demo/routines/playback-test.d.ts +2 -0
  131. package/x/demo/routines/playback-test.js +65 -0
  132. package/x/demo/routines/playback-test.js.map +1 -0
  133. package/x/demo/routines/timeline-setup.d.ts +6 -0
  134. package/x/demo/routines/timeline-setup.js +13 -0
  135. package/x/demo/routines/timeline-setup.js.map +1 -0
  136. package/x/demo/routines/transcode-test.js +17 -5
  137. package/x/demo/routines/transcode-test.js.map +1 -1
  138. package/x/demo/routines/transitions-test.js +2 -2
  139. package/x/demo/routines/transitions-test.js.map +1 -1
  140. package/x/demo/routines/waveform-test.d.ts +2 -1
  141. package/x/demo/routines/waveform-test.js +7 -6
  142. package/x/demo/routines/waveform-test.js.map +1 -1
  143. package/x/demo/webworkerAll-QKIC5O27.js +2 -0
  144. package/x/demo/webworkerAll-QKIC5O27.js.map +7 -0
  145. package/x/driver/WebGLRenderer-OMRWYQIV.js +2 -0
  146. package/x/driver/WebGLRenderer-OMRWYQIV.js.map +7 -0
  147. package/x/driver/WebGPURenderer-KQJB2OJJ.js +2 -0
  148. package/x/driver/WebGPURenderer-KQJB2OJJ.js.map +7 -0
  149. package/x/driver/browserAll-YBZEJCN3.js +2 -0
  150. package/x/driver/browserAll-YBZEJCN3.js.map +7 -0
  151. package/x/driver/chunk-3L3MB5NY.js +393 -0
  152. package/x/driver/chunk-3L3MB5NY.js.map +7 -0
  153. package/x/driver/chunk-42BQ4XKE.js +269 -0
  154. package/x/driver/chunk-42BQ4XKE.js.map +7 -0
  155. package/x/driver/chunk-4HAYG3N5.js +327 -0
  156. package/x/driver/chunk-4HAYG3N5.js.map +7 -0
  157. package/x/driver/chunk-BFBY7VYB.js +42 -0
  158. package/x/driver/chunk-BFBY7VYB.js.map +7 -0
  159. package/x/driver/chunk-KM6O72WE.js +157 -0
  160. package/x/driver/chunk-KM6O72WE.js.map +7 -0
  161. package/x/driver/chunk-N6HD4WYJ.js +2 -0
  162. package/x/driver/chunk-N6HD4WYJ.js.map +7 -0
  163. package/x/driver/chunk-WCZ2O3UN.js +15 -0
  164. package/x/driver/chunk-WCZ2O3UN.js.map +7 -0
  165. package/x/driver/chunk-XWNSF3WJ.js +2 -0
  166. package/x/driver/chunk-XWNSF3WJ.js.map +7 -0
  167. package/x/driver/driver-worker.d.ts +1 -0
  168. package/x/driver/driver-worker.js +6 -0
  169. package/x/driver/driver-worker.js.map +1 -0
  170. package/x/driver/driver.d.ts +12 -9
  171. package/x/driver/driver.js +31 -41
  172. package/x/driver/driver.js.map +1 -1
  173. package/x/driver/driver.test.js +1 -1
  174. package/x/driver/driver.test.js.map +1 -1
  175. package/x/driver/driver.worker.bundle.min.js +139 -1135
  176. package/x/driver/driver.worker.bundle.min.js.map +4 -4
  177. package/x/driver/fns/host.d.ts +10 -4
  178. package/x/driver/fns/schematic.d.ts +47 -24
  179. package/x/driver/fns/work.d.ts +12 -7
  180. package/x/driver/fns/work.js +68 -170
  181. package/x/driver/fns/work.js.map +1 -1
  182. package/x/driver/parts/compositor.d.ts +15 -0
  183. package/x/driver/parts/compositor.js +152 -0
  184. package/x/driver/parts/compositor.js.map +1 -0
  185. package/x/driver/parts/machina.d.ts +0 -20
  186. package/x/driver/parts/machina.js +6 -10
  187. package/x/driver/parts/machina.js.map +1 -1
  188. package/x/driver/webworkerAll-BKJQW6P7.js +2 -0
  189. package/x/driver/webworkerAll-BKJQW6P7.js.map +7 -0
  190. package/x/features/speech/transcribe/parts/prep-audio.d.ts +1 -1
  191. package/x/features/speech/transcribe/worker.bundle.min.js +703 -703
  192. package/x/features/speech/transcribe/worker.bundle.min.js.map +4 -4
  193. package/x/index.d.ts +1 -0
  194. package/x/index.html +349 -30
  195. package/x/index.html.js +103 -19
  196. package/x/index.html.js.map +1 -1
  197. package/x/index.js +1 -0
  198. package/x/index.js.map +1 -1
  199. package/x/tests.bundle.js +8 -0
  200. package/x/tests.bundle.js.map +1 -0
  201. package/x/tests.bundle.min.js +2464 -0
  202. package/x/tests.bundle.min.js.map +7 -0
  203. package/x/tests.html +316 -0
  204. package/x/tests.html.d.ts +2 -0
  205. package/x/tests.html.js +22 -0
  206. package/x/tests.html.js.map +1 -0
  207. package/x/timeline/index.d.ts +3 -0
  208. package/x/timeline/index.js +3 -0
  209. package/x/timeline/index.js.map +1 -1
  210. package/x/timeline/parts/basics.d.ts +1 -1
  211. package/x/timeline/parts/filmstrip.d.ts +4 -3
  212. package/x/timeline/parts/filmstrip.js +29 -10
  213. package/x/timeline/parts/filmstrip.js.map +1 -1
  214. package/x/timeline/parts/item.d.ts +51 -8
  215. package/x/timeline/parts/item.js +7 -3
  216. package/x/timeline/parts/item.js.map +1 -1
  217. package/x/timeline/parts/media.d.ts +5 -0
  218. package/x/timeline/parts/media.js +27 -1
  219. package/x/timeline/parts/media.js.map +1 -1
  220. package/x/timeline/parts/resource-pool.d.ts +3 -0
  221. package/x/timeline/parts/resource-pool.js +7 -4
  222. package/x/timeline/parts/resource-pool.js.map +1 -1
  223. package/x/timeline/parts/resource.d.ts +2 -0
  224. package/x/timeline/parts/waveform.d.ts +2 -1
  225. package/x/timeline/parts/waveform.js +2 -4
  226. package/x/timeline/parts/waveform.js.map +1 -1
  227. package/x/timeline/renderers/export/parts/audio-gain.d.ts +1 -0
  228. package/x/timeline/renderers/export/parts/audio-gain.js +13 -0
  229. package/x/timeline/renderers/export/parts/audio-gain.js.map +1 -0
  230. package/x/timeline/renderers/export/parts/audio-mix.d.ts +21 -0
  231. package/x/timeline/renderers/export/parts/audio-mix.js +89 -0
  232. package/x/timeline/renderers/export/parts/audio-mix.js.map +1 -0
  233. package/x/timeline/renderers/export/parts/cursor.d.ts +19 -0
  234. package/x/timeline/renderers/export/parts/cursor.js +80 -0
  235. package/x/timeline/renderers/export/parts/cursor.js.map +1 -0
  236. package/x/timeline/renderers/export/parts/produce-audio.d.ts +6 -0
  237. package/x/timeline/renderers/export/parts/produce-audio.js +41 -0
  238. package/x/timeline/renderers/export/parts/produce-audio.js.map +1 -0
  239. package/x/timeline/renderers/export/parts/produce-video.d.ts +10 -0
  240. package/x/timeline/renderers/export/parts/produce-video.js +27 -0
  241. package/x/timeline/renderers/export/parts/produce-video.js.map +1 -0
  242. package/x/timeline/renderers/export/parts/resamplers.d.ts +12 -0
  243. package/x/timeline/renderers/export/parts/resamplers.js +29 -0
  244. package/x/timeline/renderers/export/parts/resamplers.js.map +1 -0
  245. package/x/timeline/renderers/export/produce.d.ts +13 -0
  246. package/x/timeline/renderers/export/produce.js +15 -0
  247. package/x/timeline/renderers/export/produce.js.map +1 -0
  248. package/x/timeline/renderers/parts/handy.d.ts +30 -0
  249. package/x/timeline/renderers/parts/handy.js +219 -0
  250. package/x/timeline/renderers/parts/handy.js.map +1 -0
  251. package/x/timeline/renderers/parts/samplers/audio/parts/find.d.ts +6 -0
  252. package/x/timeline/renderers/parts/samplers/audio/parts/find.js +15 -0
  253. package/x/timeline/renderers/parts/samplers/audio/parts/find.js.map +1 -0
  254. package/x/timeline/renderers/parts/samplers/audio/parts/init.d.ts +5 -0
  255. package/x/timeline/renderers/parts/samplers/audio/parts/init.js +40 -0
  256. package/x/timeline/renderers/parts/samplers/audio/parts/init.js.map +1 -0
  257. package/x/timeline/renderers/parts/samplers/audio/parts/sink.d.ts +8 -0
  258. package/x/timeline/renderers/parts/samplers/audio/parts/sink.js +24 -0
  259. package/x/timeline/renderers/parts/samplers/audio/parts/sink.js.map +1 -0
  260. package/x/timeline/renderers/parts/samplers/audio/parts/types.d.ts +14 -0
  261. package/x/timeline/renderers/parts/samplers/audio/parts/types.js.map +1 -0
  262. package/x/timeline/renderers/parts/samplers/audio/sampler.d.ts +11 -0
  263. package/x/timeline/renderers/parts/samplers/audio/sampler.js +22 -0
  264. package/x/timeline/renderers/parts/samplers/audio/sampler.js.map +1 -0
  265. package/x/timeline/renderers/parts/samplers/visual/parts/defaults.d.ts +5 -0
  266. package/x/timeline/renderers/parts/samplers/visual/parts/defaults.js +10 -0
  267. package/x/timeline/renderers/parts/samplers/visual/parts/defaults.js.map +1 -0
  268. package/x/timeline/renderers/parts/samplers/visual/parts/sample.d.ts +5 -0
  269. package/x/timeline/renderers/parts/samplers/visual/parts/sample.js +38 -0
  270. package/x/timeline/renderers/parts/samplers/visual/parts/sample.js.map +1 -0
  271. package/x/timeline/renderers/parts/samplers/visual/parts/sequence.d.ts +5 -0
  272. package/x/timeline/renderers/parts/samplers/visual/parts/sequence.js +75 -0
  273. package/x/timeline/renderers/parts/samplers/visual/parts/sequence.js.map +1 -0
  274. package/x/timeline/renderers/parts/samplers/visual/parts/sink.d.ts +8 -0
  275. package/x/timeline/renderers/parts/samplers/visual/parts/sink.js +24 -0
  276. package/x/timeline/renderers/parts/samplers/visual/parts/sink.js.map +1 -0
  277. package/x/timeline/renderers/parts/samplers/visual/parts/transition.d.ts +3 -0
  278. package/x/timeline/renderers/parts/samplers/visual/parts/transition.js +18 -0
  279. package/x/timeline/renderers/parts/samplers/visual/parts/transition.js.map +1 -0
  280. package/x/timeline/renderers/parts/samplers/visual/parts/types.d.ts +8 -0
  281. package/x/timeline/renderers/parts/samplers/visual/parts/types.js +2 -0
  282. package/x/timeline/renderers/parts/samplers/visual/parts/types.js.map +1 -0
  283. package/x/timeline/renderers/parts/samplers/visual/sampler.d.ts +7 -0
  284. package/x/timeline/renderers/parts/samplers/visual/sampler.js +17 -0
  285. package/x/timeline/renderers/parts/samplers/visual/sampler.js.map +1 -0
  286. package/x/timeline/renderers/parts/schedulers.d.ts +17 -0
  287. package/x/timeline/renderers/parts/schedulers.js +64 -0
  288. package/x/timeline/renderers/parts/schedulers.js.map +1 -0
  289. package/x/timeline/renderers/player/parts/playback.d.ts +31 -0
  290. package/x/timeline/renderers/player/parts/playback.js +91 -0
  291. package/x/timeline/renderers/player/parts/playback.js.map +1 -0
  292. package/x/timeline/renderers/player/player.d.ts +23 -0
  293. package/x/timeline/renderers/player/player.js +50 -0
  294. package/x/timeline/renderers/player/player.js.map +1 -0
  295. package/x/timeline/renderers/renderers.test.d.ts +32 -0
  296. package/x/timeline/renderers/renderers.test.js +306 -0
  297. package/x/timeline/renderers/renderers.test.js.map +1 -0
  298. package/x/timeline/sugar/helpers.d.ts +30 -0
  299. package/x/timeline/sugar/helpers.js +46 -0
  300. package/x/timeline/sugar/helpers.js.map +1 -0
  301. package/x/timeline/sugar/o.d.ts +31 -4
  302. package/x/timeline/sugar/o.js +144 -38
  303. package/x/timeline/sugar/o.js.map +1 -1
  304. package/x/timeline/sugar/omni.d.ts +11 -2
  305. package/x/timeline/sugar/omni.js +30 -9
  306. package/x/timeline/sugar/omni.js.map +1 -1
  307. package/x/timeline/sugar/omni.test.d.ts +27 -0
  308. package/x/timeline/sugar/omni.test.js +128 -0
  309. package/x/timeline/sugar/omni.test.js.map +1 -0
  310. package/x/timeline/types.d.ts +24 -0
  311. package/x/timeline/types.js +2 -0
  312. package/x/timeline/types.js.map +1 -0
  313. package/x/timeline/utils/checksum.d.ts +3 -2
  314. package/x/timeline/utils/checksum.js.map +1 -1
  315. package/x/timeline/utils/datafile.d.ts +5 -3
  316. package/x/timeline/utils/datafile.js +18 -5
  317. package/x/timeline/utils/datafile.js.map +1 -1
  318. package/x/timeline/utils/dummy-data.d.ts +1 -2
  319. package/x/timeline/utils/dummy-data.js +4 -2
  320. package/x/timeline/utils/dummy-data.js.map +1 -1
  321. package/x/timeline/utils/matrix.d.ts +8 -0
  322. package/x/timeline/utils/matrix.js +26 -0
  323. package/x/timeline/utils/matrix.js.map +1 -0
  324. package/x/units/fps.d.ts +6 -0
  325. package/x/units/fps.js +2 -0
  326. package/x/units/fps.js.map +1 -0
  327. package/x/units/ms.d.ts +6 -0
  328. package/x/units/ms.js +2 -0
  329. package/x/units/ms.js.map +1 -0
  330. package/x/units/seconds.d.ts +6 -0
  331. package/x/units/seconds.js +2 -0
  332. package/x/units/seconds.js.map +1 -0
  333. package/x/webworkerAll-VVIU3M54.js +2 -0
  334. package/x/webworkerAll-VVIU3M54.js.map +7 -0
  335. package/s/tests.test.ts +0 -8
  336. package/s/timeline/sugar/omni-test.ts +0 -38
  337. package/s/tools/common/loader.ts +0 -26
  338. package/s/tools/common/transformer-pipeline.ts +0 -26
  339. package/s/tools/speech-recognition/common/model.ts +0 -26
  340. package/s/tools/speech-recognition/whisper/fns/host.ts +0 -25
  341. package/s/tools/speech-recognition/whisper/fns/schematic.ts +0 -23
  342. package/s/tools/speech-recognition/whisper/fns/work.ts +0 -91
  343. package/s/tools/speech-recognition/whisper/parts/types.ts +0 -38
  344. package/s/tools/speech-recognition/whisper/parts/worker.bundle.ts +0 -7
  345. package/s/tools/speech-recognition/whisper/tool.ts +0 -70
  346. package/x/tests.test.js +0 -6
  347. package/x/tests.test.js.map +0 -1
  348. package/x/timeline/sugar/omni-test.d.ts +0 -1
  349. package/x/timeline/sugar/omni-test.js +0 -22
  350. package/x/timeline/sugar/omni-test.js.map +0 -1
  351. package/x/tools/common/loader.d.ts +0 -19
  352. package/x/tools/common/loader.js +0 -18
  353. package/x/tools/common/loader.js.map +0 -1
  354. package/x/tools/common/transformer-pipeline.d.ts +0 -8
  355. package/x/tools/common/transformer-pipeline.js +0 -24
  356. package/x/tools/common/transformer-pipeline.js.map +0 -1
  357. package/x/tools/speech-recognition/common/model.d.ts +0 -14
  358. package/x/tools/speech-recognition/common/model.js +0 -16
  359. package/x/tools/speech-recognition/common/model.js.map +0 -1
  360. package/x/tools/speech-recognition/whisper/fns/host.d.ts +0 -13
  361. package/x/tools/speech-recognition/whisper/fns/host.js +0 -19
  362. package/x/tools/speech-recognition/whisper/fns/host.js.map +0 -1
  363. package/x/tools/speech-recognition/whisper/fns/schematic.d.ts +0 -19
  364. package/x/tools/speech-recognition/whisper/fns/schematic.js +0 -2
  365. package/x/tools/speech-recognition/whisper/fns/schematic.js.map +0 -1
  366. package/x/tools/speech-recognition/whisper/fns/work.d.ts +0 -12
  367. package/x/tools/speech-recognition/whisper/fns/work.js +0 -74
  368. package/x/tools/speech-recognition/whisper/fns/work.js.map +0 -1
  369. package/x/tools/speech-recognition/whisper/parts/types.d.ts +0 -31
  370. package/x/tools/speech-recognition/whisper/parts/types.js.map +0 -1
  371. package/x/tools/speech-recognition/whisper/parts/worker.bundle.d.ts +0 -1
  372. package/x/tools/speech-recognition/whisper/parts/worker.bundle.js +0 -4
  373. package/x/tools/speech-recognition/whisper/parts/worker.bundle.js.map +0 -1
  374. package/x/tools/speech-recognition/whisper/parts/worker.bundle.min.js +0 -8
  375. package/x/tools/speech-recognition/whisper/parts/worker.bundle.min.js.map +0 -7
  376. package/x/tools/speech-recognition/whisper/tool.d.ts +0 -12
  377. package/x/tools/speech-recognition/whisper/tool.js +0 -63
  378. package/x/tools/speech-recognition/whisper/tool.js.map +0 -1
  379. /package/x/{tests.test.d.ts → tests.bundle.d.ts} +0 -0
  380. /package/x/{tools/speech-recognition/whisper → timeline/renderers/parts/samplers/audio}/parts/types.js +0 -0
@@ -1,7 +1,10 @@
1
+
2
+ import {is} from "@e280/stz"
1
3
  import {Comrade, tune, Thread} from "@e280/comrade"
2
4
  import {ALL_FORMATS, Input, type StreamTargetChunk} from "mediabunny"
3
5
 
4
6
  import {Machina} from "./parts/machina.js"
7
+ import {Compositor} from "./parts/compositor.js"
5
8
  import {setupDriverHost} from "./fns/host.js"
6
9
  import {loadDecoderSource} from "./utils/load-decoder-source.js"
7
10
  import {DecoderInput, DriverSchematic, Composition, EncoderInput, DecoderSource} from "./fns/schematic.js"
@@ -11,19 +14,21 @@ export type DriverOptions = {
11
14
  }
12
15
 
13
16
  export class Driver {
14
- static async setup(options: DriverOptions) {
17
+ static async setup(options?: DriverOptions) {
15
18
  const machina = new Machina()
16
19
  const thread = await Comrade.thread<DriverSchematic>({
17
20
  label: "OmnitoolDriver",
18
- workerUrl: options.workerUrl,
21
+ workerUrl: options?.workerUrl ?? "/node_modules/@omnimedia/omnitool/x/driver/driver.worker.bundle.min.js",
19
22
  setupHost: setupDriverHost(machina),
20
23
  })
21
- return new this(machina, thread)
24
+ const compositor = await Compositor.setup()
25
+ return new this(machina, thread, compositor)
22
26
  }
23
27
 
24
28
  constructor(
25
29
  public machina: Machina,
26
- public thread: Thread<DriverSchematic>
30
+ public thread: Thread<DriverSchematic>,
31
+ public compositor: Compositor
27
32
  ) {}
28
33
 
29
34
  async hello() {
@@ -37,7 +42,8 @@ export class Driver {
37
42
  })
38
43
 
39
44
  const audioTrack = await input.getPrimaryAudioTrack()
40
- return await audioTrack?.computeDuration()
45
+ if (!audioTrack) throw new Error("primary audio track not found")
46
+ return await audioTrack.computeDuration()
41
47
  }
42
48
 
43
49
  async getVideoDuration(source: DecoderSource) {
@@ -50,7 +56,7 @@ export class Driver {
50
56
  return await videoTrack?.computeDuration()
51
57
  }
52
58
 
53
- decode(input: DecoderInput) {
59
+ decodeVideo(input: DecoderInput) {
54
60
  let lastFrame: VideoFrame | null = null
55
61
  const videoTransform = new TransformStream<VideoFrame, VideoFrame>({
56
62
  async transform(chunk, controller) {
@@ -61,56 +67,38 @@ export class Driver {
61
67
  lastFrame = frame
62
68
  }
63
69
  })
64
- const audioTransform = new TransformStream<AudioData, AudioData>()
65
- this.thread.work.decode[tune]({transfer: [videoTransform.writable, audioTransform.writable]})({
70
+ this.thread.work.decodeVideo[tune]({transfer: [videoTransform.writable]})({
66
71
  source: input.source,
67
72
  video: videoTransform.writable,
68
- audio: audioTransform.writable,
73
+ start: input.start,
74
+ end: input.end
69
75
  })
70
- return {
71
- audio: audioTransform.readable,
72
- video: videoTransform.readable
73
- }
76
+ return videoTransform.readable
74
77
  }
75
78
 
76
- async encode({readables, config}: EncoderInput) {
77
- const handle = await window.showSaveFilePicker()
78
- const writable = await handle.createWritable()
79
- // making bridge because file picker writable is not transferable
80
- const bridge = new WritableStream<StreamTargetChunk>({
81
- async write(chunk) {
82
- await writable.write(chunk)
83
- },
84
- async close() {
85
- await writable.close()
86
- }
79
+ decodeAudio(input: DecoderInput) {
80
+ const audioTransform = new TransformStream<AudioData, AudioData>()
81
+ this.thread.work.decodeAudio[tune]({transfer: [audioTransform.writable]})({
82
+ source: input.source,
83
+ audio: audioTransform.writable,
84
+ start: input.start,
85
+ end: input.end
87
86
  })
88
- return await this.thread.work.encode[tune]({transfer: [readables.audio, readables.video, bridge]})({readables, config, bridge})
87
+ return audioTransform.readable
88
+ }
89
+
90
+ encode({audio, video, config}: EncoderInput) {
91
+ const {readable, writable} = new TransformStream<StreamTargetChunk, StreamTargetChunk>()
92
+ const transfer = [audio, video, writable].filter(is.happy)
93
+ const done = this.thread.work.encode[tune]({transfer})({audio, video, config, writable})
94
+ return {readable, done}
89
95
  }
90
96
 
91
97
  async composite(
92
98
  composition: Composition,
93
99
  ) {
94
- const transfer = this.#collectTransferablesFromComposition(composition)
95
- return await this.thread.work.composite[tune]({transfer})(composition)
100
+ return await this.compositor.composite(composition)
96
101
  }
97
102
 
98
- #collectTransferablesFromComposition(composition: Composition) {
99
- const transferables: Transferable[] = []
100
-
101
- const visit = (node: Composition) => {
102
- if (Array.isArray(node)) {
103
- for (const child of node)
104
- visit(child)
105
- }
106
- else if (node && typeof node === 'object' && 'kind' in node) {
107
- if (node.kind === 'image' && node.frame instanceof VideoFrame)
108
- transferables.push(node.frame)
109
- }
110
- }
111
-
112
- visit(composition)
113
- return transferables
114
- }
115
103
  }
116
104
 
@@ -1,22 +1,32 @@
1
1
 
2
+ import {TextStyleOptions} from "pixi.js"
2
3
  import {AsSchematic} from "@e280/comrade"
3
4
  import type {AudioEncodingConfig, StreamTargetChunk, VideoEncodingConfig} from "mediabunny"
4
5
 
6
+ import {Mat6} from "../../timeline/utils/matrix.js"
7
+ import {Id} from "../../timeline/index.js"
8
+
5
9
  export type DriverSchematic = AsSchematic<{
6
10
 
7
11
  // happens on the web worker
8
12
  work: {
9
13
  hello(): Promise<void>
10
14
 
11
- decode(input: {
15
+ decodeAudio(input: {
12
16
  source: DecoderSource
13
- video: WritableStream<VideoFrame>
14
17
  audio: WritableStream<AudioData>
18
+ start?: number
19
+ end?: number
15
20
  }): Promise<void>
16
21
 
17
- encode(input: EncoderInput & {bridge: WritableStream<StreamTargetChunk>}): Promise<void>
22
+ decodeVideo(input: {
23
+ source: DecoderSource
24
+ video: WritableStream<VideoFrame>
25
+ start?: number
26
+ end?: number
27
+ }): Promise<void>
18
28
 
19
- composite(input: Composition): Promise<VideoFrame>
29
+ encode(input: EncoderInput & {writable: WritableStream<StreamTargetChunk>}): Promise<void>
20
30
  }
21
31
 
22
32
  // happens on the main thread
@@ -26,20 +36,22 @@ export type DriverSchematic = AsSchematic<{
26
36
  }>
27
37
 
28
38
  export interface EncoderInput {
29
- readables: {
30
- video: ReadableStream<VideoFrame>
31
- audio: ReadableStream<AudioData>
32
- },
33
- config: {
34
- video: VideoEncodingConfig
35
- audio: AudioEncodingConfig
36
- }
39
+ video?: ReadableStream<VideoFrame>
40
+ audio?: ReadableStream<AudioData>
41
+ config: RenderConfig
42
+ }
43
+
44
+ export interface RenderConfig {
45
+ video: VideoEncodingConfig
46
+ audio: AudioEncodingConfig
37
47
  }
38
48
 
39
49
  export type DecoderSource = Blob | string | URL
40
50
 
41
51
  export interface DecoderInput {
42
52
  source: DecoderSource
53
+ start?: number
54
+ end?: number
43
55
  onFrame?: (frame: VideoFrame) => Promise<VideoFrame>
44
56
  }
45
57
 
@@ -59,25 +71,40 @@ export interface MuxOpts {
59
71
 
60
72
  export type Composition = Layer | (Layer | Composition)[]
61
73
 
62
- export type Transform = {
63
- x?: number
64
- y?: number
65
- scale?: number
66
- opacity?: number
67
- anchor?: number
68
- }
69
-
70
74
  export type TextLayer = {
75
+ id: Id
71
76
  kind: 'text'
72
77
  content: string
73
- fontSize?: number
74
- color?: string
75
- } & Transform
78
+ style?: TextStyleOptions
79
+ matrix?: Mat6
80
+ }
76
81
 
77
82
  export type ImageLayer = {
83
+ id: Id
78
84
  kind: 'image'
79
85
  frame: VideoFrame
80
- } & Transform
86
+ matrix?: Mat6
87
+ }
88
+
89
+ export type TransitionLayer = {
90
+ id: Id
91
+ kind: 'transition'
92
+ name: string
93
+ progress: number
94
+ from: VideoFrame
95
+ to: VideoFrame
96
+ }
97
+
98
+ export type GapLayer = {
99
+ id: Id
100
+ kind: 'gap'
101
+ }
102
+
103
+ export type Audio = {
104
+ id: Id
105
+ kind: "audio"
106
+ data: AudioData
107
+ }
81
108
 
82
- export type Layer = TextLayer | ImageLayer
109
+ export type Layer = TextLayer | ImageLayer | TransitionLayer | GapLayer
83
110
 
@@ -1,234 +1,105 @@
1
1
  import {Comrade} from "@e280/comrade"
2
- import {autoDetectRenderer, Container, Renderer, Sprite, Text, Texture, DOMAdapter, WebWorkerAdapter} from "pixi.js"
2
+ import {DOMAdapter, WebWorkerAdapter} from "pixi.js"
3
3
  import {Input, ALL_FORMATS, VideoSampleSink, Output, Mp4OutputFormat, VideoSampleSource, VideoSample, AudioSampleSink, AudioSampleSource, AudioSample, StreamTarget, BlobSource, UrlSource} from "mediabunny"
4
4
 
5
- import {Composition, DriverSchematic, Layer, Transform} from "./schematic.js"
5
+ import {DecoderSource, DriverSchematic} from "./schematic.js"
6
6
 
7
7
  DOMAdapter.set(WebWorkerAdapter)
8
8
 
9
+ const loadSource = async (source: DecoderSource) => {
10
+ if(source instanceof Blob) {
11
+ return new BlobSource(source)
12
+ } else {
13
+ return new UrlSource(source)
14
+ }
15
+ }
16
+
9
17
  export const setupDriverWork = (
10
18
  Comrade.work<DriverSchematic>(shell => ({
11
19
  async hello() {
12
20
  await shell.host.world()
13
21
  },
14
22
 
15
- async decode({source, video, audio}) {
16
- const loadSource = async () => {
17
- if(source instanceof Blob) {
18
- return new BlobSource(source)
19
- } else {
20
- return new UrlSource(source)
21
- }
22
- }
23
+ async decodeAudio({source, audio, start, end}) {
23
24
  const input = new Input({
24
- source: await loadSource(),
25
+ source: await loadSource(source),
25
26
  formats: ALL_FORMATS
26
27
  })
27
28
 
28
- const [videoTrack, audioTrack] = await Promise.all([
29
- input.getPrimaryVideoTrack(),
30
- input.getPrimaryAudioTrack()
31
- ])
32
-
33
- const videoDecodable = await videoTrack?.canDecode()
29
+ const audioTrack = await input.getPrimaryAudioTrack()
34
30
  const audioDecodable = await audioTrack?.canDecode()
35
-
36
- const videoWriter = video.getWriter()
37
31
  const audioWriter = audio.getWriter()
38
32
 
39
- await Promise.all([
40
- (async () => {
41
- if (videoDecodable && videoTrack) {
42
- const sink = new VideoSampleSink(videoTrack)
43
- for await (const sample of sink.samples()) {
44
- const frame = sample.toVideoFrame()
45
- await videoWriter.write(frame)
46
- sample.close()
47
- frame.close()
48
- }
49
- await videoWriter.close()
50
- }
51
- })(),
52
- (async () => {
53
- if (audioDecodable && audioTrack) {
54
- const sink = new AudioSampleSink(audioTrack)
55
- for await (const sample of sink.samples()) {
56
- const frame = sample.toAudioData()
57
- await audioWriter.write(frame)
58
- sample.close()
59
- frame.close()
60
- }
61
- await audioWriter.close()
62
- }
63
- })()
64
- ])
33
+ if (audioDecodable && audioTrack) {
34
+ const sink = new AudioSampleSink(audioTrack)
35
+ for await (const sample of sink.samples(start, end)) {
36
+ const frame = sample.toAudioData()
37
+ await audioWriter.write(frame)
38
+ sample.close()
39
+ frame.close()
40
+ }
41
+ await audioWriter.close()
42
+ }
65
43
  },
66
44
 
67
- async encode({readables, config, bridge}) {
68
- const output = new Output({
69
- format: new Mp4OutputFormat(),
70
- target: new StreamTarget(bridge, {chunked: true})
45
+ async decodeVideo({source, video, start, end}) {
46
+ const input = new Input({
47
+ source: await loadSource(source),
48
+ formats: ALL_FORMATS
71
49
  })
72
- const videoSource = new VideoSampleSource(config.video)
73
- output.addVideoTrack(videoSource)
74
- // since AudioSample is not transferable it fails to transfer encoder bitrate config
75
- // so it needs to be hardcoded not set through constants eg QUALITY_LOW
76
- const audioSource = new AudioSampleSource(config.audio)
77
- output.addAudioTrack(audioSource)
78
-
79
- await output.start()
80
50
 
81
- const videoReader = readables.video.getReader()
82
- const audioReader = readables.audio.getReader()
83
-
84
- await Promise.all([
85
- (async () => {
86
- while (true) {
87
- const {done, value} = await videoReader.read()
88
- if (done) break
89
- const sample = new VideoSample(value)
90
- await videoSource.add(sample)
91
- sample.close()
92
- }
93
- })(),
94
- (async () => {
95
- while (true) {
96
- const {done, value} = await audioReader.read()
97
- if (done) break
98
- const sample = new AudioSample(value)
99
- await audioSource.add(sample)
100
- sample.close()
101
- value.close()
102
- }
103
- })()
104
- ])
51
+ const videoTrack = await input.getPrimaryVideoTrack()
52
+ const videoDecodable = await videoTrack?.canDecode()
53
+ const videoWriter = video.getWriter()
105
54
 
106
- await output.finalize()
55
+ if (videoDecodable && videoTrack) {
56
+ const sink = new VideoSampleSink(videoTrack)
57
+ for await (const sample of sink.samples(start, end)) {
58
+ const frame = sample.toVideoFrame()
59
+ await videoWriter.write(frame)
60
+ sample.close()
61
+ frame.close()
62
+ }
63
+ await videoWriter.close()
64
+ }
107
65
  },
108
66
 
109
- async composite(composition) {
110
- const {stage, renderer} = await renderPIXI(1920, 1080)
111
- stage.removeChildren()
112
-
113
- const {baseFrame, disposables} = await renderLayer(composition, stage)
114
- renderer.render(stage)
115
-
116
- // make sure browser support webgl/webgpu otherwise it might take much longer to construct frame
117
- // if its very slow on eg edge try chrome
118
- const frame = new VideoFrame(renderer.canvas, {
119
- timestamp: baseFrame?.timestamp,
120
- duration: baseFrame?.duration ?? undefined,
67
+ async encode({video, audio, config, writable}) {
68
+ const output = new Output({
69
+ format: new Mp4OutputFormat(),
70
+ target: new StreamTarget(writable, {chunked: true})
121
71
  })
122
72
 
123
- baseFrame?.close()
124
- renderer.clear()
73
+ async function encodeVideo() {
74
+ if(!video) return
75
+ const videoSource = new VideoSampleSource(config.video)
76
+ output.addVideoTrack(videoSource)
77
+ for await (const frame of video) {
78
+ const sample = new VideoSample(frame)
79
+ await videoSource.add(sample)
80
+ sample.close()
81
+ }
82
+ }
125
83
 
126
- for (const disposable of disposables) {
127
- disposable.destroy(true)
84
+ async function encodeAudio() {
85
+ if(!audio) return
86
+ const audioSource = new AudioSampleSource(config.audio)
87
+ output.addAudioTrack(audioSource)
88
+ for await (const data of audio) {
89
+ const sample = new AudioSample(data)
90
+ await audioSource.add(sample)
91
+ sample.close()
92
+ data.close()
93
+ }
128
94
  }
129
95
 
130
- shell.transfer = [frame]
131
- return frame
132
- }
96
+ const audioTask = encodeAudio()
97
+ const videoTask = encodeVideo()
98
+
99
+ await output.start()
100
+ await Promise.all([audioTask, videoTask])
101
+ await output.finalize()
102
+ },
133
103
  }))
134
104
  )
135
105
 
136
- // TODO suspicious global, probably bad
137
- let pixi: {
138
- renderer: Renderer
139
- stage: Container
140
- } | null = null
141
-
142
- async function renderPIXI(width: number, height: number) {
143
- if (pixi)
144
- return pixi
145
-
146
- const renderer = await autoDetectRenderer({
147
- width,
148
- height,
149
- preference: "webgl", // webgl and webgl2 causes memory leaks on chrome
150
- background: "black",
151
- preferWebGLVersion: 2
152
- })
153
-
154
- const stage = new Container()
155
- pixi = {renderer, stage}
156
-
157
- return pixi
158
- }
159
-
160
- type RenderableObject = Sprite | Text | Texture
161
-
162
- async function renderLayer(
163
- layer: Layer | Composition,
164
- parent: Container,
165
- disposables: RenderableObject[] = []
166
- ) {
167
- if (Array.isArray(layer)) {
168
- let baseFrame: VideoFrame | undefined
169
- for (const child of layer) {
170
- const result = await renderLayer(child, parent, disposables)
171
- baseFrame ??= result.baseFrame
172
- }
173
- return {baseFrame, disposables}
174
- }
175
-
176
- if (!isRenderableLayer(layer)) {
177
- console.warn('Invalid layer', layer)
178
- return {disposables}
179
- }
180
-
181
- switch (layer.kind) {
182
- case 'text':
183
- return renderTextLayer(layer, parent, disposables)
184
- case 'image':
185
- return renderImageLayer(layer, parent, disposables)
186
- default:
187
- console.warn('Unknown layer kind', (layer as any).kind)
188
- return {disposables}
189
- }
190
- }
191
-
192
- function isRenderableLayer(layer: any): layer is Layer {
193
- return !!layer && typeof layer === 'object' && typeof layer.kind === 'string'
194
- }
195
-
196
- function renderTextLayer(
197
- layer: Extract<Layer, {kind: 'text'}>,
198
- parent: Container,
199
- disposables: RenderableObject[]
200
- ) {
201
- const text = new Text({
202
- text: layer.content,
203
- style: {
204
- fontFamily: 'sans-serif',
205
- fontSize: layer.fontSize ?? 48,
206
- fill: layer.color ?? 'white'
207
- }
208
- })
209
- applyTransform(text, layer)
210
- parent.addChild(text)
211
- disposables.push(text)
212
- return {disposables}
213
- }
214
-
215
- function renderImageLayer(
216
- layer: Extract<Layer, {kind: 'image'}>,
217
- parent: Container,
218
- disposables: RenderableObject[]
219
- ) {
220
- const texture = Texture.from(layer.frame)
221
- const sprite = new Sprite(texture)
222
- applyTransform(sprite, layer)
223
- parent.addChild(sprite)
224
- disposables.push(sprite, texture)
225
- return {baseFrame: layer.frame, disposables}
226
- }
227
-
228
- function applyTransform(target: Sprite | Text, t: Transform = {}) {
229
- if(t.x) target.x = t.x
230
- if(t.y) target.y = t.y
231
- if(t.scale) target.scale.set(t.scale)
232
- if(t.opacity) target.alpha = t.opacity
233
- if(t.anchor && 'anchor' in target) target.anchor.set(t.anchor)
234
- }