Nodes/ComfyUI_StarNodes/⭐ Star Creature Builder
ComfyUI Node

⭐ Star Creature Builder

31 Dropdowns and a Reference Sheet You Didn't Have to Write

By Starnodes2024·Created 2 years ago·Updated 3 days ago· 119
⭐ Star Creature Builder
    • description
    • creature_sheet
    • system_prompt
    ◄sexnone►
    ◄creature_typenone►
    ◄elementnone►
    ◄body_plannone►
    ◄sizenone►
    ◄headnone►
    ◄earsnone►
    ◄hornsnone►
    ◄mouthnone►
    ◄skin_typenone►
    ◄body_colornone►
    ◄patternnone►
    ◄pattern_colornone►
    ◄hair_manenone►
    ◄hair_colornone►
    ◄eye_typenone►
    ◄eye_colornone►
    ◄body_featuresnone►
    ◄arms_handsnone►
    ◄legs_feetnone►
    ◄wingsnone►
    ◄tailnone►
    ◄genitalsnone►
    ◄clothingnone►
    ◄armornone►
    ◄tribal_garbnone►
    ◄accessoriesnone►
    ◄expressionnone►
    ◄posenone►
    ◄customnone►
    ◄stylefantasy illustration►
    ◄age►
    ◄random_agefalse►
    ◄additional►
    ◄seed0►
    ◄random_allfalse►

    You know how to write "an anthropomorphic obsidian dragon with crystal horns, tribal garb, fantasy illustration." You just don't want to write it for the fortieth time, and you keep forgetting the tail.

    ⭐ Star Creature Builder is a text node - no model, no pixels, no VRAM - that turns 31 dropdowns into three strings: a plain prompt, a full reference-sheet prompt, and a system prompt for an LLM. It's the most elaborate of the pack's four builders.

    What it's actually doing

    Everything the node knows lives in json/star_creature_builder.json: 31 lists plus a system_prompt string. On load each list becomes a dropdown with three options prepended - none, random, exclude. At run time the node resolves each widget to a string and joins the non-empty ones with commas in a fixed order.

    The order and the combinators are the actual engineering. body_color + skin_type becomes emerald scales, not "scales, emerald". head + mouth becomes full animal head with sharp fangs. eye_type + eye_color becomes glowing amber eyes. The lead clause is assembled separately as size, age, body plan, sex, element, species - which is how you get huge 40 year old tauric female fire dragon instead of the same words shuffled.

    Two switches do the heavy lifting. seed pins every random pick; leave it at 0 and you re-roll on every queue. random_all ignores your widgets and randomizes everything, with one rule baked in: clothing, armor and tribal_garb are mutually exclusive, so the creature wears one, never all three. Anything set to exclude sits out anyway - which is the workflow people settle on: lock two or three traits, flip random_all on, batch fifty variations of an idea you already like.

    The output that earns the node its keep

    description is the comma-separated prompt. Wire it into a CLIP Text Encode and move on.

    creature_sheet is a different animal - a paragraph specifying a layout: two tall full-body panels on the left (front and back), a 3×2 detail grid on the right (head front/profile/45°, chest, pelvis, hindquarters), expanding to 4×2 with close-ups when you've set any anatomy field it treats as detail-worthy (ears, horns, mouth, arms, legs, wings, tail) or given it accessories.

    Then the part that's engineered rather than assembled: "presented in a clinical and scientific way like a biological field guide, with flat, even studio lighting… and enforces absolute consistency in the creature's features, proportions, and overall appearance across every panel." Plus a hard no-text clause. Sheets drift - ask for a turnaround, get three cousins - and that consistency sentence is the countermeasure the turnaround crowd arrived at independently (character-consistency.md). The no-text clause is there because panels actively invite models to label them.

    Inputs worth your attention

    You don't need all 31.

    • creature_type (77 options) and body_plan (18: anthropomorphic, feral, tauric, naga-bodied…). Body plan is what stops every creature defaulting to a biped in a loincloth.
    • style defaults to fantasy illustration - the only dropdown here that isn't none by default - and lands in both outputs.
    • age / random_age: a bare number becomes 35 year old, words like ancient pass through, empty is skipped. The toggle rolls 18–100, adjustable in the json.
    • additional: multiline free text appended to both prompts. Lighting and quality tags go here.

    Installing it

    Manager → search Starnodes → Install → restart. Or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/Starnodes2024/ComfyUI_StarNodes
    cd ComfyUI_StarNodes
    pip install -r requirements.txt
    

    The builders import only os, json, time, random - none of that pip line is theirs. opencv-python, psd-tools, scikit-learn and friends belong to the pack's image and video nodes, and install.py deliberately runs no installs at all (Registry policy), so a bare clone gives you a working builder and a broken PSD saver.

    Where people get burned

    New JSON entries don't show in the dropdowns. Option lists are built at module load, so edits need a restart. random picks re-read the file every run, though - new entries get used immediately even while the dropdown looks stale.

    Bad JSON fails silently. The loader catches the exception, prints StarNodes: Could not load star_creature_builder.json, and returns empty lists. The node still runs; your dropdowns shrink to none/random/exclude and the prompt comes out nearly blank. A trailing comma is the usual culprit.

    python3 -m json.tool ComfyUI/custom_nodes/ComfyUI_StarNodes/json/star_creature_builder.json > /dev/null
    

    Your sheet came out naked. With no wear category set, the prompt says so out loud: "The creature is unclothed in the full-body panels." Pick clothing, armor or tribal garb - or set all three to exclude if that's the intent.

    random_all overwrote your choices. Intended. That's what exclude is for.

    Category⭐StarNodes/Text And Data

    Inputs (36)

    NameTypeDefaultDescription
    sexCOMBOnone'none' skips this trait, 'random' picks a random entry, 'exclude' keeps it out of the prompt even when random_all is on. Add your own entries in json/star_creature_builder.json (restart ComfyUI to see them in this list, 'random' uses them right away).
    creature_typeCOMBOnone'none' skips this trait, 'random' picks a random entry, 'exclude' keeps it out of the prompt even when random_all is on. Add your own entries in json/star_creature_builder.json (restart ComfyUI to see them in this list, 'random' uses them right away).
    elementCOMBOnone'none' skips this trait, 'random' picks a random entry, 'exclude' keeps it out of the prompt even when random_all is on. Add your own entries in json/star_creature_builder.json (restart ComfyUI to see them in this list, 'random' uses them right away).
    body_planCOMBOnone'none' skips this trait, 'random' picks a random entry, 'exclude' keeps it out of the prompt even when random_all is on. Add your own entries in json/star_creature_builder.json (restart ComfyUI to see them in this list, 'random' uses them right away).
    sizeCOMBOnone'none' skips this trait, 'random' picks a random entry, 'exclude' keeps it out of the prompt even when random_all is on. Add your own entries in json/star_creature_builder.json (restart ComfyUI to see them in this list, 'random' uses them right away).
    headCOMBOnone'none' skips this trait, 'random' picks a random entry, 'exclude' keeps it out of the prompt even when random_all is on. Add your own entries in json/star_creature_builder.json (restart ComfyUI to see them in this list, 'random' uses them right away).
    earsCOMBOnone'none' skips this trait, 'random' picks a random entry, 'exclude' keeps it out of the prompt even when random_all is on. Add your own entries in json/star_creature_builder.json (restart ComfyUI to see them in this list, 'random' uses them right away).
    hornsCOMBOnone'none' skips this trait, 'random' picks a random entry, 'exclude' keeps it out of the prompt even when random_all is on. Add your own entries in json/star_creature_builder.json (restart ComfyUI to see them in this list, 'random' uses them right away).
    mouthCOMBOnone'none' skips this trait, 'random' picks a random entry, 'exclude' keeps it out of the prompt even when random_all is on. Add your own entries in json/star_creature_builder.json (restart ComfyUI to see them in this list, 'random' uses them right away).
    skin_typeCOMBOnone'none' skips this trait, 'random' picks a random entry, 'exclude' keeps it out of the prompt even when random_all is on. Add your own entries in json/star_creature_builder.json (restart ComfyUI to see them in this list, 'random' uses them right away).
    body_colorCOMBOnone'none' skips this trait, 'random' picks a random entry, 'exclude' keeps it out of the prompt even when random_all is on. Add your own entries in json/star_creature_builder.json (restart ComfyUI to see them in this list, 'random' uses them right away).
    patternCOMBOnone'none' skips this trait, 'random' picks a random entry, 'exclude' keeps it out of the prompt even when random_all is on. Add your own entries in json/star_creature_builder.json (restart ComfyUI to see them in this list, 'random' uses them right away).
    pattern_colorCOMBOnone'none' skips this trait, 'random' picks a random entry, 'exclude' keeps it out of the prompt even when random_all is on. Add your own entries in json/star_creature_builder.json (restart ComfyUI to see them in this list, 'random' uses them right away).
    hair_maneCOMBOnone'none' skips this trait, 'random' picks a random entry, 'exclude' keeps it out of the prompt even when random_all is on. Add your own entries in json/star_creature_builder.json (restart ComfyUI to see them in this list, 'random' uses them right away).
    hair_colorCOMBOnone'none' skips this trait, 'random' picks a random entry, 'exclude' keeps it out of the prompt even when random_all is on. Add your own entries in json/star_creature_builder.json (restart ComfyUI to see them in this list, 'random' uses them right away).
    eye_typeCOMBOnone'none' skips this trait, 'random' picks a random entry, 'exclude' keeps it out of the prompt even when random_all is on. Add your own entries in json/star_creature_builder.json (restart ComfyUI to see them in this list, 'random' uses them right away).
    eye_colorCOMBOnone'none' skips this trait, 'random' picks a random entry, 'exclude' keeps it out of the prompt even when random_all is on. Add your own entries in json/star_creature_builder.json (restart ComfyUI to see them in this list, 'random' uses them right away).
    body_featuresCOMBOnone'none' skips this trait, 'random' picks a random entry, 'exclude' keeps it out of the prompt even when random_all is on. Add your own entries in json/star_creature_builder.json (restart ComfyUI to see them in this list, 'random' uses them right away).
    arms_handsCOMBOnone'none' skips this trait, 'random' picks a random entry, 'exclude' keeps it out of the prompt even when random_all is on. Add your own entries in json/star_creature_builder.json (restart ComfyUI to see them in this list, 'random' uses them right away).
    legs_feetCOMBOnone'none' skips this trait, 'random' picks a random entry, 'exclude' keeps it out of the prompt even when random_all is on. Add your own entries in json/star_creature_builder.json (restart ComfyUI to see them in this list, 'random' uses them right away).
    wingsCOMBOnone'none' skips this trait, 'random' picks a random entry, 'exclude' keeps it out of the prompt even when random_all is on. Add your own entries in json/star_creature_builder.json (restart ComfyUI to see them in this list, 'random' uses them right away).
    tailCOMBOnone'none' skips this trait, 'random' picks a random entry, 'exclude' keeps it out of the prompt even when random_all is on. Add your own entries in json/star_creature_builder.json (restart ComfyUI to see them in this list, 'random' uses them right away).
    genitalsCOMBOnone'none' skips this trait, 'random' picks a random entry, 'exclude' keeps it out of the prompt even when random_all is on. Add your own entries in json/star_creature_builder.json (restart ComfyUI to see them in this list, 'random' uses them right away).
    clothingCOMBOnone'none' skips this trait, 'random' picks a random entry, 'exclude' keeps it out of the prompt even when random_all is on. Add your own entries in json/star_creature_builder.json (restart ComfyUI to see them in this list, 'random' uses them right away).
    armorCOMBOnone'none' skips this trait, 'random' picks a random entry, 'exclude' keeps it out of the prompt even when random_all is on. Add your own entries in json/star_creature_builder.json (restart ComfyUI to see them in this list, 'random' uses them right away).
    tribal_garbCOMBOnone'none' skips this trait, 'random' picks a random entry, 'exclude' keeps it out of the prompt even when random_all is on. Add your own entries in json/star_creature_builder.json (restart ComfyUI to see them in this list, 'random' uses them right away).
    accessoriesCOMBOnone'none' skips this trait, 'random' picks a random entry, 'exclude' keeps it out of the prompt even when random_all is on. Add your own entries in json/star_creature_builder.json (restart ComfyUI to see them in this list, 'random' uses them right away).
    expressionCOMBOnone'none' skips this trait, 'random' picks a random entry, 'exclude' keeps it out of the prompt even when random_all is on. Add your own entries in json/star_creature_builder.json (restart ComfyUI to see them in this list, 'random' uses them right away).
    poseCOMBOnone'none' skips this trait, 'random' picks a random entry, 'exclude' keeps it out of the prompt even when random_all is on. Add your own entries in json/star_creature_builder.json (restart ComfyUI to see them in this list, 'random' uses them right away).
    customCOMBOnone'none' skips this trait, 'random' picks a random entry, 'exclude' keeps it out of the prompt even when random_all is on. Add your own entries in json/star_creature_builder.json (restart ComfyUI to see them in this list, 'random' uses them right away).
    styleCOMBOfantasy illustration'none' skips this trait, 'random' picks a random entry, 'exclude' keeps it out of the prompt even when random_all is on. Add your own entries in json/star_creature_builder.json (restart ComfyUI to see them in this list, 'random' uses them right away).
    ageSTRINGFree text. Empty = skipped. Type 'random' or enable the random_age toggle for a random age (18-100 by default, change age_random_min/max in the json settings). A plain number becomes 'X year old'.
    random_ageBOOLEANfalseIf enabled each run, picks a random age between age_random_min and age_random_max from the json settings and ignores the age text field.
    additionalSTRINGFree text that is appended to the end of the prompt. Empty = skipped.
    seedINT00–18446744073709550000Seed for all 'random' picks. 0 = new random picks every run.
    random_allBOOLEANfalseIf enabled, every category gets a random pick regardless of its widget setting. Only one of clothing/armor/tribal_garb is picked. Categories set to 'exclude' stay out of the prompt.

    Outputs (3)

    NameTypeDescription
    descriptionSTRINGThe plain generated comma-separated description prompt.
    creature_sheetSTRINGThe ready-to-use strict creature reference sheet image prompt for the same creature (multi-panel grid, anatomy close-up panels). Note: an outfit appears if one is selected or randomized - set all wear categories to 'exclude' for a naked sheet.
    system_promptSTRINGThe system prompt to feed into your LLM so it can write creature sheet prompts itself. Editable as 'system_prompt' in json/star_creature_builder.json.