Blender Image Output
Put your generated image exactly where Blender expects it
- images
- written_paths_json
- primary_path
- summary_json
The Blender roundtrip only feels real when your generated image actually lands where Blender can see it. MKRBlenderImageOutput is that final write-back: it takes your IMAGE batch plus an output plan and writes the files to the path the plan specifies, then reports exactly what it wrote. It's the runtime twin of MKRBlenderImageOutputPlan - one node plans, this one executes. If you're generating new textures or render plates that need to appear in a specific folder for your Blender add-on to pick up, this is the handoff.
Part of MKRShift_Nodes by criskb. Install via ComfyUI Manager (search "MKRShift_Nodes") or git clone https://github.com/criskb/MKRShift_Nodes into custom_nodes/, restart. No models, no extra Python deps.
How it works
You feed it images and an image_output_plan_json (the plan from MKRBlenderImageOutputPlan, which carries the asset_path and how the image should be applied). The node parses the plan, resolves the output directory, and writes the image file - with a filename_override you can use to force a specific name instead of the plan's default. Multiple images become a sequence, which is how texture sets and render passes survive the trip.
The inputs
images(IMAGE) - what you generated.image_output_plan_json- the plan telling it where to write.filename_override(optional) - replaces the plan's filename.
Outputs: written_paths_json (every file it wrote), primary_path (the main one), and summary_json with write warnings.
Real talk
The node writes files; it does not talk to Blender over a socket or drive the add-on. The apply_mode in the plan - texture_image, image_plane, camera_background, compositor_image - describes intent, and the add-on side is what consumes it and actually applies the image to the scene. So the honest workflow is: plan → output writes the file → Blender add-on reads the file and applies it. If you were expecting a live link, temper that; it's a well-defined file contract, which in practice is far more robust than a live connection. Missing directory? It creates it. Wrong path? Check the plan - the node faithfully writes where the plan points, and garbage in means your texture ends up somewhere unexpected.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| image_output_plan_json | STRING | {} | — |
| filename_overrideopt | STRING | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| written_paths_json | STRING | — |
| primary_path | STRING | — |
| summary_json | STRING | — |