<!-- BusyBot node reference — https://busybot.net/tools/edit-image/ -->

> Node: Edit Image (`edit_image`) · Action (binary) · v1
> Category: Core Nodes · Credentials: none
> Updated: 2026-08-16

# 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:

```json
{
  "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:

```json
{
  "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:

```json
{
  "type": "edit_image",
  "parameters": {
    "operation": "blur",
    "sigma": 5,
    "dataPropertyName": "data",
    "options": {
      "destinationKey": "blurred_image",
      "format": "png"
    }
  }
}
```

Add a red border:

```json
{
  "type": "edit_image",
  "parameters": {
    "operation": "border",
    "borderWidth": 20,
    "borderHeight": 20,
    "borderColor": "#ff0000",
    "dataPropertyName": "data"
  }
}
```

Create a blank canvas:

```json
{
  "type": "edit_image",
  "parameters": {
    "operation": "create",
    "width": 500,
    "height": 300,
    "backgroundColor": "#ffffff",
    "options": {
      "format": "png"
    }
  }
}
```

Overlay one binary property on another:

```json
{
  "type": "edit_image",
  "parameters": {
    "operation": "composite",
    "dataPropertyNameComposite": "overlay",
    "operator": "Over",
    "positionX": 50,
    "positionY": 50,
    "dataPropertyName": "background"
  }
}
```

Draw a translucent rounded rectangle:

```json
{
  "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:

```json
{
  "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:

```json
{
  "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:

```json
{
  "type": "edit_image",
  "parameters": {
    "operation": "information",
    "dataPropertyName": "data"
  }
}
```

Generate a named thumbnail:

```json
{
  "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:

```json
{
  "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** — `resize` with `maximumArea`, a modest **Quality**, and a **File Name** that marks it as a thumbnail.
- **Watermarking** — `multiStep` with a `composite` step for the watermark image and a `text` step for the copyright line.
- **Photo enhancement** — `multiStep` chaining `resize`, `tint` and `border`, then re-encoding at high quality.

### Notes

- Prefer `multiStep` over 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. `information` is not available inside a multi-step chain.
- `create` ignores 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.