Reference · Tools

Bannerbear

Generate images from reusable templates and manage templates via the Bannerbear API.

Action (binary) Marketing v1 Binary data

The Bannerbear node renders images from reusable Bannerbear templates by swapping in your own text, colors, and image URLs at runtime. You can also fetch previously generated images by ID and inspect template metadata to discover which layers are available. A typical use case is auto-generating social media cards when a new product is added to a database.

Node type
Action (binary)
Parameters
10
Outputs
Output, Error
Credentials
Bannerbear API

Bannerbear

Generate images from Bannerbear templates

Overview

Bannerbear renders images from templates you design once and reuse with different content. This tool creates an image from a template, overriding named layers with your own text, colours, backgrounds and image URLs; fetches a previously generated image by ID; and reads template metadata, including the layers each template exposes. Rendering is asynchronous — by default the node returns as soon as the job is accepted, but it can also wait for the finished image and attach the rendered file to the item as binary data.

Category: Marketing
Tool Name: bannerbear
Version: 1

Appearance: Icon: lucide-Image | Color: #FF6F00

Node Type

Action (Binary) — handles file/binary data operations

Input / Output

DirectionPort(s)
InputInput
OutputOutput, Error

Credentials

This tool requires Bannerbear API credentials. See the Credentials Guide for setup instructions.

Resources

ResourceValue
Imageimage
Templatetemplate

Operations

Image

OperationValueDescription
CreatecreateCreate an image from a template
GetgetGet an image by ID

Template

OperationValueDescription
GetgetGet a template
Get ManygetAllGet all templates

Parameters

Template: Get Many takes no parameters of its own — see All Operations.

Image: Create

ParameterTypeRequiredDefaultDescription
Template IDstringYesThe UID of the Bannerbear template to use for image generation. Find this in your Bannerbear project dashboard. Supports expressions like {{ $json.templateId }}.
ModificationsfixedCollectionNo{}Layer modifications to apply to the template.
— ModificationOne entry per template layer you want to change.
— — NamestringNoThe name of the template layer to modify. Get available layer names from the template details.
— — TextstringNoReplacement text for the layer. Supports expressions like {{ $json.headline }}.
— — ColorstringNoColor hex value for the object (e.g., #FF0000).
— — BackgroundstringNoBackground color hex value for text layers.
— — Image URLstringNoPublic URL of a replacement image for image layers.
Additional FieldscollectionNo{}Additional options for image creation.
— MetadatastringNoArbitrary metadata string for tracking (e.g., a record ID from your database).
— Wait for ImagebooleanNofalseWhether to poll until the image is fully rendered before returning. If enabled, the rendered image is downloaded as binary data.
— Wait Max TriesnumberNo3Maximum number of polling attempts (every 2 seconds) before failing. (shown when Wait for Image is true)
— Webhook URLstringNoA URL to receive a POST callback with the image object when rendering is complete.
Binary PropertystringNodataName of the binary property to store the downloaded image in. Names are case-sensitive — see the upstream node’s Binary Data panel for the exact names to use.

Image: Get

ParameterTypeRequiredDefaultDescription
Image IDstringYesThe unique identifier (UID) of the image to retrieve. Supports expressions like {{ $json.imageId }}.

Template: Get

ParameterTypeRequiredDefaultDescription
Template IDstringYesThe unique identifier (UID) of the template to retrieve. Supports expressions like {{ $json.templateId }}.

All Operations

ParameterTypeRequiredDefaultDescription
Max ConcurrencynumberNo5Maximum number of items to process concurrently. Lower values recommended when using waitForImage to avoid rate limits.

Output Data

One output item per input item — no operation on this node fans out, including Template: Get Many. The API response is merged onto the input item JSON, so the returned fields sit alongside whatever the item already carried.

Resource / operationMerged onto the item
image / createThe image object Bannerbear returned, including its uid, its status, and — once rendering has finished — image_url
image / getThe image object for the requested UID, in the same shape
template / getThe template record, including the modifiable layers it exposes
template / getAlltemplates — the full array of templates on one item. Bannerbear returns them in a single response, so use a Split Out node on templates if you want one item per template

Binary. Binary already on the input item is always carried through. With Wait for Image on, the node polls until the image reports completed, then downloads the rendered file and attaches it under the property named in Binary Property (default data), merged with the item’s existing binary. The stored file name is taken from the image URL when it has one, otherwise bannerbear_image.png. With Wait for Image off, the create call returns immediately with a pending status and no file is downloaded — the image is still rendering, and you retrieve it later with Image: Get or via a webhook.

Reference the result downstream by expression, e.g. {{ $json.uid }} or {{ $json.image_url }}.

Usage Examples

  • Generate a social media image from a Bannerbear template
  • Create a product banner with dynamic text overlays
  • List all available Bannerbear templates
  • Get a previously generated image by ID

Example Configuration

Render an image and wait for the finished file, storing it on a named binary property:

{
  "type": "bannerbear",
  "parameters": {
    "resource": "image",
    "operation": "create",
    "templateId": "A89wZ2bmN6YjRaELJ9",
    "modificationsUi": {
      "modificationsValues": [
        { "name": "title", "text": "{{ $json.title }}" },
        { "name": "subtitle", "text": "{{ $json.subtitle }}", "color": "#FF6B35" },
        { "name": "logo", "imageUrl": "{{ $json.logoUrl }}" }
      ]
    },
    "additionalFields": {
      "waitForImage": true,
      "waitForImageMaxTries": 5,
      "metadata": "{{ $json.recordId }}"
    },
    "binaryPropertyName": "generatedImage"
  }
}

Fire the render and move on, letting a webhook tell you when it is ready:

{
  "type": "bannerbear",
  "parameters": {
    "resource": "image",
    "operation": "create",
    "templateId": "A89wZ2bmN6YjRaELJ9",
    "modificationsUi": {
      "modificationsValues": [
        { "name": "title", "text": "{{ $json.title }}" }
      ]
    },
    "additionalFields": {
      "webhookUrl": "https://example.com/hooks/bannerbear"
    }
  }
}

Fetch a previously generated image by its UID:

{
  "type": "bannerbear",
  "parameters": {
    "resource": "image",
    "operation": "get",
    "imageId": "{{ $json.uid }}"
  }
}

Read one template’s details to discover its layer names:

{
  "type": "bannerbear",
  "parameters": {
    "resource": "template",
    "operation": "get",
    "templateId": "A89wZ2bmN6YjRaELJ9"
  }
}

List every template in the project:

{
  "type": "bannerbear",
  "parameters": {
    "resource": "template",
    "operation": "getAll"
  }
}

Error Handling

ModeBehavior
stopHalts workflow on first error
continueSkips failed items, passes successful ones through
errorPortRoutes failed items to Error output port

Tips

Generate images from Bannerbear templates with dynamic text/image modifications, with optional binary download of the rendered image.

Notes

  • Modification names must match template layer names exactly. Run Template: Get first to list the layers a template exposes; a modification whose Name matches nothing is silently ignored by Bannerbear and you get the unmodified template back.
  • Set only the fields that apply to a layer. Text layers take Text, Color and Background; image layers take Image URL. Empty fields are dropped before the request, so leaving them blank is safe.
  • Image URL must be publicly reachable. Bannerbear fetches the replacement image itself; a signed or private URL that has expired renders as a blank layer.
  • Rendering is asynchronous. Without Wait for Image, the create call returns a pending image with a uid and no image_url. Turn the option on when the next node needs the file itself, or supply Webhook URL and pick the result up in a separate workflow.
  • Waiting costs time and rate limit. Polling runs every two seconds up to Wait Max Tries; a complex template that takes longer than that fails the item. Raise the tries rather than the concurrency, and keep Max Concurrency low while waiting.
  • Metadata comes back on the image object, so it is a convenient place to stash the record ID that triggered the render and correlate the webhook callback later.

Frequently asked questions

My modification isn't showing up in the rendered image — what's wrong?

Modification names must match the layer names in your Bannerbear template exactly, including capitalisation. Bannerbear silently ignores any modification whose name doesn't match a real layer, so you get the unmodified template back with no error. Run a 'Template: Get' operation first to see the exact layer names the template exposes, then copy them character-for-character into your modifications.

The node returns a pending object with no image_url — how do I get the finished file?

Bannerbear renders asynchronously, so by default the node returns immediately once the job is accepted, giving you a uid but no image URL. Enable the 'Wait for Image' option if the next node in your workflow needs the actual file. Alternatively, set a Webhook URL and collect the finished result in a separate workflow triggered by the callback.

How does 'Wait for Image' affect performance and rate limits?

When waiting is enabled, the node polls Bannerbear every two seconds up to the 'Wait Max Tries' limit. A complex template that takes longer than that window will fail the item, so raise the tries limit rather than increasing concurrency. Keep 'Max Concurrency' low while waiting to avoid burning through your rate limit with simultaneous polling loops.

Can I use a private or signed image URL for an image layer replacement?

No — Bannerbear fetches the replacement image itself from the URL you provide, so the URL must be publicly reachable at the moment of rendering. A signed URL that has expired or a URL behind authentication will cause that layer to render as blank with no error reported back to your workflow.

What credentials does this node require, and where do I get them?

The node uses a Bannerbear API credential (type: bannerbearApi), which requires your Bannerbear API key. You can find this key in your Bannerbear account settings. Add it once in BusyBot's credential manager and all Bannerbear nodes in your workspace can reuse it.

Build with the Bannerbear node

Drop it into a workflow, wire it to an agent, or call it on a schedule. You'll need Bannerbear API credentials first.

Open BusyBot

Last updated . Spotted something wrong? Tell us.