Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

n8n does not convert HTML into a PNG by itself. Its HTML node creates or extracts markup; a separate browser renderer must turn that markup into pixels. In n8n, use either an HTTP Request node to call a rendering API (works on n8n Cloud and self-hosted instances) or, on a self-hosted installation, Execute Command to run a renderer installed in the same execution environment. Keep HTML generation, rendering, and binary-file handling as separate steps.

What the n8n HTML node can—and cannot—do

The HTML node provides operations for working with HTML: you can create a template containing normal HTML, CSS, expressions, and JavaScript markup, or extract HTML from input. That operation prepares text; it does not open a browser, execute the template’s JavaScript, load remote assets, or paint a PNG. Therefore a workflow that ends after the HTML node has an HTML string, not an image.

Treat conversion as a pipeline:

  1. Build and validate the HTML string.
  2. Send it to a browser-based renderer (remote API or local process).
  3. Receive PNG bytes as binary data.
  4. Store, return, or forward that binary item.

Values inserted into templates must be treated as untrusted. n8n’s HTML documentation warns about XSS when generating HTML from untrusted data. Escape user-provided text, allow only approved markup, and do not let arbitrary input inject scripts or event handlers.

Route A: call a rendering API with HTTP Request

This is usually the practical route for n8n Cloud, where shell execution is unavailable, and for teams that do not want to install and update a browser runtime. The HTTP Request node supports REST methods, authentication, headers, request bodies, and responses handled as files. The renderer’s exact endpoint, credentials, accepted HTML format, and response MIME type are provider-specific, so use that service’s current documentation rather than assuming a universal payload.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Build the workflow

  1. Create the markup. Use an HTML node or a previous Code, Set, or database node. Include a complete document when the renderer expects one: <!doctype html>, <head>, styles, and body content. Keep expressions deterministic and escape inserted values.
  2. Add HTTP Request. Set the method and URL required by your chosen renderer. Configure its authentication method, headers (often including a content type), and body exactly as documented. Some services accept an HTML string; others require a URL or a JSON property.
  3. Request a file response. Select the node’s file/binary response option and choose a binary property name such as data. Do not leave the response as ordinary JSON or text when the endpoint returns PNG bytes.
  4. Verify the result. Check the response status, the Content-Type (it should identify PNG), and that the binary property exists before sending it to a storage, email, webhook, or file node. Reject an HTML error page that arrived with a successful transport status.

A generic workflow shape is HTML → HTTP Request (renderer) → binary output → destination. Do not copy an invented endpoint or credential name: those details vary by provider and can change.

When this route fits

  • n8n Cloud or a hosted instance where you cannot install software.
  • Workflows that should avoid maintaining Chromium and its fonts.
  • Teams that need a centrally managed renderer and can permit HTML to leave n8n.

Before choosing an external service, decide whether your HTML, embedded data, and resulting image may leave the n8n environment. The cited n8n documentation does not establish retention or privacy terms for any renderer; verify those terms with the provider.

Route B: run a local renderer with Execute Command

On self-hosted n8n, you can install a browser-based renderer and invoke it from Execute Command. n8n documents that this node runs shell commands on the machine running n8n: https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.executecommand/. The documentation does not prescribe a particular browser package or screenshot command, so install and configure a renderer according to that project’s current instructions.

Execution location matters

  • Docker: the command runs inside the n8n container, not automatically on the Docker host. A browser installed only on the host is invisible to the container.
  • Queue mode: production work runs on the worker that receives the task. Install the renderer, fonts, and any required libraries on every worker that may execute it.
  • Cloud: Execute Command is unavailable on n8n Cloud.

Have the command write a PNG to a path accessible from the executing environment, then read that file into an n8n binary property with a file-reading node and pass it onward. Use unique temporary filenames, clean them up, and avoid placing secrets in command arguments or logs.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Security boundary

Execute Command is powerful host or container access. n8n says it is disabled by default from version 2.0 because of risks involving untrusted users. Do not enable it on a shared instance merely to support screenshots; restrict workflow editing, isolate the worker, validate inputs, and apply least-privilege filesystem and network permissions. Never concatenate user input into a shell command. Prefer fixed command paths and safely escaped, controlled arguments.

Choosing between the two architectures

Consideration HTTP Request to renderer API Local Execute Command renderer
Hosting Works wherever outbound HTTP and credentials are allowed, including n8n Cloud. Self-hosted only; unavailable on n8n Cloud.
Browser maintenance Provider maintains the browser runtime. You maintain browser versions, fonts, libraries, and updates.
Data boundary HTML and output may leave n8n; check provider terms. Data can remain in your environment, subject to your infrastructure.
Operational risk Depends on API availability, limits, authentication, and response handling. Requires a correctly provisioned host/container/worker and shell security.
Output contract Configure the node to preserve PNG bytes as binary; provider format varies. Define a reliable output path and read the file after the command succeeds.

Making screenshots dependable

Wait for the page you actually need

Dynamic pages may need a renderer-specific wait for a selector, a delay, or network-idle state. If the image is blank or missing late content, inspect the renderer’s documented controls for JavaScript completion, fonts, remote images, viewport, and load timing. These controls are not n8n features; configure them in the selected renderer.

Control assets and layout

Use absolute, reachable URLs for stylesheets and images, or inline critical assets. Confirm that the execution environment can resolve DNS and access private resources. Set an explicit viewport and page dimensions when the renderer supports them. For repeatable results, pin fonts and CSS, and avoid time-dependent content.

Preserve binary data

Pass the PNG as binary between nodes. A JSON field containing base64 text is not equivalent to a binary file unless the next node explicitly decodes it. At the API boundary, verify status, MIME type, and a nonzero content length; at the local boundary, verify the command exit code and file existence.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Troubleshooting

The workflow contains HTML text but no image

The HTML node generated markup only. Add a renderer step; it cannot create PNG pixels on its own.

Execute Command is missing

Check whether you are on n8n Cloud or whether your administrator disabled the node. On self-hosted n8n 2.0 and later it is disabled by default because of security concerns. Enable it only for a trusted, isolated deployment.

The command works on a laptop but fails in n8n

Identify the actual execution environment. In Docker, install the renderer inside the n8n container image; in queue mode, install it on the worker processing the job. Check the executable path, permissions, fonts, shared libraries, and write location.

The API call succeeds but the next node cannot use the PNG

Inspect the HTTP Request response mode. Configure a file/binary response and confirm the binary property name. Also inspect status, Content-Type, and the first bytes of the response; a JSON or HTML error document can arrive despite an HTTP transport success.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

The PNG is blank, clipped, or incomplete

Investigate the renderer’s viewport, page-size, font availability, remote asset access, JavaScript completion, and wait condition. Compare a locally saved HTML file with the rendered input, and capture renderer logs. These settings are renderer-dependent, not options supplied by n8n’s HTML node.

Untrusted values create security problems

Escape inserted text and constrain allowed HTML. Do not pass arbitrary values to a shell command, and do not expose Execute Command to untrusted workflow authors.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Or skip the browser setup

ScreenshotNeo is a website screenshot API and MCP server. It accepts consent banners before capture and removes more than 60 known consent platforms, newsletter popups, and chat widgets; each cleanup step can be turned off. Only clean shots are billed: bot checks or CAPTCHAs, blank pages, timeouts, failed loads, and cache hits are not billed, and response headers report the page verdict and billing result. Its MCP server provides take_screenshot, get_page_info, and capture_pdf tools for Claude, Cursor, and other MCP clients.

From an n8n HTTP Request node, call the API with a URL and keep the response as a file:

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp

See the ScreenshotNeo documentation for authentication and options. Equivalent examples are:

import requests
r = requests.get("https://api.screenshotneo.com/v1/shot", params={"access_key": "YOUR_API_KEY", "url": "https://stripe.com"}, timeout=90)
open("shot.webp", "wb").write(r.content)
const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://stripe.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);

ScreenshotNeo supports PNG, JPEG, WebP, PDF, full-page and element capture, device presets, custom CSS and JavaScript, waits, blocking rules, headers, cookies, user agents, geolocation, caching, signed links, asynchronous jobs, bulk capture (100 URLs per call), usage reporting, and an OpenAPI specification. Every feature is on every plan: 1,000 shots per month free with no card; paid plans start at $5 for 3,000 shots. Sign up free to connect it to your n8n workflow.

Recommended workflow checklist

  • Generate escaped HTML in one node.
  • Select an API or local renderer appropriate to your hosting model.
  • Define waits, viewport, fonts, and asset access for the renderer.
  • Preserve the response as binary PNG data.
  • Validate MIME type, status, and nonempty output.
  • Protect secrets and treat HTML and shell inputs as untrusted.
  • Log failures without recording sensitive page content.

Frequently Asked Questions

Can the n8n HTML node execute JavaScript to make a screenshot?

No. It creates or extracts HTML markup; a separate browser renderer is required to execute scripts and produce PNG pixels.

Is HTML-to-PNG possible on n8n Cloud?

Yes, by calling a rendering service with HTTP Request. Execute Command is not available on n8n Cloud.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Where does Execute Command run in Docker?

Inside the n8n container. It does not automatically run on the Docker host.

What should I verify before storing the result?

Confirm the renderer returned PNG bytes, the MIME type is correct, and n8n preserved the response in a binary property rather than text or JSON.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.