Scene Entity - Sci-Fi
The optional node that builds one creature properly
- entity_text
- entity
Honest framing first: you don't need this node. Scene Weaver - Sci-Fi is complete on its own and its first slot already carries the full entity morphology. Scene Entity - Sci-Fi exists for two jobs the big node can't do - describing a supporting thing as richly as the hero, and building one creature you reuse across scenes.
What it actually does
It describes one entity across every field the pack owns: what it is, how big, condition, silhouette, material, primary and accent colour, markings, surface detail, appendages and how many, emitters and how many and what colour they glow, armament, sensors, an aperture, and one extra distinguishing detail. Twenty-one fields, each defaulting to Random, each offering None to omit it.
What it doesn't do is place the thing or give it something to do. No environment field, no situation - the Scene Weaver owns where the entity is and what it's doing. This node hands over a subject, not a scene.
The design detail that matters: a starship is clad in its material, a creature covered in one, a spacefarer wears one, and a nebula, having no surface, never gets one described. That's why two seeds give you two different ships rather than two paraphrases.
Wiring it in
entity_text is a plain STRING - the entity exactly as it will read inside a scene - so it drops straight into a Show Text node. entity is a SCENE_ENTITY payload, a dedicated socket type rather than a STRING so a miswire into a text input is impossible. It plugs into any of Scene Weaver's four optional sockets, entity_1_in through entity_4_in.
A wire changes the rules on that slot. It replaces the slot's descriptive widgets and gives it the top allowance - wiring a whole node is the most explicit "I want detail here" you can express. But it's a promotion, not an exemption: a station, wreck or world still speaks fewer details than a creature, because an archetype's detail cap lowers the allowance and never raises it.
- A field you locked here is a choice. It beats the Scene Weaver's widgets and a coherence rule; the rule's reason lands in
prompt_json._meta, and the first warning prints on the node face. - A field this node drew at random is just a draw. The scene first looks for a place that holds the whole wired subject, and only re-draws a drawn field when nothing fits. The face then says
slot 1 re-drawn to fit: …, which explains why your image differs from this node's preview.
The fields worth locking
Set kind first - it scopes every other field, its options and its labels: emitter_count reads "Engine count" on a vessel and "Eye count" on a creature, and form's pool swaps wholesale. Then:
form- the silhouette, hull shape or body plan. The field that makes two of the same kind of thing look different.primary_colorandemitter_color- the two colours that belong to the subject rather than the lighting, so they're safe alongside any style prompt.emittersandsensor_count- the ones that read strongest at a glance. Four eyes and one eye are different creatures.
The rest - accent_color, markings, surface_detail, appendages, aperture, extras - compete for a rotating detail slot on a full-depth subject. If one matters, lock it; otherwise it's drawn, unspoken and gone.
Install
Same pack, nothing extra:
cd ComfyUI/custom_nodes
git clone https://github.com/EnragedAntelope/comfyui-sceneweaver
Restart, then look under conditioning/sceneweaver. No dependencies, no model downloads - standard-library Python only. It does require ComfyUI 0.25.0+ and Python 3.10+, since the pack is written against the newer comfy_api.latest node API.
Things to know before you wire one up
A wired slot is occupied. Scene Weaver's Entities control clamps rather than commands: a slot set to None inside the count stays empty, but a locked kind or a wire occupies its slot outside the count. Wire into entity_4_in while entity_count says "1" and you get two entities, not one.
Four wires won't give you four rich subjects. A wired slot gets the top allowance, but the allowance shrinks as more slots are occupied, and the whole scene is capped at 320 tokens because a text encoder reliably drops detail near the end of a long prompt. If a wired slot reads shorter than the preview suggested, that's the budget, not a broken payload.
It composes across genres. The socket type is shared, so a fantasy entity wired into a sci-fi scene is supported - the host scene places it by its own rules, and a foreign payload that doesn't say which fields were locked is treated as fully unlocked.
The author is worth knowing. EnragedAntelope also maintains the SDNQ quant loader, the pack people reach for to run 4-bit Z-Image on consumer hardware. This pack is a beta with a live vocabulary, and pasting your entity_text into an issue is enough to reproduce an incoherent subject.
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 ship class, a creature type. 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 | What shape it is in -- pristine, battle-scarred, derelict. Identity | Random=randomize, value=lock, None=omit |
| form | COMBO | Random | The silhouette: a hull shape, or a body plan. This is the field that makes two ships actually look different. Form & Material | Random=randomize, value=lock, None=omit |
| material | COMBO | Random | What it is made of, or covered in. Form & Material | Random=randomize, value=lock, None=omit |
| primary_color | COMBO | Random | The colour of the thing itself -- hull, skin, integument. This describes the subject, not the lighting or the grade. Surface & Colour | Random=randomize, value=lock, None=omit |
| accent_color | COMBO | Random | A secondary colour: trim, panelling, banding. On a built subject this competes for a rotating detail slot; lock it to always speak it. Surface & Colour | Random=randomize, value=lock, None=omit |
| markings | COMBO | Random | Livery, insignia, patterning. Carries no readable lettering or numerals -- models garble text. On a built subject this competes for a rotating detail slot; lock it to always speak it. Surface & Colour | Random=randomize, value=lock, None=omit |
| surface_detail | COMBO | Random | Finish and wear at close range -- pitting, seams, scaling. On a built subject this competes for a rotating detail slot; lock it to always speak it. Surface & Colour | Random=randomize, value=lock, None=omit |
| appendages | COMBO | Random | What sticks out: pylons and fins, or limbs and tentacles. On a built subject this competes for a rotating detail slot; lock it to always speak it. Components | Random=randomize, value=lock, None=omit |
| appendage_count | COMBO | Random | How many. Composed into the appendage phrase, so it is only voiced when there are appendages to count. Components | Random=randomize, value=lock, None=omit |
| emitters | COMBO | Random | What glows or thrusts: engines, vents, bioluminescent organs. Components | Random=randomize, value=lock, None=omit |
| emitter_count | COMBO | Random | How many emitters. Components | Random=randomize, value=lock, None=omit |
| emitter_color | COMBO | Random | The colour of the glow itself. Emissive colour belongs to the subject; it is not a lighting instruction. Components | Random=randomize, value=lock, None=omit |
| armament | COMBO | Random | Weapons, mounted or grown. A Peaceful scene simply leaves this out rather than saying the thing is unarmed. 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 perceives: arrays and dishes, or eyes and sensory pits. Components | Random=randomize, value=lock, None=omit |
| sensor_count | COMBO | Random | How many. Four eyes and one eye are different creatures. Components | Random=randomize, value=lock, None=omit |
| aperture | COMBO | Random | The opening: a launch bay or viewport, or a mouth and its teeth. On a built subject this competes for a rotating detail slot; lock it to always speak it. Components | Random=randomize, value=lock, None=omit |
| extras | COMBO | Random | One more distinguishing component -- a cargo pod, a dorsal crest. On a built subject this competes for a rotating detail slot; lock it to always speak it. Components | Random=randomize, value=lock, None=omit |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| entity_text | STRING | — |
| entity | SCENE_ENTITY | — |