3D Model Merger
The dumb-but-essential node that bundles your scene together
- model_1
- model_2
- models
The name oversells it. 3D Model Merger does not merge geometry - it doesn't weld vertices, doesn't boolean anything, doesn't combine meshes into one object. What it actually does is take two MODELS wires and concatenate them into one list. That's it. But in this pack, that's a genuinely useful thing, because BL_Scene_Composer accepts exactly one models input, and the moment your scene has more than one object - a character and a floor, or three props - you need a way to bundle them.
How it works
A MODELS object is a plain Python dict (file path plus transforms, or a camera recipe) - remember, nothing in this pack carries real geometry on the wire. The merger normalizes whatever it gets: a single dict becomes a list, a list stays a list, then it appends the two sides and validates every entry. Models need the keys file_path, position, rotation, scale and name; cameras need type, name, position, rotation, scale, collection_name and focal_length. Anything that doesn't match is logged as invalid and skipped. If both inputs are bad, you get None out.
The inputs are simply model_1 and model_2, both MODELS, and both required - there's no single-input pass-through mode, so if you have one model and one camera, you'll wire both sides anyway.
The one thing to watch
The merger is binary, but each side accepts a whole list, so chaining works cleanly: merge two models into one list, then merge that with a camera. The pack's example workflow does exactly this to assemble three models plus a camera. If a model silently vanishes from the final scene, check the console log - the merger prints "invalid model" warnings for anything that doesn't match its expected dict shape, which usually means a node upstream returned something unexpected.
Wiring it
Output models (MODELS) feeds BL_Scene_Composer's models input. The classic chain: BL_Model_Param → 3D Model Merger → BL_Scene_Composer, with a BL_Camera_Creator tucked into the other merger input when you want to frame the shot.
Installing it
Same as every node in the blender-in-comfyui pack:
cd ComfyUI/custom_nodes
git clone https://github.com/JayLyu/blender-in-comfyui.git
Restart ComfyUI and the Blender category appears. The pack calls Blender via subprocess, which ComfyUI blocks unless you start it with --allow-subprocess. You'll also want Blender 4.4+ in place (auto-downloaded into the pack's blender/ folder on Windows/Linux, manual on macOS). This node itself never touches Blender - the merge is pure Python - but its siblings do, so set the environment up for the whole pack.
Troubleshooting
Since the merger is just list concatenation, problems here are almost always upstream: a None from a failed BL_Model_Param, or a model whose dict is malformed. The log messages are the diagnostic - read them with a ShowText|pysssss node wired to the composer's log output, or watch the ComfyUI console. Fix the source, not the merger.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| model_1 | MODELS | — | |
| model_2 | MODELS | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| models | MODELS | — |