Nodes/Bjornulf_custom_nodes/๐Ÿ‘ฉโ€๐Ÿฆฐ๐Ÿ“ Text Generator (Character Female)
ComfyUI Node

๐Ÿ‘ฉโ€๐Ÿฆฐ๐Ÿ“ Text Generator (Character Female)

Build a character prompt from menus

By justUmenยทCreated 2 years agoยทUpdated about a year agoยท 545
๐Ÿ‘ฉโ€๐Ÿฆฐ๐Ÿ“ Text Generator (Character Female)
  • add_GEN_CHARACTER
  • GEN_OUTFIT
  • GEN_POSE
  • GEN_CHARACTER
โ—„enabledtrueโ–บ
โ—„number_of_characters1โ–บ
โ—„seed0โ–บ
โ—„location_on_imageโ–พโ–บ
โ—„ethnicityโ–พโ–บ
โ—„ethnicity_descriptionfalseโ–บ
โ—„nationalityโ–พโ–บ
โ—„agewomanโ–บ
โ—„add_specific_ageโ–บ
โ—„body_shapeโ–พโ–บ
โ—„breastsโ–พโ–บ
โ—„assโ–พโ–บ
โ—„skin_toneโ–พโ–บ
โ—„eye_colorโ–พโ–บ
โ—„hair_styleโ–พโ–บ
โ—„hair_colorโ–พโ–บ
โ—„CUSTOM_PROMPTโ–บ

Instead of typing "a 26-year-old woman, athletic build, long red hair, green eyes, olive skinโ€ฆ" by hand, you set those as dropdowns and this node writes the sentence for you. It's a structured prompt builder for female characters - pick from menus for ethnicity, age, body shape, hair, eyes, skin, and it assembles a clean description string. The real power is the RANDOM option on every field: leave things on RANDOM and each run rolls a fresh character, which is the modern, menu-driven version of the old A1111 wildcard trick people used to build character reference libraries without training anything (see the KB's prompt-engineering notes).

It's part of a little system, not a standalone node - and understanding that is the whole game.

How it works

This node doesn't produce the final prompt on its own. It emits a GEN_CHARACTER payload that you feed into the pack's main Image Text Generator node (node 81), which stitches the character together with style, scene, and camera details into the actual prompt text. Character nodes also chain to each other (for multiple distinct characters) and accept an outfit and a pose, so you can build "aggressive dragon-riding woman on the left, in floral armor, holding a book" out of connected menu nodes. Every field offers NONE (omit it), RANDOM (roll it via the seed), or a specific choice.

The inputs and outputs that matter

You won't touch all of them; the ones that carry the weight:

  • seed (INT) - drives every RANDOM field. Randomize for a new character each run, fix to reproduce one.
  • age (default "woman"), ethnicity, body_shape, hair_style, hair_color, eye_color, skin_tone - the core descriptors. Set them, or leave on RANDOM for variety.
  • number_of_characters (INT) - how many characters this node describes (they share the same characteristics).
  • CUSTOM_PROMPT (STRING) - freeform text appended to whatever the menus produce, for anything the dropdowns don't cover.
  • Optional chaining inputs: add_GEN_CHARACTER (connect another character node to add a distinct second character), GEN_OUTFIT (attach an Outfit node), GEN_POSE (attach a Pose node).

There are also body-description fields (breasts, ass, plus toggles like ethnicity_description) - a clear tell that this pack is built with character and pinup generation in mind. Set them to NONE if that's not your use.

Output: GEN_CHARACTER - wire it into the main Image Text Generator node. Nothing renders until you do.

How to install it

ComfyUI Manager โ†’ Bjornulf_custom_nodes โ†’ install โ†’ restart. Manual:

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

then restart. No special dependency - it's text assembly.

Common issues & troubleshooting

I connected it and nothing generates. By itself this node only writes text. Its GEN_CHARACTER output has to reach the main Image Text Generator node, which produces the prompt string you then send to your CLIP/checkpoint. Without that hub node, there's no output to render.

The model ignores half the details. The author is blunt about this: the node just writes text, and it's the checkpoint that has to understand it. It was built with Flux in mind; SDXL and SD1.5 are worse at obscure attributes. If a detail isn't landing, that's a model-comprehension limit, not a node bug - try Flux.

location_on_image does nothing on SDXL. Documented: positional control works on Flux and fails on SDXL in the author's own tests. Switch models if you need it.

Every run is the same character. Fixed seed. Randomize it to reroll the RANDOM fields.

NONE vs RANDOM confusion. NONE omits the field entirely; RANDOM picks a value. If you want a trait present but varied, use RANDOM, not NONE.

CategoryBjornulf

Inputs (20)

NameTypeDefaultDescription
enabledBOOLEANtrueโ€”
number_of_charactersINT11โ€“10โ€”
seedINT00โ€“18446744073709550000โ€”
location_on_imageCOMBO11 options: NONE, RANDOM, on the left, in the center, on the right, at the top, +5
ethnicityCOMBO26 options: NONE, RANDOM, Asian, Caucasian, African, Latina, +20
ethnicity_descriptionBOOLEANfalseโ€”
nationalityCOMBO123 options: NONE, RANDOM, Chinese, Japanese, Korean, Mongolian, +117
ageCOMBOwoman7 options: RANDOM, baby girl, girl, teen girl, young woman, woman, +1
add_specific_ageSTRINGโ€”
body_shapeCOMBO51 options: RANDOM, NONE, athletic, muscular, slim, slender, +45
breastsCOMBO20 options: RANDOM, NONE, tiny, small, medium, large, +14
assCOMBO21 options: RANDOM, NONE, tiny, small, medium, large, +15
skin_toneCOMBO17 options: NONE, RANDOM, fair, pale, medium, olive, +11
eye_colorCOMBO15 options: NONE, RANDOM, blue, green, brown, hazel, +9
hair_styleCOMBO36 options: NONE, RANDOM, long, short, curly, straight, +30
hair_colorCOMBO31 options: NONE, RANDOM, black, white, grey, red, +25
CUSTOM_PROMPTSTRINGโ€”
add_GEN_CHARACTERoptGEN_CHARACTER,STRINGโ€”
GEN_OUTFIToptGEN_OUTFIT,STRINGโ€”
GEN_POSEoptGEN_POSE,STRINGโ€”

Outputs (1)

NameTypeDescription
GEN_CHARACTERGEN_CHARACTER,STRINGโ€”