ComfyUI Node

Load SMIRK

The face specialist — small, MIT, and drives a non-commercial engine

By ameliacode·Created 5 months ago·Updated 2 months ago· 5
Load SMIRK
    • model
    model_sourcelocal
    model_path/tmp/ComfyUI/models/smirk
    hf_token
    deviceauto

    Load SMIRK is the loader for the face-expression path in this pack - the answer to "why does my estimated body have a blank stare?" SMIRK (Retsinas et al., CVPR 2024) is a dedicated face expression encoder: you give it a face crop, it regresses FLAME expression and jaw pose, and this pack converts those into SMPL-X expression coefficients and jaw_pose. Feed the result into a body estimator's smplx_face input and your neutral face gets actual expression.

    It's the smallest, most self-contained loader in the pack. No smplx_model input required - SMIRK is face-only - and the code license is MIT, which is the permissive bright spot in a pack full of non-commercial walls. The asterisk: SMIRK drives FLAME, and FLAME is MPI non-commercial. So the code is MIT while the model it's built around isn't. Same research-only bottom line as everything here, just with friendlier code.

    What you set

    • model_source - local (default) or huggingface.
    • model_path - ComfyUI/models/smirk/, expecting SMIRK_em1.pt from the georgeretsi/smirk repo.
    • hf_token - gated/private repos only.
    • device - auto / cuda / cpu.

    Output is a model connection (type SMIRK_MODEL) feeding Face: SMIRK.

    Installing

    Same pack install as the rest - 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
    

    install.py clones the SMIRK source into vendor/smirk (override with SMIRK_DIR). No special extra dependencies beyond the pack baseline for this one - SMIRK rides on torch and torchvision. The only manual download is SMIRK_em1.pt (plus, if you're using the body path, the registration-walled SMPL-X file - see the Load SMPLx article).

    Gotchas

    • It's a single weight file, easy to miss. The loader raises a clear FileNotFoundError telling you the exact path it wants when SMIRK_em1.pt isn't in models/smirk/. Check that before assuming something deeper is broken.
    • Quality depends on your crop, not the loader. The real tuning happens on Face: SMIRK, which wants a roughly centered head-region crop (resized to 224×224 internally). Garbage crop in, garbage expression out.
    • Expression, not identity. SMIRK gives you jaw and expression - the movement of the face. It doesn't recover identity/shape of the head; that comes from the body estimator's own prediction.

    If you want your SMPL-X results to have actual facial expression, this is the cleanest way to get it. It's also the friendliest loader in the pack to get working - one file, no registration, no heavy side-deps.

    CategorySMPLx Estimator/loaders

    Inputs (4)

    NameTypeDefaultDescription
    model_sourceCOMBOlocal2 options: local, huggingface
    model_pathSTRING/tmp/ComfyUI/models/smirklocal: folder holding the weight file(s). huggingface: leave model_path; set hf_token for gated/private repos.
    hf_tokenSTRINGHuggingFace access token.
    deviceCOMBOauto3 options: auto, cuda, cpu

    Outputs (1)

    NameTypeDescription
    modelSMIRK_MODEL