sdxl / sdcpp / createImage
Your favorite checkpoint, rendered on Civitai's fleet
- model
- vae_model
- loras
- embeddings
- api_config
- images
- errors
- workflow_id
- raw_json
You pick the checkpoint, and Civitai's servers do the math. This is the official Civitai Comfy node for text-to-image on any SDXL model you point at it - a createImage recipe running on Civitai's cloud "sdcpp" engine, which is just the SD.cpp backend they run on their fleet. No VRAM, no model download, no checkpoint sitting in your models/ folder. Your graph ends up looking exactly like a local text-to-image setup: prompt in, IMAGE out - the difference is the pixels get made on someone else's GPU and you get billed in Buzz for it.
It's part of the official civitai/civitai-comfy-nodes pack (about 160 nodes generated from their Orchestration API spec). This is the "cloud" half of the API-wrapper story the community is rightly split on: it's the only way to get an SDXL generation when you have no GPU at all, but if you have any card at all, locally is cheaper per image. Reach for it when you want to prototype a checkpoint you haven't downloaded, or run an SDXL LoRA test from a machine that can't hold the model.
How it works
Under the hood this node is a thin HTTP client. It builds a payload from your inputs, submits it to https://orchestration.civitai.com with a discriminator of engine: sdcpp, ecosystem: sdxl, operation: createImage, long-polls until the job finishes (30-minute default timeout, override with CIVITAI_COMFY_TIMEOUT), then converts the returned image into a native ComfyUI IMAGE tensor. The node even shows the workflow id and the Buzz cost on its face when it's done. Nothing about this is local except the graph.
The inputs that matter
- prompt (required, multiline) - same prompt you'd give a local KSampler. SDXL's dual-CLIP encoder means natural language works; tag soup also works.
- model (required,
CIVITAI_AIR) - this is not a text widget. Wire a Civitai Model Selector node here and use its Browse button to pick any SDXL checkpoint on Civitai. - negative_prompt - SDXL does listen to it; leave it blank and the engine uses none.
- steps / cfg_scale - defaults of 20 and 7 are the classic SDXL starting point; bump steps toward 30 for finicky realism checkpoints.
- width / height - default 1024×1024, SDXL's native resolution. Going much off-square is fine; going to 2048 on a base model without an upscaler usually just means mush.
- vae_model, loras, embeddings - all wired via the pack's selector loaders (Civitai Model / LoRA / Embedding Selector). SDXL exposes an
embeddingsinput because the sdcpp pipeline auto-applies each embedding to the positive prompt. - u_cache -
offornormal; Civitai's UNet-cache acceleration. Trynormalif generations feel slow and you're paying per image.
Install
This is a pack install, same for every node in it:
- ComfyUI Manager → Custom Nodes Manager → search "Civitai Comfy Nodes" (publisher
civitai) → Install → restart. - Or from source:
cd ComfyUI/custom_nodes && git clone https://github.com/civitai/civitai-comfy-nodes.git, thenpip install -r civitai-comfy-nodes/requirements.txt(the only dependency isrequests), then restart.
Common issues
The #1 beginner stumble is no credentials. Wire a Civitai Auth node into api_config, or set the CIVITAI_API_TOKEN environment variable to a key from civitai.com/user/account. Headless installs must use the env var - browser OAuth won't pop on a remote box.
Second: it costs Buzz, every single time. There's no free tier, and the cost lands in whatever wallet the job bills to (the node shows it). A quick "did it work" test at quantity 12 is twelve billable jobs, so start with quantity: 1.
And a pack-level caveat worth knowing: this is an official early-preview release - the README says nodes, APIs, and behavior "may change without notice." If a node stops behaving, check the repo for updates before chasing your own config.
Inputs (18)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | — | |
| model | CIVITAI_AIR | — | |
| output_formatopt | COMBO | 4 options: , jpeg, png, webP | |
| image_metadataopt | STRING | External metadata that will be stored with the image | |
| negative_promptopt | STRING | — | |
| sample_methodopt | COMBO | 16 options: , euler, heun, dpm2, dpm++2s_a, dpm++2m, +10 | |
| scheduleopt | COMBO | 12 options: , simple, discrete, karras, exponential, ays, +6 | |
| stepsopt | INT | 201–150 | — |
| cfg_scaleopt | FLOAT | 7.000–30 | — |
| seedopt | INT | 00–4294967295 | — |
| quantityopt | INT | 11–12 | — |
| vae_modelopt | CIVITAI_AIR | — | |
| lorasopt | CIVITAI_LORAS | — | |
| embeddingsopt | CIVITAI_EMBEDDINGS | — | |
| u_cacheopt | COMBO | 3 options: , off, normal | |
| widthopt | INT | 102464–2048 | — |
| heightopt | INT | 102464–2048 | — |
| api_configopt | CIVITAI_CONFIG | Optional Civitai Auth connection; defaults to CIVITAI_API_TOKEN or stored OAuth login. |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| errors | STRING | — |
| workflow_id | STRING | — |
| raw_json | STRING | — |