Scene Entity - Fantasy
Build One Creature, Then Reuse It Forever
- entity_text
- entity
First thing to know, and it saves you a node: you don't need this to generate fantasy scenes. The Scene Weaver - Fantasy node is complete on its own, and its slot 1 already carries a full creature's worth of detail. Scene Entity exists for the two things the Weaver can't do - describing a second subject just as richly, and building one creature you carry across many scenes instead of re-rolling it.
It describes exactly one thing: silhouette, material, colours, markings, close-range wear, appendages and how many, emitters and how many and what colour they glow, armament, sensors, apertures. Then it hands that to a scene.
The outputs, and why there are two
entity_text- the entity as it will read inside a scene, as prose. Wire it to a Show Text node to read it. It is not a full prompt: no setting, no action.entity- aSCENE_ENTITYpayload for one of the Scene Weaver's optionalentity_1_in…entity_4_insockets.
Nothing else. The entity deliberately carries no environment, no situation and no relations, because the scene owns all three. That's the design, not a gap: an entity that brought its own "standing in a castle courtyard" would fight whichever scene you wired it into.
The socket is the same type across every genre. A fantasy entity wires into a Fantasy, Sci-Fi or Horror Scene Weaver; a sci-fi entity wires into a fantasy scene. A crashed starship in an enchanted forest is a supported feature. It's a dedicated socket type rather than a string, too, which stops you plugging an entity into a text box and wondering why nothing changed.
How it works
Every field is Random / a value / None, same as the Weaver's. kind governs the rest - it scopes the options and the labels of every field beneath it, across dragon, mythic beast, giant-kin, small folk, hybrid folk, folk, spirit or elemental, undead, construct, structure, vessel and artifact. That's why you can't get a unicorn hauling cargo, or a gatehouse arch on a pixie.
Wire it into a scene and four rules apply:
- A field you locked is a choice. It beats that slot's own widgets and beats a coherence rule, and the rule's reasoning is reported in
prompt_json._meta, so nothing is overruled silently. - A field left on
Randomis a draw. The scene first picks a place that can hold the whole wired subject, and only re-draws a drawn field when no place can - naming what it re-drew on the node face. - Situation and relations never come from the entity. What the thing is doing stays the scene's call.
- A wired slot gets the scene's top detail allowance - the same budget slot 1 gets - but it's a promotion, not an exemption. How much a slot speaks is capped by what kind of thing it is: a creature or a person carries its whole component list, a tower or a galleon only its silhouette. A structure with every widget locked can still read short.
One more detail: this node has no Peaceful/Conflict filter, correctly, because the filter is a property of the scene the entity lands in. And the readout shows exactly what the entity will contribute to a one-entity scene, so it doubles as a preview.
Why bother
The reuse case is the real one. A diffusion model has no internal concept of a character - no this creature in the weights, only statistical patterns - so the only thing carrying your frost troll between scenes is the words describing it. Lock the fields that made it work, keep the seed, and it comes back. That's consistency without training a LoRA.
Install
ComfyUI Manager: search SceneWeaver. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/EnragedAntelope/comfyui-sceneweaver
Keep the folder named comfyui-sceneweaver and restart. No dependencies - standard-library Python, no requirements.txt, nothing to compile - but it needs ComfyUI 0.25.0+ (it's built on the newer comfy_api.latest node API) and Python 3.10+. Both nodes appear under conditioning/sceneweaver.
Your own creature types and materials go in a user_options.json beside the pack - gitignored, so it survives a git pull - with fantasy values in a "fantasy" section.
python scripts/builtin_options.py subkind --kind dragon --pack fantasy
Where it goes wrong
You wired an entity and the scene ignored that slot's widgets. That's the feature: the wire replaces the slot's descriptive widgets. Situation and relations still come from the scene node.
Your locks looked "overruled." They weren't - a lock beats a rule. What you're seeing is a drawn field being re-drawn to fit; prompt_json._meta names the rule and the reason.
A detailed monster came out short. Kind-based cap: people and creatures speak their whole component list, buildings and ships don't.
user_options.json additions did nothing. Fields like form, material and markings are overridden by every kind, so a _default pool for them is never read - add them under a kind name. The console tells you when you've got it backwards.
Old ComfyUI. Below 0.25.0 you get an import error on comfy_api.latest instead of a node.
Inputs (22)
| Name | Type | Default | Description |
|---|---|---|---|
| seed | INT | 00–18446744073709550000 | Seed for reproducible scenes. The control below defaults to 'randomize' so every run differs; set it to 'fixed' to reproduce a scene. |
| kind | COMBO | Random | What this entity fundamentally is. Scopes every other field on this slot -- its options and its labels. Set to None to leave the slot empty. Identity | Random=randomize, value=lock, None=omit |
| subkind | COMBO | Random | The specific type within the kind -- a unicorn, a frost troll, a galleon. Identity | Random=randomize, value=lock, None=omit |
| scale | COMBO | Random | How big it is relative to a person. Identity | Random=randomize, value=lock, None=omit |
| condition | COMBO | Random | Age and state -- ancient, battle-scarred, slumbering, petrified. Identity | Random=randomize, value=lock, None=omit |
| form | COMBO | Random | The silhouette: a body plan, a build, a hull or a tower's shape. The field that makes two dragons actually look different. Form & Material | Random=randomize, value=lock, None=omit |
| material | COMBO | Random | What it is covered in, made of, or wearing. Form & Material | Random=randomize, value=lock, None=omit |
| primary_color | COMBO | Random | The colour of the thing itself -- scales, coat, robes, stone. Describes the subject, never the lighting. Surface & Colour | Random=randomize, value=lock, None=omit |
| accent_color | COMBO | Random | A secondary colour: trim, banding, the underside of a wing. Surface & Colour | Random=randomize, value=lock, None=omit |
| markings | COMBO | Random | Heraldry, war paint, patterning. Carries no readable lettering. Surface & Colour | Random=randomize, value=lock, None=omit |
| surface_detail | COMBO | Random | Finish and wear at close range -- scars, moss, weathering, stitching of hide. Surface & Colour | Random=randomize, value=lock, None=omit |
| appendages | COMBO | Random | What sticks out: horns, wings, tails, tusks, towers and masts. Components | Random=randomize, value=lock, None=omit |
| appendage_count | COMBO | Random | How many. Composed into the appendage phrase. Components | Random=randomize, value=lock, None=omit |
| emitters | COMBO | Random | What shines with its own light: enchanted gems, rune tracery, ember eyes, a spell held in the hand. Components | Random=randomize, value=lock, None=omit |
| emitter_count | COMBO | Random | How many. Components | Random=randomize, value=lock, None=omit |
| emitter_color | COMBO | Random | The colour of the magic itself. Belongs to the subject, not the lighting. Components | Random=randomize, value=lock, None=omit |
| armament | COMBO | Random | Weapons, carried or grown: a longsword, a war maul, horns and talons. Components | Random=randomize, value=lock, None=omit |
| armament_count | COMBO | Random | How many weapons. Components | Random=randomize, value=lock, None=omit |
| sensors | COMBO | Random | How it sees: eyes, many eyes, a lantern-bearing gaze. Components | Random=randomize, value=lock, None=omit |
| sensor_count | COMBO | Random | How many. A cyclops and a many-eyed horror are different things. Components | Random=randomize, value=lock, None=omit |
| aperture | COMBO | Random | The opening: a fanged maw, a visor, a gatehouse arch. Components | Random=randomize, value=lock, None=omit |
| extras | COMBO | Random | One more distinguishing thing -- a saddle, a satchel, a hanging banner. Components | Random=randomize, value=lock, None=omit |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| entity_text | STRING | — |
| entity | SCENE_ENTITY | — |