@nodetool-ai/base-nodes 0.7.0-rc.23 → 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.
- package/README.md +21 -0
- package/dist/.nodetool-build-stamp +1 -0
- package/dist/index.d.ts +61 -67
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +179 -173
- package/dist/index.js.map +1 -1
- package/dist/platforms/browser.d.ts +19 -0
- package/dist/platforms/browser.d.ts.map +1 -0
- package/dist/platforms/browser.js +29 -0
- package/dist/platforms/browser.js.map +1 -0
- package/package.json +53 -65
- package/dist/lib/audio-wav.d.ts +0 -66
- package/dist/lib/audio-wav.d.ts.map +0 -1
- package/dist/lib/audio-wav.js +0 -215
- package/dist/lib/audio-wav.js.map +0 -1
- package/dist/nodes/agent-tool-hydration.d.ts +0 -10
- package/dist/nodes/agent-tool-hydration.d.ts.map +0 -1
- package/dist/nodes/agent-tool-hydration.js +0 -43
- package/dist/nodes/agent-tool-hydration.js.map +0 -1
- package/dist/nodes/agents.d.ts +0 -262
- package/dist/nodes/agents.d.ts.map +0 -1
- package/dist/nodes/agents.js +0 -2856
- package/dist/nodes/agents.js.map +0 -1
- package/dist/nodes/anthropic.d.ts +0 -26
- package/dist/nodes/anthropic.d.ts.map +0 -1
- package/dist/nodes/anthropic.js +0 -133
- package/dist/nodes/anthropic.js.map +0 -1
- package/dist/nodes/apify.d.ts +0 -120
- package/dist/nodes/apify.d.ts.map +0 -1
- package/dist/nodes/apify.js +0 -618
- package/dist/nodes/apify.js.map +0 -1
- package/dist/nodes/audio.d.ts +0 -301
- package/dist/nodes/audio.d.ts.map +0 -1
- package/dist/nodes/audio.js +0 -1274
- package/dist/nodes/audio.js.map +0 -1
- package/dist/nodes/code-node.d.ts +0 -34
- package/dist/nodes/code-node.d.ts.map +0 -1
- package/dist/nodes/code-node.js +0 -343
- package/dist/nodes/code-node.js.map +0 -1
- package/dist/nodes/code.d.ts +0 -301
- package/dist/nodes/code.d.ts.map +0 -1
- package/dist/nodes/code.js +0 -850
- package/dist/nodes/code.js.map +0 -1
- package/dist/nodes/compare.d.ts +0 -18
- package/dist/nodes/compare.d.ts.map +0 -1
- package/dist/nodes/compare.js +0 -122
- package/dist/nodes/compare.js.map +0 -1
- package/dist/nodes/constant.d.ts +0 -315
- package/dist/nodes/constant.d.ts.map +0 -1
- package/dist/nodes/constant.js +0 -715
- package/dist/nodes/constant.js.map +0 -1
- package/dist/nodes/control.d.ts +0 -83
- package/dist/nodes/control.d.ts.map +0 -1
- package/dist/nodes/control.js +0 -212
- package/dist/nodes/control.js.map +0 -1
- package/dist/nodes/data.d.ts +0 -369
- package/dist/nodes/data.d.ts.map +0 -1
- package/dist/nodes/data.js +0 -1590
- package/dist/nodes/data.js.map +0 -1
- package/dist/nodes/document.d.ts +0 -134
- package/dist/nodes/document.d.ts.map +0 -1
- package/dist/nodes/document.js +0 -984
- package/dist/nodes/document.js.map +0 -1
- package/dist/nodes/extended-placeholders.d.ts +0 -6
- package/dist/nodes/extended-placeholders.d.ts.map +0 -1
- package/dist/nodes/extended-placeholders.js +0 -19
- package/dist/nodes/extended-placeholders.js.map +0 -1
- package/dist/nodes/gemini.d.ts +0 -110
- package/dist/nodes/gemini.d.ts.map +0 -1
- package/dist/nodes/gemini.js +0 -871
- package/dist/nodes/gemini.js.map +0 -1
- package/dist/nodes/generators.d.ts +0 -84
- package/dist/nodes/generators.d.ts.map +0 -1
- package/dist/nodes/generators.js +0 -968
- package/dist/nodes/generators.js.map +0 -1
- package/dist/nodes/image.d.ts +0 -232
- package/dist/nodes/image.d.ts.map +0 -1
- package/dist/nodes/image.js +0 -1395
- package/dist/nodes/image.js.map +0 -1
- package/dist/nodes/input.d.ts +0 -445
- package/dist/nodes/input.d.ts.map +0 -1
- package/dist/nodes/input.js +0 -1459
- package/dist/nodes/input.js.map +0 -1
- package/dist/nodes/kie-dynamic.d.ts +0 -31
- package/dist/nodes/kie-dynamic.d.ts.map +0 -1
- package/dist/nodes/kie-dynamic.js +0 -270
- package/dist/nodes/kie-dynamic.js.map +0 -1
- package/dist/nodes/lib-audio-dsp.d.ts +0 -85
- package/dist/nodes/lib-audio-dsp.d.ts.map +0 -1
- package/dist/nodes/lib-audio-dsp.js +0 -450
- package/dist/nodes/lib-audio-dsp.js.map +0 -1
- package/dist/nodes/lib-audio-effects.d.ts +0 -116
- package/dist/nodes/lib-audio-effects.d.ts.map +0 -1
- package/dist/nodes/lib-audio-effects.js +0 -905
- package/dist/nodes/lib-audio-effects.js.map +0 -1
- package/dist/nodes/lib-browser.d.ts +0 -99
- package/dist/nodes/lib-browser.d.ts.map +0 -1
- package/dist/nodes/lib-browser.js +0 -692
- package/dist/nodes/lib-browser.js.map +0 -1
- package/dist/nodes/lib-charts.d.ts +0 -20
- package/dist/nodes/lib-charts.d.ts.map +0 -1
- package/dist/nodes/lib-charts.js +0 -245
- package/dist/nodes/lib-charts.js.map +0 -1
- package/dist/nodes/lib-datetime.d.ts +0 -108
- package/dist/nodes/lib-datetime.d.ts.map +0 -1
- package/dist/nodes/lib-datetime.js +0 -421
- package/dist/nodes/lib-datetime.js.map +0 -1
- package/dist/nodes/lib-doc-convert.d.ts +0 -19
- package/dist/nodes/lib-doc-convert.d.ts.map +0 -1
- package/dist/nodes/lib-doc-convert.js +0 -257
- package/dist/nodes/lib-doc-convert.js.map +0 -1
- package/dist/nodes/lib-doc-transform.d.ts +0 -39
- package/dist/nodes/lib-doc-transform.d.ts.map +0 -1
- package/dist/nodes/lib-doc-transform.js +0 -335
- package/dist/nodes/lib-doc-transform.js.map +0 -1
- package/dist/nodes/lib-docx.d.ts +0 -106
- package/dist/nodes/lib-docx.d.ts.map +0 -1
- package/dist/nodes/lib-docx.js +0 -595
- package/dist/nodes/lib-docx.js.map +0 -1
- package/dist/nodes/lib-epub.d.ts +0 -55
- package/dist/nodes/lib-epub.d.ts.map +0 -1
- package/dist/nodes/lib-epub.js +0 -220
- package/dist/nodes/lib-epub.js.map +0 -1
- package/dist/nodes/lib-excel.d.ts +0 -74
- package/dist/nodes/lib-excel.d.ts.map +0 -1
- package/dist/nodes/lib-excel.js +0 -448
- package/dist/nodes/lib-excel.js.map +0 -1
- package/dist/nodes/lib-graphql.d.ts +0 -66
- package/dist/nodes/lib-graphql.d.ts.map +0 -1
- package/dist/nodes/lib-graphql.js +0 -333
- package/dist/nodes/lib-graphql.js.map +0 -1
- package/dist/nodes/lib-grid.d.ts +0 -27
- package/dist/nodes/lib-grid.d.ts.map +0 -1
- package/dist/nodes/lib-grid.js +0 -172
- package/dist/nodes/lib-grid.js.map +0 -1
- package/dist/nodes/lib-html-parse.d.ts +0 -108
- package/dist/nodes/lib-html-parse.d.ts.map +0 -1
- package/dist/nodes/lib-html-parse.js +0 -365
- package/dist/nodes/lib-html-parse.js.map +0 -1
- package/dist/nodes/lib-http.d.ts +0 -98
- package/dist/nodes/lib-http.d.ts.map +0 -1
- package/dist/nodes/lib-http.js +0 -267
- package/dist/nodes/lib-http.js.map +0 -1
- package/dist/nodes/lib-image-color-grading.d.ts +0 -3
- package/dist/nodes/lib-image-color-grading.d.ts.map +0 -1
- package/dist/nodes/lib-image-color-grading.js +0 -1386
- package/dist/nodes/lib-image-color-grading.js.map +0 -1
- package/dist/nodes/lib-image-draw.d.ts +0 -3
- package/dist/nodes/lib-image-draw.d.ts.map +0 -1
- package/dist/nodes/lib-image-draw.js +0 -470
- package/dist/nodes/lib-image-draw.js.map +0 -1
- package/dist/nodes/lib-image-enhance.d.ts +0 -3
- package/dist/nodes/lib-image-enhance.d.ts.map +0 -1
- package/dist/nodes/lib-image-enhance.js +0 -731
- package/dist/nodes/lib-image-enhance.js.map +0 -1
- package/dist/nodes/lib-image-filter.d.ts +0 -3
- package/dist/nodes/lib-image-filter.d.ts.map +0 -1
- package/dist/nodes/lib-image-filter.js +0 -684
- package/dist/nodes/lib-image-filter.js.map +0 -1
- package/dist/nodes/lib-image-utils.d.ts +0 -24
- package/dist/nodes/lib-image-utils.d.ts.map +0 -1
- package/dist/nodes/lib-image-utils.js +0 -150
- package/dist/nodes/lib-image-utils.js.map +0 -1
- package/dist/nodes/lib-mail.d.ts +0 -74
- package/dist/nodes/lib-mail.d.ts.map +0 -1
- package/dist/nodes/lib-mail.js +0 -452
- package/dist/nodes/lib-mail.js.map +0 -1
- package/dist/nodes/lib-markdown.d.ts +0 -70
- package/dist/nodes/lib-markdown.d.ts.map +0 -1
- package/dist/nodes/lib-markdown.js +0 -236
- package/dist/nodes/lib-markdown.js.map +0 -1
- package/dist/nodes/lib-nlp.d.ts +0 -98
- package/dist/nodes/lib-nlp.d.ts.map +0 -1
- package/dist/nodes/lib-nlp.js +0 -374
- package/dist/nodes/lib-nlp.js.map +0 -1
- package/dist/nodes/lib-notion.d.ts +0 -99
- package/dist/nodes/lib-notion.d.ts.map +0 -1
- package/dist/nodes/lib-notion.js +0 -601
- package/dist/nodes/lib-notion.js.map +0 -1
- package/dist/nodes/lib-ocr.d.ts +0 -31
- package/dist/nodes/lib-ocr.d.ts.map +0 -1
- package/dist/nodes/lib-ocr.js +0 -143
- package/dist/nodes/lib-ocr.js.map +0 -1
- package/dist/nodes/lib-os.d.ts +0 -312
- package/dist/nodes/lib-os.d.ts.map +0 -1
- package/dist/nodes/lib-os.js +0 -909
- package/dist/nodes/lib-os.js.map +0 -1
- package/dist/nodes/lib-pdf.d.ts +0 -142
- package/dist/nodes/lib-pdf.d.ts.map +0 -1
- package/dist/nodes/lib-pdf.js +0 -871
- package/dist/nodes/lib-pdf.js.map +0 -1
- package/dist/nodes/lib-pptx.d.ts +0 -29
- package/dist/nodes/lib-pptx.d.ts.map +0 -1
- package/dist/nodes/lib-pptx.js +0 -122
- package/dist/nodes/lib-pptx.js.map +0 -1
- package/dist/nodes/lib-rss.d.ts +0 -31
- package/dist/nodes/lib-rss.d.ts.map +0 -1
- package/dist/nodes/lib-rss.js +0 -163
- package/dist/nodes/lib-rss.js.map +0 -1
- package/dist/nodes/lib-s3.d.ts +0 -112
- package/dist/nodes/lib-s3.d.ts.map +0 -1
- package/dist/nodes/lib-s3.js +0 -521
- package/dist/nodes/lib-s3.js.map +0 -1
- package/dist/nodes/lib-secret.d.ts +0 -15
- package/dist/nodes/lib-secret.d.ts.map +0 -1
- package/dist/nodes/lib-secret.js +0 -42
- package/dist/nodes/lib-secret.js.map +0 -1
- package/dist/nodes/lib-sqlite.d.ts +0 -102
- package/dist/nodes/lib-sqlite.d.ts.map +0 -1
- package/dist/nodes/lib-sqlite.js +0 -532
- package/dist/nodes/lib-sqlite.js.map +0 -1
- package/dist/nodes/lib-supabase.d.ts +0 -86
- package/dist/nodes/lib-supabase.d.ts.map +0 -1
- package/dist/nodes/lib-supabase.js +0 -425
- package/dist/nodes/lib-supabase.js.map +0 -1
- package/dist/nodes/lib-svg.d.ts +0 -199
- package/dist/nodes/lib-svg.d.ts.map +0 -1
- package/dist/nodes/lib-svg.js +0 -1027
- package/dist/nodes/lib-svg.js.map +0 -1
- package/dist/nodes/lib-tensorflow.d.ts +0 -71
- package/dist/nodes/lib-tensorflow.d.ts.map +0 -1
- package/dist/nodes/lib-tensorflow.js +0 -351
- package/dist/nodes/lib-tensorflow.js.map +0 -1
- package/dist/nodes/lib-twilio.d.ts +0 -71
- package/dist/nodes/lib-twilio.d.ts.map +0 -1
- package/dist/nodes/lib-twilio.js +0 -469
- package/dist/nodes/lib-twilio.js.map +0 -1
- package/dist/nodes/lib-validate.d.ts +0 -84
- package/dist/nodes/lib-validate.d.ts.map +0 -1
- package/dist/nodes/lib-validate.js +0 -215
- package/dist/nodes/lib-validate.js.map +0 -1
- package/dist/nodes/lib-video-download.d.ts +0 -26
- package/dist/nodes/lib-video-download.d.ts.map +0 -1
- package/dist/nodes/lib-video-download.js +0 -299
- package/dist/nodes/lib-video-download.js.map +0 -1
- package/dist/nodes/messaging.d.ts +0 -88
- package/dist/nodes/messaging.d.ts.map +0 -1
- package/dist/nodes/messaging.js +0 -418
- package/dist/nodes/messaging.js.map +0 -1
- package/dist/nodes/mistral.d.ts +0 -83
- package/dist/nodes/mistral.d.ts.map +0 -1
- package/dist/nodes/mistral.js +0 -450
- package/dist/nodes/mistral.js.map +0 -1
- package/dist/nodes/model3d/analysis.d.ts +0 -13
- package/dist/nodes/model3d/analysis.d.ts.map +0 -1
- package/dist/nodes/model3d/analysis.js +0 -36
- package/dist/nodes/model3d/analysis.js.map +0 -1
- package/dist/nodes/model3d/base.d.ts +0 -11
- package/dist/nodes/model3d/base.d.ts.map +0 -1
- package/dist/nodes/model3d/base.js +0 -20
- package/dist/nodes/model3d/base.js.map +0 -1
- package/dist/nodes/model3d/boolean-ops.d.ts +0 -2
- package/dist/nodes/model3d/boolean-ops.d.ts.map +0 -1
- package/dist/nodes/model3d/boolean-ops.js +0 -172
- package/dist/nodes/model3d/boolean-ops.js.map +0 -1
- package/dist/nodes/model3d/cleanup.d.ts +0 -47
- package/dist/nodes/model3d/cleanup.d.ts.map +0 -1
- package/dist/nodes/model3d/cleanup.js +0 -136
- package/dist/nodes/model3d/cleanup.js.map +0 -1
- package/dist/nodes/model3d/convert.d.ts +0 -14
- package/dist/nodes/model3d/convert.d.ts.map +0 -1
- package/dist/nodes/model3d/convert.js +0 -64
- package/dist/nodes/model3d/convert.js.map +0 -1
- package/dist/nodes/model3d/defaults.d.ts +0 -34
- package/dist/nodes/model3d/defaults.d.ts.map +0 -1
- package/dist/nodes/model3d/defaults.js +0 -28
- package/dist/nodes/model3d/defaults.js.map +0 -1
- package/dist/nodes/model3d/document-ops.d.ts +0 -4
- package/dist/nodes/model3d/document-ops.d.ts.map +0 -1
- package/dist/nodes/model3d/document-ops.js +0 -40
- package/dist/nodes/model3d/document-ops.js.map +0 -1
- package/dist/nodes/model3d/generation.d.ts +0 -39
- package/dist/nodes/model3d/generation.d.ts.map +0 -1
- package/dist/nodes/model3d/generation.js +0 -179
- package/dist/nodes/model3d/generation.js.map +0 -1
- package/dist/nodes/model3d/glb.d.ts +0 -29
- package/dist/nodes/model3d/glb.d.ts.map +0 -1
- package/dist/nodes/model3d/glb.js +0 -255
- package/dist/nodes/model3d/glb.js.map +0 -1
- package/dist/nodes/model3d/index.d.ts +0 -20
- package/dist/nodes/model3d/index.d.ts.map +0 -1
- package/dist/nodes/model3d/index.js +0 -38
- package/dist/nodes/model3d/index.js.map +0 -1
- package/dist/nodes/model3d/io.d.ts +0 -38
- package/dist/nodes/model3d/io.d.ts.map +0 -1
- package/dist/nodes/model3d/io.js +0 -162
- package/dist/nodes/model3d/io.js.map +0 -1
- package/dist/nodes/model3d/mesh-ops.d.ts +0 -40
- package/dist/nodes/model3d/mesh-ops.d.ts.map +0 -1
- package/dist/nodes/model3d/mesh-ops.js +0 -775
- package/dist/nodes/model3d/mesh-ops.js.map +0 -1
- package/dist/nodes/model3d/nodes.d.ts +0 -2
- package/dist/nodes/model3d/nodes.d.ts.map +0 -1
- package/dist/nodes/model3d/nodes.js +0 -2
- package/dist/nodes/model3d/nodes.js.map +0 -1
- package/dist/nodes/model3d/ops.d.ts +0 -37
- package/dist/nodes/model3d/ops.d.ts.map +0 -1
- package/dist/nodes/model3d/ops.js +0 -137
- package/dist/nodes/model3d/ops.js.map +0 -1
- package/dist/nodes/model3d/transforms.d.ts +0 -49
- package/dist/nodes/model3d/transforms.d.ts.map +0 -1
- package/dist/nodes/model3d/transforms.js +0 -142
- package/dist/nodes/model3d/transforms.js.map +0 -1
- package/dist/nodes/model3d/types.d.ts +0 -81
- package/dist/nodes/model3d/types.d.ts.map +0 -1
- package/dist/nodes/model3d/types.js +0 -2
- package/dist/nodes/model3d/types.js.map +0 -1
- package/dist/nodes/model3d/utils.d.ts +0 -34
- package/dist/nodes/model3d/utils.d.ts.map +0 -1
- package/dist/nodes/model3d/utils.js +0 -185
- package/dist/nodes/model3d/utils.js.map +0 -1
- package/dist/nodes/model3d.d.ts +0 -2
- package/dist/nodes/model3d.d.ts.map +0 -1
- package/dist/nodes/model3d.js +0 -2
- package/dist/nodes/model3d.js.map +0 -1
- package/dist/nodes/openai.d.ts +0 -172
- package/dist/nodes/openai.d.ts.map +0 -1
- package/dist/nodes/openai.js +0 -1294
- package/dist/nodes/openai.js.map +0 -1
- package/dist/nodes/output.d.ts +0 -29
- package/dist/nodes/output.d.ts.map +0 -1
- package/dist/nodes/output.js +0 -87
- package/dist/nodes/output.js.map +0 -1
- package/dist/nodes/sandbox.d.ts +0 -63
- package/dist/nodes/sandbox.d.ts.map +0 -1
- package/dist/nodes/sandbox.js +0 -633
- package/dist/nodes/sandbox.js.map +0 -1
- package/dist/nodes/search.d.ts +0 -117
- package/dist/nodes/search.d.ts.map +0 -1
- package/dist/nodes/search.js +0 -607
- package/dist/nodes/search.js.map +0 -1
- package/dist/nodes/team.d.ts +0 -74
- package/dist/nodes/team.d.ts.map +0 -1
- package/dist/nodes/team.js +0 -309
- package/dist/nodes/team.js.map +0 -1
- package/dist/nodes/text-extra.d.ts +0 -633
- package/dist/nodes/text-extra.d.ts.map +0 -1
- package/dist/nodes/text-extra.js +0 -2226
- package/dist/nodes/text-extra.js.map +0 -1
- package/dist/nodes/tool-agents.d.ts +0 -334
- package/dist/nodes/tool-agents.d.ts.map +0 -1
- package/dist/nodes/tool-agents.js +0 -1861
- package/dist/nodes/tool-agents.js.map +0 -1
- package/dist/nodes/triggers.d.ts +0 -107
- package/dist/nodes/triggers.d.ts.map +0 -1
- package/dist/nodes/triggers.js +0 -706
- package/dist/nodes/triggers.js.map +0 -1
- package/dist/nodes/vector.d.ts +0 -168
- package/dist/nodes/vector.d.ts.map +0 -1
- package/dist/nodes/vector.js +0 -1121
- package/dist/nodes/vector.js.map +0 -1
- package/dist/nodes/video.d.ts +0 -387
- package/dist/nodes/video.d.ts.map +0 -1
- package/dist/nodes/video.js +0 -2383
- package/dist/nodes/video.js.map +0 -1
- package/dist/nodes/workflow.d.ts +0 -24
- package/dist/nodes/workflow.d.ts.map +0 -1
- package/dist/nodes/workflow.js +0 -146
- package/dist/nodes/workflow.js.map +0 -1
- package/dist/nodes/workspace.d.ts +0 -203
- package/dist/nodes/workspace.d.ts.map +0 -1
- package/dist/nodes/workspace.js +0 -795
- 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
|