@nodetool-ai/base-nodes 0.7.0-rc.22 → 0.8.1

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 (363) hide show
  1. package/README.md +21 -0
  2. package/dist/.nodetool-build-stamp +1 -0
  3. package/dist/index.d.ts +61 -67
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +179 -173
  6. package/dist/index.js.map +1 -1
  7. package/dist/platforms/browser.d.ts +19 -0
  8. package/dist/platforms/browser.d.ts.map +1 -0
  9. package/dist/platforms/browser.js +29 -0
  10. package/dist/platforms/browser.js.map +1 -0
  11. package/package.json +53 -65
  12. package/dist/lib/audio-wav.d.ts +0 -66
  13. package/dist/lib/audio-wav.d.ts.map +0 -1
  14. package/dist/lib/audio-wav.js +0 -215
  15. package/dist/lib/audio-wav.js.map +0 -1
  16. package/dist/nodes/agent-tool-hydration.d.ts +0 -10
  17. package/dist/nodes/agent-tool-hydration.d.ts.map +0 -1
  18. package/dist/nodes/agent-tool-hydration.js +0 -43
  19. package/dist/nodes/agent-tool-hydration.js.map +0 -1
  20. package/dist/nodes/agents.d.ts +0 -262
  21. package/dist/nodes/agents.d.ts.map +0 -1
  22. package/dist/nodes/agents.js +0 -2856
  23. package/dist/nodes/agents.js.map +0 -1
  24. package/dist/nodes/anthropic.d.ts +0 -26
  25. package/dist/nodes/anthropic.d.ts.map +0 -1
  26. package/dist/nodes/anthropic.js +0 -133
  27. package/dist/nodes/anthropic.js.map +0 -1
  28. package/dist/nodes/apify.d.ts +0 -120
  29. package/dist/nodes/apify.d.ts.map +0 -1
  30. package/dist/nodes/apify.js +0 -618
  31. package/dist/nodes/apify.js.map +0 -1
  32. package/dist/nodes/audio.d.ts +0 -301
  33. package/dist/nodes/audio.d.ts.map +0 -1
  34. package/dist/nodes/audio.js +0 -1274
  35. package/dist/nodes/audio.js.map +0 -1
  36. package/dist/nodes/code-node.d.ts +0 -34
  37. package/dist/nodes/code-node.d.ts.map +0 -1
  38. package/dist/nodes/code-node.js +0 -343
  39. package/dist/nodes/code-node.js.map +0 -1
  40. package/dist/nodes/code.d.ts +0 -301
  41. package/dist/nodes/code.d.ts.map +0 -1
  42. package/dist/nodes/code.js +0 -850
  43. package/dist/nodes/code.js.map +0 -1
  44. package/dist/nodes/compare.d.ts +0 -18
  45. package/dist/nodes/compare.d.ts.map +0 -1
  46. package/dist/nodes/compare.js +0 -122
  47. package/dist/nodes/compare.js.map +0 -1
  48. package/dist/nodes/constant.d.ts +0 -315
  49. package/dist/nodes/constant.d.ts.map +0 -1
  50. package/dist/nodes/constant.js +0 -715
  51. package/dist/nodes/constant.js.map +0 -1
  52. package/dist/nodes/control.d.ts +0 -83
  53. package/dist/nodes/control.d.ts.map +0 -1
  54. package/dist/nodes/control.js +0 -212
  55. package/dist/nodes/control.js.map +0 -1
  56. package/dist/nodes/data.d.ts +0 -369
  57. package/dist/nodes/data.d.ts.map +0 -1
  58. package/dist/nodes/data.js +0 -1590
  59. package/dist/nodes/data.js.map +0 -1
  60. package/dist/nodes/document.d.ts +0 -134
  61. package/dist/nodes/document.d.ts.map +0 -1
  62. package/dist/nodes/document.js +0 -984
  63. package/dist/nodes/document.js.map +0 -1
  64. package/dist/nodes/extended-placeholders.d.ts +0 -6
  65. package/dist/nodes/extended-placeholders.d.ts.map +0 -1
  66. package/dist/nodes/extended-placeholders.js +0 -19
  67. package/dist/nodes/extended-placeholders.js.map +0 -1
  68. package/dist/nodes/gemini.d.ts +0 -110
  69. package/dist/nodes/gemini.d.ts.map +0 -1
  70. package/dist/nodes/gemini.js +0 -871
  71. package/dist/nodes/gemini.js.map +0 -1
  72. package/dist/nodes/generators.d.ts +0 -84
  73. package/dist/nodes/generators.d.ts.map +0 -1
  74. package/dist/nodes/generators.js +0 -968
  75. package/dist/nodes/generators.js.map +0 -1
  76. package/dist/nodes/image.d.ts +0 -232
  77. package/dist/nodes/image.d.ts.map +0 -1
  78. package/dist/nodes/image.js +0 -1395
  79. package/dist/nodes/image.js.map +0 -1
  80. package/dist/nodes/input.d.ts +0 -445
  81. package/dist/nodes/input.d.ts.map +0 -1
  82. package/dist/nodes/input.js +0 -1459
  83. package/dist/nodes/input.js.map +0 -1
  84. package/dist/nodes/kie-dynamic.d.ts +0 -31
  85. package/dist/nodes/kie-dynamic.d.ts.map +0 -1
  86. package/dist/nodes/kie-dynamic.js +0 -270
  87. package/dist/nodes/kie-dynamic.js.map +0 -1
  88. package/dist/nodes/lib-audio-dsp.d.ts +0 -85
  89. package/dist/nodes/lib-audio-dsp.d.ts.map +0 -1
  90. package/dist/nodes/lib-audio-dsp.js +0 -450
  91. package/dist/nodes/lib-audio-dsp.js.map +0 -1
  92. package/dist/nodes/lib-audio-effects.d.ts +0 -116
  93. package/dist/nodes/lib-audio-effects.d.ts.map +0 -1
  94. package/dist/nodes/lib-audio-effects.js +0 -905
  95. package/dist/nodes/lib-audio-effects.js.map +0 -1
  96. package/dist/nodes/lib-browser.d.ts +0 -99
  97. package/dist/nodes/lib-browser.d.ts.map +0 -1
  98. package/dist/nodes/lib-browser.js +0 -692
  99. package/dist/nodes/lib-browser.js.map +0 -1
  100. package/dist/nodes/lib-charts.d.ts +0 -20
  101. package/dist/nodes/lib-charts.d.ts.map +0 -1
  102. package/dist/nodes/lib-charts.js +0 -245
  103. package/dist/nodes/lib-charts.js.map +0 -1
  104. package/dist/nodes/lib-datetime.d.ts +0 -108
  105. package/dist/nodes/lib-datetime.d.ts.map +0 -1
  106. package/dist/nodes/lib-datetime.js +0 -421
  107. package/dist/nodes/lib-datetime.js.map +0 -1
  108. package/dist/nodes/lib-doc-convert.d.ts +0 -19
  109. package/dist/nodes/lib-doc-convert.d.ts.map +0 -1
  110. package/dist/nodes/lib-doc-convert.js +0 -257
  111. package/dist/nodes/lib-doc-convert.js.map +0 -1
  112. package/dist/nodes/lib-doc-transform.d.ts +0 -39
  113. package/dist/nodes/lib-doc-transform.d.ts.map +0 -1
  114. package/dist/nodes/lib-doc-transform.js +0 -335
  115. package/dist/nodes/lib-doc-transform.js.map +0 -1
  116. package/dist/nodes/lib-docx.d.ts +0 -106
  117. package/dist/nodes/lib-docx.d.ts.map +0 -1
  118. package/dist/nodes/lib-docx.js +0 -595
  119. package/dist/nodes/lib-docx.js.map +0 -1
  120. package/dist/nodes/lib-epub.d.ts +0 -55
  121. package/dist/nodes/lib-epub.d.ts.map +0 -1
  122. package/dist/nodes/lib-epub.js +0 -220
  123. package/dist/nodes/lib-epub.js.map +0 -1
  124. package/dist/nodes/lib-excel.d.ts +0 -74
  125. package/dist/nodes/lib-excel.d.ts.map +0 -1
  126. package/dist/nodes/lib-excel.js +0 -448
  127. package/dist/nodes/lib-excel.js.map +0 -1
  128. package/dist/nodes/lib-graphql.d.ts +0 -66
  129. package/dist/nodes/lib-graphql.d.ts.map +0 -1
  130. package/dist/nodes/lib-graphql.js +0 -333
  131. package/dist/nodes/lib-graphql.js.map +0 -1
  132. package/dist/nodes/lib-grid.d.ts +0 -27
  133. package/dist/nodes/lib-grid.d.ts.map +0 -1
  134. package/dist/nodes/lib-grid.js +0 -172
  135. package/dist/nodes/lib-grid.js.map +0 -1
  136. package/dist/nodes/lib-html-parse.d.ts +0 -108
  137. package/dist/nodes/lib-html-parse.d.ts.map +0 -1
  138. package/dist/nodes/lib-html-parse.js +0 -365
  139. package/dist/nodes/lib-html-parse.js.map +0 -1
  140. package/dist/nodes/lib-http.d.ts +0 -98
  141. package/dist/nodes/lib-http.d.ts.map +0 -1
  142. package/dist/nodes/lib-http.js +0 -267
  143. package/dist/nodes/lib-http.js.map +0 -1
  144. package/dist/nodes/lib-image-color-grading.d.ts +0 -3
  145. package/dist/nodes/lib-image-color-grading.d.ts.map +0 -1
  146. package/dist/nodes/lib-image-color-grading.js +0 -1386
  147. package/dist/nodes/lib-image-color-grading.js.map +0 -1
  148. package/dist/nodes/lib-image-draw.d.ts +0 -3
  149. package/dist/nodes/lib-image-draw.d.ts.map +0 -1
  150. package/dist/nodes/lib-image-draw.js +0 -470
  151. package/dist/nodes/lib-image-draw.js.map +0 -1
  152. package/dist/nodes/lib-image-enhance.d.ts +0 -3
  153. package/dist/nodes/lib-image-enhance.d.ts.map +0 -1
  154. package/dist/nodes/lib-image-enhance.js +0 -731
  155. package/dist/nodes/lib-image-enhance.js.map +0 -1
  156. package/dist/nodes/lib-image-filter.d.ts +0 -3
  157. package/dist/nodes/lib-image-filter.d.ts.map +0 -1
  158. package/dist/nodes/lib-image-filter.js +0 -684
  159. package/dist/nodes/lib-image-filter.js.map +0 -1
  160. package/dist/nodes/lib-image-utils.d.ts +0 -24
  161. package/dist/nodes/lib-image-utils.d.ts.map +0 -1
  162. package/dist/nodes/lib-image-utils.js +0 -150
  163. package/dist/nodes/lib-image-utils.js.map +0 -1
  164. package/dist/nodes/lib-mail.d.ts +0 -74
  165. package/dist/nodes/lib-mail.d.ts.map +0 -1
  166. package/dist/nodes/lib-mail.js +0 -452
  167. package/dist/nodes/lib-mail.js.map +0 -1
  168. package/dist/nodes/lib-markdown.d.ts +0 -70
  169. package/dist/nodes/lib-markdown.d.ts.map +0 -1
  170. package/dist/nodes/lib-markdown.js +0 -236
  171. package/dist/nodes/lib-markdown.js.map +0 -1
  172. package/dist/nodes/lib-nlp.d.ts +0 -98
  173. package/dist/nodes/lib-nlp.d.ts.map +0 -1
  174. package/dist/nodes/lib-nlp.js +0 -374
  175. package/dist/nodes/lib-nlp.js.map +0 -1
  176. package/dist/nodes/lib-notion.d.ts +0 -99
  177. package/dist/nodes/lib-notion.d.ts.map +0 -1
  178. package/dist/nodes/lib-notion.js +0 -601
  179. package/dist/nodes/lib-notion.js.map +0 -1
  180. package/dist/nodes/lib-ocr.d.ts +0 -31
  181. package/dist/nodes/lib-ocr.d.ts.map +0 -1
  182. package/dist/nodes/lib-ocr.js +0 -143
  183. package/dist/nodes/lib-ocr.js.map +0 -1
  184. package/dist/nodes/lib-os.d.ts +0 -312
  185. package/dist/nodes/lib-os.d.ts.map +0 -1
  186. package/dist/nodes/lib-os.js +0 -909
  187. package/dist/nodes/lib-os.js.map +0 -1
  188. package/dist/nodes/lib-pdf.d.ts +0 -142
  189. package/dist/nodes/lib-pdf.d.ts.map +0 -1
  190. package/dist/nodes/lib-pdf.js +0 -871
  191. package/dist/nodes/lib-pdf.js.map +0 -1
  192. package/dist/nodes/lib-pptx.d.ts +0 -29
  193. package/dist/nodes/lib-pptx.d.ts.map +0 -1
  194. package/dist/nodes/lib-pptx.js +0 -122
  195. package/dist/nodes/lib-pptx.js.map +0 -1
  196. package/dist/nodes/lib-rss.d.ts +0 -31
  197. package/dist/nodes/lib-rss.d.ts.map +0 -1
  198. package/dist/nodes/lib-rss.js +0 -163
  199. package/dist/nodes/lib-rss.js.map +0 -1
  200. package/dist/nodes/lib-s3.d.ts +0 -112
  201. package/dist/nodes/lib-s3.d.ts.map +0 -1
  202. package/dist/nodes/lib-s3.js +0 -521
  203. package/dist/nodes/lib-s3.js.map +0 -1
  204. package/dist/nodes/lib-secret.d.ts +0 -15
  205. package/dist/nodes/lib-secret.d.ts.map +0 -1
  206. package/dist/nodes/lib-secret.js +0 -42
  207. package/dist/nodes/lib-secret.js.map +0 -1
  208. package/dist/nodes/lib-sqlite.d.ts +0 -102
  209. package/dist/nodes/lib-sqlite.d.ts.map +0 -1
  210. package/dist/nodes/lib-sqlite.js +0 -532
  211. package/dist/nodes/lib-sqlite.js.map +0 -1
  212. package/dist/nodes/lib-supabase.d.ts +0 -86
  213. package/dist/nodes/lib-supabase.d.ts.map +0 -1
  214. package/dist/nodes/lib-supabase.js +0 -425
  215. package/dist/nodes/lib-supabase.js.map +0 -1
  216. package/dist/nodes/lib-svg.d.ts +0 -199
  217. package/dist/nodes/lib-svg.d.ts.map +0 -1
  218. package/dist/nodes/lib-svg.js +0 -1027
  219. package/dist/nodes/lib-svg.js.map +0 -1
  220. package/dist/nodes/lib-tensorflow.d.ts +0 -71
  221. package/dist/nodes/lib-tensorflow.d.ts.map +0 -1
  222. package/dist/nodes/lib-tensorflow.js +0 -351
  223. package/dist/nodes/lib-tensorflow.js.map +0 -1
  224. package/dist/nodes/lib-twilio.d.ts +0 -71
  225. package/dist/nodes/lib-twilio.d.ts.map +0 -1
  226. package/dist/nodes/lib-twilio.js +0 -469
  227. package/dist/nodes/lib-twilio.js.map +0 -1
  228. package/dist/nodes/lib-validate.d.ts +0 -84
  229. package/dist/nodes/lib-validate.d.ts.map +0 -1
  230. package/dist/nodes/lib-validate.js +0 -215
  231. package/dist/nodes/lib-validate.js.map +0 -1
  232. package/dist/nodes/lib-video-download.d.ts +0 -26
  233. package/dist/nodes/lib-video-download.d.ts.map +0 -1
  234. package/dist/nodes/lib-video-download.js +0 -299
  235. package/dist/nodes/lib-video-download.js.map +0 -1
  236. package/dist/nodes/messaging.d.ts +0 -88
  237. package/dist/nodes/messaging.d.ts.map +0 -1
  238. package/dist/nodes/messaging.js +0 -418
  239. package/dist/nodes/messaging.js.map +0 -1
  240. package/dist/nodes/mistral.d.ts +0 -83
  241. package/dist/nodes/mistral.d.ts.map +0 -1
  242. package/dist/nodes/mistral.js +0 -450
  243. package/dist/nodes/mistral.js.map +0 -1
  244. package/dist/nodes/model3d/analysis.d.ts +0 -13
  245. package/dist/nodes/model3d/analysis.d.ts.map +0 -1
  246. package/dist/nodes/model3d/analysis.js +0 -36
  247. package/dist/nodes/model3d/analysis.js.map +0 -1
  248. package/dist/nodes/model3d/base.d.ts +0 -11
  249. package/dist/nodes/model3d/base.d.ts.map +0 -1
  250. package/dist/nodes/model3d/base.js +0 -20
  251. package/dist/nodes/model3d/base.js.map +0 -1
  252. package/dist/nodes/model3d/boolean-ops.d.ts +0 -2
  253. package/dist/nodes/model3d/boolean-ops.d.ts.map +0 -1
  254. package/dist/nodes/model3d/boolean-ops.js +0 -172
  255. package/dist/nodes/model3d/boolean-ops.js.map +0 -1
  256. package/dist/nodes/model3d/cleanup.d.ts +0 -47
  257. package/dist/nodes/model3d/cleanup.d.ts.map +0 -1
  258. package/dist/nodes/model3d/cleanup.js +0 -136
  259. package/dist/nodes/model3d/cleanup.js.map +0 -1
  260. package/dist/nodes/model3d/convert.d.ts +0 -14
  261. package/dist/nodes/model3d/convert.d.ts.map +0 -1
  262. package/dist/nodes/model3d/convert.js +0 -64
  263. package/dist/nodes/model3d/convert.js.map +0 -1
  264. package/dist/nodes/model3d/defaults.d.ts +0 -34
  265. package/dist/nodes/model3d/defaults.d.ts.map +0 -1
  266. package/dist/nodes/model3d/defaults.js +0 -28
  267. package/dist/nodes/model3d/defaults.js.map +0 -1
  268. package/dist/nodes/model3d/document-ops.d.ts +0 -4
  269. package/dist/nodes/model3d/document-ops.d.ts.map +0 -1
  270. package/dist/nodes/model3d/document-ops.js +0 -40
  271. package/dist/nodes/model3d/document-ops.js.map +0 -1
  272. package/dist/nodes/model3d/generation.d.ts +0 -39
  273. package/dist/nodes/model3d/generation.d.ts.map +0 -1
  274. package/dist/nodes/model3d/generation.js +0 -179
  275. package/dist/nodes/model3d/generation.js.map +0 -1
  276. package/dist/nodes/model3d/glb.d.ts +0 -29
  277. package/dist/nodes/model3d/glb.d.ts.map +0 -1
  278. package/dist/nodes/model3d/glb.js +0 -255
  279. package/dist/nodes/model3d/glb.js.map +0 -1
  280. package/dist/nodes/model3d/index.d.ts +0 -20
  281. package/dist/nodes/model3d/index.d.ts.map +0 -1
  282. package/dist/nodes/model3d/index.js +0 -38
  283. package/dist/nodes/model3d/index.js.map +0 -1
  284. package/dist/nodes/model3d/io.d.ts +0 -38
  285. package/dist/nodes/model3d/io.d.ts.map +0 -1
  286. package/dist/nodes/model3d/io.js +0 -162
  287. package/dist/nodes/model3d/io.js.map +0 -1
  288. package/dist/nodes/model3d/mesh-ops.d.ts +0 -40
  289. package/dist/nodes/model3d/mesh-ops.d.ts.map +0 -1
  290. package/dist/nodes/model3d/mesh-ops.js +0 -775
  291. package/dist/nodes/model3d/mesh-ops.js.map +0 -1
  292. package/dist/nodes/model3d/nodes.d.ts +0 -2
  293. package/dist/nodes/model3d/nodes.d.ts.map +0 -1
  294. package/dist/nodes/model3d/nodes.js +0 -2
  295. package/dist/nodes/model3d/nodes.js.map +0 -1
  296. package/dist/nodes/model3d/ops.d.ts +0 -37
  297. package/dist/nodes/model3d/ops.d.ts.map +0 -1
  298. package/dist/nodes/model3d/ops.js +0 -137
  299. package/dist/nodes/model3d/ops.js.map +0 -1
  300. package/dist/nodes/model3d/transforms.d.ts +0 -49
  301. package/dist/nodes/model3d/transforms.d.ts.map +0 -1
  302. package/dist/nodes/model3d/transforms.js +0 -142
  303. package/dist/nodes/model3d/transforms.js.map +0 -1
  304. package/dist/nodes/model3d/types.d.ts +0 -81
  305. package/dist/nodes/model3d/types.d.ts.map +0 -1
  306. package/dist/nodes/model3d/types.js +0 -2
  307. package/dist/nodes/model3d/types.js.map +0 -1
  308. package/dist/nodes/model3d/utils.d.ts +0 -34
  309. package/dist/nodes/model3d/utils.d.ts.map +0 -1
  310. package/dist/nodes/model3d/utils.js +0 -185
  311. package/dist/nodes/model3d/utils.js.map +0 -1
  312. package/dist/nodes/model3d.d.ts +0 -2
  313. package/dist/nodes/model3d.d.ts.map +0 -1
  314. package/dist/nodes/model3d.js +0 -2
  315. package/dist/nodes/model3d.js.map +0 -1
  316. package/dist/nodes/openai.d.ts +0 -172
  317. package/dist/nodes/openai.d.ts.map +0 -1
  318. package/dist/nodes/openai.js +0 -1294
  319. package/dist/nodes/openai.js.map +0 -1
  320. package/dist/nodes/output.d.ts +0 -29
  321. package/dist/nodes/output.d.ts.map +0 -1
  322. package/dist/nodes/output.js +0 -87
  323. package/dist/nodes/output.js.map +0 -1
  324. package/dist/nodes/sandbox.d.ts +0 -63
  325. package/dist/nodes/sandbox.d.ts.map +0 -1
  326. package/dist/nodes/sandbox.js +0 -633
  327. package/dist/nodes/sandbox.js.map +0 -1
  328. package/dist/nodes/search.d.ts +0 -117
  329. package/dist/nodes/search.d.ts.map +0 -1
  330. package/dist/nodes/search.js +0 -607
  331. package/dist/nodes/search.js.map +0 -1
  332. package/dist/nodes/team.d.ts +0 -74
  333. package/dist/nodes/team.d.ts.map +0 -1
  334. package/dist/nodes/team.js +0 -309
  335. package/dist/nodes/team.js.map +0 -1
  336. package/dist/nodes/text-extra.d.ts +0 -633
  337. package/dist/nodes/text-extra.d.ts.map +0 -1
  338. package/dist/nodes/text-extra.js +0 -2226
  339. package/dist/nodes/text-extra.js.map +0 -1
  340. package/dist/nodes/tool-agents.d.ts +0 -334
  341. package/dist/nodes/tool-agents.d.ts.map +0 -1
  342. package/dist/nodes/tool-agents.js +0 -1861
  343. package/dist/nodes/tool-agents.js.map +0 -1
  344. package/dist/nodes/triggers.d.ts +0 -107
  345. package/dist/nodes/triggers.d.ts.map +0 -1
  346. package/dist/nodes/triggers.js +0 -706
  347. package/dist/nodes/triggers.js.map +0 -1
  348. package/dist/nodes/vector.d.ts +0 -168
  349. package/dist/nodes/vector.d.ts.map +0 -1
  350. package/dist/nodes/vector.js +0 -1121
  351. package/dist/nodes/vector.js.map +0 -1
  352. package/dist/nodes/video.d.ts +0 -387
  353. package/dist/nodes/video.d.ts.map +0 -1
  354. package/dist/nodes/video.js +0 -2383
  355. package/dist/nodes/video.js.map +0 -1
  356. package/dist/nodes/workflow.d.ts +0 -24
  357. package/dist/nodes/workflow.d.ts.map +0 -1
  358. package/dist/nodes/workflow.js +0 -146
  359. package/dist/nodes/workflow.js.map +0 -1
  360. package/dist/nodes/workspace.d.ts +0 -203
  361. package/dist/nodes/workspace.d.ts.map +0 -1
  362. package/dist/nodes/workspace.js +0 -795
  363. package/dist/nodes/workspace.js.map +0 -1
@@ -1,684 +0,0 @@
1
- import { BaseNode, registerDeclaredProperty } from "@nodetool-ai/node-sdk";
2
- import sharp from "sharp";
3
- import { decodeImage, toRef, pickImage } from "./lib-image-utils.js";
4
- function createFilterNode(desc) {
5
- const C = class extends BaseNode {
6
- static nodeType = desc.nodeType;
7
- static title = desc.title;
8
- static description = desc.description;
9
- static basicFields = desc.basicFields;
10
- static metadataOutputTypes = desc.outputs;
11
- async process(context) {
12
- const t = desc.nodeType;
13
- const baseObj = pickImage(this.serialize(), this.serialize());
14
- const baseBytes = await decodeImage(baseObj, context);
15
- if (!baseBytes) {
16
- return { output: baseObj ?? {} };
17
- }
18
- let img = sharp(baseBytes, { failOn: "none" });
19
- // Solarize — raw pixel manipulation (NOT sharp.threshold!)
20
- if (t.endsWith(".Solarize")) {
21
- const threshold = Number(this.threshold ?? 128);
22
- const { data: raw, info } = await img
23
- .raw()
24
- .toBuffer({ resolveWithObject: true });
25
- for (let i = 0; i < raw.length; i++) {
26
- if (raw[i] > threshold)
27
- raw[i] = 255 - raw[i];
28
- }
29
- const out = await sharp(raw, {
30
- raw: {
31
- width: info.width,
32
- height: info.height,
33
- channels: info.channels
34
- }
35
- })
36
- .png()
37
- .toBuffer();
38
- return { output: toRef(out, baseObj) };
39
- }
40
- // Posterize — raw pixel manipulation (NOT palette quantization!)
41
- if (t.endsWith(".Posterize")) {
42
- const bits = Math.max(1, Math.min(8, Math.round(Number(this.bits ?? 4))));
43
- const mask = 0xff << (8 - bits);
44
- const { data: raw, info } = await img
45
- .raw()
46
- .toBuffer({ resolveWithObject: true });
47
- for (let i = 0; i < raw.length; i++) {
48
- raw[i] = raw[i] & mask;
49
- }
50
- const out = await sharp(raw, {
51
- raw: {
52
- width: info.width,
53
- height: info.height,
54
- channels: info.channels
55
- }
56
- })
57
- .png()
58
- .toBuffer();
59
- return { output: toRef(out, baseObj) };
60
- }
61
- // Pipeline-based nodes
62
- if (t.endsWith(".Blur")) {
63
- const radius = Number(this.radius ?? 2);
64
- img = img.blur(Math.max(0.3, radius));
65
- }
66
- else if (t.endsWith(".Invert")) {
67
- img = img.negate();
68
- }
69
- else if (t.endsWith(".ConvertToGrayscale")) {
70
- img = img.grayscale();
71
- }
72
- else if (t.endsWith(".Emboss")) {
73
- img = img.convolve({
74
- width: 3,
75
- height: 3,
76
- kernel: [-2, -1, 0, -1, 1, 1, 0, 1, 2]
77
- });
78
- }
79
- else if (t.endsWith(".FindEdges")) {
80
- img = img.convolve({
81
- width: 3,
82
- height: 3,
83
- kernel: [-1, -1, -1, -1, 8, -1, -1, -1, -1]
84
- });
85
- }
86
- else if (t.endsWith(".Canny")) {
87
- // Proper Canny edge detection
88
- const lowThreshold = Number(this.low_threshold ?? 100);
89
- const highThreshold = Number(this.high_threshold ?? 200);
90
- // Convert to grayscale
91
- const grayImg = sharp(baseBytes, { failOn: "none" }).grayscale();
92
- const { data: grayData, info: grayInfo } = await grayImg
93
- .raw()
94
- .toBuffer({ resolveWithObject: true });
95
- const w = grayInfo.width;
96
- const h = grayInfo.height;
97
- // Apply Gaussian blur (sigma=1.4, kernel size=5)
98
- const blurred = new Float32Array(w * h);
99
- const gaussKernel = [
100
- 0.0029, 0.0131, 0.0215, 0.0131, 0.0029, 0.0131, 0.0586, 0.0965,
101
- 0.0586, 0.0131, 0.0215, 0.0965, 0.1592, 0.0965, 0.0215, 0.0131,
102
- 0.0586, 0.0965, 0.0586, 0.0131, 0.0029, 0.0131, 0.0215, 0.0131,
103
- 0.0029
104
- ];
105
- for (let y = 2; y < h - 2; y++) {
106
- for (let x = 2; x < w - 2; x++) {
107
- let sum = 0;
108
- for (let ky = -2; ky <= 2; ky++) {
109
- for (let kx = -2; kx <= 2; kx++) {
110
- sum +=
111
- grayData[(y + ky) * w + (x + kx)] *
112
- gaussKernel[(ky + 2) * 5 + (kx + 2)];
113
- }
114
- }
115
- blurred[y * w + x] = sum;
116
- }
117
- }
118
- // Sobel gradients
119
- const gradMag = new Float32Array(w * h);
120
- const gradDir = new Float32Array(w * h);
121
- for (let y = 1; y < h - 1; y++) {
122
- for (let x = 1; x < w - 1; x++) {
123
- const gx = -blurred[(y - 1) * w + (x - 1)] +
124
- blurred[(y - 1) * w + (x + 1)] -
125
- 2 * blurred[y * w + (x - 1)] +
126
- 2 * blurred[y * w + (x + 1)] -
127
- blurred[(y + 1) * w + (x - 1)] +
128
- blurred[(y + 1) * w + (x + 1)];
129
- const gy = -blurred[(y - 1) * w + (x - 1)] -
130
- 2 * blurred[(y - 1) * w + x] -
131
- blurred[(y - 1) * w + (x + 1)] +
132
- blurred[(y + 1) * w + (x - 1)] +
133
- 2 * blurred[(y + 1) * w + x] +
134
- blurred[(y + 1) * w + (x + 1)];
135
- gradMag[y * w + x] = Math.sqrt(gx * gx + gy * gy);
136
- gradDir[y * w + x] = Math.atan2(gy, gx);
137
- }
138
- }
139
- // Non-maximum suppression
140
- const nms = new Float32Array(w * h);
141
- for (let y = 1; y < h - 1; y++) {
142
- for (let x = 1; x < w - 1; x++) {
143
- const angle = ((gradDir[y * w + x] * 180) / Math.PI + 180) % 180;
144
- const mag = gradMag[y * w + x];
145
- let n1, n2;
146
- if (angle < 22.5 || angle >= 157.5) {
147
- n1 = gradMag[y * w + (x - 1)];
148
- n2 = gradMag[y * w + (x + 1)];
149
- }
150
- else if (angle < 67.5) {
151
- n1 = gradMag[(y - 1) * w + (x + 1)];
152
- n2 = gradMag[(y + 1) * w + (x - 1)];
153
- }
154
- else if (angle < 112.5) {
155
- n1 = gradMag[(y - 1) * w + x];
156
- n2 = gradMag[(y + 1) * w + x];
157
- }
158
- else {
159
- n1 = gradMag[(y - 1) * w + (x - 1)];
160
- n2 = gradMag[(y + 1) * w + (x + 1)];
161
- }
162
- nms[y * w + x] = mag >= n1 && mag >= n2 ? mag : 0;
163
- }
164
- }
165
- // Hysteresis thresholding
166
- const result = Buffer.alloc(w * h);
167
- const STRONG = 255;
168
- const WEAK = 128;
169
- for (let y = 1; y < h - 1; y++) {
170
- for (let x = 1; x < w - 1; x++) {
171
- const v = nms[y * w + x];
172
- if (v >= highThreshold)
173
- result[y * w + x] = STRONG;
174
- else if (v >= lowThreshold)
175
- result[y * w + x] = WEAK;
176
- }
177
- }
178
- // Connect weak edges to strong edges
179
- let changed = true;
180
- while (changed) {
181
- changed = false;
182
- for (let y = 1; y < h - 1; y++) {
183
- for (let x = 1; x < w - 1; x++) {
184
- if (result[y * w + x] === WEAK) {
185
- let hasStrong = false;
186
- for (let dy = -1; dy <= 1 && !hasStrong; dy++) {
187
- for (let dx = -1; dx <= 1 && !hasStrong; dx++) {
188
- if (result[(y + dy) * w + (x + dx)] === STRONG)
189
- hasStrong = true;
190
- }
191
- }
192
- if (hasStrong) {
193
- result[y * w + x] = STRONG;
194
- changed = true;
195
- }
196
- }
197
- }
198
- }
199
- }
200
- // Remove remaining weak edges
201
- for (let i = 0; i < result.length; i++) {
202
- if (result[i] !== STRONG)
203
- result[i] = 0;
204
- }
205
- const out = await sharp(result, {
206
- raw: { width: w, height: h, channels: 1 }
207
- })
208
- .png()
209
- .toBuffer();
210
- return { output: toRef(out, baseObj) };
211
- }
212
- else if (t.endsWith(".Contour")) {
213
- // Contour filter using Prewitt-like kernel distinct from FindEdges
214
- // Combine horizontal and vertical Prewitt for contour detection
215
- const { data: rawData, info: rawInfo } = await img
216
- .grayscale()
217
- .raw()
218
- .toBuffer({ resolveWithObject: true });
219
- const cw = rawInfo.width;
220
- const ch = rawInfo.height;
221
- const contourBuf = Buffer.alloc(cw * ch);
222
- for (let y = 1; y < ch - 1; y++) {
223
- for (let x = 1; x < cw - 1; x++) {
224
- // Horizontal Prewitt
225
- const gx = -rawData[(y - 1) * cw + (x - 1)] -
226
- rawData[y * cw + (x - 1)] -
227
- rawData[(y + 1) * cw + (x - 1)] +
228
- rawData[(y - 1) * cw + (x + 1)] +
229
- rawData[y * cw + (x + 1)] +
230
- rawData[(y + 1) * cw + (x + 1)];
231
- // Vertical Prewitt
232
- const gy = -rawData[(y - 1) * cw + (x - 1)] -
233
- rawData[(y - 1) * cw + x] -
234
- rawData[(y - 1) * cw + (x + 1)] +
235
- rawData[(y + 1) * cw + (x - 1)] +
236
- rawData[(y + 1) * cw + x] +
237
- rawData[(y + 1) * cw + (x + 1)];
238
- contourBuf[y * cw + x] = Math.min(255, Math.round(Math.sqrt(gx * gx + gy * gy)));
239
- }
240
- }
241
- const out = await sharp(contourBuf, {
242
- raw: { width: cw, height: ch, channels: 1 }
243
- })
244
- .png()
245
- .toBuffer();
246
- return { output: toRef(out, baseObj) };
247
- }
248
- else if (t.endsWith(".Smooth")) {
249
- // PIL SMOOTH kernel: [1,1,1, 1,5,1, 1,1,1] with scale=13
250
- img = img.convolve({
251
- width: 3,
252
- height: 3,
253
- kernel: [1, 1, 1, 1, 5, 1, 1, 1, 1],
254
- scale: 13
255
- });
256
- }
257
- else if (t.endsWith(".GetChannel")) {
258
- const channel = String(this.channel ?? "red").toLowerCase();
259
- const idx = channel === "green" ? 1 : channel === "blue" ? 2 : 0;
260
- img = img.extractChannel(idx);
261
- }
262
- else if (t.endsWith(".Expand")) {
263
- const border = Number(this.border ?? 10);
264
- const fillVal = Number(this.fill ?? 0);
265
- const color = `rgb(${fillVal},${fillVal},${fillVal})`;
266
- img = img.extend({
267
- top: border,
268
- left: border,
269
- right: border,
270
- bottom: border,
271
- background: color
272
- });
273
- }
274
- const out = await img.png().toBuffer();
275
- return { output: toRef(out, baseObj) };
276
- }
277
- };
278
- for (const property of desc.properties) {
279
- registerDeclaredProperty(C, property.name, property.options);
280
- }
281
- return C;
282
- }
283
- const DESCRIPTORS = [
284
- {
285
- nodeType: "lib.image.filter.Blur",
286
- title: "Blur",
287
- description: "Apply a Gaussian blur effect to an image.\n image, filter, blur\n\n - Soften images or reduce noise and detail\n - Make focal areas stand out by blurring surroundings\n - Protect privacy by blurring sensitive information",
288
- basicFields: ["image", "radius"],
289
- outputs: {
290
- output: "image"
291
- },
292
- properties: [
293
- {
294
- name: "image",
295
- options: {
296
- type: "image",
297
- default: {
298
- type: "image",
299
- uri: "",
300
- asset_id: null,
301
- data: null,
302
- metadata: null
303
- },
304
- title: "Image",
305
- description: "The image to blur."
306
- }
307
- },
308
- {
309
- name: "radius",
310
- options: {
311
- type: "int",
312
- default: 2,
313
- title: "Radius",
314
- description: "Blur radius.",
315
- min: 0,
316
- max: 128
317
- }
318
- }
319
- ]
320
- },
321
- {
322
- nodeType: "lib.image.filter.Canny",
323
- title: "Canny",
324
- description: "Apply Canny edge detection to an image.\n image, filter, edges\n\n - Highlight areas of rapid intensity change\n - Outline object boundaries and structure\n - Enhance inputs for object detection and image segmentation",
325
- basicFields: ["image", "low_threshold", "high_threshold"],
326
- outputs: {
327
- output: "image"
328
- },
329
- properties: [
330
- {
331
- name: "image",
332
- options: {
333
- type: "image",
334
- default: {
335
- type: "image",
336
- uri: "",
337
- asset_id: null,
338
- data: null,
339
- metadata: null
340
- },
341
- title: "Image",
342
- description: "The image to canny."
343
- }
344
- },
345
- {
346
- name: "low_threshold",
347
- options: {
348
- type: "int",
349
- default: 100,
350
- title: "Low Threshold",
351
- description: "Low threshold.",
352
- min: 0,
353
- max: 255
354
- }
355
- },
356
- {
357
- name: "high_threshold",
358
- options: {
359
- type: "int",
360
- default: 200,
361
- title: "High Threshold",
362
- description: "High threshold.",
363
- min: 0,
364
- max: 255
365
- }
366
- }
367
- ]
368
- },
369
- {
370
- nodeType: "lib.image.filter.Contour",
371
- title: "Contour",
372
- description: "Apply a contour filter to highlight image edges.\n image, filter, contour\n\n - Extract key features from complex images\n - Aid pattern recognition and object detection\n - Create stylized contour sketch art effects",
373
- basicFields: ["image"],
374
- outputs: {
375
- output: "image"
376
- },
377
- properties: [
378
- {
379
- name: "image",
380
- options: {
381
- type: "image",
382
- default: {
383
- type: "image",
384
- uri: "",
385
- asset_id: null,
386
- data: null,
387
- metadata: null
388
- },
389
- title: "Image",
390
- description: "The image to contour."
391
- }
392
- }
393
- ]
394
- },
395
- {
396
- nodeType: "lib.image.filter.ConvertToGrayscale",
397
- title: "Convert To Grayscale",
398
- description: "Convert an image to grayscale.\n image, grayscale\n\n - Simplify images for feature and edge detection\n - Prepare images for shape-based machine learning\n - Create vintage or monochrome aesthetic effects",
399
- basicFields: ["image"],
400
- outputs: {
401
- output: "image"
402
- },
403
- properties: [
404
- {
405
- name: "image",
406
- options: {
407
- type: "image",
408
- default: {
409
- type: "image",
410
- uri: "",
411
- asset_id: null,
412
- data: null,
413
- metadata: null
414
- },
415
- title: "Image",
416
- description: "The image to convert."
417
- }
418
- }
419
- ]
420
- },
421
- {
422
- nodeType: "lib.image.filter.Emboss",
423
- title: "Emboss",
424
- description: "Apply an emboss filter for a 3D raised effect.\n image, filter, emboss\n\n - Add texture and depth to photos\n - Create visually interesting graphics\n - Incorporate unique effects in digital artwork",
425
- basicFields: ["image"],
426
- outputs: {
427
- output: "image"
428
- },
429
- properties: [
430
- {
431
- name: "image",
432
- options: {
433
- type: "image",
434
- default: {
435
- type: "image",
436
- uri: "",
437
- asset_id: null,
438
- data: null,
439
- metadata: null
440
- },
441
- title: "Image",
442
- description: "The image to emboss."
443
- }
444
- }
445
- ]
446
- },
447
- {
448
- nodeType: "lib.image.filter.Expand",
449
- title: "Expand",
450
- description: "Add a border around an image to increase its size.\n image, border, expand\n\n - Make images stand out by adding a colored border\n - Create framed photo effects\n - Separate image content from surroundings",
451
- basicFields: ["image", "border", "fill"],
452
- outputs: {
453
- output: "image"
454
- },
455
- properties: [
456
- {
457
- name: "image",
458
- options: {
459
- type: "image",
460
- default: {
461
- type: "image",
462
- uri: "",
463
- asset_id: null,
464
- data: null,
465
- metadata: null
466
- },
467
- title: "Image",
468
- description: "The image to expand."
469
- }
470
- },
471
- {
472
- name: "border",
473
- options: {
474
- type: "int",
475
- default: 0,
476
- title: "Border",
477
- description: "Border size.",
478
- min: 0,
479
- max: 512
480
- }
481
- },
482
- {
483
- name: "fill",
484
- options: {
485
- type: "int",
486
- default: 0,
487
- title: "Fill",
488
- description: "Fill color.",
489
- min: 0,
490
- max: 255
491
- }
492
- }
493
- ]
494
- },
495
- {
496
- nodeType: "lib.image.filter.FindEdges",
497
- title: "Find Edges",
498
- description: "Detect and highlight edges in an image.\n image, filter, edges\n\n - Analyze structural patterns in images\n - Aid object detection in computer vision\n - Detect important features like corners and ridges",
499
- basicFields: ["image"],
500
- outputs: {
501
- output: "image"
502
- },
503
- properties: [
504
- {
505
- name: "image",
506
- options: {
507
- type: "image",
508
- default: {
509
- type: "image",
510
- uri: "",
511
- asset_id: null,
512
- data: null,
513
- metadata: null
514
- },
515
- title: "Image",
516
- description: "The image to find edges."
517
- }
518
- }
519
- ]
520
- },
521
- {
522
- nodeType: "lib.image.filter.GetChannel",
523
- title: "Get Channel",
524
- description: "Extract a specific color channel from an image.\n image, color, channel, isolate, extract\n\n - Isolate color information for image analysis\n - Manipulate specific color components in graphic design\n - Enhance or reduce visibility of certain colors",
525
- basicFields: ["image", "channel"],
526
- outputs: {
527
- output: "image"
528
- },
529
- properties: [
530
- {
531
- name: "image",
532
- options: {
533
- type: "image",
534
- default: {
535
- type: "image",
536
- uri: "",
537
- asset_id: null,
538
- data: null,
539
- metadata: null
540
- },
541
- title: "Image",
542
- description: "The image to get the channel from."
543
- }
544
- },
545
- {
546
- name: "channel",
547
- options: {
548
- type: "enum",
549
- default: "R",
550
- title: "Channel",
551
- values: ["R", "G", "B"]
552
- }
553
- }
554
- ]
555
- },
556
- {
557
- nodeType: "lib.image.filter.Invert",
558
- title: "Invert",
559
- description: "Invert the colors of an image.\n image, filter, invert\n\n - Create negative versions of images for visual effects\n - Analyze image data by bringing out hidden details\n - Preprocess images for operations that work better on inverted colors",
560
- basicFields: ["image"],
561
- outputs: {
562
- output: "image"
563
- },
564
- properties: [
565
- {
566
- name: "image",
567
- options: {
568
- type: "image",
569
- default: {
570
- type: "image",
571
- uri: "",
572
- asset_id: null,
573
- data: null,
574
- metadata: null
575
- },
576
- title: "Image",
577
- description: "The image to adjust the brightness for."
578
- }
579
- }
580
- ]
581
- },
582
- {
583
- nodeType: "lib.image.filter.Posterize",
584
- title: "Posterize",
585
- description: "Reduce the number of colors in an image for a poster-like effect.\n image, filter, posterize\n\n - Create graphic art by simplifying image colors\n - Apply artistic effects to photographs\n - Generate visually compelling content for advertising",
586
- basicFields: ["image", "bits"],
587
- outputs: {
588
- output: "image"
589
- },
590
- properties: [
591
- {
592
- name: "image",
593
- options: {
594
- type: "image",
595
- default: {
596
- type: "image",
597
- uri: "",
598
- asset_id: null,
599
- data: null,
600
- metadata: null
601
- },
602
- title: "Image",
603
- description: "The image to posterize."
604
- }
605
- },
606
- {
607
- name: "bits",
608
- options: {
609
- type: "int",
610
- default: 4,
611
- title: "Bits",
612
- description: "Number of bits to posterize to.",
613
- min: 1,
614
- max: 8
615
- }
616
- }
617
- ]
618
- },
619
- {
620
- nodeType: "lib.image.filter.Smooth",
621
- title: "Smooth",
622
- description: "Apply smoothing to reduce image noise and detail.\n image, filter, smooth\n\n - Enhance visual aesthetics of images\n - Improve object detection by reducing irrelevant details\n - Aid facial recognition by simplifying images",
623
- basicFields: ["image"],
624
- outputs: {
625
- output: "image"
626
- },
627
- properties: [
628
- {
629
- name: "image",
630
- options: {
631
- type: "image",
632
- default: {
633
- type: "image",
634
- uri: "",
635
- asset_id: null,
636
- data: null,
637
- metadata: null
638
- },
639
- title: "Image",
640
- description: "The image to smooth."
641
- }
642
- }
643
- ]
644
- },
645
- {
646
- nodeType: "lib.image.filter.Solarize",
647
- title: "Solarize",
648
- description: "Apply a solarize effect to partially invert image tones.\n image, filter, solarize\n\n - Create surreal artistic photo effects\n - Enhance visual data by making certain elements more prominent\n - Add a unique style to images for graphic design",
649
- basicFields: ["image", "threshold"],
650
- outputs: {
651
- output: "image"
652
- },
653
- properties: [
654
- {
655
- name: "image",
656
- options: {
657
- type: "image",
658
- default: {
659
- type: "image",
660
- uri: "",
661
- asset_id: null,
662
- data: null,
663
- metadata: null
664
- },
665
- title: "Image",
666
- description: "The image to solarize."
667
- }
668
- },
669
- {
670
- name: "threshold",
671
- options: {
672
- type: "int",
673
- default: 128,
674
- title: "Threshold",
675
- description: "Threshold for solarization.",
676
- min: 0,
677
- max: 255
678
- }
679
- }
680
- ]
681
- }
682
- ];
683
- export const LIB_IMAGE_FILTER_NODES = DESCRIPTORS.map(createFilterNode);
684
- //# sourceMappingURL=lib-image-filter.js.map