Nodes/Multi-Angle Camera Selector/Facial Expression Selector
ComfyUI Node

Facial Expression Selector

16 facial expressions as a prompt clause, chainable with everything

By saluzafa·Created 4 months ago·Updated 4 months ago· 0
Facial Expression Selector
    • prompt
    expressionneutral
    prefixChange facial expression to
    separator,
    seed0
    previous_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 plus random. Default neutral.
    • seed - only does anything when expression is random.
    • previous_prompt (optional) - chain another selector in front of this one.
    • prefix and separator - defaults (Change facial expression to and , ) are fine; you will almost never touch them.
    • Output: one STRING named prompt, into CLIPTextEncode or into the next selector's previous_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 crying in one node and smile in 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.
    • random with 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.
    Categoryprompt/character

    Inputs (5)

    NameTypeDefaultDescription
    expressionCOMBOneutral17 options: random, neutral, smile, big smile, laughing, smirk, +11
    prefixSTRINGChange facial expression to
    separatorSTRING,
    seedINT00–18446744073709550000
    previous_promptoptSTRING

    Outputs (1)

    NameTypeDescription
    promptSTRING