Agents drive a layered AI inpainting editor: select by text, inpaint, mask, layers, PSD/ORA export.
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.
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.

@img1Draw 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.
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.
Every feature is a command, and the commands are an MCP server: Help › Copy MCP registration, and Claude Code, Claude Desktop or any other MCP client gets 105 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.)
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 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.
Three boxes drawn and described on an empty canvas (left), and the picture FLUX 3 Image made from them with Generate new (right).
%APPDATA%\Scumble Store), so it can sit beside the GitHub one.Scumble Setup <version>.exe from the
latest release. It is not code-signed yet, so SmartScreen
shows "Windows protected your PC" once: click More info, then Run anyway. After that the app downloads its own
updates and asks before it restarts into a new version.Scumble-<version>-portable-win-x64.zip from the same release. Unpack it into a folder you can
write to, such as 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).The same release carries scumble-<version>.AppImage and scumble-<version>.deb (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.
Planned, not released yet.
Without any of these Scumble still opens, paints, selects, layers, filters, saves and exports, and its in-app models (object selection, background removal, Remove) run on your own machine once downloaded.
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.
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.

.abr files, and 3D objects (.glb) placed into the picture with their own
light..scumble documents keep everything editable (layers, filters, text, 3D objects, prompts and results). Export
PNG, JPEG, WebP, TIFF, PSD and ORA, at a percentage or into a frame of a given size; the AI label panel adds the
EU's label for AI-generated content.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.
--headless and --cmd for scripts (docs/MCP.md).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.
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.
npm install
npm start
npm run dist builds the installer (dist/Scumble Setup <version>.exe, NSIS, unsigned), then npm run dist:portable
the portable zip from the same build (dist/Scumble-<version>-portable-win-x64.zip). Releases are built by GitHub
Actions: a tag v<version> 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.
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.
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.
This listing does not have a supported local package template. Use the maintainer’s documentation for its hosted endpoint, authentication, and client-specific setup. No install command has been inferred.