Nodes/ComfyUI-GNM/GNM Head Viewport (Pro Node)
ComfyUI Node

GNM Head Viewport (Pro Node)

GNM Head Viewport (Pro) is the full surgical kit

By soylab-edu·Created 2 months ago·Updated 2 months ago· 10
GNM Head Viewport (Pro Node)
    • image
    • normal_map
    • depth_map
    • mask
    gender
    ethnicity
    identity_seed0
    identity_strength0.00
    expression
    expression_seed0
    expression_strength0.00
    components{}
    neck_pitch0.0
    neck_yaw0.0
    neck_roll0.0
    head_pitch0.0
    head_yaw0.0
    head_roll0.0
    gaze_pitch0.0
    gaze_yaw0.0
    gaze_vergence0.0
    translate_x0.000
    translate_y0.000
    translate_z0.000
    camera_azimuth0.0
    camera_elevation0.0
    zoom1.00
    fov25
    width512
    height512
    background0.95
    surface
    antialias2

    Count them: 253 identity components and 383 expression components - every named PCA axis of the GNM head model, all exposed as sliders in one scrollable panel. GNMHeadViewportPro is the Advanced node with the training wheels off: identity breaks out into head ×170, eyes ×3, and teeth ×80, and the expression side expands to 383 across every face region, organized into collapsible groups so you can find what you're looking for without a machete.

    Everything Advanced does, Pro does: the separate neck/head rotation, gaze pitch/yaw with gaze_vergence, the XYZ translate sliders, and the template-face start (strengths default to 0, so you sculpt from the average head like the official GNM demo). The component panel is just everything instead of the demo's curated subset. Grouped reset buttons are there too, and - same as Advanced - all component values serialize through the hidden components JSON widget, so your work survives a save/load cycle.

    Who actually needs this? Honestly, not many people. If you want a happy face, the 20-class expression dropdown gets you there in one click. Pro exists for the cases a named class can't reach: moving a single tooth, dialing in exactly how much the eyes squint, working the tongue or pupils independently, or animating a face component-by-component. If you're building a character for a consistent-series workflow, this is where you land when Advanced's eighteen curated sliders aren't enough and you're willing to trade setup time for precision.

    It's also the heaviest node in the pack, and that's the honest trade-off. The preview pipeline caches computed vertices - the pack uses an LRU cache on the posed-mesh computation - so it stays usable even with hundreds of sliders twitching, but you're pushing a lot of state through the frontend and the live preview is the price of admission. Outputs remain the standard four: image, normal_map, depth_map, mask, still ControlNet-ready if that's your destination.

    My take: start with the basic viewport to find the ballpark face, step up to Advanced when you want the demo's sculpting, and only pull out Pro when you're chasing a specific, unmatchable detail. It's a scalpel you'll be glad exists, even if you rarely have an excuse to use it.

    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. Same renderer notes as everywhere in this pack: pyrender + pyglet<2 + pinned PyOpenGL==3.1.10, and PYOPENGL_PLATFORM=egl on headless Linux.

    Common issues

    Mostly the same three as Advanced: strengths default to 0 (template face, not a bug), component values only persist if the components JSON widget saves with the workflow, and if the panel doesn't load, restart ComfyUI so the /gnm/viewport/* routes register. On modest hardware, expect the heaviest preview latency in the pack - Pro is the node where a GPU-less setup starts to feel it.

    CategoryGNM

    Inputs (29)

    NameTypeDefaultDescription
    genderCOMBO2 options: female, male
    ethnicityCOMBO4 options: middle_eastern, asian, white, black
    identity_seedINT00–18446744073709550000
    identity_strengthFLOAT0.000–3
    expressionCOMBO20 options: surprise, disgust, suck, compress_face, stretch_face, happy, +14
    expression_seedINT00–18446744073709550000
    expression_strengthFLOAT0.000–3
    componentsSTRING{}
    neck_pitchFLOAT0.0-90–90
    neck_yawFLOAT0.0-90–90
    neck_rollFLOAT0.0-90–90
    head_pitchFLOAT0.0-45–45
    head_yawFLOAT0.0-45–45
    head_rollFLOAT0.0-15–15
    gaze_pitchFLOAT0.0-25–25
    gaze_yawFLOAT0.0-30–30
    gaze_vergenceFLOAT0.0-10–10
    translate_xFLOAT0.000-0.2–0.2
    translate_yFLOAT0.000-0.2–0.2
    translate_zFLOAT0.000-0.2–0.2
    camera_azimuthFLOAT0.0-180–180
    camera_elevationFLOAT0.0-89–89
    zoomFLOAT1.000.2–5
    fovFLOAT255–90
    widthINT51264–4096
    heightINT51264–4096
    backgroundFLOAT0.950–1
    surfaceCOMBO2 options: plain, edgeflow_texture
    antialiasINT21–4

    Outputs (4)

    NameTypeDescription
    imageIMAGE
    normal_mapIMAGE
    depth_mapIMAGE
    maskMASK