IAMCCS_goyAIcanvas-easy
An entire image editor hiding inside one ComfyUI node
- goya_easy_state
This node is a whole image editor wearing a ComfyUI costume. Add IAMCCSGoyaCanvasEasyNode to your graph, click the little logo in its corner, and a full browser-based canvas app opens: text-to-image, image-to-image, draw, inpaint, outpaint, upscale, model picker, LoRA stack, gallery - all in one dock instead of forty nodes and a pile of wires.
That's the whole pitch, and it comes from a real complaint. ComfyUI is a graph, not an app; the ecosystem doc even tracks the running thread of people asking why there's no "put image here, drag mask, click generate." The author, CCS (IAMCCS), is a filmmaker who ships the IAMCCS-nodes video pack, and he wrote in his announcement that he built it because he kept rebuilding the same utility workflow every project. So this is his answer: ComfyUI under the hood, a canvas on top.
How it works
The node itself is a thin shell. It's an output node with one string input, goya_easy_state (a JSON blob, default {}), and the same string out. You never touch that field - it's the persistence channel that snapshots the editor's whole state (base64 canvas, mask, prompt, settings) into the graph so your work survives a save/reload. All the real work happens in the browser UI plus backend routes the pack registers at /iamccs/goyai_easy/*.
When you generate, the editor assembles one of the included workflow templates from stock ComfyUI nodes - LoadImage, SaveImage, KSampler, VAEEncode/VAEDecode, ImageToMask, and friends - and runs it for you. Results land in ComfyUI/output/goya_output, which the gallery reads back. So nothing here is magic: it's a front end that knows how to drive ComfyUI, which is exactly the right division of labor. The name is a lie in the best way - it doesn't call any API and needs no key.
Installing it
ComfyUI Manager: search IAMCCS_goyAIcanvas-easy. Or the manual way:
cd ComfyUI/custom_nodes
git clone https://github.com/IAMCCS/IAMCCS_goyAIcanvas-easy
Then restart ComfyUI and hard-refresh the browser (more on that below). There's no requirements.txt - the pack uses numpy, Pillow and aiohttp, all of which ship with ComfyUI. The real prerequisite is models, and none are bundled. The editor lists whatever it finds in your ComfyUI model folders plus anything in extra_model_paths.yaml, so that's where your Z-Image or Flux files go. The README's "commercial-friendly" suggestions are Z-Image Turbo AIO and Flux.2 Klein / 4B; the Krea 2 template additionally needs the Qwen3-VL text encoder and Qwen-Image VAE. Some templates pull in optional packs - GGUF loaders, comfyui-kjnodes, comfyui-inpaint-cropandstitch, SeedVR2 upscale, background removal - install those only if the template you pick asks for them.
Common issues
- Stale or broken editor after updating. The web UI is loaded with build-tagged URLs that cache aggressively. Restart ComfyUI, then hard-refresh the browser (Ctrl+Shift+R). This is in the README's own requirements for a reason.
- "Where are my images?" They go to
ComfyUI/output/goya_output, not the default output folder. - The node looks empty. It's meant to. One boring string input and no widgets is by design - click the node logo to open the editor.
- You can't see your model in the picker. The list is built from model folders plus
extra_model_paths.yaml; check both, and that the file paths actually resolve.
One honest caveat before you commit your workflow to it: a mega-node is a trade, not a win. You get a clean dock, you give up the graph's agility - you can't wire an LLM prompt pipeline or a custom ControlNet stack into the middle of its flow, and that's exactly the criticism the community leveled at the author's earlier all-in-one packs. If your pipeline is a single image at a time, this is great. If your pipeline is a pipeline, keep the spaghetti.
It's an Apache 2.0 pack (attribution to IAMCCS required), but remember the models you run through it carry their own licenses - Z-Image and Flux 4B/Klein are the commercial-friendly picks, Krea 2 is the Community License, and the node grants you nothing by itself.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| goya_easy_state | STRING | {} | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| goya_easy_state | STRING | — |