Nodes/ComfyUI_MileHighStyler/Perfection Styler (Advanced)
ComfyUI Node

Perfection Styler (Advanced)

The kitchen-sink photo styler for SDXL

By TripleHeadedMonkey·Created 3 years ago·Updated about a year ago· 66
Perfection Styler (Advanced)
    • text_positive_g
    • text_positive_l
    • text_positive
    • text_negative_g
    • text_negative_l
    • text_negative
    text_positive_g
    text_positive_l
    text_negative
    camera
    composition
    depth
    environment
    filter
    focus
    lighting
    mood
    subject
    theme
    timeofday
    negative_prompt_toBoth
    log_prompttrue

    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_negative plus negative_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.

    Categoryali1234/stylers

    Inputs (16)

    NameTypeDefaultDescription
    text_positive_gSTRING
    text_positive_lSTRING
    text_negativeSTRING
    cameraCOMBO127 options: no camera, Canon EOS 90D, Canon EOS M50, Canon EOS M50 Mark II, Canon EOS M6 Mark II, Canon EOS R5, +121
    compositionCOMBO11 options: No option, Balance, Framing, LeadingLines, NegativeSpace, Pattern, +5
    depthCOMBO20 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
    environmentCOMBO283 options: No option, Beach, Desert, Forest, Indoor, Mountain, +277
    filterCOMBO11 options: No option, BlackAndWhite, Contrast, Cool, HDR, Monochrome, +5
    focusCOMBO67 options: No option, 10% Focus Area, 100% Focus Area, 20% Focus Area, 30% Focus Area, 40% Focus Area, +61
    lightingCOMBO11 options: No option, Ambient, Artificial, Backlit, Diffused, Flash, +5
    moodCOMBO11 options: No option, Aggressive, Calm, Chaotic, Energetic, Happy, +5
    subjectCOMBO11 options: No option, Animal, Art, Building, Child, Female, +5
    themeCOMBO11 options: No option, Abstract, Aerial, Fashion, Landscape, Macro, +5
    timeofdayCOMBO11 options: No option, Afternoon, BlueHour, Evening, GoldenHour, Midday, +5
    negative_prompt_toCOMBOBoth3 options: Both, G only, L only
    log_promptBOOLEANtrue

    Outputs (6)

    NameTypeDescription
    text_positive_gSTRING
    text_positive_lSTRING
    text_positiveSTRING
    text_negative_gSTRING
    text_negative_lSTRING
    text_negativeSTRING