Reference · Tools
Edit Image
Manipulate images: blur, resize, crop, rotate, composite, draw shapes, add text, borders, shear, tint, transparency, and extract metadata.
The Edit Image node processes images locally — no external API, no credentials — supporting 14 operations including resize, crop, blur, rotate, composite overlay, text, and metadata extraction. You can chain multiple operations in a single node using Multi Step, which is the right way to build a watermarking or thumbnail pipeline. A common starting point is generating thumbnails with resize, then stamping a copyright line with text.
- Node type
- Action (binary)
- Parameters
- 34
- Outputs
- Output, Error
- Credentials
- None required
Edit Image
Manipulate images: blur, resize, crop, rotate, composite, draw, text, and more
Overview
The Edit Image tool performs local image processing. It supports 14 operations: blur, border, composite (overlay), create (blank canvas), crop, draw (shapes: line, circle, rectangle), get information (metadata extraction), multi step (chain operations), resize (with aspect ratio options), rotate, shear, text (SVG overlay), tint, and transparent (color removal). No credentials required — all processing is local. Binary image data is read from the item and written back to it. The Get Information operation returns metadata as JSON without modifying the image.
Category: Core Nodes
Tool Name: edit_image
Version: 1
Appearance: Icon: lucide-Image | Color: #553399
Node Type
Action (Binary) — handles file/binary data operations
Input / Output
| Direction | Port(s) |
|---|---|
| Input | Input |
| Output | Output, Error |
Credentials
This tool does not require any credentials.
Operations
| Operation | Value | Description |
|---|---|---|
| Blur | blur | Apply Gaussian blur to make the image less sharp |
| Border | border | Add a colored border around the image |
| Composite | composite | Overlay one image on top of another |
| Create | create | Create a new blank image with specified dimensions and color |
| Crop | crop | Extract a rectangular region from the image |
| Draw | draw | Draw geometric shapes (line, circle, rectangle) on the image |
| Get Information | information | Return image metadata (dimensions, format, etc.) as JSON |
| Multi Step | multiStep | Chain multiple image operations in sequence |
| Resize | resize | Change image dimensions with configurable aspect ratio behavior |
| Rotate | rotate | Rotate the image by a specified angle |
| Shear | shear | Apply shear transformation along X and/or Y axes |
| Text | text | Render text onto the image with word-wrapping |
| Tint | tint | Apply a color tint to the image |
| Transparent | transparent | Make a specific color transparent |
Parameters
Get Information takes no parameters of its own — see All Operations.
Blur (blur)
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Blur | number | No | 5 | Blur radius (not directly used — Sigma controls blur strength). |
| Sigma | number | No | 2 | Gaussian blur sigma value. Must be > 0.3. Higher values produce more blur. |
Border (border)
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Border Width | number | No | 10 | Width of the border in pixels (left and right). |
| Border Height | number | No | 10 | Height of the border in pixels (top and bottom). |
| Border Color | string | No | #000000 | Color of the border (hex, e.g. #000000). |
Composite (composite)
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Composite Image Property | string | No | data2 | Name of the binary property containing the overlay image to composite on top. |
| Operator | options | No | Over | Compositing operator (blend mode). |
Options: Add, Atop, Bumpmap, Copy, CopyBlack, CopyBlue, CopyCyan, CopyGreen, CopyMagenta, CopyOpacity, CopyRed, CopyYellow, Difference, Divide, In, Minus, Multiply, Out, Over, Plus, Subtract, Xor | ||||
| Position X | number | No | 0 | X (horizontal) position. |
| Position Y | number | No | 0 | Y (vertical) position. |
Create (create)
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Background Color | string | No | #ffffff00 | Background color of the new image (hex with optional alpha, e.g. #ffffff00 for transparent white). |
| Image Width | number | No | 50 | Width in pixels. |
| Image Height | number | No | 50 | Height in pixels. |
Crop (crop)
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Image Width | number | No | 50 | Width in pixels. |
| Image Height | number | No | 50 | Height in pixels. |
| Position X | number | No | 0 | X (horizontal) position. |
| Position Y | number | No | 0 | Y (vertical) position. |
Draw (draw)
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Primitive | options | No | rectangle | The geometric shape to draw. |
Options: circle, line, rectangle | ||||
| Color | string | No | #ff000000 | Color value (hex with optional alpha for draw, hex for transparent/tint). |
| Start Position X | number | No | 50 | Start X position. For circle: center X. |
| Start Position Y | number | No | 50 | Start Y position. For circle: center Y. |
| End Position X | number | No | 250 | End X position. For circle: perimeter point X. |
| End Position Y | number | No | 250 | End Y position. For circle: perimeter point Y. |
| Corner Radius | number | No | 0 | Corner radius for rounded rectangles (rectangle primitive only). |
Multi Step (multiStep)
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Operations | json | No | [] | JSON array of operations to execute sequentially. Each element is an object with an “operation” key and the parameters for that operation. Available operations: blur, border, composite, create, crop, draw, resize, rotate, shear, text, tint, transparent. Example: [{“operation”:“resize”,“width”:200,“height”:200,“resizeOption”:“maximumArea”},{“operation”:“blur”,“sigma”:3}] |
Resize (resize)
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Image Width | number | No | 50 | Width in pixels. |
| Image Height | number | No | 50 | Height in pixels. |
| Resize Option | options | No | maximumArea | How to handle aspect ratio during resize. |
Options: ignoreAspectRatio (resize exactly to the given dimensions), maximumArea (fit within them), minimumArea (cover them), onlyIfLarger (resize only if the image is larger), onlyIfSmaller (resize only if the image is smaller), percent (width and height are percentages, not pixels) |
Rotate (rotate)
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Rotate | number | No | 0 | Rotation angle in degrees. |
| Background Color (Rotate) | string | No | #ffffffff | Background color for areas exposed by non-90-degree rotation (hex with optional alpha). |
Shear (shear)
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Degrees X | number | No | 0 | Horizontal shear angle in degrees. |
| Degrees Y | number | No | 0 | Vertical shear angle in degrees. |
Text (text)
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Text | string | No | — | Text content to render on the image. Supports expressions like {{ $json.caption }}. |
| Font Size | number | No | 18 | Font size in pixels. |
| Font Color | string | No | #000000 | Text color (hex). |
| Max Line Length | number | No | 80 | Maximum characters per line before word-wrapping. |
| Font | string | No | — | Font name or path to a font file. If empty, defaults to Arial/sans-serif via SVG rendering. |
| Position X | number | No | 0 | X (horizontal) position. |
| Position Y | number | No | 0 | Y (vertical) position. |
Tint (tint)
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Color | string | No | #ff000000 | Color value (hex with optional alpha for draw, hex for transparent/tint). |
Transparent (transparent)
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Color | string | No | #ff000000 | Color value (hex with optional alpha for draw, hex for transparent/tint). |
All Operations
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Property Name | string | No | data | Name of the binary property containing the image data. |
| Options | collection | No | {} | Additional output options. (hidden when Operation is information) |
| — Destination Output Field | string | No | data | Name of the output binary property for the processed image. |
| — File Name | string | No | — | Override the output file name. |
| — Format | options | No | jpeg | Output image format. |
Options: gif, jpeg, png, tiff, webp | ||||
| — Quality | number | No | 100 | Compression quality (0-100) for JPEG, PNG, TIFF output. |
| Max Concurrency | number | No | 5 | Maximum number of items to process concurrently. Image processing is CPU-intensive, so keep this moderate. |
Output Data
One output item per input item.
Every operation except information writes the processed image to the binary property named by Destination Output Field, falling back to Property Name when you leave it empty. Other binary properties on the item are kept, so an overlay image or an original you still need survives the node. The item JSON passes through unchanged — image operations add nothing to it.
The output file name comes from File Name when set, otherwise from the input image’s file name, with its extension swapped for the chosen Format. The MIME type always matches the format actually written, and defaults to PNG when no format is chosen.
Setting Destination Output Field to a name other than Property Name keeps the original image alongside the edited one — useful for generating a thumbnail without losing the full-size file.
information does not touch the image. It replaces the item JSON with the metadata below and forwards the binary unchanged:
{
"width": 1920,
"height": 1080,
"format": "jpeg",
"channels": 3,
"depth": "uchar",
"density": 72,
"hasAlpha": false,
"orientation": 1,
"pages": 1,
"space": "srgb",
"fileSize": 284517
}
Reference the metadata downstream by expression, e.g. {{ $json.width }}. Values that the source image does not carry — density or orientation on a file with no EXIF data, pages on a single-frame image — come back undefined rather than as a guess.
Usage Examples
- Resize an image to 800x600
- Add a 10px black border to a photo
- Blur a screenshot with sigma 5
- Crop the top-left 200x200 pixels from an image
- Overlay a watermark on an image
- Rotate an image 90 degrees
- Draw a red rectangle on an image
- Add text to a product image
- Get image dimensions and format
- Convert image from PNG to JPEG
Example Configuration
Resize to fit inside 800x600 and re-encode as JPEG:
{
"type": "edit_image",
"parameters": {
"operation": "resize",
"width": 800,
"height": 600,
"resizeOption": "maximumArea",
"dataPropertyName": "data",
"options": {
"format": "jpeg",
"quality": 90
}
}
}
Blur an image into a second binary property, keeping the original:
{
"type": "edit_image",
"parameters": {
"operation": "blur",
"sigma": 5,
"dataPropertyName": "data",
"options": {
"destinationKey": "blurred_image",
"format": "png"
}
}
}
Add a red border:
{
"type": "edit_image",
"parameters": {
"operation": "border",
"borderWidth": 20,
"borderHeight": 20,
"borderColor": "#ff0000",
"dataPropertyName": "data"
}
}
Create a blank canvas:
{
"type": "edit_image",
"parameters": {
"operation": "create",
"width": 500,
"height": 300,
"backgroundColor": "#ffffff",
"options": {
"format": "png"
}
}
}
Overlay one binary property on another:
{
"type": "edit_image",
"parameters": {
"operation": "composite",
"dataPropertyNameComposite": "overlay",
"operator": "Over",
"positionX": 50,
"positionY": 50,
"dataPropertyName": "background"
}
}
Draw a translucent rounded rectangle:
{
"type": "edit_image",
"parameters": {
"operation": "draw",
"primitive": "rectangle",
"color": "#0000ff80",
"startPositionX": 100,
"startPositionY": 100,
"endPositionX": 300,
"endPositionY": 200,
"cornerRadius": 10
}
}
Render wrapped text onto the image:
{
"type": "edit_image",
"parameters": {
"operation": "text",
"text": "Hello World!",
"fontSize": 24,
"fontColor": "#000000",
"positionX": 50,
"positionY": 50,
"lineLength": 40,
"font": "Arial"
}
}
Chain resize, blur and border in one node:
{
"type": "edit_image",
"parameters": {
"operation": "multiStep",
"operations": [
{
"operation": "resize",
"width": 400,
"height": 300,
"resizeOption": "maximumArea"
},
{
"operation": "blur",
"sigma": 2
},
{
"operation": "border",
"borderWidth": 10,
"borderHeight": 10,
"borderColor": "#333333"
}
],
"options": {
"format": "jpeg",
"quality": 85
}
}
}
Read an image’s dimensions and format:
{
"type": "edit_image",
"parameters": {
"operation": "information",
"dataPropertyName": "data"
}
}
Generate a named thumbnail:
{
"type": "edit_image",
"parameters": {
"operation": "resize",
"width": 150,
"height": 150,
"resizeOption": "maximumArea",
"options": {
"format": "jpeg",
"quality": 80,
"fileName": "thumbnail.jpg"
}
}
}
Apply a watermark image and a copyright line in one pass:
{
"type": "edit_image",
"parameters": {
"operation": "multiStep",
"operations": [
{
"operation": "composite",
"dataPropertyNameComposite": "watermark",
"operator": "Over",
"positionX": 20,
"positionY": 20
},
{
"operation": "text",
"text": "© 2024 Company Name",
"fontSize": 12,
"fontColor": "#ffffff",
"positionX": 10,
"positionY": 10
}
]
}
}
Error Handling
| Mode | Behavior |
|---|---|
| stop | Halts workflow on first error |
| continue | Skips failed items, passes successful ones through |
| errorPort | Routes failed items to Error output port |
Tips
Process images locally: blur, resize, crop, rotate, composite, draw shapes, add text, borders, shear, tint, transparency, and extract metadata using sharp.
Common Patterns
- Thumbnail generation —
resizewithmaximumArea, a modest Quality, and a File Name that marks it as a thumbnail. - Watermarking —
multiStepwith acompositestep for the watermark image and atextstep for the copyright line. - Photo enhancement —
multiStepchainingresize,tintandborder, then re-encoding at high quality.
Notes
- Prefer
multiStepover several Edit Image nodes in a row: the image is decoded and re-encoded once instead of once per node, so quality holds up and the workflow runs faster. - Each entry in Operations takes the same parameter names as the equivalent single operation.
informationis not available inside a multi-step chain. createignores the input image entirely — it builds a new canvas from Image Width, Image Height and Background Color, and defaults to PNG output so transparency survives.- Image work is CPU-intensive. Keep Max Concurrency low when items carry large photos.
Frequently asked questions
Do I need API keys or credentials to use the Edit Image node?
No credentials are required. All processing runs locally using the sharp library — nothing leaves your workflow environment. This means there are no API rate limits, no external service dependencies, and no authentication setup.
I need to resize, tint, and add a border in one workflow. Should I use three Edit Image nodes in a row?
Use the Multi Step operation instead. Chaining separate Edit Image nodes decodes and re-encodes the image at every step, which degrades quality and slows the workflow. Multi Step runs all operations in sequence with a single decode and encode pass. Each step inside Multi Step uses the same parameter names as the equivalent standalone operation.
Can I use the Get Information operation inside a Multi Step chain?
No — the 'information' operation is not available inside a Multi Step chain. If you need image metadata (dimensions, format, etc.), use Get Information as a standalone operation in a separate Edit Image node. It returns metadata as JSON without modifying the image.
What happens to the input image when I use the Create operation?
Create ignores the input image entirely. It builds a blank canvas from the Image Width, Image Height, and Background Color parameters you provide, and defaults to PNG output so transparency is preserved. Use it when you want to generate an image from scratch rather than modify an existing one.
My workflow processes large photos and is running slowly. What should I adjust?
Image processing is CPU-intensive. Keep the Max Concurrency setting low when items carry large photos to avoid saturating the CPU and degrading overall workflow performance. Combining operations into a single Multi Step node rather than using multiple Edit Image nodes will also reduce processing time.
Build with the Edit Image node
Drop it into a workflow, wire it to an agent, or call it on a schedule.
Open BusyBotLast updated . Spotted something wrong? Tell us.