Maya Image Output Plan
Decide where and how before anything gets written
- image_output_plan_json
- manifest_line
- summary_json
Describe first, write later
Here's a ComfyUI pattern that's worth getting comfortable with: a plan node that builds a JSON description, and a runtime node that acts on it. MKRMayaImageOutputPlan is the describe side of the pack's Maya image roundtrip. It doesn't write a single pixel - it produces a structured plan that says where the image should land, what role it plays, and how Maya should apply it. Its sibling MKRMayaImageOutput (with the actual IMAGE input) does the writing.
It's part of MKRShift_Nodes, the big DCC-bridge pack by Cris K B. All the pack's host integrations work this way: plan node → JSON → runtime node → files on disk → add-on picks them up.
The inputs
Four required, two optional:
asset_path- where the image should be written (or where the asset already lives, for update-style flows). This is the field that matters most; everything downstream hangs off it.image_role(defaultbase_color) - what the image is for, so the add-on knows whether it's a texture map, a render, or something else.target_name(defaultMKRShiftShader) - the shader/appearance name the image should attach to in Maya.apply_mode- how Maya should apply it:file_texture(classic file-texture connection),aiImage(an Arnold image node), orviewport_preview(just a viewport preview, no shader wiring).- Optional
target_object_name- narrow it to a specific object instead of the whole scene. - Optional
transport_plan_json- if you're using the pack's transport lane (HTTP endpoint, watch folder, etc.), paste a transport plan here and it gets embedded, so the same JSON describes both delivery and application.
The outputs
Three strings, all JSON-ish:
image_output_plan_json- the actual plan (mkrshift_maya_image_output_plan_v1). Wire this intoMKRMayaImageOutput.manifest_line- a compact comma-separated line (host, role, mode, target, path) for manifests and copy decks.summary_json- human-readable confirmation: has a path? which mode? transport plan attached?
Install and the mental model
cd ComfyUI/custom_nodes
git clone https://github.com/criskb/MKRShift_Nodes
Restart, or install "MKRShift Nodes" via ComfyUI Manager. No pip deps, no models, no ffmpeg - this node literally never touches media.
The thing to internalize: you build the plan before you generate, so the same plan node feeds every run and only the generated images change. That's what makes the roundtrip repeatable - you're not re-deciding the file location every time you tweak a prompt. If you find yourself confused about why a plan node exists, remember the graph stays inspectable and auditable: you can read exactly what will be written and where, before a single byte hits disk.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| asset_path | STRING | — | |
| image_role | STRING | base_color | — |
| target_name | STRING | MKRShiftShader | — |
| apply_mode | COMBO | file_texture | 3 options: file_texture, aiImage, viewport_preview |
| target_object_nameopt | STRING | — | |
| transport_plan_jsonopt | STRING | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| image_output_plan_json | STRING | — |
| manifest_line | STRING | — |
| summary_json | STRING | — |