๐ญ Scene Seductress
The cinematographer your prompt stack was missing
- scene
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.
Inputs (14)
| Name | Type | Default | Description |
|---|---|---|---|
| framing | COMBO | Random | 12 options: None, Random, portrait, upper body, cowboy shot, feet out of frame, +6 |
| framing_strength | FLOAT | 1.000โ2 | โ |
| angle | COMBO | Random | 12 options: None, Random, Dutch angle, from above, from behind, from below, +6 |
| angle_strength | FLOAT | 1.000โ2 | โ |
| emotion | COMBO | Random | 25 options: None, Random, serene, flirty, dreamy, joyful, +19 |
| emotion_strength | FLOAT | 1.000โ2 | โ |
| time_of_day | COMBO | Random | 10 options: None, Random, dawn, morning, noon, afternoon, +4 |
| time_of_day_strength | FLOAT | 1.000โ2 | โ |
| environment | COMBO | Random | 28 options: None, Random, bedroom, cafe, classroom, forest, +22 |
| environment_strength | FLOAT | 1.000โ2 | โ |
| lighting | COMBO | Random | 12 options: None, Random, soft, harsh, backlit, spotlight, +6 |
| lighting_strength | FLOAT | 1.000โ2 | โ |
| extra | STRING | โ | |
| extra_inputopt | STRING | Optional chained input - will be prepended to extra field with ', ' |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| scene | SCENE_STRING | โ |