➕ Civitai Red LoRA
A LoRA picker that refuses half of Civitai Red on purpose
- lora_name
- strength
- sampling
➕ Civitai Red LoRA is the odd one out in this pack. Nothing here checks anything about your prompt or your picture - it's a LoRA selector with a ➕ Browse button that searches civitai.red, downloads a Qwen Image 2.1 LoRA to your machine and hands the workflow a name, a strength and the sampling the author asked for. It just happens to refuse a lot of what's on offer, and the refusals are the most interesting thing about it.
The context, briefly: CivitAI split its catalogue in April 2026, and the adult half lives on civitai.red behind its own terms. That domain permits adult content and still carves out real-person likeness in any context, sexualised minors, non-consensual content, and - the clause the community hits constantly - "AI workflows, models, or tools designed with the intention of removing clothing or otherwise nudifying real individuals." Nudify LoRAs get pulled, the threads turn into people DMing each other links, and that churn is roughly why a picker with opinions exists.
What the picker will and won't show
It queries Civitai for LoRAs under base model "Qwen 2.1" and "Qwen 2", sorted by most downloaded, NSFW included. Then it filters. Anything flagged as a real person's likeness, a minor, or SFW-only is dropped - Civitai's own flags, checked at search time and again at download time, because a web page can be made to ask for anything and the server is what has to mean it. On top of the flags, a name-and-tags filter refuses resources whose own text says loli, shota, teen, schoolgirl, celebrity, likeness, non-consensual and so on.
One detail worth knowing: "Qwen 2" is not "Qwen 2.1". A version tagged "Qwen 2" is only accepted if it was published on or after 2.1's release and its own filename or model name says 2.1; otherwise it's the older Qwen Image 2.0. That's one reason a LoRA you can see on the site doesn't appear.
Inputs and outputs
- lora_name - a combo whose entries are the files under
models/loras/Qwen/Civitai/, with(none)first.(none)is a genuine pass-through; there's no placeholder file and no magic. - strength - FLOAT, default 1.0, range −4 to 4 in steps of 0.05. 1.0 is the author's intent. Lower it if the LoRA is eating your composition; the negative side is there because some Qwen LoRAs do useful things inverted.
Three outputs, and they're meant to be wired, not read:
- lora_name and strength → your LoRA loader or the workflow's LoRA apply node.
- sampling → a string like
er_sde|beta|1.0, i.e. sampler, scheduler and CFG, filled from the sidecar's Civitai version id. The table currently has one entry: TheseAlpacas' NSFW LORA | Qwen Image 2.1, the most-downloaded adult LoRA for the model, whose author asks for samplerer_sde, schedulerbeta, CFG 1.0. For anything else, expect an empty string and set your sampler yourself.
Getting it to download
The download needs a Civitai token on the machine, and it needs it server-side - the browser half of the picker can't reach civitai.red anyway (the page's content policy forbids it), so the ComfyUI server does the search and the fetch. Put the token in the environment before starting ComfyUI:
export CIVITAI_TOKEN=your_token_here
The pack also reads CIVITAI_TOKEN= from a tokens.env under $BASE_STATE (falling back to /workspace/comfy-base/state/tokens.env), which is how a pod base usually keeps it. No token means the fetch fails with "CIVITAI_TOKEN on the server" and nothing downloads - the search will still list things, which makes the failure look weirder than it is.
Files land in models/loras/Qwen/Civitai/ as civitai_<versionid>_<slug>.safetensors, with a .civitai.json sidecar carrying the version id, base model and trained words. Downloads are SHA256-checked against what Civitai published, and a mismatch deletes the file. The fetch is a two-step dance - ask the API with your token and don't follow its redirect, then pull the signed storage URL with no auth header - because the storage host rejects requests carrying an Authorization header. Not your problem, but it's why the code looks paranoid.
Install
Pack-wide. Manager, search "Qwen 2.1 Adult Policy", or:
cd ComfyUI/custom_nodes
git clone https://github.com/Eros-Craft/ComfyUI-Qwen21-Adult-Policy
Restart. No pip install - the pack's metadata declares no dependencies and it ships no model of its own; the three checks in this pack borrow the Qwen3-VL 8B encoder your workflow already loads. This is an 18+ pack and both gates ship off, so the graph won't sample until you turn them on.
Where people get burned
- No token, no download. The list will populate and every fetch will fail. Set the token, restart, try again.
- A fresh download missing from the dropdown. The combo comes from the folder listing when the node's definition loads, so refresh the page.
- Trained words you never used. The sidecar records them; a LoRA with a trigger word does little without it. Write it into your prompt.
- Ignoring
sampling. It's advice, not a switch. If the author sayser_sde/beta/1.0 and you're on something else, expect the LoRA to look weaker than the sample gallery. - Strength at 1.0 for everything. Qwen LoRAs stack aggressively. Two at full strength is usually one too many.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| lora_name | COMBO | (none) | A LoRA fetched with ➕ Browse Civitai Red, or (none). |
| strength | FLOAT | 1.00-4–4 | How strongly the LoRA pulls. 1.0 is its author's intent; lower it if it overwhelms the picture. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| lora_name | STRING | — |
| strength | FLOAT | — |
| sampling | STRING | — |