Photoshop Image Output Plan
Plan the layer before the pixels exist
- image_output_plan_json
- manifest_line
- summary_json
MKRPhotoshopImageOutputPlan builds the plan that routes live image output into Photoshop: where the file lands, what role it plays, what layer it should become, and how to place it. It's a pure JSON builder - nothing is written or imported - and its output drives MKRPhotoshopImageOutput, which does the writing, and then the Photoshop UXP plugin, which does the placement.
This is the node you'd reach for when you're iterating a look and want each generation to land in Photoshop as a real layer, not dumped into a downloads folder. Because the plan is inspectable text, you can change the whole handoff by editing four fields, and the pack's manifest_line output means a delivery or review node can know exactly which file became which layer.
The inputs that matter
- asset_path - the destination path for the generated file. Shared filesystem, reachable by ComfyUI and Photoshop. The one field that genuinely has to be right.
- apply_mode - how the plugin should place the asset:
new_layer- default. Drop it in as a fresh layer. Right for iterating looks without clobbering anything.replace_layer_pixels- swap the pixels of an existing layer, keeping its name, transform, and stacking. The compositing-in-place choice.smart_object- place as a linked smart object so re-renders update without re-importing.
- target_name - the layer name (
MKRShift Resultdefault). Same name across runs → the plugin updates rather than stacks. - image_role - a free-text role label (
layer_artdefault) the plugin can use to sort or route assets. Metadata, but metadata that keeps live sessions organized.
Optional: blend_mode (default normal) passes a blend hint to the plugin, target_document_name aims at a specific open document if you run several, and transport_plan_json attaches a transport plan.
The outputs
- image_output_plan_json - the plan, schema
mkrshift_photoshop_image_output_plan_v1. The wire to MKRPhotoshopImageOutput. - manifest_line - a compact
target,apply_mode,pathline for manifests. - summary_json - target, mode, role, path presence, warnings.
Installing
Pack install:
cd ComfyUI/custom_nodes
git clone https://github.com/criskb/MKRShift_Nodes
restart, or Manager → "MKRShift". No dependencies, no models.
Gotchas
Pure-builder caveat, repeated because it keeps biting: no warnings means well-formed, not workable. A plan with an unreachable asset_path is perfectly clean. And in a live look-dev loop, new_layer with a fixed target_name is your friend - it's how the plugin updates one layer instead of building a stack of "MKRShift Result 1, 2, 3..." that you'll have to delete. Keep target_name stable while iterating, change it when you actually want a new layer. The plugin is the last mile; this node only gets a file to a disk.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| asset_path | STRING | — | |
| image_role | STRING | layer_art | — |
| target_name | STRING | MKRShift Result | — |
| apply_mode | COMBO | new_layer | 3 options: new_layer, replace_layer_pixels, smart_object |
| blend_modeopt | STRING | normal | — |
| target_document_nameopt | STRING | — | |
| transport_plan_jsonopt | STRING | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| image_output_plan_json | STRING | — |
| manifest_line | STRING | — |
| summary_json | STRING | — |