Object Multires External Save
Write multires displacement to an external file
- BPY_OBJ
- sort_method
- BPY_OBJ
Object_MultiresExternalSave writes a Multires modifier's displacement data out to external .bpyx files instead of keeping it inside the Blender file. It's the generated wrapper for bpy.ops.object.multires_external_save(), and it's the most cluttered node in the Object_* family - not because it's complicated, but because Blender's file-browser dialog shipped its entire property set along for the ride.
Why you'd bother
External multires data exists for one main reason: keep the .blend file small, or hand displacement around separately. For an avatar pipeline it's a niche choice - you'd use it if a mesh layer's detail is heavy and you want the exported file lean, or if you're moving displacement between machines. If that's not your situation, you can safely skip this node.
The inputs that matter
- BPY_OBJ (in and out) - the object carrying the Multires modifier.
- filepath - where the
.bpyxfile lands. This is the one you'll actually set. - modifier - the exact name of the Multires modifier, e.g.
Multires. - The rest -
filter_blender,filter_image,filter_btx,filemode,display_type,relative_path,check_existing,sort_methodand friends - are the file browser's own dialog properties that got auto-exported into the node. In a headless ComfyUI context most of them do nothing visible. Leave them alone.
Output is the same BPY_OBJ. Pair this with Object_MultiresExternalPack if you want to pull the data back in later.
How it works
Standard Object_* plumbing: the node makes your BPY_OBJ the active object in the shared headless Blender scene and runs the operator with the props you set. Because the underlying operator is normally driven by a file-save dialog, you're replacing the dialog with the filepath string. Give it an absolute path you can actually write to - the headless process doesn't have a "choose folder" UI.
Installing it
It ships in Avatar Graph; you install the pack once:
- ComfyUI Manager: search "Avatar Graph", install, restart.
- Or:
cd ComfyUI/custom_nodes
git clone https://github.com/avatechai/avatar-graph-comfyui
cd avatar-graph-comfyui && python -m pip install -r requirements.txt
The recurring catch: the pack pins bpy==3.6.0, which needs Python 3.10. On newer Python it's "no module named bpy" and nothing loads. Windows: use the README's bundled ComfyUI_3.10.7z and run_nvidia_gpu_3.10.bat. Elsewhere: conda with python=3.10.
Gotchas
- If
filepathpoints somewhere unwritable, the save fails silently or errors out - check the path, not the node. - The shared Blender scene resets between graph runs (Avatar Main Output triggers it), so the object and its modifier only exist within a single run.
- Remember the counterpart:
Object_MultiresExternalPackrestores external data into the file. If a workflow imports this node and you don't actually need external displacement, deleting it is usually the right call.
Inputs (26)
| Name | Type | Default | Description |
|---|---|---|---|
| BPY_OBJopt | BPY_OBJ | — | |
| filepathopt | STRING | — | |
| hide_props_regionopt | BOOLEAN | true | — |
| check_existingopt | BOOLEAN | true | — |
| filter_blenderopt | BOOLEAN | false | — |
| filter_backupopt | BOOLEAN | false | — |
| filter_imageopt | BOOLEAN | false | — |
| filter_movieopt | BOOLEAN | false | — |
| filter_pythonopt | BOOLEAN | false | — |
| filter_fontopt | BOOLEAN | false | — |
| filter_soundopt | BOOLEAN | false | — |
| filter_textopt | BOOLEAN | false | — |
| filter_archiveopt | BOOLEAN | false | — |
| filter_btxopt | BOOLEAN | true | — |
| filter_colladaopt | BOOLEAN | false | — |
| filter_alembicopt | BOOLEAN | false | — |
| filter_usdopt | BOOLEAN | false | — |
| filter_objopt | BOOLEAN | false | — |
| filter_volumeopt | BOOLEAN | false | — |
| filter_folderopt | BOOLEAN | true | — |
| filter_blenlibopt | BOOLEAN | false | — |
| filemodeopt | INT | 91–9 | — |
| relative_pathopt | BOOLEAN | true | — |
| display_typeopt | COMBO | 4 options: DEFAULT, LIST_VERTICAL, LIST_HORIZONTAL, THUMBNAIL | |
| sort_methodopt | B_ENUM | — | |
| modifieropt | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| BPY_OBJ | BPY_OBJ | — |