Face: SMIRK
Turn a blank stare into actual expression
- model
- image
- smplx_face
Face: SMIRK is the smallest node in this pack and arguably the highest bang-for-buck. Your SMPL-X body estimates come out of the box with a neutral, expressionless face - the estimators don't recover facial expression unless you ask for it. This node is how you ask. It runs the SMIRK encoder on a face crop, turns the result into SMPL-X expression coefficients plus jaw_pose, and hands it over as an smplx_face result for a body estimator to graft.
Like its sibling Hand: WiLoR, this is a partial-SMPL-X node: the output carries only the face, no body, no hands. It's not a dead-end though - it wires into Body: NLF or Full Body: Multi-HMR2 via their smplx_face input. Note the precedence rule: when both smplx_hands and smplx_face are connected, the dedicated face input wins for jaw and expression. So wire WiLoR into smplx_hands and this into smplx_face, and each specialist owns its domain.
The one input that matters
- model - the
SMIRK_MODELoutput from Load SMIRK. - image - this is where all the real tuning lives, and the tooltip says it plainly: give it a face crop, roughly centred. SMIRK resizes to 224×224 internally, so a tight head-region crop is what you want - the face should dominate the frame. Feeding it the full body photo is the most common mistake, and you get mushier expression as a result. Crop to the head, keep the face centered, done.
Output is a single smplx_face connection feeding the body estimator.
Installing
Standard pack install - ComfyUI Manager, search SMPLx Estimator, install, restart - or:
cd ComfyUI/custom_nodes
git clone https://github.com/ameliacode/ComfyUI-SMPLx-Estimator.git
cd ComfyUI-SMPLx-Estimator
pip install -r requirements.txt
python install.py
The source clones into vendor/smirk automatically; the only manual download is SMIRK_em1.pt into models/smirk/ (from the georgeretsi/smirk repo). No registration wall, no MANO-style surprise - this is the friendliest path in the pack to get running.
Common issues
- Weak or absent expression. Almost always a crop problem, not a node problem. The face is too small in the frame or off-center. Crop tighter, re-run, compare.
- Forgetting the wire.
smplx_faceis optional, so a missing connection is silent - your graph runs, the face just stays neutral. Double-check the wire if your output looks blank-faced. - License nuance. SMIRK code is MIT, but it drives FLAME, which is MPI non-commercial. In practice: research use only, same as the rest of the pack.
There's no depth to this node, and there doesn't need to be. Load SMIRK, crop a face, wire it in, and your body estimates finally start looking like people who are actually doing something with their face.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| model | SMIRK_MODEL | — | |
| image | IMAGE | Face crop (roughly centred). Resized to 224x224 for SMIRK. Use the head region for best results. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| smplx_face | SMPLX | — |