Changelog

See what's new in each release of ArcBrush.

1.6.2

Fixed
  • Puppet Warp: cancelling a mesh build and clicking again straight away now works. The second click used to do nothing at all, leaving the node without a mesh until you changed something else. Pose Strength values outside the normal range also now settle identically in the live drag preview and in the finished result.
  • Copying or duplicating a node no longer carries its internal working state along. Copy, paste, and Alt-drag duplicate kept a short, hand-maintained list of internal values to leave behind, so anything added since slipped through: a Cryptomatte node duplicated while a pick was pending came out with a permanently stuck Colored IDs override, and float-mode and export bookkeeping leaked into pasted nodes. The copy path now uses the same rule that saving, undo, and change detection already use, so a pasted node starts clean.
  • Export Batch no longer crashes on a Japanese file name. Exporting frames whose names contain characters such as カタカナ or 漢字 could crash the app the moment the Export Batch node's Parameters panel previewed the output file name, and again at export time, because the filename template assembled the output path through a narrow-string conversion that can fail on some path bytes. The same conversion shape was found and fixed in the variable-aware template expansion, node preset file names, brush library file names, and brush import journals, so a non-ASCII name now yields exactly that name on disk everywhere a name becomes a file. A template value that is not valid text at all (from a hand-edited project file) now produces a placeholder name instead of an error.
  • Linux: dragging a file over the ArcBrush window no longer crashes the app on the niri compositor (and any other Wayland compositor that announces drag actions to a client that did not ask for them). The crash happened the moment the file entered the window, before any drop, and took the whole app down without a save prompt. Other Wayland compositors and X11 are unaffected; drag-and-drop and clipboard behavior is unchanged where it already worked.
  • macOS: fuller update notes. When a patch release (1.6.1, for example) is offered, the update window now lists everything in that release series, not only the patch, so updating across a major feature release shows you what changed.
  • macOS: update prompt on launch. A newly published update now shows on the next launch, the same as on Windows and Linux. Sparkle's own daily schedule skipped any launch within 24 hours of the previous check, so the prompt could take a day to appear (or only appear from Help > Check for Updates). The Settings > Privacy "Check for updates on startup" toggle now also controls this on macOS.
  • Linux (Wayland): "Copy to Clipboard as PNG" now really puts the image on the clipboard, and says so honestly. In a Wayland session ArcBrush used to publish the image through X11 and rely on the compositor to mirror it, then report success as soon as it held the X11 selection. On a compositor that does not mirror, and on one that starts its X11 bridge only on demand, the message said Copied while other applications received nothing. The image is now published through the Wayland clipboard itself, and success is only reported once that publication actually happened. This needs the wl-clipboard package, which is listed as a Linux requirement and installed by the setup script. Without it, ArcBrush still falls back to the X11 selection but tells you it did, instead of claiming a clean copy. In an X11 session the copy is unchanged, except that a large image is now sent in chunks so it can always be read back whatever its size.
  • Copying an image to the clipboard no longer freezes the interface while it is being prepared. Compressing the picture, and reading it back from disk if it had been paged out, both used to happen while the app waited. They now happen in the background on every platform: a "Copying to clipboard..." message appears and is replaced by the result when it lands, and starting a second copy before the first finishes simply replaces it. On a 4K image this takes over a second of stall out of the interface.
  • Graph Overview no longer crashes the app on a Japanese file name. Dropping a file such as カタカナ.png or 漢字.png onto the canvas could crash the app the next time Graph Overview rendered, because that panel read the file's name through a narrow-string conversion that could fail on some path bytes. Path names now cross that boundary the same explicit way the image decoders already do, so the exact name is shown; a stray byte sequence that isn't valid text at all now shows a blank name instead of crashing.
  • Image Folder, folder packaging, and a handful of other file-path readouts no longer crash or misread a name outside your system's language. The same narrow-string conversion behind the Graph Overview crash above was also reachable from an Image Folder scan mid-cook, a ZIP package's file listing, and several other path-to-text conversions across the app; all of them now cross that boundary the explicit way.
  • Untitled work is now recoverable after a crash. An unsaved, never-saved document's auto-save was previously never offered by the crash-recovery prompt on the next launch, because it had no file on disk to match it against; it is now found and offered. Reverting a document, or opening another one, also now clears that document's own stale auto-save so a crash right afterward doesn't offer back the edits you just discarded. The recovery prompt's Discard button also now removes the auto-save it is actually showing you, rather than one tied to whatever document happens to be open at the moment you click it.

1.6.1

Fixed
  • Corner Pin: the Source toggle in the preview toolbar no longer stays disabled when the foreground comes from a Split Batch output (or any batch), so you can edit the source corners on those inputs.

1.6.0

Added
  • New brush system: Paint and Mask Paint are rebuilt around one app-wide current brush shared by the toolbar, shortcuts, Brush Library, and Brush Studio, with reusable presets, new Spacing / Flow / Jitter and speed-size controls, and a toolbar brush chip.
  • Puppet Warp node: pose and bend artwork by placing pins on an automatically generated mesh and dragging them; the image deforms naturally around the pins you hold still. Click to place pins, drag to pose, Alt+Click or right-click a pin to remove it, and fine-tune with a pin list, Pose Strength and Smoothing dials, adjustable mesh density, and a Rest mode for repositioning anchors. The deformation previews live while you drag, and works across batches.
  • Pressure-sensitive tablets and styluses: brushes respond to real pen pressure, with automatic eraser-tip switching, on Windows and macOS (Linux not supported yet).
  • Pen tilt, twist, and tangential pressure: brush Dynamics can respond to how far and which way your pen is tilted, its barrel twist, and tangential pressure, and a tip's Rotation can follow your tilt direction or twist so a tip that isn't perfectly round turns as you angle or roll the pen. Tilt works on Windows and macOS, twist on Windows only, tangential pressure isn't reported by any supported platform yet, and Linux reads none of them; wherever a sensor is missing the brush falls back to its normal behavior.
  • Image tips and grain textures: brushes can use an image-based tip (tinted alpha, stamped color, or recolored lightness) plus an optional grain texture, embedded in the brush by default or linked to an external file that refreshes within about a second when you edit it in another app.
  • Color dynamics: brush dynamics can shift Hue, Saturation, and Value as you paint, driven by pressure, speed, direction, or randomness, varying per stamp for a confetti-style scatter or holding one value for a whole stroke like hand-mixed paint. A Color Image tip can opt in with Recolor Source Pixels.
  • Brush blend modes: every brush has a Blend Mode (Brush Studio > Rendering) with the same choices as the Layer and Composite nodes, applied once per stroke, so strokes blend with each other and the layer below but a stroke never darkens itself where it crosses its own path. The built-in Chisel Marker uses Multiply so crossing strokes darken like real marker ink.
  • Grain Generator: build a seamless grain texture right in Brush Studio from a curated list of looks (Paper, Stone, Fibers, Swirl, Clouds, Mottle, Speckle, Fine Grain, Cells, Cracks, Craters) with no image file needed, previewed live on a test stroke, and reopen it with Edit... to adjust at any time.
  • Brush stroke stabilization: a Stabilization control smooths hand jitter as you paint, with a guide line to the trailing brush tip and the stroke ending exactly at the tip.
  • Import Photoshop brushes: bring in .abr files through the same Import button, or by dragging one onto the Brush Library. A review screen previews every brush in the file as ArcBrush renders it, with an honest label (Core settings transferred, Approximate, Tip only, or Not imported) rather than a percentage, and expands to show exactly what carried over and what didn't. Each brush arrives under its own name with its own settings, even in packs of hundreds: size, angle, spacing, flow, opacity, count and scatter, basic color jitter, and pen-pressure size and flow response. Brushes from an unsupported Photoshop tool (Mixer, Smudge, Clone Stamp, Dodge, Burn, Sponge, Blur, Sharpen, Bristle, Erodible) come through as a raster tip only, never silently turned into an ordinary paint brush.
  • Import GIMP brushes: .gbr files import the same way as Photoshop brushes, with a non-square tip keeping its original proportions instead of stretching, and its spacing carried over correctly.
  • Brush packs and built-in brushes: share a tagged set as one .arcbbrushpack file, or import a pack or a single .arcbbrush. 29 built-in brushes ship across seven categories (Basic, Sketching, Inking, Painting, Airbrush, Dry Media, FX), including pressure-ready pencils, pens, markers, painting and airbrush tools, textured dry media, and scatter and spatter effects.
  • Restyle Strokes: re-render strokes you've already painted with your current brush, one brush's strokes at a time from its row's "..." menu in a node's Brushes list, or all of them at once from a Restyle All Strokes... button that breaks the choice down by tool so erasing and cloning aren't touched unless you ask. A matching Delete these strokes removes every stroke painted with a given brush in one step. Both are undoable, and neither touches Legacy strokes.
  • From Node: grab any node's cooked output as a brush tip or grain texture straight from the graph, with a From Node button beside Import in Brush Studio's Tip and Grain sections; the result is embedded like an imported image, with no live link back to the node.
  • Brushes list on Paint and Mask Paint nodes: a Brushes section on the Parameters panel lists every distinct brush the node has painted with, showing a preview thumbnail, stroke count, and approximate size per row, with every row action (Make Active, Save to Library, Restyle these strokes, Delete these strokes) behind a single "..." menu and a totals line at the bottom. Older strokes are grouped into one Legacy strokes row.
  • Image tips and grain from color images: picking or dropping a color image with transparency for a mask-based tip or grain asks how to read it (its own alpha, dark marks as paint, light marks as paint, or as a full color tip), so a transparent area is never mistaken for a painted one and a scanned texture on white imports the right way round.
  • Brush categories: every brush has a category, separate from its free-form tags, and the Brush Library groups brushes under collapsible category headers with built-in categories first and uncategorized brushes last. A toolbar button switches back to one flat list, and Edit and Save As New let you pick or type a category.
  • Delete a whole brush category at once: right-click a category header in the Brush Library for Delete Category..., which removes every brush in that category after a confirmation naming the category and the exact count, so an imported pack you decide against goes in one action.
  • Export a whole brush category at once: the same menu offers Export Category (N)..., writing exactly that category to one brush pack. The count in the label is the real number, so an active search or tag filter can never quietly narrow what gets written.
  • Category on import: the Photoshop and GIMP import review screen has a Category field, defaulting to the file's own name with its extension removed, applied to every brush the import publishes; retype it or pick an existing category before importing.
  • Drag and drop brush files: drop a .abr, .gbr, .arcbbrush, or .arcbbrushpack file straight onto the Brush Library to import it.
  • Brush Studio and Brush Library round-trip: a Brush Library row's right-click menu offers Edit in Brush Studio..., and Brush Studio has a magnifying-glass button that reveals the current brush back in the Brush Library.
  • Restore built-in brushes: the Brush Library toolbar's "..." menu can re-add built-in brushes you deleted, or reset all of them to factory settings after confirming; your own brushes, favorites, and tags are never touched.
  • Painting workspace: a new built-in workspace (Window > Workspace) lays out the Node Graph, a Brush Library and Brush Studio stack, the Preview canvas, and a Swatches and Parameters stack across four columns, and hides the panels a painting session doesn't need.
  • Tablet Diagnostics: a new Help > Tablet Diagnostics window shows a live readout of what your pen is actually sending: which input mode your tablet is using (Windows Ink or Wintab, for example), whether the current tip reads as pen or eraser, and a capability table that separates what your hardware reports right now from what your pen has actually been seen doing this session, so an axis your driver claims but your pen never sends reads as "no variation yet" instead of a misleading yes. Live dials, bars, ranges, and history cover pressure, tilt, and twist, and a Copy report button puts a plain-text summary, with no cursor position or other personal content, on your clipboard for a support message.
  • Swatches panel: build named, grouped color palettes saved with your document (Window > Swatches); click a swatch to paint with it whenever a Paint node is active, or drag any color into the panel or out to any color control in the app. Includes a Recent Colors history, a read-only Document Colors section showing every color already used in the graph and where, and import and export through the same palette formats as the Palette node (GPL, ASE, PAL for both, Aseprite for import). Fully usable from the keyboard: arrow keys move through the grid, Enter applies, Space toggles selection, and F2, Delete, Ctrl+C, and Ctrl+V rename, delete, copy, and paste. Dragging a color onto a gradient (Gradient, Gradient Map, Palette From Gradient) adds a stop where it lands, or replaces an existing stop's color when dropped on its handle.
  • Built-in color libraries: the Swatches palette selector lists a catalog of bundled, ready-to-paint palettes grouped into Essentials, General Purpose, Standards, and Pixel Art. The starter sets (a color wheel with every color named, neutral grays, warm and cool neutrals, a crayon box of sixteen familiar colors, pastels, earth and nature, neon accents, portrait tones for skin and hair, the basic web named colors, and the Okabe-Ito colorblind-friendly set) sit alongside popular pixel-art palettes, and every library says what it's for in its tooltip. Pick one to paint from it right away, or use Copy to Document Palettes for an editable copy. A new document with no palettes opens on the Color Wheel set.
  • Visual palette picker: the Swatches palette selector previews each palette with a small color strip beside its name and count, so you recognize a palette by its colors, and groups the list under category headings.
  • Sort swatches by hue, lightness, or saturation: the Swatches overflow menu's Sort by submenu reorders each group's colors by name, hue (grays first, then around the color wheel), lightness, or saturation, each in a single undo step.
  • From Swatches on the Palette node: a button beside Import and Export opens the same palette list as the Swatches panel's selector (document palettes first, then the built-in libraries), and picking one replaces the node's colors, with no file export and import needed. It's a copy, not a link; palettes over 64 colors copy the first 64 and say so, with Send to Node still the place to choose which colors go or to split them across nodes.
  • Compare two Viewer Slots: with two or more slots populated, a Compare toolbar toggle puts any two of them side by side as A and B, with a Swap button to flip which is which. Vertical Wipe and Horizontal Wipe drag a divider across the canvas, Side by Side shows both at once in equal halves, and Flicker hard-cuts between the two on a timer (250 ms, 500 ms, or 1 s, with Pause and Resume) so a small difference jumps out. Both sides share one camera, so panning or zooming moves them together, and each is labeled with its slot and source name. Exit with the same toggle or Escape.
  • Compare shows both pixel values at once: hovering anywhere in Compare reads out the A and B pixel values side by side at the same image coordinate, even where a wipe or Flicker is currently hiding one of them. Right-click for a copy button that puts both readouts on your clipboard together.
  • Waveform Luma and RGB Parade scopes: alongside the existing Histogram, the preview's analysis strip can show a Waveform Luma or an RGB Parade, following your current Exposure, Display View, and Gamma the same way the image itself does. Switch between them from the scope button's caret menu; a Compare session adds an A/B toggle so the strip analyzes whichever side you pick.
  • Move, rotate, scale, and skew individual layers on a Layer node: every row in a Layer node's stack can be transformed on its own, right on the canvas, with the same handles as the Transform node plus new edge-midpoint handles that scale one axis at a time (the Transform node's own gizmo gains those too). Select a row to show its Transform section in the Parameters panel and its handles in the preview, right-click a row for Reset Transform, and a small badge marks any row that has been moved, rotated, scaled, or skewed. Existing projects are unaffected.
  • Click a layer in the preview to select it: hovering a Layer node's preview outlines whichever layer is under the cursor, and clicking selects that row. Clicking a transparent part of a layer passes through to whatever's actually showing underneath instead of always picking the top layer, and clicking where every layer is transparent leaves the selection alone and pans the canvas as usual. A handle you're already dragging always takes priority.
  • Lock a layer: a lock button on each row of a Layer node's stack, next to the visibility eye, keeps that layer from being selected or moved, so a finished background can't be bumped by a stray click while you keep working above it. Everything else stays fully editable, and clicking a locked layer in the preview passes through to whatever's underneath, exactly like clicking a fully transparent spot.
  • Reverse Order button on the Layer node's stack: flip the whole layer stack top to bottom in one click instead of dragging every row, so wiring your composition in natural order no longer buries each new layer at the bottom. Every row's blend mode, opacity, visibility, and transform travels with it, the wires on the canvas physically swap ends to match, and the whole flip is a single undo step.
  • Customizable keyboard shortcuts: every keyboard command in ArcBrush can now be changed from a new Settings > Keyboard tab (also Help > Keyboard Shortcuts...). Search commands by name, description, or by typing the keys themselves; press Record to Find to see what a key already does; give a command a second shortcut; and filter to just the ones you changed, left unassigned, or in conflict. Assigning takes one press: click the shortcut, press the keys, and they're saved immediately. ArcBrush only stops to ask when the keys are genuinely claimed, and then shows you what they'd do and where each command still works before you choose. Escape, text-editing keys, and the platform Quit shortcut stay fixed so the app is never unusable.
  • Shortcuts for adding nodes: assign a key to any node type and press it over the node graph to create that node at the pointer. Nothing is preassigned; set one up from the Add Node section of Settings > Keyboard, or right-click a row in the Node Library and choose Assign Shortcut... Assigned nodes show their key as a badge in the Node Library and the Add Node popup.
  • Take your shortcuts with you: export just your own changes to a file and import them on another machine, with a preview of exactly what would change and a choice of merging with or replacing what you already have. If the shortcut file can't be read, ArcBrush runs on the built-in shortcuts, leaves your file untouched, and offers to restore its backup. Updates never overwrite a shortcut you set: if a new built-in shortcut would have collided with yours, yours is kept and a notice tells you what was skipped.
  • Menus and hints show your shortcuts: every menu row, tooltip, and on-screen hint reads its key from your current shortcuts, so remapping something updates the label everywhere immediately.
  • Inspect node: a Utility node that passes an image or mask through unchanged and reports everything about it: size, channels, bit depth, per-channel minimum, maximum, and average values, alpha coverage, color space, batch frame details, the bounding box of its actual content, and which file it came from. In 32-bit (float) documents it also flags NaN, infinite, negative, and overbright values and points to the first pixel where each occurs, and a Copy Report button puts the full read-out on your clipboard.
  • Graph Overview: with nothing selected, the Parameters panel now shows a full summary of your document instead of just a filename and a node count. A health line calls out failed nodes, missing required inputs, warnings, and stale exports; every output lists its cached and export state; a Sources section shows where content in the graph came from; and further sections cover structural counts, the slowest nodes by their last full cook time, and document depth, working space, variables, and palette and swatch counts. Clicking a row selects that node and can frame it in the Node Graph, and a Copy Graph Report button puts the whole summary on your clipboard as plain text, with no full local file paths, for a bug report. It only reports on results already in memory and never starts new evaluation.
  • Variables panel: define your own named {tokens} (Window > Variables) and reuse them in export paths, import paths, and the Text node, saved per project or globally.
  • Exact source filename tokens: new {source_path}, {source_stem}, {source_filename}, {source_extension}, {source_directory}, {source_relative_path}, {source_sha256}, {source_id}, and {source_count} tokens name the exact file each pixel came from, in export paths. Like {index} and {date}, they resolve when a file is written, so a Text node renders them literally.
  • Type arithmetic into any numeric field: a parameter's text box, a depth-adaptive float field, a position picker's X and Y, and Paste Value now evaluate a typed expression like 100+100, 1920/3, or 2^10 before committing the value, using + - * / ^ and parentheses. Anything that already parsed as a plain number is unaffected; only entries that used to be rejected can now succeed.
  • SVG Import Layers: a Layers section lists the file's shapes and groups as a collapsible tree so you can show or hide any element, or a whole group at once, with a filter box to find elements by name and Show All / Hide All / Expand All / Collapse All. Hovering or clicking a row highlights that element in the preview, and your choices are remembered per file and reset when you point the node at a different SVG.
  • SVG Import vector controls: a Vector section rescales every stroke width, replaces all fills or strokes with a single color, switches the fill rule, and trims paths to reveal only part of each outline, all applied to the vector before it is rasterized so edges stay crisp at any size.
  • SVG files in Image Folder and Image In: both nodes now read .svg files, and SVG Import and Image In gain Width and Height fit modes that scale to a target dimension while keeping the aspect ratio (SVG Import renders vectors crisply at the chosen size instead of resampling).
  • Crop can target an exact size: a Mode picker adds Size alongside the original Edges mode. Enter a Width and Height, each bounded by the input dimensions, then position the crop directly over the source instead of calculating four insets. Switching to Size for the first time starts from the current crop so nothing jumps, and a connected Size Reference fixes the crop dimensions while still showing the full input and letting you move the boundary.
  • Move and resize Crop over the full input: while Crop handles are active, the Preview shows the complete source with the rejected exterior darkened. Drag inside the crop or use its center handle to move it, resize from any edge or corner, or enter exact Left and Top values and use Center crop in Parameters. Tiny on-screen crops keep a reachable Move handle and ask you to zoom in before resizing. The published output is still the tight cropped region, recalculated once when a changed drag ends rather than on every mouse-move frame.
  • Set Aspect for the Crop node: both Edges and Size modes show the crop's current aspect ratio and a Set Aspect... button offering Original, 1:1, common landscape and portrait ratios, or a custom ratio, re-fitting the crop to that shape in a single click.
  • Lock a Crop aspect ratio: a persistent Lock Aspect checkbox beside Set Aspect keeps panel edits and every on-canvas edge or corner proportional to the chosen or current ratio, reducing both Size dimensions together when the input boundary is reached; holding Shift gives the same temporary constraint when the lock is off. Moving the crop never changes its dimensions or stored ratio.
  • Transform can skew: new Skew X and Skew Y controls, in degrees up to 80 either way, shear the image for italic-style slants, fake perspective, and isometric layouts. The on-canvas box, its corner handles, and Ctrl snapping all follow the true skewed shape, and dragging a corner scales it as expected at any skew. Existing projects are unaffected.
  • Skew Transform on the canvas: the Transform overlay gains four diamond handles just outside the middle of each side of the box. Drag the top or bottom one to skew horizontally, the left or right one to skew vertically, with Shift snapping to 15 degree steps and a double-click resetting that skew to zero. They work at any rotation, scale, or pivot, and a handle whose side the pivot has collapsed is hidden rather than left looking draggable.
  • Vignette can be wide, tall, or angled: new Aspect and Rotation controls shape the falloff ellipse beyond the image's own aspect ratio, with Aspect narrowing or widening it and Rotation angling it clockwise. The ellipse keeps its exact shape and size as it turns, so the angle you type is the angle you see, and the on-canvas handles and Ctrl snapping follow the shaped ellipse. Existing projects are unaffected.
  • Shape and angle a vignette on the canvas: the Vignette overlay gains two handles beside the existing size square. Drag the diamond at the top of the ellipse to stretch it taller or wider, with the sides staying put so only the edge you pull moves, and Ctrl snapping back to a plain unshaped ellipse. Drag the knob on the short stalk beyond it to angle the vignette, with Shift snapping to 15 degree steps and a double-click resetting the angle. The knob is live even on an unshaped vignette, so it doubles as the orientation marker.
  • Mask From Image selection modes: a Mode picker chooses what the extracted channel means: Raw keeps it as-is, Above and Below select everything past a threshold, and Range selects a band between a Low and a High value, both ends included. A Tonal Softness control fades the selection in and out around those values, which is different from Feather: softness follows the pixel's brightness, Feather blurs the finished mask across the image. Existing projects keep the exact mask they had.
  • Normal Map methods and edge handling: a Method picker adds Scharr and Central Difference derivative kernels alongside the original (now Sobel 3x3 (Legacy)), scaled for comparable overall strength, and an Edge Handling picker (Reflect, Clamp, Wrap) controls how both the blur and the derivative treat the image's edges, including Wrap for seamless tileable height maps. Invert Y is now a Y Direction picker (OpenGL (+Y) / DirectX (-Y)). Existing projects are unaffected.
  • Dither gains White Noise and Blue Noise methods: two new Method options dither with a deterministic stochastic threshold instead of a fixed Bayer matrix, for a less regular look at the same speed. A Seed control (shared with Noise and Scatter) makes the pattern reproducible, and Phase X and Y offset it in pixels. Existing projects are unaffected.
  • Resize can size one dimension and keep the aspect ratio: the Resize node's Fit Mode gains Width (keep aspect) and Height (keep aspect), the same options Image In offers under Custom Size. Enter the dimension you care about and the other follows the source proportions, with no stretching, letterboxing, or cropping, and the panel reports the size it produced. Existing projects are unaffected.
  • Mask Refine can extend transparent RGB: a new Extend Transparent RGB option (image mode only) fills the color beneath fully transparent pixels with nearby edge color, for straight-alpha texture export, external mip generation, and other tools that read transparent RGB. ArcBrush's own Resize and Transform already resample premultiplied and don't need it. A Radius control sets how far it reaches, and if an Erode or Morphology setting already needs more reach, the larger of the two is used.
  • Edge Detect can grow its edges: a new Expand control widens detected edges outward by a chosen pixel radius, with a Shape option (Round, Square, Diamond) for how corners and diagonals grow.
  • Roto shapes gain Grow and feather Placement controls: Grow expands or shrinks a shape's mask by a pixel amount without redrawing the path, and Placement chooses where the feathered edge falls (Outside, Centered, or Inside the path). Newly drawn shapes feather Outside, so feathering softens the edge without eating into the shape; shapes in existing documents keep the centered feathering they were made with.
  • Magic Wand node: Ctrl+Click in the preview adds a seed point directly, and the point limit is raised from 16 to 64.
  • Maximize a panel to fill the window: press the grave key (the one above Tab) or Ctrl+Shift+M (Cmd+Shift+M on macOS) to instantly fill the window with whichever panel your pointer is over, and press it again to bring back your previous layout, with panel sizes, splits, and selected tabs all where you left them. Works on every dockable panel across every built-in workspace and any layout you've saved yourself, and if ArcBrush closes unexpectedly while a panel is maximized, reopening it restores your real layout.
  • Ranked node search: typing in the Add Node popup or the Node Library search box now orders results by how well they match instead of a fixed order, finding a node by a close alias, one of its parameters, or its description as well as its name, and tolerating a small typo. While a query is active the Node Library shows one flat ranked list rather than category headers, so the best match is always the first row.
  • Default presets for new nodes: click the star beside any saved preset in the Manage Presets window to make it the one every newly created node of that type starts from, or click it again to clear the default. The first time you select a node created this way, the Parameters panel names the preset it started from, with a link to reopen the presets menu and a way to dismiss the note for good.
  • Drop a wire exactly where you want it in a stack: dragging a wire onto Layer, Collect, Arrange, or Scatter shows an insertion rail, so a new connection lands between existing rows instead of always at the end.
  • Reorder by dragging a connected wire: lift a wire off an array input pin and drop it elsewhere on the rail to move that layer, frame, or stamp, or onto another array node to transfer it, in one undo step.
  • Move array items from a menu: right-click an array input pin (or a Layer row or Collect frame row) for Move Up, Move Down, Move to Start, and Move to End.
  • Wheel-nudge any slider, number field, or dropdown: hold Ctrl (Cmd on macOS) and scroll over a slider or a numeric drag field to nudge its value by a sensible increment, or add Shift for a finer step, scrubbing past a slider's visible track up to its true limit. Works across the Parameters panel, Brush Studio, and Settings, and the same gesture steps a closed dropdown to its previous or next choice.
  • Hold right-click and drag to zoom: scrub-zoom smoothly in the node graph and image preview; a quick right-click still opens menus and copies colors.
  • Double-click to reset a slider: double-click a slider's handle to reset it straight to its default value, the same reset the right-click menu already offered, without opening a menu first.
  • Surface Style: Settings > Interface > Theme now has a Surface Style choice for how buttons, sliders, combo boxes, and radio buttons catch the light. Shaded (the new default) gives every control a soft highlight along its top edge and a shadow along its bottom for a raised, tactile look; Flat removes all shading. Changes apply immediately, with no restart.
  • Corner Style: a Corner Style choice next to it switches every panel, control, and node body between Rounded (still the default) and Square corners, applied immediately across the whole app.
  • UI Font: on Windows and macOS, and on Linux when a system default font can be found, Settings > Interface > Text now offers a UI Font choice to use a font already installed on your computer instead of ArcBrush's bundled Figtree. The choice is hidden entirely where no suitable font is found, and switching back to Bundled is always available.
  • Parameter value boxes now line up: every value box in a node's Parameters panel shares one width, so slider tracks all start at the same left edge instead of staggering by row.
  • Hide the preview's info overlays: a new toolbar toggle (or the I key) hides the resolution badge and hover color readout for a clean view of the image.
  • Escape returns to All Frames: while viewing a single frame of a batch, Escape goes back to the All view and returns the frame list to the top, so a frame late in a long batch no longer leaves you scrolling back up. It stands aside for anything else Escape is doing first: cancelling a paint or mask stroke, leaving Roto pen mode, disarming a Cryptomatte or Magic Wand picker, closing the eyedropper, or dismissing a dialog.
  • Natural Name sort for Image Folder: a new Natural Name sort order compares the numbers in filenames as numbers, so frame2 sorts before frame10 instead of after it.
  • Reveal in File Manager: a button on the project summary header shows the saved project file in your file manager, and both it and the node menu's Reveal item can be given shortcuts in Settings > Keyboard.
  • Node groups: a Rename item in the group right-click menu starts the same in-place title edit as double-clicking the label.
  • Return to the grab point after an edge-wrapped pan: panning past the edge of the node graph now returns the cursor to where you grabbed instead of leaving it at the screen edge.
Changed
  • Inpaint fills with a new engine: masked areas are now rebuilt by matching texture and structure from across the whole image instead of growing patches outward from the edge of the hole, so brickwork, fencing, foliage, sand, skies, and contours come back far more convincingly. Inpaint rearranges pixels that are already in your image, so it still cannot bring back a face, a hand, readable text, a logo, or any object that was never visible. Projects saved with an earlier version will fill differently when reopened, because the fill is recalculated on open rather than stored in the project file.
  • Inpaint controls: Patch Size, Iterations, Scales, and Feather are gone, replaced by a single Source Locality slider setting how far across the image the fill looks for texture; the defaults produce the best balanced result with no adjustment.
  • Clone Stamp: now paints with your full brush definition, the same as Brush and Eraser, so an image tip's shape, grain, taper, stroke path, and dynamics (including pen pressure) all apply to cloning, not just size, hardness, and opacity.
  • Split Batch shows what each output actually carries: in Individual mode every output row now reads its frame's name next to the input position it comes from (1 hero_idle, 2 hero_run) instead of image_1, image_2, so picking the right output no longer means counting rows; Chunks, Slice, and Filter modes read Frames 1-3, Selected, Rest, Match, and Reject. Hovering a row shows the full name, the frame's position or its range or role, the port name the wiring still uses, and, in Individual mode, the source file. Long names are shortened in the middle and never make the node wider. Connections are unaffected: the port names behind the labels are unchanged, so nothing in a saved project moves.
  • Palettes go up to 64 colors (was 32): the Palette node's slot cap, Palette From Image's Colors, and Palette From Gradient's Swatch Count all reach 64, and Send to Node, whole-palette drag and drop, and From Swatches share the same limit.
  • Color to grayscale accuracy: converting color to gray or luminance now uses the correct Rec.709 weights for sRGB and Rec.709 content, so results shift slightly, most noticeably on saturated colors (a pure red reads a little darker than before). This affects grayscale image import and export, masks taken from a color image, Normal Map, Displace, Edge Detect, Smart Scale, Pixel Sort, Film Grain, Halftone, Separate, the grayscale toggle on generator nodes, and the eyedropper gray pick.
  • A faster node graph: panning and dragging the graph, and the preview keeping up while you do it, are substantially lighter, with no change to how anything looks or evaluates.
  • The canvas keeps up with your mouse: ArcBrush no longer lets the graphics driver queue frames ahead, so dragging, painting, and panning track the pointer instead of trailing it.
  • Faster blending: compositing layers and images with Multiply, Screen, Darken, Lighten, Linear Dodge, Subtract, Difference, Soft Light, and Exclusion is now substantially faster, especially on large documents and layer stacks, with no visible change to the result.
  • Layer: editing one layer's opacity, blend mode, or transform in a stack with many layers now recomposites only that layer and the ones above it, instead of redrawing the whole stack on every change, so dragging a slider or an on-canvas gizmo in a large stack stays responsive. Layer nodes now hold a bounded, predictable amount of extra memory for this instead of an amount that could grow without limit.
  • Layer node: compositing a layer stack no longer hands each layer off to the GPU and back, so a large stack composites faster and no longer waits behind other GPU-accelerated processing, with no change to the result.
  • Wire auto-routing is now off by default: wires take a simple direct path so dragging nodes stays smooth; turn routing back on with Wire Auto-Routing in Settings > Interface > Node Graph.
  • The analysis strip is part of the layout now: the strip along the bottom of the preview (Histogram, and the new scopes) shrinks the image area the same way the toolbar does instead of floating over the image, so fitting the image (F) fills the space above the strip, resizing the strip reflows a fitted image live, and clicks or scrolling over the strip no longer pan or zoom the image behind it.
  • Project file format updated: a node's up-to-date/stale indicator now stays with the right input even when a node's inputs are added, removed, or reordered, instead of occasionally marking the wrong input stale after a reload. Older projects open and update automatically; projects saved by this version cannot be opened by older ArcBrush versions.
  • Settings window: sections are now a list down the left side instead of a row of tabs, so every name reads in full. The window is larger, you can drag it to whatever size you like, and that size is remembered. It never resizes itself: switching sections, or a section showing you something new, leaves the window exactly where you put it.
  • Easier-to-read tooltips: around 190 tooltips across the parameter panels, menus, status bar, and settings were reformatted to match the rest of the app. A tooltip that lists options now shows them as bullets with the option name in bold, values and file types read as code, and a caveat starts a new paragraph instead of running on at the end of a sentence. Wording that was already clear is unchanged.
  • Docked panel title bars: utility panels like Brush Library, Brush Studio, Variables, and the logs now keep their title tab visible when docked, instead of losing their title bar. The four main panels (Library, Node Graph, Preview, Parameters) still hide it when docked alone to save space, and layouts saved by earlier versions update automatically.
  • Hold middle-mouse and drag to scroll: now works in every scrollable panel, including Swatches, Node Library, Brush Library, Brush Studio, Parameters, and pop-up lists, not just a few. The node graph and image preview keep using middle-mouse for panning.
  • Collect Files asks before running: File > Collect Files now shows a confirmation explaining that the referenced files will be copied next to the project and the document saved, with the option to cancel. Previously it ran and saved silently, which made it unclear whether the updated file references had been written.
  • Mask From Image threshold: Threshold no longer doubles as an on/off switch. A Mode picker decides whether there is a threshold at all, so Threshold 0 now means "select everything from 0 up" rather than "no threshold". Existing projects are converted when opened and produce the same mask as before.
  • Levels node: output clamping is now an explicit Clamp Output checkbox (on by default) instead of silently switching on when Output White drops below 1.0.
  • Clamp node: in 8-bit documents, Min and Max now show and edit as whole code values from 0 to 255 instead of a decimal fraction from 0 to 1. 32-bit documents keep entering exact values, including past the visible 0-1 track. Dragging Min above Max, or Max below Min, now moves the other one to match right away instead of only correcting itself the next time the image is processed.
  • Exposure node: in 8-bit documents, Offset now shows and edits as a whole code value from -255 to 255 instead of a decimal fraction from -1 to 1, matching how the rest of the editor's 8-bit controls read. 32-bit documents are unchanged.
  • Single-channel images display raw: masks and depth passes skip the Display View transform in 32-bit documents, but still follow the view Exposure and Gamma controls.
  • Overbright zebras start off and remember your choice: the animated stripes marking overbright pixels in 32-bit mode no longer switch themselves on every time you open a 32-bit document or enter 32-bit mode. They stay off until you turn them on (Z or the toolbar toggle), and your choice is remembered across documents and app restarts.
  • Dragging a node from the Node Library onto a wire: the newly created node spliced into the wire now starts with your Canvas defaults and its type's default preset, the same as every other way of adding a node, instead of bare factory settings. (Splicing an existing node into a wire is unchanged: it keeps its settings.)
  • Times are shown in your local time: the log panel stamped each line in UTC, so it disagreed with your clock, with the {date} and {time} export tokens, and with your file manager. Log lines now use local time, and each log file opens with a line recording the session's date and UTC offset so a log attached to a bug report is still unambiguous.
  • Preview Locked color: the Preview panel's locked border and badge, and the locked banner on a node in the graph, are now a calmer, less saturated amber instead of a bright orange, so a locked preview no longer reads like an alert. It stays easy to tell apart from the red processing outline and the amber queued and stale indicators.
  • Tile Preview: the lines marking where tiles meet are now dashed instead of solid, so the seam pixels stay visible for judging seamless tiling.
  • The brush Size and Hardness sliders name their shortcuts: their tooltips read whatever keys you have those commands bound to, so a remapped shortcut updates the hint immediately.
Fixed
  • Collect no longer renames every frame after the folder it came from. Wiring Split Batch outputs into Collect gave each frame the Image Folder node's name (all "Assets", say) instead of its own file name, because Collect let a node's rename outrank a frame's file identity whenever the frame arrived on an ordinary wire rather than as part of a batch. A frame that came from an image folder now keeps its file name whichever way it reaches Collect.
  • A name typed into a Collect frame row now stays on the input you typed it for. With a batch wired into one of Collect's inputs, the typed names slid onto the wrong frames, and the rows belonging to inputs after the batch were never applied at all, because a row was matched to a frame's position in the finished batch instead of to the input it was typed on. A row that carries a whole batch is now disabled and its frames keep their own names, since one field cannot name many frames without giving them all the same name.
  • Saving a file no longer overwrites another one without asking. When a name typed into the Save dialog needed an extension added (Save As, Package as Zip, node preset export, Save to PNG, and every palette export), the extension was added after the dialog had already checked its own name against the disk, so the finished name could land on an existing file with no warning. That name is now settled first, and if something is already there ArcBrush asks before replacing it. Two related problems are fixed at the same time: a name containing a dot, such as "My Project v1.2", used to be mistaken for one that already had an extension and was written without one, and exporting a palette as ASE or PAL wrote GIMP palette data under that name instead.
  • Closing the window while a file dialog is open no longer discards unsaved work. If the desktop's close command (the title-bar X, Alt+F4, or a window-manager shortcut) arrived while an Open, Save, or folder dialog was up, ArcBrush quit as soon as the dialog closed, with no chance to save. It now shows the usual unsaved-changes prompt, and on Windows the file dialog belongs to the main window, so the X is disabled while it is open.
  • Closing the window no longer reads as ignored while ArcBrush is waiting on a browser sign-in, downloading an update, or showing Feedback, Manage Workspaces, or a confirmation dialog. Each of those used to hold the screen indefinitely with no chance to see the usual unsaved-changes prompt; they now step aside for it, the same fix already shipped for the Settings window.
  • Context menus, popups, and tooltips now stay inside the ArcBrush window instead of spilling past its edge as a separate little window. On macOS, clicking one of those spilled menus took focus away from ArcBrush, so the menu item did nothing and the next click was lost.
  • Dragging a point on a Curves or gradient editor, or reordering a Layer, Collect, or Palette list, no longer leaves a stray edit behind if the app lost focus partway through. Clicking anywhere afterward used to be read as continuing that same drag, moving the point or reordering the list to wherever the click landed; the drag now ends the moment the mouse button is no longer held.
  • Clicking a dropdown, context menu, or other popup drawn over a Curves node's canvas no longer edits the curve underneath it. The curve canvas used to accept clicks based on cursor position alone, so a click meant for whatever was on top could still add, move, or remove a control point behind it.
  • Double-click and right-click reset now work on the sliders in Roto's Selected Shape section (Feather and Opacity); before, those sliders were the only ones that quietly ignored the reset gestures.
  • Collect Files now reports any file it could not copy (a locked or unreadable file, for example) and keeps the project pointing at the original, instead of silently saving a reference to a copy that was never made.
  • Opening a project file, a recipe extracted from an image, or a template with extremely deep nesting no longer crashes ArcBrush; it now fails to load with a clear error instead.
  • Renaming a node while a batch or export is still processing no longer risks a crash.
  • Some pixel/percent and gradient-style parameter sliders no longer risk a crash when a node's UI leaves their display format unset.
  • The MCP Server connection no longer risks taking ArcBrush down with it if something goes wrong while a client is connected; a failed connection is dropped and the server keeps listening.
  • Quitting ArcBrush shortly after signing in or out no longer risks a long, unexplained pause.
  • Linux (Wayland): switching to another workspace no longer freezes ArcBrush. Leaving its workspace stopped ArcBrush answering the desktop, so after a few seconds the desktop offered to terminate it, and switching back unfroze it. Reported on Arch Linux with Hyprland, and possible on any Wayland desktop that pauses windows it is not showing.
  • Fixed a crash on Linux when dragging a file over the window under some Wayland compositors.
  • ArcBrush now explains why it cannot start on a graphics driver below the minimum it needs, with a dialog naming what was found and where to look in the log, instead of opening an empty window that never draws anything.
  • macOS: starting ArcBrush no longer shows repeated keychain permission prompts, including after every update, and your existing sign-in carries over automatically.
  • A licensing reply that arrives damaged or incomplete no longer leaves the app half-updated. Previously a bad reply could apply part of a plan change and write files to disk before failing; now nothing is applied or saved unless the whole reply is sound.
  • A reply that arrives out of order can no longer undo newer licensing information, and two checks finishing at once can no longer leave a mismatched pair of saved licensing files or roll the trial clock backwards.
  • Signing out and signing straight back in as a different account no longer lets a leftover reply for the previous account sign you out again, clear the new account's licensing, or show a message about the wrong account.
  • Quitting immediately after signing out now reliably saves the signed-out state, and work still finishing as the app closes can no longer write licensing files or credentials on the way out.
  • Signing in through the browser no longer fails silently. If your browser asked the sign-in window for anything else first (a site icon, for example), the app used to stop listening for the real sign-in and leave you signed out even though the page said it worked. It now waits for the actual sign-in and turns away anything else.
  • A message claiming your license was disabled no longer appears for a license you have already replaced, and a license check finishing late can no longer put an older license back after you have installed a newer one.
  • Signing out now takes effect immediately and completely. Previously a save or export started in the instant right after signing out could still go through as if you were licensed, and on a fast sign-out at startup the app could keep treating you as licensed until a pending check finished.
  • Opening or creating another file now clears Preview Lock instead of transferring it to an unrelated node with the same internal id.
  • Opening another project no longer leaves the Preview panel's multi-view grid showing images from the previous project.
  • Images up to 16384 px per side now open regardless of their total pixel count; previously a large exported image (16384 x 8192, for example) could be refused on re-import even though ArcBrush created it.
  • The Pad node's Add Padding mode now caps its output at the app-wide 16384 px limit instead of attempting arbitrarily large canvases.
  • Saving a document twice without changing anything now produces the same file both times. Previously each save shuffled the order of nodes, groups, and sticky notes inside the file, so re-saving an unchanged project rewrote much of it and never settled, which made comparing two versions of a project file, or tracking one in version control, show large changes that were not really there. Projects saved by earlier versions load unchanged, and the first save with this version tidies the ordering once and for all.
  • Fixed colors across the app looking wrong when Windows HDR is turned on.
  • Exported filenames now keep the original image's name through Split, Collect, and channel or bit-depth conversions, in both 8-bit and 32-bit mode: the {source} token again resolves to where the image actually came from instead of the name of a downstream node, and {source}, {name}, and {label} no longer lose or invent a name after those steps.
  • Renaming individual frames in a batch before a Collect node no longer overwrites each frame's true source, so {source} keeps the original name while {name} stays the renamed frame.
  • Painting or adding text on top of an imported image no longer discards where that image came from: Paint, Mask Paint, Text, and Scatter now report the original file as the source when one is connected, and report themselves only when nothing is. Previously they always claimed to be the origin, so the Inspect node named the Paint node instead of your photo and the {source} export token resolved to "Paint" or "Text". Exported filenames using {source} will change accordingly for graphs that paint or add text over an imported image.
  • Text no longer gets cut off on batch frames where the text differs per frame.
  • A Clone Stamp stroke painted in 32-bit (float) mode over a scene-referred working space (Linear, ACEScg, ACEScct) no longer looks too dark once the document is viewed or exported at 8-bit; the sampled color now matches what you saw while painting.
  • Clone Stamp strokes now stay aligned to the sampled source across strokes, matching standard clone-stamp behavior, instead of the sampled area drifting further away with each stroke.
  • Painting with Clone Stamp or Eraser on a 32-bit scene-referred document no longer shows the clone or reveal source looking darker mid-stroke than it does the instant you release; the live preview now matches the committed result.
  • Dither's automatic palette (Colors, with no Palette connected) no longer shifts between renders of the same image. Re-cooking, reloading, or re-exporting used to occasionally extract a slightly different set of colors from identical pixels; the extraction is now fully reproducible.
  • Edge Detect's background no longer flips from opaque black to transparent the moment you first adjust any of its controls. A freshly added node drew an opaque background while its settings said transparent; opaque black is now the actual default, and picking a transparent background still works exactly as before.
  • A freshly added Trim node now trims with the Threshold of 30 its Parameters panel shows, instead of silently using 0 until a control was touched.
  • The Text node's on-canvas bounding box now matches the previewed frame when a batch renders different text per frame.
  • A Text node showing a source's name or label now updates when you rename that source, instead of keeping the old name until some unrelated edit made it redraw.
  • The image preview now stays clean and crisp at in-between zoom levels (96% or 137%, for example) instead of looking unevenly aliased, in both the single view and the grid and viewer tiles.
  • Linux (Wayland) display sharpness: fractional UI scaling now uses the framebuffer dimensions required by the Wayland protocol instead of rounding half-pixel window sizes down, avoiding a compositor resample that made the entire interface look soft at scales such as 125%.
  • Repeatedly undoing and redoing a drop-on-wire insertion now restores the same node and both wires, so later moves and wire edits keep working and the downstream node's settings do not change just because another node was inserted upstream.
  • A wire now highlights for drop-on-wire insertion only when the dragged node can actually be inserted there, and releasing rechecks the wire under the pointer. An invalid or stale highlight falls back to a normal node drop or move instead of promising an insertion that fails.
  • Dropping a node onto a wire now locks on at a consistent on-screen distance at every zoom level and keeps the same wire selected where connections cross, instead of becoming difficult when zoomed far out, overly broad when zoomed in, or flickering between crossing wires.
  • Editing a Text node over a batch with per-frame text is now much faster.
  • Keyboard shortcuts now behave consistently in every text field, and app and canvas shortcuts resume the instant you finish editing a field.
  • Editing a node's label, note, or text parameter now creates a single undo step instead of one every few keystrokes.
  • Pressing Escape while editing a text field always restores the original text.
  • Pasting long text into a field no longer gets cut off partway through.
  • File path fields now accept paths of any length.
  • Numeric fields now let you finish typing a value, including a leading minus or decimal point, before validating it.
  • Group titles and sticky notes now reliably save or discard your edit when you click away, press Enter, or press Escape.
  • The {token} autocomplete list no longer steals keyboard focus while you type, and picking a suggestion inserts it at the cursor.
  • Pressing Ctrl+Z in a text field with nothing left to undo now performs the app's undo instead of doing nothing.
  • Right-clicking a text field in a dialog now opens its editing menu instead of risking closing the dialog.
  • Bracket-key brush size and hardness changes are now undoable, as one step per held gesture; previously they could not be undone at all.
  • Brush and eraser keyboard shortcuts in Mask Paint no longer trigger while holding Ctrl or Alt, matching Paint.
  • Double-clicking the Transform center handle now resets Translate back to zero. The reset had never worked: the double-click started another move instead, so the only way back to zero was to type it into the Parameters panel.
  • Resetting a preview handle by double-clicking it can now be undone. Double-clicking the Vignette or Chromatic Aberration center handle moved the falloff back to the middle of the image but left nothing on the undo stack, so Ctrl+Z jumped past it to an earlier edit.
  • Double-clicks now follow your system's double-click speed instead of a fixed built-in one, and the small pointer movement allowed between the two clicks now scales with the interface scale, so a high-DPI display no longer makes double-clicking fussier.
  • Assigning a viewer slot to a node that is carrying a batch is now refused with the same explanation wherever it happens. Only nodes that declare a batch output were caught, so a node further downstream carrying the same batch was accepted and then showed an unsupported tile with no explanation.
  • The Browse button now opens at the file's current location for paths stored relative to the project or written with {tokens}.
  • File open and save dialogs now start in the folder containing the current ArcBrush project.
  • Opening a project that contains nodes this version does not have now names them, so the warning lists the unknown node types instead of only telling you a node was dropped, and you can tell at a glance whether the file came from a different build or is genuinely damaged.
  • SVG Import no longer shows a Large Output warning for ordinary files, matching Image In.
  • Edge Detect's "No edges detected" warning now appears whenever Canny found no edges, even with Invert turned on. Previously turning on Invert always turned the empty edge map into a full one, which hid the warning.
  • Apply LUT: a LUT file that cannot be read now reports the problem once, as a normal node error on the node itself, instead of also repeating it inside the Parameters panel. Nothing else about the node changes.
  • Opening a recipe from an image shows the date it was made in your local time. It previously used UTC, which read as the wrong day entirely for anyone far enough from it.
  • Right-click Copy in a text field now keeps the field focused with your selection intact; Copy with nothing selected still copies the whole field.
  • Password fields now enforce standard editing restrictions in their right-click menus.
  • The mouse pointer is now hidden while you hover a Paint or Mask Paint node's canvas, leaving just the brush cursor ring, instead of the arrow sitting on top of the ring and hiding what you were about to paint. The pointer reappears anywhere the ring isn't drawn.
  • Shortcut hints and menu labels on macOS now show Cmd and Opt instead of Ctrl and Alt.
  • Node completion rings and the delete and disconnect ghost effects no longer draw over panels floating above the node graph.
  • The "Preview Locked" badge no longer covers the frame tabs when previewing a batch. It now starts below the frame list, alongside the size and frame-count readout, as do the Processing and Overlays badges.
  • The white outline marking the selected frame (and "All") in the Preview frame list is now even on all four sides and follows your Corner Style, instead of reading thin along three edges and thick on the fourth. It is drawn at the same weight as the toolbars' pressed-button outlines, and the frame buttons now keep clear of the frame list's edges.
  • The Preview panel's toolbars sit evenly between the rules around them. The main toolbar sat closer to the rule below it than to the panel edge above, and the multi-view and frame-list rows were off-centre the other way.
  • Long tooltips now word-wrap at a readable width instead of stretching into one screen-wide line.
  • Tooltips now open below the mouse cursor instead of partly underneath it.
  • Closing the app while a slow node is still processing (a heavy blur on a large image, for example) no longer hangs until that work finishes, which could take minutes; ArcBrush now cancels the in-flight work on the way out and quits within a few seconds.
  • Package as .zip can no longer damage an existing archive when packaging fails partway through, and the progress window now closes properly so the failure report is visible.
  • A failed Save As no longer switches the document to the unwritten destination; the file path, read-only state, unsaved-changes marker, and autosave all stay with the original file.
  • Blending fully transparent areas over each other no longer produces invalid color values in those pixels when GPU acceleration is active; GPU and software results now match.
  • After typing in a parameter field, the preview no longer ignores the mouse until you click somewhere else or select a different node: the analysis strip's resize handle would not highlight or drag, mouse-wheel zoom did nothing, and the first click to pan was swallowed.
  • Export Image now adds the chosen format's extension when the output filename has none, so exporting to hero as PNG writes hero.png instead of a file with no extension.
  • Export Image: the Browse dialog no longer appends .png to a filename typed without an extension; the node's Format decides the extension at export (Windows and macOS).
  • Export Image: the Browse dialog pre-fills its name field with the current output filename instead of placeholder text.
  • Dragging a floating panel across the node graph no longer sends the graph racing off in one direction. The press on the panel's title bar was being read as a click on the canvas behind it, which started an invisible box-select or node drag and then scrolled the view at full speed for as long as you held the drag. Dragging a node under a floating panel no longer scrolls the view either.
  • Closing the window while the Settings dialog is open now brings up the unsaved-changes prompt straight away; before, the close appeared to be ignored until you closed Settings by hand.
  • Export Batch's sprite sheet now shows and protects its real file name at 32-bit (float) depth: the sheet-name preview, the overwrite-collision check, and the writer all agree it is a .tif file, so choosing Skip on an existing sheet no longer overwrites it. The Embed Recipe checkbox is shown disabled with an explanation at that depth, since a TIFF sheet cannot carry the embedded recipe.
  • Linux now ships Alt+F4 as a Quit shortcut, so compositors that don't bind a quit chord of their own (Hyprland, for example) still have a keyboard way to close ArcBrush. Desktops that already intercept Alt+F4 themselves (GNOME, KDE) are unaffected.
  • A failed export or Package as Zip now turns the node red and reports the problem instead of closing ArcBrush outright. An error that the writer could not handle (an unwritable location, a full disk, an image too large for the chosen format) escaped the background thread doing the writing and took the whole application down with it, losing everything unsaved.

1.5.0

Added
  • 32-bit (float) mode: a new per-document precision mode processes the whole graph in 32-bit floating point with linear-light compositing and overbright (HDR) values preserved end to end; switch in the new Color menu (requires a Pro license or trial).
  • Color management: 32-bit documents pick a working space (Linear, sRGB, ACEScg, ACEScct, Linear P3-D65) and a display transform (the ACES views, AgX, or the plain Standard view) in the Color menu, with a bundled ACES configuration and an Input Color Space picker on Image In and Image Folder.
  • Overbright authoring: in 32-bit mode, colors brighter than white can be authored directly (Canvas, Pad, Noise tint), a zebra-stripes preview indicator marks pixels above white, and the color picker, eyedropper, and histogram read float values.
  • Cryptomatte node: decodes Cryptomatte ID matte data baked into a render engine's EXR into a pickable object matte. Click objects directly in the preview to build the selection (an armed Pick+ / Pick- pair, or Ctrl+Click / Ctrl+Alt+Click, or a Ctrl+Shift drag that adds every object inside a rectangle at once, Ctrl+Alt+Shift to remove, with the preview automatically switching to Colored IDs while a pick is armed), with a hover tooltip naming the object under the cursor, a matte list with removable entries and manifest autocomplete, and Matte / Colored IDs / Highlight / Premultiplied output modes.
  • Multi-part and tiled EXR import: multi-part EXR files from render engines, such as one file holding a beauty pass alongside per-light or per-AOV passes, now load, with every part's layers listed together in the layer picker. Tiled EXR files load as well.
  • High-bit-depth import: Image In and Image Folder read 16-bit PNG, 16-bit TIFF, float TIFF, and OpenEXR files, with a layer picker for multi-layer EXR renders; hovering a layer in the picker previews it live in the main view, and 8-bit documents convert them down on import.
  • EXR export (Pro): Export Image and Export Batch write OpenEXR at 16-bit half or 32-bit float with an Output Color Space picker, preserving overbright values.
  • High-bit-depth export (Pro): 32-bit documents gain a PNG/TIFF bit-depth selector on the export nodes (16-bit PNG, 16-bit TIFF, 32-bit float TIFF).
  • Export color handling: a Color section on the export nodes chooses how a 32-bit document's colors are written: as displayed, converted to a chosen color space, or raw working-space values, with a clipping warning that suggests the Clamp node.
  • Scene-referred ranges: in 32-bit mode the Glow threshold, Levels white points, and Exposure offset accept overbright values, with sliders that expand past their 8-bit maximums.
  • Relight node: relights artwork with point and directional lights driven by a normal map, with on-canvas light gizmos, ambient and specular controls, and Lit / Lighting only / Specular only outputs.
  • Hex Tile node: hides the visible repetition when a texture tiles. The image is covered with a grid of hexagonal cells, each showing the source at a random rotation, scale, and offset, with neighboring cells blending smoothly; the output is itself a perfect tile by default (Seamless Output), and an Output Scale control grows the canvas up to 8x to synthesize a large non-repeating texture from a small tile. Rotation Steps (60/90/180 degrees) tames semi-structured textures, a Normal Map option rotates the normal vectors with each cell's content so a hex-tiled normal map still lights correctly (keep the same Seed across per-map copies to keep a whole texture set pixel-aligned), and a preview overlay shows the hex grid with each cell's rotation. Works best on a seamless input; use Seamless Blend first.
  • Merge node: coverage-based compositing with eleven operators (Over, Under, In, Mask, Out, Stencil, Atop, Xor, Plus, Divide, Multiply) and a Mix slider that dials the result back toward the untouched B input, in a new Composite category, for knock-outs, stencils, premultiplied linear adds, and unpacking or repacking a light or albedo pass; hovering an operator in the dropdown previews its result live in the main view.
  • Apply LUT node: applies a LUT file (.cube, .3dl, .clf, .ctf, .csp, .vlt) as a color-managed look, with input/output color-space pickers, interpolation choice, and a Mix slider.
  • Despill node: removes green, blue, red, or custom key-color spill after keying, with Neutralize and Desaturate modes and automatic key-color detection.
  • Clamp node: limits colors to a range with an optional soft knee, per channel or hue-preserving, for taming overbright values before delivery.
  • Premult and Unpremult nodes: convert between straight and premultiplied alpha for compositing workflows.
  • Lens Distortion node (formerly Spherize): the Spherize node is renamed Lens Distortion and gains two new modes alongside the classic bulge/pinch (now the Bulge mode): Sphere wraps the image onto a glass-ball hemisphere (negative amounts give the concave inverse), and Lens (the new default) applies camera-lens barrel or pincushion distortion across the whole frame, with an Edge control for wavy mustache distortion, a Correct direction that exactly removes lens distortion from photos, and a Scale control whose Fill Frame option (on by default) keeps the result automatically fitted to hide blank borders as settings change, with a one-shot Fit button when it is off. A new Feather control smooths the boundary of the bulge and sphere effects, an on-canvas gizmo drags the center, radius, and feather directly in the preview, and an optional warped grid overlay shows exactly how the distortion bends the image. Searching the node library for "spherize" still finds it, and existing projects open in Bulge mode and render unchanged.
  • Mirror node: a new Radial direction mirrors the image kaleidoscope-style around a movable center point, with 2 to 32 segments, a Reflect toggle for mirrored (kaleidoscope) or rotation-only (mandala) symmetry, an angle control, and an on-canvas gizmo for dragging the center and rotating the pattern.
  • Noise node: ten new texture types: Blue (high-pass pixel distribution), IGN (low-discrepancy golden-ratio pattern), Voronoi fBm (cellular turbulence), Crater (pitted terrain), Scratches (random wear strokes with Direction, Spread, Density, Thickness, Length, and Waviness controls), Curl (flow lines), Paper (fibrous paper texture), Stone (marbled stone), Wool (woven strands), and Erosion (eroded terrain with ridges and gullies), most of them tileable via Seamless, which now also covers the existing Voronoi type (its feature scale snaps to the nearest size that tiles cleanly); Voronoi also gains a Smooth Cell return type with a Smoothness control for adjustable soft per-cell blending.
  • Noise node: a new Color Output control turns the noise chromatic: RGB for full-color static, Tint to multiply by a chosen color, and Hue Cycle to drive hue from the noise value; Voronoi also gains a Colored Cells return that colors each cell. The default (Monochrome) output is unchanged, so existing projects look identical.
  • Noise node: new Contrast and Brightness controls, and the Scale maximum raised from 100 to 200.
  • Displace node: a new Map Midpoint control sets which map value counts as zero displacement (0.5 = mid-gray neutral as before; lower toward 0 to read the map as a height field), so one map can drive either a signed offset or a one-sided push.
  • Batch fan-out (M x N): Palette Remap and Separate now take a multi-frame batch and output every input image combined with every variant; use {source}_{name} in Export Batch for names like tree_purple.png, with a per-session cap to prevent runaway expansion.
  • Separate node: a new Grid slicing mode splits the image into a regular rows by columns grid of tiles (each 1 to 64) instead of detecting objects, so you can chop a sprite sheet or atlas into evenly sized frames; the original object-detection behavior is now the Connectivity mode and is unchanged.
  • Canvas, Shape, Gradient, Noise, Pattern, and Text nodes: a new Color Mode (RGBA / Grayscale) control lets each generator output a single-channel image directly, so you can build a mask, height field, or single-channel chain without adding a conversion node. In Grayscale mode the color pickers become gray sliders; switching modes keeps the visible brightness by carrying each color's luminance to and from its gray value, and the switch is a single undoable step.
  • Image In and Image Folder nodes: a new Output Format control (Auto / RGBA / Grayscale) keeps a grayscale source file as a single-channel image instead of always widening it to RGBA, with a Grayscale From option (Luminance, Red, Green, Blue, or Alpha) for reducing color sources. Auto (the default) preserves natively single-channel files and promotes the rest; Image Folder applies it per frame, so a mixed folder yields a mixed batch, and existing projects open unchanged.
  • Export Image and Export Batch nodes: a new Output Channels control (Auto / RGBA / Grayscale) saves a single-channel image as a genuine grayscale PNG, TGA, or TIFF instead of always writing RGBA, with a Grayscale From option (Luminance, Red, Green, Blue, or Alpha) for color sources. The Parameters panel and a node-body badge show the incoming channel type and what the format will write (JPEG and WebP still upcast grayscale to color).
  • Filter and structural nodes: most (Blur, Sharpen, Curves, Levels, Vignette, Pixelate, Mesh Warp, and more) now accept a grayscale or mask source directly and produce a matching single-channel output, so a mask stays a mask through a chain of effects.
  • Gradient Map and Normal Map nodes: now accept a grayscale or mask source directly on their image input (no color conversion needed); both still output color.
  • Resize, Pad, Offset, and Transform: replace their separate Image and Alpha pins with one combined input that accepts a color image or a grayscale/mask and outputs to match; existing wiring is preserved.
  • Mask inputs: wiring a color image directly into a mask input now uses the image's brightness as the mask (previously its transparency, so an opaque image acted as an all-white mask that appeared to do nothing). A new Mask From control appears when a color image is connected, with Luminance, Alpha, Red, Green, and Blue choices; single-channel wires and channels picked through Channel Split behave exactly as before.
  • Mask Fit on more nodes: the Mask Fit control (None / Stretch / Fit / Fill) now also appears on Scatter, Film Grain, Halftone, Separate, and Mask Boolean, choosing how a differently sized mask maps onto the image.
  • Remove Background and Upscale nodes: two free nodes that run in the cloud, returning a clean background-removed cutout or a 4x upscale. No credits or subscription required; a free account with email verification is needed to use them. Both are in a new Cloud category in the node library, which a Settings > Interface > Display toggle can hide; rate limits and a monthly cap apply. Existing files that contain these nodes open and display their cached results as before.
  • Node search: the node library and add-node search now also match common names for the same tool from other image and compositing apps, so "flip" finds Mirror, "hue" or "saturation" finds HSB, "gaussian blur" or "motion blur" finds Blur, "unsharp mask" finds Sharpen, "green screen" finds Chroma Key, "content aware" finds Inpaint and Smart Scale, "grayscale" finds Black and White, "feather" finds Mask Refine, "stroke" finds Outline, "ramp" finds Gradient, "solid color" finds Canvas, and more. Typing a node's exact name still returns just that node.
  • Corner Pin node: source corners are now adjustable (as a percentage of the foreground image), so you can pin them onto a perspective-distorted region of a photo and flatten it into a rectangle; a Straighten button in the preview toolbar converts the destination quad to an axis-aligned rectangle matching the source proportions; a new Crop to Destination output mode emits a tight crop at the destination quad size instead of the full reference frame.
  • Scatter node: five built-in presets (Organic Field, Random Tile Grid, Seamless Texture, Ring Pattern, Spiral Pattern) set the layout and scatter parameters in one click.
  • Canvas wiring: hold Shift and drag off an output pin that already has connections to move all of its wires onto another output pin at once, rerouting them to a new source instead of pulling out a fresh wire; works with a single connection too, so you can relocate one wire to a different node.
  • Preview histogram: hovering a pixel now marks it on the histogram, with a line at the pixel's brightness tinted with the hovered color plus thin red, green, and blue lines at each channel's value; drag the top edge of the histogram strip to resize it.
  • Preview: a new Preview Resolution control (Auto / Full / 1/2 / 1/4) next to the zoom controls sets how much detail the main preview (including the single-frame batch view) draws; Auto (the default) keeps large images responsive while you are zoomed out or actively editing, and shows the source at full detail once you zoom in close, so scrubbing a parameter or panning a large photo no longer briefly pauses the editor.
  • Parameters panel: right-clicking a slider, numeric field, text field, or dropdown now offers Copy Value and Paste Value alongside Reset to Default, so you can carry a value between two nodes; Paste is greyed out when the copied text would not fit the field (for example, text into a number), and dropdowns copy and paste by their option name. Copy All / Paste All Parameters in the node gear menu do the same for every value on a node at once, in one undoable step.
  • File path parameters: right-clicking a file or folder path now offers Convert to Relative Path (stored relative to the saved project so the project stays portable when moved) and Convert to Absolute Path; the option is greyed out until the project is saved, or when the file is on a different drive than the project.
  • Drop files onto path fields: drag a file from your file explorer onto any file or folder path field in the Parameters panel to set it directly, without opening the file browser.
  • HSB node: a new Model control picks the brightness axis: HSB (the default, unchanged) scales toward vivid full-saturation color, while HSL is symmetric around mid-gray and washes toward white or black.
  • Brush tools: the size bracket keys auto-repeat when held, Shift+bracket adjusts hardness, and a cursor ring shows the soft edge while you adjust it (Paint and Mask Paint).
  • Import nodes: Image In, Image Folder, and SVG Import gain a Reload button that re-reads the file or folder from disk.
  • Reroute nodes: can now be added from the node library and the add-node menu, not only by double-clicking a wire, so you can place a routing dot before wiring it up.
  • Arrange node: a new Grid direction packs frames into a fixed number of columns, wrapping to new rows.
  • Separate node: a Name Prefix parameter sets the output frame name stem (defaults to object; an empty prefix emits just the number).
  • Export Batch: a new {color} filename token resolves to a frame's variant color as a 6-digit hex code (e.g. a020f0).
  • Status bar: a 32-bit document shows its working color space and its active display view as pills in the status bar; the display-view pill is clickable to switch views.
  • Node alignment snapping: a new Snap Search Distance setting (Settings > Interface) controls how far away a neighboring node can be and still snap into alignment while you drag, separate from Snap Strength, which sets how strongly nodes pull together.
  • Commercial license: ArcBrush stays free for personal and non-commercial work; commercial use requires a one-time ArcBrush Pro license. A first-run prompt lets you pick personal or commercial use and learn what Pro adds, an in-app purchase dialog and a Help menu ArcBrush Pro page explain and unlock it, and a 14-day free trial with no card unlocks everything to evaluate. Pro adds commercial use plus 32-bit (float) mode and high-bit-depth export, and installs from a license file that works offline.
  • First launch: you are now asked to accept the Terms of Service and Privacy Policy before the editor opens, with the full text of each shown in the prompt. This one-time prompt appears on Windows, macOS, and Linux, and only returns if the terms are updated.
Changed
  • Viewer slots: Export Image and Export Batch nodes can now be pinned to a viewer slot, showing the image being exported (Export Batch in sprite-sheet mode shows the assembled sheet).
  • Curves node: the editor now shows every channel's curve at once with the inactive channels dimmed behind the active one, draws the source image's histogram behind the grid, and displays the selected point's X and Y values; the control handles are a little smaller.
  • Levels node: the histogram now shows all color channels together instead of one at a time and sits at the top of the panel, and still updates live as you drag the sliders.
  • Histograms: the Curves, Levels, and preview histograms now draw as a smooth filled shape with a brighter top edge and light smoothing, instead of hard vertical bars, so the distribution reads more clearly.
  • Mask wiring: any node's image output can now connect to a mask input; previously some outputs were rejected with an error telling you to use Mask From Image.
  • Dropdown menus: long dropdowns now expand to fit as many items as the screen allows instead of capping at eight rows.
  • Preview: switching between soloed viewer slots of the same size now keeps your zoom and pan instead of re-fitting the view each time.
  • Update window: the release-notes pane now renders bold highlights, inline code, and clickable links, instead of showing the raw markup characters.
  • Layer node: each layer row now shows the connected node's custom name next to its title (e.g. "Pad 1 (Background)").
  • Reroute nodes: dragging a reroute now aligns it to nearby pin rows and to other reroutes, with guide lines drawn through the dots, and reroutes follow grid snapping like other nodes.
  • Noise node: seamless noise now matches the contrast and amplitude of the same noise with Seamless off; raise the new Contrast control to restore the old punchier look on existing seamless projects.
  • Separate node + Export Batch {source} token: a single-input Separate graph's {source} token now resolves to the upstream origin label (e.g. tree) instead of object_NN; {name} and {label} users are unaffected.
  • Display Color Correction: the display color-management toggle moved from Settings > Interface > Display into a new top-level Color menu in the menu bar; the setting itself is unchanged.
  • Status bar: the processing pill now also counts queued preview, thumbnail, and histogram work (shown as "Display") when it backs up, so a preview that is falling behind is visible at a glance.
  • Brush cursor: the brush outline is now a neutral, contrast-aware color that stays visible over any artwork.
  • Panel scrollbars: the side-panel scrollbars are now noticeably thinner.
  • Canvas pins: node pins are easier to grab and connect: the click target is larger, scales with zoom, and grows while dragging a wire.
  • Tooltips: reformatted app-wide for readability: option lists render as bullet points with bold names, key values are highlighted, and long tooltips wrap at a comfortable width.
Fixed
  • Opening documents: opening a project that contains several large images no longer freezes the app while it loads; the window stays responsive and images fill in as each one finishes.
  • Node groups: dragging a group that contains many connected nodes (such as a cluster of reroute dots) no longer makes the wires between them scatter and jump far outside the group; the connections now move with the group and keep their shape.
  • Large images: generating or exporting an image larger than 16384 x 16384 pixels now fails with a clear message instead of crashing or writing a corrupt or empty file; the Tile, Arrange, and Scatter nodes refuse to produce a frame beyond that size.
  • Linux: Chinese, Japanese, and Korean text now displays correctly when a system CJK font (such as Noto Sans CJK) is installed, instead of rendering as missing-character boxes.
  • Linux: signing in now persists across restarts on systems without a secret-service keyring, instead of asking you to sign in again each launch.
  • Linux: opening a project that was missing both its fonts and its input files no longer leaves the window frozen behind an invisible dialog; the missing-fonts and missing-files prompts now appear one at a time.
  • Batch preview: the batch grid and Viewer slot tiles now keep updating while you drag a slider, instead of freezing on the pre-drag image until you pause; and panning the All grid until every tile is out of view no longer triggers an error message in the Preview panel.
  • Canvas manipulators: holding a manipulator handle pressed without moving the mouse no longer reprocesses the node continuously while the drag is paused.
  • Canvas manipulators: a handle drag that ends without changing anything no longer adds an empty step to the undo history.
  • Image Folder node: selecting a node whose folder holds thousands of files, or sits on a network or cloud-synced drive, no longer freezes the app while its parameters are shown; the image count now refreshes when the folder settings change or Refresh is clicked, instead of rescanning the folder continuously.
  • Collect and Arrange nodes: batches with different frame counts now combine into one batch instead of failing with a size-mismatch error.
  • Reroute nodes: now fully transparent to channel and pin type, so a mask or single channel routed through one is no longer flattened to white; the routing dot also takes on the color of the data passing through it, so a single-channel (grayscale) signal shows the single-channel color instead of the full-color image color.
  • Sliders: holding Ctrl and clicking a slider no longer allows entering a value outside its valid range, and clicking the track just beside the handle now jumps to the clicked value instead of doing nothing.
  • Glow node: raising the threshold now fades the glow smoothly toward the top of its range, instead of an overly strong bloom just below the maximum that then cut off abruptly at the top.
  • Edge Detect, Luma Key, Trim, Displace, and Pixel Sort nodes: a freshly added node now processes with its documented default settings immediately, instead of using different values until a control was touched (Edge Detect drew an opaque black background instead of transparent).
  • Window placement: the app window now restores to a currently connected display instead of occasionally reopening off-screen after a monitor is disconnected or rearranged.
  • Linux (Wayland): hovering the ArcBrush window now keeps your system cursor theme and size instead of switching to a generic fallback cursor.
  • Tile node: a very large tiled image paged to disk no longer faults back in as a solid black frame.
  • Seamless Blend node: the preview no longer flickers between the blended and unblended image while you scrub a slider in Noise Blend mode.
  • Node groups and sticky notes: editing a group title or a sticky note's text no longer pops the edit field out into a separate floating window when the group or note is wider than the application window.
  • File > New: creating a new file now resets the node graph view to the default zoom and position instead of keeping the previous document's view.
  • Compact Parameters: indented labels (such as the Layer node's Blend and Opacity rows) are no longer clipped.
  • Compact Parameters: the panel now holds still while you work: the label column keeps its width during slider drags, so a row that a slider reveals or hides mid-drag (such as the Noise warp controls or Split Batch's Start Frame) no longer flickers or shifts the slider out from under the cursor, and selecting different Gradient color stops or changing the format on an Export Image or Export Batch node no longer nudges the panel sideways.
  • Preview histogram: the pixel color readout no longer overlaps the histogram (it now sits just above it while the histogram is shown), and switching between nodes no longer slides the histogram out and back in; it updates in place, with the slide animation reserved for showing or hiding the histogram.
  • Preview: a two-finger trackpad pan now pans the view even when a full-image manipulator is under the cursor on macOS.
  • Canvas: the ring that briefly flashes around a node when it finishes evaluating no longer draws on top of open dialog windows.
  • Gradient node: the stop color picker no longer briefly flashes open for a single frame when you select the node.
  • Keyboard: the numeric keypad's Enter key now works for the app shortcuts that already accepted the main Enter (confirming the sole Add Node search match, and Ctrl+Enter to run the graph).
  • Pattern node: the controls specific to the selected pattern type now appear under the Pattern section of the panel instead of under Color.
  • Viewer slots: a viewer grid cell now shows its node's custom name when the node has been renamed, instead of always showing the node type.
  • Export Image and Export Batch nodes: when an export finishes while a different export node is selected, its success or error message no longer goes missing or lands on the wrong node; it now appears on the node that ran the export the next time that node is selected, and a successful export is correctly remembered as up to date.
  • Remove Background node: a freshly added node now uses its documented default model (Bria RMBG 2.0) instead of running the rembg model until the Model control was touched.
Removed
  • Removed the cloud AI image generation features (Text to Image and Image Edit nodes). Files that use those nodes still open and display their existing results; creating new AI-generated images is no longer available.

1.4.0

Added
  • Scatter node: places many transformed copies of one or more stamp images across a canvas in Area (jittered-grid) or Circular (rings/spiral) layout, with per-instance random scale, rotation, opacity, and flip; Sequential or Random stamp cycling; an optional density mask whose grayscale value sets each instance's keep probability; 18 blend modes; z-order by scale, sequence, or random; edge wrap for seamless tiling; and a deterministic seed. A canvas manipulator sets the region (Area) or center and radius (Circular). Each stamp slot accepts a single image or a whole batch (frames cycle as stamps), while a batch on the background pin produces one scatter per variant.
  • Shape node: an Anti-aliasing toggle (turn it off for hard, pixel-exact edges) plus pixel-perfect tile coverage, so tiled shapes no longer show seams or fringing.
  • Manipulator constraints and snapping: hold Shift while dragging a preview manipulator to constrain it (axis-lock, proportional/aspect, 15° rotation) and Ctrl to snap it onto the image frame's edges, corners, center, or thirds. On the Paint and MaskPaint nodes, Shift draws a straight horizontal or vertical stroke.
  • Compact Parameters: a density mode (now on by default, View > Compact Parameters) that puts each parameter's label and control on one line to shorten the Parameters panel.
  • Viewer Slots: pin up to nine node outputs to a live Preview grid (hover a node and press 1-9), each with its own manipulator; slots are saved with the project and undoable.
  • Embedded recipes: an opt-in Embed Recipe option on Export Image and Export Batch stores a privacy-sanitized copy of the whole graph inside exported PNG, WebP, JPEG, and TIFF files, reopenable by dropping the image back onto ArcBrush or via File > Open Recipe from Image.
  • Missing Files dialog: opening a project whose input files (Image In, SVG Import, Image Folder) are missing now lists them so you know what to relink, instead of leaving silent empty nodes.
  • Parameter presets: every node's Parameters panel gains a gear menu to save, load, reset, and manage named presets for that node type; loading applies as a single undoable change.
  • Palette from Image node: an Export Palette button saves the extracted colors to a .gpl, .ase, or .pal file, matching the other palette nodes.
  • Palette node: drag a swatch row's grip handle to reorder the colors, as a single undoable step.
  • Separate node: splits a single image's separate objects into a batch of clean per-object cutouts (detected by transparency, a corner color, a chosen color, or a mask), with size and count limits, padding, and five sort orders, ready to feed Scatter or Export Batch.
  • Export Batch: name the assembled sprite sheet and its JSON with a template (node, graph, date, time, quality, compression, and a new {count} token) instead of always getting nodename_sheet.
Changed
  • Dialogs now have a keyboard default button: when a dialog opens, its safe action (OK / Cancel / Save / Add Suffix, never a destructive or credit-spending one) is outlined and confirms with Enter or Space, with Left/Right and Tab moving the selection and Escape dismissing. The sign-in code and feedback message fields also take focus on open, and the sign-in code submits on Enter.
  • View menu: the quick visibility toggles moved here from Settings: the Status Bar, Display, and Manipulator Snapping submenus, plus Quick-Lock Preview and Compact Parameters; the manipulator snap-strength slider was dropped for a fixed default, and Settings keeps the configuration.
  • The right-hand panel is renamed from Properties to Parameters; its behavior and saved layouts are unchanged.
  • In-app updates: Linux now downloads, verifies, installs, and relaunches AppImage updates in-app, matching Windows and macOS, instead of only opening the download page.
  • Linux: Open, Save, and import dialogs now use the desktop's native file chooser (via the standard portal) when available, falling back to zenity or kdialog.
  • Preview panel: an empty preview now shows the reason ("File not found.", "Upstream failed", or "No output") instead of a blank.
  • Unsaved-changes dialog: the buttons are reordered Save / Don't Save / Cancel to match convention; the actions are unchanged and Escape still cancels.
  • Export Batch: the Output Files list now shows the real deduplicated names, and the node's own Export button warns before overwriting with the same Add Suffix / Overwrite / Skip choice as Export Selected.
  • Pixel Sort node: the Advanced parameters are now always visible instead of hidden behind a collapsed header.
  • UI text renders noticeably sharper by default, with a new Text Hinting setting (Crisp / Light / None) under Settings > Interface > Display.
  • Text node: moving the text now updates much faster, especially rotated text on a large canvas, since the rendered text is cached and only repositioned instead of re-rendered on every drag.
Fixed
  • AI batch confirmation dialog: pressing Escape now cancels and closes it on every AI node, matching the rest of the app's dialogs.
  • Closing the app during an AI generation no longer freezes the window or loses the finished image; it waits for the generation to finish, then runs the normal save prompt.
  • Collect and Layer nodes: dragging a frame or layer downward now drops it at the insertion line with its name attached, instead of landing one slot too high and desyncing the names.
  • A panel hidden from the Window menu and shown again after restarting now reappears where you had docked it instead of jumping to its default slot.
  • Linux (Wayland): ArcBrush no longer double-corrects display color (the compositor already manages it); the Display Color Management setting is shown disabled there with an explanation.
  • AI nodes: a batch of named frames now keeps its frame names after a cache restore (re-evaluation or reopening) instead of reverting to frame_0, frame_1; results cached before this fix show generic names until the node is run once more.
  • Linux (Wayland): UI text is now crisp at fractional display scales (such as 125% or 145%); integer scales were already crisp.
  • Pattern node: the preview no longer flashes the transparency checkerboard while scrubbing frames or dragging a parameter.
  • Preview "All" view: per-frame labels no longer overflow into overlapping text on large batches; they hide once cells get too small to fit them.
  • Light nodes (such as Pattern and Noise) now update the preview live while you drag a slider, instead of freezing until you release; the freeze was most noticeable on high-refresh-rate (120Hz+) displays.

1.3.1

Added
  • UI motion: subtle, opt-out animation across the app: the canvas glides when framing or zooming to nodes, new nodes fade in and deleted ones leave a brief ghost, the Preview and canvas share one eased zoom, evaluations and new wires pulse, and modals, the search bar, tooltips, and badges ease in. A new Animations toggle (Settings > Interface, on by default) turns it all off.
  • Pixel Sort node: reorder pixels along rows, columns, an arbitrary angle, or radial spokes and rings, splitting each line into spans by brightness band, random length, edges, or the whole line for glitch and drip looks, with one-click presets, six sort keys (luminance, lightness, value, saturation, hue, alpha), and a mask that confines the sort inside the selected region.
  • Canvas and Shape nodes: accept an optional Size Ref input to inherit width and height from a connected image or mask, matching the Gradient / Noise / Pattern generators.
  • Shape node: an on-canvas manipulator to move, scale, and rotate the shape directly in the preview, plus a Lock Center option (on by default) that keeps the shape centered when the output size or Size Ref changes.
  • Export Image and Export Batch: new {label} filename token that resolves to a node's custom label, falling back to the source image name when no custom label is set.
  • Export Image and Export Batch: new {time}, {quality}, and {compression} filename tokens. {time} inserts the export time as HH-MM-SS (pairs with {date} for a sortable timestamp), {quality} the JPEG or WebP quality, and {compression} the format's compression setting (PNG level, TGA RLE, WebP lossy or lossless, or TIFF codec); {quality} and {compression} resolve to nothing for formats that have no such setting.
  • Collect node: applying a custom label to a connected node (in the Properties panel) now fills in that frame's name by default, so it carries through to exported filenames.
  • Quantize node: optional Palette input snaps each pixel to the nearest color in a connected palette (perceptual match), mirroring Dither; with no palette connected, the k-means behavior is unchanged.
  • Export Batch sprite-sheet preview: a Show Outlines option draws each packed sprite's boundary on the assembled sheet, matching the Sprite Sheet node's toggle.
Changed
  • Notifications (toasts) now stack instead of overwriting each other, are color-coded by severity with icons, animate in and out, pause when hovered, and merge rapid duplicate messages into one card with a count badge.
  • Export Selected / Export All: the export warning now checks the actual files being written (including every batch frame) instead of comparing raw path settings, also warns when a file already exists on disk, and offers a real choice: Add Suffix writes conflicting files under a numbered name so nothing is overwritten, Overwrite keeps today's behavior, and Skip leaves files already on disk untouched.
  • In-app updates: when a new version is available, ArcBrush can now download, verify, install, and relaunch itself without leaving the app on Windows and macOS, instead of only opening the download page in your browser; Linux still uses the browser download.
  • Shape node: moving, scaling, or rotating a shape now updates much faster, especially a small shape on a large canvas, since only the area the shape covers is redrawn.
  • Shape node: rotating a Polygon or Star (with Lock Shape to Output on) now keeps a constant size instead of growing and shrinking as it turns; like Circle, these shapes are now sized to fit within a circle.
  • Status bar: on unified-memory systems (such as AMD APUs, where the GPU shares system RAM) the GPU memory is now shown as a "shared" pool with the GPU's real usage, instead of a misleading tiny dedicated-VRAM figure or nothing at all.
  • Status bar: the memory readout is now consistent across RAM, image cache, and VRAM, using matching MB/GB units and showing RAM and VRAM each as used of total; the former "Cache" entry is renamed "Image Cache" with a clearer icon and tooltips, making it clear that cache lives in RAM (disk-spilled batch frames remain the separate "Spill" indicator).
  • Preview panel: scrubbing between frames of a large batch, or opening a very large single image, no longer briefly stutters; the image now loads in the background while the previously shown one stays on screen until it is ready.
  • Resize node: the Scale X/Y percentage now goes up to 800% (raised from 400%), still capped at the 8192px maximum output size.
Fixed
  • Undo/redo history now labels deleting a connected node as "delete " (or "delete N nodes") instead of the misleading "delete connection (+1 more)".
  • Export Image: an absolute output path that uses filename tokens (such as C:\Exports\hero_{date}.png) is now written to exactly that location; previously the drive prefix was mangled (C: became C_) and the file silently landed in a look-alike folder tree next to the project file.
  • Fixed undo/redo glitches where redoing past the creation of a node, group, or sticky note could crash the canvas, scatter a group's nodes, or lose edits made afterward.
  • Export Image: multi-node export labels and Reveal in Explorer now use the real filename when the output path uses template tokens like {source}.
  • Export filenames now keep underscores exactly as typed, including a trailing underscore or several in a row, instead of merging or removing them.
  • Parameters panel: dragging a slider's value ladder with the middle mouse button no longer scrolls the panel at the same time.
  • Parameters panel: the node name and category badge in the header no longer overlap when the panel is narrow; the badge drops out and the name clips to an ellipsis, with the full name and category shown on hover.
  • AI nodes fed by a batch no longer falsely show "Input changed" every time a saved project is reopened.
  • AI nodes fed by a multi-frame batch now process every frame on a freshly opened project, not just the first.
  • Double-clicking a .arcb file while ArcBrush is already running now opens it in the existing window instead of doing nothing (Windows and Linux).
  • Tooltips across the app (including inside nodes, on filmstrip frames, palette swatches, and node-graph pins) now respect the Tooltip Delay setting and the Show Tooltips toggle instead of appearing instantly.
  • Tooltips shown inside nodes no longer look cramped; all tooltips now use the same padding as the rest of the app.
  • Shape node: an Outside or Center stroke is no longer cut off at the edge when the shape is locked to the output size, or tiled at 100%; the shape is inset so the whole stroke stays visible.
  • Node thumbnails on the canvas no longer flicker to a gray placeholder while you drag a slider or an on-canvas manipulator that re-renders the node continuously.
  • Preview panel: large batches in the "All" view can now be zoomed out below 6% with the mouse wheel, trackpad, keyboard, and zoom buttons so the whole grid stays visible; the minimum zoom was previously locked at 6%, and zooming in from the Fit view snapped straight to it.
  • Linux: pasting an image or files from the clipboard into the node graph now works in KDE Plasma Wayland sessions.
  • Linux: the status bar VRAM reading now reports the GPU ArcBrush actually renders on. On a machine with more than one GPU it could previously show an unrelated device's memory or a tiny wrong figure such as 15/512 MB; NVIDIA cards now read through the driver's own reporting, AMD and Intel cards read the matching device, and the reading hides itself rather than show a wrong number when the correct device cannot be measured.
  • Preview panel: viewing a large batch no longer uses far more video memory than needed or briefly freezes; the grid now draws downscaled thumbnails of only the visible frames (still crisp as you zoom in) instead of a full-resolution copy of every frame on the GPU.
  • Export Image / Export Batch: a successful export now marks the project as having unsaved changes, so after reopening a project you exported but did not re-save, the export node no longer wrongly shows "Input changed, export to update".
  • Editing a node's custom label in the Properties panel and then selecting another node no longer copies the in-progress label onto the newly selected node.
  • Eyedropper now reports the image's true pixel colors (and the Paint color pick samples the document), so picks are correct on monitors with a non-sRGB color profile.
  • Using the eyedropper over a color swatch no longer also opens that swatch's color picker.
  • Paint node: painting a color over a matching background no longer leaves a faint one-shade-lighter ring along the stroke edge.

1.3.0

Added
  • Dockable panels: drag panel title bars to rearrange the layout, save it between sessions, and lock everything in place via Window > Lock Layout.
  • Pop any panel out into its own OS window for multi-monitor use, with per-panel Always on Top toggles.
  • Window menu lists every panel with show/hide toggles, plus Reset Layout and Lock Layout entries.
  • Ctrl+Shift+L, Ctrl+Shift+P, and Ctrl+Shift+I toggle the Library, Preview, and Properties panels; each shortcut is shown next to its Window menu entry.
  • Workspace presets (Window > Workspace): Default, Big Graph, and Vertical built-ins, plus Save Workspace As... and Manage Workspaces... for custom layouts.
  • Application Log and Generation Log are now dockable panels.
  • Windows: dragging an image directly out of a Chrome, Edge, Brave, or Vivaldi tab into the canvas now creates an Image In node; unsupported formats surface a toast instead of failing silently.
  • Per-monitor DPI scaling: text and UI chrome rescale cleanly when a popped-out panel moves between mixed-DPI displays.
  • Drop a node onto a wire to splice it in: the wire under the cursor highlights and both halves rewire as a single undo step.
  • Shake a node while dragging to disconnect every wire from it; upstream and downstream are bridged automatically where possible.
  • Node graph snapping: dragging a node aligns its edges to nearby nodes with dashed guide lines and snaps it into evenly-spaced runs marked by double-arrow badges; hold Ctrl to move freely.
  • Ctrl+Plus / Ctrl+Equal / Ctrl+Minus (numpad too) zoom shortcuts on the Node Graph and Preview, with matching View menu entries.
  • View > Hide Thumbnails (Lazy Eval) toggle: hides every on-canvas thumbnail and only evaluates the selected node's chain, with a status-bar indicator.
  • Selected node is now saved with the project and restored on reopen.
  • Settings > Privacy shows a Machine ID preview; the install ID used for anonymous telemetry is now stable across settings wipes.
  • Help > Join Discord opens the ArcBrush Discord server in your browser.
  • Ctrl+R swaps two selected nodes, trading positions and rewiring connections by pin name.
  • Arrange node accepts any number of input images via a variable-count pin array.
  • Settings > Display: Wire Curving slider controls how much Curved wires bend (range 0 to 10, default 4).
  • Hold Q on the Node Graph to bring every wire on top of the nodes in a high-contrast overlay for tracing connections.
  • Layer node: composite any number of inputs as a layer stack with per-layer blend mode, opacity, and visibility; drag rows in Properties to physically reorder the wires on the canvas.
  • Film Grain node: per-channel analog film grain with eight stock presets (Kodak Vision3 250D/500T, Portra 400, Tri-X 400, Cinestill 800T, Fuji Eterna 250, Ilford HP5+, plus Custom) and an optional mask.
  • Halftone node: dot screening with five spot shapes (Round / Square / Diamond / Line / Ellipse), three color modes (Grayscale / RGB / CMYK), eight presets, and an optional mask.
  • Multi-node connect: with several nodes selected, drag from one of their output pins onto an array input to fan the whole selection into consecutive pins, or onto empty canvas to add a new Arrange / Layer / Collect node already wired to every selected output.
  • New nodes get a unique number appended to their name on creation (e.g. Channel Merge 1, Channel Merge 2); custom labels remain optional and counters survive save and reload.
  • Right-click a file-referencing node (Image In, SVG Import, Export Image, Export Batch) for a Reveal in Explorer / Finder entry that opens your OS file manager.
  • Transform, Text, Mesh Warp, and Corner Pin nodes expose Blend Mode and Opacity controls when Output Mode is set to Composite.
  • View > Zoom to Selected (F hotkey) frames the selected nodes, groups, and sticky notes; with nothing selected it fits the whole graph.
  • AI Remove Background: Ideogram (illustrations / art / typography) and Pixelcut (product / studio photography) engines, both at the same flat 1 credit per image.
  • AI Text to Image: new GPT Image 2 tier with six output sizes (1024x768 to 3840x2160) and three quality levels (Low / Medium / High).
  • AI Image Edit: new GPT Image 2 Edit tier with Auto (match input) plus the same six size presets and three quality levels.
  • AI Image Edit: FLUX.2 Pro and FLUX.2 Max expose an Output Size combo (Auto plus six presets) to control per-megapixel cost.
  • Batch processing: wire a batch output into any image-consuming node and the graph evaluates every frame through it automatically. Build pipelines that process an entire folder of images through chains of filters, color corrections, and exports in one pass.
  • Insert any filter (Blur, Levels, Sharpen, Posterize, Drop Shadow, etc.) between Palette Remap and Export Batch; each variant flows through the filter and re-bundles automatically. AI nodes still gate behind their Generate button.
  • Export Batch node body shows a live file-write progress bar while a run is in flight, so progress is visible without keeping the parameter panel focused on the node.
  • Package as Zip success dialog has a Reveal in Explorer / Finder button next to OK that opens your OS file manager with the .zip selected.
  • Reroute node: double-click any wire to insert a compact routing dot that passes the signal through unchanged. Chain multiple reroute dots for cleaner paths, and fan out from one reroute output to several selected nodes at once.
  • Batch processing shows a live progress bar on each node body during evaluation, displaying frame count and completion status.
  • AI batch confirmation: when AI nodes receive batch input, a confirmation modal shows total cost (with cache hits pre-deducted) before dispatching, with per-frame caching and one-click retry for failed frames.
  • Collect node: bundles any number of IMAGE inputs into a single batch output with per-frame names and drag-to-reorder.
  • Image Folder node: loads all images from a folder as a batch, with file type filtering, recursive scan, sort by name/date/size, and a frame limit for testing.
  • Input pins fed by a batch source show the frame count on the pin label (e.g. "image (x4)").
  • Split Batch node: decompose a batch back into individual images or sub-batches with four modes (Individual outputs, equal Chunks, contiguous Slice, or glob-pattern Filter routing). Output pins rebuild dynamically as you switch modes.
  • Sprite Sheet and Export Batch: trim transparency, extrude edge pixels (1-8 px) to prevent texture bleeding, and constrain output dimensions to Power of Two, Multiple of 4, or Word Aligned.
  • Sprite Sheet: Show Outlines toggle draws colored sprite bounds in the preview panel, and the output size label appears in the parameters panel.
  • Export Batch: configurable filename template with tokens for frame name, source label, index, dimensions, date, node label, and graph name. Live preview of the resolved filename below the template field.
  • Export Image: output path field supports the same filename tokens; hovering shows the expanded path in a tooltip.
  • Drag a folder from the OS file explorer onto the node graph canvas to create an Image Folder node with the folder path pre-filled.
  • Optional input pins render as hollow shapes to distinguish them from required pins at a glance.
  • Settings > Performance: batch concurrency cap and memory ceiling sliders control how many batch frames run in parallel and when frames spill to disk. The memory ceiling defaults to half of your installed RAM and the slider scales to your machine, so large-memory systems are not throttled and low-memory systems are not overcommitted.
  • Chromatic Aberration node: per-channel radial dispersion simulating lens chromatic aberration, with Radial (vignette-style center falloff) and Uniform (fixed-angle shift) modes, and a Shift/Smear method toggle for clean separation or motion-blur-like channel streaking.
  • Batch preview: Magic Wand, Vignette, Gradient, and Transform / Crop / Smart Scale handles now work while previewing a single frame of a batch, track whichever frame you are viewing, and apply edits across every frame.
  • Smart Scale: target width and height accept px or % units; % scales each frame to a percentage of its own size, so a varying-size batch scales proportionally instead of snapping to one fixed pixel count.
  • Pixel sliders (Crop, Smart Scale, Offset, Pad, and the like) turn the px toggle amber when a fixed pixel value will apply per-frame across a varying-size batch, hinting that % scales each frame proportionally.
  • Resize node: with a size_ref connected, match its width, its height, or both; matching one axis keeps the source aspect ratio.
  • Arrange Nodes menu (Edit > Arrange Nodes, also on the canvas right-click menu): Distribute spreads the selected nodes with equal spacing while keeping the outer nodes in place; Pack reflows the whole selection into a tidy line toward the left, right, top, or bottom with a constant gap (wider horizontally than vertically, to leave room for wires). Both also line the nodes up straight. Shortcuts: Ctrl+Shift+H and Ctrl+Shift+V distribute, Ctrl+Shift+Arrow packs toward that direction.
Changed
  • Settings > Interface: canvas snapping is now one Snap Mode selector (Snap to Nodes / Snap to Grid / None) with Snap to Nodes the default, so grid snapping is no longer on by default.
  • Align Horizontally and Align Vertically now live under the new Edit > Arrange Nodes menu.
  • Zoom to Fit moved from F to Ctrl+0 / Cmd+0; View menu labels updated to match.
  • Shake to disconnect now works with any number of selected nodes: drag a multi-node selection and shake to cut every wire crossing the selection boundary while preserving the internal connections.
  • Dragging a mixed selection of nodes, groups, and sticky notes now moves every selected item together as a single undo step, matching how alt+drag duplication already worked.
  • Crop, Smart Scale, Corner Pin, and Transform preview handles have larger grab zones, so handles flush against the panel edge are easier to land on.
  • Crop and Smart Scale: dragging a handle leaves the preview at its current zoom instead of refitting every frame, so the handles stop moving under the cursor as the output resizes. Press the toolbar Fit button to refit when done.
  • Panel layout is now built on a docking system instead of fixed left/middle/right columns; first launch after upgrade rebuilds to the new default.
  • Panel tabs read as Library, Node Graph, Preview, and Properties (previously the title bars were blank).
  • Menu items throughout the app align icons, labels, shortcuts, and check marks in columns.
  • Workspace and layout preset names now allow up to 128 bytes (was 64); built-in names (Default, Big Graph, Vertical) are reserved.
  • Reset Layout confirmation dialog closes with the Escape key, matching the rest of the app's modals.
  • Preview panel: switching to a different node while in Fit mode re-fits the new image and re-centers the pan instead of snapping to a fixed zoom stop.
  • Curved wires no longer overshoot on shallow-angle connections; backward connections still loop smoothly, and the new Wire Curving slider tunes bend strength.
  • Preview Locked badge now shows the locked node's name and updates live as you rename it.
  • Node Graph minimum zoom dropped from 10% to 5% so very large graphs frame in one view.
  • AI Text to Image and AI Image Edit: removed the Safety Tolerance slider; underlying value is set to the most permissive supported by each model.
  • AI Text to Image and AI Image Edit: model info card no longer duplicates the cost; the credit cost is shown only above the Generate / Edit button.
  • AI nodes: when your balance is short, the action button reads "Need X more credits to Generate / Edit / Run" and opens the purchase flow on click.
  • AI Text to Image and AI Image Edit: tier picker descriptions now match what each model is actually good at.
  • AI Remove Background: each entry in the Model combo carries a parenthetical hint (rembg fastest; Bria RMBG 2.0 default; Ideogram and Pixelcut high quality).
  • Dialog windows throughout the app share consistent padding, button sizing, icons, button order (Cancel left / affirmative right), Esc-to-dismiss, and stable width across every modal.
  • Color Balance and Black and White nodes: the gradient color sliders now support the middle-mouse ladder for fine adjustment, matching the rest of the app's sliders.
  • Palette Remap processes all palette slots in parallel, so batches with many variants finish faster on multi-core machines.
  • Batch filmstrip thumbnails render at their actual pixel size relative to the largest frame, so a 16x16 sprite appears smaller than a 64x64 in the same batch.
  • Batch node bodies show a dimension summary below the filmstrip (e.g. "512 x 512, RGBA, x47" or "mixed sizes, RGBA, x47") with an amber error count when frames have failed.
  • Batches with more than 128 frames show an ellipsis tile in the filmstrip instead of rendering sub-pixel cells.
  • Clicking a frame in the Preview panel highlights the corresponding filmstrip cell on the node body.
  • Preview panel tab strip for non-palette batches shows source labels in neutral gray instead of blank colored buttons.
  • Sprite Sheet packs mixed-size sprites into a near-square sheet using MaxRects bin packing instead of wasting space with a uniform grid. Existing uniform-size batches with an explicit column count produce the same layout as before.
  • Sprite Sheet JSON manifest matches the TexturePacker JSON Hash format for direct import into game engines.
  • Node body thumbnails, Preview channel view switches, and histogram computation run asynchronously, keeping the interface responsive during large batch processing.
  • Performance: eliminated a full-image memory copy at the end of every node evaluation, reducing allocation by hundreds of megabytes on large graphs.
  • Performance: Shape node grid rendering is parallelized across CPU cores for faster evaluation on large canvases.
  • UI elements throughout the app scale correctly at 125%, 150%, and 200% system DPI instead of rendering at fixed pixel sizes.
  • Layer node per-layer controls are split into a two-row card layout: identity row (drag, visibility, name, disconnect) above a property row (blend mode, opacity), so layer names are no longer truncated at narrow panel widths.
  • Node groups automatically resize to keep their contents enclosed, growing and shrinking as the nodes inside them change size and sliding neighbouring groups aside instead of overlapping.
Fixed
  • Image In: the Large Image warning now respects the node's Custom Size setting, so a 5000x5000 source resized to 512x512 on import no longer shows the warning.
  • Crop, Smart Scale, Corner Pin, and Transform manipulator handles stay inert when the node is bypassed instead of letting you drag invisible parameters.
  • Ctrl+F node-search popup hides and resets its matches when you open a new file or start a new project, instead of carrying over stale results.
  • Settings file is written atomically; a crash or power loss during save no longer wipes preferences.
  • A single malformed entry in recent_files or favorites inside settings.json no longer discards every other setting.
  • Out-of-range window positions in a corrupt settings file fall back to OS default placement instead of putting the window off-screen.
  • Out-of-range zoom values in a project file are clamped to a safe range, and non-finite values fall back to 1:1.
  • Pasting a node from a version with unrecognized types now drops the unknowns with a toast instead of silently creating wrong-shape Canvas nodes.
  • AI Text to Image FLUX size presets: "1920x1080" and "1080x1920" labels now match what is actually requested.
  • Linux: dragging a window edge to resize on Wayland feels responsive again (the canvas now repaints at the end of the drag instead of live).
  • Linux: ArcBrush's app icon now appears in the taskbar, dock, and Activities overview on Wayland desktops (GNOME, KDE, Cosmic, Sway, niri).
  • Linux: opening a file dialog no longer triggers a "ArcBrush is not responding" prompt.
  • Linux: GPU acceleration turns on when OpenCL is available on your system; ArcBrush re-probes for OpenCL each launch when previously unavailable.
  • Paint node: stacking soft brush strokes no longer produces concentric rings of unrelated colors at iso-alpha contours.
  • Opening or creating a project no longer carries thumbnails or selection state over from the previously open project.
  • Drop-on-wire splice and the Y-key wire cutter now hit-test against the visible wire path when Wire Style is Right Angle.
  • 16-bit-per-channel TIFF, 16-bit WebP, and floating-point TIFF files now decode correctly instead of loading as solid white blocks.
  • Adding a node and immediately setting its initial values (Image In file path, palette slot colors, Canvas dimensions) is now part of the same undo step.
  • Changing UI Scale in Settings is now undoable; Ctrl+Z after a scale change restores the previous node positions and group bounds.
  • AI generations fail fast on a misconfigured proxy URL instead of stalling before reporting the error.
  • Noise node: scrubbing parameter sliders no longer leaves rectangular transparency bands through the preview, and previews refresh faster while scrubbing.
  • Shift+click on a sticky note body or resize handle, or a group's resize handle, no longer clears the selected nodes on the canvas.
  • Deleting an AI node while its generation is still queued on the server no longer deducts credits; deletions after the run has actually started still bill the run that was already in progress.
  • Settings > Performance: turning off GPU Acceleration now affects the running session; previously the toggle was silently ignored by worker threads, so older laptop GPUs that occasionally tripped an OpenCL error couldn't be worked around by disabling it.
  • Export Image no longer blocks the UI while writing the file to disk.
  • Clicking "Run" on an AI node while upstream is still evaluating no longer silently fails; the run is deferred until upstream completes.
  • Image In and SVG Import no longer crash on Windows when the file path contains CJK, emoji, or other non-ASCII characters.
  • Settings file save no longer crashes if the target path is locked by another process.
  • Stale recent file entries are pruned on startup instead of accumulating dead entries in the File menu.
  • Opening a malformed .arcb file skips bad entries gracefully instead of aborting the entire load.
  • Resize and Pad: wiring only the size_ref pin no longer passes the reference image through; the nodes now require an image input.
  • Linux Wayland: a file or image dropped onto the canvas now creates the node under the cursor instead of at a stale position.
  • Dropping several files onto the canvas in one drop is now a single undo step, instead of one undo per file.
Known issues
  • Linux Wayland: pop-out into a separate OS window is disabled because the protocol does not yet provide cross-display window drag; X11 (including XWayland) and Windows / macOS still support pop-out.
  • macOS: a popped-out panel does not follow you when you switch Spaces in Mission Control with "Displays have separate Spaces" enabled; use the Window menu to recall the panel.

1.2.0

Added
  • Settings > Network: configure HTTP proxy (Direct / Auto-detect / Manual) with Basic / NTLM / Negotiate auth and a custom CA bundle for corporate or restricted networks.
  • Settings > Network > Test connection: 4-step probe (resolve / TCP / TLS / HTTP) with per-failure tips and a Copy diagnostics button.
  • First-run banner appears when ArcBrush cannot reach its API server during startup, with a Configure network button.
  • Linux: Settings > Interface > UI Scale shows the detected system scale beneath the slider, plus an Auto button.
  • Blur node: Radial (rotational smear) and Zoom (radial smear toward / away from a center) blur types with center-point pickers.
  • Transform node: Pivot X/Y parameters set the anchor point for rotation and scale.
  • Preview Locked banner appears above the locked node in the graph.
  • Quick-Lock mode (Settings > General, on by default): double-click a node to lock the preview to it; double-click empty canvas to unlock.
  • Settings dialog: each tab has a help icon that opens the matching online documentation.
  • Gradient and Gradient Map: Interpolation dropdown with seven modes (RGB, Linear sRGB, OKLab, OKLCh, HSV, Kubelka-Munk, Constant), plus a Hue Path control for HSV and OKLCh.
  • Palette From Gradient node (Color category): generate a palette by sampling colors from an embedded gradient with editable swatch names.
  • Linux / macOS: file path fields accept and remember ~/... shorthand for paths inside your home folder.
  • High Pass node (Filter category): isolate detail by subtracting a blurred copy, with Per-channel and Luminance modes and an optional mask input.
  • Node Library: Favorites section at the top of the panel, populated by a star button on each node's Properties panel header.
  • Settings dialog: right-click any control to reset it to its default value.
Changed
  • Gradient and Gradient Map presets are now a dropdown with live previews of 16 curated gradients.
  • Canvas node is now grouped under the Generator category in the Node Library panel instead of Inputs.
  • Preview lock border and badge are now orange (was red), and the badge text reads "Preview Locked" (was "Locked").
  • Settings dialog: most rows are now a single line with explanatory subtext moved into hover tooltips.
  • AI nodes: when a generation fails, the node body and Properties panel now show the actual reason from the server instead of a generic message.
  • Opening a project saved with a newer ArcBrush shows the saving app's version in the upgrade-required dialog; unknown node types now route to the same dialog instead of being silently dropped.
  • Tile node: mismatched alpha input dimensions now produce a warning and continue with the image tile alone instead of silently dropping the alpha.
Fixed
  • Save dialogs: changing the Save as type dropdown updates the file name's extension to match the chosen file type (Windows).
  • Gradient Map: stop transparency now affects the output; the previous Preserve Alpha checkbox is replaced by an Alpha dropdown (Preserve / Multiply / Replace).
  • Purchase Credits no longer opens a "not yet available" dialog when the API server is unreachable; a toast explains the connection issue.
  • Right-clicking a text field in Settings now shows a Cut / Copy / Paste menu instead of closing the dialog.
  • Linux: ArcBrush no longer renders with a tiny UI on Wayland desktops that use high-DPI display scaling.
  • Windows: black window or frozen interface on systems with Intel UHD or Iris integrated graphics, with a [gl] compatibility_profile escape hatch for stubborn drivers.
  • Manipulator handles for Transform, Crop, and Smart Scale now line up with the input image immediately after opening a saved project.
  • Linux: dragging a window edge to resize on Wayland desktops now repaints the canvas live during the drag.
  • Linux: dragging an image from a web browser into the canvas now creates a working Image In node in many more cases (Firefox / LibreWolf, Google Images, hosts that block non-browser requests).
  • Linux: the eyedropper button on color pickers now samples the actual color under the cursor on Wayland desktops.
  • Eyedropper picks now apply the color from exactly the pixel under the cursor at the moment of the click.
  • Linux: sliders in Settings > Defaults no longer feel sticky during a drag.
  • AI nodes: clicking Generate after a failed generation now correctly re-runs the request instead of staying stuck on "Waiting in queue...".
  • Mesh Warp: Nearest interpolation no longer produces salt-and-pepper sampling noise across the warped region.
  • Mesh Warp: stray colored dots no longer appear at mesh edges in Nearest mode.
  • Mesh Warp: forward-scatter rasterizer no longer produces transient flicker at cell seams and folded warps.
  • Mask Refine: feathering an alpha mask no longer produces a dark halo around opaque edges; Dilate / Close / Gradient / Black Hat also stop turning newly-opaque pixels black on RGBA inputs.
  • AI nodes: changing a parameter or deleting the node while a generation is streaming now cancels the network request immediately.
  • Y-key wire cutter now commits the cut whether you release the Y key before or after the mouse button.
  • Tile node: the alpha input pin now actually contributes to the output.

1.1.0

Added
  • File > Package as .zip... bundles the current project and every referenced file (images, fonts, AI outputs) into a single shareable archive.
  • Channel Split node (Color category): split an RGBA image into four single-channel image outputs (R, G, B, A).
  • Channel Merge node (Color category): combine up to four single-channel image inputs into one RGBA image with per-channel Zero / One / Custom fill.
  • AI nodes show an "Insufficient Credits" dialog with Cancel and Purchase Credits options when your balance is below the cost.
  • Composite node: hovering a Blend Mode in the dropdown live-previews that mode on the canvas.
  • Group context menu: Select All Nodes, plus Bypass Group / Enable Group toggles every contained node at once.
  • Settings > Interface: Color Picker option to switch every color picker between Hue Bar (default) and Hue Wheel.
Changed
  • Gradient and Gradient Map editors: the per-stop eyedropper button now reads "Pick Color" with a clearer tooltip.
  • Group and sticky-note resize handles show the diagonal cursor that matches each corner's orientation.
  • Export Image: picking an explicit Format updates the output path's extension to match (preserving .jpeg / .tiff if typed).
Fixed
  • Windows: double-clicking a .arcb file in Explorer now opens that file (including paths with accented or non-Latin characters).
  • Dragging an image from a browser into the canvas no longer creates an Image In node that breaks after the project is reopened; drops are copied into the project's cache.
  • Re-enabling a previously bypassed AI node restores the last generated image from the project's cache instead of leaving the bypass passthrough output.
  • Exporting an image to WebP no longer fails with "WebP encode failed"; both lossy and lossless WebP output now write correctly.

1.0.3

Added
  • Eyedropper button on every gradient stop in the Gradient and Gradient Map editors.
Changed
  • Application Log window opens at a wider default size so the table is readable without resizing.
Fixed
  • Windows: laptops with hybrid graphics (NVIDIA Optimus, AMD PowerXpress) no longer launch into a black window; the app requests the dedicated GPU at startup.
  • The per-file AI spend total now survives Save As and file renames.
  • Curves node: the endpoint control points at (0, 0) and (255, 255) are now clickable from anywhere within their visible disc.
  • Gradient and Gradient Map editors: stops at position 0 and 1 can now be clicked and dragged from anywhere within their handle, including past the bar edge.
  • Polar Remap: a newly created node now produces output that matches the Mode dropdown selection.

1.0.2

Added
  • Non-Latin filenames and text (Chinese, Japanese, Korean, Cyrillic, Greek, Hebrew, etc.) now render correctly throughout the app instead of showing as question marks.
Fixed
  • Mac: filenames and paths with non-Latin characters no longer render with gap-spaced characters or floating accent marks in the Recent Files menu, window title, and tooltips.
  • Mac: pasting non-Latin text from the clipboard into any input field no longer renders with gap-spaced characters or floating accents.

1.0.1

Fixed
  • File paths with accented characters, non-Latin scripts, or folder names from non-English Windows installs now load and save correctly instead of failing with a misleading "out of memory" error.
  • Drag-and-drop from a folder whose path contains non-ASCII characters now opens the file correctly instead of showing "File not found".
  • An unexpected error during a frame now shows a clear "Unexpected Error" dialog with the underlying message instead of always reporting out-of-memory.

1.0.0

Initial Public Release.

Added
  • Right-click any node with an image output to "Copy to Clipboard as PNG" with intact transparency.
  • Right-click context menu now also has a Delete Node entry (with heal-on-delete behavior matching the Del key).
Changed
  • Preview transparency checkerboard uses fixed-size tiles at all zoom levels: the pattern pans with the image but no longer scales.
Fixed
  • Status bar credit balance and sign-in label no longer sit flush against the right edge of the window.