ComfyUI Node
Scene Weaver - Fantasy
Randomize a whole Fantasy scene in one click: an environment, up to 4 entities and the relationships between them, as natural-language prose plus structured JSON. Set 'Entities' to reveal and fill more subject slots. Every field can be locked to a value or set to None. Wire prompt_text into a Show Text node to read the prompt.
Scene Weaver - Fantasy
- entity_1_in
- entity_2_in
- entity_3_in
- entity_4_in
- prompt_text
- prompt_json
◄seed0►
◄entity_count1►
◄scene_filterAny►
◄set_all_fieldsOff►
◄environmentRandom►
◄entity1_kindRandom►
◄entity1_subkindRandom►
◄entity1_scaleRandom►
◄entity1_conditionRandom►
◄entity1_formRandom►
◄entity1_materialRandom►
◄entity1_primary_colorRandom►
◄entity1_accent_colorRandom►
◄entity1_markingsRandom►
◄entity1_surface_detailRandom►
◄entity1_appendagesRandom►
◄entity1_appendage_countRandom►
◄entity1_emittersRandom►
◄entity1_emitter_countRandom►
◄entity1_emitter_colorRandom►
◄entity1_armamentRandom►
◄entity1_armament_countRandom►
◄entity1_sensorsRandom►
◄entity1_sensor_countRandom►
◄entity1_apertureRandom►
◄entity1_extrasRandom►
◄entity1_situationRandom►
◄entity2_kindRandom►
◄entity2_subkindRandom►
◄entity2_scaleRandom►
◄entity2_conditionRandom►
◄entity2_situationRandom►
◄entity3_kindRandom►
◄entity3_subkindRandom►
◄entity3_scaleRandom►
◄entity3_conditionRandom►
◄entity3_situationRandom►
◄entity4_kindRandom►
◄entity4_subkindRandom►
◄entity4_scaleRandom►
◄entity4_conditionRandom►
◄entity4_situationRandom►
◄relation_1_2None►
◄relation_1_3None►
◄relation_1_4None►
◄relation_2_3None►
◄relation_2_4None►
◄relation_3_4None►
◄relation_1_2_positionNone►
◄relation_1_3_positionNone►
◄relation_1_4_positionNone►
◄relation_2_3_positionNone►
◄relation_2_4_positionNone►
◄relation_3_4_positionNone►
◄contextRandom►
Categoryconditioning/sceneweaver
Inputs (59)
| 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. |
| entity_count | COMBO | 1 | How many subjects the scene has. Slot 1 is described most fully and later slots a little less, because an image has one subject's worth of attention to share out however many things are in it. Raising this reveals that slot's widgets on the node; every slot it reveals is described, never just named. Two is the sweet spot -- three and four work, and read as a crowd. A Scene Entity wired into a slot occupies it whatever this says. How much a slot actually speaks is also capped by what kind of thing it is: a creature or a person carries its whole component list, a station or a wreck only its silhouette, so a slot full of locked widgets can still read shorter than you expect. |
| scene_filter | COMBO | Any | Restrict what random draws may pick. 'Peaceful' leaves weapons and hostile actions out of the description entirely; 'Conflict' favours them. A value you lock yourself is always kept. |
| set_all_fields | COMBO | Off | Bulk-edit every descriptive widget below. 'Randomize all' turns each one that says 'None' into 'Random'; 'Clear all' does the reverse. A field you locked to a value is never touched, and the control snaps back to 'Off' as soon as it has run, so it stays a one-shot action rather than a mode. |
| environment | COMBO | Random | Where the scene is: wild lands, the water, the sky, underground, a town, a hall, or a realm beyond the world. Scene | Random=randomize, value=lock, None=omit |
| entity1_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 |
| entity1_subkind | COMBO | Random | The specific type within the kind -- a unicorn, a frost troll, a galleon. Identity | Random=randomize, value=lock, None=omit |
| entity1_scale | COMBO | Random | How big it is relative to a person. Identity | Random=randomize, value=lock, None=omit |
| entity1_condition | COMBO | Random | Age and state -- ancient, battle-scarred, slumbering, petrified. Identity | Random=randomize, value=lock, None=omit |
| entity1_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 |
| entity1_material | COMBO | Random | What it is covered in, made of, or wearing. Form & Material | Random=randomize, value=lock, None=omit |
| entity1_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 |
| entity1_accent_color | COMBO | Random | A secondary colour: trim, banding, the underside of a wing. Surface & Colour | Random=randomize, value=lock, None=omit |
| entity1_markings | COMBO | Random | Heraldry, war paint, patterning. Carries no readable lettering. Surface & Colour | Random=randomize, value=lock, None=omit |
| entity1_surface_detail | COMBO | Random | Finish and wear at close range -- scars, moss, weathering, stitching of hide. Surface & Colour | Random=randomize, value=lock, None=omit |
| entity1_appendages | COMBO | Random | What sticks out: horns, wings, tails, tusks, towers and masts. Components | Random=randomize, value=lock, None=omit |
| entity1_appendage_count | COMBO | Random | How many. Composed into the appendage phrase. Components | Random=randomize, value=lock, None=omit |
| entity1_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 |
| entity1_emitter_count | COMBO | Random | How many. Components | Random=randomize, value=lock, None=omit |
| entity1_emitter_color | COMBO | Random | The colour of the magic itself. Belongs to the subject, not the lighting. Components | Random=randomize, value=lock, None=omit |
| entity1_armament | COMBO | Random | Weapons, carried or grown: a longsword, a war maul, horns and talons. Components | Random=randomize, value=lock, None=omit |
| entity1_armament_count | COMBO | Random | How many weapons. Components | Random=randomize, value=lock, None=omit |
| entity1_sensors | COMBO | Random | How it sees: eyes, many eyes, a lantern-bearing gaze. Components | Random=randomize, value=lock, None=omit |
| entity1_sensor_count | COMBO | Random | How many. A cyclops and a many-eyed horror are different things. Components | Random=randomize, value=lock, None=omit |
| entity1_aperture | COMBO | Random | The opening: a fanged maw, a visor, a gatehouse arch. Components | Random=randomize, value=lock, None=omit |
| entity1_extras | COMBO | Random | One more distinguishing thing -- a saddle, a satchel, a hanging banner. Components | Random=randomize, value=lock, None=omit |
| entity1_situation | COMBO | Random | What this entity is doing -- an event in progress, not a pose. Scene | Random=randomize, value=lock, None=omit |
| entity2_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 |
| entity2_subkind | COMBO | Random | The specific type within the kind -- a unicorn, a frost troll, a galleon. Identity | Random=randomize, value=lock, None=omit |
| entity2_scale | COMBO | Random | How big it is relative to a person. Identity | Random=randomize, value=lock, None=omit |
| entity2_condition | COMBO | Random | Age and state -- ancient, battle-scarred, slumbering, petrified. Identity | Random=randomize, value=lock, None=omit |
| entity2_situation | COMBO | Random | What this entity is doing -- an event in progress, not a pose. Scene | Random=randomize, value=lock, None=omit |
| entity3_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 |
| entity3_subkind | COMBO | Random | The specific type within the kind -- a unicorn, a frost troll, a galleon. Identity | Random=randomize, value=lock, None=omit |
| entity3_scale | COMBO | Random | How big it is relative to a person. Identity | Random=randomize, value=lock, None=omit |
| entity3_condition | COMBO | Random | Age and state -- ancient, battle-scarred, slumbering, petrified. Identity | Random=randomize, value=lock, None=omit |
| entity3_situation | COMBO | Random | What this entity is doing -- an event in progress, not a pose. Scene | Random=randomize, value=lock, None=omit |
| entity4_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 |
| entity4_subkind | COMBO | Random | The specific type within the kind -- a unicorn, a frost troll, a galleon. Identity | Random=randomize, value=lock, None=omit |
| entity4_scale | COMBO | Random | How big it is relative to a person. Identity | Random=randomize, value=lock, None=omit |
| entity4_condition | COMBO | Random | Age and state -- ancient, battle-scarred, slumbering, petrified. Identity | Random=randomize, value=lock, None=omit |
| entity4_situation | COMBO | Random | What this entity is doing -- an event in progress, not a pose. Scene | Random=randomize, value=lock, None=omit |
| relation_1_2 | COMBO | None | How two slots relate. Rendered only when both entities exist. Opt-in. Relations | Random=randomize, value=lock, None=omit |
| relation_1_3 | COMBO | None | How two slots relate. Rendered only when both entities exist. Opt-in. Relations | Random=randomize, value=lock, None=omit |
| relation_1_4 | COMBO | None | How two slots relate. Rendered only when both entities exist. Opt-in. Relations | Random=randomize, value=lock, None=omit |
| relation_2_3 | COMBO | None | How two slots relate. Rendered only when both entities exist. Opt-in. Relations | Random=randomize, value=lock, None=omit |
| relation_2_4 | COMBO | None | How two slots relate. Rendered only when both entities exist. Opt-in. Relations | Random=randomize, value=lock, None=omit |
| relation_3_4 | COMBO | None | How two slots relate. Rendered only when both entities exist. Opt-in. Relations | Random=randomize, value=lock, None=omit |
| relation_1_2_position | COMBO | None | Where the first entity sits relative to the second. Relations | Random=randomize, value=lock, None=omit |
| relation_1_3_position | COMBO | None | Where the first entity sits relative to the second. Relations | Random=randomize, value=lock, None=omit |
| relation_1_4_position | COMBO | None | Where the first entity sits relative to the second. Relations | Random=randomize, value=lock, None=omit |
| relation_2_3_position | COMBO | None | Where the first entity sits relative to the second. Relations | Random=randomize, value=lock, None=omit |
| relation_2_4_position | COMBO | None | Where the first entity sits relative to the second. Relations | Random=randomize, value=lock, None=omit |
| relation_3_4_position | COMBO | None | Where the first entity sits relative to the second. Relations | Random=randomize, value=lock, None=omit |
| context | COMBO | Random | What else is in the shot besides the subject -- a secondary detail for scale and story. Always a thing in the world, never a lighting instruction. Scene | Random=randomize, value=lock, None=omit |
| entity_1_inopt | SCENE_ENTITY | Optional. A Scene Entity wired here describes slot 1, replacing that slot's own descriptive widgets and giving it the top allowance for the scene. It is a promotion, not an exemption: how much the slot speaks is still capped by what kind of thing it is, so a station reads shorter than a creature. A field you locked on the Scene Entity is a choice: it wins over these widgets and over a coherence rule, and the rule's reason is reported in prompt_json._meta. A field the Scene Entity drew at random is a draw: this scene first picks a place that can hold the whole wired subject, and re-draws a drawn field only when no place can -- the node face then names what was re-drawn. What the entity is *doing* stays this node's: situation and relations are never taken from a wired entity. | |
| entity_2_inopt | SCENE_ENTITY | Optional. A Scene Entity wired here describes slot 2, replacing that slot's own descriptive widgets and giving it the top allowance for the scene. It is a promotion, not an exemption: how much the slot speaks is still capped by what kind of thing it is, so a station reads shorter than a creature. A field you locked on the Scene Entity is a choice: it wins over these widgets and over a coherence rule, and the rule's reason is reported in prompt_json._meta. A field the Scene Entity drew at random is a draw: this scene first picks a place that can hold the whole wired subject, and re-draws a drawn field only when no place can -- the node face then names what was re-drawn. What the entity is *doing* stays this node's: situation and relations are never taken from a wired entity. | |
| entity_3_inopt | SCENE_ENTITY | Optional. A Scene Entity wired here describes slot 3, replacing that slot's own descriptive widgets and giving it the top allowance for the scene. It is a promotion, not an exemption: how much the slot speaks is still capped by what kind of thing it is, so a station reads shorter than a creature. A field you locked on the Scene Entity is a choice: it wins over these widgets and over a coherence rule, and the rule's reason is reported in prompt_json._meta. A field the Scene Entity drew at random is a draw: this scene first picks a place that can hold the whole wired subject, and re-draws a drawn field only when no place can -- the node face then names what was re-drawn. What the entity is *doing* stays this node's: situation and relations are never taken from a wired entity. | |
| entity_4_inopt | SCENE_ENTITY | Optional. A Scene Entity wired here describes slot 4, replacing that slot's own descriptive widgets and giving it the top allowance for the scene. It is a promotion, not an exemption: how much the slot speaks is still capped by what kind of thing it is, so a station reads shorter than a creature. A field you locked on the Scene Entity is a choice: it wins over these widgets and over a coherence rule, and the rule's reason is reported in prompt_json._meta. A field the Scene Entity drew at random is a draw: this scene first picks a place that can hold the whole wired subject, and re-draws a drawn field only when no place can -- the node face then names what was re-drawn. What the entity is *doing* stays this node's: situation and relations are never taken from a wired entity. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| prompt_text | STRING | The prompt. Wire this into the text encoder. |
| prompt_json | STRING | Structured scene data for other nodes or logs. Not a prompt: do not wire it into a text encoder. |