-
PhotoCraft v0.7.0 Stable
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 GMTWhat'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 v0.6.0 Stable
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 GMTWhat'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
.psdby @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 v0.5.0 Stable
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 GMTWhat'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 v0.3.0 Stable
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 GMTHighlights 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
.pcraftfiles reopen. photocraft-cli batchrefuses 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.
- Stricter, clearer parameter and flag errors, and
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_huntfuzzes every commandDistribution 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:
methodslists 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
pathnever 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> --helpprints 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
- Your work is safer:
-
PhotoCraft v0.2.0 Stable
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 GMTUpgrade 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>(orPHOTOCRAFT_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
- Automation (MCP / control channel) now needs explicit file roots. File access from automation clients is limited to folders you grant with
-
PhotoCraft v0.1.1 Stable
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 GMTFull Changelog: https://github.com/storytold/photocraft/compare/v0.1.0...v0.1.1
Downloads
-
PhotoCraft v0.1.1-rc.5 Stable
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 GMTFull Changelog: https://github.com/storytold/photocraft/compare/v0.1.0...v0.1.1-rc.5
Downloads
-
PhotoCraft v0.1.1-rc.4 Stable
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 GMTFull Changelog: https://github.com/storytold/photocraft/commits/v0.1.1-rc.4
Downloads
-
PhotoCraft v0.1.0 Stable
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 GMTFull Changelog: https://github.com/storytold/photocraft/commits/v0.1.0
Downloads
mirror of
https://github.com/storytold/photocraft.git
synced 2026-10-18 18:03:24 -05:00