@omnimedia/omnitool 1.1.0-1 → 1.1.0-100

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 (468) hide show
  1. package/README.md +556 -72
  2. package/package.json +20 -15
  3. package/s/context.ts +0 -7
  4. package/s/demo/demo.bundle.ts +104 -39
  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 +23 -19
  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 +81 -0
  11. package/s/demo/routines/transcode-test.ts +21 -5
  12. package/s/demo/routines/transcriber-test.ts +34 -0
  13. package/s/demo/routines/transitions-test.ts +43 -0
  14. package/s/demo/routines/waveform-test.ts +35 -8
  15. package/s/driver/driver-worker.ts +9 -0
  16. package/s/driver/driver.test.ts +1 -1
  17. package/s/driver/driver.ts +52 -43
  18. package/s/driver/fns/host.ts +7 -6
  19. package/s/driver/fns/schematic.ts +69 -25
  20. package/s/driver/fns/work.ts +102 -214
  21. package/s/driver/parts/compositor.ts +319 -0
  22. package/s/driver/parts/machina.ts +19 -20
  23. package/s/driver/utils/find-pixi-filter.ts +24 -0
  24. package/s/driver/utils/load-decoder-source.ts +3 -4
  25. package/s/features/bg-remover/bg-remover.ts +26 -0
  26. package/s/features/bg-remover/default-spec.ts +11 -0
  27. package/s/features/bg-remover/types.ts +27 -0
  28. package/s/features/bg-remover/worker.bundle.ts +52 -0
  29. package/s/features/parts/expose-errors.ts +41 -0
  30. package/s/features/parts/load-pipe.ts +17 -0
  31. package/s/features/parts/types.ts +19 -0
  32. package/s/features/speech/transcribe/default-spec.ts +11 -0
  33. package/s/features/speech/transcribe/parts/prep-audio.ts +23 -0
  34. package/s/features/speech/transcribe/parts/transcribe.ts +70 -0
  35. package/s/features/speech/transcribe/transcriber.ts +46 -0
  36. package/s/features/speech/transcribe/types.ts +76 -0
  37. package/s/features/speech/transcribe/worker.bundle.ts +42 -0
  38. package/s/features/transition/parts/fragment.ts +24 -0
  39. package/s/features/transition/parts/types.ts +27 -0
  40. package/s/features/transition/parts/uniforms.ts +29 -0
  41. package/s/features/transition/parts/vertex.ts +31 -0
  42. package/s/features/transition/transition.ts +60 -0
  43. package/s/index.html.ts +103 -20
  44. package/s/index.ts +1 -0
  45. package/s/tests.bundle.ts +11 -0
  46. package/s/tests.html.ts +28 -0
  47. package/s/timeline/index.ts +17 -1
  48. package/s/timeline/parts/animations/make.ts +38 -0
  49. package/s/timeline/parts/animations/presets.ts +138 -0
  50. package/s/timeline/parts/animations/properties.ts +30 -0
  51. package/s/timeline/parts/animations/registry.ts +13 -0
  52. package/s/timeline/parts/animations/types.ts +80 -0
  53. package/s/timeline/parts/basics.ts +1 -1
  54. package/s/timeline/parts/captions.ts +91 -0
  55. package/s/timeline/parts/filmstrip.ts +43 -16
  56. package/s/timeline/parts/filters.ts +453 -0
  57. package/s/timeline/parts/item.ts +124 -11
  58. package/s/timeline/parts/media.ts +43 -1
  59. package/s/timeline/parts/resource-pool.ts +8 -5
  60. package/s/timeline/parts/resource.ts +3 -0
  61. package/s/timeline/parts/transitions.ts +102 -0
  62. package/s/timeline/parts/waveform/parts/collect.ts +72 -0
  63. package/s/timeline/parts/waveform/parts/render.ts +45 -0
  64. package/s/timeline/parts/waveform/parts/types.ts +24 -0
  65. package/s/timeline/parts/waveform/waveform.ts +161 -0
  66. package/s/timeline/renderers/export/parts/audio-gain.ts +17 -0
  67. package/s/timeline/renderers/export/parts/audio-mix.ts +133 -0
  68. package/s/timeline/renderers/export/parts/cursor.ts +291 -0
  69. package/s/timeline/renderers/export/parts/produce-audio.ts +64 -0
  70. package/s/timeline/renderers/export/parts/produce-video.ts +49 -0
  71. package/s/timeline/renderers/export/parts/resamplers.ts +48 -0
  72. package/s/timeline/renderers/export/produce.ts +28 -0
  73. package/s/timeline/renderers/parts/handy.ts +441 -0
  74. package/s/timeline/renderers/parts/samplers/audio/parts/find.ts +19 -0
  75. package/s/timeline/renderers/parts/samplers/audio/parts/init.ts +60 -0
  76. package/s/timeline/renderers/parts/samplers/audio/parts/sink.ts +38 -0
  77. package/s/timeline/renderers/parts/samplers/audio/parts/types.ts +16 -0
  78. package/s/timeline/renderers/parts/samplers/audio/sampler.ts +35 -0
  79. package/s/timeline/renderers/parts/samplers/visual/parts/defaults.ts +23 -0
  80. package/s/timeline/renderers/parts/samplers/visual/parts/image-sink.ts +51 -0
  81. package/s/timeline/renderers/parts/samplers/visual/parts/sample.ts +99 -0
  82. package/s/timeline/renderers/parts/samplers/visual/parts/sequence.ts +97 -0
  83. package/s/timeline/renderers/parts/samplers/visual/parts/transition.ts +28 -0
  84. package/s/timeline/renderers/parts/samplers/visual/parts/types.ts +11 -0
  85. package/s/timeline/renderers/parts/samplers/visual/parts/video-sink.ts +38 -0
  86. package/s/timeline/renderers/parts/samplers/visual/sampler.ts +31 -0
  87. package/s/timeline/renderers/parts/schedulers.ts +96 -0
  88. package/s/timeline/renderers/player/parts/playback.ts +213 -0
  89. package/s/timeline/renderers/player/player.ts +86 -0
  90. package/s/timeline/renderers/renderers.test.ts +403 -0
  91. package/s/timeline/sugar/helpers.ts +239 -0
  92. package/s/timeline/sugar/o.ts +443 -48
  93. package/s/timeline/sugar/omni.test.ts +210 -0
  94. package/s/timeline/sugar/omni.ts +38 -12
  95. package/s/timeline/types.ts +62 -0
  96. package/s/timeline/utils/anim.ts +63 -0
  97. package/s/timeline/utils/checksum.ts +5 -2
  98. package/s/timeline/utils/datafile.ts +15 -4
  99. package/s/timeline/utils/dummy-data.ts +3 -3
  100. package/s/timeline/utils/matrix.ts +54 -0
  101. package/s/timeline/utils/terps.ts +81 -0
  102. package/s/units/fps.ts +8 -0
  103. package/s/units/ms.ts +8 -0
  104. package/s/units/seconds.ts +8 -0
  105. package/x/WebGLRenderer-4CHIZDHY.js +2 -0
  106. package/x/WebGLRenderer-4CHIZDHY.js.map +7 -0
  107. package/x/WebGPURenderer-O6WXU2QR.js +2 -0
  108. package/x/WebGPURenderer-O6WXU2QR.js.map +7 -0
  109. package/x/browserAll-WNIOTNNP.js +2 -0
  110. package/x/browserAll-WNIOTNNP.js.map +7 -0
  111. package/x/chunk-23FOBGX6.js +2 -0
  112. package/x/chunk-23FOBGX6.js.map +7 -0
  113. package/x/chunk-73XOWA4F.js +393 -0
  114. package/x/chunk-73XOWA4F.js.map +7 -0
  115. package/x/chunk-IAWJKNX5.js +42 -0
  116. package/x/chunk-IAWJKNX5.js.map +7 -0
  117. package/x/chunk-KCMVLWBS.js +157 -0
  118. package/x/chunk-KCMVLWBS.js.map +7 -0
  119. package/x/chunk-MR32SQ27.js +2 -0
  120. package/x/chunk-MR32SQ27.js.map +7 -0
  121. package/x/chunk-VCUJJYRJ.js +327 -0
  122. package/x/chunk-VCUJJYRJ.js.map +7 -0
  123. package/x/chunk-XNIZ4L5W.js +269 -0
  124. package/x/chunk-XNIZ4L5W.js.map +7 -0
  125. package/x/chunk-ZLGNQFUI.js +15 -0
  126. package/x/chunk-ZLGNQFUI.js.map +7 -0
  127. package/x/context.d.ts +1 -4
  128. package/x/context.js +1 -5
  129. package/x/context.js.map +1 -1
  130. package/x/demo/WebGLRenderer-RSJAHIG2.js +2 -0
  131. package/x/demo/WebGLRenderer-RSJAHIG2.js.map +7 -0
  132. package/x/demo/WebGPURenderer-MGFAJCYY.js +2 -0
  133. package/x/demo/WebGPURenderer-MGFAJCYY.js.map +7 -0
  134. package/x/demo/browserAll-PTRBXBRP.js +2 -0
  135. package/x/demo/browserAll-PTRBXBRP.js.map +7 -0
  136. package/x/demo/chunk-CUYOGHWU.js +42 -0
  137. package/x/demo/chunk-CUYOGHWU.js.map +7 -0
  138. package/x/demo/chunk-DGTDNJ7W.js +2 -0
  139. package/x/demo/chunk-DGTDNJ7W.js.map +7 -0
  140. package/x/demo/chunk-FZ5BYF63.js +15 -0
  141. package/x/demo/chunk-FZ5BYF63.js.map +7 -0
  142. package/x/demo/chunk-KWN4NNES.js +269 -0
  143. package/x/demo/chunk-KWN4NNES.js.map +7 -0
  144. package/x/demo/chunk-OJ3FPXW7.js +157 -0
  145. package/x/demo/chunk-OJ3FPXW7.js.map +7 -0
  146. package/x/demo/chunk-PSLUOGTZ.js +393 -0
  147. package/x/demo/chunk-PSLUOGTZ.js.map +7 -0
  148. package/x/demo/chunk-VLCVEIFU.js +327 -0
  149. package/x/demo/chunk-VLCVEIFU.js.map +7 -0
  150. package/x/demo/chunk-ZWCPT5FR.js +2 -0
  151. package/x/demo/chunk-ZWCPT5FR.js.map +7 -0
  152. package/x/demo/demo.bundle.js +94 -36
  153. package/x/demo/demo.bundle.js.map +1 -1
  154. package/x/demo/demo.bundle.min.js +7359 -107
  155. package/x/demo/demo.bundle.min.js.map +4 -4
  156. package/x/demo/demo.css +246 -11
  157. package/x/demo/routines/export-test.d.ts +2 -0
  158. package/x/demo/routines/export-test.js +10 -0
  159. package/x/demo/routines/export-test.js.map +1 -0
  160. package/x/demo/routines/filmstrip-test.d.ts +1 -1
  161. package/x/demo/routines/filmstrip-test.js +21 -18
  162. package/x/demo/routines/filmstrip-test.js.map +1 -1
  163. package/x/demo/routines/load-video.d.ts +1 -1
  164. package/x/demo/routines/load-video.js +1 -2
  165. package/x/demo/routines/load-video.js.map +1 -1
  166. package/x/demo/routines/playback-test.d.ts +2 -0
  167. package/x/demo/routines/playback-test.js +51 -0
  168. package/x/demo/routines/playback-test.js.map +1 -0
  169. package/x/demo/routines/timeline-setup.d.ts +6 -0
  170. package/x/demo/routines/timeline-setup.js +59 -0
  171. package/x/demo/routines/timeline-setup.js.map +1 -0
  172. package/x/demo/routines/transcode-test.js +17 -5
  173. package/x/demo/routines/transcode-test.js.map +1 -1
  174. package/x/demo/routines/transcriber-test.d.ts +4 -0
  175. package/x/demo/routines/transcriber-test.js +33 -0
  176. package/x/demo/routines/transcriber-test.js.map +1 -0
  177. package/x/demo/routines/transitions-test.d.ts +5 -0
  178. package/x/demo/routines/transitions-test.js +35 -0
  179. package/x/demo/routines/transitions-test.js.map +1 -0
  180. package/x/demo/routines/waveform-test.d.ts +2 -1
  181. package/x/demo/routines/waveform-test.js +29 -8
  182. package/x/demo/routines/waveform-test.js.map +1 -1
  183. package/x/demo/webworkerAll-JENRT6BT.js +2 -0
  184. package/x/demo/webworkerAll-JENRT6BT.js.map +7 -0
  185. package/x/driver/driver-worker.d.ts +1 -0
  186. package/x/driver/driver-worker.js +6 -0
  187. package/x/driver/driver-worker.js.map +1 -0
  188. package/x/driver/driver.d.ts +24 -9
  189. package/x/driver/driver.js +51 -40
  190. package/x/driver/driver.js.map +1 -1
  191. package/x/driver/driver.test.js +1 -1
  192. package/x/driver/driver.test.js.map +1 -1
  193. package/x/driver/driver.worker.bundle.min.js +137 -1137
  194. package/x/driver/driver.worker.bundle.min.js.map +4 -4
  195. package/x/driver/fns/host.d.ts +12 -4
  196. package/x/driver/fns/host.js +3 -3
  197. package/x/driver/fns/host.js.map +1 -1
  198. package/x/driver/fns/schematic.d.ts +65 -25
  199. package/x/driver/fns/work.d.ts +14 -7
  200. package/x/driver/fns/work.js +83 -174
  201. package/x/driver/fns/work.js.map +1 -1
  202. package/x/driver/parts/compositor.d.ts +39 -0
  203. package/x/driver/parts/compositor.js +264 -0
  204. package/x/driver/parts/compositor.js.map +1 -0
  205. package/x/driver/parts/machina.d.ts +0 -20
  206. package/x/driver/parts/machina.js +6 -10
  207. package/x/driver/parts/machina.js.map +1 -1
  208. package/x/driver/utils/find-pixi-filter.d.ts +5 -0
  209. package/x/driver/utils/find-pixi-filter.js +13 -0
  210. package/x/driver/utils/find-pixi-filter.js.map +1 -0
  211. package/x/driver/utils/load-decoder-source.d.ts +2 -1
  212. package/x/driver/utils/load-decoder-source.js +2 -3
  213. package/x/driver/utils/load-decoder-source.js.map +1 -1
  214. package/x/features/bg-remover/bg-remover.d.ts +5 -0
  215. package/x/features/bg-remover/bg-remover.js +18 -0
  216. package/x/features/bg-remover/bg-remover.js.map +1 -0
  217. package/x/features/bg-remover/default-spec.d.ts +2 -0
  218. package/x/features/bg-remover/default-spec.js +6 -0
  219. package/x/features/bg-remover/default-spec.js.map +1 -0
  220. package/x/features/bg-remover/types.d.ts +20 -0
  221. package/x/features/bg-remover/types.js +2 -0
  222. package/x/features/bg-remover/types.js.map +1 -0
  223. package/x/features/bg-remover/worker.bundle.js +39 -0
  224. package/x/features/bg-remover/worker.bundle.js.map +1 -0
  225. package/x/features/bg-remover/worker.bundle.min.js +2916 -0
  226. package/x/features/bg-remover/worker.bundle.min.js.map +7 -0
  227. package/x/features/parts/expose-errors.d.ts +3 -0
  228. package/x/features/parts/expose-errors.js +32 -0
  229. package/x/features/parts/expose-errors.js.map +1 -0
  230. package/x/features/parts/load-pipe.d.ts +2 -0
  231. package/x/features/parts/load-pipe.js +13 -0
  232. package/x/features/parts/load-pipe.js.map +1 -0
  233. package/x/features/parts/types.d.ts +15 -0
  234. package/x/features/parts/types.js +2 -0
  235. package/x/features/parts/types.js.map +1 -0
  236. package/x/features/speech/transcribe/default-spec.d.ts +2 -0
  237. package/x/features/speech/transcribe/default-spec.js +8 -0
  238. package/x/features/speech/transcribe/default-spec.js.map +1 -0
  239. package/x/features/speech/transcribe/parts/prep-audio.d.ts +5 -0
  240. package/x/features/speech/transcribe/parts/prep-audio.js +21 -0
  241. package/x/features/speech/transcribe/parts/prep-audio.js.map +1 -0
  242. package/x/features/speech/transcribe/parts/transcribe.d.ts +5 -0
  243. package/x/features/speech/transcribe/parts/transcribe.js +56 -0
  244. package/x/features/speech/transcribe/parts/transcribe.js.map +1 -0
  245. package/x/features/speech/transcribe/transcriber.d.ts +5 -0
  246. package/x/features/speech/transcribe/transcriber.js +33 -0
  247. package/x/features/speech/transcribe/transcriber.js.map +1 -0
  248. package/x/features/speech/transcribe/types.d.ts +59 -0
  249. package/x/features/speech/transcribe/types.js +2 -0
  250. package/x/features/speech/transcribe/types.js.map +1 -0
  251. package/x/features/speech/transcribe/worker.bundle.js +35 -0
  252. package/x/features/speech/transcribe/worker.bundle.js.map +1 -0
  253. package/x/features/speech/transcribe/worker.bundle.min.js +2916 -0
  254. package/x/features/speech/transcribe/worker.bundle.min.js.map +7 -0
  255. package/x/features/transition/parts/fragment.d.ts +1 -0
  256. package/x/features/transition/parts/fragment.js +25 -0
  257. package/x/features/transition/parts/fragment.js.map +1 -0
  258. package/x/features/transition/parts/types.d.ts +23 -0
  259. package/x/features/transition/parts/types.js +2 -0
  260. package/x/features/transition/parts/types.js.map +1 -0
  261. package/x/features/transition/parts/uniforms.d.ts +31 -0
  262. package/x/features/transition/parts/uniforms.js +27 -0
  263. package/x/features/transition/parts/uniforms.js.map +1 -0
  264. package/x/features/transition/parts/vertex.d.ts +1 -0
  265. package/x/features/transition/parts/vertex.js +32 -0
  266. package/x/features/transition/parts/vertex.js.map +1 -0
  267. package/x/features/transition/transition.d.ts +5 -0
  268. package/x/features/transition/transition.js +50 -0
  269. package/x/features/transition/transition.js.map +1 -0
  270. package/x/index.d.ts +1 -0
  271. package/x/index.html +349 -30
  272. package/x/index.html.js +103 -19
  273. package/x/index.html.js.map +1 -1
  274. package/x/index.js +1 -0
  275. package/x/index.js.map +1 -1
  276. package/x/tests.bundle.d.ts +1 -0
  277. package/x/tests.bundle.js +8 -0
  278. package/x/tests.bundle.js.map +1 -0
  279. package/x/tests.bundle.min.js +7374 -0
  280. package/x/tests.bundle.min.js.map +7 -0
  281. package/x/tests.html +316 -0
  282. package/x/tests.html.d.ts +2 -0
  283. package/x/tests.html.js +22 -0
  284. package/x/tests.html.js.map +1 -0
  285. package/x/timeline/index.d.ts +16 -0
  286. package/x/timeline/index.js +16 -0
  287. package/x/timeline/index.js.map +1 -1
  288. package/x/timeline/parts/animations/make.d.ts +3 -0
  289. package/x/timeline/parts/animations/make.js +29 -0
  290. package/x/timeline/parts/animations/make.js.map +1 -0
  291. package/x/timeline/parts/animations/presets.d.ts +170 -0
  292. package/x/timeline/parts/animations/presets.js +135 -0
  293. package/x/timeline/parts/animations/presets.js.map +1 -0
  294. package/x/timeline/parts/animations/properties.d.ts +84 -0
  295. package/x/timeline/parts/animations/properties.js +25 -0
  296. package/x/timeline/parts/animations/properties.js.map +1 -0
  297. package/x/timeline/parts/animations/registry.d.ts +218 -0
  298. package/x/timeline/parts/animations/registry.js +11 -0
  299. package/x/timeline/parts/animations/registry.js.map +1 -0
  300. package/x/timeline/parts/animations/types.d.ts +60 -0
  301. package/x/timeline/parts/animations/types.js +2 -0
  302. package/x/timeline/parts/animations/types.js.map +1 -0
  303. package/x/timeline/parts/basics.d.ts +1 -1
  304. package/x/timeline/parts/captions.d.ts +41 -0
  305. package/x/timeline/parts/captions.js +55 -0
  306. package/x/timeline/parts/captions.js.map +1 -0
  307. package/x/timeline/parts/filmstrip.d.ts +4 -3
  308. package/x/timeline/parts/filmstrip.js +29 -10
  309. package/x/timeline/parts/filmstrip.js.map +1 -1
  310. package/x/timeline/parts/filters.d.ts +108 -0
  311. package/x/timeline/parts/filters.js +340 -0
  312. package/x/timeline/parts/filters.js.map +1 -0
  313. package/x/timeline/parts/item.d.ts +106 -12
  314. package/x/timeline/parts/item.js +11 -7
  315. package/x/timeline/parts/item.js.map +1 -1
  316. package/x/timeline/parts/media.d.ts +6 -0
  317. package/x/timeline/parts/media.js +35 -1
  318. package/x/timeline/parts/media.js.map +1 -1
  319. package/x/timeline/parts/resource-pool.d.ts +3 -0
  320. package/x/timeline/parts/resource-pool.js +7 -4
  321. package/x/timeline/parts/resource-pool.js.map +1 -1
  322. package/x/timeline/parts/resource.d.ts +3 -0
  323. package/x/timeline/parts/transitions.d.ts +15 -0
  324. package/x/timeline/parts/transitions.js +81 -0
  325. package/x/timeline/parts/transitions.js.map +1 -0
  326. package/x/timeline/parts/waveform/parts/collect.d.ts +11 -0
  327. package/x/timeline/parts/waveform/parts/collect.js +56 -0
  328. package/x/timeline/parts/waveform/parts/collect.js.map +1 -0
  329. package/x/timeline/parts/waveform/parts/render.d.ts +5 -0
  330. package/x/timeline/parts/waveform/parts/render.js +29 -0
  331. package/x/timeline/parts/waveform/parts/render.js.map +1 -0
  332. package/x/timeline/parts/waveform/parts/types.d.ts +21 -0
  333. package/x/timeline/parts/waveform/parts/types.js +2 -0
  334. package/x/timeline/parts/waveform/parts/types.js.map +1 -0
  335. package/x/timeline/parts/waveform/waveform.d.ts +19 -0
  336. package/x/timeline/parts/waveform/waveform.js +133 -0
  337. package/x/timeline/parts/waveform/waveform.js.map +1 -0
  338. package/x/timeline/renderers/export/parts/audio-gain.d.ts +1 -0
  339. package/x/timeline/renderers/export/parts/audio-gain.js +13 -0
  340. package/x/timeline/renderers/export/parts/audio-gain.js.map +1 -0
  341. package/x/timeline/renderers/export/parts/audio-mix.d.ts +21 -0
  342. package/x/timeline/renderers/export/parts/audio-mix.js +89 -0
  343. package/x/timeline/renderers/export/parts/audio-mix.js.map +1 -0
  344. package/x/timeline/renderers/export/parts/cursor.d.ts +35 -0
  345. package/x/timeline/renderers/export/parts/cursor.js +236 -0
  346. package/x/timeline/renderers/export/parts/cursor.js.map +1 -0
  347. package/x/timeline/renderers/export/parts/produce-audio.d.ts +6 -0
  348. package/x/timeline/renderers/export/parts/produce-audio.js +41 -0
  349. package/x/timeline/renderers/export/parts/produce-audio.js.map +1 -0
  350. package/x/timeline/renderers/export/parts/produce-video.d.ts +10 -0
  351. package/x/timeline/renderers/export/parts/produce-video.js +26 -0
  352. package/x/timeline/renderers/export/parts/produce-video.js.map +1 -0
  353. package/x/timeline/renderers/export/parts/resamplers.d.ts +12 -0
  354. package/x/timeline/renderers/export/parts/resamplers.js +29 -0
  355. package/x/timeline/renderers/export/parts/resamplers.js.map +1 -0
  356. package/x/timeline/renderers/export/produce.d.ts +13 -0
  357. package/x/timeline/renderers/export/produce.js +15 -0
  358. package/x/timeline/renderers/export/produce.js.map +1 -0
  359. package/x/timeline/renderers/parts/handy.d.ts +38 -0
  360. package/x/timeline/renderers/parts/handy.js +263 -0
  361. package/x/timeline/renderers/parts/handy.js.map +1 -0
  362. package/x/timeline/renderers/parts/samplers/audio/parts/find.d.ts +6 -0
  363. package/x/timeline/renderers/parts/samplers/audio/parts/find.js +15 -0
  364. package/x/timeline/renderers/parts/samplers/audio/parts/find.js.map +1 -0
  365. package/x/timeline/renderers/parts/samplers/audio/parts/init.d.ts +5 -0
  366. package/x/timeline/renderers/parts/samplers/audio/parts/init.js +40 -0
  367. package/x/timeline/renderers/parts/samplers/audio/parts/init.js.map +1 -0
  368. package/x/timeline/renderers/parts/samplers/audio/parts/sink.d.ts +8 -0
  369. package/x/timeline/renderers/parts/samplers/audio/parts/sink.js +24 -0
  370. package/x/timeline/renderers/parts/samplers/audio/parts/sink.js.map +1 -0
  371. package/x/timeline/renderers/parts/samplers/audio/parts/types.d.ts +14 -0
  372. package/x/timeline/renderers/parts/samplers/audio/parts/types.js +2 -0
  373. package/x/timeline/renderers/parts/samplers/audio/parts/types.js.map +1 -0
  374. package/x/timeline/renderers/parts/samplers/audio/sampler.d.ts +11 -0
  375. package/x/timeline/renderers/parts/samplers/audio/sampler.js +22 -0
  376. package/x/timeline/renderers/parts/samplers/audio/sampler.js.map +1 -0
  377. package/x/timeline/renderers/parts/samplers/visual/parts/defaults.d.ts +8 -0
  378. package/x/timeline/renderers/parts/samplers/visual/parts/defaults.js +14 -0
  379. package/x/timeline/renderers/parts/samplers/visual/parts/defaults.js.map +1 -0
  380. package/x/timeline/renderers/parts/samplers/visual/parts/image-sink.d.ts +11 -0
  381. package/x/timeline/renderers/parts/samplers/visual/parts/image-sink.js +36 -0
  382. package/x/timeline/renderers/parts/samplers/visual/parts/image-sink.js.map +1 -0
  383. package/x/timeline/renderers/parts/samplers/visual/parts/sample.d.ts +9 -0
  384. package/x/timeline/renderers/parts/samplers/visual/parts/sample.js +70 -0
  385. package/x/timeline/renderers/parts/samplers/visual/parts/sample.js.map +1 -0
  386. package/x/timeline/renderers/parts/samplers/visual/parts/sequence.d.ts +6 -0
  387. package/x/timeline/renderers/parts/samplers/visual/parts/sequence.js +63 -0
  388. package/x/timeline/renderers/parts/samplers/visual/parts/sequence.js.map +1 -0
  389. package/x/timeline/renderers/parts/samplers/visual/parts/transition.d.ts +3 -0
  390. package/x/timeline/renderers/parts/samplers/visual/parts/transition.js +18 -0
  391. package/x/timeline/renderers/parts/samplers/visual/parts/transition.js.map +1 -0
  392. package/x/timeline/renderers/parts/samplers/visual/parts/types.d.ts +9 -0
  393. package/x/timeline/renderers/parts/samplers/visual/parts/types.js +2 -0
  394. package/x/timeline/renderers/parts/samplers/visual/parts/types.js.map +1 -0
  395. package/x/timeline/renderers/parts/samplers/visual/parts/video-sink.d.ts +8 -0
  396. package/x/timeline/renderers/parts/samplers/visual/parts/video-sink.js +24 -0
  397. package/x/timeline/renderers/parts/samplers/visual/parts/video-sink.js.map +1 -0
  398. package/x/timeline/renderers/parts/samplers/visual/sampler.d.ts +7 -0
  399. package/x/timeline/renderers/parts/samplers/visual/sampler.js +20 -0
  400. package/x/timeline/renderers/parts/samplers/visual/sampler.js.map +1 -0
  401. package/x/timeline/renderers/parts/schedulers.d.ts +17 -0
  402. package/x/timeline/renderers/parts/schedulers.js +64 -0
  403. package/x/timeline/renderers/parts/schedulers.js.map +1 -0
  404. package/x/timeline/renderers/player/parts/playback.d.ts +39 -0
  405. package/x/timeline/renderers/player/parts/playback.js +160 -0
  406. package/x/timeline/renderers/player/parts/playback.js.map +1 -0
  407. package/x/timeline/renderers/player/player.d.ts +27 -0
  408. package/x/timeline/renderers/player/player.js +64 -0
  409. package/x/timeline/renderers/player/player.js.map +1 -0
  410. package/x/timeline/renderers/renderers.test.d.ts +33 -0
  411. package/x/timeline/renderers/renderers.test.js +321 -0
  412. package/x/timeline/renderers/renderers.test.js.map +1 -0
  413. package/x/timeline/sugar/helpers.d.ts +72 -0
  414. package/x/timeline/sugar/helpers.js +122 -0
  415. package/x/timeline/sugar/helpers.js.map +1 -0
  416. package/x/timeline/sugar/o.d.ts +59 -8
  417. package/x/timeline/sugar/o.js +326 -40
  418. package/x/timeline/sugar/o.js.map +1 -1
  419. package/x/timeline/sugar/omni.d.ts +11 -2
  420. package/x/timeline/sugar/omni.js +30 -9
  421. package/x/timeline/sugar/omni.js.map +1 -1
  422. package/x/timeline/sugar/omni.test.d.ts +27 -0
  423. package/x/timeline/sugar/omni.test.js +128 -0
  424. package/x/timeline/sugar/omni.test.js.map +1 -0
  425. package/x/timeline/types.d.ts +37 -0
  426. package/x/timeline/types.js +2 -0
  427. package/x/timeline/types.js.map +1 -0
  428. package/x/timeline/utils/anim.d.ts +3 -0
  429. package/x/timeline/utils/anim.js +40 -0
  430. package/x/timeline/utils/anim.js.map +1 -0
  431. package/x/timeline/utils/checksum.d.ts +3 -2
  432. package/x/timeline/utils/checksum.js +2 -1
  433. package/x/timeline/utils/checksum.js.map +1 -1
  434. package/x/timeline/utils/datafile.d.ts +5 -3
  435. package/x/timeline/utils/datafile.js +18 -5
  436. package/x/timeline/utils/datafile.js.map +1 -1
  437. package/x/timeline/utils/dummy-data.d.ts +1 -2
  438. package/x/timeline/utils/dummy-data.js +4 -2
  439. package/x/timeline/utils/dummy-data.js.map +1 -1
  440. package/x/timeline/utils/matrix.d.ts +17 -0
  441. package/x/timeline/utils/matrix.js +36 -0
  442. package/x/timeline/utils/matrix.js.map +1 -0
  443. package/x/timeline/utils/terps.d.ts +11 -0
  444. package/x/timeline/utils/terps.js +57 -0
  445. package/x/timeline/utils/terps.js.map +1 -0
  446. package/x/units/fps.d.ts +6 -0
  447. package/x/units/fps.js +2 -0
  448. package/x/units/fps.js.map +1 -0
  449. package/x/units/ms.d.ts +6 -0
  450. package/x/units/ms.js +2 -0
  451. package/x/units/ms.js.map +1 -0
  452. package/x/units/seconds.d.ts +6 -0
  453. package/x/units/seconds.js +2 -0
  454. package/x/units/seconds.js.map +1 -0
  455. package/x/webworkerAll-RLCTMSDD.js +2 -0
  456. package/x/webworkerAll-RLCTMSDD.js.map +7 -0
  457. package/s/tests.test.ts +0 -8
  458. package/s/timeline/parts/waveform.ts +0 -62
  459. package/s/timeline/sugar/omni-test.ts +0 -38
  460. package/x/tests.test.js +0 -6
  461. package/x/tests.test.js.map +0 -1
  462. package/x/timeline/parts/waveform.d.ts +0 -8
  463. package/x/timeline/parts/waveform.js +0 -51
  464. package/x/timeline/parts/waveform.js.map +0 -1
  465. package/x/timeline/sugar/omni-test.js +0 -22
  466. package/x/timeline/sugar/omni-test.js.map +0 -1
  467. /package/x/{tests.test.d.ts → features/bg-remover/worker.bundle.d.ts} +0 -0
  468. /package/x/{timeline/sugar/omni-test.d.ts → features/speech/transcribe/worker.bundle.d.ts} +0 -0
@@ -17,7 +17,7 @@ export class Filmstrip {
17
17
 
18
18
  private constructor(
19
19
  private videoTrack: InputVideoTrack,
20
- private options: Required<FilmstripOptions>
20
+ private options: FilmstripOptions
21
21
  ) {
22
22
  this.#sink = new CanvasSink(videoTrack, options.canvasSinkOptions)
23
23
  }
@@ -33,7 +33,8 @@ export class Filmstrip {
33
33
  videoTrack, {
34
34
  frequency: options.frequency ?? 1,
35
35
  canvasSinkOptions: options.canvasSinkOptions ?? {width: 80, height: 50, fit: "fill"},
36
- onChange: options.onChange
36
+ onChange: options.onChange,
37
+ onPlaceholders: options.onPlaceholders
37
38
  })
38
39
  else throw new Error("Source has no video track")
39
40
  }
@@ -54,9 +55,28 @@ export class Filmstrip {
54
55
  return this.options.frequency
55
56
  }
56
57
 
57
- #computeActiveRange([start, end]: TimeRange): TimeRange {
58
+ #computeActiveRange([start, end]: TimeRange, margin = 1): TimeRange {
58
59
  const tileSize = end - start
59
- return [start - tileSize, end + tileSize]
60
+ return [start - tileSize * margin, end + tileSize * margin]
61
+ }
62
+
63
+ async #generatePlaceholders() {
64
+ const [rangeStart, rangeEnd] = this.#activeRange
65
+ const neededTimestamps = new Set<number>()
66
+
67
+ // duration should be computed but with trim etc also
68
+ const duration = await this.videoTrack.computeDuration()
69
+ for (
70
+ let timestamp = Math.max(0, rangeStart);
71
+ timestamp <= rangeEnd;
72
+ timestamp += this.options.frequency
73
+ ) {
74
+ // Clamp to valid time range
75
+ if (timestamp >= 0 && timestamp <= duration)
76
+ neededTimestamps.add(timestamp)
77
+ }
78
+
79
+ this.options.onPlaceholders?.([...neededTimestamps])
60
80
  }
61
81
 
62
82
  async #generateTiles() {
@@ -66,13 +86,13 @@ export class Filmstrip {
66
86
  // duration should be computed but with trim etc also
67
87
  const duration = await this.videoTrack.computeDuration()
68
88
  for (
69
- let timestamp = rangeStart;
89
+ let timestamp = Math.max(0, rangeStart);
70
90
  timestamp <= rangeEnd;
71
91
  timestamp += this.options.frequency
72
92
  ) {
73
93
  // Clamp to valid time range
74
94
  if (timestamp >= 0 && timestamp <= duration)
75
- neededTimestamps.add(+timestamp.toFixed(3))
95
+ neededTimestamps.add(timestamp)
76
96
  }
77
97
 
78
98
  const missingTimestamps = [...neededTimestamps]
@@ -106,15 +126,20 @@ export class Filmstrip {
106
126
  * @param visibleRange - The current timeline viewport as a [start, end] tuple in seconds.
107
127
  */
108
128
  set range(visibleRange: TimeRange) {
109
- const newRange = this.#computeActiveRange(visibleRange)
110
- // Avoid redundant updates
111
- if (
112
- this.#activeRange[0] === newRange[0] &&
113
- this.#activeRange[1] === newRange[1]
114
- )
115
- return
129
+ const [visStart, visEnd] = visibleRange
130
+ const visibleSize = visEnd - visStart
131
+ const [actStart, actEnd] = this.#activeRange
132
+
133
+ // trigger when we're 1x visible width away from margin edges
134
+ const leftTrigger = actStart + visibleSize
135
+ const rightTrigger = actEnd - visibleSize
136
+
137
+ const nearLeftEdge = visStart < leftTrigger
138
+ const nearRightEdge = visEnd > rightTrigger
139
+
140
+ if (!nearLeftEdge && !nearRightEdge) return
116
141
 
117
- this.#activeRange = newRange
142
+ this.#activeRange = this.#computeActiveRange(visibleRange, 2)
118
143
  this.#update()
119
144
  }
120
145
 
@@ -122,6 +147,7 @@ export class Filmstrip {
122
147
  #shouldRunAgain = false
123
148
 
124
149
  async #update() {
150
+ this.#generatePlaceholders()
125
151
  // Perform update immediately. If multiple updates are requested while updating,
126
152
  // only the latest one will run after the current finishes (skips intermediate ones).
127
153
  if(this.#updating) {
@@ -147,11 +173,12 @@ export class Filmstrip {
147
173
  }
148
174
  }
149
175
 
150
- type TimeRange = [number, number]
176
+ export type TimeRange = [start: number, end: number]
151
177
 
152
178
  interface FilmstripOptions {
153
- frequency?: number
179
+ frequency: number
154
180
  canvasSinkOptions?: CanvasSinkOptions
181
+ onPlaceholders?: (timestamps: number[]) => void
155
182
  onChange: (tiles: {
156
183
  time: number
157
184
  canvas: WrappedCanvas
@@ -0,0 +1,453 @@
1
+ import type {
2
+ AlphaFilterOptions,
3
+ BlurFilterOptions,
4
+ ColorMatrix,
5
+ FilterOptions as PixiFilterOptions,
6
+ NoiseFilterOptions,
7
+ Point,
8
+ } from "pixi.js"
9
+ import type * as PixiFilters from "pixi-filters"
10
+ import {FilterableItem, Item} from "./item.js"
11
+
12
+ export type PixelateFilterOptions = {size?: number | number[] | Point}
13
+ export type EmbossFilterOptions = {strength?: number}
14
+
15
+ export type ChoiceOptions = string[] | Record<string, string | number> | number[]
16
+
17
+ export type ChoiceFilterProperty = {
18
+ type: "choice"
19
+ options: ChoiceOptions
20
+ default: string | number
21
+ }
22
+
23
+ export type NumericFilterProperty = {
24
+ type: "number"
25
+ min: number
26
+ max: number
27
+ default: number
28
+ step?: number
29
+ }
30
+
31
+ export type ColorFilterProperty = {
32
+ type: "color"
33
+ default: string
34
+ }
35
+
36
+ export type BooleanFilterProperty = {
37
+ type: "boolean"
38
+ default: boolean
39
+ }
40
+
41
+ export type ObjectFilterProperty = {
42
+ type: "object"
43
+ properties: Record<string, FilterPropertyConfig>
44
+ }
45
+
46
+ export type ArrayFilterProperty = {
47
+ type: "array"
48
+ items: FilterPropertyConfig[]
49
+ }
50
+
51
+ export type FilterPropertyConfig =
52
+ | NumericFilterProperty
53
+ | ColorFilterProperty
54
+ | BooleanFilterProperty
55
+ | ChoiceFilterProperty
56
+ | ObjectFilterProperty
57
+ | ArrayFilterProperty
58
+
59
+ export interface FilterSchema {
60
+ [property: string]: FilterPropertyConfig
61
+ }
62
+
63
+ export type SchemaFromOptions<T> = {
64
+ [K in keyof Required<T>]?: FilterPropertyConfig
65
+ }
66
+
67
+ type FilterDefinition<TType extends string, TParams> = {
68
+ type: TType
69
+ schema: SchemaFromOptions<TParams>
70
+ _params?: TParams
71
+ }
72
+
73
+ const num =(
74
+ min: number,
75
+ max: number,
76
+ defaultValue: number,
77
+ step?: number,
78
+ ): NumericFilterProperty => ({
79
+ type: "number",
80
+ min,
81
+ max,
82
+ default: defaultValue,
83
+ ...(step === undefined ? {} : {step}),
84
+ })
85
+
86
+ const color =(defaultValue: string): ColorFilterProperty => ({
87
+ type: "color",
88
+ default: defaultValue,
89
+ })
90
+
91
+ const bool =(defaultValue: boolean): BooleanFilterProperty => ({
92
+ type: "boolean",
93
+ default: defaultValue,
94
+ })
95
+
96
+ const choice =(
97
+ options: ChoiceOptions,
98
+ defaultValue: string | number,
99
+ ): ChoiceFilterProperty => ({
100
+ type: "choice",
101
+ options,
102
+ default: defaultValue,
103
+ })
104
+
105
+ const object =(properties: Record<string, FilterPropertyConfig>): ObjectFilterProperty => ({
106
+ type: "object",
107
+ properties,
108
+ })
109
+
110
+ const array =(items: FilterPropertyConfig[]): ArrayFilterProperty => ({
111
+ type: "array",
112
+ items,
113
+ })
114
+
115
+ const kernelSizes = [3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25]
116
+ const glitchFillModes = {
117
+ TRANSPARENT: 0,
118
+ ORIGINAL: 1,
119
+ LOOP: 2,
120
+ CLAMP: 3,
121
+ MIRROR: 4,
122
+ } as const
123
+
124
+ const defineFilter = <TParams>() =>
125
+ <TType extends string>(
126
+ type: TType,
127
+ schema: SchemaFromOptions<TParams> = {},
128
+ ): FilterDefinition<TType, TParams> => ({type, schema})
129
+
130
+ export const filters = {
131
+ adjustment: defineFilter<PixiFilters.AdjustmentFilterOptions>()("AdjustmentFilter", {
132
+ gamma: num(0, 5, 1),
133
+ saturation: num(0, 5, 1),
134
+ contrast: num(0, 5, 1),
135
+ brightness: num(0, 5, 1),
136
+ red: num(0, 5, 1),
137
+ green: num(0, 5, 1),
138
+ blue: num(0, 5, 1),
139
+ alpha: num(0, 1, 1, 0.01),
140
+ }),
141
+ advancedBloom: defineFilter<PixiFilters.AdvancedBloomFilterOptions>()("AdvancedBloomFilter", {
142
+ threshold: num(0.1, 0.9, 0.5, 0.01),
143
+ bloomScale: num(0.5, 1.5, 1, 0.01),
144
+ brightness: num(0.5, 1.5, 1, 0.01),
145
+ blur: num(0, 20, 8, 0.1),
146
+ quality: num(1, 20, 4, 1),
147
+ }),
148
+ alpha: defineFilter<AlphaFilterOptions>()("AlphaFilter", {
149
+ alpha: num(0, 1, 1, 0.01),
150
+ }),
151
+ ascii: defineFilter<PixiFilters.AsciiFilterOptions>()("AsciiFilter", {
152
+ size: num(2, 20, 8, 1),
153
+ color: color("#ffffff"),
154
+ replaceColor: bool(false),
155
+ }),
156
+ backdropBlur: defineFilter<BlurFilterOptions>()("BackdropBlurFilter", {
157
+ strength: num(0, 100, 8, 0.1),
158
+ quality: num(1, 10, 4, 1),
159
+ }),
160
+ bevel: defineFilter<PixiFilters.BevelFilterOptions>()("BevelFilter", {
161
+ rotation: num(0, 360, 45, 1),
162
+ thickness: num(0, 10, 2, 0.1),
163
+ lightColor: color("#ffffff"),
164
+ lightAlpha: num(0, 1, 0.7, 0.01),
165
+ shadowColor: color("#000000"),
166
+ shadowAlpha: num(0, 1, 0.7, 0.01),
167
+ }),
168
+ bloom: defineFilter<PixiFilters.BloomFilterOptions>()("BloomFilter", {
169
+ strength: object({
170
+ x: num(0, 20, 2, 0.1),
171
+ y: num(0, 20, 2, 0.1),
172
+ }),
173
+ quality: num(1, 20, 4, 1),
174
+ resolution: num(0.25, 4, 1, 0.01),
175
+ kernelSize: choice([5, 7, 9, 11, 13, 15], 5),
176
+ }),
177
+ blur: defineFilter<BlurFilterOptions>()("BlurFilter", {
178
+ strength: num(0, 100, 8, 0.1),
179
+ quality: num(1, 10, 4, 1),
180
+ }),
181
+ bulgePinch: defineFilter<PixiFilters.BulgePinchFilterOptions>()("BulgePinchFilter", {
182
+ radius: num(0, 1000, 100, 1),
183
+ strength: num(-1, 1, 1, 0.01),
184
+ center: object({
185
+ x: num(0, 1, 0.5, 0.01),
186
+ y: num(0, 1, 0.5, 0.01),
187
+ }),
188
+ }),
189
+ colorGradient: defineFilter<PixiFilters.ColorGradientFilterOptions | PixiFilters.ColorGradientFilterCSSOptions>()("ColorGradientFilter"),
190
+ colorMatrix: defineFilter<PixiFilterOptions & {matrix?: ColorMatrix}>()("ColorMatrixFilter"),
191
+ colorOverlay: defineFilter<PixiFilters.ColorOverlayFilterOptions>()("ColorOverlayFilter", {
192
+ color: color("#ff0000"),
193
+ alpha: num(0, 1, 0.5, 0.01),
194
+ }),
195
+ colorReplace: defineFilter<PixiFilters.ColorReplaceFilterOptions>()("ColorReplaceFilter", {
196
+ originalColor: color("#ff0000"),
197
+ targetColor: color("#000000"),
198
+ tolerance: num(0, 1, 0.4, 0.01),
199
+ }),
200
+ convolution: defineFilter<PixiFilters.ConvolutionFilterOptions>()("ConvolutionFilter", {
201
+ width: num(0, 500, 300, 1),
202
+ height: num(0, 500, 300, 1),
203
+ matrix: array([
204
+ num(0, 1, 0),
205
+ num(0, 1, 0.5, 0.01),
206
+ num(0, 1, 0),
207
+ num(0, 1, 0.5, 0.01),
208
+ num(0, 1, 1, 0.01),
209
+ num(0, 1, 0.5, 0.01),
210
+ num(0, 1, 0),
211
+ num(0, 1, 0.5, 0.01),
212
+ num(0, 1, 0),
213
+ ]),
214
+ }),
215
+ crossHatch: defineFilter<{}>()("CrossHatchFilter"),
216
+ crt: defineFilter<PixiFilters.CRTFilterOptions>()("CRTFilter", {
217
+ curvature: num(0, 10, 1, 0.01),
218
+ lineWidth: num(0, 5, 3, 0.01),
219
+ lineContrast: num(0, 1, 0.3, 0.01),
220
+ verticalLine: bool(false),
221
+ noise: num(0, 1, 0.2, 0.01),
222
+ noiseSize: num(1, 10, 1, 0.1),
223
+ vignetting: num(0, 1, 0.3, 0.01),
224
+ vignettingAlpha: num(0, 1, 1, 0.01),
225
+ vignettingBlur: num(0, 1, 0.3, 0.01),
226
+ seed: num(0, 1, 0, 0.01),
227
+ time: num(0.5, 20, 0.5, 0.01),
228
+ }),
229
+ dot: defineFilter<PixiFilters.DotFilterOptions>()("DotFilter", {
230
+ scale: num(0.3, 1, 1, 0.01),
231
+ angle: num(0, 5, 5, 0.01),
232
+ grayscale: bool(true),
233
+ }),
234
+ dropShadow: defineFilter<PixiFilters.DropShadowFilterOptions>()("DropShadowFilter", {
235
+ blur: num(0, 20, 2, 0.1),
236
+ quality: num(1, 20, 3, 1),
237
+ alpha: num(0, 1, 0.5, 0.01),
238
+ offset: object({
239
+ x: num(-50, 50, 4, 1),
240
+ y: num(-50, 50, 4, 1),
241
+ }),
242
+ color: color("#000000"),
243
+ shadowOnly: bool(false),
244
+ }),
245
+ emboss: defineFilter<EmbossFilterOptions>()("EmbossFilter", {
246
+ strength: num(0, 20, 5, 0.1),
247
+ }),
248
+ glitch: defineFilter<PixiFilters.GlitchFilterOptions>()("GlitchFilter", {
249
+ slices: num(0, 64, 5, 1),
250
+ seed: num(0, 1, 0.5, 0.01),
251
+ offset: num(-400, 400, 100, 1),
252
+ direction: num(-180, 180, 0, 1),
253
+ fillMode: choice(glitchFillModes, "LOOP"),
254
+ average: bool(false),
255
+ minSize: num(0, 64, 8, 1),
256
+ sampleSize: num(1, 2048, 512, 1),
257
+ red: object({
258
+ x: num(-50, 50, 2, 1),
259
+ y: num(-50, 50, 2, 1),
260
+ }),
261
+ blue: object({
262
+ x: num(-50, 50, 10, 1),
263
+ y: num(-50, 50, -4, 1),
264
+ }),
265
+ green: object({
266
+ x: num(-50, 50, -10, 1),
267
+ y: num(-50, 50, 4, 1),
268
+ }),
269
+ }),
270
+ glow: defineFilter<PixiFilters.GlowFilterOptions>()("GlowFilter", {
271
+ distance: num(0, 20, 15, 0.1),
272
+ innerStrength: num(0, 20, 0, 0.1),
273
+ outerStrength: num(0, 20, 2, 0.1),
274
+ color: color("#ffffff"),
275
+ quality: num(0, 1, 0.2, 0.01),
276
+ alpha: num(0, 1, 1, 0.01),
277
+ knockout: bool(false),
278
+ }),
279
+ godray: defineFilter<PixiFilters.GodrayFilterOptions>()("GodrayFilter", {
280
+ time: num(0, 1, 0, 0.01),
281
+ gain: num(0, 1, 0.6, 0.01),
282
+ lacunarity: num(0, 5, 2.75, 0.01),
283
+ alpha: num(0, 1, 1, 0.01),
284
+ parallel: bool(true),
285
+ angle: num(-60, 60, 30, 1),
286
+ center: object({
287
+ x: num(-100, 2012, 956, 1),
288
+ y: num(-1000, -100, -100, 1),
289
+ }),
290
+ }),
291
+ grayscale: defineFilter<{}>()("GrayscaleFilter"),
292
+ hslAdjustment: defineFilter<PixiFilters.HslAdjustmentFilterOptions>()("HslAdjustmentFilter", {
293
+ hue: num(-180, 180, 0, 1),
294
+ saturation: num(-1, 1, 0, 0.01),
295
+ lightness: num(-1, 1, 0, 0.01),
296
+ colorize: bool(false),
297
+ alpha: num(0, 1, 1, 0.01),
298
+ }),
299
+ kawaseBlur: defineFilter<PixiFilters.KawaseBlurFilterOptions>()("KawaseBlurFilter", {
300
+ strength: num(0, 20, 4, 0.1),
301
+ quality: num(1, 20, 3, 1),
302
+ pixelSize: object({
303
+ x: num(0, 10, 1, 0.1),
304
+ y: num(0, 10, 1, 0.1),
305
+ }),
306
+ }),
307
+ motionBlur: defineFilter<PixiFilters.MotionBlurFilterOptions>()("MotionBlurFilter", {
308
+ velocity: object({
309
+ x: num(-90, 90, 40, 1),
310
+ y: num(-90, 90, 40, 1),
311
+ }),
312
+ kernelSize: choice(kernelSizes, 15),
313
+ offset: num(-150, 150, 0, 1),
314
+ }),
315
+ multiColorReplace: defineFilter<PixiFilters.MultiColorReplaceFilterOptions>()("MultiColorReplaceFilter"),
316
+ noise: defineFilter<NoiseFilterOptions>()("NoiseFilter", {
317
+ noise: num(0, 1, 0.5, 0.01),
318
+ seed: num(0.01, 10, 0.5, 0.01),
319
+ }),
320
+ oldFilm: defineFilter<PixiFilters.OldFilmFilterOptions>()("OldFilmFilter", {
321
+ sepia: num(0, 1, 0.3, 0.01),
322
+ noise: num(0, 1, 0.3, 0.01),
323
+ noiseSize: num(1, 10, 1, 0.1),
324
+ scratch: num(-1, 1, 0.5, 0.01),
325
+ scratchDensity: num(0, 1, 0.3, 0.01),
326
+ scratchWidth: num(1, 20, 1, 0.1),
327
+ vignetting: num(0, 1, 0.3, 0.01),
328
+ vignettingAlpha: num(0, 1, 1, 0.01),
329
+ vignettingBlur: num(0, 1, 0.3, 0.01),
330
+ }),
331
+ outline: defineFilter<PixiFilters.OutlineFilterOptions>()("OutlineFilter", {
332
+ thickness: num(0, 10, 4, 0.1),
333
+ color: color("#000000"),
334
+ alpha: num(0, 1, 1, 0.01),
335
+ knockout: bool(false),
336
+ }),
337
+ pixelate: defineFilter<PixelateFilterOptions>()("PixelateFilter", {
338
+ size: object({
339
+ x: num(4, 40, 10, 1),
340
+ y: num(4, 40, 10, 1),
341
+ }),
342
+ }),
343
+ radialBlur: defineFilter<PixiFilters.RadialBlurFilterOptions>()("RadialBlurFilter", {
344
+ angle: num(-180, 180, 20, 1),
345
+ radius: num(-1, 1912, 300, 1),
346
+ center: object({
347
+ x: num(0, 1912, 956, 1),
348
+ y: num(0, 920, 460, 1),
349
+ }),
350
+ kernelSize: choice(kernelSizes, 15),
351
+ }),
352
+ reflection: defineFilter<PixiFilters.ReflectionFilterOptions>()("ReflectionFilter", {
353
+ mirror: bool(true),
354
+ boundary: num(0, 1, 0.5, 0.01),
355
+ amplitude: object({
356
+ start: num(0, 50, 0, 0.1),
357
+ end: num(0, 50, 20, 0.1),
358
+ }),
359
+ waveLength: object({
360
+ start: num(10, 200, 30, 1),
361
+ end: num(10, 200, 100, 1),
362
+ }),
363
+ alpha: object({
364
+ start: num(0, 1, 1, 0.01),
365
+ end: num(0, 1, 1, 0.01),
366
+ }),
367
+ time: num(0, 20, 0, 0.01),
368
+ }),
369
+ rgbSplit: defineFilter<PixiFilters.RGBSplitFilterOptions>()("RGBSplitFilter", {
370
+ red: object({
371
+ x: num(-20, 20, -10, 1),
372
+ y: num(-20, 20, 0, 1),
373
+ }),
374
+ blue: object({
375
+ x: num(-20, 20, 0, 1),
376
+ y: num(-20, 20, 0, 1),
377
+ }),
378
+ green: object({
379
+ x: num(-20, 20, 0, 1),
380
+ y: num(-20, 20, 10, 1),
381
+ }),
382
+ }),
383
+ shockwave: defineFilter<PixiFilters.ShockwaveFilterOptions>()("ShockwaveFilter", {
384
+ speed: num(500, 2000, 500, 1),
385
+ amplitude: num(1, 100, 30, 1),
386
+ wavelength: num(2, 400, 160, 1),
387
+ brightness: num(0.2, 2, 1, 0.01),
388
+ radius: num(100, 2000, -1, 1),
389
+ center: object({
390
+ x: num(0, 1912, 956, 1),
391
+ y: num(0, 920, 460, 1),
392
+ }),
393
+ }),
394
+ simplexNoise: defineFilter<PixiFilters.SimplexNoiseFilterOptions>()("SimplexNoiseFilter", {
395
+ strength: num(0, 1, 0.5, 0.01),
396
+ noiseScale: num(0, 50, 10, 0.1),
397
+ offsetX: num(0, 5, 0, 0.01),
398
+ offsetY: num(0, 5, 0, 0.01),
399
+ offsetZ: num(0, 5, 0, 0.01),
400
+ step: num(-1, 1, -1, 0.01),
401
+ }),
402
+ tiltShift: defineFilter<PixiFilters.TiltShiftFilterOptions>()("TiltShiftFilter", {
403
+ blur: num(0, 200, 100, 0.1),
404
+ gradientBlur: num(0, 1000, 600, 1),
405
+ start: object({
406
+ x: num(0, 1912, 0, 1),
407
+ y: num(0, 920, 460, 1),
408
+ }),
409
+ end: object({
410
+ x: num(0, 1912, 1912, 1),
411
+ y: num(0, 920, 460, 1),
412
+ }),
413
+ }),
414
+ twist: defineFilter<Partial<PixiFilters.TwistFilterOptions>>()("TwistFilter", {
415
+ angle: num(-10, 10, 4, 0.01),
416
+ radius: num(0, 1912, 200, 1),
417
+ offset: object({
418
+ x: num(0, 1912, 956, 1),
419
+ y: num(0, 920, 460, 1),
420
+ }),
421
+ }),
422
+ zoomBlur: defineFilter<PixiFilters.ZoomBlurFilterOptions>()("ZoomBlurFilter", {
423
+ strength: num(0.01, 0.5, 0.1, 0.01),
424
+ center: object({
425
+ x: num(0, 1912, 956, 1),
426
+ y: num(0, 920, 460, 1),
427
+ }),
428
+ innerRadius: num(0, 956, 80, 1),
429
+ radius: num(0, 956, -1, 1),
430
+ }),
431
+ } as const
432
+
433
+ type FilterDefinitions = typeof filters
434
+ type FilterDefinitionParams<T> =
435
+ T extends FilterDefinition<string, infer TParams>
436
+ ? TParams
437
+ : never
438
+
439
+ export type FilterOptions = {
440
+ [TName in keyof FilterDefinitions as FilterDefinitions[TName]["type"]]:
441
+ FilterDefinitionParams<FilterDefinitions[TName]>
442
+ }
443
+
444
+ export type FilterType = FilterDefinitions[keyof FilterDefinitions]["type"]
445
+ export type FilterParams<T extends FilterType = FilterType> = FilterOptions[T]
446
+
447
+ export interface FilterAction<TFilter extends FilterType> {
448
+ <T extends FilterableItem>(item: T, params?: FilterParams<TFilter>): T
449
+ make(params?: FilterParams<TFilter>): Item.Filter<TFilter>
450
+ }
451
+ export type FilterActions = {
452
+ [TName in keyof typeof filters]: FilterAction<(typeof filters)[TName]["type"]>
453
+ }