πΈ Photo Style Helper
Photography Terms Without the Photography Degree
- positive_additions
- negative_additions
- preset_patch_json
- guidance_json
The outfit nodes handle what your subject wears. Photo Style Helper (class PhotoStyleHelperNode, in π Outfit/Helpers) handles how the picture looks - and it's the node that keeps people who don't know a Rembrandt from a ring light from writing "nice lighting" and calling it a prompt. If you've ever stared at a prompt template that asks for lighting, lens, and depth of field and guessed, this node guesses for you, properly.
What it does
You pick a handful of photographic intentions from dropdowns - photo_genre (fashion, glamour, passport, street...), render_medium (photorealistic, or 2D anime / manga / cartoon / pixel art if you're off the photo path), lighting (softbox, golden hour, neon, Rembrandt...), lens (35/50/85/105mm), camera_framing (headshot to full-body), dof, composition, palette, and an outfit_vibe (modern, goth, pinup, techwear...). Then it emits four outputs you actually use:
- positive_additions - a comma-separated prompt fragment to append to your positive prompt (e.g.
fashion photography, waist-up composition, softbox lighting, 85mm lens, shallow depth of field, studio quality). - negative_additions - a matching negative fragment, and this is where it earns its keep. Passport mode adds
tilted head, dramatic lighting, strong shadows, open mouth teeth; selfie/street addsmotion blur; and any 2D medium automatically blocksphotorealistic skin, skin pores, realistic skin texture, uncanny valley. That's the kind of detail people normally learn the hard way. - preset_patch_json - a JSON patch meant for the outfit node, steering mood/time/background to match the genre. Fashion/editorial/runway pulls in dramatic studio vibes; portrait defaults to
intimatemood at golden hour; passport goes flat and neutral. - guidance_json - metadata plus sampler hints:
quality_presetmaps to steps/CFG/denoise/resolution (fast 20/4.5, balanced 30/5.5, high 40/6.5).
How to wire it
This node doesn't produce a final prompt on its own - it feeds the chain:
Photo Style Helper ββpreset_patch_jsonββ> Preset Patch Applier ββmerged_jsonββ> Male/Female Outfit Inputs From JSON ββ> Outfit Node
positive_additions ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ> (append to your positive prompt)
negative_additions ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ> (append to your negative prompt)
Two honest caveats from reading the source. First, the patch sometimes sets values the outfit node's dropdowns don't officially contain (like time_of_day: studio) - the comment in the code calls this "harmless as a selector," and it mostly is, because the prompt builder just prints whatever string it's handed. Don't panic when you see an "unknown keys" warning in the console; check the output first. Second, the sampler hints are suggestions for you, not connections - the node doesn't touch your KSampler, it just tells you what the author would use. aspect_ratio also ends up folded into custom_attributes as a hint, not enforced anywhere, so set your actual canvas yourself.
Install and gotchas
Pack-standard install: ComfyUI Manager (search "ComfyUI Outfit Selection") or git clone https://github.com/manifestations/comfyui-outfit.git into custom_nodes/, restart. No models, no Ollama - all choices come from data/styles/photo_helper_options.json, which is a plain file you can edit to add vibes or lighting styles without touching Python. That's the node's quiet superpower: the whole thing is data-driven.
Where people get burned: expecting the negative additions to cover everything (they're heuristics, not a comprehensive negative), and forgetting that positive_additions is a fragment - if you append it to an already-sentenced Flux-style prompt you get a comma salad. On Flux, feed it as context, not as more tags.
Inputs (24)
| Name | Type | Default | Description |
|---|---|---|---|
| gender | COMBO | female | Target gender for outfit parts |
| age_group | COMBO | random | Age bracket of the subject |
| body_type | COMBO | random | Body type shaping outfit fit |
| outfit_vibe | COMBO | modern | Overall style vibe |
| photo_genre | COMBO | portrait | Photography genre template |
| render_medium | COMBO | photorealistic | Switch to 2D anime/cartoon/etc. |
| toon_shading | COMBO | auto | 2D shading style |
| outline_style | COMBO | auto | Lineart / outline emphasis |
| face_proportions | COMBO | natural | Face stylization level |
| frame_type | COMBO | photo | Output framing type |
| character_template | COMBO | none | Character sheet / turnaround presets |
| camera_framing | COMBO | waist-up | How much of the subject is visible |
| lighting | COMBO | softbox | Lighting setup |
| lens | COMBO | 85mm | Focal length |
| dof | COMBO | shallow | Depth of field |
| aspect_ratio | COMBO | 3:2 | Canvas aspect ratio (hint) |
| palette | COMBO | auto | Color palette intent |
| composition | COMBO | rule of thirds | Composition rule |
| quality | COMBO | studio quality | Rendering quality keyword |
| description_style | COMBO | random | Model style profile |
| creative_scale | COMBO | balanced | Creative/detail emphasis |
| studio_backdrop | COMBO | White seamless paper | 5 options: White seamless paper, Grey seamless paper, Fashion runway, Color gradient backdrop, Plain wall |
| toon_palette | COMBO | vibrant | 5 options: vibrant, pastel, neon, muted, monochrome |
| quality_preset | COMBO | balanced | Sampler hints for downstream nodes |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| positive_additions | STRING | β |
| negative_additions | STRING | β |
| preset_patch_json | STRING | β |
| guidance_json | STRING | β |