ComfyUI NSFW Workflow Guide: Uncensored SDXL Setup in 2026
Disclosure: jsmanifest has a financial interest in NoCensor AI and may earn from signups through links in this article.
A hands-on comfyui nsfw workflow guide: install ComfyUI, pick an uncensored SDXL checkpoint, wire the nodes, and fix the black-image bug.
While I was rebuilding a ComfyUI setup on a fresh machine the other day, I remembered why the first pass at a comfyui nsfw workflow trips up so many people. It's not the concept, it's the small stuff. A checkpoint silently expects a different VAE. A CLIP Text Encode node ignores half your prompt. A black square shows up where your render should be. None of that is documented on the node graph itself; you just have to know it going in.
This is the setup I'd hand a friend who wants a local, uncensored SDXL pipeline in ComfyUI without burning a weekend on trial and error. We'll cover what hardware you actually need, how to install ComfyUI, and how to pick a checkpoint that won't refuse your prompts. From there it's the node-by-node text-to-image workflow, image-to-image and inpainting, adding LoRAs, upscaling, and the problems that show up in nearly every uncensored setup. I'll also flag where a hosted option makes more sense than fighting your own GPU.
What You Need
Let's get the hardware question out of the way first, because it determines almost every other decision you'll make.
- GPU VRAM.: 8GB of VRAM runs SDXL NSFW checkpoints comfortably at standard resolutions. 12GB gives you headroom for larger batches or a quantized Flux model alongside SDXL. 16GB and up is where local video generation (Wan-based workflows) starts to feel practical instead of painful.
- Disk space.: Budget at least 30-40GB free. A single SDXL checkpoint runs 6-7GB, and VAEs and LoRAs add up fast on top of that. Put your models on an NVMe SSD if you have the choice; checkpoints loading off a spinning drive is a surprisingly common cause of "why is this so slow."
- Operating system.: ComfyUI runs natively on Windows and Linux with an NVIDIA card. AMD support exists on Linux through ROCm, though it's rougher around the edges. Apple Silicon works through MPS but is noticeably slower for anything beyond light experimentation.
- Nothing about content filtering.: I cannot stress this enough: ComfyUI itself has no built-in NSFW filter, no safety checker, no keyword blocklist. Whatever gets generated is a function of your checkpoint and your prompt, full stop. That's the entire appeal, and it's also why checkpoint choice matters more here than in any mainstream tool.
Installing ComfyUI
You've got two real paths in, and which one you take depends on how much you want to touch a terminal.
The portable build is the path of least resistance on Windows. Download the standalone ComfyUI package (it ships as a self-contained folder with an embedded Python), extract it, then run run_nvidia_gpu.bat. No virtual environment to manage, no dependency conflicts with other Python projects on your machine. This is what I point beginners toward every time.
The manual install gives you more control and is the only realistic option on Linux or if you want ComfyUI alongside other Python tooling:
git clone https://github.com/comfyanonymous/ComfyUI.git
cd ComfyUI
python -m venv venv
source venv/bin/activate # venv\Scripts\activate on Windows
pip install -r requirements.txt
python main.pyIf you're on a laptop GPU or anything under 8GB of VRAM, launch with the low-VRAM flag instead:
python main.py --lowvramThat trades a bit of speed for offloading more of the model to system RAM, which is the difference between "it runs" and "it crashes halfway through a render" on tighter hardware.
Once ComfyUI is up, install ComfyUI-Manager immediately. It's a custom node that adds a UI for installing missing custom nodes and updating everything in one click, so you're not hunting through GitHub repos by hand for browsing community workflows. Nearly every workflow you download from the community will be missing at least one custom node, and Manager's "Install Missing Custom Nodes" button is the fastest way through that.
Choosing an Uncensored SDXL Checkpoint
Here's where a lot of guides get vague, so let's be specific. The checkpoint is the actual model file, and it's what decides whether your generator refuses NSFW prompts or not: ComfyUI itself never makes that call.
Where to look: Civitai is still the primary source for community checkpoints. As of April 2026, Civitai split its NSFW content onto a separate domain, civitai.red, while civitai.com stays SFW-only. Any checkpoint carrying an explicit NSFW tag now lives on the .red side, behind its own age gate.
Photoreal fine-tunes. For realistic output on 8-12GB of VRAM, SDXL fine-tunes built specifically for photoreal NSFW work (Lustify and similarly-positioned checkpoints are common picks in this category) tend to render faster and handle skin and lighting better than a general-purpose base model.
Anime and illustrated fine-tunes. If you're after anime or illustrated styles, Pony Diffusion V6 XL and Illustrious XL are the two names that keep coming up, and both respond well to booru-style tag prompting rather than natural language.
License check, every time. Before you download anything, read the checkpoint's license on its Civitai page. Most community SDXL fine-tunes are permissive for personal generation, but commercial use and redistribution terms vary model to model. Don't assume; check the specific page.
The Text-to-Image Workflow, Node by Node
This is the backbone workflow every other technique in this guide builds on top of. Let's take a look at the chain, in order:
- Load Checkpoint, points at your
.safetensorsfile and outputs the MODEL, the CLIP, and the VAE everything downstream plugs into. - CLIP Text Encode (Positive), your actual prompt, wired from the checkpoint's CLIP output.
- CLIP Text Encode (Negative), what you want the model to avoid. Don't skip this one; a decent negative prompt does more heavy lifting than people expect.
- Empty Latent Image, sets your output resolution and batch size. For SDXL specifically, stick to resolutions the model was trained at (1024x1024, or other combinations that multiply out to roughly one megapixel), go too far off that and composition gets weird fast.
- KSampler, the actual diffusion step. Takes the MODEL plus both conditioning inputs and the latent, and outputs a denoised latent.
- VAE Decode, turns that latent into an actual image using the VAE from your checkpoint.
- Save Image, writes the PNG to disk, with your full workflow embedded in the metadata by default.
For KSampler settings on a typical SDXL NSFW checkpoint, this is a solid starting point:
sampler_name: dpmpp_2m
scheduler: karras
steps: 28
cfg: 6.0
denoise: 1.0Bump cfg up toward 7-8 if the model is ignoring parts of your prompt, or down toward 4-5 if outputs look overcooked or oversaturated. dpmpp_2m with a karras scheduler is a dependable default across most SDXL checkpoints, but it's worth trying euler_ancestral if you want more variation between seeds.
One prompt limitation worth knowing up front: CLIP encodes in chunks of 77 tokens. Prompts longer than that get silently split and re-combined, which can weaken how strongly later parts of a long prompt land. If you're writing long, detailed prompts and outputs feel like they're ignoring the back half, that token limit is usually why: trim the prompt or move the most important details earlier.
Image-to-Image and Inpainting
Text-to-image is the starting point, but image-to-image and inpainting are where you get actual control over a result instead of re-rolling the seed.
For image-to-image, swap the Empty Latent Image node for a VAE Encode node fed by a Load Image node, then feed that latent into the same KSampler. The setting that matters most here is denoise: at 1.0 you're effectively ignoring the source image, at 0.3-0.5 you're keeping most of its structure and composition while changing details, and below 0.2 changes get subtle enough that they're barely noticeable.
For inpainting, add a Load Image node with a mask (painted directly in ComfyUI's mask editor, or loaded as a separate image), route it through a VAE Encode (for Inpainting) node, and lower your denoise strength to somewhere around 0.6-0.8 depending on how much of the masked region you want the model to redraw versus preserve. Inpainting is the tool of choice for fixing a specific detail, hands, an outfit, a background element, without regenerating the whole image and risking everything else that was already working.
Adding LoRAs
A LoRA is a small trained add-on file, usually 50-200MB, that teaches a checkpoint one specific style, character, or concept, without retraining the whole model. Wire it in with a LoraLoader node, dropped between your Load Checkpoint and everything downstream. It takes the MODEL and CLIP outputs from the checkpoint and passes modified versions of both further down the chain.
Two settings to know: strength_model controls how much the LoRA affects the actual diffusion process, and strength_clip controls how much it affects prompt understanding. Most LoRA authors recommend a starting strength around 0.7-0.8; push higher and you risk the LoRA overpowering everything else in your prompt, push lower and it barely shows up. If you're like me, you learned that the hard way by stacking too many LoRAs at full strength on a first attempt. Every LoRA has a trigger word listed on its Civitai page, and that word generally needs to appear in your positive prompt for the LoRA to activate at all. Stacking two or three LoRAs is fine; stacking five and wondering why your output looks like mush is a lesson most of us learn the hard way.
Upscaling
A base 1024x1024 SDXL render is usable, but a second upscale pass is where images start looking genuinely sharp. The standard approach is Upscale Latent By (or an ESRGAN-style upscale model node) followed by a second, lower-denoise KSampler pass, commonly called a "hi-res fix." Upscale by 1.5-2x, then re-run KSampler at denoise: 0.35-0.5 against the upscaled latent. That second pass is what adds fine detail, skin texture, fabric, hair strands, that the base resolution never had room to render in the first place. Skipping it is the single biggest reason people think their checkpoint "isn't that good" when the real issue is stopping one step too early.
Fixing Common Problems
These are the issues that show up across nearly every uncensored ComfyUI setup, roughly in order of how often I see people hit them.
Black or corrupted images: this is almost always an SDXL VAE precision issue: the stock SDXL VAE produces NaN values when run in fp16, and NaN output renders as a black square. Download sdxl_vae_fp16_fix.safetensors, drop it in ComfyUI/models/vae/, then add a Load VAE node pointed at it and wire that into your VAE Decode instead of the checkpoint's baked-in VAE. If you'd rather not swap files, luckily we can fall back to forcing the VAE to run in fp32 (slower, more VRAM, but stable), or running it on CPU works too.
Out-of-memory errors: launch with --lowvram first. If that's not enough, drop your resolution before you drop your checkpoint quality: a smaller SDXL render at full precision usually beats a full-size render on a heavily quantized model.
The 77-token CLIP limit is covered above, but it bears repeating since it's the source of a lot of "why isn't my prompt working" confusion: anything past roughly 77 tokens gets chunked, and important details late in a long prompt can lose influence. Front-load what matters most.
Missing custom nodes: if you load a community workflow and get red "missing node type" errors, that's ComfyUI-Manager's whole reason for existing: open it, hit "Install Missing Custom Nodes," restart.
Slow generation on otherwise decent hardware usually traces back to where your checkpoints actually live. Loading a 6-7GB safetensors file off a spinning hard drive on every generation adds real time; moving models to an SSD is a five-minute fix with a noticeable payoff.
When Local Isn't Worth It
Local ComfyUI is the right call if you want full control and you're already comfortable with node graphs and have a GPU sitting idle anyway. It's the wrong call if you just want an image without buying hardware or learning a node editor.
For readers in that second group, hosted options exist specifically to skip the setup entirely. I tested NoCensor AI for this. It runs hosted SDXL and Flux pipelines with no content filter, so there's no local install and no VAE files to chase down, no VRAM ceiling to work around either. You get an AI image generator in the browser instead of a node graph, which trades the granular control this guide walks through for zero setup time. Pricing is credit-based rather than a subscription. Credits start from $2 for the smallest pack (200 credits), and the pricing page lists larger packs at $5/500, $11.99/1,300 and $25/2,750. Images run 75 credits each, and you can pay with crypto or with a card through Telegram. The honest drawback: your generations live on their account rather than on your own disk, and you're paying per image instead of the (effectively free after hardware) cost of running your own GPU. It's a reasonable trade if you generate occasionally and don't own a capable card, it stops making sense the moment you're rendering enough that a GPU would pay for itself.
If you're weighing more than just this one tool, I put together a broader comparison in best uncensored AI image and video generators that covers hosted options side by side.
I hope you found this valuable, and look out for more ComfyUI guides in the future as this space keeps moving.
Frequently Asked Questions
Does ComfyUI have an NSFW filter?
No. ComfyUI has no built-in content filter or safety checker of any kind. Whether NSFW content generates or not depends entirely on the checkpoint you load and the prompt you write; the software itself doesn't inspect or restrict output.
Which GPU do I need?
An NVIDIA card with 8GB of VRAM comfortably runs SDXL NSFW checkpoints. 12GB gives you room for a quantized Flux model too, and 16GB or more is where local video generation starts feeling practical rather than painfully slow. AMD works on Linux via ROCm; Apple Silicon works through MPS but is noticeably slower.
Why are my images black?
This is almost always the SDXL VAE producing NaN values under fp16 precision, which renders as solid black. Install sdxl_vae_fp16_fix.safetensors in your VAE folder and wire it into VAE Decode in place of the checkpoint's default VAE. Forcing fp32 precision or running the VAE on CPU are both fallback fixes if you'd rather not swap files.
Is ComfyUI better than Forge for NSFW?
Neither is objectively better; they solve different problems. Forge (a fork of Automatic1111) has a more familiar web UI and a gentler learning curve for straightforward text-to-image work. ComfyUI's node graph takes longer to learn but gives you far more control over multi-stage pipelines, inpainting and LoRA stacking and hi-res fixes chained together, which is exactly the kind of workflow this guide covers.
Can I use SD 1.5 models in the same workflow?
Not directly in the same graph as an SDXL workflow. SD 1.5 and SDXL use different model architectures and different optimal resolutions, so you'll want a separate workflow (or at minimum, a separate checkpoint loader and resolution setup) for SD 1.5 checkpoints and LoRAs rather than mixing them into an SDXL pipeline.
Is there an online ComfyUI alternative?
Yes, hosted generators skip the node graph entirely in favor of a standard prompt box, at the cost of the fine-grained control ComfyUI gives you. NoCensor AI is one option if you want hosted, uncensored SDXL and Flux generation without installing anything locally; see the hosted section above for the honest trade-offs.