Scumble
An AI-native image editor for ComfyUI and the models you already use.
Inpaint, edit, upscale and generate, and every edit comes back as a layer of its own.
⭐ Star on GitHub · Download · Microsoft Store
Get Scumble
| Platform | Get it | Notes |
|---|---|---|
| Windows | Microsoft Store, or winget install scumble | Signed by Microsoft, no SmartScreen warning, updated by the Store |
| Windows | Installer: Scumble-Setup- | Updates itself; not code-signed yet, so SmartScreen asks once |
| Windows, portable | Zip: Scumble- | No install; keeps its data in a folder beside it |
| Linux (x64) | AppImage or .deb | Early builds made by CI, not run by the author yet; reports welcome |
| macOS | not yet | Planned, not started |
Scumble is free and needs no account of its own. The details, and what it needs to render, are under Installation.
What can it do?
Scumble is a desktop image editor built around AI models. Select part of a picture, or draw boxes on an empty canvas, say what should be there, and the answer comes back as a layer of its own, colour-matched to what surrounds it, that you can mask, blend, filter and export like any other. It renders on your own ComfyUI (on your machine or a remote one), on Comfy Cloud, or through the API keys you may already have for FLUX, GPT Image, Nano Banana, Seedream and more: a key alone is enough, no ComfyUI needed. It is free software (GPL-3.0), runs on Windows today, and is young (0.1.x), so expect rough edges and keep backups of your pictures.
Five things it does well
Every result is its own layer
A result lands over your selection as a new layer, faded in at the edge and colour-matched to the picture around it. The Match slider in the layer's row changes that match at any time, and nothing else is baked in either: mask the layer, erase parts, change its blend mode, put filters and text on top. The picture only becomes one when you flatten.
Say where things go: boxes and @img1
Draw boxes on the picture and describe each one: something new, something kept, moved or removed, a reference picture
placed, words rendered. FLUX 3 Image from Black Forest Labs (on every provider Scumble runs it on) gets the boxes with
the prompt and is told where each thing goes; Ideogram 4 on fal takes the new, kept and text boxes. Reference layers
are named in the prompt as @img1, @img2, and each one goes out under the name the chosen model knows that picture
by.
Your ComfyUI, Comfy Cloud, or just your keys
Recipes instead of node graphs: you pick a model and where it runs. On your own ComfyUI, local or on a rented box such as RunPod, any workflow with the Inpaint Canvas node becomes a recipe, and the ComfyUI button opens your ComfyUI's own page beside the editor to change a recipe's graph and save it back. Comfy Cloud runs on your Comfy key, with 13 recipes from Comfy's own templates. Or paste a key into Settings › API providers: Black Forest Labs, OpenAI, Google, fal.ai, Replicate, OpenRouter and more. Keys go into the system's credential store, never into a settings file.
Agents can drive it
Every feature is a command, and the commands are an MCP server: Help › Copy MCP registration (or, for Claude
Desktop, the .mcpb file of every release, installed with one click), and Claude Code, Claude Desktop or any other
MCP client gets 109 tools to open, select, generate, match and export, in the same window and with the same undo. (A built-in chat assistant on your own key is there too; see The assistant.)
Made for real files
PSD export with layers and masks, OpenRaster with layers, and both open again with their layers. A tile engine with compiled Rust kernels keeps a 15,000 × 10,000 pixel document painting, selecting and exporting without freezing the window, and PNGs up to 65,535 pixels a side open and save in strips. Filters are layers too, on the GPU: 46 film looks, grain, curves, LUTs and more.
!The layer stack: a vignette and a film look as filter layers, a text layer and the base
The photo in the editor screenshots (the woman on the blue car) is a sample picture used to show the features; nothing in it was generated with Scumble. The café picture at the top and below was made in Scumble with FLUX 3 Image.
Before / After
Three boxes drawn and described on an empty canvas (left), and the picture FLUX 3 Image made from them with Generate new (right).
Installation
Windows (10 and 11, 64-bit)
- Microsoft Store: Scumble in the Microsoft Store, or in a
winget install scumble
(winget installs the same Store copy and may ask you to accept the Store's terms first.) Microsoft signs the Store
copy, so it installs without a SmartScreen warning, and the Store keeps it up to date. A new version arrives there
after Microsoft has certified it, so sometimes a little after the GitHub release. The Store copy keeps its own
settings, keys and files (%APPDATA%\Scumble Store), so it can sit beside the GitHub one.
- Installer from GitHub:
Scumble-Setup-from the.exe
- Portable zip:
Scumble-from the same release. Unpack it into a folder you can-portable-win-x64.zip
C:\Tools (not Program Files, not a folder OneDrive syncs), and start the Scumble.exe in its
Scumble folder (SmartScreen asks once, as for the installer). Everything it stores stays in a data folder beside it, so it runs beside an installed Scumble.
It does not update itself: it tells you when a new version is out, and you unpack the new zip over the old one (the
data folder stays). API keys are encrypted for the Windows account, so on another PC they have to be typed again
(and after that possibly on the first PC too).
Linux
The same release carries scumble- and scumble- (x64). **They are built by CI and
have not been run by the author yet; reports are welcome** in the
issues. Details are under Linux notes below.
macOS
Planned, not started yet.
What you need to render
- Only an API key: Settings › API providers (Ctrl+,), paste the key, Save. No ComfyUI and no server; you pay
- Your own ComfyUI: the node pack ComfyUI-InpaintCanvas
custom_nodes
folder, then restart ComfyUI (the pack needs no extra Python packages):
cd ComfyUI/custom_nodes
git clone https://github.com/DenRakEiw/ComfyUI-InpaintCanvas
The ComfyUI Manager does not list the pack at the moment; once it does, you can install it from there too. Then type the server's address in Scumble's top bar and press Connect. Scumble checks for the pack when it connects and says so when it is missing; it does not install it for you.
- Comfy Cloud: your Comfy key in Settings › API providers; the same key runs Comfy Router.
Demo: videos and the manual
- Videos: "Scumble, explained by someone who did not ask" (4:40) and
- Manual: from the first picture to the export. The same text ships
⭐ If you like it
If Scumble is useful to you, a star on GitHub helps other people find it. Something broken? Open an issue with what you did and what happened; Ctrl+Shift+L opens the console, which shows the path of the log file. What is being built, what was measured and what did not work is on the dev blog, and CHANGELOG.md lists every version.
What has been tried live
Scumble is at 0.1.x and not every feature has been tested end to end. Run against the real thing so far: local rendering through ComfyUI, the in-app helper models, the film pack, the command core, the MCP server, the tile engine on large documents and auto-update; among the API providers FLUX 3 Image on Black Forest Labs (with boxes), OpenRouter and Comfy Router, GPT Image 2.5 through OpenRouter, GPT Image 2 and Nano Banana 2 on Comfy Router, Ideogram 4 on fal (with boxes), Qwen Image 2.1 Edit on Comfy Cloud, and the upscalers Topaz Precision on fal and Magnific Precision and Creative on Magnific; on a local ComfyUI the Realism Pass (Windows only, RTX only) and RTX Video Super Resolution, the latter once on Comfy Cloud too. The other API routes were built from the providers' documentation and have not run against the live services yet, nor have the assistant's model calls, the portable zip on a second PC, or the Linux builds.
Features in detail
Select, prompt, generate
- Selection by brush, rectangle, ellipse, lasso, magic wand, object hover (SAM2, in the app) or by text (SAM3 on your
- Models: FLUX 3 Image, FLUX.2 (max, pro, flex, klein) and FLUX.1 Fill from Black Forest Labs; GPT Image 2.5 Flare /
- Your own workflow becomes a recipe when it holds an Inpaint Canvas node. The ComfyUI window (Ctrl+Shift+K) shows
- Comfy Cloud has a mode of its own beside local and api. Thirteen recipes from Comfy's templates come with
- Generate new makes the base picture from the prompt alone, locally or through a provider, and you edit it from
- Boxes in the prompt for FLUX 3 Image and Ideogram 4 (on fal): the Boxes tool (X) draws them, a double-click
- Prompt upsampling through a stored API key or a local OpenAI-compatible server, with your own prompt-writing rules
Retouch, upscale, refine
- Clone, heal, smudge, dodge and burn, liquify, and Patch for a whole area. Remove and Content-aware move fill
- Object masks (SAM2) and background removal (BiRefNet, RMBG) run in the app through ONNX Runtime.
- Upscale takes the selection (it comes back as a layer) or the whole picture (it becomes the new base, every layer
- Realism Pass (Windows only, RTX only), a refiner for generated pictures: it sends the picture through your own
Layers, filters, text
- A full layer stack: paint, image, text and filter layers, groups, masks, blend modes (the usual eight and linear
- Colour match per layer, non-destructive, matched to the picture around the layer or to what lies below it.
- Filter layers on the GPU (WebGL2, with a processor fallback): grain with film presets, curves, levels, colour
- A shape tool, custom brushes from
.abrfiles, and 3D objects (.glb) placed into the picture with their own
.scumbledocuments keep everything editable (layers, filters, text, 3D objects, prompts and results). Export
The assistant
A chat column next to the canvas (Ctrl+Shift+A), on your own key: Anthropic, OpenAI, Google or any OpenAI-compatible endpoint (OpenRouter, DeepSeek, Moonshot / Kimi, Z.ai / GLM, ToAPIs, WaveSpeed, Oxen.ai, or a local server). It drives the editor through the same commands an MCP client gets. Everything that costs money, queues on your ComfyUI, clears the undo stack or touches a layer it did not make asks first. Ctrl+Z takes back each of its steps; chats are saved with their screenshots, and Settings › Assistant deletes everything it stored. What leaves your machine per provider and what it costs: docs/ASSISTANT.md.
Large pictures, plugins, agents
- The tile engine keeps the picture, every layer and every mask in tiles, and the pixel kernels run as compiled Rust
- JavaScript plugins (filters with GPU and processor paths, panels, menu actions, tools, commands) and a command core
- MCP server for any MCP client (an
.mcpbbundle for Claude Desktop with every release), plus--headlessand
--cmd for scripts (docs/MCP.md).
- Tabs with session restore, a local file mirror (no server needed to reopen your work), a console and a log file,
Linux notes
The AppImage: chmod +x it and start it; it updates itself like the Windows app (the .deb does not: install the next
one over it). On Ubuntu 23.10 and later AppArmor's limit on unprivileged user namespaces may keep Electron's sandbox,
and so the AppImage, from starting; the .deb installs the sandbox helper properly. The helper models run on the
processor on Linux. API keys go into the desktop's keyring (GNOME Keyring, KWallet); without one, *Settings › API
providers* says the keys are only obfuscated.
First steps
For an API model, put its key into Settings › API providers (Ctrl+,). For your own ComfyUI, type its URL in the top
bar (default http://127.0.0.1:8188) and press Connect. Then open a picture (Ctrl+O, drop, paste), paint a
selection, type a prompt and Generate (Ctrl+Enter). Ctrl+S saves the document as a .scumble file, Ctrl+Shift+E
exports the picture. Every document is a tab (Ctrl+T new, Ctrl+W close, Ctrl+Tab next); a run keeps going while
another tab is in front. Ctrl+Shift+A opens the assistant, F1 the manual.
Every image the editor uploads or receives is kept under %APPDATA%/Scumble/files/ (in a portable copy data/files/
beside Scumble.exe), in input/ and output/ folders that mirror ComfyUI's. The server only holds copies: before a
run the app uploads what the server lacks, so a fresh or restarted ComfyUI (RunPod) works without reloading the
document, and the last session comes back at the next start even with no server connected.
Run from source
npm install
npm start
npm run dist builds the installer (dist/Scumble Setup , NSIS, unsigned), then npm run dist:portable
the portable zip from the same build (dist/Scumble-). Releases are built by GitHub
Actions: a tag v that matches package.json builds a draft release with the installer, its blockmap,
latest.yml (the auto-update feed) and the portable zip; publishing the draft makes it visible to the app. The Rust
pixel kernels are committed as renderer/editor/px/px.wasm; python tools/build_px.py rebuilds them.
The tests live in tools/ (docs/TESTING.md says what each covers), and tools/run_gates.sh runs
a list of them on a fresh instance. How releases are built, who approves them and what the app sends over the network
is in the code signing policy. See CLAUDE.md for the development notes.
Layout
electron/main/ main process: window, scumble:// scheme with the ComfyUI proxy, websocket, menu, dialogs, settings,
file mirror, keys.js (safeStorage), recipes.js, llm.js + llm_custom.js (prompt upsampling, the user's
own models), providers/ (one adapter per API provider), onnx/ (SAM2, matting), plugins.js,
updater.js (GitHub releases), bridge.js + local.js + mcp/ (agents), assistant/ (the loop, the
policy, the four model adapters, the chat store), comfyview.js (the ComfyUI window),
documents.js + docfile.js (.scumble files)
electron/preload.js
renderer/ shell.js (connection bar, recipe picker, tabs, settings), commands.js (the command core),
plugins.js (plugin loader and the scumble API), assistant.js (the chat panel)
renderer/editor/ the editor, shared with the ComfyUI node (docs/BUILD_NODE.md); host.js is the app side of it,
inpaint_filters_gl.js the WebGL2 filter path, stitch.js the in-app crop / stitch for provider runs,
inpaint_tiles.js + inpaint_arena.js + inpaint_pool.js the tile engine and its workers, px/ the Rust
kernels (wasm), inpaint_bands.js the strip writers
crates/px/ the Rust source of the pixel kernels
recipes/ ComfyUI recipes, Comfy Cloud recipes and model recipes (one per model, a variant per provider),
docs/RECIPES.md
plugins/ built-in plugins: sample, film (the film pack), glb (3D objects), ailabel (the EU AI label),
boxes (boxes in the prompt), and two skins
docker/runpod/ Dockerfile + provision.sh for a ComfyUI box on RunPod (draft, docs/RUNPOD.md)
tools/ build_node.py (the node's editor), build_px.py (the kernels), cdp.py (DevTools driver), the tests,
run_gates.sh
docs/ MANUAL.md, BRIEF.md (vision, decisions, phases), ASSISTANT.md, COMMANDS.md, PLUGINS.md, FILM.md,
MCP.md, RECIPES.md, HELPERS.md, TESTING.md, CODE_SIGNING_POLICY.md and more, images/
.github/workflows/ build.yml (Windows installer and portable zip, Linux AppImage and .deb, draft release on a version tag)
The editor is the same code as the ComfyUI node Inpaint Canvas: if you work inside ComfyUI, you get the same canvas there.
Licence
GPL-3.0, the same licence as the Inpaint Canvas node and ComfyUI. See LICENSE. Free to use, modify and
redistribute; modified versions must be published under the same licence. Bundled fonts are OFL / Apache licensed,
see renderer/editor/fonts/licenses. Film names in the grain presets and the film pack are trademarks of their
owners; the looks are Scumble's own approximations, not licensed products. The get a key links of ToAPIs and
WaveSpeedAI carry the author's referral code.