Nodes/Violet Tools ๐Ÿ’…/๐ŸŽญ Scene Seductress
ComfyUI Node

๐ŸŽญ Scene Seductress

The cinematographer your prompt stack was missing

By leylahvioletยทCreated 12 months agoยทUpdated 10 months agoยท 14
๐ŸŽญ Scene Seductress
    • scene
    โ—„framingRandomโ–บ
    โ—„framing_strength1.00โ–บ
    โ—„angleRandomโ–บ
    โ—„angle_strength1.00โ–บ
    โ—„emotionRandomโ–บ
    โ—„emotion_strength1.00โ–บ
    โ—„time_of_dayRandomโ–บ
    โ—„time_of_day_strength1.00โ–บ
    โ—„environmentRandomโ–บ
    โ—„environment_strength1.00โ–บ
    โ—„lightingRandomโ–บ
    โ—„lighting_strength1.00โ–บ
    โ—„extraโ–บ
    โ—„extra_inputโ€”โ–บ

    Scene Seductress is the pack's cinematographer. While Quality Queen handles "how good is this image" and Aesthetic Alchemist handles "what's the vibe," this node decides where the camera is, when it is, and what's in the room. Full body or cowboy shot, straight-on or Dutch angle, golden hour or neon-lit, bedroom or misty mountains - it's six categories of scene direction with individual strength sliders.

    You reach for it when you're tired of writing "full body, golden hour, in a forest, soft lighting" by hand and want those decisions exposed as dropdowns you can randomize. It's the middle link in the pack's reference workflow (Quality Queen โ†’ Scene Seductress โ†’ Aesthetic Alchemist), and it's the one that most changes the composition of the output rather than its texture.

    How it works

    The node reads six feature lists from feature_lists/scene_seductress.yaml - framing, angle, emotion, time of day, environment, and lighting - each a set of curated phrases. On each run it picks one item per category (Random means a fresh roll every execution) and concatenates them into your scene string, joined with commas and passed through the pack's deduplicator.

    The strength sliders (0.0โ€“2.0) are where the mechanism gets interesting: when a category's strength is exactly 1.0 the phrase is emitted bare, but any other value wraps it in the SD weight syntax, so (candlelit:1.4) or (full body:0.7). That's a genuine "how it actually works" detail worth knowing - see the caveat below about which models respect it.

    The fields that matter

    Six category + strength pairs, all defaulting to Random/1.0. For a beginner the three to actually set:

    • framing - portrait, upper body, cowboy shot, full body, wide shot, etc. The most visually impactful choice; start here.
    • environment - the location: bedroom, cafe, forest, beach, bathhouse, misty mountains, 28 options.
    • lighting - soft, harsh, backlit, candlelit, neon, strobe, and friends.

    Each has a matching *_strength slider. emotion, time_of_day, and angle round out the set. extra accepts free text with {a|b|c} wildcards, and extra_input chains another node's output in front of it.

    The output, scene (a SCENE_STRING), plugs into the scene input on ๐Ÿงฌ Encoding Enchantress - the pack's conditioning hub.

    The caveat about strengths

    The (phrase:weight) syntax is a SDXL-lineage thing. On the anime SDXL models it works as intended - push lighting_strength to 1.4 and candlelit actually gets louder. On Flux-class and other LLM-encoded models, attention weights are silently discarded, so a strength of 1.3 and 0.6 will produce the same image. If you're on a modern model, your strength sliders are effectively decoration; set them to 1.0 and move on.

    Installing it

    Part of ComfyUI-Violet-Tools - install once and you get every node in the pack. Via ComfyUI Manager (search Violet Tools) or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/leylahviolet/ComfyUI-Violet-Tools.git
    

    Restart ComfyUI, and it appears under Violet Tools ๐Ÿ’… โ†’ Prompt. No models to download; dependencies are just PyYAML, rapidfuzz, and requests.

    Where people get tripped up

    Because every category defaults to Random, a "fixed" workflow isn't fixed - each queue run re-rolls framing, angle, environment, everything. That's the node working as designed for exploration, but it'll drive you crazy mid-batch. Pin the categories you care about and leave Random only for the one you actually want to vary. And if you're on an LLM-encoded model, remember the strength sliders are mostly theater.

    CategoryViolet Tools ๐Ÿ’…/Prompt

    Inputs (14)

    NameTypeDefaultDescription
    framingCOMBORandom12 options: None, Random, portrait, upper body, cowboy shot, feet out of frame, +6
    framing_strengthFLOAT1.000โ€“2โ€”
    angleCOMBORandom12 options: None, Random, Dutch angle, from above, from behind, from below, +6
    angle_strengthFLOAT1.000โ€“2โ€”
    emotionCOMBORandom25 options: None, Random, serene, flirty, dreamy, joyful, +19
    emotion_strengthFLOAT1.000โ€“2โ€”
    time_of_dayCOMBORandom10 options: None, Random, dawn, morning, noon, afternoon, +4
    time_of_day_strengthFLOAT1.000โ€“2โ€”
    environmentCOMBORandom28 options: None, Random, bedroom, cafe, classroom, forest, +22
    environment_strengthFLOAT1.000โ€“2โ€”
    lightingCOMBORandom12 options: None, Random, soft, harsh, backlit, spotlight, +6
    lighting_strengthFLOAT1.000โ€“2โ€”
    extraSTRINGโ€”
    extra_inputoptSTRINGOptional chained input - will be prepended to extra field with ', '

    Outputs (1)

    NameTypeDescription
    sceneSCENE_STRINGโ€”