π Scene Ambient Activity
Empty backgrounds look dead β this node writes your crowd for you
- ambient_text
Nobody hand-writes the extras. You spend ten minutes crafting your main character's prompt, and then the street behind them is either empty or a mush of semi-formed mannequins the model invented because you gave it zero direction. π Scene Ambient Activity is the node that fixes that: it rolls deterministic, seed-locked descriptions of background figures - the crowd, the cameos, the background life - so you can paste real activity into your prompt instead of hoping the sampler conjures it.
It's part of Ellie Fox AI's scene-generator pack, which is a whole family of procedural text generators that split one story across nodes: the Scene Context Composer stages where and what, the Scene Character Roller decides who the foreground cast is, and this node populates the crowd. Nothing here calls an API, loads a model, or touches your VRAM - it reads from bundled JSON banks and outputs a string. If you've used old A1111-style wildcard syntax, you already get the idea; this is that idea, but curated and versioned instead of scraped.
How it works
The node draws from scene_context/ambient_banks_draft.json, a hand-authored bank of background archetypes organized into nine pools: accurate, wholesome, militant, sexy, absurd, cool, dorky, elegant, and popculture (the last one being the opt-in branded pool - think stormtroopers and the Monopoly Man). Every entry is a template like a tourist family {mugging through photos|with matching fanny packs|checking a paper map}, and the {a|b|c} groups are expanded at draw time by the same seeded RNG the rest of the pack uses. Same seed, same crowd - the contract is explicit about that, and also about not carrying across pack versions.
Two things are worth knowing before you judge it. First, the subject text is always played straight: the satire and chaos operators are applied on top at draw time, never baked into the bank entries, so each pool reads normally until you deliberately add a treatment. Second, the node has its own seed, deliberately separate from the Composer's - the design goal is "keep the cast, reroll the crowd." Rerolling the background shouldn't change your main character.
The inputs that matter
All five are technically required, but the defaults are sane except one trap:
- subject - the pool. Default is
none, which makes the node output an empty string. That's the trap: a fresh node silently does nothing until you pick a pool.randomdraws one pool for the whole crowd (coherent);multiversaldraws a fresh pool per figure, which is where the crossover chaos lives. - genre - filters each pool to entries tagged for that genre; tagless entries are always eligible, and a genre with zero matches falls back to the full pool, so the output is never empty. The π² option rolls one genre per generation so your crowd stays internally consistent.
- count - 1 to 3 background figures to describe.
- seed - your crowd's own seed.
- treatment -
none,satire,chaotic, or a per-figurerandomflip. Pools without a bespoke treatment bank fall back to a generic operator.
Output and wiring
The single output is ambient_text, a plain STRING: multiple figures joined with ; , e.g. "a tourist family mugging through photos with matching fanny packs; a man with a selfie stick turning in circles". Wire it into a text-concatenate node ahead of your CLIP Text Encode, alongside the Composer's context and the Roller's character text, and you get one assembled prompt where the background actually matches the genre you asked for.
Installing it
Through ComfyUI Manager (search the pack title "comfyui-scene-generator"), or the old-fashioned way:
cd ComfyUI/custom_nodes/
git clone https://github.com/elliefox-ai/comfyui-scene-generator.git ComfyUI-EllieFoxAI-scene-gen
Then restart ComfyUI and look for the π node under the SceneGen category. That's the whole install: no pip dependencies beyond what ComfyUI ships, no model downloads. The data lives in the repo, so don't delete the scene_context/ folder - a missing or corrupted bank file is a hard error, because the banks are the node.
Gotchas
The default-none empty-string output is the thing that'll confuse you first - nothing coming out? Check subject. Second, the seed contract is v2-only: updating the pack can change your exact crowd even at the same seed, so pin the version if reproducibility across a long batch matters. And one honest note: this is a niche, opinionated pack with essentially zero community footprint yet - no reddit threads, no tutorials. The docs and design notes in the repo are the real documentation. It's genuinely clever and well-built, but you'll be learning it solo for now.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| subject | COMBO | none | Background cameo pool. random = one pool for the whole crowd (coherent); multiversal = each figure draws its own pool (crossover). |
| treatment | COMBO | none | Operator applied ON TOP of subjects at draw time β subjects are played straight; the twist is never baked in. Militant satire is the blended cell (humiliation + tender inversion). |
| count | INT | 11β3 | How many background figures to describe. |
| seed | INT | 00β4294967295 | Own seed β keep the cast, reroll the crowd. Same seed, same crowd. |
| genre | COMBO | any | Filter the crowd pool to entries tagged for this genre β tagless entries always eligible; never empty. any = no filter. π² random rolls one genre per generation β one coherent crowd. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| ambient_text | STRING | β |