CivitAI Generator
Run CivitAI checkpoints straight from your graph
- lora_stack
- image
- job_info
The CivitAI Generator node is a text-to-image node that never touches your GPU. You give it a CivitAI API token, a checkpoint referenced by its AIR URN, and a prompt, and it sends the job to CivitAI's own cloud (the Orchestration API), waits for it to finish, downloads the result, and drops a normal ComfyUI IMAGE back into your graph as if a local sampler had made it. No model file, no VRAM, no checkpoints folder. If you have Buzz credits and a slow card (or no card at all), that's the whole point.
This is the API-wrapper pattern, and it's worth being clear-eyed about it: your prompt goes to a server you don't control, each image costs Buzz, and the node blocks your whole queue while it polls - more on that below. What you buy is instant access to CivitAI's catalog without downloading a 6 GB checkpoint to see if you like it. For testing a new model's look, that's genuinely handy.
How it works
Under the hood the node is a small HTTP client, not a diffusion pipeline. It POSTs a textToImage job to orchestration.civitai.com/v1/consumer/jobs with your API key as a Bearer token, then polls for the job token every couple of seconds until the job is done or your timeout expires. The first returned image URL gets downloaded and converted into a torch.Tensor (RGB, 0–1) shaped like any ComfyUI image. It's synchronous from the graph's point of view, so a long queue at CivitAI means your workflow just sits there. Set timeout accordingly - the default of 300 seconds is usually plenty, but a backed-up queue can exceed it.
One neat bit: the node sniffs the base model from the AIR URN itself - anything with sdxl, sd3, or flux in it is treated as SDXL-family, everything else as SD 1.5 - and sends that to the API, so you don't pick a model family by hand.
The inputs that matter
Most fields mirror a local sampler, so you already know them. The ones to actually think about:
api_key- your CivitAI API token from civitai.com/user/account. No key, no call. Worth knowing: it's stored in the workflow JSON, so scrub it before sharing a workflow file.model_air- the checkpoint's AIR URN, likeurn:air:sdxl:checkpoint:civitai:827184@2883731. Copy it from the "AIR" section on the model page. It must start withurn:air:or the node refuses.prompt/negative_prompt- your positive and negative text. Empty negative prompts are simply left out of the request.scheduler- 24 sampler choices,EulerAby default. Unlike local ComfyUI you don't pick a separate sampler; this one dropdown is it.seed--1means random. Give it a real number to reproduce a result.clip_skip- 0 means disabled, so it's only sent when you actually set it.timeout- how long to wait (30–1800 s) before giving up.
width/height run 256–2048 in steps of 64, steps 1–150, cfg_scale 1.0–30.0. The optional lora_stack input wires in the stack built by the pack's CivitAI LoRA node (see that page).
Outputs
image- a normalIMAGEtensor. Wire it into Preview Image or Save Image and you're done.job_info- a string with the job token, job ID, the cost in Buzz, and the raw image URLs. It's your receipt, and it's the fastest way to see what a generation actually billed you.
Installing
Via ComfyUI Manager, search for CivitAI SDK API nodes for ComfyUI. Or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/Ave-Mollan/CivitAI-SDK-API-nodes-for-ComfyUI.git
pip install -r CivitAI-SDK-API-nodes-for-ComfyUI/requirements.txt
Restart ComfyUI. Dependencies are just requests and Pillow - nothing heavy, no model downloads.
Common issues
The README's troubleshooting table is accurate and these are the real failure modes:
API key is required- empty or whitespace key. Paste a real token.Invalid AIR format- the URN didn't start withurn:air:. Copy the whole string from the model page.Generation timed out- bumptimeout, or check whether CivitAI's queue is backed up.Job finished without image output- the job completed but returned nothing. The usual suspects: empty Buzz balance, a bad AIR, or a prompt that tripped CivitAI's policy filters (which apply to cloud generation even for content the site itself hosts).
The bigger gotcha is cost: cloud generation bills Buzz per image, and this node doesn't warn you before each call. If you're testing a checkpoint for the first time, do one image at 512px before committing to a 2K run. And note that a maintained, ~160-node official pack (civitai-comfy-nodes) landed shortly after this one - if you're building a whole cloud workflow, that's the better bet; this pack is the lean, single-purpose version.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| api_key | STRING | — | |
| model_air | STRING | urn:air:sd1:checkpoint:civitai:4384@128713 | — |
| prompt | STRING | masterpiece, best quality | — |
| negative_prompt | STRING | worst quality, low quality | — |
| width | INT | 512256–2048 | — |
| height | INT | 512256–2048 | — |
| steps | INT | 201–150 | — |
| cfg_scale | FLOAT | 7.01–30 | — |
| scheduler | COMBO | EulerA | 24 options: EulerA, Euler, LMS, Heun, DPM2, DPM2A, +18 |
| seed | INT | -1-1–18446744073709550000 | — |
| clip_skip | INT | 00–12 | — |
| timeout | INT | 30030–1800 | — |
| lora_stackopt | CIVITAI_LORA_STACK | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| job_info | STRING | — |