# How SDXL Style Presets Work and How to Write Your Own

> Published 2026-08-24 · https://www.promptzone.com/samir_korhonen/how-sdxl-style-presets-work-and-how-to-write-your-own-lc1

Style presets are the cheapest way to pull a consistent look out of SDXL: no [LoRA](/tara_suzuki/best-flux-loras-in-2026-for-realism-and-how-to-stack-them-1mck) to train, no sampler to retune, no extra VRAM. What follows is what a preset contains, how front-ends apply one, which parts of it move the image, and how to build a library of your own.

## A style preset is a prompt template, nothing more

Strip the UI away and an [SDXL](/jaroslav/how-to-install-and-run-sdxl-models-in-comfyui-a-complete-guide-2nk2) style is two strings and a placeholder:

```json
{
  "name": "Cinematic",
  "prompt": "cinematic film still of {prompt}, shallow depth of field, 35mm, film grain, dramatic backlight",
  "negative_prompt": "cartoon, illustration, flat lighting, low contrast, deformed"
}
```

Pick that style and the front-end drops your subject into `{prompt}`, then appends the second string to whatever is in your negative box. That is the whole mechanism: no adapter weights, no extra model, no conditioning trick. The style is text, and it costs nothing at inference time.

Two consequences: anything a preset does you can do by hand, so a style library is a vocabulary lesson as much as a shortcut; and being only text, the same JSON runs against base SDXL, a fine-tune, or another model.

![Warm golden-hour sunlight falling across a windowsill](https://cdn.stocksnap.io/img-thumbs/960w/X61ITHOAT6.jpg)

## Where styles live

| Tool | Mechanism | Stacking |
| --- | --- | --- |
| [Fooocus](https://github.com/lllyasviel/Fooocus) | Built-in style list in the Style tab | Yes — concatenated, and order matters |
| [AUTOMATIC1111 WebUI](https://github.com/AUTOMATIC1111/stable-diffusion-webui) | `styles.csv` in the install root, with `{prompt}` support | Yes, in selection order |
| ComfyUI | No native styles; concatenate strings ahead of the CLIP text encode | Whatever your graph does |
| Diffusers | String formatting before the pipeline call | Your code's problem |

If a front-end has no `{prompt}` placeholder it appends your subject to the end of the style string instead. That is not cosmetic: SDXL weights early tokens more heavily, so "portrait of a lighthouse keeper, oil on canvas" and "oil on canvas, portrait of a lighthouse keeper" are not the same prompt. When porting a style between tools, check which end your subject landed on.

## The parts of a style that actually do something

Most presets stack clauses from five buckets:

- **Medium and process** — oil on canvas, gouache, 35mm film photograph, screen print, clay render. The highest-signal clause in almost any style. If you add one thing, add this.
- **Light** — golden hour, hard rim light, overcast softbox, single candle. Light sells a look better than any adjective about quality.
- **Optics** — 35mm, 85mm, macro, wide angle, shallow depth of field, tilt-shift. These carry real meaning because the training captions carried it.
- **Color and grade** — muted earth tones, high-key, teal and orange, monochrome, duotone.
- **Detail and quality tokens** — "highly detailed", "8K", "masterpiece". Far less signal than naming a medium, a light, or a lens. A preset that is mostly quality tokens is mostly noise.

Sanity test for a downloaded style: delete every clause from the last bucket and regenerate on the same seed. If little changes, the style was earning its keep elsewhere.

## The negative half is not filler

The negative string does real work, and it is where portability problems start. A style built for photorealism typically pushes "illustration, cartoon, anime, painting" into the negative — drop it onto an illustration subject and the two halves of your prompt fight each other.

One caveat before you spend an hour debugging: distilled few-step checkpoints that run at CFG 1 — the Turbo and Lightning SDXL variants — have classifier-free guidance effectively off, so the negative prompt does nothing at all while the positive half still applies. If a preset behaves differently on a fast checkpoint, this is usually why.

![Rows of colorful paint swatches laid out on paper](https://cdn.stocksnap.io/img-thumbs/960w/P3GRWHODKN.jpg)

## Building your own preset, step by step

1. **Fix a control subject and a seed.** One neutral subject — "a wooden rowboat on a lake" — with the seed locked. Everything after this is a comparison against that baseline.
2. **Write the medium clause first.** Generate. If the image did not move, the clause is too generic: "1970s Kodachrome slide" beats "photo".
3. **Add one clause at a time.** Light, then optics, then grade, regenerating after each. Delete anything that changes nothing — every token competes with the subject.
4. **Move exclusions into the negative.** Whatever you keep phrasing as "not X" belongs in the negative string.
5. **Save it with the placeholder**, then test it on three subjects unlike your control — a face, an interior, a landscape. A style that only works on one subject is a prompt.

## Refactoring a prompt into a style

Here is a self-contained SDXL prompt of the kind that circulates as inspiration. It works, but it fuses subject and style:

```text
8K photography, pirate ship sailing in a storm inside of a glass globe on a window ledge at golden hour, 35mm, professional, 4k, highly detailed, great composition
```

With a short negative prompt to match:

```text
glitch, ugly, low contrast
```

Everything except the ship-in-a-globe is style: medium, light ("golden hour"), optics ("35mm"), and a tail of quality tokens. Pull the subject out and you have a reusable preset:

```json
{
  "name": "Golden Hour Still Life",
  "prompt": "35mm photograph of {prompt}, golden hour light through a window, shallow depth of field, natural color, sharp focus",
  "negative_prompt": "glitch, low contrast, harsh flash, oversaturated, deformed"
}
```

The same look now applies to a bonsai, a chess set, or a cat on a radiator, and you tune one string instead of rewriting the prompt.

## Where styles break

- **Subject collision.** A preset that says "portrait, headshot" crops a landscape subject into something that is neither.
- **Stacking fights.** Two presets are concatenated; if one negates a medium the other asserts, you get mush. Stack at most two, and read the resulting string.
- **Baked-in looks.** Checkpoints trained hard on one aesthetic half-apply a style that pulls elsewhere. That is the checkpoint winning, not the style failing.
- **Token budget.** SDXL's text encoders work in 75-token chunks. A long style plus a long subject pushes part of the subject into a later chunk, where it carries less weight — the usual cause of "the model ignored half my prompt".
- **Vocabulary drift.** Wording tuned against SDXL does not transfer one-for-one to architectures with different text encoders. Re-run your library on a new model first.

![Close-up of a vintage film camera lens](https://cdn.stocksnap.io/img-thumbs/960w/VUTG1N6B5S.jpg)

## Takeaways

A style preset is a prompt template with a placeholder and a negative half — knowing that is enough to stop treating style libraries as black boxes. Judge one by its medium, light, optics and grade clauses; treat quality tokens as decoration. Build your own against a fixed subject and seed, one clause at a time. Keep presets short enough to leave room for the subject, and re-test them whenever you switch checkpoints: a style describes one model's vocabulary, and that changes with the model.

## Related reading

- [Fooocus Presets: Reproducible Setups for SDXL Images](/samir_mensah/fooocus-presets-reproducible-setups-for-sdxl-images-112m)
- [Stable Diffusion 3 Architecture and How to Prompt It](/mei_bui/stable-diffusion-3-architecture-and-how-to-prompt-it-cob)
- [Generating European Comic Art with SDXL Checkpoints](/pietro_lefevre/generating-european-comic-art-with-sdxl-checkpoints-4nc)
