GNM Head Viewport (Advanced)
GNM Head Viewport (Advanced)
- image
- normal_map
- depth_map
- mask
The basic viewport gambles; this one sculpts. GNMHeadViewportAdvanced takes the all-in-one head and adds the per-component sliders from GNM's official demo - the same curated subset Google's own notebook exposes - so instead of re-rolling seeds until a face happens to work, you build it.
The component panels cover that demo set: identity gets head ×10 and eyes ×3; expression splits into left eye ×3, right eye ×3, lower face ×7, tongue ×4, and pupil ×1. On top of that it adds the good stuff the basic node lacks - separate neck (±90°) and head (±45°) rotation so you can turn the neck without swinging the head, a full gaze rig (gaze_pitch, gaze_yaw, and gaze_vergence for converging the eyes), and XYZ translate sliders (±0.2m) to frame the head without touching the camera.
Here's the workflow detail that trips people up: the strengths default to 0, not 1. That's deliberate - you start from the template (average) face and sculpt, exactly like the official demo. If you'd rather fine-tune a seeded face, raise identity_strength/expression_strength and the component sliders become offsets layered on top of the sampled vector rather than the whole story.
Under the hood, component values live in a hidden components JSON widget, which is what makes them survive a workflow save/load intact - close ComfyUI, come back tomorrow, your sculpt is still there. Each group also has a reset button for that region only, which saves you from starting over when one area goes wrong. The README even hands you a working example: to open the mouth, set lower-face e200 = -2.6, e201 = 1.0, e202 = -2.1.
Outputs are the standard four - image, normal_map, depth_map, mask - and the live preview behaves exactly like the basic node's: drag to orbit, wheel to zoom, queued render at full width/height. Reach for this one when you want the demo's hands-on sculpting without committing to the full component dump. The Pro node below it is for the truly obsessive.
Install
ComfyUI Manager is the easy path: Custom Nodes → search "ComfyUI-GNM" → Install, then restart. Or clone by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/soylab-edu/ComfyUI-GNM
cd ComfyUI-GNM
pip install -r requirements.txt
Model data ships in vendor/; no separate download, no TensorFlow. Renderer deps (pyrender, pyglet<2, pinned PyOpenGL==3.1.10) and PYOPENGL_PLATFORM=egl on headless Linux, same as the rest of the pack.
Common issues
The one thing that confuses everyone is the strength defaults of 0 - if the face isn't moving when you drag component sliders, check that you actually changed a slider, and that you're not staring at a component whose offset is being dominated by a large identity_strength. And if the component panel never appears, it's the same restart fix as the basic viewport: the /gnm/viewport/* routes only register at startup.
Inputs (29)
| Name | Type | Default | Description |
|---|---|---|---|
| gender | COMBO | 2 options: female, male | |
| ethnicity | COMBO | 4 options: middle_eastern, asian, white, black | |
| identity_seed | INT | 00–18446744073709550000 | — |
| identity_strength | FLOAT | 0.000–3 | — |
| expression | COMBO | 20 options: surprise, disgust, suck, compress_face, stretch_face, happy, +14 | |
| expression_seed | INT | 00–18446744073709550000 | — |
| expression_strength | FLOAT | 0.000–3 | — |
| components | STRING | {} | — |
| neck_pitch | FLOAT | 0.0-90–90 | — |
| neck_yaw | FLOAT | 0.0-90–90 | — |
| neck_roll | FLOAT | 0.0-90–90 | — |
| head_pitch | FLOAT | 0.0-45–45 | — |
| head_yaw | FLOAT | 0.0-45–45 | — |
| head_roll | FLOAT | 0.0-15–15 | — |
| gaze_pitch | FLOAT | 0.0-25–25 | — |
| gaze_yaw | FLOAT | 0.0-30–30 | — |
| gaze_vergence | FLOAT | 0.0-10–10 | — |
| translate_x | FLOAT | 0.000-0.2–0.2 | — |
| translate_y | FLOAT | 0.000-0.2–0.2 | — |
| translate_z | FLOAT | 0.000-0.2–0.2 | — |
| camera_azimuth | FLOAT | 0.0-180–180 | — |
| camera_elevation | FLOAT | 0.0-89–89 | — |
| zoom | FLOAT | 1.000.2–5 | — |
| fov | FLOAT | 255–90 | — |
| width | INT | 51264–4096 | — |
| height | INT | 51264–4096 | — |
| background | FLOAT | 0.950–1 | — |
| surface | COMBO | 2 options: plain, edgeflow_texture | |
| antialias | INT | 21–4 | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| normal_map | IMAGE | — |
| depth_map | IMAGE | — |
| mask | MASK | — |