Perfection Styler (Advanced)
The kitchen-sink photo styler for SDXL
- text_positive_g
- text_positive_l
- text_positive
- text_negative_g
- text_negative_l
- text_negative
This is the "all of it, in one node" styler. Where the other MileHighStyler nodes each handle one category, PerfectionStyler (Advanced) bolts eleven of them onto a single node: camera, composition, depth, environment, filter, focus, lighting, mood, subject, theme, and timeofday. You pick from each dropdown, and it assembles one big photographic prompt around your text. It's the combo node the README calls a "Perfection beta" styler, and if you only add one node from this pack, it's probably this one.
The camera dropdown is the sleeper feature. It's 127 real camera bodies - Canon EOS R5, EOS-1D X Mark III, and so on. That matters more than it looks like it should. The single most reliable way to knock an SDXL checkpoint out of its glossy "beauty default" is to name actual equipment; the community's blunt version is that "point-and-shoot film camera" outperforms every combination of realistic / candid / amateur you can stack. This node hands you a menu of that exact lever. The other big lists back it up: environment (283 options), focus (67, depth-of-field areas), and depth (20) fill in the optical details that make a render read as a photo instead of a painting.
How it works
Each style you pick is a little template with a {prompt} placeholder. Your text drops into the placeholder, and everything else the style adds gets automatically wrapped and weighted (roughly ("...":2.0)) so the styling pushes hard while your own words stay at normal strength. Select a value in several dropdowns and they stack into one assembled prompt. Leave a dropdown on No option / none and it contributes nothing - so you're not forced to fill all eleven.
Because it's the Advanced flavor, it speaks SDXL's two-text-encoder language. SDXL runs OpenCLIP-ViT/bigG and CLIP-ViT/L side by side, and that second encoder is where a lot of the composition and lighting control actually lives. So this node splits into G and L:
text_positive_g/text_positive_l- your prompt for each encoder. Put your main scene in both, or bias detail into L.text_negativeplusnegative_prompt_to(Both / G only / L only) - where each style's built-in negative gets routed.log_prompt- prints the fully assembled prompt to your ComfyUI console. Leave this on until you trust what it's building; it's the fastest way to see what all those dropdowns actually did.
Outputs are text_positive_g, text_positive_l, text_positive, text_negative_g, text_negative_l, and text_negative. Wire _g and _l into a CLIPTextEncodeSDXL node's text_g / text_l inputs. If you're on a workflow with a single plain CLIP Text Encode, ignore the split and use the combined text_positive / text_negative instead.
Installing it
Easiest path is ComfyUI Manager - search ComfyUI_MileHighStyler and install. Manager doesn't always list it, though (it's an older, niche pack), so the reliable route is manual:
cd ComfyUI/custom_nodes
git clone https://github.com/TripleHeadedMonkey/ComfyUI_MileHighStyler
Restart ComfyUI and the styler nodes show up in the node menu. There's nothing to download beyond that - no models, no requirements.txt, no heavy dependencies. The whole pack is text templates in JSON files, so it loads instantly and adds zero VRAM.
Where people get tripped up
The honest caveat: this is a CLIP-era tool, and it's happiest on the SDXL lineage - Juggernaut, RealVis, Illustrious, Pony, NoobAI. On a 2026 LLM-encoded model (Flux 2, Z-Image, Anima) the machinery quietly stops working. Those models discard (word:2.0) weighting, and their negative prompt does literally nothing at CFG 1, which is where the distilled/Turbo versions run. Feed this node's weighted template into one of those and you've prepended a wall of punctuation the encoder reads as noise. Match the styler to the checkpoint.
The other classic snag is prompt soup. Turn on all eleven dropdowns and you can blow straight past SDXL's 77-token window and drown your own subject. Start with two or three - camera, lighting, maybe environment - check the log_prompt output, and add more only if the image needs it. More dropdowns is not more better.
Inputs (16)
| Name | Type | Default | Description |
|---|---|---|---|
| text_positive_g | STRING | — | |
| text_positive_l | STRING | — | |
| text_negative | STRING | — | |
| camera | COMBO | 127 options: no camera, Canon EOS 90D, Canon EOS M50, Canon EOS M50 Mark II, Canon EOS M6 Mark II, Canon EOS R5, +121 | |
| composition | COMBO | 11 options: No option, Balance, Framing, LeadingLines, NegativeSpace, Pattern, +5 | |
| depth | COMBO | 20 options: No option, Architecture Depth of Field, Close-Up Depth of Field, Creative or Abstract Depth of Field, Deep Depth of Field, Environmental Portraits Depth of Field, +14 | |
| environment | COMBO | 283 options: No option, Beach, Desert, Forest, Indoor, Mountain, +277 | |
| filter | COMBO | 11 options: No option, BlackAndWhite, Contrast, Cool, HDR, Monochrome, +5 | |
| focus | COMBO | 67 options: No option, 10% Focus Area, 100% Focus Area, 20% Focus Area, 30% Focus Area, 40% Focus Area, +61 | |
| lighting | COMBO | 11 options: No option, Ambient, Artificial, Backlit, Diffused, Flash, +5 | |
| mood | COMBO | 11 options: No option, Aggressive, Calm, Chaotic, Energetic, Happy, +5 | |
| subject | COMBO | 11 options: No option, Animal, Art, Building, Child, Female, +5 | |
| theme | COMBO | 11 options: No option, Abstract, Aerial, Fashion, Landscape, Macro, +5 | |
| timeofday | COMBO | 11 options: No option, Afternoon, BlueHour, Evening, GoldenHour, Midday, +5 | |
| negative_prompt_to | COMBO | Both | 3 options: Both, G only, L only |
| log_prompt | BOOLEAN | true | — |
Outputs (6)
| Name | Type | Description |
|---|---|---|
| text_positive_g | STRING | — |
| text_positive_l | STRING | — |
| text_positive | STRING | — |
| text_negative_g | STRING | — |
| text_negative_l | STRING | — |
| text_negative | STRING | — |