๐จโ๐ฆฐ๐ Text Generator (Character Male)
Build a character prompt from dropdowns
- add_GEN_CHARACTER
- GEN_OUTFIT
- GEN_POSE
- GEN_CHARACTER
This is one piece of a whole prompt-building system the pack calls its "Text Generator" nodes - a main node that assembles the final prompt, and a set of feeder nodes for character, outfit, scene, style, pose, and object that each contribute one slice of it. This one is the male-character feeder: instead of writing "a tall middle-aged Nordic man with a beard and grey eyes" by hand, you pick ethnicity, age, body shape, hair, eye color, and so on from dropdowns and it assembles the description for you. It's built specifically with FLUX in mind - the author's own tutorial notes that some of its more advanced features (like positioning a character in the frame) failed on SDXL and only worked reliably once they switched to FLUX.
How it works
Each dropdown category is either NONE (skip it), RANDOM (roll something from the list), or a specific value. number_of_characters (1โ10) lets one node describe a small group sharing the same characteristics rather than needing a separate node per person, and seed controls the randomization when you've got categories set to RANDOM. There's a genuinely large set of flavor categories beyond the basics - skin tone, facial hair, hair style and color, body shape - that are all pure description, nothing structural. CUSTOM_PROMPT is your escape hatch: freeform text appended on top of whatever the dropdowns generated, for anything the category lists don't cover.
The chaining is where this node earns its place in a bigger workflow. Its optional inputs let you connect an outfit node (GEN_OUTFIT) and a pose node (GEN_POSE) so the character, what they're wearing, and what they're doing all merge into one description. add_GEN_CHARACTER lets you chain multiple character nodes together - the author's tutorial shows this used to put two different characters with different positions in the same frame (location_on_image lets you say "on the left" or "on the right"), which is otherwise a genuinely fiddly thing to prompt for by hand.
The inputs and outputs that matter
enabled(BOOLEAN, default true) andnumber_of_characters(INT, 1โ10) - whether this node contributes at all, and how many characters it describes at once.age(enum, default "man") - the age/life-stage category; a handful of the categories below it (ethnicity, nationality, body shape, hair, eyes, skin tone, facial hair) are the same "NONE / RANDOM / pick one" pattern, mostly worth leaving on RANDOM until you know what you want to lock down.CUSTOM_PROMPT(STRING, multiline) - freeform text appended to whatever the dropdowns build.add_GEN_CHARACTER,GEN_OUTFIT,GEN_POSE(optional) - chain in another character node, an outfit generator, or a pose generator so they combine into one description.- Output:
GEN_CHARACTER- feeds into the pack's main Text Generator node, which is what actually assembles everything into your final prompt.
How to install it
Via ComfyUI Manager: search Bjornulf_custom_nodes, install, restart. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/justUmen/Bjornulf_custom_nodes
cd Bjornulf_custom_nodes && pip install -r requirements.txt
then restart ComfyUI. No special dependency for this node specifically - it's a large dropdown/text builder, no models or heavy libraries - but the shared pack requirements.txt covers the rest of the 170-node repo regardless.
Common issues & troubleshooting
A feature like location_on_image doesn't seem to do anything. This is a documented, real limitation, not a bug in your setup - the author's own tutorial shows a failed attempt on SDXL where the model just ignored the positioning cue, and it only worked once they switched to FLUX. If you're on SD1.5 or SDXL, don't expect this node's spatial hints to land reliably; treat it as a FLUX-oriented feature.
Wired in without connecting it to the main Text Generator node. This node only ever produces a GEN_CHARACTER fragment - nothing happens to your actual image generation unless that output eventually reaches the pack's Image Text Generator (main) node, which is what turns all these fragments into a usable prompt.
Output reads oddly verbose or repetitive. Leaving a lot of categories on RANDOM at once can stack up more descriptive detail than your checkpoint handles gracefully. Start with a few categories set explicitly and the rest at NONE, then add randomness back in gradually once you know your checkpoint's tolerance for a busy prompt.
Inputs (19)
| Name | Type | Default | Description |
|---|---|---|---|
| enabled | BOOLEAN | true | โ |
| number_of_characters | INT | 11โ10 | โ |
| seed | INT | 00โ18446744073709550000 | โ |
| location_on_image | COMBO | 11 options: NONE, RANDOM, on the left, in the center, on the right, at the top, +5 | |
| ethnicity | COMBO | 26 options: NONE, RANDOM, Asian, Caucasian, African, Latino, +20 | |
| ethnicity_description | BOOLEAN | false | โ |
| nationality | COMBO | 123 options: NONE, RANDOM, Chinese, Japanese, Korean, Mongolian, +117 | |
| age | COMBO | man | 7 options: RANDOM, baby boy, boy, teen boy, young man, man, +1 |
| add_specific_age | STRING | โ | |
| body_shape | COMBO | 50 options: RANDOM, NONE, athletic, muscular, slim, slender, +44 | |
| skin_tone | COMBO | 17 options: NONE, RANDOM, fair, pale, medium, olive, +11 | |
| facial_hair | COMBO | 29 options: NONE, RANDOM, clean-shaven, stubble, light stubble, heavy stubble, +23 | |
| eye_color | COMBO | 15 options: NONE, RANDOM, blue, green, brown, hazel, +9 | |
| hair_style | COMBO | 36 options: NONE, RANDOM, long, short, curly, straight, +30 | |
| hair_color | COMBO | 31 options: NONE, RANDOM, black, white, grey, red, +25 | |
| CUSTOM_PROMPT | STRING | โ | |
| add_GEN_CHARACTERopt | GEN_CHARACTER,STRING | โ | |
| GEN_OUTFITopt | GEN_OUTFIT,STRING | โ | |
| GEN_POSEopt | GEN_POSE,STRING | โ |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| GEN_CHARACTER | GEN_CHARACTER,STRING | โ |