Civitai Create Post
Post a whole batch to Civitai in one click — up to 20 images per post
- images
- post_id
- post_url
- post_ids_text
- post_urls_text
The flagship of the ComfyUI Civitai MCP pack, and the node to reach for when you've rendered more than one image and want them on Civitai without manually uploading each one. Civitai caps a post at 20 images, so this node uploads every image you hand it, chunks them into posts of up to that many, and creates each post with the generation metadata embedded - no copy-pasting prompts into the website.
How it works
It's a batch node under the hood: INPUT_IS_LIST, so every input arrives as a list and scalar values get broadcast. Each image tensor gets converted to PNG (or JPEG) bytes, uploaded to Civitai's MCP upload_image tool as base64, and the returned UUIDs are grouped and handed to the create_post tool. If you feed it more than 20 images, it splits into multiple posts and suffixes each title with (1), (2), and so on - which is exactly how you tell them apart on your profile later.
The metadata part is the real selling point. Civitai's ToS requires sexualized content to carry at least the prompt, and the community norm is full reproducibility ("workflow included"). If you leave a1111_params empty, the node auto-detects the prompt, sampler, seed and a resolved Civitai resources list from your workflow graph. Wire ComfyUI-Image-Saver's a1111_params output, or a Civitai metadata loader's, in for full control instead. Same for workflow_json: a wired value beats the live workflow, so re-posting a saved image with the loader preserves the original graph.
The inputs that matter
enable(required, defaulttrue) - a master switch. Flip it false to skip the upload entirely, without bypassing the node. This is the sane way to gate posting behind a condition.publish(required, defaulttrue) -truepublishes immediately;falsecreates a draft. Post drafts first. This node posts real content to the internet.images(required) - one or more image tensors, from a batch generation, an Image Batch node, orCivitai Load Images from Dir.max_images_per_post(default 20) - controls the chunk size when splitting.model_version_id/collection_id- link the post to a model version or a collection/contest (like the daily challenge).file_format(pngdefault /jpg) - PNG carries metadata plus workflow; JPEG carries parameters in EXIF and skips the workflow.
Outputs are the created post IDs and URLs. Because ComfyUI display nodes only read the first element of a list, there are also post_ids_text and post_urls_text - newline-joined strings you can drop straight into a text display to see every post you just made.
Installing it
ComfyUI Manager, search ComfyUI Civitai MCP, or:
cd ComfyUI/custom_nodes
git clone https://github.com/daceheg/ComfyUI-civitai-mcp.git
Restart after. Only dependency is requests. You'll need a Civitai API key, stored in civitai_key.txt inside the pack folder or as a CIVITAI_API_KEY env var - deliberately not a node input, so it never gets serialized into workflow metadata and leaked into PNGs.
Where people get burned
The 10 MB upload cap. Civitai's MCP upload_image tool rejects files over 10 MB; the node raises a clear error telling you to switch to JPEG or lower the resolution. A 4K PNG can blow straight past that, so big renders want jpg. Also: automated posting is exactly what Civitai's moderation is watching for - publish a draft, eyeball it, and only flip to true once you're confident the content complies. And since this pack's post tooling relies on Civitai's API, a banned or muted account (check with Civitai Account Status) means your uploads can vanish with the account.
Inputs (14)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| enable | BOOLEAN | true | When disabled, skips the upload and post entirely. Use this to gate posting without bypassing the node. |
| publish | BOOLEAN | true | — |
| titleopt | STRING | — | |
| descriptionopt | STRING | — | |
| max_images_per_postopt | INT | 201–20 | Civitai allows at most 20 images per post. If more images are passed, they are split across multiple posts of up to this many images each. |
| model_version_idopt | INT | 00–18446744073709550000 | — |
| collection_idopt | INT | 00–18446744073709550000 | — |
| a1111_paramsopt | STRING | A1111-format generation parameters to embed. Wire ComfyUI-Image-Saver's 'a1111_params' output here for full Civitai metadata. Accepts a list (one per image); a single value is applied to all images. If empty, auto-detected from the workflow. | |
| workflow_jsonopt | STRING | ComfyUI workflow JSON to embed (PNG only). Wire a Civitai metadata loader's 'workflow_json' output here to preserve the original graph of re-posted images. Takes precedence over the live workflow; falls back to it when empty. | |
| embed_metadataopt | BOOLEAN | true | Embed generation parameters into each uploaded image so Civitai shows full metadata. |
| embed_workflowopt | BOOLEAN | true | Embed the ComfyUI workflow + prompt graph (PNG only) so the post is reproducible by drag-and-drop into ComfyUI. |
| file_formatopt | COMBO | png | PNG carries metadata + workflow in text chunks (lossless). JPG carries the parameters in EXIF (smaller, no workflow). |
| jpg_qualityopt | INT | 951–100 | JPEG quality (only used when file_format is jpg). |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| post_id | INT | — |
| post_url | STRING | — |
| post_ids_text | STRING | — |
| post_urls_text | STRING | — |