html-to-image v1.0.0
J5Soft · ferramentas · Chromium Chromium 152.0.7977.82 built on Debian GNU/Linux 13 (trixie)

HTML entra, imagem sai. Direto no node do n8n.

Serviço de renderização headless: envie o HTML gerado pelo seu agente e receba o arquivo final pronto (PNG, JPEG ou WebP) — no tamanho exato dos presets de redes sociais.

POST https://html-to-image.5.189.186.144.sslip.io/render
exemplo rápido
curl -X <span class="k">POST</span> https://html-to-image.5.189.186.144.sslip.io/render \
  -H <span class="k">'X-API-Key: SUA_CHAVE'</span> \
  -H <span class="k">'Content-Type: application/json'</span> \
  -d <span class="k">'{"html": "<div style='</span><span class="k">'padding:64px;font:700 72px sans-serif'</span><span class="k">'>Olá J5Soft</div>", "preset": "square"}'</span> \
  -o post.png

Endpoints

Autenticação por API key: header X-API-Key, Authorization: Bearer … ou ?key=.

POST /render

Recebe {"html": "…"} e devolve a imagem. Resposta binária por padrão; com "base64": true devolve JSON.

GET /health

Status do serviço, versão do Chromium e carga atual. Usado no healthcheck do Coolify.

GET /presets

Lista os tamanhos prontos: square, story, portrait, og, twitter, linkedin, youtube.

GET /

Esta página de documentação.

Parâmetros do render

Todos opcionais, exceto html. Podem ir no corpo JSON ou na query string.

campopadrãodescrição
htmlHTML completo ou fragmento. Cercas ```html e prosa antes/depois do documento que o agente costuma devolver são removidas automaticamente.
presetsquareTamanho pronto (ver /presets).
width / height1080 / 1080Dimensões em px. Use "height": "auto" para altura livre (recorta o excesso).
scale1Fator de escala do dispositivo (2 = retina, arquivo maior).
formatpngpng, jpeg ou webp.
quality92Qualidade para jpeg/webp.
background#ffffffCor de fundo do canvas (hex).
transparentfalseFundo transparente (png/webp).
trimfalseRecorta margens vazias ao redor do conteúdo.
waitMs1500Tempo de espera para fontes, imagens e animações antes de capturar.
cssCSS extra injetado no documento (ajustes finos sem mexer no HTML). Entra fora da camada, portanto vence o CSS do documento.
injecttrueO reset de CSS da app entra em @layer hti-reset: por regra do cascade, o CSS do seu HTML (fora de camadas) sempre vence o reset.
base64falseDevolve JSON com a imagem em base64 em vez do binário.
noNetworkfalseBloqueia DNS durante o render (determinismo e segurança).

Como usar no n8n

No fim do workflow, depois do node do agente que devolve o HTML.

  1. HTTP RequestMethod POST, URL https://html-to-image.5.189.186.144.sslip.io/render.
  2. HeadersAdicione X-API-Key com o valor da sua chave.
  3. Body → JSON{"html": "{{ $json.html }}", "preset": "square", "scale": 1}
  4. Options → ResponseResponse Format: File, Put Output in Field: data — o node passa a entregar o arquivo em binário.
  5. PublicarUse o binário data no próximo node (upload, WhatsApp, e-mail, Drive, etc.).
body do node HTTP Request
{
  "html": "{{ $json.html }}",
  "preset": "square",
  "scale": 1,
  "format": "png"
}

Respostas e erros

statuscodequando acontece
200Imagem gerada (headers X-Image-Width, X-Image-Height, X-Render-Ms).
400bad_requestParâmetro inválido (preset, formato, cor, dimensão).
401unauthorizedAPI key ausente ou incorreta.
413html_too_largeHTML acima de 2.000.000 bytes.
429busyFila cheia — repita a chamada em alguns segundos.
500render_failedFalha do Chromium (informe o detail ao suporte).
504render_timeoutRender passou de 60s.