πΌ Scene Context Composer
A scene in one roll of the dice β no LLM, no API, no models to download
- context_text
- render_prompt
- components_json
- seed_used
The name is a little lie in your favor: πΌ Scene Context Composer doesn't call an API, doesn't spawn a local LLM, and doesn't need a key. It rolls a scene. Give it a genre, a tone, and a seed, and it procedurally assembles a full context - subject, situation, tone modifier, atmosphere, and a framing phrase - from JSON data files that ship in the pack. If you've been eyeing the LLM prompt-enhancer trend and thought "I just want something coherent without babysitting a model," this is the no-dependencies end of that spectrum.
It's the v2 of this pack's context system, and it shows. Where the Picker (its sibling, same pack) is the simple upstream companion, the Composer is the standalone writer. The README is explicit that it's renderer-agnostic by construction - the text it emits feeds any text-conditioned model, which matters because the pack's other headline node targets Ideogram 4's structured-prompt format specifically.
How it works
The data lives in scene_context/ - shared with the Picker, single source of truth - and the whole thing is deterministic template sampling from that JSON. The mechanics, grounded in the source:
- Genre flavors the pool. Your
genrenarrows which settings are even eligible. Addgenre2for a union mashup - settings matching either are in play, so "sci_fi" + "fantasy" rolls venues from both worlds. - Setting is two-tier. Pick an archetype like "on a nautical vessel" and it filters venues by facet tags, then rolls within that pool. Pick a specific venue name like
pirate_shipand it pins that outright - the author's escape hatch, deliberately unconstrained (a fantasy cruise ship is a legitimate ask). - The double filter is the interesting bit. Tone is a selection axis, not seasoning: each tone declares which situation capability tags it's compatible with (
violent_capable,calm_capable, β¦), and Setting and Tone jointly narrow the situation pool. A tone that matches nothing just falls back to the full list - flavor yields to structure. - Composition is a first-class axis. Framing phrases key off the situation's
scene_type_bias-face_off,gathering,atmospheric, and friends - with a generic fallback pool so unknown biases still get something reasonable.
The inputs and outputs that matter
You actually set: genre, genre2 (leave at none until you want a mashup), tone (π² random, violent, charming, satirical, eerie, mundane), setting (archetype or specific venue, or π² to roll by genre), composition (π² random follows the situation's bias; none emits no framing), and seed. That's it - everything else is handled.
Outputs are where the value hides:
context_text- the prose: subject, situation, tone modifier, atmosphere flourish.render_prompt-context_textplus the composition phrase. This is the model-ready one.components_json- every piece separately, for remixing or logging.seed_used- the actual seed, so you can wire it into a sampler and reproduce the roll.
Install
Same as any custom node, and this one is refreshingly light:
cd ComfyUI/custom_nodes/
git clone https://github.com/elliefox-ai/comfyui-scene-generator.git ComfyUI-EllieFoxAI-scene-gen
Then restart ComfyUI and look under SceneGen in the node menu. Or just search "comfyui-scene-generator" in ComfyUI Manager. There is no requirements.txt and no model download - the README's "no additional Python dependencies beyond what ComfyUI already provides" is actually true, which is rare enough to say out loud.
Where people get burned
This pack has almost no community footprint yet (a corpus search for "scene generator" in r/comfyui turns up single digits), so you're early - expect to debug by reading. Two grounded gotchas: the text it writes is natural-language prose for LLM-encoded models, so if you feed it to a tag-trained checkpoint like Illustrious or Pony, don't expect it to sing. And if a workflow you downloaded asks for Outpaint Controller or PromptPeek, those moved to sibling packs (comfyui-elliefoxai-canvas, comfyui-elliefoxai-diagnostics) - this repo only carries the four SceneGen nodes. For reproducibility, run seed_used into your sampler seed rather than letting it roll free; the whole point of the deterministic design is that one seed drives the story.
Inputs (16)
| Name | Type | Default | Description |
|---|---|---|---|
| genre | COMBO | π² random | 8 options: π² random, historical, modern, sci_fi, fantasy, western, +2 |
| genre2 | COMBO | none | Optional second genre. Union with genre β settings matching EITHER are eligible (mashup). |
| tone | COMBO | π² random | 11 options: π² random, violent, charming, satirical, eerie, mundane, +5 |
| setting | COMBO | π² random | Two tiers: an archetype ('on a nautical vessel') filters venues by facet tags, random within the pool; a specific venue name pins it outright. π² rolls venues by Genre. |
| composition | COMBO | π² random | Framing axis. random: follow the situation's scene_type_bias. none: emit no framing phrase. |
| seed | INT | 420β4294967295 | β |
| pose | BOOLEAN | false | Append a posture phrase to each staged character (static stance register). The Scene Character Roller has the same toggle β if both fire, doubled cues are yours. |
| positioning | BOOLEAN | false | Stage the cast with placement templates β lateral/relational phrases per cast size ('on the near side of the frame, β¦'). Off (default) = no placement language; the renderer arranges. |
| expression | BOOLEAN | false | Append a facial-expression phrase to each staged character ('brow knotted, lips a thin line'). Pairs with pose; if both fire, the cues compound. |
| include_setting | BOOLEAN | true | Emit the venue phrase ('In an arcane library') that opens the scene line. Off = no location language; the renderer places the scene. The venue still rolls β tone and composition still draw from it β only the text is gated. |
| include_context | BOOLEAN | true | Emit the situation clause (what the group is doing). Off = place and mood only. The situation still rolls β tone compatibility and composition bias still key off it; only the text is gated. |
| character_1opt | STRING | Wire a character description. Default staging adds no placement β enable the positioning toggle for template staging. Soft cap: 4. | |
| character_2opt | STRING | Additional character. Leave unwired to drop. | |
| character_3opt | STRING | Additional character. Leave unwired to drop. | |
| character_4opt | STRING | Additional character. Leave unwired to drop. | |
| ambientopt | STRING | Wire the Scene Ambient Activity output β background figures and activity, slotted into the scene line. Leave unwired for none. |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| context_text | STRING | β |
| render_prompt | STRING | β |
| components_json | STRING | β |
| seed_used | INT | β |