Logo
Explore Help
Register Sign In
starred/photocraft
Watch 1
Star 0 Fork 0
mirror of https://github.com/storytold/photocraft.git synced 2026-10-18 18:03:24 -05:00
Code Issues Packages Projects Releases 9 Wiki Activity

9 Releases 12 Tags

RSS Feed
  • v0.7.0 7926161595
    Compare

    PhotoCraft v0.7.0 Stable

    dean released this 2026-10-10 20:36:30 -05:00 | 1388 commits to main since this release

    📅 Originally published on GitHub: Sun, 11 Oct 2026 02:12:31 GMT
    🏷️ Git tag created: Sun, 11 Oct 2026 01:36:30 GMT

    What's Changed

    • docs: register the MCP server from an installed release by @sawizzle in https://github.com/storytold/photocraft/pull/2185
    • docs(adjust): align Levels and Curves comments with evaluation order by @coygeek in https://github.com/storytold/photocraft/pull/2212
    • Preserve unchanged XMP translations in File Info by @Benziza in https://github.com/storytold/photocraft/pull/2152
    • Smudge: use the Brush Settings spacing for retouch strokes (#2140) by @davidmann4 in https://github.com/storytold/photocraft/pull/2171
    • Fix layer mask toggle action labels by @optimalbytee in https://github.com/storytold/photocraft/pull/2156
    • Fix hyperlink in credits panel by @crqch in https://github.com/storytold/photocraft/pull/2146
    • Layers: mask thumbnails update after Invert and other whole-mask edits (#2117) by @davidmann4 in https://github.com/storytold/photocraft/pull/2164
    • Keep the selection when smart selection finds nothing by @vbasky in https://github.com/storytold/photocraft/pull/2235
    • fix(layer style): wrap Make/Reset Default buttons by @kmnkv1 in https://github.com/storytold/photocraft/pull/2209
    • i18n(ru): translate layer style effects by @kmnkv1 in https://github.com/storytold/photocraft/pull/2210
    • Layers panel: Opacity and Fill share one right-aligned column (#2085) by @davidmann4 in https://github.com/storytold/photocraft/pull/2173
    • Ignore hidden RGB when Magic Wand selects transparency by @harrisonoconnorhover in https://github.com/storytold/photocraft/pull/2273
    • Canvas: clip the Free Transform preview to the canvas (#2027) by @davidmann4 in https://github.com/storytold/photocraft/pull/2201
    • fix(ui): avoid drawing panel borders twice by @tropicaaal in https://github.com/storytold/photocraft/pull/2226
    • Layers panel: press-drag-release picks a fill or adjustment layer (#2071) by @davidmann4 in https://github.com/storytold/photocraft/pull/2172
    • fix(engine): select neighbouring layer after deletion by @kotulsky in https://github.com/storytold/photocraft/pull/2189
    • Preferences: the dialog grows with the window by @luniiya in https://github.com/storytold/photocraft/pull/2155
    • scorecard: Marquee modifiers and brush resize drag are done (TOOL-214-2, TOOL-213-10) by @Duke242 in https://github.com/storytold/photocraft/pull/2261
    • Confirm layer deletion only from the Layers trash button by @kotulsky in https://github.com/storytold/photocraft/pull/2197
    • Soft brushes paint soft strokes and thin lines stay even: a Gaussian-like tip and area coverage for tiny tips by @tanish2k09 in https://github.com/storytold/photocraft/pull/2167
    • TGA: save the document's alpha channel as 32-bit alpha (#2124) by @davidmann4 in https://github.com/storytold/photocraft/pull/2157
    • Preserve quoted multiline variable CSV records by @harrisonoconnorhover in https://github.com/storytold/photocraft/pull/2242
    • Workspace: wire open_documents_as_tabs preference (#204) by @Hathor875 in https://github.com/storytold/photocraft/pull/2177
    • Expose Clone Stamp opacity and flow and apply them to strokes by @Ni-zav in https://github.com/storytold/photocraft/pull/2256
    • Masks: target a new layer mask and keep separate colour pairs for mask and pixels (#2166) by @davidmann4 in https://github.com/storytold/photocraft/pull/2200
    • Default layered edits of flat images to PSD on Save by @harrisonoconnorhover in https://github.com/storytold/photocraft/pull/2234
    • Selection cursors: badges for cutting, copying and dragging the selected pixels by @texjer in https://github.com/storytold/photocraft/pull/2250
    • Tools: double-clicking a layer mask launches Select and Mask with preference (#204) by @Hathor875 in https://github.com/storytold/photocraft/pull/2161
    • Add pixel mask density and feather controls to Properties by @harrisonoconnorhover in https://github.com/storytold/photocraft/pull/2240
    • Cmd held is the Move tool with the painting tools (Cmd+Alt duplicates) by @texjer in https://github.com/storytold/photocraft/pull/2248
    • Hand tool: an open hand and a fist as the pointer on Windows, and the fist while panning everywhere (#2196) by @Sir-Starch in https://github.com/storytold/photocraft/pull/2221
    • Move tool on a locked layer: Photoshop's message by @texjer in https://github.com/storytold/photocraft/pull/2249
    • fix(ui): remove the gap beneath Spectrum document tabs by @Ni-zav in https://github.com/storytold/photocraft/pull/2265
    • Web: leave the JPEG XL DNG decoder out of the wasm (25.1 MB -> 24.3 MB) by @echelon in https://github.com/storytold/photocraft/pull/2233
    • fix(ui): mode buttons respect two-column toolbar by @tropicaaal in https://github.com/storytold/photocraft/pull/2241
    • Layer › Rasterize acts on every selected layer; the Layers menu offers "Rasterize Layers" (#2243) by @Sir-Starch in https://github.com/storytold/photocraft/pull/2253
    • Fix SVG selection and import detection by @alex-ctms in https://github.com/storytold/photocraft/pull/2224
    • Pen pressure curve: Preferences › Tools shapes how pen pressure reaches every brush by @tanish2k09 in https://github.com/storytold/photocraft/pull/2195
    • feat(ui): allow toolbar to scroll by @tropicaaal in https://github.com/storytold/photocraft/pull/2238
    • GPU startup: CPU mode on Linux falls back to Vulkan to present the window (#1337) by @MrCloudy2 in https://github.com/storytold/photocraft/pull/2206
    • Layers menu and layer commands follow the selection, not the active layer (#2244) by @Sir-Starch in https://github.com/storytold/photocraft/pull/2254
    • Window edges: easier to grab, theme-safe cursors, and no lost hover after a resize (#1581) by @MrCloudy2 in https://github.com/storytold/photocraft/pull/2205
    • fix(engine): reject invalid core-filter parameters by @0x6Ason in https://github.com/storytold/photocraft/pull/2228
    • Keep duplicated Smart Objects linked to shared contents by @harrisonoconnorhover in https://github.com/storytold/photocraft/pull/2222
    • fix(ui): complete system appearance selection and styling by @coygeek in https://github.com/storytold/photocraft/pull/2168
    • Add the Remove tool with non-local patch completion by @JohnnYoru in https://github.com/storytold/photocraft/pull/2193
    • Regenerate docs/scorecard.md after #2193 by @echelon in https://github.com/storytold/photocraft/pull/2404
    • fix(engine): Image › Adjustments on a smart object records a smart filter (FILE-215-4); strokes honour the document CMYK profile by @kubuntugamer in https://github.com/storytold/photocraft/pull/2229
    • Expand arithmetic expressions across numeric inputs by @TheSeanLavery in https://github.com/storytold/photocraft/pull/2252
    • automation: accept absolute paths beneath the automation roots (#2176) by @SBaksa in https://github.com/storytold/photocraft/pull/2216
    • Filters: preview at the scale OK applies (#2063) by @davidmann4 in https://github.com/storytold/photocraft/pull/2207
    • Load Thai fallback fonts for native UI text by @harrisonoconnorhover in https://github.com/storytold/photocraft/pull/2280
    • Content-Aware tools: Photoshop's behaviour, measured by @Unemars in https://github.com/storytold/photocraft/pull/2202
    • Apply Type formatting to selected text layers by @harrisonoconnorhover in https://github.com/storytold/photocraft/pull/2266
    • Distance fields on threads: bevel size changes 2-3x cheaper (#2119) by @Sir-Starch in https://github.com/storytold/photocraft/pull/2162
    • EXR: Cryptomatte layers list, decode and hash to the specification by @Elvis33LE in https://github.com/storytold/photocraft/pull/2180
    • Expose native shape stroke controls with staged previews by @optimalbytee in https://github.com/storytold/photocraft/pull/2218
    • Select and Mask: 4x faster CPU refinement with exact octagonal morphology by @excited-raccoon in https://github.com/storytold/photocraft/pull/2154
    • Addition : Brush popup better UI by @siraxe in https://github.com/storytold/photocraft/pull/2217
    • kys import: first launch asks before importing; edit.keyboardShortcuts importKys (#1987 review) by @texjer in https://github.com/storytold/photocraft/pull/2251
    • OpenRaster (.ora) open and save by @scottcampbelldata in https://github.com/storytold/photocraft/pull/2257
    • automation: test root look-alike siblings and sub/../.. climbs (#2216 follow-up) by @echelon in https://github.com/storytold/photocraft/pull/2528
    • Canvas: UI Scale must not magnify the image (#2121) by @maxm11 in https://github.com/storytold/photocraft/pull/2333
    • Free Transform: the Hand tool no longer steals a resize drag (#2302) by @maxm11 in https://github.com/storytold/photocraft/pull/2327
    • Clip warp tiles at the inverse horizon so steep Distort commits keep every pixel (#2271) by @MarekSpodBiedry in https://github.com/storytold/photocraft/pull/2500
    • GPU canvas: re-upload a layer or mask texture when its default pixel changes (#2422) by @MarekSpodBiedry in https://github.com/storytold/photocraft/pull/2446
    • fix(selection): constrain Polygonal Lasso segments with Shift (#2352) by @Ni-zav in https://github.com/storytold/photocraft/pull/2396
    • fix(properties): expose equal-gap horizontal and vertical distribution (#2349) by @Ni-zav in https://github.com/storytold/photocraft/pull/2398
    • Fix snapping when drawing a new crop inside the default frame by @harrisonoconnorhover in https://github.com/storytold/photocraft/pull/2549
    • Capture marquee selection modifiers at mouse press by @harrisonoconnorhover in https://github.com/storytold/photocraft/pull/2558
    • Marquee: keep one-pixel rows and columns on release (#2391) by @vangel76 in https://github.com/storytold/photocraft/pull/2562
    • Move tool: outline follows the moved layer (#2413) by @vangel76 in https://github.com/storytold/photocraft/pull/2565
    • Move tool: Ctrl/Cmd+arrow nudges the layer from any tool (#2474) by @davidmann4 in https://github.com/storytold/photocraft/pull/2556
    • Move tool: Auto-Select picks a type layer inside its text bounds (#2370) by @vangel76 in https://github.com/storytold/photocraft/pull/2591
    • Tools: a tool key brings back its group's last-used tool (#2608) by @vangel76 in https://github.com/storytold/photocraft/pull/2625
    • Zoom tool: double-click zooms to 100% (#2508) by @vangel76 in https://github.com/storytold/photocraft/pull/2527
    • Canvas: right-click outside the image opens the pasteboard colour menu (#2462) by @vangel76 in https://github.com/storytold/photocraft/pull/2633
    • Spot Healing: the drag trail shows the dabs the heal covers (#2364) by @vangel76 in https://github.com/storytold/photocraft/pull/2642
    • Preserve the Zoom drag anchor in rotated views by @harrisonoconnorhover in https://github.com/storytold/photocraft/pull/2583
    • Selection feather: the radius is the Gaussian's sigma, as in Photoshop by @MrCloudy2 in https://github.com/storytold/photocraft/pull/2529
    • Select › Modify › Smooth: a hard threshold, as in Photoshop, not soft edges by @MrCloudy2 in https://github.com/storytold/photocraft/pull/2557
    • Select › Modify › Border: Photoshop's soft band, 2r wide, not a hard r-pixel ring by @MrCloudy2 in https://github.com/storytold/photocraft/pull/2564
    • Keep surrounding spaces when renaming a layer (#2459) by @MarekSpodBiedry in https://github.com/storytold/photocraft/pull/2472
    • Layer commands accept an explicit layer with none selected; Deselect Layers is a no-op when nothing is selected (#2457) by @MarekSpodBiedry in https://github.com/storytold/photocraft/pull/2481
    • fix(engine): list running jobs before ended ones in jobs.list (#2395) by @KausBoss in https://github.com/storytold/photocraft/pull/2411
    • fix(psd): an unedited save writes Photoshop's Txt2 back unchanged (#2374) by @vivekprojects-GIT in https://github.com/storytold/photocraft/pull/2427
    • Remove tool: an empty layer is a no-op instead of running the fill (#2435) by @MarekSpodBiedry in https://github.com/storytold/photocraft/pull/2447
    • fix(vector): Stroke Path refuses pixel-locked and fully locked layers (#2388) by @KausBoss in https://github.com/storytold/photocraft/pull/2408
    • fix: Preserve CMYK solid and gradient fills through PSD round trips by @reneleonhardt in https://github.com/storytold/photocraft/pull/2628
    • fix(codecs): exports drop the source's EXIF thumbnail (#2147, #2373) by @vivekprojects-GIT in https://github.com/storytold/photocraft/pull/2450
    • fix(vector): Fill Path stays inside the active selection (#2387) by @KausBoss in https://github.com/storytold/photocraft/pull/2410
    • Let Edit > Fill and the fill keys fill an adjustment layer's mask (#2456) by @MarekSpodBiedry in https://github.com/storytold/photocraft/pull/2471
    • fix(document): restore layer comps when duplicating documents by @Ni-zav in https://github.com/storytold/photocraft/pull/2429
    • Float the layer mask, not the layer, when the mask is targeted (#2468) by @MarekSpodBiedry in https://github.com/storytold/photocraft/pull/2486
    • Quit and Close All: answering No closes that document (#2547) by @itrycodinganditsbad in https://github.com/storytold/photocraft/pull/2610
    • Save As to a flat format keeps the layered original (#2550, #2579) by @itrycodinganditsbad in https://github.com/storytold/photocraft/pull/2611
    • OpenEXR/HDR export: linearize grayscale documents too (#2386) by @itsF4LCON in https://github.com/storytold/photocraft/pull/2448
    • TGA: a 32-bit Targa opens with its alpha as "Alpha 1", as in Photoshop (#2225) by @MrCloudy2 in https://github.com/storytold/photocraft/pull/2482
    • Keep Duotone ink colours when converting to RGB, CMYK or Lab (#2383) by @itrycodinganditsbad in https://github.com/storytold/photocraft/pull/2614
    • Reject colliding data-set export filenames before writing by @harrisonoconnorhover in https://github.com/storytold/photocraft/pull/2433
    • Save and export dialogs remember where each document was last saved (#1826) by @bitshiftza in https://github.com/storytold/photocraft/pull/2421
    • Open file pickers for Replace Contents, Export Contents and Convert to Linked by @fabianghe in https://github.com/storytold/photocraft/pull/2438
    • Fix current .af artboard recognition and preserve editable boards by @callmeBalloch in https://github.com/storytold/photocraft/pull/2355
    • fix(blend): keep 32-bit Hue/Saturation/Color/Luminosity above 1 by @hideoneric in https://github.com/storytold/photocraft/pull/1735
    • Render: Tree and Picture Frame accept whole numbers sent as floats (#2501) by @davidmann4 in https://github.com/storytold/photocraft/pull/2521
    • Extended filters: an unknown option is a bad-params error (#2228 follow-up) by @xsvm in https://github.com/storytold/photocraft/pull/2548
    • Legacy Brightness/Contrast: brightness first, then contrast around 128, as in Photoshop by @MrCloudy2 in https://github.com/storytold/photocraft/pull/2615
    • Bevel contour: drop the glow-style Range stretch by @juswus2000 in https://github.com/storytold/photocraft/pull/2498
    • Blend modes: Fill below 100% works inside the blend for Photoshop's special eight by @MrCloudy2 in https://github.com/storytold/photocraft/pull/2552
    • Issue #2326: Hue/Saturation Colorize at 0% saturation gives grey, not a 25% tint by @LloydNicholson in https://github.com/storytold/photocraft/pull/2343
    • cms: accept ICC DeviceLinks whose output isn't a 3-channel PCS by @kavishkashehan726-sudo in https://github.com/storytold/photocraft/pull/2348
    • fix(ui): keep menus responsive on documents with thousands of layers by @m6502 in https://github.com/storytold/photocraft/pull/2454
    • Shift-click New Group groups the selected layers (#2561) by @itrycodinganditsbad in https://github.com/storytold/photocraft/pull/2613
    • Fix/2361 scrub layer labels s20261010 t083444 z og3kyw by @Ni-zav in https://github.com/storytold/photocraft/pull/2397
    • Filters: full-resolution preview for Add Noise, Wind, Extrude, Tree, the Filter Gallery and more (#2063) by @davidmann4 in https://github.com/storytold/photocraft/pull/2494
    • Handle allocation failures in large pixel operations by @Elvis33LE in https://github.com/storytold/photocraft/pull/2530
    • fix(layers): preserve Background behavior across merge, duplication and canvas resize by @Ni-zav in https://github.com/storytold/photocraft/pull/2419
    • Fixed a bug where if you select a mask and hit the delete key, it deletes the image by @Lyraedan in https://github.com/storytold/photocraft/pull/2635
    • fix(ui-egui): ui.key with ctrl does not trigger shortcuts off the Mac by @Erica4fr in https://github.com/storytold/photocraft/pull/2430
    • Warp Text: the dialog opens with the layer's warp and previews it live (#218) by @skraus2 in https://github.com/storytold/photocraft/pull/2539
    • Text fields: copy, cut and paste through the Mac menu's key equivalents by @Trade-Mottoes in https://github.com/storytold/photocraft/pull/2568
    • Filter Gallery: preview at the scale OK applies (#2502) by @davidmann4 in https://github.com/storytold/photocraft/pull/2524
    • Paste: a web Ctrl/Cmd+V key press and its paste event are one paste (#2638) by @vangel76 in https://github.com/storytold/photocraft/pull/2643
    • Opening card: a long file name no longer pushes Cancel out of the card (#2423) by @bitshiftza in https://github.com/storytold/photocraft/pull/2444
    • Windows: keep the custom title bar's window borderless (#2246) by @roaldosulejmani in https://github.com/storytold/photocraft/pull/2401
    • Image Size and Canvas Size open on Width, selected (#2329) by @alexanderalber in https://github.com/storytold/photocraft/pull/2357
    • Close a document tab with a middle click (#2570) by @bitshiftza in https://github.com/storytold/photocraft/pull/2637
    • Dock splitters push the neighbouring groups instead of stopping (#2573) by @itrycodinganditsbad in https://github.com/storytold/photocraft/pull/2624
    • Dropdowns: open lists start at their widest option's width (#2607) by @vangel76 in https://github.com/storytold/photocraft/pull/2634
    • DNG: lossy compression 34892 (baseline JPEG tiles) by @Elvis33LE in https://github.com/storytold/photocraft/pull/2021
    • Command palette: don't list menu separators (#2479) by @itrycodinganditsbad in https://github.com/storytold/photocraft/pull/2632
    • fix(ui): restore muted text color for disabled Layer Style effects by @Ni-zav in https://github.com/storytold/photocraft/pull/2321
    • Number fields: centre digits vertically by @rosematcha in https://github.com/storytold/photocraft/pull/1322
    • Menus: Reveal in Finder names the platform file manager off macOS (#217) by @skraus2 in https://github.com/storytold/photocraft/pull/2586
    • Enable menu Cut for selected type text by @harrisonoconnorhover in https://github.com/storytold/photocraft/pull/1448
    • Create new documents by double-clicking presets by @harrisonoconnorhover in https://github.com/storytold/photocraft/pull/2290
    • Re-render shapes when an artboard move grows the canvas (#2389) by @itrycodinganditsbad in https://github.com/storytold/photocraft/pull/2623
    • Curved shapes no longer report bounds 1 px too wide (#2537) by @itrycodinganditsbad in https://github.com/storytold/photocraft/pull/2641
    • Crop tool: W x H x Resolution mode resamples the crop to a size and resolution (#2443) by @davidmann4 in https://github.com/storytold/photocraft/pull/2483
    • EXR parts: import parts, channel groups and an AOV precomp as layers by @Elvis33LE in https://github.com/storytold/photocraft/pull/2338
    • fix(ui): toggle color swatches when selecting or deselecting a layer mask by @buivanvu94 in https://github.com/storytold/photocraft/pull/2560
    • Skip distant TSL-off stroke layers during composition by @Elvis33LE in https://github.com/storytold/photocraft/pull/2473
    • Ctrl+Tab and Ctrl+Shift+Tab switch to the next and previous document (#2340) by @alexanderalber in https://github.com/storytold/photocraft/pull/2353
    • Keep plug-in menu rows under Filter › Plug-ins in every language (#2540) by @bitshiftza in https://github.com/storytold/photocraft/pull/2627
    • Color panel: the field and hue strip fill the panel height by @Jeremy8776 in https://github.com/storytold/photocraft/pull/2455
    • Speed up Iris Blur without changing output by @optimalbytee in https://github.com/storytold/photocraft/pull/2578
    • fix(ui): unify Spectrum menu spacing and hover contrast by @Ni-zav in https://github.com/storytold/photocraft/pull/2323
    • Colour swatches open PhotoCraft's Color Picker: filter dialogs, Preferences, Note, Count, artboard (part of #2144) by @kayrockscreenprinting in https://github.com/storytold/photocraft/pull/2571
    • Dialogs: Tab walks the text fields only; New Document opens with its name selected by @texjer in https://github.com/storytold/photocraft/pull/1285
    • Search: an exact name match ranks first by @luniiya in https://github.com/storytold/photocraft/pull/2160
    • Channels: tint single colour channel views on the canvas with Show Channels in Color (#2385) by @mroxso in https://github.com/storytold/photocraft/pull/2574
    • Pixelate: CMYK Facet 13.7x faster, Lab halftone 5.0x faster by @excited-raccoon in https://github.com/storytold/photocraft/pull/2588
    • Tests: line-tables-only dev debuginfo, nextest GPU group, faster loop docs (#2204) by @davidmann4 in https://github.com/storytold/photocraft/pull/2414
    • Free Transform: refuse a locked layer up front, with Photoshop's message (#2585) by @vangel76 in https://github.com/storytold/photocraft/pull/2609
    • Crop tool: Photoshop's default mode turns the image behind an upright box; Use Classic Mode (P), Auto Center Preview (#1919) by @davidmann4 in https://github.com/storytold/photocraft/pull/2545
    • Free Transform: keep the layer's place in the stack (#2439) by @Geljic in https://github.com/storytold/photocraft/pull/2480
    • Quick Selection: 3.5x faster CPU strokes with hybrid graph cuts by @excited-raccoon in https://github.com/storytold/photocraft/pull/2436
    • Image warp: grab anywhere on the grid, Ctrl-click to cut, Warp in the transform menu by @Jeremy8776 in https://github.com/storytold/photocraft/pull/2621
    • Layers panel: a dragged layer copies onto its own row and into the empty space below the stack (#1721) by @switch87 in https://github.com/storytold/photocraft/pull/2525
    • Properties ▸ Layer Mask: add Photoshop's Refine row (#2425) by @bitshiftza in https://github.com/storytold/photocraft/pull/2639
    • Ruler units keep their own decimal places (#2434) by @bitshiftza in https://github.com/storytold/photocraft/pull/2476
    • fix(docs): Linux build prerequisites only name Debian packages by @Erica4fr in https://github.com/storytold/photocraft/pull/2437
    • i18n(es): translate the Add Noise and Reduce Noise dialog controls by @Erica4fr in https://github.com/storytold/photocraft/pull/2470
    • Type: wire Use Smart Quotes for typed text (#204) by @reynold-hu in https://github.com/storytold/photocraft/pull/2522
    • Progress docs standard: ROADMAP, target-app parity, gaps, per-dimension parity docs by @echelon in https://github.com/storytold/photocraft/pull/2696
    • Keep As Is when reusing variable definitions by @Benziza in https://github.com/storytold/photocraft/pull/2655
    • File > Scripts > Browse: filter the picker to script files (#2452) by @MarekSpodBiedry in https://github.com/storytold/photocraft/pull/2499
    • PSD export: pad regenerated fill blocks to 4 bytes, as Photoshop does by @Sir-Starch in https://github.com/storytold/photocraft/pull/2759
    • PSD: warn on an unreadable Lr16/Lr32 layer block and save one layer list (#2700) by @vangel76 in https://github.com/storytold/photocraft/pull/2709
    • Channels: Delete with one channel targeted clears only that channel (#2720) by @vangel76 in https://github.com/storytold/photocraft/pull/2730
    • Fix Windows-only path expectation in save dialog test (#2745) by @itrycodinganditsbad in https://github.com/storytold/photocraft/pull/2782
    • Channels: Delete with an alpha channel targeted fills that channel (#2734) by @vangel76 in https://github.com/storytold/photocraft/pull/2741
    • Lasso: Free Transform drags work with the Lasso tool selected (#2153) by @vangel76 in https://github.com/storytold/photocraft/pull/2766
    • Copy and paste a single channel from the Channels panel (#2307) by @fabianghe in https://github.com/storytold/photocraft/pull/2695
    • Move tool: the drag's box and snapping follow the Auto-Selected layer (#2666) by @vangel76 in https://github.com/storytold/photocraft/pull/2675
    • Channels: Cut with one channel targeted clears only that channel (#2698) by @vangel76 in https://github.com/storytold/photocraft/pull/2712
    • Move tool: ⌘-drag temporary Move gets the drag box and snapping (#2681) by @vangel76 in https://github.com/storytold/photocraft/pull/2684
    • Smart Objects: converting several layers keeps them at the contents top level (#2648) by @vangel76 in https://github.com/storytold/photocraft/pull/2651
    • feat(prefs): add intermediate UI scale options from 80% to 95% by @Ni-zav in https://github.com/storytold/photocraft/pull/2678
    • Smart Objects: stacked layers sit at the contents top level (#2657) by @vangel76 in https://github.com/storytold/photocraft/pull/2676
    • Selection: moving a selection outline snaps its bounds, not the pointer (#2736) by @vangel76 in https://github.com/storytold/photocraft/pull/2740
    • Batch: a failed step inside a called action fails the file and the script (#2779) by @vangel76 in https://github.com/storytold/photocraft/pull/2783
    • fix(ui): make painting symmetry available across all themes by @Ni-zav in https://github.com/storytold/photocraft/pull/2704
    • Guides: ⌘-drag over a guide moves it with the selection tools too (#2690) by @vangel76 in https://github.com/storytold/photocraft/pull/2699
    • Keep the blend-mode preview between list rows (#2553) by @itrycodinganditsbad in https://github.com/storytold/photocraft/pull/2612
    • Lasso: ⌘-drag outside the selection moves the layer (#2725) by @vangel76 in https://github.com/storytold/photocraft/pull/2737
    • Esc deselects when no active operation needs cancelling by @mroxso in https://github.com/storytold/photocraft/pull/2765
    • Actions: record File › Save and Save As steps and replay them (#2032) by @vangel76 in https://github.com/storytold/photocraft/pull/2746
    • Batch: skip recorded view steps in batch and droplets (#2752) by @vangel76 in https://github.com/storytold/photocraft/pull/2761
    • fix(navigator): zoom the document with the mouse wheel over the preview by @Ni-zav in https://github.com/storytold/photocraft/pull/2724
    • Home screen: remove individual Recent entries (#2691) by @itsF4LCON in https://github.com/storytold/photocraft/pull/2731
    • Move tool: ⌘-drag with a painting tool floats the selected pixels from the control channel too (#2768) by @vangel76 in https://github.com/storytold/photocraft/pull/2776
    • Actions: double-click an action to rename it (#2032) by @vangel76 in https://github.com/storytold/photocraft/pull/2769
    • Brush cursor: Normal Brush Tip ring on the tip's real 50% contour (#2744) by @vangel76 in https://github.com/storytold/photocraft/pull/2747
    • fix(ui): prevent Layers opacity controls from overflowing narrow docks by @Ni-zav in https://github.com/storytold/photocraft/pull/2325
    • Image Size: Resample off keeps the pixel readouts honest (#2393) by @vangel76 in https://github.com/storytold/photocraft/pull/2533
    • Paint a pen tap at its own pressure, not full or zero (#1798) by @itrycodinganditsbad in https://github.com/storytold/photocraft/pull/2757
    • i18n: wrap remaining hardcoded UI strings for translation by @seldoms in https://github.com/storytold/photocraft/pull/2467
    • fix(compose, gpu): round dithered gradient fills to the document dept… by @kavishkashehan726-sudo in https://github.com/storytold/photocraft/pull/2781
    • Pencil/Eraser: round Pencil cursor and Eraser Pencil mode (#2662) by @vangel76 in https://github.com/storytold/photocraft/pull/2694
    • Linux: no false missing-library warning when the linker cache can't be read (#1144) by @MarekSpodBiedry in https://github.com/storytold/photocraft/pull/2503
    • Speed up large group merges (#1561) by @Elvis33LE in https://github.com/storytold/photocraft/pull/2664
    • Interface: wire Dynamic Color Sliders for the colour tracks (#204) by @reynold-hu in https://github.com/storytold/photocraft/pull/2531
    • Eraser: Block mode (#2770) by @vangel76 in https://github.com/storytold/photocraft/pull/2778
    • Smart filter edits: re-render from cached stages, in a background job by @twentymls in https://github.com/storytold/photocraft/pull/2739
    • Brush: Wet Edges acts on the whole stroke, not each dab (#2088) by @vangel76 in https://github.com/storytold/photocraft/pull/2721
    • Spot Healing: Create Texture keeps the film grain (#2104) by @vangel76 in https://github.com/storytold/photocraft/pull/2762
    • wasm: gate native-only constants so wasm32 builds without dead-code warnings (#2808) by @vangel76 in https://github.com/storytold/photocraft/pull/2813
    • Marquee hinting follows a rotated view like the release does (#2512) by @switch87 in https://github.com/storytold/photocraft/pull/2732
    • Place: wire Resize Image During Place into the implicit fit (#204) by @reynold-hu in https://github.com/storytold/photocraft/pull/2538
    • Free Transform frames the whole type layer; Distort/Perspective greyed for type (#2630) by @itrycodinganditsbad in https://github.com/storytold/photocraft/pull/2701
    • Tests: save-dialog expectations build their paths with Path::join, so they pass on Windows (#2745) by @mroxso in https://github.com/storytold/photocraft/pull/2853
    • docs: correct Photomerge roadmap status by @Elvis33LE in https://github.com/storytold/photocraft/pull/2831
    • Crop/marquee readout and Properties W/H/X/Y in the ruler unit (cm, mm, in…) by @llduyll10 in https://github.com/storytold/photocraft/pull/2334
    • Warp Text: Style and orientation come before Bend and the distortions (#2689) by @vangel76 in https://github.com/storytold/photocraft/pull/2819
    • Layers: Layer via Copy duplicates every selected layer (#2777) by @vangel76 in https://github.com/storytold/photocraft/pull/2796
    • Fix brush picker closing immediately on trackpad taps by @zi-ger in https://github.com/storytold/photocraft/pull/2772
    • Web: File › Open opens every selected file (#2802) by @vangel76 in https://github.com/storytold/photocraft/pull/2807
    • Status bar: show document dimensions in the ruler unit by @arthurdeka in https://github.com/storytold/photocraft/pull/2618
    • Workspaces: preserve the embedding host menu and rail flags by @arthurdeka in https://github.com/storytold/photocraft/pull/2620
    • Canvas honours Pixel Aspect Ratio Correction (#2594) by @itrycodinganditsbad in https://github.com/storytold/photocraft/pull/2718
    • Control: timeout errors name the likely causes (#2489) by @ahmedhosnypro in https://github.com/storytold/photocraft/pull/2497
    • Variables: applied text keeps the type layer's style (#2742) by @itrycodinganditsbad in https://github.com/storytold/photocraft/pull/2785
    • feat(prefs): add search across preference sections and settings by @Ni-zav in https://github.com/storytold/photocraft/pull/2679
    • ui-egui tests: drop the shadowing joined closure (fixes clippy on main) by @echelon in https://github.com/storytold/photocraft/pull/2924
    • Filter Gallery: an unknown option is a bad-params error (#2548 follow-up) by @xsvm in https://github.com/storytold/photocraft/pull/2599
    • Type: tabs advance to tab stops; Tab key types a tab (#1881) by @itrycodinganditsbad in https://github.com/storytold/photocraft/pull/2733
    • Smart Objects: Copy/Paste with no selection keeps the smart object (#2428) by @vangel76 in https://github.com/storytold/photocraft/pull/2653
    • Pencil: 1 px lines step pixel by pixel, no doubled corners (#2139) by @vangel76 in https://github.com/storytold/photocraft/pull/2806
    • ui-egui tests: restore the joined helper (fixes main) by @echelon in https://github.com/storytold/photocraft/pull/2947
    • Dock: drag a tab to reorder it within its group (#2272) by @itrycodinganditsbad in https://github.com/storytold/photocraft/pull/2774
    • Edit: Copy/Paste with no selection keeps type, shape and group layers (#2670) by @vangel76 in https://github.com/storytold/photocraft/pull/2686
    • feat(ui): hold Alt+Space to zoom out, as in Photoshop by @FinnNk in https://github.com/storytold/photocraft/pull/2877
    • Themes: add Breeze Light and Breeze Dark (#2276) by @Sir-Starch in https://github.com/storytold/photocraft/pull/2335
    • Move tool: highlight the layer Auto-Select would pick on rollover (#2834) by @vangel76 in https://github.com/storytold/photocraft/pull/2843
    • Font menus: show an Arabic sample for families that cover Arabic by @diax7 in https://github.com/storytold/photocraft/pull/2535
    • Layer > New > Background from Layer; the Background stays at the bottom (#2626) by @itrycodinganditsbad in https://github.com/storytold/photocraft/pull/2663
    • Tools: Single Row Marquee and Single Column Marquee (#2837) by @vangel76 in https://github.com/storytold/photocraft/pull/2848
    • feat(ui): live font preview on hover by @TssHack in https://github.com/storytold/photocraft/pull/2431
    • Fix Linux appearance changes lost during startup by @Sir-Starch in https://github.com/storytold/photocraft/pull/2833
    • Linux: a late first appearance reply repaints the idle window (#2798) by @itrycodinganditsbad in https://github.com/storytold/photocraft/pull/2941
    • Layer > Rasterize > Layer Style bakes effects; Rasterize Layer converts vector masks (#2245) by @itrycodinganditsbad in https://github.com/storytold/photocraft/pull/2669
    • Navigator preview fills its group; no scroll fade over dock panels (#2726) by @itrycodinganditsbad in https://github.com/storytold/photocraft/pull/2818
    • Release prep 0.7.0: Linux riscv64 tarball + version bump by @echelon in https://github.com/storytold/photocraft/pull/2965

    New Contributors

    • @sawizzle made their first contribution in https://github.com/storytold/photocraft/pull/2185
    • @Benziza made their first contribution in https://github.com/storytold/photocraft/pull/2152
    • @crqch made their first contribution in https://github.com/storytold/photocraft/pull/2146
    • @vbasky made their first contribution in https://github.com/storytold/photocraft/pull/2235
    • @kmnkv1 made their first contribution in https://github.com/storytold/photocraft/pull/2209
    • @tropicaaal made their first contribution in https://github.com/storytold/photocraft/pull/2226
    • @kotulsky made their first contribution in https://github.com/storytold/photocraft/pull/2189
    • @MrCloudy2 made their first contribution in https://github.com/storytold/photocraft/pull/2206
    • @JohnnYoru made their first contribution in https://github.com/storytold/photocraft/pull/2193
    • @scottcampbelldata made their first contribution in https://github.com/storytold/photocraft/pull/2257
    • @vangel76 made their first contribution in https://github.com/storytold/photocraft/pull/2562
    • @KausBoss made their first contribution in https://github.com/storytold/photocraft/pull/2411
    • @vivekprojects-GIT made their first contribution in https://github.com/storytold/photocraft/pull/2427
    • @reneleonhardt made their first contribution in https://github.com/storytold/photocraft/pull/2628
    • @itrycodinganditsbad made their first contribution in https://github.com/storytold/photocraft/pull/2610
    • @itsF4LCON made their first contribution in https://github.com/storytold/photocraft/pull/2448
    • @bitshiftza made their first contribution in https://github.com/storytold/photocraft/pull/2421
    • @fabianghe made their first contribution in https://github.com/storytold/photocraft/pull/2438
    • @callmeBalloch made their first contribution in https://github.com/storytold/photocraft/pull/2355
    • @juswus2000 made their first contribution in https://github.com/storytold/photocraft/pull/2498
    • @kavishkashehan726-sudo made their first contribution in https://github.com/storytold/photocraft/pull/2348
    • @m6502 made their first contribution in https://github.com/storytold/photocraft/pull/2454
    • @Lyraedan made their first contribution in https://github.com/storytold/photocraft/pull/2635
    • @Erica4fr made their first contribution in https://github.com/storytold/photocraft/pull/2430
    • @Trade-Mottoes made their first contribution in https://github.com/storytold/photocraft/pull/2568
    • @Geljic made their first contribution in https://github.com/storytold/photocraft/pull/2480
    • @seldoms made their first contribution in https://github.com/storytold/photocraft/pull/2467
    • @twentymls made their first contribution in https://github.com/storytold/photocraft/pull/2739
    • @zi-ger made their first contribution in https://github.com/storytold/photocraft/pull/2772
    • @arthurdeka made their first contribution in https://github.com/storytold/photocraft/pull/2618
    • @ahmedhosnypro made their first contribution in https://github.com/storytold/photocraft/pull/2497
    • @FinnNk made their first contribution in https://github.com/storytold/photocraft/pull/2877
    • @diax7 made their first contribution in https://github.com/storytold/photocraft/pull/2535
    • @TssHack made their first contribution in https://github.com/storytold/photocraft/pull/2431

    Full Changelog: https://github.com/storytold/photocraft/compare/v0.6.0...v0.7.0

    Downloads
    • photocraft-0.7.0-freebsd-x86_64.tar.gz
      72 MiB
      2026-10-11 06:25:30 -05:00
    • photocraft-0.7.0-linux-aarch64.AppImage
      66 MiB
      2026-10-11 06:25:48 -05:00
    • photocraft-0.7.0-linux-aarch64.AppImage.zsync
      232 KiB
      2026-10-11 06:25:49 -05:00
    • photocraft-0.7.0-linux-aarch64.deb
      71 MiB
      2026-10-11 06:26:23 -05:00
    • photocraft-0.7.0-linux-aarch64.flatpak
      51 MiB
      2026-10-11 06:27:56 -05:00
    • photocraft-0.7.0-linux-aarch64.rpm
      71 MiB
      2026-10-11 06:28:01 -05:00
    • photocraft-0.7.0-linux-aarch64.tar.gz
      69 MiB
      2026-10-11 06:28:19 -05:00
    • photocraft-0.7.0-linux-riscv64.tar.gz
      71 MiB
      2026-10-11 06:28:22 -05:00
    • photocraft-0.7.0-linux-x86_64.AppImage
      69 MiB
      2026-10-11 06:28:27 -05:00
    • photocraft-0.7.0-linux-x86_64.AppImage.zsync
      243 KiB
      2026-10-11 06:28:30 -05:00
    • photocraft-0.7.0-linux-x86_64.deb
      74 MiB
      2026-10-11 06:28:38 -05:00
    • photocraft-0.7.0-linux-x86_64.flatpak
      55 MiB
      2026-10-11 06:28:41 -05:00
    • photocraft-0.7.0-linux-x86_64.rpm
      73 MiB
      2026-10-11 06:28:53 -05:00
    • photocraft-0.7.0-linux-x86_64.tar.gz
      73 MiB
      2026-10-11 06:29:06 -05:00
    • photocraft-0.7.0-macos-universal.dmg
      80 MiB
      2026-10-11 06:29:17 -05:00
    • photocraft-0.7.0-windows-arm64.msi
      58 MiB
      2026-10-11 06:29:35 -05:00
    • photocraft-0.7.0-windows-arm64-portable.zip
      70 MiB
      2026-10-11 06:29:24 -05:00
    • photocraft-0.7.0-windows-x64.msi
      62 MiB
      2026-10-11 06:29:58 -05:00
    • photocraft-0.7.0-windows-x64-portable.zip
      73 MiB
      2026-10-11 06:29:48 -05:00
    • photocraft-0.7.0-windows-x86.msi
      60 MiB
      2026-10-11 06:30:09 -05:00
    • photocraft-0.7.0-windows-x86-portable.zip
      70 MiB
      2026-10-11 06:30:06 -05:00
    • photocraft-cli-0.7.0-macos-universal.zip
      62 MiB
      2026-10-11 06:30:13 -05:00
    • photocraft-web-0.7.0.zip
      11 MiB
      2026-10-11 06:30:14 -05:00
    • SHA256SUMS.txt
      2.3 KiB
      2026-10-11 06:30:14 -05:00
    • Source Code (ZIP)
    • Source Code (TAR.GZ)
  • v0.6.0 0c72d95425
    Compare

    PhotoCraft v0.6.0 Stable

    dean released this 2026-10-09 21:11:13 -05:00 | 1632 commits to main since this release

    📅 Originally published on GitHub: Sat, 10 Oct 2026 02:51:42 GMT
    🏷️ Git tag created: Sat, 10 Oct 2026 02:11:13 GMT

    What's Changed

    • Motion Blur: 6x to 70x faster (one merged kernel applied over whole rows) by @Ar-maan05 in https://github.com/storytold/photocraft/pull/902
    • Applying a text data set re-renders the type layer instead of blanking it (#990) by @ianswope in https://github.com/storytold/photocraft/pull/1025
    • PSD: a spec-order mask record is not misread as Photoshop's order when that reading is implausible (#949) by @wstock in https://github.com/storytold/photocraft/pull/1129
    • ui.window.open: an invalid document index is an error, not a side effect by @Elvis33LE in https://github.com/storytold/photocraft/pull/1133
    • fix(ui): remember previously applied New Guide Layout values by @Ni-zav in https://github.com/storytold/photocraft/pull/1261
    • fix(ui): allow removing the last polygonal lasso point by @Ni-zav in https://github.com/storytold/photocraft/pull/1262
    • PSD export: write empty layer and mask channels as raw by @DWAA1660 in https://github.com/storytold/photocraft/pull/1290
    • Fix #1286: Delete and Fill Selection on the selection tools' right-click menu by @bflatastic in https://github.com/storytold/photocraft/pull/1331
    • Part of #1275: the Studio themes show the Move tool's Auto-Select toggle by @bflatastic in https://github.com/storytold/photocraft/pull/1333
    • Fix #1323: a Distort corner stops before the box folds over by @bflatastic in https://github.com/storytold/photocraft/pull/1332
    • chore: remove accidentally committed fb-*.log files and ignore *.log by @ArianPashae in https://github.com/storytold/photocraft/pull/1155
    • Filter › Last Filter applies to the active layer, not the layer the filter first ran on (#1270) by @marcardenas in https://github.com/storytold/photocraft/pull/1307
    • Gradient tool: a handle dragged past the 10% scale floor stops; the other handle stays put (#1243) by @marcardenas in https://github.com/storytold/photocraft/pull/1306
    • fix(ui): prevent hidden guides from intercepting canvas input by @Ni-zav in https://github.com/storytold/photocraft/pull/1268
    • fix(ui): display configured Quick Export format in File menu by @Ni-zav in https://github.com/storytold/photocraft/pull/1269
    • fix(export): add WebP quality controls to Export Preferences by @Ni-zav in https://github.com/storytold/photocraft/pull/1279
    • PSD text fill: keep FillFlag so Photopea-edited text keeps its fill, carrying #1240 by @ragedotdev by @bflatastic in https://github.com/storytold/photocraft/pull/1368
    • Free Transform: W/H and X/Y fields reach large documents, carrying #1295 by @marcardenas by @bflatastic in https://github.com/storytold/photocraft/pull/1340
    • Select › Modify: Apply effect at canvas bounds, carrying #1296 by @marcardenas by @bflatastic in https://github.com/storytold/photocraft/pull/1339
    • Layers panel: hovering a blend mode previews it live on the canvas (#970) by @bflatastic in https://github.com/storytold/photocraft/pull/1081
    • docs: craftrules is not public — say so instead of linking it (#493) by @bfenty in https://github.com/storytold/photocraft/pull/779
    • i18n: fix pt-br label collisions (Feather/Diffuse, Liquify/Dissolve) by @RicSchonfelder in https://github.com/storytold/photocraft/pull/833
    • Never crash on hostile numbers: LUT sizes, Quick Selection points, link group ids by @tanish2k09 in https://github.com/storytold/photocraft/pull/869
    • A PSD layer with bounds but no channel data no longer aborts on a 360 GB allocation (#755) by @ianswope in https://github.com/storytold/photocraft/pull/885
    • New Document: a Clipboard preset with the clipboard image's size by @jason4short in https://github.com/storytold/photocraft/pull/891
    • Layer copies are numbered: "Layer 1 copy 2", not "Layer 1 copy copy" by @jason4short in https://github.com/storytold/photocraft/pull/897
    • file.new at 300000x300000 no longer fills ~360 GB of tiles before returning (#705) by @ianswope in https://github.com/storytold/photocraft/pull/900
    • Divide wide slice rectangles without integer overflow by @Ni-zav in https://github.com/storytold/photocraft/pull/991
    • Saturate layer-slice margins at coordinate limits by @Ni-zav in https://github.com/storytold/photocraft/pull/998
    • image.crop rejects an origin or far edge that can't be moved within i32 instead of panicking (#959) by @mnmlyw in https://github.com/storytold/photocraft/pull/1013
    • Place Scale Marker: a document under 8 px tall returns an error instead of panicking (#932) by @mnmlyw in https://github.com/storytold/photocraft/pull/1014
    • Timeline: out-of-range duration and fps are rejected, and stepping never panics (#1009) by @mnmlyw in https://github.com/storytold/photocraft/pull/1023
    • Slices test: as_chunks for the fixed 3-wide rows (follow-up to #991) by @echelon in https://github.com/storytold/photocraft/pull/1374
    • gradient.fill.stop rejects an out-of-range index with BadParams instead of overflowing (#958) by @mnmlyw in https://github.com/storytold/photocraft/pull/1000
    • Link Layers allocates a group id that can't overflow (#961) by @mnmlyw in https://github.com/storytold/photocraft/pull/1022
    • Median, Dust & Scratches: run time grows linearly with the radius, identical output at 8, 16 and 32-bit (#498) by @Ar-maan05 in https://github.com/storytold/photocraft/pull/901
    • docs: refresh implemented tool status in the roadmap by @Streetblock in https://github.com/storytold/photocraft/pull/1205
    • Options bar: the airbrush, smoothing options and symmetry buttons work (#1177) by @ChrisWaldenDev in https://github.com/storytold/photocraft/pull/1214
    • Startup: preserve the GPU backend after windowing errors by @liowald in https://github.com/storytold/photocraft/pull/1228
    • Brush Scatter: out-of-range amounts are rejected and dab rects can't overflow (#977) by @mnmlyw in https://github.com/storytold/photocraft/pull/1034
    • Space untimed stroke segments by distance when Spacing is off by @jason4short in https://github.com/storytold/photocraft/pull/1036
    • Variables: preserve Unicode when importing data-set CSV (#989) by @tiredIsa in https://github.com/storytold/photocraft/pull/1062
    • image.analysis.recordMeasurements: refuse an area too large to measure instead of overflowing by @wstock in https://github.com/storytold/photocraft/pull/1184
    • Edit Contents switches to the already-open contents document by @jason4short in https://github.com/storytold/photocraft/pull/1037
    • Paste into a targeted layer mask (or channel) instead of making a new layer (#1035) by @bflatastic in https://github.com/storytold/photocraft/pull/1078
    • Absolute colorimetric refuses a zero or non-finite media white (#972) by @wstock in https://github.com/storytold/photocraft/pull/1125
    • Clone Stamp / Healing Brush: a far source is a bad-params error, not an out-of-bounds slice (#1111) by @wstock in https://github.com/storytold/photocraft/pull/1165
    • Keep the Background position lock after Flatten Image by @CQMHV in https://github.com/storytold/photocraft/pull/1238
    • Shape gradients: honour midpoints, opacity stops, offset, dither and align by @Elvis33LE in https://github.com/storytold/photocraft/pull/1321
    • Holding a number key sets one digit's opacity, not a two-digit value (#953) by @ianswope in https://github.com/storytold/photocraft/pull/1030
    • Layers panel: Alt-click the line between two layers creates or releases a clipping mask (#967) by @bflatastic in https://github.com/storytold/photocraft/pull/1066
    • ⌘/Ctrl-scroll pans the canvas sideways; scroll bars always shown (#635, #620) by @bflatastic in https://github.com/storytold/photocraft/pull/1069
    • Nearest Neighbor: sample single source pixels on reductions without averaging (#1114) by @MokuLakshithReddy in https://github.com/storytold/photocraft/pull/1141
    • Fix: Resolve issue where various file formats save incorectly as a .psd by @Cyanoxide in https://github.com/storytold/photocraft/pull/1178
    • New adjustment and fill layers take the active selection as their mask (#1250) by @Pathos0925 in https://github.com/storytold/photocraft/pull/1282
    • Tools leave hidden layers alone: painting or moving a hidden layer is refused (#571) by @bflatastic in https://github.com/storytold/photocraft/pull/872
    • CI: ~1.6x faster runs (2.2x on Linux-only PRs), no more out-of-disk failures by @bflatastic in https://github.com/storytold/photocraft/pull/1075
    • feat(ui): edit the Color panel's hex and RGB readouts by @roaldosulejmani in https://github.com/storytold/photocraft/pull/1016
    • Deep EXR: write the flattened pixel by layout, not a fixed RGBA quadruple by @Elvis33LE in https://github.com/storytold/photocraft/pull/1021
    • Eyedropper cursor: a pipette instead of the crosshair when sampling by @jason4short in https://github.com/storytold/photocraft/pull/1028
    • Option flips Dodge/Burn and Blur/Sharpen for a stroke by @jason4short in https://github.com/storytold/photocraft/pull/1038
    • CPU effect maps: key fill layers by their cached pixels, drop opacity/visible by @Elvis33LE in https://github.com/storytold/photocraft/pull/1059
    • fix(cli): report missing font fallbacks in run, info and convert by @Ni-zav in https://github.com/storytold/photocraft/pull/1299
    • Corpus: pin the deep OpenEXR test images and check them in CI (FILE-216-3, part of #216) by @tanish2k09 in https://github.com/storytold/photocraft/pull/881
    • Selection tools: ⌘ moves like the Move tool; ⌘⌥ copies (pixels inside the selection, the layer outside) by @jason4short in https://github.com/storytold/photocraft/pull/896
    • Layer comps: offsets that don't fit i32 are dropped with a warning instead of overflowing (#1017) by @mnmlyw in https://github.com/storytold/photocraft/pull/1039
    • MCP doc_save: bridge mode refuses headless-only options instead of saving with defaults by @Elvis33LE in https://github.com/storytold/photocraft/pull/1138
    • Move tool: layers with effects that overhang the canvas drag ~2x faster (#761, #128) by @bflatastic in https://github.com/storytold/photocraft/pull/893
    • Artboards: coordinates past the 32-bit range are rejected instead of overflowing (#931) by @mnmlyw in https://github.com/storytold/photocraft/pull/1032
    • Autosave: a thread that fails to start is reported, not a silent no-op by @Elvis33LE in https://github.com/storytold/photocraft/pull/1124
    • Desktop: write log records to standard error and a rotating log file by @switch87 in https://github.com/storytold/photocraft/pull/1143
    • fix: resolve edge-case crashes, unbounded allocations, and UI sync defects by @buivanvu94 in https://github.com/storytold/photocraft/pull/1010
    • UI Scale Auto keeps the system's fractional scale on 4K (#1072) by @DWAA1660 in https://github.com/storytold/photocraft/pull/1237
    • raw: decode Nikon compressed NEF (lossless + lossy) by @switch87 in https://github.com/storytold/photocraft/pull/1310
    • Fix Drop Shadow angle synchronization and add a radial dial by @DWAA1660 in https://github.com/storytold/photocraft/pull/882
    • PSD notes: an icon position near i32::MAX saturates on save instead of overflowing (#939) by @wstock in https://github.com/storytold/photocraft/pull/1176
    • Improve Color Picker layout and spacing (#1188) by @shorbank in https://github.com/storytold/photocraft/pull/1196
    • Toolbar: the header chevron switches between one and two columns (#1197) by @prekabreki in https://github.com/storytold/photocraft/pull/1200
    • Find host CJK fonts inside Flatpak by @Ni-zav in https://github.com/storytold/photocraft/pull/1204
    • Select › Color Range: Photoshop's Sampled Colors model, Subtract from Sample and the eyedropper on the image by @Unemars in https://github.com/storytold/photocraft/pull/1239
    • PSD: preflight pattern allocations and reuse decoded buffers by @Streetblock in https://github.com/storytold/photocraft/pull/1242
    • Fix #1271, fix #1316: Preferences › Interface › System Title Bar by @bflatastic in https://github.com/storytold/photocraft/pull/1344
    • A non-Unicode command-line argument is a usage error, not a startup panic (#1108) by @wstock in https://github.com/storytold/photocraft/pull/1168
    • Fix transform cancellation undoing the wrong document by @CQMHV in https://github.com/storytold/photocraft/pull/1170
    • Fit Artboard on Screen: no i32 overflow for a board with large coordinates by @wstock in https://github.com/storytold/photocraft/pull/1181
    • filter.cameraRaw: refuse an area too large to develop instead of overflowing by @wstock in https://github.com/storytold/photocraft/pull/1183
    • PSD plane shuffles in bands; the document histogram computes off the UI thread by @Elvis33LE in https://github.com/storytold/photocraft/pull/1185
    • Add Polish translation by @Powiadomienie in https://github.com/storytold/photocraft/pull/1192
    • Layer style: an Outside stroke at Fill below 100 % leaves the interior clear by @llduyll10 in https://github.com/storytold/photocraft/pull/906
    • Fix(text): keep tiny EngineData reals parseable (#979) by @cold-atom in https://github.com/storytold/photocraft/pull/1085
    • Delete with nothing selected deletes the selected layers, of any kind (#1077) by @metzmehard in https://github.com/storytold/photocraft/pull/1087
    • Keep empty selections empty for subtract and intersect by @Ni-zav in https://github.com/storytold/photocraft/pull/1190
    • Filters respect layer locks; render filters and Fill Path refuse a pixel-locked layer (#1102) by @prekabreki in https://github.com/storytold/photocraft/pull/1195
    • Relight: halo covers the blur reach, no silent no-op above 8 MP, box-Gaussian blur (follow-up to #735) by @mvanhorn in https://github.com/storytold/photocraft/pull/895
    • Help › Search: clicking the search field keeps the menu open by @jason4short in https://github.com/storytold/photocraft/pull/1027
    • Preferences: reset a single shortcut or menu colour override (#988) by @tiredIsa in https://github.com/storytold/photocraft/pull/1064
    • Hand tool: 100%, Fit Screen and Fill Screen buttons, carrying #1314 by @rozaqabdul656 by @bflatastic in https://github.com/storytold/photocraft/pull/1363
    • SVG opens as shape layers and places as a vector smart object (FILE-215-9, part of #215) by @ljkx in https://github.com/storytold/photocraft/pull/1305
    • Show Clone Stamp source preview inside the brush cursor by @Lime-3010 in https://github.com/storytold/photocraft/pull/1042
    • Clear, Cut and Image › Adjustments refuse a pixel-locked layer (#1103) by @prekabreki in https://github.com/storytold/photocraft/pull/1194
    • PSD export parallel layer channels; shared proxy cache; banded CMYK export by @Elvis33LE in https://github.com/storytold/photocraft/pull/1230
    • Optimize Mosaic by averaging each cell once per tile (45-117x speedup) by @optimalbytee in https://github.com/storytold/photocraft/pull/1294
    • Open camera raws in Camera Raw first (Open / Cancel) by @switch87 in https://github.com/storytold/photocraft/pull/1309
    • ORF: a file cut short inside IFD0 is malformed, not the compressed variant (#1008) by @wstock in https://github.com/storytold/photocraft/pull/1090
    • Refuse to save a .pcraft holding a NaN or infinite float, instead of writing one that never opens again (#1101) by @wstock in https://github.com/storytold/photocraft/pull/1172
    • channel.merge: reject a repeated source index instead of closing an unrelated document by @wstock in https://github.com/storytold/photocraft/pull/1179
    • layer.delete keeps a document's last layer (#1107) by @prekabreki in https://github.com/storytold/photocraft/pull/1189
    • Paint Bucket and Gradient keep alpha on a transparency-locked layer (#1104) by @prekabreki in https://github.com/storytold/photocraft/pull/1193
    • Document tabs: elide and overflow into a » menu when they are too many (#1276) by @LordFarquaadtheCreator in https://github.com/storytold/photocraft/pull/1293
    • Embed PhotoCraft CLI Windows icon and version metadata by @mvanhorn in https://github.com/storytold/photocraft/pull/889
    • Fix corrupted reduced canvas previews with separate mip render targets by @GamerWil26 in https://github.com/storytold/photocraft/pull/892
    • Fix Classic Gradient transparency and open the Gradient Editor by @jerrykimo in https://github.com/storytold/photocraft/pull/905
    • i18n(pl): translate the strings that landed alongside the Polish catalog by @echelon in https://github.com/storytold/photocraft/pull/1426
    • Regenerate docs/scorecard.md (139 preferences after #1016) by @echelon in https://github.com/storytold/photocraft/pull/1435
    • Fix #1272: a reassigned shortcut runs its new command by @bflatastic in https://github.com/storytold/photocraft/pull/1330
    • Pen tablets: the pen works on Wayland (through Xwayland), macOS pressure fixes (#639, #759) by @bflatastic in https://github.com/storytold/photocraft/pull/1070
    • Content-Aware Fill: size error instead of a panic for a huge selection, carrying #1024 by @mnmlyw by @bflatastic in https://github.com/storytold/photocraft/pull/1409
    • Fix radial blur sampling density (#515) by @agorevski in https://github.com/storytold/photocraft/pull/658
    • Right-click Brush Preset picker picks presets like Photoshop (#615, #1031) by @bflatastic in https://github.com/storytold/photocraft/pull/1080
    • Brush tests: seams, hard edge, zero scatter and ABR tip colour (#213) by @reynold-hu in https://github.com/storytold/photocraft/pull/1221
    • Feature: Add incrementation with up/down arrow keys on numeric fields by @Cyanoxide in https://github.com/storytold/photocraft/pull/1326
    • codecs README: lossy WebP is written by the built-in VP8 encoder (#1352) by @ragtux in https://github.com/storytold/photocraft/pull/1396
    • Perspective Warp: replacing the planes mid corner drag ends the drag (#952) by @kayrockscreenprinting in https://github.com/storytold/photocraft/pull/1398
    • Puppet Warp: an expansion that empties the mesh is refused, not a panic (#951) by @kayrockscreenprinting in https://github.com/storytold/photocraft/pull/1410
    • Vibrance: Photoshop's Saturation and Vibrance, measured (linear light, 0.288 R + 0.712 G grey) by @Unemars in https://github.com/storytold/photocraft/pull/1418
    • Select › Modify refuses a negative radius instead of clamping it (#993) by @DWAA1660 in https://github.com/storytold/photocraft/pull/1274
    • Rulers: right-click to switch the ruler unit by @jeremyfry in https://github.com/storytold/photocraft/pull/1235
    • Fix/1350 preserve active on save by @shmuelbiller1 in https://github.com/storytold/photocraft/pull/1416
    • Zoom: the Zoom tool's click honours Zoom Clicked Point to Center (#204) by @reynold-hu in https://github.com/storytold/photocraft/pull/1241
    • Preferences: show Zoom Clicked Point to Center now that the Zoom tool reads it (follow-up to #1241) by @echelon in https://github.com/storytold/photocraft/pull/1480
    • feat(ui): auto-scroll Layers panel during layer drag and drop by @Ni-zav in https://github.com/storytold/photocraft/pull/1298
    • Preferences › Performance › Low Resolution Previews: live previews at full resolution when it's off by @Unemars in https://github.com/storytold/photocraft/pull/1247
    • Eyedropper: the comparison ring while sampling (#213) by @reynold-hu in https://github.com/storytold/photocraft/pull/1227
    • Type Tool: Ctrl/Cmd temporary transform handles while editing (#1091) by @remidesbois1 in https://github.com/storytold/photocraft/pull/1202
    • i18n: translate the Fill dialog, layer style contours and Image Size "(was …)" by @ArthurViniciusBA1 in https://github.com/storytold/photocraft/pull/1291
    • Pipette cursor test: Windows draws the precise crosshair itself (main is red on Windows) by @bflatastic in https://github.com/storytold/photocraft/pull/1437
    • Keep the active document when closing another tab by @CQMHV in https://github.com/storytold/photocraft/pull/1148
    • Cancel transforms in their originating document, carrying #1170 by @CQMHV by @bflatastic in https://github.com/storytold/photocraft/pull/1390
    • Move several selected layers into a group in one step, carrying #1297 by @Ni-zav by @bflatastic in https://github.com/storytold/photocraft/pull/1403
    • Regenerate generated docs after the latest community merges by @echelon in https://github.com/storytold/photocraft/pull/1489
    • undo/redo report the step's damage instead of recompositing the whole canvas by @Elvis33LE in https://github.com/storytold/photocraft/pull/810
    • Color Lookup: keep the .cube input domain and reject the ones we cannot apply by @Elvis33LE in https://github.com/storytold/photocraft/pull/1130
    • ui.set validates every field before applying the first one by @Elvis33LE in https://github.com/storytold/photocraft/pull/820
    • Red Eye tool in the J-group flyout by @mvanhorn in https://github.com/storytold/photocraft/pull/1084
    • Layered TIFF: the review changes of #672 (keep unknown blocks with their byte order, io behind the engine, fixture attribution) by @ljkx in https://github.com/storytold/photocraft/pull/835
    • Advanced Blending: knockout, blend as group, transparency shapes, masks hide effects (FILE-215-16, part of #215) by @ljkx in https://github.com/storytold/photocraft/pull/903
    • I18N: Localize startup notices and welcome text by @txiki739 in https://github.com/storytold/photocraft/pull/1094
    • Lasso: Alt clicks add straight segments, releasing Alt closes the outline by @jason4short in https://github.com/storytold/photocraft/pull/888
    • Layers panel: Alt-drag a row to copy the layer there, as in Photoshop by @bani4kaskashka in https://github.com/storytold/photocraft/pull/1216
    • fix(ui): wrap New Document preset titles inside their cards by @SckraT in https://github.com/storytold/photocraft/pull/1401
    • PSD type layers without pixels are rendered on import; PostScript font names resolve to the installed family by @diegochagas in https://github.com/storytold/photocraft/pull/1406
    • Curves: add black, gray, and white point eyedroppers by @mralonsocorona in https://github.com/storytold/photocraft/pull/873
    • GPU startup: windowing errors keep the backend; a failed CPU start doesn't pin CPU, carrying #1228 by @liowald and #1145 by @shovel-kun by @bflatastic in https://github.com/storytold/photocraft/pull/1342
    • Add layer and group color labels (#1283) by @shorbank in https://github.com/storytold/photocraft/pull/1289
    • Color Balance: Photoshop's slider double-click reset, wheel and arrow steps, Alt+Cancel Reset, Properties Reset and history by @Unemars in https://github.com/storytold/photocraft/pull/1256
    • Fix #1248: Create and Release Clipping Mask act on every selected layer by @bflatastic in https://github.com/storytold/photocraft/pull/1392
    • Fix #1288: keep edits to a video frame when the playhead moves by @bflatastic in https://github.com/storytold/photocraft/pull/1395
    • Dropdowns take the arrow keys once open, carrying #1324 by @rozaqabdul656 by @bflatastic in https://github.com/storytold/photocraft/pull/1341
    • Move tool moves the selected pixels when there is a selection (#578) by @bflatastic in https://github.com/storytold/photocraft/pull/1068
    • Fix #1371: read large macOS display ids, keep ICC bytes out of the error by @bflatastic in https://github.com/storytold/photocraft/pull/1412
    • Fix #1354: the macOS menu bar is modal under dialogs, like shortcuts by @bflatastic in https://github.com/storytold/photocraft/pull/1413
    • Fix #1387: the Type tool's font, style and size controls show in every theme by @bflatastic in https://github.com/storytold/photocraft/pull/1414
    • Selection tools: ⌥ with nothing selected draws a new selection (follow-up to #1190) by @bflatastic in https://github.com/storytold/photocraft/pull/1364
    • Fix #1380: the web build asks before leaving the page with unsaved work by @bflatastic in https://github.com/storytold/photocraft/pull/1424
    • Camera Raw opens in a window of its own by @switch87 in https://github.com/storytold/photocraft/pull/1361
    • Export As: a scale that changes only the height is applied (#1353) by @ragtux in https://github.com/storytold/photocraft/pull/1394
    • New Document: a size typed in millimetres or another physical unit keeps its digits (#1147) by @MarekSpodBiedry in https://github.com/storytold/photocraft/pull/1378
    • PNM: the file, not the header, bounds what a decode reserves (#1110) by @kayrockscreenprinting in https://github.com/storytold/photocraft/pull/1365
    • Select › Modify refuses a radius below the dialog's minimum, carrying #1391 by @MarekSpodBiedry by @bflatastic in https://github.com/storytold/photocraft/pull/1485
    • Edit › Toolbar: hidden tools leave the toolbar, carrying #1376 by @MarekSpodBiedry by @bflatastic in https://github.com/storytold/photocraft/pull/1486
    • Paint Bucket: All Layers samples the visible image, carrying #1386 by @harrisonoconnorhover by @bflatastic in https://github.com/storytold/photocraft/pull/1487
    • Swatches: user swatch model with .aco/.ase import and export (FILE-215-14, part of #215) by @ljkx in https://github.com/storytold/photocraft/pull/886
    • Regenerate generated docs after the latest community merges by @echelon in https://github.com/storytold/photocraft/pull/1518
    • Toolbar test: qualify egui::Vec2 (ui-egui tests don't compile on main) by @echelon in https://github.com/storytold/photocraft/pull/1519
    • Large document: a notice explains a slow CPU fallback redraw (#1015) by @ianswope in https://github.com/storytold/photocraft/pull/1427
    • i18n: split "Light" — font weights get their own context, Camera Raw keeps the panel term by @Elvis33LE in https://github.com/storytold/photocraft/pull/1061
    • Pattern Stamp tool in the S-group flyout by @mvanhorn in https://github.com/storytold/photocraft/pull/922
    • Fix #1229: the Polygonal Lasso tool removes its last vertex on Backspace (follow-up to #1262) by @bflatastic in https://github.com/storytold/photocraft/pull/1338
    • Document tabs: elide and overflow into a » menu, carrying #1293 by @LordFarquaadtheCreator by @bflatastic in https://github.com/storytold/photocraft/pull/1367
    • Fix #1381: selecting type on Wayland no longer deletes it by @bflatastic in https://github.com/storytold/photocraft/pull/1421
    • File dialogs no longer freeze or crash the app (#673, #574) by @bflatastic in https://github.com/storytold/photocraft/pull/1071
    • Fix #1357: every Layer Style effect row shows its checkbox by @bflatastic in https://github.com/storytold/photocraft/pull/1422
    • Swatches import/export and the Export As test use the async file dialog (main doesn't compile) by @echelon in https://github.com/storytold/photocraft/pull/1528
    • Color Range: improve previews, sampling and eyedropper responsiveness by @abc2cb in https://github.com/storytold/photocraft/pull/1377
    • Surface Blur: 4x to 20x faster on 16-bit and 32-bit layers, carrying #1095 by @tanish2k09 by @echelon in https://github.com/storytold/photocraft/pull/1529
    • Regenerate generated docs after the latest community merges by @echelon in https://github.com/storytold/photocraft/pull/1530
    • type.create: an unknown or out-of-range kerning is a bad-params error, as in type.edit (#994) by @MarekSpodBiedry in https://github.com/storytold/photocraft/pull/1303
    • Control server: a bad JSON reply carries "id": null like every other unknown-id error (#1006) by @MarekSpodBiedry in https://github.com/storytold/photocraft/pull/1304
    • Show Extras Options: checkboxes read and set the Show flags they name (#957) by @MarekSpodBiedry in https://github.com/storytold/photocraft/pull/1320
    • Numeric fields: arrow-key steps never clamp with a reversed or NaN range (follow-up to #1326) by @bflatastic in https://github.com/storytold/photocraft/pull/1450
    • New Document: preset titles wrap inside their cards, carrying #1401 by @SckraT by @bflatastic in https://github.com/storytold/photocraft/pull/1452
    • Fix startup panic when UI Font Size is not Small by @syd168 in https://github.com/storytold/photocraft/pull/1467
    • Clone Stamp: live stroke, strokes start on the press, source preview under the brush by @jason4short in https://github.com/storytold/photocraft/pull/1026
    • Wayland: drop notice offers paste and the XWayland command for this install (#338, #386) by @bflatastic in https://github.com/storytold/photocraft/pull/1073
    • Live strokes for the History Brush, Healing Brush and the dab tools by @jason4short in https://github.com/storytold/photocraft/pull/1040
    • Non-Unicode arguments: translate the desktop notice (follow-up to #1168) by @bflatastic in https://github.com/storytold/photocraft/pull/1359
    • Fix #1313: Tab hides all panels, Shift+Tab the panel dock, as in Photoshop by @bflatastic in https://github.com/storytold/photocraft/pull/1388
    • Selection tools: arrow keys nudge the selection outline (#1428) by @davidmann4 in https://github.com/storytold/photocraft/pull/1502
    • Mesh warp of a gray surface writes the old and warped regions separately (#995) by @kayrockscreenprinting in https://github.com/storytold/photocraft/pull/1500
    • Apply the transform when another layer is selected (#1400) by @davidmann4 in https://github.com/storytold/photocraft/pull/1496
    • Preserve document depth when splitting stroked vector shapes by @harrisonoconnorhover in https://github.com/storytold/photocraft/pull/1495
    • Puppet Warp: pins that stretch the content too far are refused (#1019) by @kayrockscreenprinting in https://github.com/storytold/photocraft/pull/1492
    • Canvas: checker moves with the image; pixel grid from 500%, over pixels only by @Jeremy8776 in https://github.com/storytold/photocraft/pull/1491
    • Liquify: Alt reverses Twirl and swaps Pucker/Bloat, as in Photoshop (#1442) by @davidmann4 in https://github.com/storytold/photocraft/pull/1484
    • .pcraft: a tile index outside the i32 pixel range is a corrupt file (#938) by @kayrockscreenprinting in https://github.com/storytold/photocraft/pull/1483
    • Camera RAW: a measured Nikon D4 profile (image area, white level, colour matrix, tone curve) by @Unemars in https://github.com/storytold/photocraft/pull/1475
    • fix(psd): write Photoshop-compatible Photo Filter adjustment blocks by @Ni-zav in https://github.com/storytold/photocraft/pull/1473
    • Speed up wide Motion Blur with adaptive FFT convolution by @optimalbytee in https://github.com/storytold/photocraft/pull/1471
    • Crop: an explicit rectangle past 300000 px per side is refused (#960) by @kayrockscreenprinting in https://github.com/storytold/photocraft/pull/1470
    • [P1] Enforce PNG text metadata decode limits by @Streetblock in https://github.com/storytold/photocraft/pull/1460
    • Keep Arbitrary Rotation previews visible on the GPU canvas by @harrisonoconnorhover in https://github.com/storytold/photocraft/pull/1459
    • Fix #1543: oversized Satin and Bevel & Emboss sizes render instead of panicking by @bflatastic in https://github.com/storytold/photocraft/pull/1563
    • Fix #1544: Image Size refuses a resample past the raster budget; resampling writes bands as it goes by @bflatastic in https://github.com/storytold/photocraft/pull/1569
    • Docker web deployment by @fplachecinski in https://github.com/storytold/photocraft/pull/1334
    • macOS DMG: branded window background and icon layout by @XusBadia in https://github.com/storytold/photocraft/pull/1201
    • Fill and adjustment layers take the active path as their vector mask, carrying #1539 by @davidmann4 by @bflatastic in https://github.com/storytold/photocraft/pull/1570
    • docs: MCP tool names and job tools, codec README JPEG metadata and deep EXR by @bflatastic in https://github.com/storytold/photocraft/pull/1573
    • Fix #1531: duplicate artboards beside the original, drag boards with the Move tool by @bflatastic in https://github.com/storytold/photocraft/pull/1584
    • Free Transform: the reference point moves with the box when scaling (#1329) by @davidmann4 in https://github.com/storytold/photocraft/pull/1535
    • MCP bridge: do not replay edits after a lost reply (#1007) by @harrisonoconnorhover in https://github.com/storytold/photocraft/pull/1527
    • Control: reject queued requests after their reply deadline (#1109) by @harrisonoconnorhover in https://github.com/storytold/photocraft/pull/1525
    • Undo: a paint stroke's undo keeps the painted layer active (#1356) by @davidmann4 in https://github.com/storytold/photocraft/pull/1523
    • PSD: warn that Color Lookup tetrahedral interpolation is saved as trilinear (#1347) by @davidmann4 in https://github.com/storytold/photocraft/pull/1515
    • TIFF: alpha after an unspecified extra sample opens transparent (#1349) by @davidmann4 in https://github.com/storytold/photocraft/pull/1513
    • Crop tool: show the pixels past the canvas while a frame is edited, as Photoshop does by @Unemars in https://github.com/storytold/photocraft/pull/1508
    • Help › Search: keep the field focused after a click opens Help (#1447, #1438) by @davidmann4 in https://github.com/storytold/photocraft/pull/1507
    • Font menu keeps its height and focuses its search field (#1369) by @davidmann4 in https://github.com/storytold/photocraft/pull/1505
    • Divide Slice: one division makes at most 10000 parts (#1020) by @kayrockscreenprinting in https://github.com/storytold/photocraft/pull/1504
    • Canvas: a huge view centre draws the selection outline without overflow (#980) by @kayrockscreenprinting in https://github.com/storytold/photocraft/pull/1441
    • Plug-ins: a missing parameter's default is clamped to the declared min..max (#1012) by @MarekSpodBiedry in https://github.com/storytold/photocraft/pull/1443
    • Plug-in names reject bidi controls, zero-width spaces and other invisible format characters (#1011) by @MarekSpodBiedry in https://github.com/storytold/photocraft/pull/1444
    • Opening a file with different horizontal and vertical resolutions says the vertical one is not kept (#1018) by @MarekSpodBiedry in https://github.com/storytold/photocraft/pull/1445
    • Control channel: ui.click rejects a count above 256 instead of queueing unbounded input (#982) by @MarekSpodBiedry in https://github.com/storytold/photocraft/pull/1446
    • Fix Transform Again action playback applying the transform twice by @harrisonoconnorhover in https://github.com/storytold/photocraft/pull/1440
    • MCP previews: reject unsupported document indices (#1005), carrying #1533 by @harrisonoconnorhover by @bflatastic in https://github.com/storytold/photocraft/pull/1600
    • Pen: reshape the final anchor's outgoing handle (#1482); independent rounded-rect corner radii (#1520), carrying #1538 and #1541 by @Ni-zav by @bflatastic in https://github.com/storytold/photocraft/pull/1601
    • Faster blur and resize accumulators; release closed-document textures, carrying #1511 and #1509 by @GamerWil26 by @bflatastic in https://github.com/storytold/photocraft/pull/1602
    • fix(ui): allow Delete and Backspace shortcuts to delete layer when a widget is focused by @buivanvu94 in https://github.com/storytold/photocraft/pull/1565
    • Windows: use native bitmap cursors for brush tips by @mrjeye in https://github.com/storytold/photocraft/pull/1160
    • Add full Type Color Picker and screen eyedropper with magnification by @abc2cb in https://github.com/storytold/photocraft/pull/1232
    • i18n: fix pt-br collisions (View/Preview, Flip/Invert, Light/Thin, Warp/Distort) by @ArthurViniciusBA1 in https://github.com/storytold/photocraft/pull/1292
    • Greek localization by @Camthalion77 in https://github.com/storytold/photocraft/pull/1562
    • Dodge and Burn tone each pixel once per stroke by @jason4short in https://github.com/storytold/photocraft/pull/1041
    • full_res_preview test: wait again when WARP outlasts egui_kittest's 10 s render wait (Windows CI) by @bflatastic in https://github.com/storytold/photocraft/pull/1593
    • i18n(el): translate the screen color picker strings (main red since #1232 + #1562) by @echelon in https://github.com/storytold/photocraft/pull/1618
    • History: count retained tiles incrementally below the byte budget by @Elvis33LE in https://github.com/storytold/photocraft/pull/1157
    • feat: add saved New Document presets by @0x6Ason in https://github.com/storytold/photocraft/pull/1516
    • i18n(el): translate the saved New Document preset strings (main red since #1516 + #1562) by @echelon in https://github.com/storytold/photocraft/pull/1620
    • Improve Actions editing, nested playback, and function-key shortcuts by @GamerWil26 in https://github.com/storytold/photocraft/pull/1093
    • PSD save: stream Lr16/Lr32 layer blocks into the output by @Elvis33LE in https://github.com/storytold/photocraft/pull/1158
    • Speed up exact Shape Blur convolution by @optimalbytee in https://github.com/storytold/photocraft/pull/1566
    • Command lookup: index registered and shell command IDs by @Elvis33LE in https://github.com/storytold/photocraft/pull/1156
    • i18n(el): translate "Pick a screen pixel or press Esc to cancel" (main's xtask i18n test) by @bflatastic in https://github.com/storytold/photocraft/pull/1623
    • Pipette cursor test: Windows reports the precise crosshair with its bitmap (Windows CI red since #1160) by @bflatastic in https://github.com/storytold/photocraft/pull/1626
    • Rotate View tool (#1611 by @mvanhorn) and ui_set describes every field (#1599 by @kubuntugamer), carried by @bflatastic in https://github.com/storytold/photocraft/pull/1633
    • Rotate View tool in the Hand flyout by @mvanhorn in https://github.com/storytold/photocraft/pull/1611
    • Grammatical articles in layer diagnostics (#1549) and invalid document index errors (#1557), carrying #1571 and #1586 by @buivanvu94 by @bflatastic in https://github.com/storytold/photocraft/pull/1634
    • A pathless PSD or PSB save leaves the document clean (#1547), carrying #1589 by @kubuntugamer by @bflatastic in https://github.com/storytold/photocraft/pull/1635
    • fix(io): layered TIFF export warns that retained EXIF will be dropped by @kubuntugamer in https://github.com/storytold/photocraft/pull/1597
    • Open Apply Image and Calculations dialogs by @rozaqabdul656 in https://github.com/storytold/photocraft/pull/1596
    • fix(raw): a DNG with only DefaultCropSize is cropped from the active area's origin (#950) by @SBaksa in https://github.com/storytold/photocraft/pull/1595
    • Layers panel: pop-up sliders for Opacity and Fill by @dhiorns15 in https://github.com/storytold/photocraft/pull/1592
    • Snap the Marquee drag outline to whole pixels by @hideoneric in https://github.com/storytold/photocraft/pull/1587
    • fix(autosave): report background write failures and retry unchanged revisions by @shmuelbiller1 in https://github.com/storytold/photocraft/pull/1577
    • fix(engine): finish background job bookkeeping on its document by @shmuelbiller1 in https://github.com/storytold/photocraft/pull/1572
    • [P2] Invalidate combined masks after pixel edits by @Streetblock in https://github.com/storytold/photocraft/pull/1645
    • Layers panel: ⌥-click on the line between layers, measured against Photoshop (follow-up to #1066) by @Unemars in https://github.com/storytold/photocraft/pull/1642
    • macOS: quit with terminate:, not by closing the window (#1575, #1458) by @brennanMKE in https://github.com/storytold/photocraft/pull/1624
    • Keep legacy PSD text origins visible when editing by @rozaqabdul656 in https://github.com/storytold/photocraft/pull/1560
    • Keep a brush per painting tool, as in Photoshop (#218), carrying #1629 by @agincel by @bflatastic in https://github.com/storytold/photocraft/pull/1685
    • Linux: display server preference (X11 / XWayland) so file drops work, carrying #1319 by @switch87 by @bflatastic in https://github.com/storytold/photocraft/pull/1686
    • fix(scorecard): mark the #204 preference rows done; their readers, allowlist and test exist (#1002) by @MarekSpodBiedry in https://github.com/storytold/photocraft/pull/1694
    • fix(control): ui.inspect reports the documented view preferences (#1003) by @MarekSpodBiedry in https://github.com/storytold/photocraft/pull/1695
    • fix(engine): Layer via Copy and Cut deselect, as Photoshop does (#1096) by @MarekSpodBiedry in https://github.com/storytold/photocraft/pull/1696
    • fix(engine): layer bounds drop the area a selection transform moved pixels out of (#1097) by @MarekSpodBiedry in https://github.com/storytold/photocraft/pull/1697
    • fix(ui): the Photoshop-style status bar shows messages with no document open (#1567) by @MarekSpodBiedry in https://github.com/storytold/photocraft/pull/1698
    • fix(ui): the Navigator keeps its image during a live paint stroke (#1631) by @MarekSpodBiedry in https://github.com/storytold/photocraft/pull/1699
    • fix(engine): Move tool Auto-Select clicks through fully locked layers (#1641) by @MarekSpodBiedry in https://github.com/storytold/photocraft/pull/1701
    • fix(io): a CMYK Channel Mixer using the black source stays raw in CMYK documents (#940) by @MarekSpodBiedry in https://github.com/storytold/photocraft/pull/1702
    • fix(io): keep a PSD Anno block that cannot be read instead of deleting it on save (#944) by @MarekSpodBiedry in https://github.com/storytold/photocraft/pull/1703
    • fix(automation): bridge doc_save without path writes back like headless (#946) by @MarekSpodBiedry in https://github.com/storytold/photocraft/pull/1704
    • fix(xtask): the scorecard's performance summary no longer counts not-run scenarios as tracked (#947) by @MarekSpodBiedry in https://github.com/storytold/photocraft/pull/1705
    • fix(ui): Keyboard Shortcuts dialog rejects a malformed overrides map instead of wiping shortcuts (#956) by @MarekSpodBiedry in https://github.com/storytold/photocraft/pull/1707
    • fix(compose): a Precise inner glow from the centre is no longer blank (#966) by @MarekSpodBiedry in https://github.com/storytold/photocraft/pull/1708
    • fix(engine): prefs.set and prefs.reset apply the text blending gamma (#987) by @MarekSpodBiedry in https://github.com/storytold/photocraft/pull/1709
    • docs: README tool count and list match Tool::ALL (#996) by @MarekSpodBiedry in https://github.com/storytold/photocraft/pull/1710
    • fix(compose): don't clip Add and Divide at 1 in 32-bit documents by @hideoneric in https://github.com/storytold/photocraft/pull/1722
    • Layered TIFF: an Intel-order file opened with every layer hidden (blend-if ranges swapped) by @llduyll10 in https://github.com/storytold/photocraft/pull/1712
    • Fix small caps rendering across fonts by @rozaqabdul656 in https://github.com/storytold/photocraft/pull/1644
    • CR2: read ColorData's as-shot white balance as words by @Elvis33LE in https://github.com/storytold/photocraft/pull/1640
    • AF.3: native Affinity import (layers, artboards, vectors, text, images), carrying #1607 by @callmeBalloch by @bflatastic in https://github.com/storytold/photocraft/pull/1778
    • Clarify that muda is a native menu crate, not Tauri by @bflatastic in https://github.com/storytold/photocraft/pull/1786
    • fix(docs): control-protocol Preferences Apply and OK are refused over control (#1555) by @buivanvu94 in https://github.com/storytold/photocraft/pull/1678
    • docs(control): align method signatures with accepted parameters (#1550) by @Ni-zav in https://github.com/storytold/photocraft/pull/1674
    • docs(mcp): grant scoped file roots in headless registration examples … by @Ni-zav in https://github.com/storytold/photocraft/pull/1673
    • docs: explain Windows source build prerequisites and app-control failures by @yearth in https://github.com/storytold/photocraft/pull/1692
    • fix(i18n): refine 32 German UI translations by @Streetblock in https://github.com/storytold/photocraft/pull/1791
    • Retouch tools: test the stroke-point bound on all eleven commands (#976) by @kayrockscreenprinting in https://github.com/storytold/photocraft/pull/1784
    • CI: no macOS on PRs or main; macOS is built and tested by releases by @echelon in https://github.com/storytold/photocraft/pull/1820
    • Liquify: a stroke segment walks only the dabs that can reach the field (#937) by @kayrockscreenprinting in https://github.com/storytold/photocraft/pull/1736
    • fix(ui): Esc ends a Pen path and keeps it instead of discarding it (#1769) by @Duke242 in https://github.com/storytold/photocraft/pull/1787
    • fix(ui): prevent selection tracing from blocking background job controls by @Ni-zav in https://github.com/storytold/photocraft/pull/1690
    • Equalize, Average and Clouds edit the targeted channel, not the layer (#935) by @kayrockscreenprinting in https://github.com/storytold/photocraft/pull/1777
    • View › Show › Target Path hides the path outlines (part of #1119) by @kayrockscreenprinting in https://github.com/storytold/photocraft/pull/1794
    • fix(canvas): isolate rotation previews to the active document with headless tests by @Ni-zav in https://github.com/storytold/photocraft/pull/1676
    • Gradient Map: pick presets from the gradient library (#1588) by @davidmann4 in https://github.com/storytold/photocraft/pull/1780
    • Fix Linux Open filters for uppercase and mixed-case extensions by @AlanRockefeller in https://github.com/storytold/photocraft/pull/1439
    • fix(engine): validate coordinates before live stroke updates by @0x6Ason in https://github.com/storytold/photocraft/pull/1652
    • Preserve originating plug-in errors across parallel bands by @midasdf in https://github.com/storytold/photocraft/pull/1654
    • test(liquify): verify Alt-reversed strokes survive replay and undo/redo by @Ni-zav in https://github.com/storytold/photocraft/pull/1675
    • fix(ui): open Layers footer popup menus on secondary click (#1579) by @Ni-zav in https://github.com/storytold/photocraft/pull/1680
    • Preferences: show next-launch notice for System Title Bar (#1661) by @midasdf in https://github.com/storytold/photocraft/pull/1677
    • fix(ui): open Gradients preset browser from options-bar swatch (#1651) by @Ni-zav in https://github.com/storytold/photocraft/pull/1681
    • Selective Color and Color Lookup: a wrong-typed key is an error (#936) by @kayrockscreenprinting in https://github.com/storytold/photocraft/pull/1790
    • Layers panel: the eyes on effect rows show and hide effects by @Chandirasegaran in https://github.com/storytold/photocraft/pull/1664
    • macOS: save to SMB shares that refuse a full flush (#1336) by @brennanMKE in https://github.com/storytold/photocraft/pull/1639
    • Save/Close: finish layered TIFF writes before discarding documents (#1098) by @harrisonoconnorhover in https://github.com/storytold/photocraft/pull/1723
    • fix(control): respect modal menu policy before invoking commands (#1556) by @Ni-zav in https://github.com/storytold/photocraft/pull/1671
    • fix(control): expose open Brush Preset picker in ui.inspect (#1558) by @Ni-zav in https://github.com/storytold/photocraft/pull/1672
    • fix(io): preserve PNG text metadata through document saves by @Elvis33LE in https://github.com/storytold/photocraft/pull/1684
    • Add shared MCP conventions and cancellable Render Video by @storybored379 in https://github.com/storytold/photocraft/pull/1668
    • Update Japanese translations by @coolvitto in https://github.com/storytold/photocraft/pull/1669
    • Japanese: command names match the menu terms (follow-up to #1669) by @echelon in https://github.com/storytold/photocraft/pull/1860
    • [P2] Bound mask-cache memory and include it in Purge All by @Streetblock in https://github.com/storytold/photocraft/pull/1650
    • Toolbar colour chips, Color Picker and panel footers, as in Photoshop by @Unemars in https://github.com/storytold/photocraft/pull/1729
    • [P2] Share concurrent cold mask builds by @Streetblock in https://github.com/storytold/photocraft/pull/1653
    • Filter › Other › Color to Alpha (#1576) by @switch87 in https://github.com/storytold/photocraft/pull/1683
    • fix(indexed-color): integer counts, palette stops and asynchronous previews by @Elvis33LE in https://github.com/storytold/photocraft/pull/1741
    • Packaging: Windows MSI setup wizard (folder choice, progress, version, launch on finish) by @bflatastic in https://github.com/storytold/photocraft/pull/1864
    • fix(codecs): read the resolution from EXIF, XMP and Photoshop APP13; write it consistently (#1691) by @switch87 in https://github.com/storytold/photocraft/pull/1744
    • fix(ui): one Cmd+V pastes one layer (#1638) by @switch87 in https://github.com/storytold/photocraft/pull/1743
    • inspect: report each smart object's source by @jmverges in https://github.com/storytold/photocraft/pull/1785
    • Patch Tool: say to drag the selection after the lasso and after a click that moves nothing (#1715) by @MarekSpodBiedry in https://github.com/storytold/photocraft/pull/1720
    • fix(ui): keep autoscrolling Layers panel when a layer is dragged past its edge (#1501) by @buivanvu94 in https://github.com/storytold/photocraft/pull/1728
    • Canvas zoom: Photoshop's range, ladder and ⌥-wheel step; no slide at the limit by @Unemars in https://github.com/storytold/photocraft/pull/1718
    • Eyedropper: Sample Size, Sample layers and Show Sampling Ring (#1745 carry) by @bflatastic in https://github.com/storytold/photocraft/pull/1894
    • feat(eyedropper): Sample Size, Sample layers and Show Sampling Ring (#1649) by @switch87 in https://github.com/storytold/photocraft/pull/1745
    • Raw corpus: real camera files from raw.pixls.us, oracle-tested (#1636 carry) by @bflatastic in https://github.com/storytold/photocraft/pull/1895
    • Raw corpus: real camera files from raw.pixls.us, oracle-tested by @Elvis33LE in https://github.com/storytold/photocraft/pull/1636
    • Compose: restore the blend-space flags instead of clearing them after a tile (#1462 carry) by @bflatastic in https://github.com/storytold/photocraft/pull/1896
    • xtask: corpus --all --update-manifest refetches every manifest (#1706 carry) by @bflatastic in https://github.com/storytold/photocraft/pull/1897
    • Layers panel: drag layer effects onto another layer, Alt-drag copies (#1734 carry) by @bflatastic in https://github.com/storytold/photocraft/pull/1898
    • Layers panel: drag layer effects onto another layer to move them, Alt-drag copies (#1719) by @MarekSpodBiedry in https://github.com/storytold/photocraft/pull/1734
    • Scorecard: mark UI-217-2 done; the geometry round trip is tested (#217) by @reynold-hu in https://github.com/storytold/photocraft/pull/1808
    • Scorecard: mark the BUG-205 and BUG-207 rows done; the fixes and their tests are on main (#205, #207) by @reynold-hu in https://github.com/storytold/photocraft/pull/1795
    • GPU parity tests: give the one-step tolerance f32 slack (#1848) by @Sir-Starch in https://github.com/storytold/photocraft/pull/1852
    • camera_raw_scope: serialise the GPU tests with GPU_LOCK (#1855) by @Sir-Starch in https://github.com/storytold/photocraft/pull/1856
    • Test the dispatch panic guard end to end; mark REL-3 done by @reynold-hu in https://github.com/storytold/photocraft/pull/1803
    • Hue/Saturation: hue-following colour tracks on the Saturation and Lightness sliders (#217) by @reynold-hu in https://github.com/storytold/photocraft/pull/1863
    • image.mode.bitmap: an unknown halftone shape is a bad-params error by @xsvm in https://github.com/storytold/photocraft/pull/1842
    • Preferences on Cmd+K, Search on Cmd+F (Photoshop's defaults) by @texjer in https://github.com/storytold/photocraft/pull/1900
    • File > Open starts in the last-used folder (#217) by @reynold-hu in https://github.com/storytold/photocraft/pull/1889
    • fix(format): reject leading '+' in unhex pairs (#1818) by @maxm11 in https://github.com/storytold/photocraft/pull/1832
    • Image Size reports the size it applied (#1815) by @kayrockscreenprinting in https://github.com/storytold/photocraft/pull/1836
    • RAW: check the orientation range before narrowing (#1817) by @kayrockscreenprinting in https://github.com/storytold/photocraft/pull/1839
    • Add Ukrainian UI translation by @dmatviichuk in https://github.com/storytold/photocraft/pull/1799
    • Define Pattern asks for the pattern's name by @kayrockscreenprinting in https://github.com/storytold/photocraft/pull/1850
    • fix(app): exit with status 2 when --control setup fails (#1816) by @maxm11 in https://github.com/storytold/photocraft/pull/1834
    • fix(layers): Layers panel thumbnails of tall documents fill the thumbnail height (#1762) by @MarekSpodBiedry in https://github.com/storytold/photocraft/pull/1805
    • fix(ui): horizontal ruler keeps ticks when View > Flip Horizontal (#1814) by @maxm11 in https://github.com/storytold/photocraft/pull/1835
    • Crop tool: Enter crops to the selection's frame (#1789) by @davidmann4 in https://github.com/storytold/photocraft/pull/1806
    • Double-click the Hand tool to fit on screen by @stevanmarjanovic in https://github.com/storytold/photocraft/pull/1796
    • Fix placed layer disappearing when editing Smart Object contents by @Dazzanova in https://github.com/storytold/photocraft/pull/1831
    • Rasterize Vector Mask keeps a feathered edge (#992) by @kayrockscreenprinting in https://github.com/storytold/photocraft/pull/1807
    • fix: start Save As and export dialogs beside the document by @0x6Ason in https://github.com/storytold/photocraft/pull/1866
    • fix(ui): expand collapsed panels when a tab is clicked by @0x6Ason in https://github.com/storytold/photocraft/pull/1868
    • Masks: \ toggles the layer mask's rubylith overlay (#1765) by @davidmann4 in https://github.com/storytold/photocraft/pull/1809
    • Brush preset grid: centre the columns and indent every row by @dhiorns15 in https://github.com/storytold/photocraft/pull/1883
    • Fill: pick the Custom Pattern from its swatches by @kayrockscreenprinting in https://github.com/storytold/photocraft/pull/1861
    • Add Dutch (nl) UI translation by @nvict-service in https://github.com/storytold/photocraft/pull/1877
    • Dialogs: tall filter dialogs scroll; a moved dialog reopens in place by @kayrockscreenprinting in https://github.com/storytold/photocraft/pull/1822
    • fix(engine): give new adjustment and fill layers a white mask by @0x6Ason in https://github.com/storytold/photocraft/pull/1858
    • Filter dialogs: OK keeps the preview until the filter lands by @kayrockscreenprinting in https://github.com/storytold/photocraft/pull/1825
    • Layers: a new empty layer no longer recomposites every layer (#1771) by @davidmann4 in https://github.com/storytold/photocraft/pull/1846
    • Schema dialogs ignore notes after a spec; Selective Color's OK works again by @kayrockscreenprinting in https://github.com/storytold/photocraft/pull/1886
    • System title bar: hide the in-app mark and title, show the file in the OS title by @rafi612 in https://github.com/storytold/photocraft/pull/1903
    • Canvas: edits that change no pixels (a lasso selection) don't recomposite (#1773) by @davidmann4 in https://github.com/storytold/photocraft/pull/1853
    • fix(engine): preserve edited layouts before applying layer comps by @0x6Ason in https://github.com/storytold/photocraft/pull/1862
    • Ctrl+T on a selected path transforms the path (#1770) by @alonfaraj in https://github.com/storytold/photocraft/pull/1871
    • Free Transform: edge handles scale proportionally, ⇧ stretches one axis (as Photoshop CC 2019+) by @kuvshin888 in https://github.com/storytold/photocraft/pull/1873
    • GPU canvas: convert changed layer tiles once each, in parallel (#1774) by @davidmann4 in https://github.com/storytold/photocraft/pull/1847
    • Canvas: the CPU canvas pixel grid skips empty pixels, like the GPU canvas by @Jeremy8776 in https://github.com/storytold/photocraft/pull/1891
    • Image › Adjustments: apply per tile in parallel (#1772) by @kayrockscreenprinting in https://github.com/storytold/photocraft/pull/1800
    • Web: fonts served next to the app, loaded on demand (fonts/manifest.txt, craft-fonts format) by @kuvshin888 in https://github.com/storytold/photocraft/pull/1875
    • New Document starts from the last document's settings (#1810) by @kayrockscreenprinting in https://github.com/storytold/photocraft/pull/1869
    • feat(pen): undo in-progress points with Ctrl/Cmd+Z by @Ni-zav in https://github.com/storytold/photocraft/pull/1478
    • fix(engine): reject invalid new-document parameters by @0x6Ason in https://github.com/storytold/photocraft/pull/1878
    • Command palette: recently run commands on an empty query (#217) by @reynold-hu in https://github.com/storytold/photocraft/pull/1824
    • feat(ui): add Edit Stroke dialog with shared blending controls by @Ni-zav in https://github.com/storytold/photocraft/pull/1477
    • Crop tool: rotate the crop frame by dragging outside it (#1792) by @davidmann4 in https://github.com/storytold/photocraft/pull/1879
    • Control: shell dialogs are listed and driven as "shell" (#1004) by @kayrockscreenprinting in https://github.com/storytold/photocraft/pull/1811
    • MCP: tool schemas without $ref, $defs or boolean schemas (#1782) by @kayrockscreenprinting in https://github.com/storytold/photocraft/pull/1845
    • Document tabs: Reveal in Finder and drag to reorder (#217) by @reynold-hu in https://github.com/storytold/photocraft/pull/1906
    • Add centered and transformable painting symmetry axes (#1648) by @shorbank in https://github.com/storytold/photocraft/pull/1821
    • SVG import: refuse deeply nested markup instead of overflowing the stack by @syd168 in https://github.com/storytold/photocraft/pull/1901
    • raw: cRAW black level without a tag; measured image areas (D800E, ILCE-7) by @Gotya-OFFCIAL in https://github.com/storytold/photocraft/pull/1902
    • Filter previews compute off the UI thread; a stale one is cancelled once the slider settles by @kayrockscreenprinting in https://github.com/storytold/photocraft/pull/1899
    • Support RAF format used by Fujifilm cameras by @kstppd in https://github.com/storytold/photocraft/pull/1872
    • Fix browser Save for Web downloads and stale export dimensions by @harrisonoconnorhover in https://github.com/storytold/photocraft/pull/1857
    • Fix style list display issue for certain fonts in Type tool by @quiple in https://github.com/storytold/photocraft/pull/1844
    • Allow automation to edit embedded Smart Object contents by @harrisonoconnorhover in https://github.com/storytold/photocraft/pull/1882
    • Speed up Mosaic with portable row reads by @optimalbytee in https://github.com/storytold/photocraft/pull/1524
    • feat(export): export selected adjustment layer stacks as .cube LUTs by @Ni-zav in https://github.com/storytold/photocraft/pull/1493
    • Optimize Radial Blur sampling without changing output by @optimalbytee in https://github.com/storytold/photocraft/pull/1499
    • PSD: Optical kerning survives a round trip (Txt2 auto-kern modes) by @shmuelbiller1 in https://github.com/storytold/photocraft/pull/1517
    • codecs: PNG export gives the same bytes on any core count by @rossaai in https://github.com/storytold/photocraft/pull/1932
    • i18n(uk): refine eyedropper and color picker wording by @dmatviichuk in https://github.com/storytold/photocraft/pull/1974
    • Fix/zip deflate unbounded limit by @shmuelbiller1 in https://github.com/storytold/photocraft/pull/1956
    • Paste: drop a stale image once the OS clipboard has moved on by @jason4short in https://github.com/storytold/photocraft/pull/1912
    • fix(ui): show native macOS labels in unsaved-changes prompts by @Ni-zav in https://github.com/storytold/photocraft/pull/1936
    • gpu: write F32_MAX exactly so the compositor shader builds on WebGPU by @joe2643 in https://github.com/storytold/photocraft/pull/1982
    • Fill layers keep their colours in the document's mode (#1905) by @kayrockscreenprinting in https://github.com/storytold/photocraft/pull/1915
    • PSD export: pattern fill layers keep their pattern in CMYK and Lab (#1907) by @kayrockscreenprinting in https://github.com/storytold/photocraft/pull/1917
    • fix(ui): correct percentage grid spacing and snapping on rectangular canvases by @Ni-zav in https://github.com/storytold/photocraft/pull/1914
    • fix(inpaint): bound proximity-match search radii to image dimensions by @Ni-zav in https://github.com/storytold/photocraft/pull/1969
    • Print Size honors the Screen Resolution preference (#204) by @reynold-hu in https://github.com/storytold/photocraft/pull/1923
    • PSD import: warn when an adjustment layer can't be read (part of #1763) by @kayrockscreenprinting in https://github.com/storytold/photocraft/pull/1925
    • Smart contents test: match the refused path by file name (Windows CI red since #1882) by @echelon in https://github.com/storytold/photocraft/pull/2042
    • fix(smart): preserve pattern resources when converting fill layers by @Ni-zav in https://github.com/storytold/photocraft/pull/1937
    • Menus: a submenu with every item disabled is disabled too (#1976) by @MarekSpodBiedry in https://github.com/storytold/photocraft/pull/1984
    • fix(paint): preserve stylus pressure on quick taps by @Ni-zav in https://github.com/storytold/photocraft/pull/1967
    • fix(text): render imported PSD tabs as whitespace instead of tofu by @Ni-zav in https://github.com/storytold/photocraft/pull/1942
    • Type: wire Fill new type layers with placeholder text (#204) by @reynold-hu in https://github.com/storytold/photocraft/pull/1935
    • Type: wire the Use Escape to Commit preference (#204) by @reynold-hu in https://github.com/storytold/photocraft/pull/1927
    • Transparent PNG, TIFF and other flat images open as Layer 0, not Background by @LloydNicholson in https://github.com/storytold/photocraft/pull/1913
    • File Handling: wire Lowercase Extension through Save As (#204) by @reynold-hu in https://github.com/storytold/photocraft/pull/1941
    • fix(retouch): sample Proximity Match from original pixels by @Ni-zav in https://github.com/storytold/photocraft/pull/1968
    • feat(ui): show rotation cursor and live angle during Free Transform by @Ni-zav in https://github.com/storytold/photocraft/pull/1948
    • fix(ui): expand dialog title drag targets for easier window movement by @Ni-zav in https://github.com/storytold/photocraft/pull/1945
    • fix(actions): play the first action when none is selected by @Ni-zav in https://github.com/storytold/photocraft/pull/1990
    • Crop tool: a pending crop stays with its document (#1918) by @davidmann4 in https://github.com/storytold/photocraft/pull/1957
    • fix(dialogs): remember validated filter settings after successful apply by @Ni-zav in https://github.com/storytold/photocraft/pull/1944
    • Crop tool: arrow keys nudge, X swaps orientation, W × H readout (#1919) by @davidmann4 in https://github.com/storytold/photocraft/pull/1958
    • PSD import: a pattern-filled shape opens as a pattern fill layer (fixes corpus floor after #1917) by @echelon in https://github.com/storytold/photocraft/pull/2059
    • Preferences: wire large_tabs, export_clipboard, and show_channels_in_color (#204) by @Hathor875 in https://github.com/storytold/photocraft/pull/1986
    • Crop tool: overlay options (thirds, grid, diagonal, triangle, golden ratio/spiral), O / ⇧O (#1919) by @davidmann4 in https://github.com/storytold/photocraft/pull/2026
    • Canvas: zoom is physical at any display scale (#1943) by @maxm11 in https://github.com/storytold/photocraft/pull/1978
    • feat(ui): add Close and Close Tab Group to panel tab context menus by @Ni-zav in https://github.com/storytold/photocraft/pull/1924
    • fix(canvas): say when the desktop takes an Alt-click (#1658, #1659) by @switch87 in https://github.com/storytold/photocraft/pull/2003
    • fix(compose): apply Curves master before per-channel tone records by @Ni-zav in https://github.com/storytold/photocraft/pull/1929
    • feat(ui): use native file picker for Color Lookup LUT imports by @Ni-zav in https://github.com/storytold/photocraft/pull/1947
    • Quick Selection: Photoshop's behaviour, measured and fitted by @Unemars in https://github.com/storytold/photocraft/pull/1966
    • Prefs audit: Export Clipboard reads as wired again by @echelon in https://github.com/storytold/photocraft/pull/2069
    • fix(compose): knock out outer glow behind see-through fill by @shmuelbiller1 in https://github.com/storytold/photocraft/pull/1964
    • DNG: deflate compression 8 with the TIFF predictors by @Elvis33LE in https://github.com/storytold/photocraft/pull/1971
    • fix(gpu): preserve hard gradient stops with CPU fallback by @raghav2005 in https://github.com/storytold/photocraft/pull/2005
    • Update document names after successful Save As by @optimalbytee in https://github.com/storytold/photocraft/pull/2018
    • Layers panel: the scroll wheel over the blend-mode menu steps through the modes by @skraus2 in https://github.com/storytold/photocraft/pull/1961
    • About window: fixed table headers, aligned columns, fitted tabs by @dhiorns15 in https://github.com/storytold/photocraft/pull/2000
    • Text: fall back to Thai-capable fonts for missing glyphs (#1909) by @davidmann4 in https://github.com/storytold/photocraft/pull/2030
    • Dialogs: open on their first value, selected (#1757) by @davidmann4 in https://github.com/storytold/photocraft/pull/2040
    • History: Delete current state and New Document from the panel footer work (#1117) by @davidmann4 in https://github.com/storytold/photocraft/pull/2039
    • Smart Clipboard Matching (#2034) by @alex-ctms in https://github.com/storytold/photocraft/pull/2045
    • fix(ui): apply distinct workspace presets (#1120) by @zenjabba in https://github.com/storytold/photocraft/pull/2051
    • Compose: bound effect memory on large documents (#1909) by @davidmann4 in https://github.com/storytold/photocraft/pull/2076
    • fix: remove Photoshop from user-facing strings (#1985) by @roaldosulejmani in https://github.com/storytold/photocraft/pull/2008
    • docs: correct raster capabilities and decode limits (#520) by @zenjabba in https://github.com/storytold/photocraft/pull/2050
    • Brushes: decode imported tips on demand, not at start (#1843) by @davidmann4 in https://github.com/storytold/photocraft/pull/1949
    • Edit › Fill and Edit › Stroke: the colour opens the Color Picker by @kayrockscreenprinting in https://github.com/storytold/photocraft/pull/2019
    • Edit › Stroke: whole opaque pixels, Center like Photoshop, and strokes on the canvas edge by @kayrockscreenprinting in https://github.com/storytold/photocraft/pull/2025
    • fix(engine): convert selected layers into one editable Smart Object (#1079) by @zenjabba in https://github.com/storytold/photocraft/pull/2052
    • Chisel bevel: facets are flat at any edge angle (#1926) by @Sir-Starch in https://github.com/storytold/photocraft/pull/2006
    • Brush strokes carry their timing: the first moves count, smoothing feels the same on any device, a held airbrush builds up by @tanish2k09 in https://github.com/storytold/photocraft/pull/2110
    • fix(linux): disable unsupported startup notification (#2089) by @zenjabba in https://github.com/storytold/photocraft/pull/2097
    • fix(ui): keep 32-bit Preview Options within the window (#2081) by @zenjabba in https://github.com/storytold/photocraft/pull/2105
    • Masks: mask button adds a vector mask instead of replacing the layer mask (#2075) by @davidmann4 in https://github.com/storytold/photocraft/pull/2114
    • fix(ui): show brush strokes live in mask view (#2078) by @zenjabba in https://github.com/storytold/photocraft/pull/2108
    • EXR: multi-part files open the colour part; exr_info lists them all by @Elvis33LE in https://github.com/storytold/photocraft/pull/2116
    • Free Transform: the preview follows edits made while the box is open (#1384) by @ianswope in https://github.com/storytold/photocraft/pull/2099
    • Crop tool: Straighten button and ⌘/Ctrl-drag level the frame (#1919) by @davidmann4 in https://github.com/storytold/photocraft/pull/2127
    • Crop tool: Show Cropped Area (H) and Crop Shield colour/opacity options (#1919) by @davidmann4 in https://github.com/storytold/photocraft/pull/2128
    • Patterns paint in the document's colour mode (Gray, CMYK) by @kayrockscreenprinting in https://github.com/storytold/photocraft/pull/1950
    • Shape tools: a click opens Create Rectangle / Create Ellipse (#1175) by @davidmann4 in https://github.com/storytold/photocraft/pull/2031
    • DNG: JPEG XL compression 52546 (DNG 1.7, Samsung Expert RAW) by @ravelund in https://github.com/storytold/photocraft/pull/2047
    • Layer style colours keep the document's mode (Gray, CMYK) by @kayrockscreenprinting in https://github.com/storytold/photocraft/pull/2103
    • feat(canvas): Caps Lock forces the precise crosshair for painting tools (#1758) by @switch87 in https://github.com/storytold/photocraft/pull/2111
    • Affinity import: special shapes and sample corpus (#1606) by @alex-ctms in https://github.com/storytold/photocraft/pull/2035
    • Selection distance transforms: 7.6-10.6x faster and correct past 4K by @excited-raccoon in https://github.com/storytold/photocraft/pull/2093
    • Proximity Match: 1.5-3.8x faster stroke searches, smaller mask tables by @excited-raccoon in https://github.com/storytold/photocraft/pull/2101
    • perf: bevel_bench, the cost of changing a chisel bevel's size (#2006 follow-up) by @Sir-Starch in https://github.com/storytold/photocraft/pull/2118
    • Save in the background so large saves don't freeze the window (#2017) by @brennanMKE in https://github.com/storytold/photocraft/pull/2072
    • Brushes: keep the folder hierarchy of imported .abr files (#1851) by @davidmann4 in https://github.com/storytold/photocraft/pull/2001
    • Keep startup responsive while recovering autosaved documents by @harrisonoconnorhover in https://github.com/storytold/photocraft/pull/2115
    • Pen pressure follows every sample: moves in one frame no longer share the frame's last pressure by @tanish2k09 in https://github.com/storytold/photocraft/pull/2112
    • FIX(brush_panel): multiple brushes selection , ADD(brush_panel): button to update current brush , UPDATE(brush_panel): duplicated brush should be created right after by @siraxe in https://github.com/storytold/photocraft/pull/2007
    • fix(web): persist imported brush libraries in IndexedDB (#479) by @zenjabba in https://github.com/storytold/photocraft/pull/2054
    • fix(Text): served fonts become script fallbacks on the web by @hamada147 in https://github.com/storytold/photocraft/pull/2109
    • ci(web): validate browser builds and wasm size on pull requests by @Ni-zav in https://github.com/storytold/photocraft/pull/1689
    • Gradient Editor window: the Gradient tool's swatch opens a customizable gradient editor by @Zam233 in https://github.com/storytold/photocraft/pull/1983
    • Layers: delete targeted masks and edit Solid Color by thumbnail by @abc2cb in https://github.com/storytold/photocraft/pull/1997
    • prefs_ui: declare recovery_tests after the production code (fixes prefs_usage) by @echelon in https://github.com/storytold/photocraft/pull/2194
    • Themes: add Solarized Dark (#1136) by @maxm11 in https://github.com/storytold/photocraft/pull/2098
    • Add native layered Paint.NET (.pdn) import by @SilentYeti in https://github.com/storytold/photocraft/pull/1998
    • Add Adwaita and Adwaita Dark themes (+ brush chip fix on light themes) by @shivthedev-92 in https://github.com/storytold/photocraft/pull/1823
    • Toolbar: Studio themes draw round colour chips with Switch Colors below by @luniiya in https://github.com/storytold/photocraft/pull/2002
    • Appearance modes: sync with system, separate dark and light themes by @luniiya in https://github.com/storytold/photocraft/pull/1981
    • Notices: auto-hide after a delay, with Interface preferences (#2022) by @maxm11 in https://github.com/storytold/photocraft/pull/2100
    • Add font previews and keyboard cycling to font menus by @mroxso in https://github.com/storytold/photocraft/pull/1746
    • ui: Panels::rail and Panels::menu_bar let an embedding app hide the icon rail and the menu bar by @rossaai in https://github.com/storytold/photocraft/pull/1960
    • Keyboard Shortcuts: import Photoshop .kys sets; first launch takes Photoshop's live set (#1163) by @texjer in https://github.com/storytold/photocraft/pull/1987
    • Use shared Color Picker for Layer Style and text styles (#2015) by @shorbank in https://github.com/storytold/photocraft/pull/2049

    New Contributors

    • @wstock made their first contribution in https://github.com/storytold/photocraft/pull/1129
    • @DWAA1660 made their first contribution in https://github.com/storytold/photocraft/pull/1290
    • @ArianPashae made their first contribution in https://github.com/storytold/photocraft/pull/1155
    • @marcardenas made their first contribution in https://github.com/storytold/photocraft/pull/1307
    • @RicSchonfelder made their first contribution in https://github.com/storytold/photocraft/pull/833
    • @Streetblock made their first contribution in https://github.com/storytold/photocraft/pull/1205
    • @ChrisWaldenDev made their first contribution in https://github.com/storytold/photocraft/pull/1214
    • @liowald made their first contribution in https://github.com/storytold/photocraft/pull/1228
    • @MokuLakshithReddy made their first contribution in https://github.com/storytold/photocraft/pull/1141
    • @Pathos0925 made their first contribution in https://github.com/storytold/photocraft/pull/1282
    • @roaldosulejmani made their first contribution in https://github.com/storytold/photocraft/pull/1016
    • @switch87 made their first contribution in https://github.com/storytold/photocraft/pull/1143
    • @buivanvu94 made their first contribution in https://github.com/storytold/photocraft/pull/1010
    • @shorbank made their first contribution in https://github.com/storytold/photocraft/pull/1196
    • @prekabreki made their first contribution in https://github.com/storytold/photocraft/pull/1200
    • @Unemars made their first contribution in https://github.com/storytold/photocraft/pull/1239
    • @Powiadomienie made their first contribution in https://github.com/storytold/photocraft/pull/1192
    • @llduyll10 made their first contribution in https://github.com/storytold/photocraft/pull/906
    • @cold-atom made their first contribution in https://github.com/storytold/photocraft/pull/1085
    • @metzmehard made their first contribution in https://github.com/storytold/photocraft/pull/1087
    • @Lime-3010 made their first contribution in https://github.com/storytold/photocraft/pull/1042
    • @optimalbytee made their first contribution in https://github.com/storytold/photocraft/pull/1294
    • @LordFarquaadtheCreator made their first contribution in https://github.com/storytold/photocraft/pull/1293
    • @GamerWil26 made their first contribution in https://github.com/storytold/photocraft/pull/892
    • @reynold-hu made their first contribution in https://github.com/storytold/photocraft/pull/1221
    • @ragtux made their first contribution in https://github.com/storytold/photocraft/pull/1396
    • @kayrockscreenprinting made their first contribution in https://github.com/storytold/photocraft/pull/1398
    • @jeremyfry made their first contribution in https://github.com/storytold/photocraft/pull/1235
    • @shmuelbiller1 made their first contribution in https://github.com/storytold/photocraft/pull/1416
    • @ArthurViniciusBA1 made their first contribution in https://github.com/storytold/photocraft/pull/1291
    • @txiki739 made their first contribution in https://github.com/storytold/photocraft/pull/1094
    • @bani4kaskashka made their first contribution in https://github.com/storytold/photocraft/pull/1216
    • @SckraT made their first contribution in https://github.com/storytold/photocraft/pull/1401
    • @diegochagas made their first contribution in https://github.com/storytold/photocraft/pull/1406
    • @mralonsocorona made their first contribution in https://github.com/storytold/photocraft/pull/873
    • @MarekSpodBiedry made their first contribution in https://github.com/storytold/photocraft/pull/1378
    • @syd168 made their first contribution in https://github.com/storytold/photocraft/pull/1467
    • @davidmann4 made their first contribution in https://github.com/storytold/photocraft/pull/1502
    • @harrisonoconnorhover made their first contribution in https://github.com/storytold/photocraft/pull/1495
    • @Jeremy8776 made their first contribution in https://github.com/storytold/photocraft/pull/1491
    • @fplachecinski made their first contribution in https://github.com/storytold/photocraft/pull/1334
    • @XusBadia made their first contribution in https://github.com/storytold/photocraft/pull/1201
    • @mrjeye made their first contribution in https://github.com/storytold/photocraft/pull/1160
    • @Camthalion77 made their first contribution in https://github.com/storytold/photocraft/pull/1562
    • @0x6Ason made their first contribution in https://github.com/storytold/photocraft/pull/1516
    • @kubuntugamer made their first contribution in https://github.com/storytold/photocraft/pull/1597
    • @rozaqabdul656 made their first contribution in https://github.com/storytold/photocraft/pull/1596
    • @SBaksa made their first contribution in https://github.com/storytold/photocraft/pull/1595
    • @dhiorns15 made their first contribution in https://github.com/storytold/photocraft/pull/1592
    • @hideoneric made their first contribution in https://github.com/storytold/photocraft/pull/1587
    • @yearth made their first contribution in https://github.com/storytold/photocraft/pull/1692
    • @Duke242 made their first contribution in https://github.com/storytold/photocraft/pull/1787
    • @AlanRockefeller made their first contribution in https://github.com/storytold/photocraft/pull/1439
    • @Chandirasegaran made their first contribution in https://github.com/storytold/photocraft/pull/1664
    • @coolvitto made their first contribution in https://github.com/storytold/photocraft/pull/1669
    • @jmverges made their first contribution in https://github.com/storytold/photocraft/pull/1785
    • @Sir-Starch made their first contribution in https://github.com/storytold/photocraft/pull/1852
    • @xsvm made their first contribution in https://github.com/storytold/photocraft/pull/1842
    • @texjer made their first contribution in https://github.com/storytold/photocraft/pull/1900
    • @maxm11 made their first contribution in https://github.com/storytold/photocraft/pull/1832
    • @dmatviichuk made their first contribution in https://github.com/storytold/photocraft/pull/1799
    • @stevanmarjanovic made their first contribution in https://github.com/storytold/photocraft/pull/1796
    • @Dazzanova made their first contribution in https://github.com/storytold/photocraft/pull/1831
    • @nvict-service made their first contribution in https://github.com/storytold/photocraft/pull/1877
    • @rafi612 made their first contribution in https://github.com/storytold/photocraft/pull/1903
    • @alonfaraj made their first contribution in https://github.com/storytold/photocraft/pull/1871
    • @kuvshin888 made their first contribution in https://github.com/storytold/photocraft/pull/1873
    • @Gotya-OFFCIAL made their first contribution in https://github.com/storytold/photocraft/pull/1902
    • @kstppd made their first contribution in https://github.com/storytold/photocraft/pull/1872
    • @quiple made their first contribution in https://github.com/storytold/photocraft/pull/1844
    • @rossaai made their first contribution in https://github.com/storytold/photocraft/pull/1932
    • @joe2643 made their first contribution in https://github.com/storytold/photocraft/pull/1982
    • @LloydNicholson made their first contribution in https://github.com/storytold/photocraft/pull/1913
    • @Hathor875 made their first contribution in https://github.com/storytold/photocraft/pull/1986
    • @raghav2005 made their first contribution in https://github.com/storytold/photocraft/pull/2005
    • @skraus2 made their first contribution in https://github.com/storytold/photocraft/pull/1961
    • @alex-ctms made their first contribution in https://github.com/storytold/photocraft/pull/2045
    • @zenjabba made their first contribution in https://github.com/storytold/photocraft/pull/2051
    • @ravelund made their first contribution in https://github.com/storytold/photocraft/pull/2047
    • @excited-raccoon made their first contribution in https://github.com/storytold/photocraft/pull/2093
    • @hamada147 made their first contribution in https://github.com/storytold/photocraft/pull/2109
    • @Zam233 made their first contribution in https://github.com/storytold/photocraft/pull/1983
    • @SilentYeti made their first contribution in https://github.com/storytold/photocraft/pull/1998
    • @shivthedev-92 made their first contribution in https://github.com/storytold/photocraft/pull/1823
    • @luniiya made their first contribution in https://github.com/storytold/photocraft/pull/2002
    • @mroxso made their first contribution in https://github.com/storytold/photocraft/pull/1746

    Full Changelog: https://github.com/storytold/photocraft/compare/v0.5.0...v0.6.0

    Downloads
    • photocraft-0.6.0-freebsd-x86_64.tar.gz
      71 MiB
      2026-10-11 06:30:25 -05:00
    • photocraft-0.6.0-linux-aarch64.AppImage
      65 MiB
      2026-10-11 06:30:35 -05:00
    • photocraft-0.6.0-linux-aarch64.AppImage.zsync
      229 KiB
      2026-10-11 06:30:37 -05:00
    • photocraft-0.6.0-linux-aarch64.deb
      70 MiB
      2026-10-11 06:30:44 -05:00
    • photocraft-0.6.0-linux-aarch64.flatpak
      50 MiB
      2026-10-11 06:30:47 -05:00
    • photocraft-0.6.0-linux-aarch64.rpm
      70 MiB
      2026-10-11 06:30:53 -05:00
    • photocraft-0.6.0-linux-aarch64.tar.gz
      68 MiB
      2026-10-11 06:30:56 -05:00
    • photocraft-0.6.0-linux-x86_64.AppImage
      68 MiB
      2026-10-11 06:31:00 -05:00
    • photocraft-0.6.0-linux-x86_64.AppImage.zsync
      239 KiB
      2026-10-11 06:31:02 -05:00
    • photocraft-0.6.0-linux-x86_64.deb
      73 MiB
      2026-10-11 06:31:07 -05:00
    • photocraft-0.6.0-linux-x86_64.flatpak
      54 MiB
      2026-10-11 06:31:18 -05:00
    • photocraft-0.6.0-linux-x86_64.rpm
      72 MiB
      2026-10-11 06:31:20 -05:00
    • photocraft-0.6.0-linux-x86_64.tar.gz
      72 MiB
      2026-10-11 06:31:29 -05:00
    • photocraft-0.6.0-macos-universal.dmg
      79 MiB
      2026-10-11 06:31:31 -05:00
    • photocraft-0.6.0-windows-arm64.msi
      57 MiB
      2026-10-11 06:31:43 -05:00
    • photocraft-0.6.0-windows-arm64-portable.zip
      69 MiB
      2026-10-11 06:31:34 -05:00
    • photocraft-0.6.0-windows-x64.msi
      61 MiB
      2026-10-11 06:31:59 -05:00
    • photocraft-0.6.0-windows-x64-portable.zip
      72 MiB
      2026-10-11 06:31:48 -05:00
    • photocraft-0.6.0-windows-x86.msi
      59 MiB
      2026-10-11 06:32:13 -05:00
    • photocraft-0.6.0-windows-x86-portable.zip
      69 MiB
      2026-10-11 06:32:02 -05:00
    • photocraft-cli-0.6.0-macos-universal.zip
      61 MiB
      2026-10-11 06:32:22 -05:00
    • photocraft-web-0.6.0.zip
      11 MiB
      2026-10-11 06:32:23 -05:00
    • SHA256SUMS.txt
      2.2 KiB
      2026-10-11 06:32:24 -05:00
    • Source Code (ZIP)
    • Source Code (TAR.GZ)
  • v0.5.0 e5e3e39752
    Compare

    PhotoCraft v0.5.0 Stable

    dean released this 2026-10-08 09:01:32 -05:00 | 2198 commits to main since this release

    📅 Originally published on GitHub: Thu, 08 Oct 2026 14:52:50 GMT
    🏷️ Git tag created: Thu, 08 Oct 2026 14:01:32 GMT

    What's Changed

    • Add rendering modes and CPU fallback recovery by @TheSeanLavery in https://github.com/storytold/photocraft/pull/434
    • Type layers keep their name in step with their text (#483) by @mnmlyw in https://github.com/storytold/photocraft/pull/501
    • Unsaved-changes prompt: (D)on't Save / (C)ancel / (S)ave keys, Tab order by @sommerper in https://github.com/storytold/photocraft/pull/533
    • Layer Style: the shadow/bevel Angle slider now moves the light (#350) by @agorevski in https://github.com/storytold/photocraft/pull/411
    • Color Picker: sample colours from the image with a pipette by @carterwsmith in https://github.com/storytold/photocraft/pull/508
    • Polygonal Lasso: double-click closes the polygon; a new polygon replaces the selection in one step by @rosematcha in https://github.com/storytold/photocraft/pull/361
    • Type: the Color panel, Swatches and Color Picker recolor selected text by @rosematcha in https://github.com/storytold/photocraft/pull/364
    • Free Transform: Undo steps through the transform; handles are easier to grab by @rosematcha in https://github.com/storytold/photocraft/pull/365
    • 32-bit documents: Levels don't clip the input and output ranges by @floflo777 in https://github.com/storytold/photocraft/pull/403
    • rustfmt discard_ui.rs (CI Format step red since #533) by @echelon in https://github.com/storytold/photocraft/pull/597
    • Smart objects keep their four-corner (Distort / Perspective) placement by @jason4short in https://github.com/storytold/photocraft/pull/426
    • feat(ui): add bounded Liquify redo history by @agorevski in https://github.com/storytold/photocraft/pull/435
    • Lasso inside liquify mode , with hotkeys L, alt , ctrl+i, ctrl+h for … by @siraxe in https://github.com/storytold/photocraft/pull/453
    • Expose the Mixer Brush as a UI tool (#213) by @agorevski in https://github.com/storytold/photocraft/pull/433
    • Control protocol docs: file.open/file.save are refused over --control (#379) by @floflo777 in https://github.com/storytold/photocraft/pull/391
    • docs: sync scorecard with implemented behavior by @arpitkjaiswal in https://github.com/storytold/photocraft/pull/348
    • Focus PhotoCraft for unsaved close prompt by @TheSeanLavery in https://github.com/storytold/photocraft/pull/547
    • PSD: read/write the artboard lock at Photoshop's lspf bit 3 (#395) by @agorevski in https://github.com/storytold/photocraft/pull/406
    • Show active ICC profile in the status bar (#321) by @agorevski in https://github.com/storytold/photocraft/pull/432
    • Clarify integer and float bit-depth labels (#324) by @agorevski in https://github.com/storytold/photocraft/pull/428
    • Wayland: explain native file drag-and-drop limitation (#386) by @agorevski in https://github.com/storytold/photocraft/pull/430
    • Preferences › Interface: Show bounding box when dragging layer by @sommerper in https://github.com/storytold/photocraft/pull/484
    • Hide unconfigured layer effects from Layers panel by @agorevski in https://github.com/storytold/photocraft/pull/559
    • Paste: a copied image file pastes its pixels (part of #338) by @Ar-maan05 in https://github.com/storytold/photocraft/pull/384
    • Content-Aware Scale: 13x faster seam removal, bit-identical output (part of #211) by @Ar-maan05 in https://github.com/storytold/photocraft/pull/385
    • PSD: read smart-filter masks (FEid) with one section per smart object by @EthanSuquet in https://github.com/storytold/photocraft/pull/396
    • Open documents in bounded reads, with a clear out-of-memory error (#375) by @ljkx in https://github.com/storytold/photocraft/pull/401
    • Camera Raw: interactive histogram, clipping warnings and scopes (part of #215) by @tiredIsa in https://github.com/storytold/photocraft/pull/407
    • Add the Patch tool with a live preview (#213) by @alexanderalber in https://github.com/storytold/photocraft/pull/381
    • Add blend modes to the Gradient tool by @TheSeanLavery in https://github.com/storytold/photocraft/pull/543
    • Start context-menu parity across canvas, paths, and document tabs by @TheSeanLavery in https://github.com/storytold/photocraft/pull/556
    • i18n: complete Simplified Chinese catalog and localize brush sections by @flyyangX in https://github.com/storytold/photocraft/pull/359
    • i18n: add French (fr) UI translation by @leblanc-simon in https://github.com/storytold/photocraft/pull/410
    • i18n: "id" indonesian translation by @trokute in https://github.com/storytold/photocraft/pull/449
    • Report per-language UI translation coverage (#220) by @agorevski in https://github.com/storytold/photocraft/pull/427
    • Add style warp splits and grid presets by @juansebsol in https://github.com/storytold/photocraft/pull/388
    • Add Edit Contents to the Smart Object context menu by @CQMHV in https://github.com/storytold/photocraft/pull/599
    • Edit type layers by double-clicking their thumbnails by @CQMHV in https://github.com/storytold/photocraft/pull/598
    • Monitor profile auto follows each window's display; what is applied is visible (#569) by @ha1des in https://github.com/storytold/photocraft/pull/591
    • feat(i18n): add Korean and live language switching by @neko233-com in https://github.com/storytold/photocraft/pull/582
    • Add fixed UI scale steps from 75% to 300% by @Sirsyorrz in https://github.com/storytold/photocraft/pull/611
    • algo: fix flaky cancel/progress test - tile workers report out of order by @Elvis33LE in https://github.com/storytold/photocraft/pull/609
    • Apply Image onto a transparent layer no longer turns it black by @cristianmoroaica in https://github.com/storytold/photocraft/pull/607
    • Remember desktop window and panel sizes across restarts by @Webificio in https://github.com/storytold/photocraft/pull/587
    • monitor_profile test: Unix only (fixes Windows CI after #591) by @echelon in https://github.com/storytold/photocraft/pull/633
    • README: remove a stray "ArtCraft" line before Star history by @echelon in https://github.com/storytold/photocraft/pull/636
    • Open HEIC/HEIF photos (#355) by @ljkx in https://github.com/storytold/photocraft/pull/372
    • Rename PrintCraft to PdfCraft by @echelon in https://github.com/storytold/photocraft/pull/766
    • Persist migrated presets with preferences by @CQMHV in https://github.com/storytold/photocraft/pull/728
    • Select Linked Layers excludes an unrelated active layer by @CQMHV in https://github.com/storytold/photocraft/pull/764
    • fix(cms): check LUT declared sizes before arithmetic by @agorevski in https://github.com/storytold/photocraft/pull/725
    • i18n: add German (de) UI translation (#309) by @Elvis33LE in https://github.com/storytold/photocraft/pull/663
    • fix(ui): search palette: the Enter that opens a dialog no longer closes it by @Mawfyy in https://github.com/storytold/photocraft/pull/640
    • scorecard: BUG-203 (atomic saves) is done - flip the stale rows (#203) by @Elvis33LE in https://github.com/storytold/photocraft/pull/687
    • layer.showOnly: ⌥-click a layer's eye to show only that layer by @jason4short in https://github.com/storytold/photocraft/pull/665
    • Text fields stop resetting the input method every frame, so keys no longer repeat endlessly on Wayland (#585) by @ianswope in https://github.com/storytold/photocraft/pull/723
    • fix(color): match Photoshop blend corner values by @agorevski in https://github.com/storytold/photocraft/pull/699
    • Box Blur: up to 26x faster at large radii (same running-sum boxes as Gaussian Blur) by @Ar-maan05 in https://github.com/storytold/photocraft/pull/628
    • Layers panel: drag down the eyes to show or hide layers; empty eye when hidden by @jason4short in https://github.com/storytold/photocraft/pull/666
    • Minimum / Maximum (Squareness): up to 37x faster at large radii, bit-identical output by @Ar-maan05 in https://github.com/storytold/photocraft/pull/630
    • Surface Blur: 13x to 40x+ faster on 8-bit layers (sliding histogram) by @Ar-maan05 in https://github.com/storytold/photocraft/pull/631
    • Free Transform: picking another tool applies the transform by @rosematcha in https://github.com/storytold/photocraft/pull/732
    • Layer › Remove Background: one-step subject cutout (layer.removeBackground) by @mvanhorn in https://github.com/storytold/photocraft/pull/734
    • Brazilian Portuguese UI translation (pt-br) by @gangldiego in https://github.com/storytold/photocraft/pull/700
    • fix(linux): AppImage registers its desktop entry and icon on launch by @Mawfyy in https://github.com/storytold/photocraft/pull/617
    • macOS: menus open on press; only the title bar's free gap drags the window by @jason4short in https://github.com/storytold/photocraft/pull/669
    • Color panel: click a chip to edit that color, double-click to open the Color Picker (#655) by @rosematcha in https://github.com/storytold/photocraft/pull/664
    • Fix #497: group type edits and renames in undo by @agorevski in https://github.com/storytold/photocraft/pull/652
    • Numeric fields evaluate typed arithmetic by @rosematcha in https://github.com/storytold/photocraft/pull/726
    • Transform modes: Skew / Distort / Perspective as real modes; legacy corners as a preference by @jason4short in https://github.com/storytold/photocraft/pull/671
    • document.pixel: no panic at x or y = i32::MAX, and no wrap-around past it by @Ar-maan05 in https://github.com/storytold/photocraft/pull/629
    • Fix #570: Shift-click connects brush strokes by @agorevski in https://github.com/storytold/photocraft/pull/654
    • Type: a forced line break (U+0003) breaks the line instead of drawing a box by @EthanSuquet in https://github.com/storytold/photocraft/pull/644
    • Fix multi-file open dialog (#595) by @agorevski in https://github.com/storytold/photocraft/pull/657
    • Fix Hue/Saturation range editor drag panic by @agorevski in https://github.com/storytold/photocraft/pull/727
    • JPEG export no longer fails when the document's XMP is over 64 KB by @EthanSuquet in https://github.com/storytold/photocraft/pull/645
    • Improve Korean terminology and dynamic UI translation coverage by @kijoong-kim in https://github.com/storytold/photocraft/pull/604
    • Image Size keeps the canvas border opaque instead of fading it by @EthanSuquet in https://github.com/storytold/photocraft/pull/646
    • Fix #695: validate Layer Style effect fields by @agorevski in https://github.com/storytold/photocraft/pull/729
    • type.edit: a reversed runs range is a bad-params error, not a panic (#714) by @mnmlyw in https://github.com/storytold/photocraft/pull/754
    • Arbitrary rotation starts at the ruler line's straightening angle by @rosematcha in https://github.com/storytold/photocraft/pull/660
    • Prevent "Export As" from saving webp files as "*.webp.psd" by @Cyanoxide in https://github.com/storytold/photocraft/pull/724
    • rustfmt xtask/src/i18n_coverage.rs (Format red on main since #663 + #700) by @tanish2k09 in https://github.com/storytold/photocraft/pull/798
    • Find and Replace Text: no panic searching a non-type active layer (#703) by @mnmlyw in https://github.com/storytold/photocraft/pull/762
    • Apply the Interface UI Font Size preference by @CQMHV in https://github.com/storytold/photocraft/pull/616
    • codecs: decode deep OpenEXR (deepscanline/deeptile), composited flat or structured by @Elvis33LE in https://github.com/storytold/photocraft/pull/642
    • Selections: drag to move the outline; ⌘-drag floats the selected pixels (engine commands) by @jason4short in https://github.com/storytold/photocraft/pull/686
    • Filter › Render › Relight: redirect a photo's lighting by @mvanhorn in https://github.com/storytold/photocraft/pull/735
    • rustfmt crates/codecs/tests/deep_exr.rs (Format red on main since #642) by @tanish2k09 in https://github.com/storytold/photocraft/pull/804
    • Fix document run and ID overflow (#684, #685) by @agorevski in https://github.com/storytold/photocraft/pull/749
    • Fix bridge preview PNG budgeting by @agorevski in https://github.com/storytold/photocraft/pull/753
    • Clamp Variables data-set indices from control input by @Ni-zav in https://github.com/storytold/photocraft/pull/772
    • Fix ui.set brush size command journaling by @agorevski in https://github.com/storytold/photocraft/pull/744
    • Fix TIFF WhiteIsZero and BigTIFF orientation by @agorevski in https://github.com/storytold/photocraft/pull/746
    • Shapes: a hairline vector stroke no longer darkens the shape's edge pixels by @EthanSuquet in https://github.com/storytold/photocraft/pull/397
    • Spot Healing: Sample All Layers heals onto an empty layer (#731) by @rosematcha in https://github.com/storytold/photocraft/pull/769
    • fix(i18n): follow native UI languages on first launch by @neko233-com in https://github.com/storytold/photocraft/pull/661
    • Support Alt-held polygon segments in the freehand lasso by @jerrykimo in https://github.com/storytold/photocraft/pull/711
    • Type: hitTest, caret and navigate commands so agents can edit text by position (part of #219) by @mvanhorn in https://github.com/storytold/photocraft/pull/623
    • Korean labels for Relight's Ambient and Warmth options by @tanish2k09 in https://github.com/storytold/photocraft/pull/811
    • fix(raw): validate DNG default crop bounds by @agorevski in https://github.com/storytold/photocraft/pull/745
    • Fix vector pixel bounds overflow by @agorevski in https://github.com/storytold/photocraft/pull/747
    • Layered TIFF: open and save Photoshop layer data in TIFF files, in either byte order (part of #215) by @ljkx in https://github.com/storytold/photocraft/pull/672
    • Reject overflowing slice rectangles by @Ni-zav in https://github.com/storytold/photocraft/pull/768
    • Fix hostile PSD pattern geometry by @agorevski in https://github.com/storytold/photocraft/pull/743
    • Bound paint stroke work (#678, #679) by @agorevski in https://github.com/storytold/photocraft/pull/751
    • Actions: actions.record/stop/play/list commands for agents and the CLI (part of #219) by @mvanhorn in https://github.com/storytold/photocraft/pull/622
    • Fix text ink bounds overflow by @agorevski in https://github.com/storytold/photocraft/pull/750
    • Repair corrupt directory-save objects by @agorevski in https://github.com/storytold/photocraft/pull/752
    • fix(automation): close ambient filesystem authorization gaps by @agorevski in https://github.com/storytold/photocraft/pull/763
    • rustfmt crates/ui-egui/src/canvas.rs (Format red on main since #711) by @echelon in https://github.com/storytold/photocraft/pull/819
    • Flat exports embed no document XMP by default; Export As gains a Metadata choice (#647) by @Elvis33LE in https://github.com/storytold/photocraft/pull/733
    • pcraft directory saves: re-verify a rolling share of cached objects; stronger file signature by @tanish2k09 in https://github.com/storytold/photocraft/pull/821
    • rustfmt crates/ui-egui/src/export_dialog.rs (Format red on main since #672 + #733) by @tanish2k09 in https://github.com/storytold/photocraft/pull/822
    • Follow-ups to #665, #666, #734: Photoshop's mask-only Remove Background, one-step eye sweep, no-clone Show Only by @bflatastic in https://github.com/storytold/photocraft/pull/824
    • Headless saves write a flat TIFF unless they ask for layers by @tanish2k09 in https://github.com/storytold/photocraft/pull/825
    • Dialog buttons follow the OS order; Windows/Linux unsaved-changes prompt asks Yes / No / Cancel (#627, #776) by @bflatastic in https://github.com/storytold/photocraft/pull/826
    • Layers panel: a double-click just above or below a layer name renames it (#651) by @rosematcha in https://github.com/storytold/photocraft/pull/823
    • Open .psdt templates as new untitled documents by @rosematcha in https://github.com/storytold/photocraft/pull/807
    • fix(algo): blur small sigmas instead of silently no-oping (#706) by @bfenty in https://github.com/storytold/photocraft/pull/783
    • fix(algo): gallery colour injection covers Colored Pencil and Neon Glow (#709) by @bfenty in https://github.com/storytold/photocraft/pull/805
    • fix(algo): HDR Toning gamma follows its documented direction (#710) by @bfenty in https://github.com/storytold/photocraft/pull/801
    • fix(engine): keyboard shortcut bulk set reports in-call clashes (#719) by @bfenty in https://github.com/storytold/photocraft/pull/799
    • Auto-Align Layers: the dialog no longer sends reference 0 (#674) by @rosematcha in https://github.com/storytold/photocraft/pull/795
    • fix(engine): view.newGuideLayout rejects absurd column/row counts (#704) by @bfenty in https://github.com/storytold/photocraft/pull/797
    • Windows DX12: never load a foreign dxcompiler.dll from PATH (#712) by @bflatastic in https://github.com/storytold/photocraft/pull/817
    • Cancel stale Warp drags when the mesh changes by @Ni-zav in https://github.com/storytold/photocraft/pull/774
    • Handle Stack Mode sources with no visible layers by @Ni-zav in https://github.com/storytold/photocraft/pull/770
    • Camera Raw: read and write settings as a live PSD Smart Filter (part of #215) by @tiredIsa in https://github.com/storytold/photocraft/pull/459
    • fix(engine): clone source_rect clamps huge mapped coordinates (#716) by @bfenty in https://github.com/storytold/photocraft/pull/809
    • Geom: Rect::width and height no longer overflow on i32-extreme rects (#675) by @Luna161 in https://github.com/storytold/photocraft/pull/808
    • New Document: changing Resolution keeps the physical size when a physical unit is shown (#758) by @Luna161 in https://github.com/storytold/photocraft/pull/818
    • Reject geometry params that would silently wrap through i64->i32 narrowing by @Elvis33LE in https://github.com/storytold/photocraft/pull/803
    • ⌘⌥⌃-click on the canvas selects the topmost layer under the pointer by @jason4short in https://github.com/storytold/photocraft/pull/813
    • Help › Search: find any menu command by name by @jason4short in https://github.com/storytold/photocraft/pull/815
    • i18n(ko): drop the duplicate Ambient and Warmth rows (main red since #811 + #824) by @echelon in https://github.com/storytold/photocraft/pull/834
    • rustfmt crates/engine/tests/hdr_gamma_direction.rs (Format red on main since #801) by @echelon in https://github.com/storytold/photocraft/pull/842
    • Copy works on smart object, type and shape layers (#541) by @bflatastic in https://github.com/storytold/photocraft/pull/841
    • Add the Content-Aware Move tool (#213) by @alexanderalber in https://github.com/storytold/photocraft/pull/814
    • Rework Camera Raw filter preview and navigation by @abc2cb in https://github.com/storytold/photocraft/pull/781
    • Bound layer-group nesting at import and Group Layers (stack-overflow guard) by @Elvis33LE in https://github.com/storytold/photocraft/pull/796
    • fix(photocraft): reject an unparseable --control port instead of silently dropping it (#701) by @bfenty in https://github.com/storytold/photocraft/pull/777
    • M9: create vertical type from the Type tool flyout by @midasdf in https://github.com/storytold/photocraft/pull/784
    • Drag-and-drop: place onto the canvas in Free Transform, open at a tab slot by @carterwsmith in https://github.com/storytold/photocraft/pull/739
    • Large PSBs open with their pixels: decode planes past 2 GiB, plus 4-5 GB PSB fixtures (#375) by @alexanderalber in https://github.com/storytold/photocraft/pull/782
    • Layer Style: complete multi-instance effects and dialog parity (#157) by @remidesbois1 in https://github.com/storytold/photocraft/pull/786
    • Italian UI translation (it) by @giallorosso84 in https://github.com/storytold/photocraft/pull/853
    • Add the Magnetic Lasso tool by @louwers in https://github.com/storytold/photocraft/pull/864
    • CI: never cancel main's runs; trim per-PR runner time by @tanish2k09 in https://github.com/storytold/photocraft/pull/800
    • tiff_corpus: ask for layers explicitly (corpus job red since #825) by @tanish2k09 in https://github.com/storytold/photocraft/pull/876
    • agent_tasks: wait for the MCP server task before removing the test folder (Windows os error 32) by @tanish2k09 in https://github.com/storytold/photocraft/pull/877
    • Preset store: a store directory that doesn't exist yet reads as empty on Windows too by @tanish2k09 in https://github.com/storytold/photocraft/pull/878
    • Locking a group locks the layers inside it by @rosematcha in https://github.com/storytold/photocraft/pull/847
    • fix(engine): Camera Raw clamps the noise amounts to their range (#707) by @bfenty in https://github.com/storytold/photocraft/pull/839
    • Test: press-drag-release across menu titles and into submenus (#775) by @bflatastic in https://github.com/storytold/photocraft/pull/837
    • Filter previews stay inside the selection on large documents (#740) by @bflatastic in https://github.com/storytold/photocraft/pull/836
    • fix(test): find sleep on PATH in monitor profile test by @simonwjackson in https://github.com/storytold/photocraft/pull/855
    • ui-egui tests: GPU adapter catch_unwind stops swallowing setup-command failures (#760) by @Luna161 in https://github.com/storytold/photocraft/pull/854
    • Warp: reject extreme rect params with BadParams instead of running a giant warp (#808 follow-up) by @Luna161 in https://github.com/storytold/photocraft/pull/849
    • fix(algo): Path Blur clamps per-path speeds (#708) by @bfenty in https://github.com/storytold/photocraft/pull/840
    • fix(io): artboard guide indices follow resource 1032 order (#722) by @bfenty in https://github.com/storytold/photocraft/pull/845
    • fix(codecs): large PNG exports no longer lose bytes at a band's sync flush by @ajsongpilot in https://github.com/storytold/photocraft/pull/827
    • PSD: decode the merged composite only when something consumes it by @Elvis33LE in https://github.com/storytold/photocraft/pull/846
    • Lossy WebP: a pure-Rust VP8 encoder with quality and lossless controls (#648) by @ljkx in https://github.com/storytold/photocraft/pull/880
    • Gaussian Blur: large radii are fast, live preview included (#464) by @bflatastic in https://github.com/storytold/photocraft/pull/867
    • Resampling reads a bounded window, however small the target (#713) by @mnmlyw in https://github.com/storytold/photocraft/pull/860
    • About: contributor and model credits compiled in (grab bag + table, self-submitted names) by @echelon in https://github.com/storytold/photocraft/pull/898
    • Automation: Apply Data Set works for text and visibility data sets (#806) by @rosematcha in https://github.com/storytold/photocraft/pull/870
    • Document tab × sits after the title on Windows and Linux, as in Photoshop (#619) by @bflatastic in https://github.com/storytold/photocraft/pull/832
    • Brush size and hardness keys are remappable in Keyboard Shortcuts (#626) by @bflatastic in https://github.com/storytold/photocraft/pull/828
    • Menu rows touch, as in native menus: long menus are a fifth shorter (#402) by @bflatastic in https://github.com/storytold/photocraft/pull/844
    • actionlint: declare the org macos-release runner label by @echelon in https://github.com/storytold/photocraft/pull/927
    • Slice Options and Divide Slice are one undo step; a rejected one changes nothing (#910, #911, #912) by @echelon in https://github.com/storytold/photocraft/pull/928
    • Selection tools: Photoshop's full right-click menu (#614, #738) by @bflatastic in https://github.com/storytold/photocraft/pull/831
    • CI: craft-fonts run uses the Test step's exact build again (Linux runner out of disk since #800) by @tanish2k09 in https://github.com/storytold/photocraft/pull/955
    • TIFF: BigTIFF, every IFD and SubIFD, banded parallel decode (FILE-215-8, part of #215) by @ljkx in https://github.com/storytold/photocraft/pull/859
    • Direct Selection tool: reshape pen and shape paths after they're drawn (#790) by @bflatastic in https://github.com/storytold/photocraft/pull/865
    • Windows and Linux: one title bar with the app icon (no stacked OS bar); long context menus scroll by @bflatastic in https://github.com/storytold/photocraft/pull/986
    • Filter Gallery: Angled Strokes paints strokes, not a smear; Rough Pastels' texture shows in dark areas (#879) by @echelon in https://github.com/storytold/photocraft/pull/942
    • Save for Web: slices never overwrite each other; overlapping slices keep their HTML cells (#908, #909) by @echelon in https://github.com/storytold/photocraft/pull/929
    • Out-of-range slice, layer comp and type style ids are rejected, not wrapped (#914) by @echelon in https://github.com/storytold/photocraft/pull/930
    • Invert (⌘I) inverts the targeted layer mask (#780) by @bflatastic in https://github.com/storytold/photocraft/pull/838
    • Drag layers onto another document's tab to copy them there (#589) by @bflatastic in https://github.com/storytold/photocraft/pull/851
    • Layer › Smart Objects › Convert to Layers (#535) by @bflatastic in https://github.com/storytold/photocraft/pull/829
    • Photo Filter and gradient glows render like Photoshop (#442, #443) by @bflatastic in https://github.com/storytold/photocraft/pull/850
    • Fix main: classify the Direct Selection path commands; Czech for "{n} layer" by @echelon in https://github.com/storytold/photocraft/pull/1074
    • Automation: an allowed command can't run a denied one on its behalf by @tanish2k09 in https://github.com/storytold/photocraft/pull/861
    • Variables dialog: malformed entries can't crash an edit by @tanish2k09 in https://github.com/storytold/photocraft/pull/875
    • Layers panel: drop layers on the footer's New Layer, New Group and Delete buttons (#736) by @echelon in https://github.com/storytold/photocraft/pull/965
    • Crop tool starts with a frame around the canvas (or the selection), as in Photoshop (#668 item 7) by @echelon in https://github.com/storytold/photocraft/pull/971
    • Type: ⌘/Ctrl+T while typing shows or hides the Character panel (#668 item 15) by @echelon in https://github.com/storytold/photocraft/pull/983
    • Shape tools: Shift and Alt pressed during the drag constrain it, as in Photoshop (#668 item 12) by @echelon in https://github.com/storytold/photocraft/pull/984
    • Layer via Copy, Copy and Cut read only the selected area: 33× faster on 24 MP (#668 item 18) by @echelon in https://github.com/storytold/photocraft/pull/985
    • Windows: selection and other crosshair tools stay visible over grey (#737) by @echelon in https://github.com/storytold/photocraft/pull/954
    • Clone Stamp / Healing Brush: the source crosshair shows only while painting (#668 item 10) by @echelon in https://github.com/storytold/photocraft/pull/969
    • Preferences: colour settings take a typed #rrggbb value (#668 item 2) by @echelon in https://github.com/storytold/photocraft/pull/1001
    • macOS: use the native menu bar instead of the in-window menus (#887) by @brennanMKE in https://github.com/storytold/photocraft/pull/894
    • README: Downloads section listing every release build by @echelon in https://github.com/storytold/photocraft/pull/1210
    • README Downloads: where to get it, then builds (Windows first) by @echelon in https://github.com/storytold/photocraft/pull/1219
    • Release workflow: only signing and draft-release jobs use the release environment by @echelon in https://github.com/storytold/photocraft/pull/1220

    New Contributors

    • @TheSeanLavery made their first contribution in https://github.com/storytold/photocraft/pull/434
    • @mnmlyw made their first contribution in https://github.com/storytold/photocraft/pull/501
    • @rosematcha made their first contribution in https://github.com/storytold/photocraft/pull/361
    • @jason4short made their first contribution in https://github.com/storytold/photocraft/pull/426
    • @siraxe made their first contribution in https://github.com/storytold/photocraft/pull/453
    • @arpitkjaiswal made their first contribution in https://github.com/storytold/photocraft/pull/348
    • @EthanSuquet made their first contribution in https://github.com/storytold/photocraft/pull/396
    • @alexanderalber made their first contribution in https://github.com/storytold/photocraft/pull/381
    • @flyyangX made their first contribution in https://github.com/storytold/photocraft/pull/359
    • @leblanc-simon made their first contribution in https://github.com/storytold/photocraft/pull/410
    • @trokute made their first contribution in https://github.com/storytold/photocraft/pull/449
    • @ha1des made their first contribution in https://github.com/storytold/photocraft/pull/591
    • @neko233-com made their first contribution in https://github.com/storytold/photocraft/pull/582
    • @Sirsyorrz made their first contribution in https://github.com/storytold/photocraft/pull/611
    • @Elvis33LE made their first contribution in https://github.com/storytold/photocraft/pull/609
    • @cristianmoroaica made their first contribution in https://github.com/storytold/photocraft/pull/607
    • @Webificio made their first contribution in https://github.com/storytold/photocraft/pull/587
    • @mvanhorn made their first contribution in https://github.com/storytold/photocraft/pull/734
    • @gangldiego made their first contribution in https://github.com/storytold/photocraft/pull/700
    • @kijoong-kim made their first contribution in https://github.com/storytold/photocraft/pull/604
    • @Cyanoxide made their first contribution in https://github.com/storytold/photocraft/pull/724
    • @tanish2k09 made their first contribution in https://github.com/storytold/photocraft/pull/798
    • @jerrykimo made their first contribution in https://github.com/storytold/photocraft/pull/711
    • @bfenty made their first contribution in https://github.com/storytold/photocraft/pull/783
    • @Luna161 made their first contribution in https://github.com/storytold/photocraft/pull/808
    • @abc2cb made their first contribution in https://github.com/storytold/photocraft/pull/781
    • @remidesbois1 made their first contribution in https://github.com/storytold/photocraft/pull/786
    • @giallorosso84 made their first contribution in https://github.com/storytold/photocraft/pull/853
    • @louwers made their first contribution in https://github.com/storytold/photocraft/pull/864
    • @simonwjackson made their first contribution in https://github.com/storytold/photocraft/pull/855
    • @ajsongpilot made their first contribution in https://github.com/storytold/photocraft/pull/827
    • @brennanMKE made their first contribution in https://github.com/storytold/photocraft/pull/894

    Full Changelog: https://github.com/storytold/photocraft/compare/v0.3.0...v0.5.0

    Downloads
    • photocraft-0.5.0-freebsd-x86_64.tar.gz
      64 MiB
      2026-10-11 06:32:30 -05:00
    • photocraft-0.5.0-linux-aarch64.AppImage
      59 MiB
      2026-10-11 06:32:32 -05:00
    • photocraft-0.5.0-linux-aarch64.AppImage.zsync
      207 KiB
      2026-10-11 06:32:33 -05:00
    • photocraft-0.5.0-linux-aarch64.deb
      63 MiB
      2026-10-11 06:32:36 -05:00
    • photocraft-0.5.0-linux-aarch64.flatpak
      46 MiB
      2026-10-11 06:32:57 -05:00
    • photocraft-0.5.0-linux-aarch64.rpm
      63 MiB
      2026-10-11 06:32:59 -05:00
    • photocraft-0.5.0-linux-aarch64.tar.gz
      62 MiB
      2026-10-11 06:33:02 -05:00
    • photocraft-0.5.0-linux-x86_64.AppImage
      61 MiB
      2026-10-11 06:33:07 -05:00
    • photocraft-0.5.0-linux-x86_64.AppImage.zsync
      215 KiB
      2026-10-11 06:33:07 -05:00
    • photocraft-0.5.0-linux-x86_64.deb
      65 MiB
      2026-10-11 06:33:11 -05:00
    • photocraft-0.5.0-linux-x86_64.flatpak
      48 MiB
      2026-10-11 06:33:14 -05:00
    • photocraft-0.5.0-linux-x86_64.rpm
      65 MiB
      2026-10-11 06:33:25 -05:00
    • photocraft-0.5.0-linux-x86_64.tar.gz
      64 MiB
      2026-10-11 06:33:29 -05:00
    • photocraft-0.5.0-macos-universal.dmg
      71 MiB
      2026-10-11 06:33:34 -05:00
    • photocraft-0.5.0-windows-arm64.msi
      50 MiB
      2026-10-11 06:33:47 -05:00
    • photocraft-0.5.0-windows-arm64-portable.zip
      62 MiB
      2026-10-11 06:33:44 -05:00
    • photocraft-0.5.0-windows-x64.msi
      53 MiB
      2026-10-11 06:33:53 -05:00
    • photocraft-0.5.0-windows-x64-portable.zip
      65 MiB
      2026-10-11 06:33:51 -05:00
    • photocraft-0.5.0-windows-x86.msi
      52 MiB
      2026-10-11 06:34:02 -05:00
    • photocraft-0.5.0-windows-x86-portable.zip
      62 MiB
      2026-10-11 06:33:57 -05:00
    • photocraft-cli-0.5.0-macos-universal.zip
      55 MiB
      2026-10-11 06:34:06 -05:00
    • photocraft-web-0.5.0.zip
      8.9 MiB
      2026-10-11 06:34:06 -05:00
    • SHA256SUMS.txt
      2.2 KiB
      2026-10-11 06:34:07 -05:00
    • Source Code (ZIP)
    • Source Code (TAR.GZ)
  • v0.3.0 60224d3fb7
    Compare

    PhotoCraft v0.3.0 Stable

    dean released this 2026-10-07 05:10:08 -05:00 | 2403 commits to main since this release

    📅 Originally published on GitHub: Wed, 07 Oct 2026 10:33:19 GMT
    🏷️ Git tag created: Wed, 07 Oct 2026 10:10:08 GMT

    Highlights since 0.2.0

    182 commits from 183 merged pull requests, including work from 31 community contributors (thank you!), and 146 issues closed.

    • Your work is safer:
      • Recovered unsaved documents survive a second crash.
      • Deeply nested .pcraft files reopen.
      • photocraft-cli batch refuses to overwrite its input folder.
      • Preferences no longer get lost when two windows or tabs save, or when a save fails.
    • Languages: the interface is available in 日本語, 简体中文, 繁體中文, Español, Русский and Čeština (Edit › Preferences › Interface › Language), with CJK fonts and IME input in the Type tool.
    • Files:
      • JPEG and other no-alpha exports composite transparency over white.
      • Formats without colour profiles get sRGB.
      • Truncated JPEGs and multi-frame files open with a warning instead of silently.
      • TGA is offered in Save As and Export As.
    • Editing:
      • Free Transform a Copy and Transform Again on a Copy.
      • Keyboard layer navigation, number keys for opacity, Alt-click colour sampling.
      • New from Clipboard.
      • Undo and redo restore the targeted layer.
      • Shortcuts pressed in quick succession all run, in order.
    • Automation (CLI, MCP, control channel):
      • Stricter, clearer parameter and flag errors, and <subcommand> --help.
      • Background jobs that agents can wait for or poll.
      • Recorded actions run in batch.

    Scorecard

    This is the first release with docs/scorecard.md, so these numbers are its baseline. 0.2.0 had no scorecard to compare against. Area counts are done / partial / missing.

    Area Done Partial Missing Measured
    Performance 3 22 12 46 scenarios: 3 within budget, 22 over budget or failing, 13 tracked only, 4 not run, 8 not yet measurable (baseline 2026-10-05)
    File compatibility 1 8 18 io corpus oracle ≥ 146/170, round trip ≥ 169/170; psd-tools oracle ≥ 229/309, round trip ≥ 307/309; Photoshop-authored oracles ≥ 130/256, round trip 258/258
    Tools 3 14 13
    Workspace and UI 0 4 19 settings that do nothing: 60 of 133 (target 0)
    Type 0 3 6
    Automation 1 3 7 626 of 626 menu items live
    Reliability 3 1 3 never-crash lints on 26 of 26 crates; panic_hunt fuzzes every command
    Distribution 4 3 4
    Open bugs 0 3 29

    What's Changed

    • perf(compose): avoid unnecessary backdrop snapshots by @MikeeI in https://github.com/storytold/photocraft/pull/109
    • perf(compose): prepare gradient stops outside pixel loops by @MikeeI in https://github.com/storytold/photocraft/pull/103
    • Fix stale effect maps after default-only mask changes by @MikeeI in https://github.com/storytold/photocraft/pull/105
    • Preserve HDR samples when importing white-matted PSD composites by @MikeeI in https://github.com/storytold/photocraft/pull/106
    • Mix pass-through group coverage in premultiplied space by @MikeeI in https://github.com/storytold/photocraft/pull/108
    • perf(compose): avoid redundant effect-halo rendering by @MikeeI in https://github.com/storytold/photocraft/pull/110
    • Preserve merged PSD alpha at the exported sample precision by @MikeeI in https://github.com/storytold/photocraft/pull/111
    • perf(compose): reuse compiled vector masks within each render by @MikeeI in https://github.com/storytold/photocraft/pull/112
    • perf(compose): reuse bounded pattern preparation across render tiles by @MikeeI in https://github.com/storytold/photocraft/pull/104
    • fix(ui): pasting an image copied in another app never ran by @tiredIsa in https://github.com/storytold/photocraft/pull/102
    • fix(ui): make Move transform controls interactive by @Ni-zav in https://github.com/storytold/photocraft/pull/99
    • Menu overlap and overflow #92 by @Ni-zav in https://github.com/storytold/photocraft/pull/98
    • PR #96 — Liquify undo by @Ni-zav in https://github.com/storytold/photocraft/pull/97
    • fix(ui): shape tools show the shape while dragging by @sommerper in https://github.com/storytold/photocraft/pull/87
    • security: bound automation previews and reply resources by @Gh0stlyKn1ght in https://github.com/storytold/photocraft/pull/93
    • Japanese support: IME input in the Type tool and CJK glyphs in the UI by @kntrttm in https://github.com/storytold/photocraft/pull/101
    • Community batch follow-ups: on-demand OS clipboard paste; fmt + egui 0.36 test port by @echelon in https://github.com/storytold/photocraft/pull/134
    • perf(ui): borrow the active layer from its document snapshot by @MikeeI in https://github.com/storytold/photocraft/pull/121
    • perf(ui): reuse exact cached content bounds by @MikeeI in https://github.com/storytold/photocraft/pull/116
    • perf(ui): skip offscreen layer thumbnail generation by @MikeeI in https://github.com/storytold/photocraft/pull/117
    • perf(ui): retain channel thumbnails across view-only revisions by @MikeeI in https://github.com/storytold/photocraft/pull/120
    • fix(ui): prune thumbnails for removed layers and documents by @MikeeI in https://github.com/storytold/photocraft/pull/119
    • fix(ui): prune closed-document display and preview resources by @MikeeI in https://github.com/storytold/photocraft/pull/118
    • Disambiguate colliding document identities at session admission by @MikeeI in https://github.com/storytold/photocraft/pull/114
    • Warn when the PSD channel limit drops a Quick Mask by @MikeeI in https://github.com/storytold/photocraft/pull/115
    • Preserve compositing properties in single-layer flat export by @MikeeI in https://github.com/storytold/photocraft/pull/122
    • Preserve selected real masks during PSD import by @MikeeI in https://github.com/storytold/photocraft/pull/130
    • Scale artboard bounds in proxy documents by @MikeeI in https://github.com/storytold/photocraft/pull/131
    • Crop tool: move and resize the crop frame, Space repositions while drawing by @echelon in https://github.com/storytold/photocraft/pull/132
    • Fix flaky canvas_geom undo test (process-wide text gamma raced by another test) by @echelon in https://github.com/storytold/photocraft/pull/135
    • Dock: fixed-height panel groups, splitters, collapse, reorder; panels never vanish by @echelon in https://github.com/storytold/photocraft/pull/139
    • Brush Settings panel: Photoshop structure and depth, edits through tools.setBrush by @echelon in https://github.com/storytold/photocraft/pull/136
    • Selecting current bit depth must preserve redo by @MikeeI in https://github.com/storytold/photocraft/pull/133
    • Detect PhotoCraft archives independent of ZIP entry order by @MikeeI in https://github.com/storytold/photocraft/pull/137
    • Type tool: caret/selection land on the glyph under the pointer; font size is live, one undo step, ~60x faster (#123, #124) by @echelon in https://github.com/storytold/photocraft/pull/142
    • Layers groups expand/collapse (#126); every displayed shortcut fires (#127) by @echelon in https://github.com/storytold/photocraft/pull/141
    • Layers rows: names never run under the indicators; fx triangle; Collapse All Groups; designer PSD for QA by @echelon in https://github.com/storytold/photocraft/pull/167
    • fix(geom): saturate Rect::translate and inflate on i32 overflow by @kevin9327 in https://github.com/storytold/photocraft/pull/159
    • fix(ui): make tall menus scrollable on short displays by @Ni-zav in https://github.com/storytold/photocraft/pull/160
    • PSD type layers: bounds regression tests; #148 is the layer's vector mask, not text bounds by @echelon in https://github.com/storytold/photocraft/pull/165
    • Flatpak single-file bundles as release artifacts by @echelon in https://github.com/storytold/photocraft/pull/163
    • Roadmap: honest parity assessment (2026-10-05) by @echelon in https://github.com/storytold/photocraft/pull/182
    • AGENTS.md: no Tauri, Electron or webview shells by @echelon in https://github.com/storytold/photocraft/pull/184
    • Menus scroll and navigate by keyboard on small displays; Color Range dialog on the no-GPU path (#145, #138) by @echelon in https://github.com/storytold/photocraft/pull/168
    • Docs: where we stand and where we're going (roadmap, README, AGENTS.md) by @echelon in https://github.com/storytold/photocraft/pull/186
    • Brushes: Tilt Scale, Brush Projection, Spacing checkbox, section locks, Mixer Wetness/Mix; Brushes grid + drag and drop; options bar through tools.setBrush by @echelon in https://github.com/storytold/photocraft/pull/174
    • fix(ui): refresh Liquify preview after undo by @Ni-zav in https://github.com/storytold/photocraft/pull/175
    • fix(ui): sample eyedropper colours while dragging by @Ni-zav in https://github.com/storytold/photocraft/pull/176
    • fix(ui): keep Curves endpoint handles inside the graph area by @Ni-zav in https://github.com/storytold/photocraft/pull/177
    • fix(ui): avoid duplicate sliders for wide filter ranges by @Ni-zav in https://github.com/storytold/photocraft/pull/179
    • Dock polish: Layers gets the height, Character/Paragraph group, eliding tab strips, reveal the active layer (#147, #150, #151, #152) by @echelon in https://github.com/storytold/photocraft/pull/181
    • Move/Free Transform modifier keys (#90); sharp full-resolution transform preview (#91) by @echelon in https://github.com/storytold/photocraft/pull/183
    • CJK UI font fallback: Simplified/Traditional Chinese and Korean, lazily loaded in locale order (#149) by @echelon in https://github.com/storytold/photocraft/pull/185
    • Layers mask thumbnails + chains; Channels/Paths temporary rows and footers (#153, #154) by @echelon in https://github.com/storytold/photocraft/pull/191
    • GPU compositor: paged residents and effect maps, so 20k+ documents refresh on the GPU (#49) by @echelon in https://github.com/storytold/photocraft/pull/187
    • Properties: uniform sections, per-kind Quick Actions, full-width controls (#155) by @echelon in https://github.com/storytold/photocraft/pull/192
    • PSD corpus: psd-tools set (pinned, verified), an oracle for every file, and the fixes it found by @echelon in https://github.com/storytold/photocraft/pull/195
    • Tool feedback: selection-mode cursor badges, scrubby zoom, contrasting outlines, Shift lines by @echelon in https://github.com/storytold/photocraft/pull/188
    • PSD fidelity: 16/32-bit colour modes, Lab, Levels, Exposure, Dissolve oracle (corpus 133 → 140, psd-tools 212 → 222) by @echelon in https://github.com/storytold/photocraft/pull/202
    • Fix tests on FreeBSD with RADV by @mekanix in https://github.com/storytold/photocraft/pull/194
    • fix(clipboard): use the wayland clipboard for images by @nuIIpointerexception in https://github.com/storytold/photocraft/pull/222
    • FreeBSD: build and test the workspace in a FreeBSD VM by @echelon in https://github.com/storytold/photocraft/pull/223
    • Fix automatic UI scaling on 4K monitors by @john8675309 in https://github.com/storytold/photocraft/pull/225
    • FreeBSD: serialise canvas GPU tests, CI template, RAM detection, CJK font paths by @echelon in https://github.com/storytold/photocraft/pull/227
    • Title bar: never draw the window title over the menus or controls by @echelon in https://github.com/storytold/photocraft/pull/241
    • Packaging: Linux runtime deps + start-up library check (#201); wasm 26.3 -> 18.8 MiB (#198) by @echelon in https://github.com/storytold/photocraft/pull/237
    • Fix live brush preview drawing a polygon (#189) by @echelon in https://github.com/storytold/photocraft/pull/240
    • PSD effects fidelity: spread metric, emboss, gradient geometry, text gamma (113 -> 118 oracle passes) by @echelon in https://github.com/storytold/photocraft/pull/224
    • Scorecard: cargo xtask perf + scorecard, budgets, checklists, nightly perf (#221) by @echelon in https://github.com/storytold/photocraft/pull/239
    • Layout documents: fix GPU device loss, live Move tool, local damage, no per-frame work (#125, #128) by @echelon in https://github.com/storytold/photocraft/pull/226
    • PSD export: write tagged blocks other readers can parse (#200) by @echelon in https://github.com/storytold/photocraft/pull/236
    • CR2: measure the colour filter row phase instead of assuming RGGB (#193) by @echelon in https://github.com/storytold/photocraft/pull/244
    • Atomic saves: one crash-safe atomic_write for every document write by @echelon in https://github.com/storytold/photocraft/pull/230
    • Preferences: wire tooltips, Home screen, recent files; hide what nothing reads by @echelon in https://github.com/storytold/photocraft/pull/245
    • Eraser on locked layers: no lock-out from the simple lock button; Stroke Path erases to the background colour (#76) by @echelon in https://github.com/storytold/photocraft/pull/229
    • Retouch tools paint the mask/channel target; Sample All Layers for Blur/Sharpen/Smudge; premultiplied Smudge (#207) by @echelon in https://github.com/storytold/photocraft/pull/234
    • Free Transform: selection moves only its part of a linked mask; masked preview; target masks and channels (#205) by @echelon in https://github.com/storytold/photocraft/pull/242
    • Vertical type (tategaki): lay out, render, edit and round-trip (#199) by @echelon in https://github.com/storytold/photocraft/pull/246
    • PSD stroke effects: outlines of filled shapes, vector stroke above interior effects, joined subpaths by @echelon in https://github.com/storytold/photocraft/pull/233
    • Live gradients: Gradient tool makes editable Gradient Fill layers (on-canvas handles, stops, midpoints) + Classic mode (#180) by @echelon in https://github.com/storytold/photocraft/pull/197
    • Marquee: Shift squares, Alt draws from the centre, live W × H readout (#208) by @echelon in https://github.com/storytold/photocraft/pull/247
    • GPU: crash-safe startup and device-loss fallback (#243, #4) by @echelon in https://github.com/storytold/photocraft/pull/252
    • Text: deterministic font family order; hide private system families (fixes a flaky test) by @echelon in https://github.com/storytold/photocraft/pull/264
    • Photoshop oracles via storytold/photocraft-corpus: pinned corpora, corpus feature, test-corpus, CI job by @echelon in https://github.com/storytold/photocraft/pull/190
    • Masks: Alt-click to view mask, Cmd-click vector mask to select, vector-mask target brackets (#196) by @echelon in https://github.com/storytold/photocraft/pull/256
    • Stylus pressure, tilt, rotation and eraser on macOS and X11 by @echelon in https://github.com/storytold/photocraft/pull/255
    • Fix Windows MSI advertised shortcut icons by @CQMHV in https://github.com/storytold/photocraft/pull/238
    • Windows taskbar icon: .exe icon id for the MSI shortcut + icon regression tests (#248) by @echelon in https://github.com/storytold/photocraft/pull/269
    • Colours: handle non-hex Unicode values without an internal error by @storybored379 in https://github.com/storytold/photocraft/pull/261
    • Align the CJK fallback font's baseline with Latin text by @kntrttm in https://github.com/storytold/photocraft/pull/260
    • UI: platform shortcut notation in every label and tooltip (#251) by @tiredIsa in https://github.com/storytold/photocraft/pull/262
    • New Document: a typed Width/Height reaches Create (#254) by @echelon in https://github.com/storytold/photocraft/pull/270
    • Menus are as tall as their items; scroll only when the window is too short (#235) by @echelon in https://github.com/storytold/photocraft/pull/272
    • Portable mode: keep settings beside the exe in the Windows portable zip (#228) by @echelon in https://github.com/storytold/photocraft/pull/267
    • Brush Settings for every brush: options-bar toggle and real preset picker (#258) by @echelon in https://github.com/storytold/photocraft/pull/268
    • Ctrl+Alt-drag resizes the brush on the canvas (#231) by @echelon in https://github.com/storytold/photocraft/pull/271
    • Shift rubber band: preview the straight line before the click (#257) by @echelon in https://github.com/storytold/photocraft/pull/273
    • Selection drag previews: regression tests for #253 (visible mid-drag, 1x and 2x) by @echelon in https://github.com/storytold/photocraft/pull/274
    • Shortcuts: rebindable fill keys, D/X and held temporary tools (#249) by @echelon in https://github.com/storytold/photocraft/pull/275
    • PSD manual and optical kerning: import, export, render, edit (#206) by @echelon in https://github.com/storytold/photocraft/pull/259
    • Localise the UI: i18n foundation and a Japanese catalog (menus, dialogs, panels) by @kntrttm in https://github.com/storytold/photocraft/pull/169
    • Pencil tool, Edit › Fill… dialog and "Rasterize?" prompt (#213) by @echelon in https://github.com/storytold/photocraft/pull/279
    • Fast Select › Modify › Smooth and Feather (part of #211) by @echelon in https://github.com/storytold/photocraft/pull/280
    • Compositor: effect maps never block inside parallel tiles (fixes #276 deadlock) by @echelon in https://github.com/storytold/photocraft/pull/281
    • FreeBSD release tarball and README platform lines by @echelon in https://github.com/storytold/photocraft/pull/284
    • fix: forward document index in bridge inspection by @kuishou68 in https://github.com/storytold/photocraft/pull/287
    • Marquee: stop the selection at the canvas edge by @Multipad-cyber in https://github.com/storytold/photocraft/pull/263
    • Background layer: double-click, masks and cut behave like Photoshop by @Multipad-cyber in https://github.com/storytold/photocraft/pull/266
    • i18n: add Simplified Chinese localization by @CQMHV in https://github.com/storytold/photocraft/pull/282
    • Enable dictionary segmentation for Japanese type by @midasdf in https://github.com/storytold/photocraft/pull/250
    • Smart Objects and Smart Filters survive PSD save and open by @echelon in https://github.com/storytold/photocraft/pull/288
    • Apply EXIF orientation on open, write Orientation = 1 on export (#285) by @echelon in https://github.com/storytold/photocraft/pull/318
    • PSD export: 32-bit files open in Photoshop (HDR toning Color Mode Data, #291) by @echelon in https://github.com/storytold/photocraft/pull/327
    • Windows on ARM64: release builds, PE header check, install test on ARM64 hardware by @echelon in https://github.com/storytold/photocraft/pull/333
    • Fix preference usage scanning on CRLF checkouts by @CQMHV in https://github.com/storytold/photocraft/pull/331
    • Windows: Alt-click clone hint and Ctrl+N channel errors (#251 follow-up) by @bommerts in https://github.com/storytold/photocraft/pull/336
    • Move tool: Auto-Select on by default; a click picks and drags the layer under the pointer (#296) by @echelon in https://github.com/storytold/photocraft/pull/330
    • Cmd+Enter (Ctrl+Enter) loads the path as a selection (#306) by @echelon in https://github.com/storytold/photocraft/pull/329
    • Layers panel: rename commits on click elsewhere, Enter or Tab; one at a time (#314) by @echelon in https://github.com/storytold/photocraft/pull/326
    • Keyboard Shortcuts: Ctrl+F records as Ctrl+F, not Ctrl+ControlLeft (#292) by @echelon in https://github.com/storytold/photocraft/pull/323
    • macOS CLI: verify the shipped CLI is Developer ID signed and notarized in the release workflow (#308) by @echelon in https://github.com/storytold/photocraft/pull/320
    • fix(ui): feed every pointer move per frame so fast strokes stay smooth by @leonaci in https://github.com/storytold/photocraft/pull/317
    • Fix logic Show the clone crosshair only while Option is held by @juansebsol in https://github.com/storytold/photocraft/pull/301
    • i18n: add Traditional Chinese (zh-hant) UI catalog by @WildfootW in https://github.com/storytold/photocraft/pull/302
    • Add a Spanish catalog (menus, dialogs, panels) by @Mawfyy in https://github.com/storytold/photocraft/pull/299
    • Localise the UI into Russian: a complete catalog and the missed tl! call sites by @tiredIsa in https://github.com/storytold/photocraft/pull/298
    • Preferences: add an Apply button by @CQMHV in https://github.com/storytold/photocraft/pull/325
    • i18n: add Czech (cs) UI translation by @petrleocompel in https://github.com/storytold/photocraft/pull/328
    • Menus: no menu or submenu covers the menu bar (#319) by @echelon in https://github.com/storytold/photocraft/pull/337
    • Menus stay above the taskbar; oversized windows open maximized (#315) by @echelon in https://github.com/storytold/photocraft/pull/343
    • Background jobs: engine job API, progress and cancel (part of #210) by @echelon in https://github.com/storytold/photocraft/pull/289
    • Background jobs in the app: progress, Cancel, open-as-job (part of #210) by @echelon in https://github.com/storytold/photocraft/pull/373
    • Harden EXIF orientation: limits after rotation, fallible allocation, strict IFD parsing by @echelon in https://github.com/storytold/photocraft/pull/345
    • Fonts: use craft-fonts as an optional build input; move the Japanese fonts out by @echelon in https://github.com/storytold/photocraft/pull/353
    • Stamp Visible (Cmd+Alt+Shift+E) and Stamp Down; Alt+Merge keeps the originals (#217) by @echelon in https://github.com/storytold/photocraft/pull/356
    • Right-click on the canvas lists the layers under the pointer (#307) by @echelon in https://github.com/storytold/photocraft/pull/360
    • Canvas scrollbars, and Preferences > Tools > Overscroll works (#300) by @echelon in https://github.com/storytold/photocraft/pull/367
    • Alt+right-drag resizes the brush and changes its hardness (#297) by @echelon in https://github.com/storytold/photocraft/pull/370
    • Alt+scroll zooms the canvas in 5% steps around the pointer (#293) by @echelon in https://github.com/storytold/photocraft/pull/371
    • ui.set: reject unknown fields; the theme error names all five themes (#412, #413) by @bflatastic in https://github.com/storytold/photocraft/pull/437
    • serve: methods lists jobs.list and jobs.cancel (#414) by @bflatastic in https://github.com/storytold/photocraft/pull/438
    • MCP command_batch and serve batch honour each step's wait (#415) by @bflatastic in https://github.com/storytold/photocraft/pull/439
    • Headless saves without path never flatten over the opened file (#416) by @bflatastic in https://github.com/storytold/photocraft/pull/447
    • Alt-click with the Brush, Pencil, Gradient or Paint Bucket samples a colour (#417) by @bflatastic in https://github.com/storytold/photocraft/pull/450
    • Layers panel: double-click beside a layer's name opens Layer Style (#350) by @bflatastic in https://github.com/storytold/photocraft/pull/452
    • Batch runs report inputs that share an output name instead of overwriting (#420, #422) by @bflatastic in https://github.com/storytold/photocraft/pull/448
    • New from Clipboard, and Paste with nothing open makes a document (#368) by @bflatastic in https://github.com/storytold/photocraft/pull/458
    • CLI: unknown flags are usage errors, <subcommand> --help prints usage, usage lists --quality (#421, #423) by @bflatastic in https://github.com/storytold/photocraft/pull/460
    • Liquify remembers its brush settings between uses and launches (#418) by @bflatastic in https://github.com/storytold/photocraft/pull/461
    • The main window opens centred on the screen (#419) by @bflatastic in https://github.com/storytold/photocraft/pull/462
    • Keyboard layer navigation: Alt+[ / Alt+] / Alt+, / Alt+. and Shift to add (part of #352) by @bflatastic in https://github.com/storytold/photocraft/pull/470
    • Transform Again on a Copy (Cmd+Alt+Shift+T): step and repeat (part of #352) by @bflatastic in https://github.com/storytold/photocraft/pull/474
    • Number keys set opacity, Shift+[ / Shift+] step hardness, Shift+Cmd+A opens Camera Raw (part of #352) by @bflatastic in https://github.com/storytold/photocraft/pull/473
    • Export: TGA in Save As and Export As (#363) by @Pedroj-64 in https://github.com/storytold/photocraft/pull/377
    • Docs and MCP schema: use the real Gaussian Blur id (#378) by @floflo777 in https://github.com/storytold/photocraft/pull/390
    • Image Size shows the one-pixel minimum it applies (#441) by @HEOJUNFO in https://github.com/storytold/photocraft/pull/468
    • prefs.reset resets a single colorSettings key (#445) by @HEOJUNFO in https://github.com/storytold/photocraft/pull/467
    • Content-Aware Scale: enlarging a 1 px wide or tall layer no longer panics by @Ar-maan05 in https://github.com/storytold/photocraft/pull/387
    • Build desktop app by default (#392) by @agorevski in https://github.com/storytold/photocraft/pull/425
    • fix(engine): use wasm-safe timing for Liquify by @naumanAhmed3 in https://github.com/storytold/photocraft/pull/393
    • Profile mismatch: compare profiles by colour, not bytes (sRGB vs sRGB prompt) by @ljkx in https://github.com/storytold/photocraft/pull/394
    • Type: dragging a paragraph box handle resizes the box (#351) by @Pedroj-64 in https://github.com/storytold/photocraft/pull/376
    • docs: correct VectorCraft sibling name by @agorevski in https://github.com/storytold/photocraft/pull/429
    • Free Transform a Copy (Cmd+Alt+T); Esc takes the copy back (part of #352) by @bflatastic in https://github.com/storytold/photocraft/pull/482
    • Raise rust-version to 1.95, the minimum egui 0.36 needs by @carterwsmith in https://github.com/storytold/photocraft/pull/471
    • docs: add star history chart to README by @coygeek in https://github.com/storytold/photocraft/pull/469
    • Move drag reveals a larger-than-canvas layer's off-canvas pixels by @sommerper in https://github.com/storytold/photocraft/pull/526
    • Spanish: add missing tool, filter and path translations by @neversaynv3r in https://github.com/storytold/photocraft/pull/488
    • Dialogs keep their top-left when their content resizes by @sommerper in https://github.com/storytold/photocraft/pull/487
    • PSD export selects PSB above size limit (#212) by @agorevski in https://github.com/storytold/photocraft/pull/431
    • 32-bit documents: Exposure works on the stored linear values by @floflo777 in https://github.com/storytold/photocraft/pull/400
    • Ctrl+Insert copies and Shift+Insert pastes on Linux; Shift+Insert pastes images on Windows by @sommerper in https://github.com/storytold/photocraft/pull/531
    • Docs: roadmap, scorecard and README after the 2026-10-07 fixes by @bflatastic in https://github.com/storytold/photocraft/pull/538
    • CLI batch: recorded-action steps, --format .ext, strict --quality, refuse --out = --in (#489, #490, #491, #492) by @bflatastic in https://github.com/storytold/photocraft/pull/545
    • Gradients honour explicit transparency stops; smart filter commands accept an explicit layer target (#465, #466) by @bflatastic in https://github.com/storytold/photocraft/pull/544
    • Recovered documents keep their recovery data until saved or closed (#444) by @bflatastic in https://github.com/storytold/photocraft/pull/549
    • History: tool and preset names, Frame from Layers as one step, undo/redo restore the targeted layers (#513, #528, #446, #496, #495) by @bflatastic in https://github.com/storytold/photocraft/pull/551
    • Shortcuts run in the order pressed; Shift+Delete fills on Windows; colour pickers stay put while dragging (#440, #530, #534) by @bflatastic in https://github.com/storytold/photocraft/pull/552
    • Control channel: menu/dialog requests wait for their job; right-click menus at the point; MCP ui_pointer button (#510, #511, #512, #514) by @bflatastic in https://github.com/storytold/photocraft/pull/548
    • Automation: non-object params rejected; headless sees finished jobs; serve stdio survives a bad line; MCP batch keeps results (#503, #504, #505, #506, #529) by @bflatastic in https://github.com/storytold/photocraft/pull/546
    • Formats: deep .pcraft groups reopen; zero-size PSD rejected; JPEG mattes over white; no-ICC formats get sRGB (#517, #519, #521, #522) by @bflatastic in https://github.com/storytold/photocraft/pull/555
    • Preferences merge with other tabs/windows and retry failed saves; web startup shows a Reload hint (#475, #476, #477) by @bflatastic in https://github.com/storytold/photocraft/pull/561
    • FreeBSD CI: run the GPU integration tests one at a time by @bflatastic in https://github.com/storytold/photocraft/pull/576
    • Import warns when it keeps only the first frame or page, or a JPEG ends early (#518, #523) by @bflatastic in https://github.com/storytold/photocraft/pull/563
    • Linux: AppImage update information and a .zsync beside it (#349) by @ianswope in https://github.com/storytold/photocraft/pull/399
    • Color Picker and Color panel fields accept typed values by @carterwsmith in https://github.com/storytold/photocraft/pull/485
    • Release 0.3.0 by @bflatastic in https://github.com/storytold/photocraft/pull/577

    New Contributors

    • @MikeeI made their first contribution in https://github.com/storytold/photocraft/pull/109
    • @tiredIsa made their first contribution in https://github.com/storytold/photocraft/pull/102
    • @Ni-zav made their first contribution in https://github.com/storytold/photocraft/pull/99
    • @kntrttm made their first contribution in https://github.com/storytold/photocraft/pull/101
    • @kevin9327 made their first contribution in https://github.com/storytold/photocraft/pull/159
    • @mekanix made their first contribution in https://github.com/storytold/photocraft/pull/194
    • @nuIIpointerexception made their first contribution in https://github.com/storytold/photocraft/pull/222
    • @john8675309 made their first contribution in https://github.com/storytold/photocraft/pull/225
    • @CQMHV made their first contribution in https://github.com/storytold/photocraft/pull/238
    • @kuishou68 made their first contribution in https://github.com/storytold/photocraft/pull/287
    • @midasdf made their first contribution in https://github.com/storytold/photocraft/pull/250
    • @bommerts made their first contribution in https://github.com/storytold/photocraft/pull/336
    • @leonaci made their first contribution in https://github.com/storytold/photocraft/pull/317
    • @juansebsol made their first contribution in https://github.com/storytold/photocraft/pull/301
    • @WildfootW made their first contribution in https://github.com/storytold/photocraft/pull/302
    • @Mawfyy made their first contribution in https://github.com/storytold/photocraft/pull/299
    • @petrleocompel made their first contribution in https://github.com/storytold/photocraft/pull/328
    • @bflatastic made their first contribution in https://github.com/storytold/photocraft/pull/437
    • @Pedroj-64 made their first contribution in https://github.com/storytold/photocraft/pull/377
    • @floflo777 made their first contribution in https://github.com/storytold/photocraft/pull/390
    • @HEOJUNFO made their first contribution in https://github.com/storytold/photocraft/pull/468
    • @Ar-maan05 made their first contribution in https://github.com/storytold/photocraft/pull/387
    • @naumanAhmed3 made their first contribution in https://github.com/storytold/photocraft/pull/393
    • @ljkx made their first contribution in https://github.com/storytold/photocraft/pull/394
    • @carterwsmith made their first contribution in https://github.com/storytold/photocraft/pull/471
    • @coygeek made their first contribution in https://github.com/storytold/photocraft/pull/469
    • @neversaynv3r made their first contribution in https://github.com/storytold/photocraft/pull/488
    • @ianswope made their first contribution in https://github.com/storytold/photocraft/pull/399

    Full Changelog: https://github.com/storytold/photocraft/compare/v0.2.0...v0.3.0

    Downloads
    • photocraft-0.3.0-freebsd-x86_64.tar.gz
      62 MiB
      2026-10-11 06:34:12 -05:00
    • photocraft-0.3.0-linux-aarch64.AppImage
      57 MiB
      2026-10-11 06:34:14 -05:00
    • photocraft-0.3.0-linux-aarch64.AppImage.zsync
      201 KiB
      2026-10-11 06:34:15 -05:00
    • photocraft-0.3.0-linux-aarch64.deb
      61 MiB
      2026-10-11 06:34:17 -05:00
    • photocraft-0.3.0-linux-aarch64.flatpak
      44 MiB
      2026-10-11 06:34:19 -05:00
    • photocraft-0.3.0-linux-aarch64.rpm
      61 MiB
      2026-10-11 06:34:22 -05:00
    • photocraft-0.3.0-linux-aarch64.tar.gz
      60 MiB
      2026-10-11 06:34:24 -05:00
    • photocraft-0.3.0-linux-x86_64.AppImage
      59 MiB
      2026-10-11 06:34:27 -05:00
    • photocraft-0.3.0-linux-x86_64.AppImage.zsync
      208 KiB
      2026-10-11 06:34:28 -05:00
    • photocraft-0.3.0-linux-x86_64.deb
      63 MiB
      2026-10-11 06:34:31 -05:00
    • photocraft-0.3.0-linux-x86_64.flatpak
      47 MiB
      2026-10-11 06:34:33 -05:00
    • photocraft-0.3.0-linux-x86_64.rpm
      63 MiB
      2026-10-11 06:34:37 -05:00
    • photocraft-0.3.0-linux-x86_64.tar.gz
      62 MiB
      2026-10-11 06:34:40 -05:00
    • photocraft-0.3.0-macos-universal.dmg
      68 MiB
      2026-10-11 06:34:42 -05:00
    • photocraft-0.3.0-windows-arm64.msi
      49 MiB
      2026-10-11 06:34:46 -05:00
    • photocraft-0.3.0-windows-arm64-portable.zip
      60 MiB
      2026-10-11 06:34:44 -05:00
    • photocraft-0.3.0-windows-x64.msi
      51 MiB
      2026-10-11 06:34:50 -05:00
    • photocraft-0.3.0-windows-x64-portable.zip
      62 MiB
      2026-10-11 06:34:49 -05:00
    • photocraft-0.3.0-windows-x86.msi
      50 MiB
      2026-10-11 06:34:56 -05:00
    • photocraft-0.3.0-windows-x86-portable.zip
      60 MiB
      2026-10-11 06:34:54 -05:00
    • photocraft-cli-0.3.0-macos-universal.zip
      53 MiB
      2026-10-11 06:34:57 -05:00
    • photocraft-web-0.3.0.zip
      11 MiB
      2026-10-11 06:34:58 -05:00
    • SHA256SUMS.txt
      2.2 KiB
      2026-10-11 06:34:59 -05:00
    • Source Code (ZIP)
    • Source Code (TAR.GZ)
  • v0.2.0 ad86321738
    Compare

    PhotoCraft v0.2.0 Stable

    dean released this 2026-10-04 23:21:13 -05:00 | 2590 commits to main since this release

    📅 Originally published on GitHub: Mon, 05 Oct 2026 04:42:21 GMT
    🏷️ Git tag created: Mon, 05 Oct 2026 04:21:13 GMT

    Upgrade notes

    • Automation (MCP / control channel) now needs explicit file roots. File access from automation clients is limited to folders you grant with --automation-read-root <dir> / --automation-write-root <dir> (or PHOTOCRAFT_AUTOMATION_READ_ROOT / PHOTOCRAFT_AUTOMATION_WRITE_ROOT), and paths must be relative to them. Without roots, automation file operations fail closed. The desktop control channel also requires the per-launch token printed at startup. Interactive file dialogs and one-shot CLI commands are unaffected.
    • Camera RAW: DNG, Canon CR2, Sony ARW (lossless and compressed), Panasonic RW2 and uncompressed Olympus ORF now decode. Nikon's compressed NEF and other formats still open their embedded full-size preview for now.

    What's Changed

    • Indexed Color: no panic when forced colours fill the palette by @storybored379 in https://github.com/storytold/photocraft/pull/17
    • MCP: a panicking command no longer wedges the headless session by @storybored379 in https://github.com/storytold/photocraft/pull/16
    • Layers: Add Layer Mask uses the active selection by @Multipad-cyber in https://github.com/storytold/photocraft/pull/11
    • feat(ui): add Exit to the File menu by @torstfugl in https://github.com/storytold/photocraft/pull/10
    • fix(ui): give menu bar labels more breathing room by @torstfugl in https://github.com/storytold/photocraft/pull/8
    • Eraser on Background layer paints the background colour (fixes #15) by @echelon in https://github.com/storytold/photocraft/pull/19
    • Open links in the system browser via a platform service (fixes #14) by @echelon in https://github.com/storytold/photocraft/pull/20
    • Test: Image Rotation rotates every layer (re #1) by @echelon in https://github.com/storytold/photocraft/pull/21
    • GPU: Rgba16Float fallback when Rgba32Float isn't renderable (fixes #7) by @echelon in https://github.com/storytold/photocraft/pull/22
    • Add File > Open Recent (fixes #5) by @echelon in https://github.com/storytold/photocraft/pull/23
    • Licensing: MIT OR Apache-2.0 files, NOTICE, ArtCraft brand terms, attribution by @echelon in https://github.com/storytold/photocraft/pull/32
    • cms tests: system_profiles skips malformed named-colour profiles by @storybored379 in https://github.com/storytold/photocraft/pull/24
    • Codecs: camera raw files fail with a clear "not supported" error by @storybored379 in https://github.com/storytold/photocraft/pull/25
    • Filter › Other › Minimum / Maximum: Preserve Roundness by @storybored379 in https://github.com/storytold/photocraft/pull/27
    • Layer Style › Blending Options › Blend If (render, PSD round trip, command) by @storybored379 in https://github.com/storytold/photocraft/pull/26
    • Dialogs can be moved by dragging the title bar by @sommerper in https://github.com/storytold/photocraft/pull/29
    • Layer Style dialog previews effects live on the canvas by @sommerper in https://github.com/storytold/photocraft/pull/30
    • Never crash: steering rules, clippy.toml, forbid unsafe by @echelon in https://github.com/storytold/photocraft/pull/33
    • CI: green on all platforms (rustfmt config, clippy 1.99, FXC-safe adjust shader) by @echelon in https://github.com/storytold/photocraft/pull/37
    • feat(ui): confirm before discarding unsaved changes by @torstfugl in https://github.com/storytold/photocraft/pull/31
    • docs: add mdBook and security documentation foundation by @Gh0stlyKn1ght in https://github.com/storytold/photocraft/pull/35
    • Never crash: psd, codecs, format, io are panic-free by @echelon in https://github.com/storytold/photocraft/pull/34
    • Never crash: cms is panic-free by @echelon in https://github.com/storytold/photocraft/pull/36
    • Never crash: text, color, doc, paint, geom, raster, compose, vector by @echelon in https://github.com/storytold/photocraft/pull/39
    • Never crash: automation (MCP/RPC) and photocraft-cli are panic-free by @echelon in https://github.com/storytold/photocraft/pull/38
    • Never crash: algo pyramids and ui-egui parity without expect by @echelon in https://github.com/storytold/photocraft/pull/40
    • Never crash: the engine is panic-free by @echelon in https://github.com/storytold/photocraft/pull/54
    • Never crash: the GPU compositor is panic-free by @echelon in https://github.com/storytold/photocraft/pull/55
    • Never crash: algo is panic-free by @echelon in https://github.com/storytold/photocraft/pull/56
    • Never crash: ui-egui is panic-free by @echelon in https://github.com/storytold/photocraft/pull/57
    • Never crash: last-resort guard for commands and file import/export by @echelon in https://github.com/storytold/photocraft/pull/58
    • Never crash: ops denies panicking shortcuts by @echelon in https://github.com/storytold/photocraft/pull/59
    • security: authenticate control channels and bound transport resources by @Gh0stlyKn1ght in https://github.com/storytold/photocraft/pull/61
    • PSD round trip: read/write Vibrance, Color Balance, B&W, Photo Filter, Channel Mixer; corpus floors by @echelon in https://github.com/storytold/photocraft/pull/60
    • UI input: Ctrl+'+' zooms the canvas, dialogs don't cancel on outside click, menu hover-switch by @echelon in https://github.com/storytold/photocraft/pull/62
    • macOS: open files from Finder/Open With/Dock; file path, recent, warnings and .pcraft fixes by @echelon in https://github.com/storytold/photocraft/pull/63
    • Camera raw: clean-room pure-Rust decoder (DNG, CR2, TIFF/EP raws) with develop pipeline by @echelon in https://github.com/storytold/photocraft/pull/65
    • Colour-managed canvas: document profile -> monitor (P3/Adobe RGB/ProPhoto/Gray/CMYK), linear EXR, embedded CMYK by @echelon in https://github.com/storytold/photocraft/pull/66
    • Sandboxed WebAssembly plug-ins: photocraft-plugins (wasmi), plugin.* commands, Filter › Plug-ins by @echelon in https://github.com/storytold/photocraft/pull/67
    • Image › Adjustments overhaul: full params, one editor per kind, live-preview dialogs, Curves point deletion by @echelon in https://github.com/storytold/photocraft/pull/68
    • Magic Eraser and Background Eraser tools; canvas rotation/flip/size move vector geometry by @echelon in https://github.com/storytold/photocraft/pull/70
    • Photoshop brushes: .abr import, stylus pressure/tilt, 36 grouped presets, .grd import by @echelon in https://github.com/storytold/photocraft/pull/74
    • security: constrain automation file access to granted roots by @Gh0stlyKn1ght in https://github.com/storytold/photocraft/pull/72
    • Large images: adapter texture limits, banded compositing/export, proxy thumbnails, history byte budget by @echelon in https://github.com/storytold/photocraft/pull/71
    • fix(ui): brush and eraser show the real stroke while drawing by @sommerper in https://github.com/storytold/photocraft/pull/64
    • Select › Color Range: the dialog, Select presets, eyedroppers, Localized Color Clusters, Invert by @storybored379 in https://github.com/storytold/photocraft/pull/80
    • Persist brush presets (user + imported .abr) in a size-aware preset store by @echelon in https://github.com/storytold/photocraft/pull/82
    • raw: Sony cRAW, Panasonic RW2 (RawFormat 5), uncompressed ORF + ORF previews; NEF blocked (clean-room) by @echelon in https://github.com/storytold/photocraft/pull/83
    • GPU canvas: Rgba16Float display texture for 16/32-bit documents (#46) by @echelon in https://github.com/storytold/photocraft/pull/84
    • Adjustment dialogs: GPU live preview through a clipped adjustment layer (#77) by @echelon in https://github.com/storytold/photocraft/pull/85
    • Painting: right-click opens the brush picker (or erases), real Smoothing, eraser-on-Background tests by @echelon in https://github.com/storytold/photocraft/pull/86
    • Release 0.2.0 by @echelon in https://github.com/storytold/photocraft/pull/113

    New Contributors

    • @storybored379 made their first contribution in https://github.com/storytold/photocraft/pull/17
    • @Multipad-cyber made their first contribution in https://github.com/storytold/photocraft/pull/11
    • @torstfugl made their first contribution in https://github.com/storytold/photocraft/pull/10
    • @echelon made their first contribution in https://github.com/storytold/photocraft/pull/19
    • @sommerper made their first contribution in https://github.com/storytold/photocraft/pull/29
    • @Gh0stlyKn1ght made their first contribution in https://github.com/storytold/photocraft/pull/35

    Full Changelog: https://github.com/storytold/photocraft/compare/v0.1.1...v0.2.0

    Downloads
    • photocraft-0.2.0-linux-aarch64.AppImage
      25 MiB
      2026-10-11 06:35:01 -05:00
    • photocraft-0.2.0-linux-aarch64.deb
      27 MiB
      2026-10-11 06:35:02 -05:00
    • photocraft-0.2.0-linux-aarch64.rpm
      27 MiB
      2026-10-11 06:35:04 -05:00
    • photocraft-0.2.0-linux-aarch64.tar.gz
      26 MiB
      2026-10-11 06:35:06 -05:00
    • photocraft-0.2.0-linux-x86_64.AppImage
      27 MiB
      2026-10-11 06:35:07 -05:00
    • photocraft-0.2.0-linux-x86_64.deb
      29 MiB
      2026-10-11 06:35:08 -05:00
    • photocraft-0.2.0-linux-x86_64.rpm
      29 MiB
      2026-10-11 06:35:10 -05:00
    • photocraft-0.2.0-linux-x86_64.tar.gz
      28 MiB
      2026-10-11 06:35:11 -05:00
    • photocraft-0.2.0-macos-universal.dmg
      34 MiB
      2026-10-11 06:35:12 -05:00
    • photocraft-0.2.0-windows-x64.msi
      22 MiB
      2026-10-11 06:35:14 -05:00
    • photocraft-0.2.0-windows-x64-portable.zip
      28 MiB
      2026-10-11 06:35:13 -05:00
    • photocraft-0.2.0-windows-x86.msi
      21 MiB
      2026-10-11 06:35:16 -05:00
    • photocraft-0.2.0-windows-x86-portable.zip
      27 MiB
      2026-10-11 06:35:15 -05:00
    • photocraft-cli-0.2.0-macos-universal.zip
      19 MiB
      2026-10-11 06:35:17 -05:00
    • photocraft-web-0.2.0.zip
      10 MiB
      2026-10-11 06:35:17 -05:00
    • SHA256SUMS.txt
      1.5 KiB
      2026-10-11 06:35:18 -05:00
    • Source Code (ZIP)
    • Source Code (TAR.GZ)
  • v0.1.1 7750529bbb
    Compare

    PhotoCraft v0.1.1 Stable

    dean released this 2026-10-03 08:55:27 -05:00 | 2660 commits to main since this release

    📅 Originally published on GitHub: Sat, 03 Oct 2026 14:24:16 GMT
    🏷️ Git tag created: Sat, 03 Oct 2026 13:55:27 GMT

    Full Changelog: https://github.com/storytold/photocraft/compare/v0.1.0...v0.1.1

    Downloads
    • photocraft-0.1.1-linux-aarch64.AppImage
      23 MiB
      2026-10-11 06:35:22 -05:00
    • photocraft-0.1.1-linux-aarch64.deb
      25 MiB
      2026-10-11 06:35:23 -05:00
    • photocraft-0.1.1-linux-aarch64.rpm
      25 MiB
      2026-10-11 06:35:24 -05:00
    • photocraft-0.1.1-linux-aarch64.tar.gz
      24 MiB
      2026-10-11 06:35:25 -05:00
    • photocraft-0.1.1-linux-x86_64.AppImage
      25 MiB
      2026-10-11 06:35:26 -05:00
    • photocraft-0.1.1-linux-x86_64.deb
      27 MiB
      2026-10-11 06:35:27 -05:00
    • photocraft-0.1.1-linux-x86_64.rpm
      27 MiB
      2026-10-11 06:35:27 -05:00
    • photocraft-0.1.1-linux-x86_64.tar.gz
      26 MiB
      2026-10-11 06:35:28 -05:00
    • photocraft-0.1.1-macos-universal.dmg
      32 MiB
      2026-10-11 06:35:30 -05:00
    • photocraft-0.1.1-windows-x64.msi
      20 MiB
      2026-10-11 06:35:32 -05:00
    • photocraft-0.1.1-windows-x64-portable.zip
      26 MiB
      2026-10-11 06:35:31 -05:00
    • photocraft-0.1.1-windows-x86.msi
      19 MiB
      2026-10-11 06:35:34 -05:00
    • photocraft-0.1.1-windows-x86-portable.zip
      24 MiB
      2026-10-11 06:35:33 -05:00
    • photocraft-cli-0.1.1-macos-universal.zip
      18 MiB
      2026-10-11 06:35:35 -05:00
    • photocraft-web-0.1.1.zip
      9.6 MiB
      2026-10-11 06:35:36 -05:00
    • SHA256SUMS.txt
      1.5 KiB
      2026-10-11 06:35:36 -05:00
    • Source Code (ZIP)
    • Source Code (TAR.GZ)
  • v0.1.1-rc.5 c3bd22269f
    Compare

    PhotoCraft v0.1.1-rc.5 Stable

    dean released this 2026-10-02 12:47:49 -05:00 | 2689 commits to main since this release

    📅 Originally published on GitHub: Fri, 02 Oct 2026 22:30:31 GMT
    🏷️ Git tag created: Fri, 02 Oct 2026 17:47:49 GMT

    Full Changelog: https://github.com/storytold/photocraft/compare/v0.1.0...v0.1.1-rc.5

    Downloads
    • photocraft-0.1.1-rc.5-linux-aarch64.AppImage
      23 MiB
      2026-10-11 06:35:38 -05:00
    • photocraft-0.1.1-rc.5-linux-aarch64.deb
      25 MiB
      2026-10-11 06:35:39 -05:00
    • photocraft-0.1.1-rc.5-linux-aarch64.rpm
      25 MiB
      2026-10-11 06:35:40 -05:00
    • photocraft-0.1.1-rc.5-linux-aarch64.tar.gz
      24 MiB
      2026-10-11 06:35:41 -05:00
    • photocraft-0.1.1-rc.5-linux-x86_64.AppImage
      25 MiB
      2026-10-11 06:35:42 -05:00
    • photocraft-0.1.1-rc.5-linux-x86_64.deb
      26 MiB
      2026-10-11 06:35:44 -05:00
    • photocraft-0.1.1-rc.5-linux-x86_64.rpm
      26 MiB
      2026-10-11 06:35:45 -05:00
    • photocraft-0.1.1-rc.5-linux-x86_64.tar.gz
      26 MiB
      2026-10-11 06:35:46 -05:00
    • photocraft-0.1.1-rc.5-macos-universal.dmg
      31 MiB
      2026-10-11 06:35:48 -05:00
    • photocraft-0.1.1-rc.5-windows-x64.msi
      20 MiB
      2026-10-11 06:35:50 -05:00
    • photocraft-0.1.1-rc.5-windows-x64-portable.zip
      26 MiB
      2026-10-11 06:35:49 -05:00
    • photocraft-0.1.1-rc.5-windows-x86.msi
      19 MiB
      2026-10-11 06:35:52 -05:00
    • photocraft-0.1.1-rc.5-windows-x86-portable.zip
      24 MiB
      2026-10-11 06:35:51 -05:00
    • photocraft-cli-0.1.1-rc.5-macos-universal.zip
      17 MiB
      2026-10-11 06:35:53 -05:00
    • photocraft-web-0.1.1-rc.5.zip
      9.5 MiB
      2026-10-11 06:35:54 -05:00
    • SHA256SUMS.txt
      1.6 KiB
      2026-10-11 06:35:54 -05:00
    • Source Code (ZIP)
    • Source Code (TAR.GZ)
  • v0.1.1-rc.4 4eb75d6370
    Compare

    PhotoCraft v0.1.1-rc.4 Stable

    dean released this 2026-10-01 13:23:35 -05:00 | 2707 commits to main since this release

    📅 Originally published on GitHub: Fri, 02 Oct 2026 15:17:22 GMT
    🏷️ Git tag created: Thu, 01 Oct 2026 18:23:35 GMT

    Full Changelog: https://github.com/storytold/photocraft/commits/v0.1.1-rc.4

    Downloads
    • photocraft-0.1.1-rc.4-linux-aarch64.AppImage
      19 MiB
      2026-10-11 06:35:55 -05:00
    • photocraft-0.1.1-rc.4-linux-aarch64.deb
      21 MiB
      2026-10-11 06:35:57 -05:00
    • photocraft-0.1.1-rc.4-linux-aarch64.rpm
      21 MiB
      2026-10-11 06:35:58 -05:00
    • photocraft-0.1.1-rc.4-linux-aarch64.tar.gz
      20 MiB
      2026-10-11 06:35:59 -05:00
    • photocraft-0.1.1-rc.4-linux-x86_64.AppImage
      21 MiB
      2026-10-11 06:35:59 -05:00
    • photocraft-0.1.1-rc.4-linux-x86_64.deb
      22 MiB
      2026-10-11 06:36:00 -05:00
    • photocraft-0.1.1-rc.4-linux-x86_64.rpm
      22 MiB
      2026-10-11 06:36:01 -05:00
    • photocraft-0.1.1-rc.4-linux-x86_64.tar.gz
      22 MiB
      2026-10-11 06:36:02 -05:00
    • photocraft-0.1.1-rc.4-macos-universal.dmg
      26 MiB
      2026-10-11 06:36:03 -05:00
    • photocraft-0.1.1-rc.4-windows-x64.msi
      16 MiB
      2026-10-11 06:36:06 -05:00
    • photocraft-0.1.1-rc.4-windows-x64-portable.zip
      22 MiB
      2026-10-11 06:36:05 -05:00
    • photocraft-0.1.1-rc.4-windows-x64.wixpdb
      14 KiB
      2026-10-11 06:36:06 -05:00
    • photocraft-0.1.1-rc.4-windows-x86.msi
      15 MiB
      2026-10-11 06:36:10 -05:00
    • photocraft-0.1.1-rc.4-windows-x86-portable.zip
      20 MiB
      2026-10-11 06:36:07 -05:00
    • photocraft-0.1.1-rc.4-windows-x86.wixpdb
      14 KiB
      2026-10-11 06:36:10 -05:00
    • photocraft-cli-0.1.1-rc.4-macos-universal.zip
      14 MiB
      2026-10-11 06:36:11 -05:00
    • photocraft-web-0.1.1-rc.4.zip
      8.2 MiB
      2026-10-11 06:36:11 -05:00
    • SHA256SUMS.txt
      1.8 KiB
      2026-10-11 06:36:12 -05:00
    • Source Code (ZIP)
    • Source Code (TAR.GZ)
  • v0.1.0 4eb75d6370
    Compare

    PhotoCraft v0.1.0 Stable

    dean released this 2026-10-01 13:23:35 -05:00 | 2707 commits to main since this release

    📅 Originally published on GitHub: Fri, 02 Oct 2026 00:09:14 GMT
    🏷️ Git tag created: Thu, 01 Oct 2026 18:23:35 GMT

    Full Changelog: https://github.com/storytold/photocraft/commits/v0.1.0

    Downloads
    • photocraft-0.1.0-linux-aarch64.AppImage
      19 MiB
      2026-10-11 06:36:14 -05:00
    • photocraft-0.1.0-linux-aarch64.deb
      21 MiB
      2026-10-11 06:36:14 -05:00
    • photocraft-0.1.0-linux-aarch64.rpm
      21 MiB
      2026-10-11 06:36:15 -05:00
    • photocraft-0.1.0-linux-aarch64.tar.gz
      20 MiB
      2026-10-11 06:36:16 -05:00
    • photocraft-0.1.0-linux-x86_64.AppImage
      21 MiB
      2026-10-11 06:36:17 -05:00
    • photocraft-0.1.0-linux-x86_64.deb
      22 MiB
      2026-10-11 06:36:17 -05:00
    • photocraft-0.1.0-linux-x86_64.rpm
      22 MiB
      2026-10-11 06:36:18 -05:00
    • photocraft-0.1.0-linux-x86_64.tar.gz
      22 MiB
      2026-10-11 06:36:19 -05:00
    • photocraft-0.1.0-macos-universal.dmg
      26 MiB
      2026-10-11 06:36:20 -05:00
    • photocraft-0.1.0-windows-x64.msi
      16 MiB
      2026-10-11 06:36:22 -05:00
    • photocraft-0.1.0-windows-x64-portable.zip
      22 MiB
      2026-10-11 06:36:21 -05:00
    • photocraft-0.1.0-windows-x64.wixpdb
      14 KiB
      2026-10-11 06:36:23 -05:00
    • photocraft-0.1.0-windows-x86.msi
      15 MiB
      2026-10-11 06:36:24 -05:00
    • photocraft-0.1.0-windows-x86-portable.zip
      20 MiB
      2026-10-11 06:36:23 -05:00
    • photocraft-0.1.0-windows-x86.wixpdb
      14 KiB
      2026-10-11 06:36:25 -05:00
    • photocraft-cli-0.1.0-macos-universal.zip
      14 MiB
      2026-10-11 06:36:25 -05:00
    • photocraft-web-0.1.0.zip
      8.2 MiB
      2026-10-11 06:36:26 -05:00
    • SHA256SUMS.txt
      1.7 KiB
      2026-10-11 06:36:26 -05:00
    • Source Code (ZIP)
    • Source Code (TAR.GZ)
Powered by Gitea Version: 28.1.0 Page: 5951ms Template: 28ms
Auto
English
Bahasa Indonesia Deutsch English Español Français Gaeilge Italiano Latviešu Magyar nyelv Nederlands Polski Português de Portugal Português do Brasil Suomi Svenska Türkçe Čeština Ελληνικά Български Русский Українська فارسی മലയാളം 日本語 简体中文 繁體中文(台灣) 繁體中文(香港) 한국어
Licenses API