Apply SDXL Style SAI
The official SDXL style presets, as plain prompt text
- positive_prompt
- negative_prompt
If you ever used an SDXL web UI, you've met these styles before. sai-cinematic, sai-anime, sai-analog film - they're the 17 official style presets Stability AI bundled with SDXL, where they were buttons you clicked next to the prompt box. Apply SDXL Style SAI turns those buttons into a node that works on any SDXL-family checkpoint. You type your subject once, pick a style, and get a completely different look without rewriting anything.
That's the whole point, and it's more powerful than it sounds. The community treats prefix/suffix style sets as a cheat code for iteration: same base prompt wrapped in "cinematic film still... shallow depth of field, bokeh, cinemascope" versus "anime artwork... key visual, vibrant, studio anime" gives you a pile of distinct results for the cost of one dropdown. This is the flagship node of the pack, and the set people actually reach for.
One thing to clear up: the name is a mild lie. It doesn't "apply" anything to your image or latent - there's no model involved, no API, no heavy lifting. It rewrites your prompt strings. That's it. It's deterministic text in, text out, and it runs before your CLIP Text Encode node.
How it works
Each style is a tiny template in a JSON file. Pick sai-cinematic, and the node does two things: it replaces the {prompt} placeholder in that template's positive text with your prompt, and it appends the template's negative to yours. Mechanically that's:
positive_out = template.prompt.replace("{prompt}", your_positive)
negative_out = your_negative + " " + template.negative_prompt
So "a fox in snow" + sai-cinematic becomes "cinematic film still a fox in snow . shallow depth of field, vignette, highly detailed, high budget, bokeh, cinemascope, moody, epic, gorgeous, film grain, grainy" - with a matching negative appended. The style set runs the gamut from sai-3d-model and sai-lowpoly through sai-origami, sai-pixel art, sai-neonpunk, sai-isometric, and sai-texture.
Inputs and outputs that matter
You really only touch a few of these:
- positive_prompt / negative_prompt - your prompt strings (multiline).
- style - the dropdown. It's 18 entries:
bypassplus the 17sai-*presets.bypassis always first and passes both prompts through untouched, which makes it the perfect A/B switch: leave the node wired in, and flip between bypass and a style to compare. - apply_negative_style (default yes) - controls whether the style's negative gets appended. Turn it off if you have your own carefully built negative that you don't want polluted.
- log_prompt (default off) - prints a before/after block to the ComfyUI console. Genuinely useful the first time you use it, because you can see exactly what the template did to your text.
The two outputs are just positive_prompt and negative_prompt (both STRING). Wire them into the positive and negative inputs of a CLIP Text Encode node and you're done.
Install
No README drama here: the pack is one small, dependency-free module. Install via ComfyUI Manager (search ComfyUI_mozman_nodes), or:
cd ComfyUI/custom_nodes
git clone https://github.com/mozman/ComfyUI_mozman_nodes
Then restart ComfyUI. There's no requirements.txt, no model downloads, no transformers to fight with - pure Python standard library. It's by Manfred Moitzi, the author of ezdxf (the most-used Python CAD library), and it ships with unit tests. This is the rare install that cannot break your environment.
Where people get burned
The big one is model choice. These presets were written for SDXL's CLIP encoder, and they still sing on the SDXL lineage - Illustrious, NoobAI, Pony V6. On guidance-distilled or LLM-encoded models, the negative half is inert at CFG 1 and the attention-weight syntax the templates lean on gets discarded, so the node mostly becomes a positive-text wrapper. If you're on Flux or a modern distilled model, don't expect the magic.
Also: the style names are lowercase slugs with no preview thumbnails, and the negatives here are light compared to, say, Fooocus's. They were tuned for SDXL's trained-in syntax, not to defend you against everything. Treat them as seasoning - they make a good checkpoint consistent across a batch, they don't rescue a bad one.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| positive_prompt | STRING | — | |
| negative_prompt | STRING | — | |
| style | COMBO | 18 options: bypass, sai-3d-model, sai-analog film, sai-anime, sai-cinematic, sai-comic book, +12 | |
| apply_negative_style | BOOLEAN | true | — |
| log_prompt | BOOLEAN | false | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| positive_prompt | STRING | — |
| negative_prompt | STRING | — |