AssetSync
Stop hand-carrying your generated .glb into Blender — AssetSync ports it over
- asset
- assetsync_id
- status
The most annoying part of a 3D-generation workflow was never the model. Hunyuan3D and TRELLIS will happily drop you a textured mesh; the soul-suck is what comes after - finding the .glb, opening Blender, hunting down the import menu, converting units, and repeating for every iteration. AssetSync kills that loop: a ComfyUI node that hands a generated asset directly to Blender, Maya, or Unreal over localhost, with identity tracking so re-running the workflow replaces the old import instead of piling up duplicates.
The README's framing is exactly right: traditional is Generate → Find → Copy → Convert → Browse → Import → Fix → Repeat. AssetSync collapses the whole second half into one node.
What it actually is
One node, plus three small "receivers" that live inside the DCCs themselves. The ComfyUI side is deliberately generator-agnostic - it doesn't care whether your mesh came from ComfyUI's native Hunyuan3D workflow, Kijai's wrapper, TripoSR, or anywhere else. It just needs a path-carrying input: a string, a ComfyUI-style output dict ({"filename": ..., "type": "output"}), a list, a tuple, or an object with a path attribute. It digs through whatever you feed it and picks the first supported GLB/GLTF/FBX/OBJ.
Two things stand out before you install it. First, the core has zero runtime pip dependencies - pure standard library, refreshing in an ecosystem where dependency conflicts are the number-one complaint. Second, it's brand new (v0.2.0, no community footprint yet): thoughtful design and clean code, but you're an early adopter.
How it works
The node derives a stable UUID from its ComfyUI node ID. That ID is the whole trick: it travels with every sync, so re-running the same node with replace_existing on (the default) replaces only the asset carrying that ID - nothing else in your scene gets touched.
Format conversion happens on the ComfyUI side. Blender and Unreal take GLB/GLTF/FBX directly; Maya's native importer only handles FBX/OBJ, so GLB/GLTF get converted to FBX via headless Blender first - why Maya users need Blender installed even if they never open it. Capability checks reject combinations the pack doesn't support: OBJ to Unreal is refused rather than half-work.
Once resolved, the node POSTs a small JSON import message (mesh path, ID, import options) to the loopback receiver: port 18951 for Blender, 18952 for Maya, 18953 for Unreal. The receiver does the actual import, and the node returns a status string with object/material/texture counts.
The inputs that matter
- asset - your generator's mesh output, in any of the path-carrying shapes above.
- destination - the dropdown: Blender, Maya, or Unreal.
- replace_existing (default on) - re-running with the same ID replaces instead of duplicating. Leave it on; it's the point.
- import_materials / import_textures (both default on) - turn them off if you just want the geometry.
- assetsync_id (optional) - an explicit ID, for when the node moves between workflows but the asset identity should stay put.
Outputs are assetsync_id (feed it into the pack's MotionSync node later if you want skeleton/motion transfer) and status. It's an output node, so the status also renders as a text widget on the canvas.
Installing it - both halves
The ComfyUI half is the easy part:
cd ComfyUI/custom_nodes
git clone https://github.com/jaisurya-dev-art/ComfyUI-AssetSync
Restart ComfyUI - no pip install step. Then wire the final generator output into asset.
The other half is per-DCC and it's where you'll spend real time:
- Blender: Edit → Preferences → Add-ons → Install from Disk, pick
BlenderAssetSync.zipfrom the repo. Receiver auto-starts on 127.0.0.1:18951. - Maya: run
maya_assetsync_setup.bat(enter your four-digit Maya version), restart, enableMayaAssetSync_plugin.pyin the Plug-in Manager. Maya also needs Blender discoverable for any GLB/GLTF input - setblender_executablein%USERPROFILE%\.assetsync\config.json(copy fromconfig/assetsync.example.json) if discovery misses it. - Unreal: copy the
UnrealAssetSyncfolder into your project'sPlugins/, enable it plus Python Editor Script Plugin, Editor Scripting Utilities, and the Interchange glTF importer. Without Interchange, GLB/GLTF imports are rejected by design.
Where people get tripped up
- It doesn't generate anything. If your workflow ends at the mesh, AssetSync has nothing to hand off.
- Unreal's GLB/GLTF path depends on the Interchange glTF importer being enabled. Skip it and the capability check refuses the combo - the README's compatibility table is the contract.
- Blender matters even when you're a Maya person, because GLB→FBX conversion runs through it. Get the discovery order right: config →
ASSETSYNC_BLENDER/BLENDER_EXECUTABLE→ PATH → common install locations. - Set your expectations about the mesh. Generated assets are triangle-soup topology with a pretty surface - fine for static props and blockout, but plan on retopo if anything needs to deform or ship in a game.
Verdict
If you iterate on generated 3D assets more than once a week, the convenience is real and the "no pip deps" design is a breath of fresh air. Just know it's a young pack - ports are loopback-only (don't expose them publicly), there's no remote file transfer, and the per-DCC setup is a one-time cost. For that price you retire the most tedious step in your pipeline.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| asset | * | — | |
| destination | COMBO | 3 options: Blender, Maya, Unreal | |
| asset_name | STRING | — | |
| replace_existing | BOOLEAN | true | — |
| import_materials | BOOLEAN | true | — |
| import_textures | BOOLEAN | true | — |
| assetsync_idopt | STRING | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| assetsync_id | STRING | — |
| status | STRING | — |