Nodes/Zura Nodes/Zura Klein Look Presets
ComfyUI Node

Zura Klein Look Presets

Nine Widgets, One Identity-Safe Relight Prompt

By ZURAVFX·Created 22 days ago·Updated about 16 hours ago· 1
Zura Klein Look Presets
    • edit_prompt
    • edit_enabled
    • background_mode
    ◄enable_editfalse►
    ◄lightingKeep source lighting►
    ◄edge_lightfalse►
    ◄backgroundKeep source background►
    ◄background_colourwarm grey►
    ◄gradient_end_colourcharcoal►
    ◄custom_environment►
    ◄extra_instructions►
    ◄camera_finishKeep source camera►

    Relighting a performer with an instruction-editing model has an unglamorous problem: the prompt that works is about four sentences long, half of it is boilerplate telling the model not to touch the person's face, and you type it from scratch every time. Zura Klein Look Presets turns that into nine widgets and emits the prompt for you.

    It runs no inference. It doesn't load Klein. It's a prompt builder with a tidy UI, and its whole design premise is that the boilerplate is the product.

    The widgets

    enable_edit is the master toggle - off means "use the original frame", and its tooltip tells you to pair it with Zura Optional Image Edit so the edited branch never even runs. Then the interesting ones:

    • lighting - seven presets. Keep source lighting, Soft studio, Cinematic contrast, Warm portrait, Cool editorial, Three-point studio, and Match new environment. Each maps to one sentence; Three-point is the most specific (large soft key 45° to camera, low-power fill opposite, subtle hair light, keep realistic shadows and skin texture).
    • background - six options: Keep source background, Clean white studio, Neutral grey studio, Solid colour, Two-colour gradient, Custom environment. The last one wants text in custom_environment, and if you select it with enable_edit on and leave the box empty it raises rather than guessing.
    • background_colour and gradient_end_colour - free text, not hex codes, despite looking like they should be. "warm grey", "charcoal". They're only read by Solid colour and Two-colour gradient.
    • edge_light - one boolean for a hair-and-shoulder rim light.
    • camera_finish - Keep source camera, Clean studio camera (50 mm studio look) or Editorial portrait camera (85 mm, subtle separation). Both end with an explicit "do not beautify the face", which is the kind of line you only add after seeing the alternative.
    • extra_instructions - your own short addendum. The tooltip's advice is the important part: don't change the person's identity.

    What comes out

    Three outputs. edit_prompt is the string - send it to your CLIPTextEncode for the edit model. edit_enabled mirrors the toggle, and you wire it into ZuraOptionalImageEdit.enable_edit (and into whatever else gates your edit branch). background_mode carries the background choice out as a plain string, which is what the V3/V4 multicam render nodes want on their background_mode input.

    The prompt always opens with the same identity lock - preserve the exact person, face, age, hair, skin tone, clothing, pose, expression, camera perspective and framing; photorealistic; don't add a person, change wardrobe, or make a collage - and every background preset is phrased as "replace only the background", with a natural contact shadow. Someone did the work of learning what these models overreach on.

    How to install

    Ships in the pack:

    cd ComfyUI/custom_nodes
    git clone https://github.com/ZURAVFX/ComfyUI_zura_nodes
    pip install -r ComfyUI_zura_nodes/requirements.txt
    

    Restart. The extras (requests, yt-dlp, ultralytics, face-alignment) aren't needed for this node - it's pure Python string work - but installing them now saves a second restart later. You do need a Klein model (or any instruction editor) and its text encoder separately; the pack ships no weights.

    The trap, which is not this node's fault

    Flux 2 Klein and its peers are LLM-encoded instruction editors: full sentences with explicit ownership beat comma-separated tags, and Comfy prompt weighting syntax is simply disabled on this generation of encoders. So don't go appending (rim light:1.4) to the output - it'll be read as literal punctuation.

    The other trap is structural. Instruction editors re-emit the whole frame, so identity drifts across repeated edits and untouched pixels move. If you're feeding one frame per shot into a video chain, you're doing the low-risk version of this: one edit, then a video model that follows it. Chain three edits and you'll meet the drift everyone complains about.

    CategoryZura/image

    Inputs (9)

    NameTypeDefaultDescription
    enable_editBOOLEANfalseUse with Zura Optional Image Edit to bypass the edited branch when off.
    lightingCOMBOKeep source lighting7 options: Keep source lighting, Soft studio, Cinematic contrast, Warm portrait, Cool editorial, Three-point studio, +1
    edge_lightBOOLEANfalse—
    backgroundCOMBOKeep source background6 options: Keep source background, Clean white studio, Neutral grey studio, Solid colour, Two-colour gradient, Custom environment
    background_colourSTRINGwarm greyUsed only by Solid colour and Two-colour gradient.
    gradient_end_colourSTRINGcharcoalUsed only by Two-colour gradient.
    custom_environmentSTRINGUsed only by Custom environment.
    extra_instructionsSTRINGOptional short edit instructions; do not change the person's identity.
    camera_finishCOMBOKeep source camera3 options: Keep source camera, Clean studio camera, Editorial portrait camera

    Outputs (3)

    NameTypeDescription
    edit_promptSTRING—
    edit_enabledBOOLEAN—
    background_modeSTRING—