Character Expressions
Character Expressions builds the emotional prompt
- prefix
- expression_text
Character Expressions turns eighteen checkboxes into a prompt sentence describing a face's emotional state. Happy, sad, angry, surprised, confused, tired, smiling, winking, terrified, shocked, panicked, nervous, excited, bored, disgusted, anxious, relieved - toggle whichever ones apply, and the node writes "happy and excited expressions." for you.
Why eighteen toggles instead of just typing a word? Two reasons, and both are about consistency. First, an expression in a generated face is rarely a single clean state - people are "nervous and tired" or "surprised and confused" - and a checkbox makes it natural to stack several. Second, and this is the one that actually matters in a production workflow: you can drive those checkboxes from elsewhere in the graph. A randomness node, a prompt cycler, a controller - anything that outputs a boolean can flip an expression on and off. That turns this into a way to script a character's emotional arc across a sequence of renders, which is genuinely fiddly to do with free text. The same trick works for toggling one expression on only every Nth frame in an animation pass.
It's part of the same Character Crafter family as Character Appearance, Clothing, and Makeup, and it's meant to be used alongside them - appearance describes who the character is, expressions describe what they're feeling right now.
How it works
Each of the 18 inputs is a plain boolean. The node collects the ones that are enabled, joins them with commas and an "and" (comma-separated up to the last pair), and appends "expression" or "expressions" - singular if you enabled exactly one. If nothing is checked, the output is just the prefix string, usually empty.
One grammar detail worth knowing: if you stack contradictory toggles - happy and sad - it will happily emit "happy and sad expressions." The model will do something with that, but it's usually mush. Pick a coherent set; the node won't police your character's mood.
Inputs and outputs
- 18 booleans: happy, sad, angry, surprised, confused, tired, smiling, frowning, winking, terrified, shocked, panicked, nervous, excited, bored, disgusted, anxious, relieved.
- prefix (optional, wildcard) - prepended text. Good for a character name: feed "Sarah " in and you get "Sarah happy expression." for wiring into a longer prompt.
Output:
- expression_text (STRING) - the assembled sentence.
Installing it
In ComfyUI Fictiverse Nodes. ComfyUI Manager → search "ComfyUI Fictiverse Nodes" → install → restart, or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/Fictiverse/ComfyUI_Fictiverse
No dependencies, no models. Apache 2.0.
Common issues
The pack's standard startup error - ModuleNotFoundError: No module named 'custom_nodes.ComfyUI_Fictiverse' - means the folder got installed under a name other than exactly ComfyUI_Fictiverse; rename and restart.
Node-specific traps: forgetting that no checkboxes = empty output (which, wired into a prompt, is fine - it just contributes nothing). And remember this is prompting, not control. "Terrified" in the text doesn't guarantee a terrified face on every model - some backbones need the emotion near the front of the prompt or reinforced with a second mention to actually show it. Start with one or two toggles and see what your checkpoint does before you stack four.
Inputs (19)
| Name | Type | Default | Description |
|---|---|---|---|
| happy | BOOLEAN | — | |
| sad | BOOLEAN | — | |
| angry | BOOLEAN | — | |
| surprised | BOOLEAN | — | |
| confused | BOOLEAN | — | |
| tired | BOOLEAN | — | |
| smiling | BOOLEAN | — | |
| frowning | BOOLEAN | — | |
| winking | BOOLEAN | — | |
| terrified | BOOLEAN | — | |
| shocked | BOOLEAN | — | |
| panicked | BOOLEAN | — | |
| nervous | BOOLEAN | — | |
| excited | BOOLEAN | — | |
| bored | BOOLEAN | — | |
| disgusted | BOOLEAN | — | |
| anxious | BOOLEAN | — | |
| relieved | BOOLEAN | — | |
| prefixopt | * | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| expression_text | STRING | — |