Nodes/Melite Autoremesher Nodes/AutoRemesher (quad)
ComfyUI Node

AutoRemesher (quad)

Your AI Mesh Is Triangle Soup — AutoRemesher (quad) Puts Quads Back On It

By JayDataEngineer·Created 2 months ago·Updated 26 days ago· 1
AutoRemesher (quad)
    • glb_path
    ◄glb_path►
    ◄preset▾►
    ◄target_quads0►
    ◄filename_prefixautoremesher/remeshed►
    ◄edge_scaling0.00►
    ◄sharp_edge0.00►
    ◄adaptivity0.00►
    ◄anisotropy0.00►

    The problem this node exists for

    Every open image-to-3D model - Hunyuan3D, TRELLIS, TripoSR, the whole zoo - hands you the same thing: a good silhouette wrapped around geometry nobody wants to work with. The field's standing verdict, from the Hunyuan3D 2.0 launch thread and never overturned since: "topology is still terrible for any sort of skeletal animation, but they seem good for static meshes." No edge loops, just triangles scattered by a marching-cubes pass rather than laid out by a human.

    Two honest answers. Accept it and print the thing - a slicer wants watertight, not topology, hence the field's shrug: "Just remesh that shit." Or re-lay the surface, keeping the shape and replacing the topology with quads that flow along the form.

    AutoRemesher (in the node menu as AutoRemesher (quad), category melite/mesh) is the second one, wired into the graph. Give it a GLB, get a GLB back with quad edge flow. It won't fix your UVs and it isn't a retopo artist in a box - but it's the difference between a mesh you open in Blender and wince at, and one you can start building on.

    The two knobs that matter

    glb_path is a string path, not a MESH socket - which makes this a terminal node rather than a link in a 3D chain. Point it at a .glb that something already wrote, and wire nothing into it. You can't feed it a live mesh.

    target_quads is your polygon budget, an INT from 0 to 200,000 (tooltip: 0 = use the preset budget). Which brings us to preset, six budget classes: rock 5K, prop 10K, large_prop 20K, creature 20K, complex_creature 50K, hero 80K. The chain is explicit > preset > defaults, and nothing resolves silently - if no budget arrives, the node raises instead of guessing.

    Here's the trap, straight from the shipped code: the preset YAMLs put target_quads at the top level, but load_presets() reads it out of a params: block that isn't there. Every preset loads empty, so target_quads = 0 fails loudly with no target_quads … silent defaults are banned. Until the YAMLs are nested properly, set target_quads by hand - 5K for a rock, 20–50K for a creature - and treat the preset dropdown as a label.

    filename_prefix defaults to autoremesher/remeshed, so results land in output/autoremesher/ and count up. The one output is glb_path - a STRING path, useful to any downstream node that takes a path, and not something you can hand to the native 3D preview nodes.

    Four optional floats - edge_scaling (0–4), sharp_edge (0–180), adaptivity (0–2), anisotropy (0–4) - pass to the CLI. At 0 they fall back to the built-in defaults; the two worth touching are sharp_edge, the crease angle to preserve on a hard-surface prop, and adaptivity, which lets quad density follow the detail.

    What's actually running

    This pack vendors the huxingyi/autoremesher CLI as a pinned release binary, and the node is a thin wrapper: trimesh converts your GLB to OBJ in-process, the binary runs as a subprocess with QT_QPA_PLATFORM=offscreen (a bad remesh can only fail the node, never your ComfyUI process), and trimesh reads the OBJ back and writes the GLB.

    Installing it

    The easy door: ComfyUI Manager → search the pack title → install → restart. The manual door is the usual cd ComfyUI/custom_nodes && git clone https://github.com/JayDataEngineer/melite-autoremesher-nodes, then python install.py inside the pack folder before restarting.

    install.py is the part worth knowing: it downloads one sha256-pinned release asset into the pack's native/ directory, marks it executable, and refuses a hash mismatch. The Python deps are just trimesh and pyyaml - no CUDA build, no compiled extensions. In a corner of the ecosystem where ComfyUI-3D-Pack's pointnet2_ops-class extensions must compile against your exact torch and CUDA, that's a very good look.

    When it goes wrong

    • autoremesher binary not found - install.py never ran, or the download failed. Re-run the Manager install, or build the CLI and point AUTOREMESHER_BIN at it. You'll see this when you add the node: the check runs while the node builds its input schema.
    • no target_quads … silent defaults are banned - you left target_quads at 0 and the preset was empty, per the bug above. Type a number.
    • A raw TimeoutExpired - the CLI runs under a fixed two-minute subprocess timeout that isn't exposed as a widget, and it fails without a friendly message.
    • Your quads came back as triangles. GLB is triangles-only and the OBJ is triangulated on export. The quad edge flow survives - that's the part that matters - but use Tris to Quads in Blender if you want faces too.
    • A multi-object GLB got welded into one mesh. The loader forces a single mesh, so a scene with several parts is merged before remeshing. One object per file.

    What it won't do

    It won't re-unwrap your UVs, and it won't turn a generated blob into a production hero asset. Retopo, re-UV and rigging are where the time goes; a remesher shaves the first of those three. What it gives you is a mesh whose wires run with the shape instead of across it - the thing you were missing.

    Categorymelite/mesh

    Inputs (8)

    NameTypeDefaultDescription
    glb_pathSTRING—
    presetCOMBO6 options: complex_creature, creature, hero, large_prop, prop, rock
    target_quadsINT00–2000000 = use the preset budget
    filename_prefixSTRINGautoremesher/remeshed—
    edge_scalingoptFLOAT0.000–40 = preset default
    sharp_edgeoptFLOAT0.000–180—
    adaptivityoptFLOAT0.000–2—
    anisotropyoptFLOAT0.000–4—

    Outputs (1)

    NameTypeDescription
    glb_pathSTRING—