Nodes/Adachi-Inpaint-Workbench/Internal Layer Commit
ComfyUI Node

Internal Layer Commit

The node you should probably leave alone

By adachi0130·Created 4 days ago·Updated 2 days ago· 3
Internal Layer Commit
  • result
  • IMAGE
◄image►
◄source_data►
◄crop_state{}►
◄blend_data►
◄target►

What it is, and the honest advice

If you found this page by googling the node name, here's the short version: you don't wire this one. Internal Layer Commit is a plumbing node the pack uses to get a generated crop back into the Inline Mask editor in Crop & Blend mode. Its own description says so - "Internal layer sink. Use Inline Mask in Crop & Blend mode." It lives under the _Adachi/internal category and the pack's verification notes record it being hidden from the classic node menu.

So why write it up? Because you'll see it. It shows up when you load a workflow that someone built with Crop & Blend, it shows up in the /prompt payload if you're debugging an API run, and a beginner who finds an unlabelled node with six inputs and no visible purpose tends to delete it. That's the mistake this article exists to prevent.

What it actually does

The docstring is the clearest sentence in the whole pack: "Execution-only sink; keeps the visible feedback loop acyclic at runtime."

That's the mechanism. Inpainting round-trips are conceptually cyclic - the editor produces an image, the sampler produces a result, and the result goes back to the editor. ComfyUI's graph forbids cycles, and a literal feedback wire would fail validation. So the pack splits the loop: the frontend handles adoption (Image Compare's Adopt this result writes the result into the inline source), while the backend uses this node to do the compute half and push the outcome back through UI data instead of a wire.

Concretely, it takes result - the generated crop, as an IMAGE - plus the serialized state of the workspace (image, source_data, crop_state, blend_data, target). It rebuilds the original from the embedded source or the input path, blends the generated patch through the layer mask, writes the new layer to disk as a content-addressed file under input/adachi-inpaint-layers/, and returns two things: the composited image as its normal output, and a ui payload tagged with target and the job id so the editor knows which node and which crop selection the layer belongs to.

That job tag is why a result generated against your previous crop region gets rejected instead of pasted into the wrong spot. It's also why the node is an output node: it has to actually execute every time for the frontend hand-off to happen.

When you'd touch its inputs

Realistically: never. There's a defensible case for reading them while debugging, because they tell you what state the editor thought it was in - crop_state is the crop rectangle and job id as JSON, blend_data is the layer mask, target names the editor node. If adoption is failing and you want to know whether the graph or the browser lost the plot, those values are the evidence.

One genuine gotcha that isn't this node's fault but is worth knowing: the most recent layer is a relative image reference under input/adachi-inpaint-layers/, not something baked into the workflow JSON. Move a workflow with an unmerged crop layer to another machine and the layer won't be there. The README's fix is to include that file, or to flatten the layer and embed the source before you send it.

Install

Same pack, so there's nothing extra to do beyond having the pack:

cd ComfyUI/custom_nodes
git clone https://github.com/adachi0130/Adachi-Inpaint-Workbench.git

Full restart, hard browser refresh. requirements.txt is numpy, Pillow, torch - no model downloads, no extra packages, no frontend build step. If you're on Windows and prefer the installer: powershell -ExecutionPolicy Bypass -File .\install.ps1 -ComfyUIPath "D:\ComfyUI_windows_portable\ComfyUI", which backs up any previous install to user/adachi-workbench-backups/ and leaves restarting to you.

The one failure mode that's real

Deleting it breaks adoption. If you're cleaning up a graph and this node has a result input wired and a target string pointing at an Inline Mask, leaving it in place costs you nothing visible - it doesn't paint, it doesn't sample, it doesn't block anything downstream. Removing it means the editor stops receiving layers, and Crop & Blend quietly stops being a loop.

The pack is also polite about old graphs: an on-prompt normalizer strips obsolete result links off Inline Mask nodes from pre-0.6 workflows, so loading something old won't drag an illegal feedback wire into the queue. If you're on an older workflow and wondering where the layer plumbing went, that's where - the pack moved adoption into Image Compare and cleaned up after itself.

Category_Adachi/internal

Inputs (6)

NameTypeDefaultDescription
resultIMAGE—
imageSTRING—
source_dataSTRING—
crop_stateSTRING{}—
blend_dataSTRING—
targetSTRING—

Outputs (1)

NameTypeDescription
IMAGEIMAGE—