A layered raster image editor for macOS, in the spirit of Paint.NET. Native AppKit, no third-party dependencies.
Documents and layers. An image is a stack of layers, each one a premultiplied BGRA8 bitmap. Layers carry a name, visibility, opacity and one of fourteen blend modes, and are composited top-down every time the canvas redraws. Every edit pushes a snapshot onto the history, so the History palette is a list you can click back into rather than a fixed number of undo steps.
Layers palette. ⇧- or ⌘-click to pick several layers, then delete, duplicate, group, merge or drag them together; ⌥-drag copies. Press an eye and drag down the column to hide a run of layers in one step. Right-click a row for everything else.
Masks. A layer mask hides the layer wherever it's painted black, and every paint tool works on it. Click a thumbnail to paint the layer or its mask, ⇧-click the mask to turn it off, ⌥-click it to see it on its own. ⌥-click the line between two rows (or ⌥⌘G) to clip the upper layer to the one below, so it only shows inside that layer's pixels.
Tools. Twenty-five of them, each with a one-key shortcut shown in its tooltip and rebindable under Sketchy ▸ Tool Shortcuts. Tools sharing a key cycle through each other.
The set is rectangle, ellipse, lasso and polygon lasso selections, magic wand, brush, pencil, eraser, bucket, gradient, clone stamp, recolor, colour picker, text, line, and thirteen shapes. The options bar rebuilds itself around whichever tool is active, so it only ever shows settings that tool actually uses. Left-drag paints with the primary colour, right-drag with the secondary.
Selections. Hold ⌥ while dragging to add a region, ⌘ to subtract, ⌥⌘ to intersect; a click with no drag clears the selection. The magic wand traces the boundary of what it matched, so the marching ants outline the region rather than hatching it. Move Selection drags and resizes the outline; Move Selected Pixels lifts the pixels themselves.
Edit ▸ Modify Selection expands, contracts or feathers the outline, and a feathered edge fades every fill, brush, erase and copy. ⌘-click a layer thumbnail to select its pixels (⇧ adds, ⌥ subtracts). Select Subject (⌥⌘A) and the wand's Object mode find things in a photo with Vision on macOS 14 and later. Color Range picks every pixel near the primary colour.
Floating pixels. A paste larger than the canvas asks first: expand the canvas to hold it, or keep the canvas and let the paste float. Floating pixels hover above the canvas at full size until you commit them, so an image wider than the canvas can be dragged back into view without losing what hung over the edge. They carry resize handles, and dragging one past its anchor mirrors them.
Pixels stay pixels. Scaling defaults to nearest neighbour, so pixel art keeps hard edges. Four other kernels sit beside it: Bilinear, Smooth, Lanczos for a sharp enlargement, and Box Average, which averages every source pixel a destination pixel covers and so holds detail through a big reduction. The status bar reads out the size of whatever you are selecting, moving or drawing.
Palettes. Tools, Colors, History and Layers float over the window or dock into either side of it, collapse to their headers, and reflow as the rail narrows. Documents open as tabs of one window, and the palettes follow the active tab. The layout is remembered between launches.
Files. .sketchy is the native format: a binary property list holding the
layer stack with each layer's pixels as PNG. PNG, JPEG, TIFF, BMP, GIF, HEIC
and WebP are read and written, flattened on the way out.
Exporting to a file size. File ▸ Export to a File Size takes a range in kilobytes rather than a quality slider, and encodes the flattened image repeatedly — trading quality, then pixels — until the file lands inside it. Choose which dial it is allowed to turn, and which kernel it scales with; PNG and TIFF have no quality to give, so they are fitted by dimensions alone. A range the format cannot reach is reported with the closest it managed, to take or leave.
Bug reports and feature requests go in
GitHub Issues. For a bug, the
useful things to include are your macOS version, what you did, what happened
instead, and — if the document matters — a .sketchy file that reproduces it.
Questions and help: open a discussion or reach out through sketchy.tools.
Sketchy Source License — source-available, not open source.
Read the code, build it, change it, and use your own build for anything you like, including work you are paid for. What you cannot do is hand builds or source on to other people; that is the part a purchase covers, and it is what funds the app: https://sketchy.tools.
Built by John Aquino.
Sketchy is an independent project. It is not affiliated with, endorsed by, or derived from the Paint.NET source code; it only borrows the interface ideas.
