Facial Expression Selector
16 facial expressions as a prompt clause, chainable with everything
- prompt
Facial Expression Selector is the smallest node in the Multi-Angle Camera Selector pack and arguably the one you'll use most. One dropdown, 16 expressions from neutral to winking to pouting, and out comes Change facial expression to big smile as a single string. It's prompt building, not magic - but for character work, having "the face" as a node you can flip between queue runs beats retyping the word in your prompt box every time.
How it works
Select an expression, get a clause. The node wraps your choice in the prefix Change facial expression to and returns one STRING named prompt. The mechanism is identical to the pack's other selectors: a curated tuple of expressions, a string prefix, and an optional random option that samples from the 16 choices via random.Random(seed). Same seed, same expression - bump the seed and randomize it after generate to audition faces across a batch.
The list is sensibly ordered, which matters more than you'd think: neutral, smile, big smile, laughing, smirk on the happy end; frown, sad, crying, angry in the middle; surprised, shocked, scared, disgusted, confused, winking, pouting to round it out. Sixteen is enough to cover a character sheet without drowning you in near-duplicates.
Inputs and outputs that matter
expression- the 16-expression dropdown plusrandom. Defaultneutral.seed- only does anything whenexpressionisrandom.previous_prompt(optional) - chain another selector in front of this one.prefixandseparator- defaults (Change facial expression toand,) are fine; you will almost never touch them.- Output: one STRING named
prompt, into CLIPTextEncode or into the next selector'sprevious_prompt.
The chaining is where it shines, and it's the same pattern across the whole pack: Change pose to standing, Change facial expression to smirk, Change lighting to dramatic chiaroscuro - three selectors, one coherent instruction sentence, one wire into the text encoder. The phrasing is written for Flux 2 Klein 9B, the editing model in the pack's name, which expects exactly this kind of short "change X to Y" instruction; on other checkpoints it's just an ordinary descriptive clause.
Install
ComfyUI Manager, search "Multi-Angle Camera Selector", install, restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/saluzafa/comfyui-klein9b-multi-angle
Same as every node in this pack: standard library only, zero dependencies, no model downloads, MIT licensed. It appears under prompt/character in the menu.
Gotchas
- This node writes the instruction; the model has to perform it. On an editing model like Klein 9B the "change facial expression to X" phrasing lands well. On weaker prompt followers, "smirk" versus "smile" can blur together - that's adherence, not a bug in the node.
- Watch out for contradicting tags if you chain into a strong-adherence model. If you ask for
cryingin one node andsmilein another part of the same prompt, the model may try to do both and land somewhere in the uncanny middle. Keep expression instructions consistent across the chain. randomwith a randomized seed gives you free expression-rotation for character batches: same pose, same outfit, different face each queue. Cheapest mood-board generator you'll run.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| expression | COMBO | neutral | 17 options: random, neutral, smile, big smile, laughing, smirk, +11 |
| prefix | STRING | Change facial expression to | — |
| separator | STRING | , | — |
| seed | INT | 00–18446744073709550000 | — |
| previous_promptopt | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| prompt | STRING | — |