npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

n8n-nodes-runfra

v0.2.2

Published

n8n community node for Runfra — async batch image generation API. Generate single prompts, multi-prompt batches, or product scenes from a public image URL (img2img) and receive image URLs in one workflow step.

Readme

n8n-nodes-runfra

npm version

Community node for Runfra — async batch image generation for high-volume creative and ecommerce automation. Generate from a prompt, a list of prompts, or a product image URL + scene prompt, and receive final image URLs in one workflow step. Models: SDXL, FLUX Schnell, RunFra Pro (flux-dev).

v0.2 supports

  • Generate Image — single prompt, batched candidates, top-pick selection.
  • Generate Multiple Images — one image per prompt in one Runfra job.
  • Generate Product Scene — image-to-image from a public HTTPS image URL plus a scene prompt.

Upscale, mockup, and Etsy fulfillment are not in this node yet. Those workflows still use dashboard / JWT-only endpoints and have separate billing semantics — they belong in the dashboard for now.

Install

In a self-hosted n8n instance:

  1. Settings → Community Nodes → Install
  2. Enter n8n-nodes-runfra
  3. Confirm and reload n8n

Or install manually:

cd ~/.n8n
npm install n8n-nodes-runfra

Adding the node to a workflow

After install, the Runfra node is available in two places:

  • Command Bar (Ctrl/Cmd + K → search "Runfra" → "Add Runfra")
  • + Add Node panel — the standard node-creator search. Some n8n versions hide unverified community nodes here by default; if so, use the Command Bar.

Credentials

Create credentials of type Runfra API:

| Field | Value | |---|---| | API Key | An rfa_… key from Dashboard → API Keys | | Base URL | https://api.runfra.com (default — change only for non-production deployments) |

The API key is shown once at creation — save it immediately.

Operations

Generate Image (Single Prompt)

One scene, multiple candidates. Returns the Top Pick + every accepted URL.

| Field | Notes | |---|---| | Prompt | 1–2000 chars | | Batch Size | 1–100. Your account tier may cap the maximum batch size. | | Model | SDXL · FLUX Schnell · RunFra Pro (flux-dev) | | Width / Height | 512–1024 px | | Negative Prompt | (Additional Options) ignored for FLUX Schnell and RunFra Pro | | Quality Mode | strict (default) · soft · off | | Polling Timeout | seconds; default 300 — see below | | Notify On Complete | sends an email on terminal state (signed-in users with verified email) |

Output (single item):

{
  "jobId": "a1b2c3d4-…",
  "status": "succeeded",
  "inputMode": "single",
  "bestResultUrl": "https://storage…/best.png",
  "resultUrls": ["…/0.png", "…/1.png"],
  "seeds": [2847391024, 1093847562, 7391820475, 4820193847],
  "acceptedCount": 3,
  "qualityScore": 0.87,
  "qualityPassed": true,
  "isBestEffort": false,
  "executionTimeMs": 13200
}

Generate Product Scene (From Reference Image)

Image-to-image: take a public image URL and a scene prompt, return one restyled image. This operation currently submits SDXL img2img jobs; output is capped at 768×768 px.

| Field | Notes | |---|---| | Reference Image URL | Public HTTPS URL. PNG/JPEG/WebP, ≤10 MB, longest side ≤1024 px. SSRF-guarded server-side fetch. | | Scene Prompt | 1–2000 chars. The reference image dictates composition; this prompt drives style and surroundings. | | Output Width / Height | 384–768, multiples of 64. width × height ≤ 768×768. Default 512×512. | | Strength | (Additional Options) 0.4–0.9, default 0.6. Lower keeps the reference visible; higher re-imagines the frame. | | Crop Anchor | (Additional Options) center (default) or any of top/bottom/left/right/top-left/etc. Used when the reference and output aspect ratios differ. |

The node performs two backend calls in sequence:

  1. POST /v1/uploads/input-image-by-url — server-side fetch, returns input_storage_key.
  2. POST /v1/jobs with pipeline_mode=img2img and the storage key — then polls for the result.

Both calls use the same X-API-Key. The fetched image is owned by the API key's user account and stored privately for 24 hours.

Output (single item):

{
  "jobId": "a1b2c3d4-…",
  "status": "succeeded",
  "inputMode": "single",
  "bestResultUrl": "https://storage…/best.png",
  "resultUrls": ["…/0.png"],
  "seeds": [2847391024],
  "acceptedCount": 1,
  "qualityScore": 0.84,
  "qualityPassed": true,
  "isBestEffort": false,
  "executionTimeMs": 18400
}

Generate Multiple Images (Multi Prompt)

One image per prompt, all in a single Runfra job.

| Field | Notes | |---|---| | Items | Add one row per prompt (each can override seed and negative prompt) | | Model / Width / Height / Quality Mode | Apply to every item | | Polling Timeout, Notify | (Additional Options) — same as single mode |

Output (single item):

{
  "jobId": "a1b2c3d4-…",
  "status": "succeeded",
  "inputMode": "multi",
  "seeds": [42, 7291, 9012],
  "acceptedCount": 2,
  "qualityScore": 0.84,
  "items": [
    { "promptIndex": 0, "prompt": "a fox in a snowy forest", "status": "succeeded", "resultUrl": "…/0.png", "seed": 42, "errorMessage": null },
    { "promptIndex": 1, "prompt": "a whale diving underwater", "status": "succeeded", "resultUrl": "…/1.png", "seed": 7291, "errorMessage": null },
    { "promptIndex": 2, "prompt": "a green parrot on a branch", "status": "failed",  "resultUrl": null,        "seed": 9012, "errorMessage": "Quality gate: no passing candidates after 3 attempts" }
  ],
  "executionTimeMs": 28500
}

Use n8n's Split Out node to fan items[] into one workflow item per generated image.

Polling and timeouts

The node polls GET /v1/jobs/{id}/result every 3 seconds. Typical generation is 10–30 seconds per task; large multi-prompt jobs can run longer.

If polling exceeds Polling Timeout seconds (default 300), the node does not throw. It returns:

{ "jobId": "…", "status": "running", "timeoutExceeded": true, "seeds": […] }

Chain a second Runfra node (or a plain HTTP Request to GET https://api.runfra.com/v1/jobs/{jobId}/result) to keep polling. This keeps long-running jobs out of n8n execution-timeout territory without losing the job ID.

Pricing reference

Runfra uses prepaid credits shared across Dashboard, API, n8n, and MCP. This node has no separate pricing.

Total cost = credits_per_image × effective_batch:

| Model | ≤ 512 px | ≤ 768 px | > 768 px (1024×1024) | |---|---|---|---| | SDXL | 1 cr | 2 cr | 3 cr | | FLUX Schnell | 2 cr | 3 cr | 4 cr | | RunFra Pro (flux-dev) | 5 cr | 9 cr | 14 cr |

Single mode: effective_batch = batch_size. Multi mode: effective_batch = items.length.

Cost is frozen at submission. Platform failures and no-result jobs are refunded automatically. Best-effort delivery (isBestEffort: true) does not refund — the image is delivered even though no candidate cleared the quality gate.

What this node does NOT do

  • No upscale, mockup, or Etsy fulfillment yet. Those workflows still use dashboard / JWT-only endpoints and have separate billing semantics.
  • No webhooks. The node polls; it does not register a callback. For fire-and-forget patterns, use a 30-second timeout, store the jobId, and resume polling later.

Develop

cd packages/n8n-nodes-runfra
npm install
npm run build       # compiles TS and copies the icon
npm run lint

To test in a local n8n: npm pack to create a tarball, then in your n8n install directory npm install /absolute/path/to/n8n-nodes-runfra-*.tgz and restart n8n. The glob avoids stale references when the version bumps.

License

MIT