3D Model Stage
Turn a prompt (or a photo) into an orbitable GLB without leaving the canvas
- texts
- images
- models
- model
- image
The 3D Model Stage is ComfyTV's text/image-to-3D entry point: you give it a prompt, optionally some reference text, images, or an existing model, pick a backend workflow, and hit ▶ Run. What comes back is a COMFYTV_MODEL you can orbit in the node's own 3D preview, plus a flat snapshot image. It's the "generate" end of the pack's 3D story - the other end is the Load 3D Model stage (feeding it), and Scene3D / Material stages (consuming it).
The mechanism is worth understanding, because it's different from a ComfyUI checkpoint loader. ComfyTV wraps an actual ComfyUI generation workflow - by default Hunyuan3D 2.1 - and requires that workflow to end in a SaveGLB (or compatible) node. You click Run, the backend runs that real GPU workflow against your local model, and the GLB snapshot comes back into the canvas. In other words: it's a workflow runner with a 3D viewport bolted on, not a bespoke 3D generator. If you've got a different 3D model in mind, you can swap the workflow in the dropdown and ComfyTV will happily drive that instead.
What you set
workflow- the backend generation workflow, defaultHunyuan3D 2.1. This is the one input that decides which model runs and what kind of output you get.main_prompt- your intent for the stage. Upstream text inputs are treated as extra context, so the prompt is where you say "a low-poly knight" and the references are where you show it what you mean.texts,images,models- autogrow slots for reference material. Reference images make this an image-to-3D stage; a reference model nudges generation toward an existing shape.captured_imageandcustom_params- internal.captured_imageis written by the 3D preview and becomes theimageoutput; leave both alone.
Two outputs come off this node: model (COMFYTV_MODEL, the GLB) and image (COMFYTV_IMAGE, the viewport snapshot). The snapshot is genuinely useful - it's a cheap thumbnail for storyboards, or a feed for image-based follow-ups, and you get it for free with the model.
The model files you'll need
The shipped workflows reference real model files under ComfyUI/models/:
- Hunyuan3D 2.1 →
checkpoints/hunyuan_3d_v2.1.safetensors(from Comfy-Org's repackage on Hugging Face) - MoGe-2 Mesh →
geometry_estimation/moge_2_vitl_normal_fp16.safetensors - TripoSplat Gaussian → a whole stack (
diffusion_models/,clip_vision/,vae/,background_removal/)
None of these download automatically - ComfyTV won't babysit your model folders. The pack's docs/models.md lists exact paths and URLs; read it before your first Run, because "nothing happened" on a 3D stage is almost always "the model isn't there."
Install and gotchas
Install is the pack-wide one-liner:
cd ComfyUI/custom_nodes
git clone https://github.com/jtydhr88/ComfyTV
Then restart ComfyUI (fully - on Desktop/macOS, install into the running instance's custom_nodes by absolute path and verify __init__.py is at the top level). ComfyUI Manager works too, search "ComfyTV". No extra Python dependencies.
Two things to keep in your head. First, 3D generation is heavy: Hunyuan3D 2.1 on a modest GPU is a wait, and the preview snapshot only captures what the viewport was showing, so aim the camera before you expect a good thumbnail. Second, media flows as project snapshots, not native tensors - to talk to native ComfyUI 3D nodes, put a Bridge between them.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| force_run_token | INT | 00–2147483647 | Internal — bumped on Run to invalidate ComfyUI's input cache. |
| project_id | STRING | Internal — populated by the projectStore on the frontend. | |
| parent_output_id | INT | 00–2147483647 | Internal — lineage parent set by spawn handlers on the frontend. |
| workflow | COMBO | Hunyuan3D 2.1 | Which backend 3D-generation workflow to invoke when Run is clicked. The workflow must end in a SaveGLB (or compatible) node. |
| main_prompt | STRING | Primary prompt — the user's intent for this stage. Upstream text inputs are treated as additional context. | |
| texts | COMFY_AUTOGROW_V3 | — | |
| images | COMFY_AUTOGROW_V3 | — | |
| models | COMFY_AUTOGROW_V3 | — | |
| captured_image | STRING | Internal — /view? URL of the latest preview-viewport snapshot. Written by the 3D preview in the node body; becomes the `image` output. | |
| custom_params | STRING | {} | Internal — JSON of user-defined parameter attachments/values for this node. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| model | COMFYTV_MODEL | — |
| image | COMFYTV_IMAGE | — |