ComfyUI Node

BytePlus Hyper3D Gen2

Text straight to a mesh

By byteplus-sa·Created 22 days ago·Updated a day ago· 4
BytePlus Hyper3D Gen2
  • images
  • model
  • response
◄mesh_modeQuad►
◄materialPBR►
◄file_formatglb►
◄prompt►
◄seed0►
◄subdivision_levelmedium►
◄quality_override0►
◄hd_texturefalse►
◄high_packfalse►
◄ta_posefalse►
◄use_original_alphafalse►
◄bbox_width0►
◄bbox_height0►
◄bbox_length0►

Almost every open image-to-3D model in ComfyUI works from a picture. Ask for "text to 3D" and what you really get is a two-stage pipeline - text-to-image, then image-to-3D - because that's all open weights offer. Hyper3D Gen2 (the model behind Rodin, from Deemos) skips the first stage: type a prompt, optionally hand it up to five reference images, get a textured mesh back. That's the feature nothing on your own GPU gives you.

The catch is the usual one. It's a hosted API on BytePlus ModelArk, billed to your own key, and your prompt leaves the machine. When Rodin Gen-2 first showed up in a ComfyUI workflow the reaction was consistent - "its just an api workflow……" and "paid API …🤮", with someone pointing at Hunyuan3D as the local option. Fair. But for a text prompt into a prop, or five photos into something cleaner than Hunyuan3D manages, this is the node.

How it works

One background task, not a local sampler. The node posts to the Seedance task endpoint - same plumbing as the rest of this pack's video nodes - with model options as --name value flags inside a text item, your images appended as base64 data URIs (PNG when they have alpha, JPEG otherwise), then polls every four seconds. The finished task carries a file_url that lives 24 hours; the node downloads it immediately and returns it as FILE_3D. Interrupt, and the pending task is deleted instead of left billing.

Mesh quality is the story you've read everywhere in this corner of the ecosystem: great surface, mediocre topology. What's different is the control. mesh_mode gives you Quad (default) if you'll keep editing in Blender - quad loops beat triangle soup the moment you touch them - or Raw for plain triangles. material is the choice that earns its keep: PBR for textures you can relight, Shaded for baked lighting, All for both, None for a clay model you'll texture yourself.

Inputs that matter

prompt is English, up to 400 characters, required when no image is connected. images takes up to five frames of one object - clean, centered, plain background. Use both and the photos anchor the shape while the prompt steers what they don't show.

The polygon controls interact. subdivision_level is a preset (medium, high, low). quality_override is an exact face count and silently wins over the preset, and its legal range depends on mesh mode - 500–1,000,000 for Raw, only 1,000–200,000 for Quad - so a number that worked in one mode errors in the other. Leave it at 0 unless you need a budget.

Then a row of switches, all off by default: hd_texture for higher-res maps, high_pack for the 4K-texture add-on (a paid extra, not a free toggle), ta_pose to force a T- or A-pose on humanoids, use_original_alpha to keep transparent regions of your inputs. bbox_width, bbox_height and bbox_length only apply if all three are set - one or two does nothing. seed (0–65535) is there if you want a repeatable result.

Outputs are model, the FILE_3D - wire it into core's Save 3D (Advanced) to view it and keep it, since this node writes no files - and response, a JSON string with the task ID and file format.

Install

In ComfyUI-Manager search BytePlus ModelArk (listed as ComfyUI BytePlus ModelArk & AI MediaKit), or by hand:

cd ComfyUI/custom_nodes
git clone https://github.com/byteplus-sa/ComfyUI-BytePlus-ModelArk
pip install -r ComfyUI-BytePlus-ModelArk/requirements.txt

Restart afterwards. The requirements are just the BytePlus SDK, httpx and sniffio - no CUDA, nothing compiled, no weights. Then Settings → BytePlus, paste a ModelArk key, pick the key's region, Save. Activate Hyper3D in the ModelArk console for that region first; keys and model availability are per region.

Common issues

A prompt containing --something is rejected. Weird-looking until you know the mechanism: options travel as --option value flags in the same text field as your prompt, so the pack refuses prompt text that looks like a flag rather than let it corrupt the request. Drop the double dash and set the real input instead.

obj comes back without materials. The result link points at the model file alone - no MTL, no texture beside it. Want textures? Export glb.

The node isn't in the menu. The pack only registers its 3D nodes when ComfyUI exposes the core FILE_3D type, i.e. 0.31.0 or newer. Update ComfyUI, not the pack.

401 on everything. Key and region disagree. Fix the region rather than regenerating the key.

"Just one more attempt" is expensive here. Paid task creation is never auto-retried, so a failed submit can't double-bill - your rerun does. Draft at low subdivision, then spend on hd_texture or high_pack only when it earns its keep.

Last thing: hard-surface, prop-shaped objects come out well; faces, animals and cloth behave like every generator in the field, which is to say they'll disappoint you. And if you'd rather keep the spend inside ComfyUI, Rodin ships as an official Comfy partner node too - this pack's edge is your own BytePlus account, not a different model.

CategoryBytePlus ModelArk/3D

Inputs (15)

NameTypeDefaultDescription
mesh_modeCOMBOQuadQuad: clean quad topology for editing. Raw: triangles.
materialCOMBOPBRPBR: physically based textures. Shaded: baked lighting. All: both. None: white model.
file_formatCOMBOglbFormat of the 3D file. GLB is the default.
promptoptSTRINGDescribe the model in English (up to 400 characters). Required when no image is connected.
imagesoptIMAGEUp to 5 reference images of one object (a batch). A clean, single-object picture on a plain background works best.
seedoptINT00–65535Seed for repeatable results (0-65535).
subdivision_leveloptCOMBOmediumPolygon count level. Ignored when quality_override is set.
quality_overrideoptINT00–1000000Exact face count. 0 = use subdivision_level. Raw: 500-1,000,000. Quad: 1,000-200,000.
hd_textureoptBOOLEANfalseGenerate higher resolution textures.
high_packoptBOOLEANfalseHighPack add-on: 4K textures.
ta_poseoptBOOLEANfalseForce a T-pose or A-pose for humanoid characters.
use_original_alphaoptBOOLEANfalseKeep the transparent areas of the input images (only used with images).
bbox_widthoptINT00–10000Bounding box width. Set width, height and length together; 0 = off.
bbox_heightoptINT00–10000Bounding box height. Set width, height and length together; 0 = off.
bbox_lengthoptINT00–10000Bounding box length. Set width, height and length together; 0 = off.

Outputs (2)

NameTypeDescription
modelFILE_3DThe generated 3D model. Connect it to Save 3D Model to keep it, or to any 3D node.
responseSTRINGTask ID and format of the result, as JSON.