photocraft Updates & Release Notes
10 updates curated from 1 source by the Releasebot Team. Last updated: Oct 13, 2026
- Oct 12, 2026
- Date parsed from source:Oct 12, 2026
- First seen by Releasebot:Oct 13, 2026
PhotoCraft v0.8.2
photocraft releases a major update with new creative tools, expanded Photoshop and file-format compatibility, and faster editing. Highlights include advanced selection, transform, text and color features, plus smoother performance, improved automation and broader localization.
What's Changed
Original source
Adopt shared docking while preserving panel controls and workspaces by @skylartaylor in #3097
GPU composite: reuse unchanged lower-stack chunks for property edits by @Elvis33LE in #1169
Design: bounded GPU stack prefix reuse for property edits by @Elvis33LE in #1164
feat(ui): allow disabling Studio canvas background dots by @Ni-zav in #2317
File Info shows Camera Data from EXIF/XMP (#2424) by @itrycodinganditsbad in #2692
fix(canvas): update Move transform-control cursors on first hover by @Ni-zav in #2887
Releasing a brush stroke no longer freezes: the commit takes the pixels the live stroke already drew (P32: 136 ms → 0.8 ms) by @tanish2k09 in #2131
fix(brush): interpolate pen pressure across Shift-click connecting strokes by @Ni-zav in #2890
fix(transform): commit Free Transform on an outside click by @Ni-zav in #2909
app.save: encode on the save worker, not the UI thread (#2488) by @ahmedhosnypro in #2517
fix(shortcuts): reject malformed bindings and correctly display Plus by @Ni-zav in #3006
Favorite themes from the appearance button's right-click menu by @luniiya in #2445
Render Video: animated GIFs keep their transparency (#3061) by @fabianghe in #3162
fix(type): exclude text inside hidden groups from automatic hit testing by @Ni-zav in #3173
Enhanced Controls: wire Zoom with Trackpad Pinch (#204) by @reynold-hu in #2577
Units & Rulers: wire the Type units preference (#204) by @reynold-hu in #2587
fix(type): use the correct line at soft-wrap caret boundaries by @Ni-zav in #3174
fix(masks): preserve off-canvas alpha in From Transparency by @Ni-zav in #3177
Rulers: keep tick marks and labels out of the origin corner by @arthurdeka in #2617
fix(psd): Improve interoperability and decoding by @reneleonhardt in #1955
fix(layers): remap linked-layer groups when copying between documents by @Ni-zav in #3178
Brush HUD: wire Vary Round Brush Hardness and Brush Preview Color (#204) by @reynold-hu in #2640
fix(history): preserve an empty layer selection across undo and redo by @Ni-zav in #3179
Auto-Align Layers: register focus and exposure brackets by intensity when there is nothing to match by @ragtux in #2065
Double-clicking a mask thumbnail in the Layers panel now opens that mask's settings by @Lyraedan in #2654
fix(layers): select Shift ranges in visible panel row order (#3041) by @Ni-zav in #3180
Auto-Blend Stack Images: fuse the merged layer per pyramid level by region energy, with halo control by @ragtux in #2044
fix(io): preserve group fill opacity in OpenRaster exports by @Ni-zav in #3181
Control channel: input methods reject bad params instead of using defaults (#2449) by @itrycodinganditsbad in #2656
fix(vector): pivot explicit path transforms on target layer (#3062) by @Ni-zav in #3183
General: wire Beep When Done for finished background jobs (#204) by @reynold-hu in #2658
fix(vector): preserve scaled live-line thickness during endpoint edits by @Ni-zav in #3184
fix(actions): avoid replaying Browse script edits twice by @Ni-zav in #3190
i18n test: scan past small test modules; translate what it was missing by @herzer in #2660
fix(masks): bake feathered coverage when applying a layer mask by @Ni-zav in #3191
Type: wire Font Preview Size for the font menu samples (#204) by @reynold-hu in #2668
fix(video): retain original footage for Restore Frame and Show Altered Video by @Ni-zav in #3192
Improve zoomed Liquify preview detail by @Elvis33LE in #2715
fix(compose): preserve Dissolve coverage for adjustments, styles and clipping by @Ni-zav in #3195
Color Replacement tool on the toolbar (#1045) by @itrycodinganditsbad in #2719
fix(shapes): preserve transformed outline on unchanged live geometry edits by @Ni-zav in #3197
Crop tool: New / Delete Crop Preset saves and removes user presets (#1919) by @davidmann4 in #2723
Test Move layer edges across bit depths and view modes by @Skyfuller1303 in #2738
fix(type): preserve formatting for trailing empty paragraphs by @Ni-zav in #3198
Keep custom crop ratio fields editable by @imSlicedBread in #3209
raw: fit non-DNG colour to the camera's embedded JPEG by @switch87 in #2135
Add Anchor Point and Delete Anchor Point tools (#1044) by @itrycodinganditsbad in #2756
fix(crop): stabilize resizing and apply ratio changes immediately by @TheTeslak in #3206
Layers panel: load a fallback font for layer names in other scripts (#2275) by @itrycodinganditsbad in #2758
Type: ⇧⌘> / ⇧⌘< change the type size (and work on Nordic/German layouts) by @Simonfalentinolesen in #2402
CLI: batch plays an action from an Actions set with the whole set loaded (#2786) by @vangel76 in #2792
Droplets: carry the actions their Play Action steps call (#2794) by @vangel76 in #2800
Spot Healing: Content-Aware dab no longer scans every patch in full (#2771) by @vangel76 in #2805
Layers: double-click a shape layer's thumbnail to pick its fill colour (#2812) by @vangel76 in #2820
TGA: targa options asks for 24 or 32 bits/pixel, same as in Photoshop by @Matty-PW in #2760
Tools: remember tool options between launches (#2814) by @vangel76 in #2822
Options bar: Reset Tool and Reset All Tools (#2825) by @vangel76 in #2830
Free Transform: right-click menu with the transform modes, rotate and flip (#2832) by @vangel76 in #2840
Channels: Edit › Transform works on a targeted alpha channel (#2835) by @vangel76 in #2845
Free Transform: themed rotate cursor and live angle/size/offset readout (#1767) by @itrycodinganditsbad in #2809
Move tool: drag a marquee from an empty spot to select the layers it touches (#2844) by @vangel76 in #2852
View: Pattern Preview tiles the document around the canvas (#1067) by @davidmann4 in #2803
Tools: Freeform Pen and Curvature Pen (#1054) by @vangel76 in #2856
Tools: Horizontal and Vertical Type Mask (#1055) by @vangel76 in #2861
Speed up large feathered mask refreshes by @Elvis33LE in #2417
Tools: Artboard tool (#2858) by @vangel76 in #2862
Tools: Perspective Crop (#1043) by @vangel76 in #2864
Actions: toggle, reorder and delete single steps (#2855) by @vangel76 in #2866
Text fields: drag-selecting in a single-line field follows the pointer's x (#1946) by @davidmann4 in #2821
perf: repeated Select Subject answers from the last mask (#2865) by @vangel76 in #2870
Dropdowns: press, drag onto an option and release to choose it (#2735) by @LloydNicholson in #2854
perf: Select › Modify › Feather/Smooth on 24 MP within budget (#2873) by @vangel76 in #2882
Refine gradient stop controls in Properties and Gradient Editor by @Skyfuller1303 in #2859
perf: duplicating a layer recomposites only where the copy draws (#2883) by @vangel76 in #2884
Status bar: buttons sit inside the bar with centred labels (#2823) by @davidmann4 in #2876
perf: keep resident GPU tiles and convert 32-bit tiles directly for brush dabs on large documents (#2900) by @vangel76 in #2902
Themes: Photoshop's light-gray and light Pro brightness levels (#2661) by @ngrafton2006 in #2892
scorecard: twenty rows describe work that is already in the tree by @Erica4fr in #2894
perf: marquee selections on large documents are built row by row (#2888) by @vangel76 in #2907
Tools: Frame tool (#2914) by @vangel76 in #2915
Add Photoshop-style guide layout dialog and live preview by @Skyfuller1303 in #2930
perf: pasting a layer recomposites only where it draws (#2901) by @vangel76 in #2917
Image Size: Photoshop's resampling, measured by @Unemars in #2451
Toolbar: Pro themes draw tool glyphs at two thirds of the button (#2665) by @ngrafton2006 in #2932
MCP bridge: reconnect before idle sockets die, retry reads, actionable timeouts (#2487) by @ahmedhosnypro in #2507
Dropdowns: type a letter to jump to an item, Enter to choose (#1481) by @davidmann4 in #2948
Layers: right-click an effect row for the layer style menu (#2846) by @davidmann4 in #2950
Smart Objects: linked smart objects follow their files while open by @KattKnight in #2510
Place: wire Always Create Smart Objects When Placing (#204) by @reynold-hu in #2543
Preferences: wire Tools › Show Transformation Values (#204) by @timothydaly1 in #2953
Channels: keep RGB off while an alpha or mask is shown, and select from that channel. by @Desayuno64 in #2555
Tools: wire Enable Flick Panning for the Hand tool (#204) by @davidmann4 in #2964
app.open: open directory .pcraft through the automation read root (#2490) by @ahmedhosnypro in #2581
Layers: Pattern Fill dialog for new and edited pattern fill layers (#2908) by @davidmann4 in #2979
Layer Style: contour picker and Contour Editor (#2912) by @vangel76 in #2949
Type: wire Show Font Names in English (#204) by @davidmann4 in #2981
Text fields: right-click edit menu (#2921) by @vangel76 in #2952
control: allow requests that operate an open Camera Raw dialog by @harrisonoconnorhover in #2988
Pixel grid: fade the line colour across mid-tones instead of flipping at one luma by @Jeremy8776 in #2990
Tests: the marquee ellipse check walks several dash periods of the curve by @ahmedhosnypro in #3018
Fix Shape Stroke controls, popup interactions and paint colours by @optimalbytee in #3019
Fix canvas context menus closing immediately on trackpad taps by @zi-ger in #3029
8-bit documents: soft, low-flow brush strokes are dithered instead of banded by @tanish2k09 in #3237
fix(ui): reduced suffix spacing width in the value field to prevent overflow (#3040) by @peppepol in #3084
Rulers: remember View › Rulers for new documents; guides as f64 (#2918) by @vangel76 in #2954
Mirror the shell for right-to-left UI languages (DIST-220-4) by @MathMattTech in #3114
Type: Edit › Paste, Copy and Select › All work on the text being typed (#2893) by @vangel76 in #2960
New Document: presets follow Units & Rulers › Preset Resolutions (#204) by @paulo-vc in #3126
Dialogs: the live dialog stays in front of older ones (stuck stacked profile prompts) by @kayrockscreenprinting in #3140
Window menu: list the open documents, the active one checked (#2991) by @brennanMKE in #3147
fix(ui): respect explicit dropdown defaults in schema dialogs (#3056) by @buivanvu94 in #3149
PSD: don't inflate an over-budget ZIP merged image at parse time (#2926) by @vangel76 in #2967
i18n(es): native-style review of the Spanish catalog (Dodge/Burn swap, Photoshop terminology, formal register) by @diegozpy in #3154
Type tool: right-click menu while editing text (#2968) by @vangel76 in #2969
Preserve HDR range in float adjustments and stack statistics by @grlessa in #2592
Speed up large Content-Aware Scale operations by @Elvis33LE in #2596
fix(zoom): Alt-click with the Zoom tool on desktops that take Alt+cli… by @kavishkashehan726-sudo in #3164
Select and Mask: live preview in Photoshop's view modes (#1754) by @vangel76 in #2970
Five exact-output speedups: dense Extrude 160s to 0.39s by @excited-raccoon in #2685
fix(ui): respect native desktop scale under Auto UI scaling (#1278) by @dylanmtaylor in #3165
fix: macOS Monterey crash on Intel Iris Pro (disable wgpu indirect validation) by @mjohnson7cd in #3171
fix(engine): allow targeting layer mask and vector mask via channel.target (#2458) by @buivanvu94 in #2705
Tools: Convert Point tool in the Pen flyout (#3204) by @Sir-Starch in #3211
fix(ui): unchanged Custom Proof Setup replaces active document proof profile (#3055) by @buivanvu94 in #3213
PSD: cap the layer tree in psd_to_document; layered TIFF checks group depth (#2940) by @vangel76 in #2975
Type menu: Anti-Alias › None first and checked; checks follow the edited layer (#2983) by @vangel76 in #2984
fix(ui): Global Light opens with stale values and overwrites document setting (#3054) by @buivanvu94 in #3217
Color Sampler tool (#1046) by @roaldosulejmani in #2753
Clip the checker under rounded colour swatches to their corners (#3208) by @myangaa1 in #3363
ci: refactor workflows to use storytold/craft-common-actions by @dylanmtaylor in #3432
Speed up Tilt-Shift with existing per-level halo trimming by @optimalbytee in #2880
Select and Mask: Refine Edge Brush (#2972) by @vangel76 in #2989
Layers: Combine Shapes merges the selected shape layers (#2400) by @davidmann4 in #2906
Move dock tabs between groups individually by @imSlicedBread in #3239
Add built-in rainbow gradient presets by @Myosh1 in #2916
Native brush outline and crosshair cursors on macOS, X11 and Wayland (#1343) by @tanish2k09 in #3243
Menus: a submenu stays open while the pointer heads for it (#1218) by @brennanMKE in #3251
i18n(pt-br): complete Brazilian Portuguese catalog (+782 missing UI, filter, and tool strings) by @onicafe in #3254
Zoom and Hand tools: right-click the canvas for the view menu (#3242) by @LloydNicholson in #3255
Quick Mask: an empty start and Select All stay apart (#2743) by @itrycodinganditsbad in #2922
raw: charge the lossless-JPEG intermediate and segment-sized buffers against max_alloc (#2925) by @switch87 in #3194
Prevent white flash when opening the screen color picker by @imSlicedBread in #3256
Add FITS read/write (astronomy images) by @dmoulton in #2956
ui: keep the Color panel knob in the corner it was dragged to by @switch87 in #3275
Rulers: stay level and fully ticked on a rotated view; guides turn with the image (#3233) by @vangel76 in #3282
ui: Dust & Scratches previews at full resolution, as it applies by @switch87 in #3287
Open several files in name order, keeping it for background opens (#3248) by @myangaa1 in #3293
GPU canvas: price the display textures before building them (#2934) by @vangel76 in #3299
Move tool: double-click type on the canvas to edit it (#1132) by @LloydNicholson in #3300
Free Transform: right-click W or H to pick their unit (#3235) by @dhiorns15 in #3301
Type: variable font axis sliders; optical size follows the type size (#2985) by @vangel76 in #2996
Tests: panic_hunt reruns a timed-out command before calling it hung (#2994) by @vangel76 in #2997
Cycle Color Lookup LUTs with keyboard and wheel by @imSlicedBread in #3304
Fix/3144 taskbar maximized by @axlecoffee in #3308
File Handling: wire Image Previews to embed a PSD thumbnail (#204) by @davidmann4 in #2971
Select and Mask: Output To New Document, with or without a layer mask (#2998) by @vangel76 in #3007
Inspect: report each layer's vector mask by @KnottyDyes in #2980
Pen: Alt breaks a handle while drawing, and close-drag pulls out the first anchor's handles (#3306) by @vangel76 in #3314
Type: Warp on live type takes the warp styles and stays editable, no prompt (#3004) by @vangel76 in #3008
feat(ui): Motion Blur and other filter angles get the angle dial (#3152) by @Kartik8Dwivedi in #3407
Free Transform: ⌘-drag of a corner scales editable type instead of distorting it (#3010) by @vangel76 in #3012
Color panel: HSB on sRGB values, like Photoshop (#3323) by @LloydNicholson in #3327
fix(shapes): options bar Fill/Stroke edit the selected shape by @alonfaraj in #3370
Installed ICC profiles in the profile menus, and Mirror in Print by @Moiztermind in #3011
Window: a window saved while minimized reopens at the minimum size, not 160 × 64 by @KattKnight in #3380
i18n: translate the Select and Mask dialog labels (#3014) by @vangel76 in #3015
Color: honour the EXIF sRGB tag on open; wire Ignore EXIF Profile Tag (#204) by @timothydaly1 in #3026
Linux: say so when no file dialog can open (#3354); read ldconfig on non-English systems by @DomiLuebben in #3397
fix(paint): respect Lock All on layer masks (#3094) by @Sir-Starch in #3111
Transform: Distort, Perspective and Warp keep shape layers live (#3009) by @vangel76 in #3025
fix(gradient): respect Lock All on Gradient Fills (#3093) by @Sir-Starch in #3120
fix(ui): focus and select hex field when color picker opens (#3375) by @buivanvu94 in #3408
Type: scan system fonts off the UI thread (#3021) by @vangel76 in #3030
fix(type): respect Lock All on text edits (#3092) by @Sir-Starch in #3132
fix(type): return caret after normalized CRLF insertion (#3074) by @Sir-Starch in #3138
Toolbox: make the colour swap arrow clearer by @Jeremy8776 in #3416
fix(type): navigate adjacent line with large leading (#3066) by @Sir-Starch in #3141
fix(ui): drop doubled options-bar borders reintroduced in UI.9 by @rafi612 in #3425
Transform Path: Distort, Perspective and Warp apply to paths (#3027) by @vangel76 in #3032
fix(crop): unlock Background when extending canvas (#3081) by @Sir-Starch in #3158
Fix Camera Raw preview color management by @imSlicedBread in #3427
fix(mode): restore indexed pixels after clearing transparency (#3080) by @Sir-Starch in #3153
Marquee: Single Row/Column Marquee History step names (#3031) by @vangel76 in #3035
fix(cli): skip recorded view and save steps in batch (#3058) by @Sir-Starch in #3143
Properties: a new adjustment or fill layer shows its settings, not its mask (#3369) by @davidmann4 in #3429
fix(filters): process untouched Reveal All masks (#3082) by @Sir-Starch in #3156
Keep the Color panel selected when switching themes (#3371) by @prekabreki in #3433
fix(history): read locked history sources (#3076) by @Sir-Starch in #3186
automation: refuse edit.installedProfiles, it scans the OS profile folders by @Sir-Starch in #3763
Keep transform controls with moved selected pixels (#3402) by @prekabreki in #3436
SVG: warn when text has no font to use (fixes the FreeBSD svg test) by @diegochagas in #3168
Crop tool: switching to another tool commits the pending crop (#3368) by @davidmann4 in #3451
fix(warp): Perspective Warp moves only the selected part of a linked … by @kavishkashehan726-sudo in #3148
Paths: Stroke Path with any brush-based tool and Simulate Pressure (#2978) by @vangel76 in #3039
fix(image): arbitrary canvas rotation moves position-locked children in groups (#3078) by @buivanvu94 in #3155
i18n(cs): translate the dynamic labels the Czech catalog was missing by @Losminek in #3454
Artboard tool: '+' buttons add a board beside the selected one; ⇧ keeps proportions (#3033) by @vangel76 in #3046
fix(transform): identity transform makes feathered selection edges translucent (#3079) by @buivanvu94 in #3159
Let the Actions step list grow with its panel by @kotulsky in #3460
Layers: clip groups follow New Layer, Arrange, Reorder and Delete (#2203) by @timothydaly1 in #3090
Type Mask: Shift/Alt at commit add to or subtract from the selection; no Layers row for the working text (#3036) by @vangel76 in #3069
Quick-export each selected layer as a separate PNG by @kotulsky in #3462
scorecard: FILE-216-5 save-path tests are in the tree by @davidmann4 in #3476
Actions: a command that runs other commands is recorded once (#3067) by @vangel76 in #3072
Type: triple-click selects a line, quadruple a paragraph, five clicks all text (#3493) by @davidmann4 in #3496
Layers: the New Layer dialog (Layer › New › Layer…, ⇧⌘N) by @timothydaly1 in #3104
Color Picker: no bigger than Photoshop's (532 × 376 points, was 682 × 437), buttons sized to their labels by @kayrockscreenprinting in #3500
Artboards: a board moved past the canvas origin grows the canvas left/up (#3070) by @vangel76 in #3073
Optimise computed brush coverage and native raster row writes by @optimalbytee in #3098
fix(crop): the crop box's own Undo/Redo (#3145) by @dottedt in #3510
Freeform Pen: Alt-clicks draw straight segments; Cmd/Ctrl is Direct Selection with the new pens (#3085) by @vangel76 in #3087
test(gradient): guard the on-canvas midpoint diamond drag (#3172) by @dottedt in #3512
Actions: Last Filter is recorded as the filter it repeated (#3089) by @vangel76 in #3091
Content-Aware Move: Transform On Drop (#3071) by @vangel76 in #3095
Numeric fields: typed units, scrubby labels, double-click reset (#3099) by @vangel76 in #3100
Keep fitted Camera Raw colour during tuning and crop Nikon D5100 borders by @optimalbytee in #3201
Preserve surrounding whitespace in OpenRaster layer names by @imSlicedBread in #3207
Tests: one GPU harness at a time in every GPU test binary (WARP crash) by @dhiorns15 in #3212
Content-Aware Scale: transform box with live preview (#3096) by @vangel76 in #3103
automation: doc.place reads a file through the read root (#2810) by @switch87 in #3215
Layers panel: Shift+Plus/Minus cycle blend modes; effects dropped on the Trash are deleted (#3102) by @vangel76 in #3106
Moving type keeps its rendering: Artboards to Files no longer drops PSD text by @fabianghe in #3218
Shortcuts: layout-independent brush keys, Photoshop's German keys plus a fallback for all layouts (#3109) by @vangel76 in #3112
Liquify: the brush fades to nothing at its edge at every Density (#2606) by @dhiorns15 in #3241
test(paint): pin the retouch dab footprint to the Full Size ring by @switch87 in #3258
Layers panel: a mask dragged onto the Trash asks to apply or delete it (#3113) by @vangel76 in #3118
PNG export: Indexed Color keeps the document resolution (#3047) by @vangel76 in #3271
Layers panel: dragging the vector mask to the Trash asks to delete just the mask (#3119) by @vangel76 in #3125
Interface: an Enable Animations preference (#3273) by @vangel76 in #3276
Edit > Copy takes a targeted layer mask, so masks travel between layers and documents (#2928) by @vbasky in #3267
automation: export layers, data sets and CSVs through the granted roots (#3216) by @switch87 in #3230
Type: fall back to installed Khmer, Lao and Burmese fonts (#218) by @RaccoonPie-314 in #3259
Curves: pencil mode, Smooth and Edit points (#3088) by @vangel76 in #3108
fix(io): smooth PSD gradients no longer overshoot their stops (#3028) by @Sir-Starch in #3285
Codecs: decode PNM straight into the budgeted output buffer (#2938) by @vangel76 in #3291
Properties: Curves adjustment layers get the black/gray/white eyedroppers (#3110) by @vangel76 in #3115
Format: admit the declared .pcraft canvas before loading it (#2935) by @vangel76 in #3295
fix(format): persist the Save As filename in .pcraft manifests (#3312) by @Ni-zav in #3319
Levels: black, gray and white point eyedroppers (#3116) by @vangel76 in #3128
Puppet Warp: the mesh follows the object outline (#3105) by @vangel76 in #3117
Clone Source: W/H link and overlay blend modes (#3298) by @vangel76 in #3310
Vanishing Point: on-canvas plane editor with Create/Edit Plane, grid and paste (#3122) by @vangel76 in #3133
Let [ shrink the brush to 1 px (#3229) by @myangaa1 in #3332
MCP: command_batch says it is not atomic, and the docs explain recovery by @KnottyDyes in #3338
New Document: a real Recent category of recently created documents (#3131) by @vangel76 in #3135
Group effects follow their children's effects, not just their pixels (#3274) by @alexanderalber in #3326
Format: reopening a .pcraft shares deduplicated tiles again (#3315) by @vangel76 in #3339
fix(presets): never overwrite preset or actions files that failed to load by @tms-h in #3346
fix(engine): create new layer masks at the document depth by @piero-83 in #3359
feat(api): add file path to document.inspect by @Mr-Pearce in #3398
Ctrl-click shape and path thumbnails to load selections by @kotulsky in #3449
fix(selection): scope Color Range to the active selection (#3313) by @Ni-zav in #3366
Layer › Duplicate Layer… asks for the copy's name and destination document (#3348) by @prekabreki in #3440
Copy takes every selected layer, Paste recreates them (#2478) by @DomiLuebben in #3394
Fix GIMP hole heading name and location by @philipzae in #3517
Commands check an explicit "layer" instead of whichever layer is active by @fabianghe in #3466
Brush cursor: shaped tips trace their outline (split from #2516) by @siraxe in #3467
perf: Edit > Clear works tile by tile on large selections (#3463) by @itrycodinganditsbad in #3482
Autosave: best-effort cleanup after commit; sweep orphaned recovery bundles (#3489) by @vangel76 in #3502
Raw: open monochrome LinearRaw DNGs (1 sample per pixel) (#3497) by @davidmann4 in #3503
PSD gradients: read the interpolation method Photoshop writes; add Smooth by @MrCloudy2 in #3442
CI: restore tests, catalogs, and web size gate by @skylartaylor in #3923
Color Balance: Photoshop's per-channel levels and gamma curves by @MrCloudy2 in #3443
Save: show save progress as Saving NN% in the status bar and tab title (#3389) by @davidmann4 in #3485
Warp presets: Photoshop's Bezier control grids instead of approximations by @MrCloudy2 in #3444
Brush and Pencil: hold ~ to erase, and Clear mode (#3439) by @itsF4LCON in #3465
Content-Aware tools: faster, cancellable at once, same pixels (P21, P22, P49) by @Unemars in #3395
fix(io): a fresh Metrics type layer writes no empty Txt2 stub (#3514) by @dottedt in #3529
Brush: show the smoothing string from brush to pointer (#3479) by @vangel76 in #3526
Security: verify AppImage build inputs by @skylartaylor in #2270
History panel: snapshots (camera button, snapshot rows, history.*Snapshot) (#2966) by @itsF4LCON in #3545
feat(ui): Photoshop's New Guide: units and colour by @FinnNk in #3553
Tools: Shift key switches tools by default, as in Photoshop (#3525) by @vangel76 in #3528
Use Fontconfig for Linux font discovery (#2330) by @Sir-Starch in #2961
Use each XRandR output's ICC profile in the screen picker by @Sir-Starch in #2962
Support automatic monitor ICC profiles on Linux X11 by @Sir-Starch in #2963
Security: harden document exports and automation inputs by @skylartaylor in #2269
Animated GIF: every frame loads into video layers (#572) by @Sir-Starch in #2999
GPU memory budget: read installed RAM on Windows by @dhiorns15 in #3189
fix(ui): correct the clipping-mask indicator orientation by @Skyfuller1303 in #3037
Windows installer: refuse Windows 7 and 8 with a clear message (#2310) by @dhiorns15 in #3261
Format: index ZIP entries by name and use crc32fast (#3474) by @vangel76 in #3488
psd: harden the standalone binary parsers (fuzz + property tests, gradient/swatch correctness) by @agent-346022 in #3542
Add Vietnamese localization by @duydev in #2636
Linux: StartupWMClass is the window's app id by @atoslins in #3481
M11: ten more MCP acceptance tasks (11-20) for FILE-216-6 by @reynold-hu in #3562
fix(ui): don't reopen floating Brush Settings on restart by @Ni-zav in #3570
M11: six rounding-out acceptance tasks (31-36) by @reynold-hu in #3568
Options bar: the Gradient tool's controls show in every theme (#3601) by @vangel76 in #3607
fix(ui): one eliding label for fixed-width chrome, so translations can't overrun (#3580) by @dottedt in #3616
test(ui): marquee shift+alt before the drag intersects the selection (#208) by @agent-346022 in #3624
Crop tool: a resized frame snaps its handle, not the pointer (#3638) by @davidmann4 in #3640
fix(transform): keep nearest-neighbor previews on original texels by @Ni-zav in #3688
fix(engine): image.canvasSize rejects unlisted anchors instead of landing between two (#2946) by @agent-346022 in #3572
Edit › Transform › Skew: corners and sides move along one axis, like Photoshop (#3437) by @kayrockscreenprinting in #3590
PSD: alpha channel resources count the merged transparency; 13-byte DisplayInfo by @MrCloudy2 in #3577
Glows: Photoshop's precise ramp; centre-source glows inverted after the contour by @MrCloudy2 in #3578
Canvas: wheel/pinch zoom over the pasteboard keeps the image in view (#3720) by @FredApps in #3731
Select: open the Save Selection and Load Selection dialogs (#3713) by @itrycodinganditsbad in #3738
Toolbar: the colour chips sit right under the tools again by @Unemars in #3745
Fix: video frames to layers working using folder dialog request (#3513) by @peppepol in #3718
Menus: keep clear of the taskbar when Wayland hides the window position (#3737) by @FredApps in #3739
i18n(it): translate the dynamic labels the Italian catalog was missing by @fabiodalez-dev in #3742
Chisel bevels: Photoshop's facet slope and ramp ends by @MrCloudy2 in #3595
Character panel: OpenType feature buttons (TYPE-218-5, #3752) by @davidmann4 in #3757
Brush: symmetric live strokes update only what changed (#3593) by @xsvm in #3605
Move: an unlinked layer mask moves alone when targeted (#3604) by @vangel76 in #3611
fix(ui): drag a document tab off the strip to float it in its own window (#3733) by @bommerts in #3785
fix(web): keep the canvas steady during preset saves by @zenjabba in #3805
UI: drag to reorder swatch groups and preset folders (#3658) by @dottedt in #3828
Keep transform preview visible while panning (#3610) by @Sir-Starch in #3843
perf: draw marching ants as one mesh instead of a line shape per dash by @JameEnder in https://github.com/storytold/photocraft/pull/3846
Fail CLI run when recorded action playback fails by @jonathanwxh-cell in https://github.com/storytold/photocraft/pull/3861
Guides: Shift-drag out of a ruler lands on the nearest ruler tick (#3770) by @n-delic in https://github.com/storytold/photocraft/pull/3796
fix(engine): a PSD type layer names the installed font, not an invented one (#3556) by @dottedt in https://github.com/storytold/photocraft/pull/3564
Actions: replay tests for crop, filters, selections and styled text on a second document (AUTO-219-4) by @reynold-hu in https://github.com/storytold/photocraft/pull/3566
feat(psd): Gradient Map stops in CMYK, Lab, Gray and HSB import and round-trip by @echelon in https://github.com/storytold/photocraft/pull/4033
feat(save): File › Save keeps a JPEG's quality and a WebP's lossy/lossless encoding (#2399) by @echelon in https://github.com/storytold/photocraft/pull/4032
PSD: descriptor ids warp, list and time are written as strings, as Photoshop writes them by @echelon in https://github.com/storytold/photocraft/pull/4039
fix(liquify): pointer speed no longer changes the warp (continuous dab spacing) by @echelon in https://github.com/storytold/photocraft/pull/4047
Update Japanese translations by @coolvitto in https://github.com/storytold/photocraft/pull/3892
UI: unify plain text inputs on one text_field widget (#3789) by @dottedt in https://github.com/storytold/photocraft/pull/3896
Layer › Export As exports every selected layer or artboard (#3629) by @fabianghe in https://github.com/storytold/photocraft/pull/3909
UI: Photoshop-style in-dialog preview for the generic filter dialogs (#3769) by @dottedt in https://github.com/storytold/photocraft/pull/3877
fix(ui): allow selecting shapes and editing color with path selection (#3915) by @seotarek in https://github.com/storytold/photocraft/pull/3932
PSD type layers: TySh bounds, AntiAlias numbers and version info written as Photoshop writes them by @echelon in https://github.com/storytold/photocraft/pull/4041
PSD: rasterized fill and smart layers stay rasterized after save and reopen by @echelon in https://github.com/storytold/photocraft/pull/4034
Dismiss Home when closing a document tab (#3981) by @vbasky in https://github.com/storytold/photocraft/pull/3984
fix(ui): show a paint-bucket cursor for the Paint Bucket tool (#3968) by @MarekSpodBiedry in https://github.com/storytold/photocraft/pull/3989
fix(ui): Open layer color choices from the visibility icon by @Ni-zav in https://github.com/storytold/photocraft/pull/4001
fix(ui): Make checkbox labels nonselectable and show pointer cursors by @Ni-zav in https://github.com/storytold/photocraft/pull/4002
fix(ui): keep filter jobs polling on idle Linux by @rozaqabdul656 in https://github.com/storytold/photocraft/pull/3961
Add WebP and optional quality to Batch export dialogs by @zenjabba in https://github.com/storytold/photocraft/pull/3956
feat(compose): Lab documents evaluate Invert, Posterize, Threshold, Brightness/Contrast and Gradient Map on L, a, b by @echelon in https://github.com/storytold/photocraft/pull/4038
PSD: composite_rgba8 checks the output budget and converts planes fallibly (#3639) by @vangel76 in https://github.com/storytold/photocraft/pull/3651
PSD: don't preallocate knots from untrusted path length counts (#3635) by @vangel76 in https://github.com/storytold/photocraft/pull/3654
PSD: bound the zero padding of undersized pattern channels (#3652) by @vangel76 in https://github.com/storytold/photocraft/pull/3686
PSD: cap descriptor list/object preallocation from untrusted counts (#3636) by @vangel76 in https://github.com/storytold/photocraft/pull/3699
fix(engine): Displace smart filter ignores its mapPath displacement map (#3670) by @horknfbr in https://github.com/storytold/photocraft/pull/3676
PSD: smart object Trnf frames the custom warp's control points, not the source rect (#3671) by @horknfbr in https://github.com/storytold/photocraft/pull/3677
feat(io): import Photoshop Displace smart filters with their embedded map (#3673) by @horknfbr in https://github.com/storytold/photocraft/pull/3680
Gradient Map: edit color stops on the ramp by @arthurdeka in https://github.com/storytold/photocraft/pull/3982
Free Transform: a layer's style shows while the box is open, drawn from the transformed layer (#3653) by @kayrockscreenprinting in https://github.com/storytold/photocraft/pull/3696
fix(algo): mesh warps filter their source when shrinking, so thin lines don't alias (#3672) by @horknfbr in https://github.com/storytold/photocraft/pull/3678
feat(io): open Krita .kra composites as editable raster documents (#3692) by @Ni-zav in https://github.com/storytold/photocraft/pull/3700
fix(psd): Multichannel alpha channels stay alpha; a save keeps resources and global blocks by @echelon in https://github.com/storytold/photocraft/pull/4031
fix(layers): identify the Background by structure, never by its English name by @echelon in https://github.com/storytold/photocraft/pull/4036
Codecs: refuse implausible PNG/WebP headers before allocating (#3691) by @vangel76 in https://github.com/storytold/photocraft/pull/3706
PSD: avoid cloning layer data when padding and presize the output buffer (#3687) by @vangel76 in https://github.com/storytold/photocraft/pull/3707
Codecs: bound the TIFF IFD walk by a file-size entry budget (#3683) by @vangel76 in https://github.com/storytold/photocraft/pull/3711
Select the Normal RGB blend kernel once per buffer by @Streetblock in https://github.com/storytold/photocraft/pull/3715
Allow empty vector masks in downsampled preview proxies by @Streetblock in https://github.com/storytold/photocraft/pull/3716
feat(codecs): decode legacy PCX images and palettes (#3692) by @Ni-zav in https://github.com/storytold/photocraft/pull/3701
fix(text): scale faux bold dilation with glyph scaling (#3705) by @nicolasfalesy in https://github.com/storytold/photocraft/pull/3719
Answer a repeat auth with "already authenticated" (#3668) by @itrycodinganditsbad in https://github.com/storytold/photocraft/pull/3723
Codecs: integer fast paths for Image::convert (#3717) by @vangel76 in https://github.com/storytold/photocraft/pull/3729
automation: say why a command is disabled in engine.commands (#3664) by @itrycodinganditsbad in https://github.com/storytold/photocraft/pull/3740
feat: Photoshop's layer and selection keys (Ctrl+, toggle, Ctrl+, /, Ctrl+Alt+2, Ctrl+Alt+Backspace, Tab rename, Alt-click thumbnail) by @FinnNk in https://github.com/storytold/photocraft/pull/3710
View: remember Extras, Show and Snap To across restarts (#3762) by @bommerts in https://github.com/storytold/photocraft/pull/3787
fix(automation): warn when text falls back from a missing font (#3391) by @buivanvu94 in https://github.com/storytold/photocraft/pull/3630
Satin: Distance 0 draws as 1 px, as in Photoshop by @MrCloudy2 in https://github.com/storytold/photocraft/pull/3744
Type: editing text keeps its ligatures and OpenType alternates (#3617) by @davidmann4 in https://github.com/storytold/photocraft/pull/3747
Brushes: Photoshop's texture Height/Subtract modes, Brightness and Contrast (#3340) by @davidmann4 in https://github.com/storytold/photocraft/pull/3749
Camera raw colour fit: read a Sony Adobe RGB preview as Adobe RGB, not sRGB by @Madcat71 in https://github.com/storytold/photocraft/pull/3760
Shadows/Highlights: Photoshop's, measured by @Unemars in https://github.com/storytold/photocraft/pull/3765
Black & White: tint like the Color blend mode, as in Photoshop by @MrCloudy2 in https://github.com/storytold/photocraft/pull/3780
Hue/Saturation: Photoshop's saturation curve, lightness order and Colorize lightness by @MrCloudy2 in https://github.com/storytold/photocraft/pull/3781
History: add history.undo and history.redo aliases (#3675) by @dottedt in https://github.com/storytold/photocraft/pull/3786
Fix straight-path anchor insertion at the hit position by @jonathanwxh-cell in https://github.com/storytold/photocraft/pull/3856
Preserve signed HDR colors during surface transforms by @jonathanwxh-cell in https://github.com/storytold/photocraft/pull/3857
Brushes: drag a brush folder into another folder (#2014) by @davidmann4 in https://github.com/storytold/photocraft/pull/3851
Keep CMYK ink values when flattening and merging (#3778) by @itrycodinganditsbad in https://github.com/storytold/photocraft/pull/3855
Type: wire missingGlyphProtection (script fallback toggle) by @reynold-hu in https://github.com/storytold/photocraft/pull/3863
io: read version 3 Photo Filter colour as XYZ, not Lab (#3777) by @itrycodinganditsbad in https://github.com/storytold/photocraft/pull/3790
Workspace: wire Enable Narrow Options Bar (#204) by @reynold-hu in https://github.com/storytold/photocraft/pull/3870
Selective Color (Absolute): scale by the room the ink has, as in Photoshop by @MrCloudy2 in https://github.com/storytold/photocraft/pull/3793
Shift Edge moves by a fraction of a pixel so the slider does not snap by @Desayuno64 in https://github.com/storytold/photocraft/pull/3800
Image > Mode > 32 Bits/Channel: convert to linear light, as Photoshop does by @MrCloudy2 in https://github.com/storytold/photocraft/pull/3792
Engine: Flatten All Layer Effects keeps layer and vector masks (#3804) by @dottedt in https://github.com/storytold/photocraft/pull/3835
fix(gpu): flush every 1000 passes so deep stacks don't pile into one command buffer by @JameEnder in https://github.com/storytold/photocraft/pull/3844
perf(gpu): a duplicated layer's texture starts as a copy of its source by @JameEnder in https://github.com/storytold/photocraft/pull/3848
perf: the Navigator redraws only the area an edit changed by @JameEnder in https://github.com/storytold/photocraft/pull/3845
perf: edits, undo and redo recomposite only where added or removed layers draw by @JameEnder in https://github.com/storytold/photocraft/pull/3847
Remove tool: Create a new layer, and Remove after each stroke off by @diegochagas in https://github.com/storytold/photocraft/pull/3808
Workspace: wire Auto-Collapse Iconic Panels (#204) by @reynold-hu in https://github.com/storytold/photocraft/pull/3880
Camera Raw on raw opens: Clarity, Texture and Dehaze in linear light, measured by @Unemars in https://github.com/storytold/photocraft/pull/3815
Layer styles: Photoshop's measured contour presets; Satin's contour lookup by @MrCloudy2 in https://github.com/storytold/photocraft/pull/3803
fix(smart-object): keep pixels when rasterizing smart object layer by @Gotix-eg in https://github.com/storytold/photocraft/pull/3873
PSD: write kept 8B64 blocks as 8BIM so Photoshop opens PSB-derived files by @MrCloudy2 in https://github.com/storytold/photocraft/pull/3743
fix(io): preserve indexed BMP color tables (#3802) by @Sir-Starch in https://github.com/storytold/photocraft/pull/3869
feat: Photoshop's tool keys (arrows turn the brush, Shift-click new type, Space+F canvas colour) by @FinnNk in https://github.com/storytold/photocraft/pull/3725
PSD type: read styles from the run's sheets and place text at its Txt2 frame (#3795, #1317) by @FredApps in https://github.com/storytold/photocraft/pull/3819
Merged and stamped layers keep their content bounds in CMYK and Lab by @dgliwa in https://github.com/storytold/photocraft/pull/3886
Preserve surviving channel targets and visibility on deletion by @jonathanwxh-cell in https://github.com/storytold/photocraft/pull/3887
Layers: Merge Group for a selected group (#3832) by @FredApps in https://github.com/storytold/photocraft/pull/3888
test(cms): validate profile-specific CMYK endpoints by @FredApps in https://github.com/storytold/photocraft/pull/3890
Count video footage in history memory budgets by @jonathanwxh-cell in https://github.com/storytold/photocraft/pull/3894
Mix filtered selection edges with premultiplied alpha by @jonathanwxh-cell in https://github.com/storytold/photocraft/pull/3895
Color: convert input-only embedded profiles to the working space on open (#3876) by @HEOJUNFO in https://github.com/storytold/photocraft/pull/3900
Format: check pattern sizes on load (#3478) by @vangel76 in https://github.com/storytold/photocraft/pull/3484
Format: overflow-safe blob decode and bounds-checked ZIP reads (#3486) by @vangel76 in https://github.com/storytold/photocraft/pull/3501
Fuzz: ignore the same build leftovers in every fuzz crate by @s17sh70x2jfl031ag in https://github.com/storytold/photocraft/pull/3585
HEIF: move the heic-rs pin from 0.1.1 to 0.1.4 by @s17sh70x2jfl031ag in https://github.com/storytold/photocraft/pull/3637
Codecs: decode only the requested EXR part (#3721) by @vangel76 in https://github.com/storytold/photocraft/pull/3722
Codecs: decode JPEG and CCITT G3/G4 compressed TIFF (#3712) by @vangel76 in https://github.com/storytold/photocraft/pull/3727
fix(linux): avoid duplicate AppImage desktop launcher (#3623) by @Korg1ch in https://github.com/storytold/photocraft/pull/3641
ops: count selection masks in history pixel budget by @Streetblock in https://github.com/storytold/photocraft/pull/3614
Verify PngSuite archives and cached corpus files by @zenjabba in https://github.com/storytold/photocraft/pull/3973
feat: Alt+Cancel → Reset for opt-in command dialogs by @seandellis in https://github.com/storytold/photocraft/pull/3871
i18n(tr): add Turkish UI translation catalog by @yeniufuklar-com in https://github.com/storytold/photocraft/pull/3809
i18n: add Hungarian (hu) UI translation by @Skaywalker in https://github.com/storytold/photocraft/pull/3831
Release workflow: pass the Azure signing secrets by @echelon in https://github.com/storytold/photocraft/pull/3794
Fix main: wasm size cap, Windows Export As test, filter preview window (scope and a crash), CLI duplicate font warnings by @echelon in https://github.com/storytold/photocraft/pull/4147
Web: wasm back under the 24 MiB gate with ~1 MiB headroom (25.38 → 24.17 MB) by @bommerts in https://github.com/storytold/photocraft/pull/4253
New Contributors
@skylartaylor made their first contribution in #3097
@herzer made their first contribution in #2660
@Skyfuller1303 made their first contribution in #2738
@imSlicedBread made their first contribution in #3209
@TheTeslak made their first contribution in #3206
@Simonfalentinolesen made their first contribution in #2402
@Matty-PW made their first contribution in #2760
@ngrafton2006 made their first contribution in #2892
@KattKnight made their first contribution in #2510
@timothydaly1 made their first contribution in #2953
@Desayuno64 made their first contribution in #2555
@peppepol made their first contribution in #3084
@MathMattTech made their first contribution in #3114
@paulo-vc made their first contribution in #3126
@diegozpy made their first contribution in #3154
@grlessa made their first contribution in #2592
@dylanmtaylor made their first contribution in #3165
@mjohnson7cd made their first contribution in #3171
@myangaa1 made their first contribution in #3363
@Myosh1 made their first contribution in #2916
@onicafe made their first contribution in #3254
@dmoulton made their first contribution in #2956
@axlecoffee made their first contribution in #3308
@KnottyDyes made their first contribution in #2980
@Kartik8Dwivedi made their first contribution in #3407
@Moiztermind made their first contribution in #3011
@DomiLuebben made their first contribution in #3397
@Losminek made their first contribution in #3454
@dottedt made their first contribution in #3510
@RaccoonPie-314 made their first contribution in #3259
@tms-h made their first contribution in #3346
@piero-83 made their first contribution in #3359
@Mr-Pearce made their first contribution in #3398
@philipzae made their first contribution in #3517
@agent-346022 made their first contribution in #3542
@duydev made their first contribution in #2636
@atoslins made their first contribution in #3481
@FredApps made their first contribution in #3731
@fabiodalez-dev made their first contribution in #3742
@JameEnder made their first contribution in https://github.com/storytold/photocraft/pull/3846
@jonathanwxh-cell made their first contribution in https://github.com/storytold/photocraft/pull/3861
@n-delic made their first contribution in https://github.com/storytold/photocraft/pull/3796
@seotarek made their first contribution in https://github.com/storytold/photocraft/pull/3932
@horknfbr made their first contribution in https://github.com/storytold/photocraft/pull/3676
@nicolasfalesy made their first contribution in https://github.com/storytold/photocraft/pull/3719
@Madcat71 made their first contribution in https://github.com/storytold/photocraft/pull/3760
@Gotix-eg made their first contribution in https://github.com/storytold/photocraft/pull/3873
@dgliwa made their first contribution in https://github.com/storytold/photocraft/pull/3886
@s17sh70x2jfl031ag made their first contribution in https://github.com/storytold/photocraft/pull/3585
@Korg1ch made their first contribution in https://github.com/storytold/photocraft/pull/3641
@seandellis made their first contribution in https://github.com/storytold/photocraft/pull/3871
@yeniufuklar-com made their first contribution in https://github.com/storytold/photocraft/pull/3809
@Skaywalker made their first contribution in https://github.com/storytold/photocraft/pull/3831
Full Changelog: v0.7.0...v0.8.2 - Oct 11, 2026
- Date parsed from source:Oct 11, 2026
- First seen by Releasebot:Oct 13, 2026
PhotoCraft v0.7.0
photocraft releases a major update with new image-editing tools, richer layer and mask controls, improved selections and transforms, and broader file-format support. It also speeds up key workflows and polishes the interface for a smoother creative experience.
What's Changed
- docs: register the MCP server from an installed release by @sawizzle in #2185
- docs(adjust): align Levels and Curves comments with evaluation order by @coygeek in #2212
- Preserve unchanged XMP translations in File Info by @Benziza in #2152
- Smudge: use the Brush Settings spacing for retouch strokes (#2140) by @davidmann4 in #2171
- Fix layer mask toggle action labels by @optimalbytee in #2156
- Fix hyperlink in credits panel by @crqch in #2146
- Layers: mask thumbnails update after Invert and other whole-mask edits (#2117) by @davidmann4 in #2164
- Keep the selection when smart selection finds nothing by @vbasky in #2235
- fix(layer style): wrap Make/Reset Default buttons by @kmnkv1 in #2209
- i18n(ru): translate layer style effects by @kmnkv1 in #2210
- Layers panel: Opacity and Fill share one right-aligned column (#2085) by @davidmann4 in #2173
- Ignore hidden RGB when Magic Wand selects transparency by @harrisonoconnorhover in #2273
- Canvas: clip the Free Transform preview to the canvas (#2027) by @davidmann4 in #2201
- fix(ui): avoid drawing panel borders twice by @tropicaaal in #2226
- Layers panel: press-drag-release picks a fill or adjustment layer (#2071) by @davidmann4 in #2172
- fix(engine): select neighbouring layer after deletion by @kotulsky in #2189
- Preferences: the dialog grows with the window by @luniiya in #2155
- scorecard: Marquee modifiers and brush resize drag are done (TOOL-214-2, TOOL-213-10) by @Duke242 in #2261
- Confirm layer deletion only from the Layers trash button by @kotulsky in #2197
- Soft brushes paint soft strokes and thin lines stay even: a Gaussian-like tip and area coverage for tiny tips by @tanish2k09 in #2167
- TGA: save the document's alpha channel as 32-bit alpha (#2124) by @davidmann4 in #2157
- Preserve quoted multiline variable CSV records by @harrisonoconnorhover in #2242
- Workspace: wire open_documents_as_tabs preference (#204) by @Hathor875 in #2177
- Expose Clone Stamp opacity and flow and apply them to strokes by @Ni-zav in #2256
- Masks: target a new layer mask and keep separate colour pairs for mask and pixels (#2166) by @davidmann4 in #2200
- Default layered edits of flat images to PSD on Save by @harrisonoconnorhover in #2234
- Selection cursors: badges for cutting, copying and dragging the selected pixels by @texjer in #2250
- Tools: double-clicking a layer mask launches Select and Mask with preference (#204) by @Hathor875 in #2161
- Add pixel mask density and feather controls to Properties by @harrisonoconnorhover in #2240
- Cmd held is the Move tool with the painting tools (Cmd+Alt duplicates) by @texjer in #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 #2221
- Move tool on a locked layer: Photoshop's message by @texjer in #2249
- fix(ui): remove the gap beneath Spectrum document tabs by @Ni-zav in #2265
- Web: leave the JPEG XL DNG decoder out of the wasm (25.1 MB -> 24.3 MB) by @echelon in #2233
- fix(ui): mode buttons respect two-column toolbar by @tropicaaal in #2241
- Layer › Rasterize acts on every selected layer; the Layers menu offers "Rasterize Layers" (#2243) by @Sir-Starch in #2253
- Fix SVG selection and import detection by @alex-ctms in #2224
- Pen pressure curve: Preferences › Tools shapes how pen pressure reaches every brush by @tanish2k09 in #2195
- feat(ui): allow toolbar to scroll by @tropicaaal in #2238
- GPU startup: CPU mode on Linux falls back to Vulkan to present the window (#1337) by @MrCloudy2 in #2206
- Layers menu and layer commands follow the selection, not the active layer (#2244) by @Sir-Starch in #2254
- Window edges: easier to grab, theme-safe cursors, and no lost hover after a resize (#1581) by @MrCloudy2 in #2205
- fix(engine): reject invalid core-filter parameters by @0x6Ason in #2228
- Keep duplicated Smart Objects linked to shared contents by @harrisonoconnorhover in #2222
- fix(ui): complete system appearance selection and styling by @coygeek in #2168
- Add the Remove tool with non-local patch completion by @JohnnYoru in #2193
- Regenerate docs/scorecard.md after #2193 by @echelon in #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 #2229
- Expand arithmetic expressions across numeric inputs by @TheSeanLavery in #2252
- automation: accept absolute paths beneath the automation roots (#2176) by @SBaksa in #2216
- Filters: preview at the scale OK applies (#2063) by @davidmann4 in #2207
- Load Thai fallback fonts for native UI text by @harrisonoconnorhover in #2280
- Content-Aware tools: Photoshop's behaviour, measured by @Unemars in #2202
- Apply Type formatting to selected text layers by @harrisonoconnorhover in #2266
- Distance fields on threads: bevel size changes 2-3x cheaper (#2119) by @Sir-Starch in #2162
- EXR: Cryptomatte layers list, decode and hash to the specification by @Elvis33LE in #2180
- Expose native shape stroke controls with staged previews by @optimalbytee in #2218
- Select and Mask: 4x faster CPU refinement with exact octagonal morphology by @excited-raccoon in #2154
- Addition : Brush popup better UI by @siraxe in #2217
- kys import: first launch asks before importing; edit.keyboardShortcuts importKys (#1987 review) by @texjer in #2251
- OpenRaster (.ora) open and save by @scottcampbelldata in #2257
- automation: test root look-alike siblings and sub/../.. climbs (#2216 follow-up) by @echelon in #2528
- Canvas: UI Scale must not magnify the image (#2121) by @maxm11 in #2333
- Free Transform: the Hand tool no longer steals a resize drag (#2302) by @maxm11 in #2327
- Clip warp tiles at the inverse horizon so steep Distort commits keep every pixel (#2271) by @MarekSpodBiedry in #2500
- GPU canvas: re-upload a layer or mask texture when its default pixel changes (#2422) by @MarekSpodBiedry in #2446
- fix(selection): constrain Polygonal Lasso segments with Shift (#2352) by @Ni-zav in #2396
- fix(properties): expose equal-gap horizontal and vertical distribution (#2349) by @Ni-zav in #2398
- Fix snapping when drawing a new crop inside the default frame by @harrisonoconnorhover in #2549
- Capture marquee selection modifiers at mouse press by @harrisonoconnorhover in #2558
- Marquee: keep one-pixel rows and columns on release (#2391) by @vangel76 in #2562
- Move tool: outline follows the moved layer (#2413) by @vangel76 in #2565
- Move tool: Ctrl/Cmd+arrow nudges the layer from any tool (#2474) by @davidmann4 in #2556
- Move tool: Auto-Select picks a type layer inside its text bounds (#2370) by @vangel76 in #2591
- Tools: a tool key brings back its group's last-used tool (#2608) by @vangel76 in #2625
- Zoom tool: double-click zooms to 100% (#2508) by @vangel76 in #2527
- Canvas: right-click outside the image opens the pasteboard colour menu (#2462) by @vangel76 in #2633
- Spot Healing: the drag trail shows the dabs the heal covers (#2364) by @vangel76 in #2642
- Preserve the Zoom drag anchor in rotated views by @harrisonoconnorhover in #2583
- Selection feather: the radius is the Gaussian's sigma, as in Photoshop by @MrCloudy2 in #2529
- Select › Modify › Smooth: a hard threshold, as in Photoshop, not soft edges by @MrCloudy2 in #2557
- Select › Modify › Border: Photoshop's soft band, 2r wide, not a hard r-pixel ring by @MrCloudy2 in #2564
- Keep surrounding spaces when renaming a layer (#2459) by @MarekSpodBiedry in #2472
- Layer commands accept an explicit layer with none selected; Deselect Layers is a no-op when nothing is selected (#2457) by @MarekSpodBiedry in #2481
- fix(engine): list running jobs before ended ones in jobs.list (#2395) by @KausBoss in #2411
- fix(psd): an unedited save writes Photoshop's Txt2 back unchanged (#2374) by @vivekprojects-GIT in #2427
- Remove tool: an empty layer is a no-op instead of running the fill (#2435) by @MarekSpodBiedry in #2447
- fix(vector): Stroke Path refuses pixel-locked and fully locked layers (#2388) by @KausBoss in #2408
- fix: Preserve CMYK solid and gradient fills through PSD round trips by @reneleonhardt in #2628
- fix(codecs): exports drop the source's EXIF thumbnail (#2147, #2373) by @vivekprojects-GIT in #2450
- fix(vector): Fill Path stays inside the active selection (#2387) by @KausBoss in #2410
- Let Edit > Fill and the fill keys fill an adjustment layer's mask (#2456) by @MarekSpodBiedry in #2471
- fix(document): restore layer comps when duplicating documents by @Ni-zav in #2429
- Float the layer mask, not the layer, when the mask is targeted (#2468) by @MarekSpodBiedry in #2486
- Quit and Close All: answering No closes that document (#2547) by @itrycodinganditsbad in #2610
- Save As to a flat format keeps the layered original (#2550, #2579) by @itrycodinganditsbad in #2611
- OpenEXR/HDR export: linearize grayscale documents too (#2386) by @itsF4LCON in #2448
- TGA: a 32-bit Targa opens with its alpha as "Alpha 1", as in Photoshop (#2225) by @MrCloudy2 in #2482
- Keep Duotone ink colours when converting to RGB, CMYK or Lab (#2383) by @itrycodinganditsbad in #2614
- Reject colliding data-set export filenames before writing by @harrisonoconnorhover in #2433
- Save and export dialogs remember where each document was last saved (#1826) by @bitshiftza in #2421
- Open file pickers for Replace Contents, Export Contents and Convert to Linked by @fabianghe in #2438
- Fix current .af artboard recognition and preserve editable boards by @callmeBalloch in #2355
- fix(blend): keep 32-bit Hue/Saturation/Color/Luminosity above 1 by @hideoneric in #1735
- Render: Tree and Picture Frame accept whole numbers sent as floats (#2501) by @davidmann4 in #2521
- Extended filters: an unknown option is a bad-params error (#2228 follow-up) by @xsvm in #2548
- Legacy Brightness/Contrast: brightness first, then contrast around 128, as in Photoshop by @MrCloudy2 in #2615
- Bevel contour: drop the glow-style Range stretch by @juswus2000 in #2498
- Blend modes: Fill below 100% works inside the blend for Photoshop's special eight by @MrCloudy2 in #2552
- Issue #2326: Hue/Saturation Colorize at 0% saturation gives grey, not a 25% tint by @LloydNicholson in #2343
- cms: accept ICC DeviceLinks whose output isn't a 3-channel PCS by @kavishkashehan726-sudo in #2348
- fix(ui): keep menus responsive on documents with thousands of layers by @m6502 in #2454
- Shift-click New Group groups the selected layers (#2561) by @itrycodinganditsbad in #2613
- Fix/2361 scrub layer labels s20261010 t083444 z og3kyw by @Ni-zav in #2397
- Filters: full-resolution preview for Add Noise, Wind, Extrude, Tree, the Filter Gallery and more (#2063) by @davidmann4 in #2494
- Handle allocation failures in large pixel operations by @Elvis33LE in #2530
- fix(layers): preserve Background behavior across merge, duplication and canvas resize by @Ni-zav in #2419
- Fixed a bug where if you select a mask and hit the delete key, it deletes the image by @Lyraedan in #2635
- fix(ui-egui): ui.key with ctrl does not trigger shortcuts off the Mac by @Erica4fr in #2430
- Warp Text: the dialog opens with the layer's warp and previews it live (#218) by @skraus2 in #2539
- Text fields: copy, cut and paste through the Mac menu's key equivalents by @Trade-Mottoes in #2568
- Filter Gallery: preview at the scale OK applies (#2502) by @davidmann4 in #2524
- Paste: a web Ctrl/Cmd+V key press and its paste event are one paste (#2638) by @vangel76 in #2643
- Opening card: a long file name no longer pushes Cancel out of the card (#2423) by @bitshiftza in #2444
- Windows: keep the custom title bar's window borderless (#2246) by @roaldosulejmani in #2401
- Image Size and Canvas Size open on Width, selected (#2329) by @alexanderalber in #2357
- Close a document tab with a middle click (#2570) by @bitshiftza in #2637
- Dock splitters push the neighbouring groups instead of stopping (#2573) by @itrycodinganditsbad in #2624
- Dropdowns: open lists start at their widest option's width (#2607) by @vangel76 in #2634
- DNG: lossy compression 34892 (baseline JPEG tiles) by @Elvis33LE in #2021
- Command palette: don't list menu separators (#2479) by @itrycodinganditsbad in #2632
- fix(ui): restore muted text color for disabled Layer Style effects by @Ni-zav in #2321
- Number fields: centre digits vertically by @rosematcha in #1322
- Menus: Reveal in Finder names the platform file manager off macOS (#217) by @skraus2 in #2586
- Enable menu Cut for selected type text by @harrisonoconnorhover in #1448
- Create new documents by double-clicking presets by @harrisonoconnorhover in #2290
- Re-render shapes when an artboard move grows the canvas (#2389) by @itrycodinganditsbad in #2623
- Curved shapes no longer report bounds 1 px too wide (#2537) by @itrycodinganditsbad in #2641
- Crop tool: W x H x Resolution mode resamples the crop to a size and resolution (#2443) by @davidmann4 in #2483
- EXR parts: import parts, channel groups and an AOV precomp as layers by @Elvis33LE in #2338
- fix(ui): toggle color swatches when selecting or deselecting a layer mask by @buivanvu94 in #2560
- Skip distant TSL-off stroke layers during composition by @Elvis33LE in #2473
- Ctrl+Tab and Ctrl+Shift+Tab switch to the next and previous document (#2340) by @alexanderalber in #2353
- Keep plug-in menu rows under Filter › Plug-ins in every language (#2540) by @bitshiftza in #2627
- Color panel: the field and hue strip fill the panel height by @Jeremy8776 in #2455
- Speed up Iris Blur without changing output by @optimalbytee in #2578
- fix(ui): unify Spectrum menu spacing and hover contrast by @Ni-zav in #2323
- Colour swatches open PhotoCraft's Color Picker: filter dialogs, Preferences, Note, Count, artboard (part of #2144) by @kayrockscreenprinting in #2571
- Dialogs: Tab walks the text fields only; New Document opens with its name selected by @texjer in #1285
- Search: an exact name match ranks first by @luniiya in #2160
- Channels: tint single colour channel views on the canvas with Show Channels in Color (#2385) by @mroxso in #2574
- Pixelate: CMYK Facet 13.7x faster, Lab halftone 5.0x faster by @excited-raccoon in #2588
- Tests: line-tables-only dev debuginfo, nextest GPU group, faster loop docs (#2204) by @davidmann4 in #2414
- Free Transform: refuse a locked layer up front, with Photoshop's message (#2585) by @vangel76 in #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 #2545
- Free Transform: keep the layer's place in the stack (#2439) by @Geljic in #2480
- Quick Selection: 3.5x faster CPU strokes with hybrid graph cuts by @excited-raccoon in #2436
- Image warp: grab anywhere on the grid, Ctrl-click to cut, Warp in the transform menu by @Jeremy8776 in #2621
- Layers panel: a dragged layer copies onto its own row and into the empty space below the stack (#1721) by @switch87 in #2525
- Properties ▸ Layer Mask: add Photoshop's Refine row (#2425) by @bitshiftza in #2639
- Ruler units keep their own decimal places (#2434) by @bitshiftza in #2476
- fix(docs): Linux build prerequisites only name Debian packages by @Erica4fr in #2437
- i18n(es): translate the Add Noise and Reduce Noise dialog controls by @Erica4fr in #2470
- Type: wire Use Smart Quotes for typed text (#204) by @reynold-hu in #2522
- Progress docs standard: ROADMAP, target-app parity, gaps, per-dimension parity docs by @echelon in #2696
- Keep As Is when reusing variable definitions by @Benziza in #2655
- File > Scripts > Browse: filter the picker to script files (#2452) by @MarekSpodBiedry in #2499
- PSD export: pad regenerated fill blocks to 4 bytes, as Photoshop does by @Sir-Starch in #2759
- PSD: warn on an unreadable Lr16/Lr32 layer block and save one layer list (#2700) by @vangel76 in #2709
- Channels: Delete with one channel targeted clears only that channel (#2720) by @vangel76 in #2730
- Fix Windows-only path expectation in save dialog test (#2745) by @itrycodinganditsbad in #2782
- Channels: Delete with an alpha channel targeted fills that channel (#2734) by @vangel76 in #2741
- Lasso: Free Transform drags work with the Lasso tool selected (#2153) by @vangel76 in #2766
- Copy and paste a single channel from the Channels panel (#2307) by @fabianghe in #2695
- Move tool: the drag's box and snapping follow the Auto-Selected layer (#2666) by @vangel76 in #2675
- Channels: Cut with one channel targeted clears only that channel (#2698) by @vangel76 in #2712
- Move tool: ⌘-drag temporary Move gets the drag box and snapping (#2681) by @vangel76 in #2684
- Smart Objects: converting several layers keeps them at the contents top level (#2648) by @vangel76 in #2651
- feat(prefs): add intermediate UI scale options from 80% to 95% by @Ni-zav in #2678
- Smart Objects: stacked layers sit at the contents top level (#2657) by @vangel76 in #2676
- Selection: moving a selection outline snaps its bounds, not the pointer (#2736) by @vangel76 in #2740
- Batch: a failed step inside a called action fails the file and the script (#2779) by @vangel76 in #2783
- fix(ui): make painting symmetry available across all themes by @Ni-zav in #2704
- Guides: ⌘-drag over a guide moves it with the selection tools too (#2690) by @vangel76 in #2699
- Keep the blend-mode preview between list rows (#2553) by @itrycodinganditsbad in #2612
- Lasso: ⌘-drag outside the selection moves the layer (#2725) by @vangel76 in #2737
- Esc deselects when no active operation needs cancelling by @mroxso in #2765
- Actions: record File › Save and Save As steps and replay them (#2032) by @vangel76 in #2746
- Batch: skip recorded view steps in batch and droplets (#2752) by @vangel76 in #2761
- fix(navigator): zoom the document with the mouse wheel over the preview by @Ni-zav in #2724
- Home screen: remove individual Recent entries (#2691) by @itsF4LCON in #2731
- Move tool: ⌘-drag with a painting tool floats the selected pixels from the control channel too (#2768) by @vangel76 in #2776
- Actions: double-click an action to rename it (#2032) by @vangel76 in #2769
- Brush cursor: Normal Brush Tip ring on the tip's real 50% contour (#2744) by @vangel76 in #2747
- fix(ui): prevent Layers opacity controls from overflowing narrow docks by @Ni-zav in #2325
- Image Size: Resample off keeps the pixel readouts honest (#2393) by @vangel76 in #2533
- Paint a pen tap at its own pressure, not full or zero (#1798) by @itrycodinganditsbad in #2757
- i18n: wrap remaining hardcoded UI strings for translation by @seldoms in #2467
- fix(compose, gpu): round dithered gradient fills to the document dept… by @kavishkashehan726-sudo in #2781
- Pencil/Eraser: round Pencil cursor and Eraser Pencil mode (#2662) by @vangel76 in #2694
- Linux: no false missing-library warning when the linker cache can't be read (#1144) by @MarekSpodBiedry in #2503
- Speed up large group merges (#1561) by @Elvis33LE in #2664
- Interface: wire Dynamic Color Sliders for the colour tracks (#204) by @reynold-hu in #2531
- Eraser: Block mode (#2770) by @vangel76 in #2778
- Smart filter edits: re-render from cached stages, in a background job by @twentymls in #2739
- Brush: Wet Edges acts on the whole stroke, not each dab (#2088) by @vangel76 in #2721
- Spot Healing: Create Texture keeps the film grain (#2104) by @vangel76 in #2762
- wasm: gate native-only constants so wasm32 builds without dead-code warnings (#2808) by @vangel76 in #2813
- Marquee hinting follows a rotated view like the release does (#2512) by @switch87 in #2732
- Place: wire Resize Image During Place into the implicit fit (#204) by @reynold-hu in #2538
- Free Transform frames the whole type layer; Distort/Perspective greyed for type (#2630) by @itrycodinganditsbad in #2701
- Tests: save-dialog expectations build their paths with Path::join, so they pass on Windows (#2745) by @mroxso in #2853
- docs: correct Photomerge roadmap status by @Elvis33LE in #2831
- Crop/marquee readout and Properties W/H/X/Y in the ruler unit (cm, mm, in…) by @llduyll10 in #2334
- Warp Text: Style and orientation come before Bend and the distortions (#2689) by @vangel76 in #2819
- Layers: Layer via Copy duplicates every selected layer (#2777) by @vangel76 in #2796
- Fix brush picker closing immediately on trackpad taps by @zi-ger in #2772
- Web: File › Open opens every selected file (#2802) by @vangel76 in #2807
- Status bar: show document dimensions in the ruler unit by @arthurdeka in #2618
- Workspaces: preserve the embedding host menu and rail flags by @arthurdeka in #2620
- Canvas honours Pixel Aspect Ratio Correction (#2594) by @itrycodinganditsbad in #2718
- Control: timeout errors name the likely causes (#2489) by @ahmedhosnypro in #2497
- Variables: applied text keeps the type layer's style (#2742) by @itrycodinganditsbad in #2785
- feat(prefs): add search across preference sections and settings by @Ni-zav in #2679
- ui-egui tests: drop the shadowing joined closure (fixes clippy on main) by @echelon in #2924
- Filter Gallery: an unknown option is a bad-params error (#2548 follow-up) by @xsvm in #2599
- Type: tabs advance to tab stops; Tab key types a tab (#1881) by @itrycodinganditsbad in #2733
- Smart Objects: Copy/Paste with no selection keeps the smart object (#2428) by @vangel76 in #2653
- Pencil: 1 px lines step pixel by pixel, no doubled corners (#2139) by @vangel76 in #2806
- ui-egui tests: restore the joined helper (fixes main) by @echelon in #2947
- Dock: drag a tab to reorder it within its group (#2272) by @itrycodinganditsbad in #2774
- Edit: Copy/Paste with no selection keeps type, shape and group layers (#2670) by @vangel76 in #2686
- feat(ui): hold Alt+Space to zoom out, as in Photoshop by @FinnNk in #2877
- Themes: add Breeze Light and Breeze Dark (#2276) by @Sir-Starch in #2335
- Move tool: highlight the layer Auto-Select would pick on rollover (#2834) by @vangel76 in #2843
- Font menus: show an Arabic sample for families that cover Arabic by @diax7 in #2535
- Layer > New > Background from Layer; the Background stays at the bottom (#2626) by @itrycodinganditsbad in #2663
- Tools: Single Row Marquee and Single Column Marquee (#2837) by @vangel76 in #2848
- feat(ui): live font preview on hover by @TssHack in #2431
- Fix Linux appearance changes lost during startup by @Sir-Starch in #2833
- Linux: a late first appearance reply repaints the idle window (#2798) by @itrycodinganditsbad in #2941
- Layer > Rasterize > Layer Style bakes effects; Rasterize Layer converts vector masks (#2245) by @itrycodinganditsbad in #2669
- Navigator preview fills its group; no scroll fade over dock panels (#2726) by @itrycodinganditsbad in #2818
- Release prep 0.7.0: Linux riscv64 tarball + version bump by @echelon in #2965
New Contributors
- @sawizzle made their first contribution in #2185
- @Benziza made their first contribution in #2152
- @crqch made their first contribution in #2146
- @vbasky made their first contribution in #2235
- @kmnkv1 made their first contribution in #2209
- @tropicaaal made their first contribution in #2226
- @kotulsky made their first contribution in #2189
- @MrCloudy2 made their first contribution in #2206
- @JohnnYoru made their first contribution in #2193
- @scottcampbelldata made their first contribution in #2257
- @vangel76 made their first contribution in #2562
- @KausBoss made their first contribution in #2411
- @vivekprojects-GIT made their first contribution in #2427
- @reneleonhardt made their first contribution in #2628
- @itrycodinganditsbad made their first contribution in #2610
- @itsF4LCON made their first contribution in #2448
- @bitshiftza made their first contribution in #2421
- @fabianghe made their first contribution in #2438
- @callmeBalloch made their first contribution in #2355
- @juswus2000 made their first contribution in #2498
- @kavishkashehan726-sudo made their first contribution in #2348
- @m6502 made their first contribution in #2454
- @Lyraedan made their first contribution in #2635
- @Erica4fr made their first contribution in #2430
- @Trade-Mottoes made their first contribution in #2568
- @Geljic made their first contribution in #2480
- @seldoms made their first contribution in #2467
- @twentymls made their first contribution in #2739
- @zi-ger made their first contribution in #2772
- @arthurdeka made their first contribution in #2618
- @ahmedhosnypro made their first contribution in #2497
- @FinnNk made their first contribution in #2877
- @diax7 made their first contribution in #2535
- @TssHack made their first contribution in #2431
Full Changelog: v0.6.0...v0.7.0
Original source All of your release notes in one feed
Join Releasebot and get updates from storytold and hundreds of other software products.
- Oct 10, 2026
- Date parsed from source:Oct 10, 2026
- First seen by Releasebot:Oct 13, 2026
PhotoCraft v0.6.0
photocraft adds a broad set of image-editing tools and workflow improvements, including native Affinity import, SVG and camera RAW support, enhanced selection and transform controls, and faster blur and mosaic effects. It also strengthens PSD compatibility, performance, and stability.
What's Changed
Original source
Motion Blur: 6x to 70x faster (one merged kernel applied over whole rows) by @Ar-maan05 in #902
Applying a text data set re-renders the type layer instead of blanking it (#990) by @ianswope in #1025
PSD: a spec-order mask record is not misread as Photoshop's order when that reading is implausible (#949) by @wstock in #1129
ui.window.open: an invalid document index is an error, not a side effect by @Elvis33LE in #1133
fix(ui): remember previously applied New Guide Layout values by @Ni-zav in #1261
fix(ui): allow removing the last polygonal lasso point by @Ni-zav in #1262
PSD export: write empty layer and mask channels as raw by @DWAA1660 in #1290
Fix #1286: Delete and Fill Selection on the selection tools' right-click menu by @bflatastic in #1331
Part of #1275: the Studio themes show the Move tool's Auto-Select toggle by @bflatastic in #1333
Fix #1323: a Distort corner stops before the box folds over by @bflatastic in #1332
chore: remove accidentally committed fb-*.log files and ignore *.log by @ArianPashae in #1155
Filter › Last Filter applies to the active layer, not the layer the filter first ran on (#1270) by @marcardenas in #1307
Gradient tool: a handle dragged past the 10% scale floor stops; the other handle stays put (#1243) by @marcardenas in #1306
fix(ui): prevent hidden guides from intercepting canvas input by @Ni-zav in #1268
fix(ui): display configured Quick Export format in File menu by @Ni-zav in #1269
fix(export): add WebP quality controls to Export Preferences by @Ni-zav in #1279
PSD text fill: keep FillFlag so Photopea-edited text keeps its fill, carrying #1240 by @ragedotdev by @bflatastic in #1368
Free Transform: W/H and X/Y fields reach large documents, carrying #1295 by @marcardenas by @bflatastic in #1340
Select › Modify: Apply effect at canvas bounds, carrying #1296 by @marcardenas by @bflatastic in #1339
Layers panel: hovering a blend mode previews it live on the canvas (#970) by @bflatastic in #1081
docs: craftrules is not public — say so instead of linking it (#493) by @bfenty in #779
i18n: fix pt-br label collisions (Feather/Diffuse, Liquify/Dissolve) by @RicSchonfelder in #833
Never crash on hostile numbers: LUT sizes, Quick Selection points, link group ids by @tanish2k09 in #869
A PSD layer with bounds but no channel data no longer aborts on a 360 GB allocation (#755) by @ianswope in #885
New Document: a Clipboard preset with the clipboard image's size by @jason4short in #891
Layer copies are numbered: "Layer 1 copy 2", not "Layer 1 copy copy" by @jason4short in #897
file.new at 300000x300000 no longer fills ~360 GB of tiles before returning (#705) by @ianswope in #900
Divide wide slice rectangles without integer overflow by @Ni-zav in #991
Saturate layer-slice margins at coordinate limits by @Ni-zav in #998
image.crop rejects an origin or far edge that can't be moved within i32 instead of panicking (#959) by @mnmlyw in #1013
Place Scale Marker: a document under 8 px tall returns an error instead of panicking (#932) by @mnmlyw in #1014
Timeline: out-of-range duration and fps are rejected, and stepping never panics (#1009) by @mnmlyw in #1023
Slices test: as_chunks for the fixed 3-wide rows (follow-up to #991) by @echelon in #1374
gradient.fill.stop rejects an out-of-range index with BadParams instead of overflowing (#958) by @mnmlyw in #1000
Link Layers allocates a group id that can't overflow (#961) by @mnmlyw in #1022
Median, Dust & Scratches: run time grows linearly with the radius, identical output at 8, 16 and 32-bit (#498) by @Ar-maan05 in #901
docs: refresh implemented tool status in the roadmap by @Streetblock in #1205
Options bar: the airbrush, smoothing options and symmetry buttons work (#1177) by @ChrisWaldenDev in #1214
Startup: preserve the GPU backend after windowing errors by @liowald in #1228
Brush Scatter: out-of-range amounts are rejected and dab rects can't overflow (#977) by @mnmlyw in #1034
Space untimed stroke segments by distance when Spacing is off by @jason4short in #1036
Variables: preserve Unicode when importing data-set CSV (#989) by @tiredIsa in #1062
image.analysis.recordMeasurements: refuse an area too large to measure instead of overflowing by @wstock in #1184
Edit Contents switches to the already-open contents document by @jason4short in #1037
Paste into a targeted layer mask (or channel) instead of making a new layer (#1035) by @bflatastic in #1078
Absolute colorimetric refuses a zero or non-finite media white (#972) by @wstock in #1125
Clone Stamp / Healing Brush: a far source is a bad-params error, not an out-of-bounds slice (#1111) by @wstock in #1165
Keep the Background position lock after Flatten Image by @CQMHV in #1238
Shape gradients: honour midpoints, opacity stops, offset, dither and align by @Elvis33LE in #1321
Holding a number key sets one digit's opacity, not a two-digit value (#953) by @ianswope in #1030
Layers panel: Alt-click the line between two layers creates or releases a clipping mask (#967) by @bflatastic in #1066
⌘/Ctrl-scroll pans the canvas sideways; scroll bars always shown (#635, #620) by @bflatastic in #1069
Nearest Neighbor: sample single source pixels on reductions without averaging (#1114) by @MokuLakshithReddy in #1141
Fix: Resolve issue where various file formats save incorectly as a .psd by @Cyanoxide in #1178
New adjustment and fill layers take the active selection as their mask (#1250) by @Pathos0925 in #1282
Tools leave hidden layers alone: painting or moving a hidden layer is refused (#571) by @bflatastic in #872
CI: ~1.6x faster runs (2.2x on Linux-only PRs), no more out-of-disk failures by @bflatastic in #1075
feat(ui): edit the Color panel's hex and RGB readouts by @roaldosulejmani in #1016
Deep EXR: write the flattened pixel by layout, not a fixed RGBA quadruple by @Elvis33LE in #1021
Eyedropper cursor: a pipette instead of the crosshair when sampling by @jason4short in #1028
Option flips Dodge/Burn and Blur/Sharpen for a stroke by @jason4short in #1038
CPU effect maps: key fill layers by their cached pixels, drop opacity/visible by @Elvis33LE in #1059
fix(cli): report missing font fallbacks in run, info and convert by @Ni-zav in #1299
Corpus: pin the deep OpenEXR test images and check them in CI (FILE-216-3, part of #216) by @tanish2k09 in #881
Selection tools: ⌘ moves like the Move tool; ⌘⌥ copies (pixels inside the selection, the layer outside) by @jason4short in #896
Layer comps: offsets that don't fit i32 are dropped with a warning instead of overflowing (#1017) by @mnmlyw in #1039
MCP doc_save: bridge mode refuses headless-only options instead of saving with defaults by @Elvis33LE in #1138
Move tool: layers with effects that overhang the canvas drag ~2x faster (#761, #128) by @bflatastic in #893
Artboards: coordinates past the 32-bit range are rejected instead of overflowing (#931) by @mnmlyw in #1032
Autosave: a thread that fails to start is reported, not a silent no-op by @Elvis33LE in #1124
Desktop: write log records to standard error and a rotating log file by @switch87 in #1143
fix: resolve edge-case crashes, unbounded allocations, and UI sync defects by @buivanvu94 in #1010
UI Scale Auto keeps the system's fractional scale on 4K (#1072) by @DWAA1660 in #1237
raw: decode Nikon compressed NEF (lossless + lossy) by @switch87 in #1310
Fix Drop Shadow angle synchronization and add a radial dial by @DWAA1660 in #882
PSD notes: an icon position near i32::MAX saturates on save instead of overflowing (#939) by @wstock in #1176
Improve Color Picker layout and spacing (#1188) by @shorbank in #1196
Toolbar: the header chevron switches between one and two columns (#1197) by @prekabreki in #1200
Find host CJK fonts inside Flatpak by @Ni-zav in #1204
Select › Color Range: Photoshop's Sampled Colors model, Subtract from Sample and the eyedropper on the image by @Unemars in #1239
PSD: preflight pattern allocations and reuse decoded buffers by @Streetblock in #1242
Fix #1271, fix #1316: Preferences › Interface › System Title Bar by @bflatastic in #1344
A non-Unicode command-line argument is a usage error, not a startup panic (#1108) by @wstock in #1168
Fix transform cancellation undoing the wrong document by @CQMHV in #1170
Fit Artboard on Screen: no i32 overflow for a board with large coordinates by @wstock in #1181
filter.cameraRaw: refuse an area too large to develop instead of overflowing by @wstock in #1183
PSD plane shuffles in bands; the document histogram computes off the UI thread by @Elvis33LE in #1185
Add Polish translation by @Powiadomienie in #1192
Layer style: an Outside stroke at Fill below 100 % leaves the interior clear by @llduyll10 in #906
Fix(text): keep tiny EngineData reals parseable (#979) by @cold-atom in #1085
Delete with nothing selected deletes the selected layers, of any kind (#1077) by @metzmehard in #1087
Keep empty selections empty for subtract and intersect by @Ni-zav in #1190
Filters respect layer locks; render filters and Fill Path refuse a pixel-locked layer (#1102) by @prekabreki in #1195
Relight: halo covers the blur reach, no silent no-op above 8 MP, box-Gaussian blur (follow-up to #735) by @mvanhorn in #895
Help › Search: clicking the search field keeps the menu open by @jason4short in #1027
Preferences: reset a single shortcut or menu colour override (#988) by @tiredIsa in #1064
Hand tool: 100%, Fit Screen and Fill Screen buttons, carrying #1314 by @rozaqabdul656 by @bflatastic in #1363
SVG opens as shape layers and places as a vector smart object (FILE-215-9, part of #215) by @ljkx in #1305
Show Clone Stamp source preview inside the brush cursor by @Lime-3010 in #1042
Clear, Cut and Image › Adjustments refuse a pixel-locked layer (#1103) by @prekabreki in #1194
PSD export parallel layer channels; shared proxy cache; banded CMYK export by @Elvis33LE in #1230
Optimize Mosaic by averaging each cell once per tile (45-117x speedup) by @optimalbytee in #1294
Open camera raws in Camera Raw first (Open / Cancel) by @switch87 in #1309
ORF: a file cut short inside IFD0 is malformed, not the compressed variant (#1008) by @wstock in #1090
Refuse to save a .pcraft holding a NaN or infinite float, instead of writing one that never opens again (#1101) by @wstock in #1172
channel.merge: reject a repeated source index instead of closing an unrelated document by @wstock in #1179
layer.delete keeps a document's last layer (#1107) by @prekabreki in #1189
Paint Bucket and Gradient keep alpha on a transparency-locked layer (#1104) by @prekabreki in #1193
Document tabs: elide and overflow into a » menu when they are too many (#1276) by @LordFarquaadtheCreator in #1293
Embed PhotoCraft CLI Windows icon and version metadata by @mvanhorn in #889
Fix corrupted reduced canvas previews with separate mip render targets by @GamerWil26 in #892
Fix Classic Gradient transparency and open the Gradient Editor by @jerrykimo in #905
i18n(pl): translate the strings that landed alongside the Polish catalog by @echelon in #1426
Regenerate docs/scorecard.md (139 preferences after #1016) by @echelon in #1435
Fix #1272: a reassigned shortcut runs its new command by @bflatastic in #1330
Pen tablets: the pen works on Wayland (through Xwayland), macOS pressure fixes (#639, #759) by @bflatastic in #1070
Content-Aware Fill: size error instead of a panic for a huge selection, carrying #1024 by @mnmlyw by @bflatastic in #1409
Fix radial blur sampling density (#515) by @agorevski in #658
Right-click Brush Preset picker picks presets like Photoshop (#615, #1031) by @bflatastic in #1080
Brush tests: seams, hard edge, zero scatter and ABR tip colour (#213) by @reynold-hu in #1221
Feature: Add incrementation with up/down arrow keys on numeric fields by @Cyanoxide in #1326
codecs README: lossy WebP is written by the built-in VP8 encoder (#1352) by @ragtux in #1396
Perspective Warp: replacing the planes mid corner drag ends the drag (#952) by @kayrockscreenprinting in #1398
Puppet Warp: an expansion that empties the mesh is refused, not a panic (#951) by @kayrockscreenprinting in #1410
Vibrance: Photoshop's Saturation and Vibrance, measured (linear light, 0.288 R + 0.712 G grey) by @Unemars in #1418
Select › Modify refuses a negative radius instead of clamping it (#993) by @DWAA1660 in #1274
Rulers: right-click to switch the ruler unit by @jeremyfry in #1235
Fix/1350 preserve active on save by @shmuelbiller1 in #1416
Zoom: the Zoom tool's click honours Zoom Clicked Point to Center (#204) by @reynold-hu in #1241
Preferences: show Zoom Clicked Point to Center now that the Zoom tool reads it (follow-up to #1241) by @echelon in #1480
feat(ui): auto-scroll Layers panel during layer drag and drop by @Ni-zav in #1298
Preferences › Performance › Low Resolution Previews: live previews at full resolution when it's off by @Unemars in #1247
Eyedropper: the comparison ring while sampling (#213) by @reynold-hu in #1227
Type Tool: Ctrl/Cmd temporary transform handles while editing (#1091) by @remidesbois1 in #1202
i18n: translate the Fill dialog, layer style contours and Image Size "(was …)" by @ArthurViniciusBA1 in #1291
Pipette cursor test: Windows draws the precise crosshair itself (main is red on Windows) by @bflatastic in #1437
Keep the active document when closing another tab by @CQMHV in #1148
Cancel transforms in their originating document, carrying #1170 by @CQMHV by @bflatastic in #1390
Move several selected layers into a group in one step, carrying #1297 by @Ni-zav by @bflatastic in #1403
Regenerate generated docs after the latest community merges by @echelon in #1489
undo/redo report the step's damage instead of recompositing the whole canvas by @Elvis33LE in #810
Color Lookup: keep the .cube input domain and reject the ones we cannot apply by @Elvis33LE in #1130
ui.set validates every field before applying the first one by @Elvis33LE in #820
Red Eye tool in the J-group flyout by @mvanhorn in #1084
Layered TIFF: the review changes of #672 (keep unknown blocks with their byte order, io behind the engine, fixture attribution) by @ljkx in #835
Advanced Blending: knockout, blend as group, transparency shapes, masks hide effects (FILE-215-16, part of #215) by @ljkx in #903
I18N: Localize startup notices and welcome text by @txiki739 in #1094
Lasso: Alt clicks add straight segments, releasing Alt closes the outline by @jason4short in #888
Layers panel: Alt-drag a row to copy the layer there, as in Photoshop by @bani4kaskashka in #1216
fix(ui): wrap New Document preset titles inside their cards by @SckraT in #1401
PSD type layers without pixels are rendered on import; PostScript font names resolve to the installed family by @diegochagas in #1406
Curves: add black, gray, and white point eyedroppers by @mralonsocorona in #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 #1342
Add layer and group color labels (#1283) by @shorbank in #1289
Color Balance: Photoshop's slider double-click reset, wheel and arrow steps, Alt+Cancel Reset, Properties Reset and history by @Unemars in #1256
Fix #1248: Create and Release Clipping Mask act on every selected layer by @bflatastic in #1392
Fix #1288: keep edits to a video frame when the playhead moves by @bflatastic in #1395
Dropdowns take the arrow keys once open, carrying #1324 by @rozaqabdul656 by @bflatastic in #1341
Move tool moves the selected pixels when there is a selection (#578) by @bflatastic in #1068
Fix #1371: read large macOS display ids, keep ICC bytes out of the error by @bflatastic in #1412
Fix #1354: the macOS menu bar is modal under dialogs, like shortcuts by @bflatastic in #1413
Fix #1387: the Type tool's font, style and size controls show in every theme by @bflatastic in #1414
Selection tools: ⌥ with nothing selected draws a new selection (follow-up to #1190) by @bflatastic in #1364
Fix #1380: the web build asks before leaving the page with unsaved work by @bflatastic in #1424
Camera Raw opens in a window of its own by @switch87 in #1361
Export As: a scale that changes only the height is applied (#1353) by @ragtux in #1394
New Document: a size typed in millimetres or another physical unit keeps its digits (#1147) by @MarekSpodBiedry in #1378
PNM: the file, not the header, bounds what a decode reserves (#1110) by @kayrockscreenprinting in #1365
Select › Modify refuses a radius below the dialog's minimum, carrying #1391 by @MarekSpodBiedry by @bflatastic in #1485
Edit › Toolbar: hidden tools leave the toolbar, carrying #1376 by @MarekSpodBiedry by @bflatastic in #1486
Paint Bucket: All Layers samples the visible image, carrying #1386 by @harrisonoconnorhover by @bflatastic in #1487
Swatches: user swatch model with .aco/.ase import and export (FILE-215-14, part of #215) by @ljkx in #886
Regenerate generated docs after the latest community merges by @echelon in #1518
Toolbar test: qualify egui::Vec2 (ui-egui tests don't compile on main) by @echelon in #1519
Large document: a notice explains a slow CPU fallback redraw (#1015) by @ianswope in #1427
i18n: split "Light" — font weights get their own context, Camera Raw keeps the panel term by @Elvis33LE in #1061
Pattern Stamp tool in the S-group flyout by @mvanhorn in #922
Fix #1229: the Polygonal Lasso tool removes its last vertex on Backspace (follow-up to #1262) by @bflatastic in #1338
Document tabs: elide and overflow into a » menu, carrying #1293 by @LordFarquaadtheCreator by @bflatastic in #1367
Fix #1381: selecting type on Wayland no longer deletes it by @bflatastic in #1421
File dialogs no longer freeze or crash the app (#673, #574) by @bflatastic in #1071
Fix #1357: every Layer Style effect row shows its checkbox by @bflatastic in #1422
Swatches import/export and the Export As test use the async file dialog (main doesn't compile) by @echelon in #1528
Color Range: improve previews, sampling and eyedropper responsiveness by @abc2cb in #1377
Surface Blur: 4x to 20x faster on 16-bit and 32-bit layers, carrying #1095 by @tanish2k09 by @echelon in #1529
Regenerate generated docs after the latest community merges by @echelon in #1530
type.create: an unknown or out-of-range kerning is a bad-params error, as in type.edit (#994) by @MarekSpodBiedry in #1303
Control server: a bad JSON reply carries "id": null like every other unknown-id error (#1006) by @MarekSpodBiedry in #1304
Show Extras Options: checkboxes read and set the Show flags they name (#957) by @MarekSpodBiedry in #1320
Numeric fields: arrow-key steps never clamp with a reversed or NaN range (follow-up to #1326) by @bflatastic in #1450
New Document: preset titles wrap inside their cards, carrying #1401 by @SckraT by @bflatastic in #1452
Fix startup panic when UI Font Size is not Small by @syd168 in #1467
Clone Stamp: live stroke, strokes start on the press, source preview under the brush by @jason4short in #1026
Wayland: drop notice offers paste and the XWayland command for this install (#338, #386) by @bflatastic in #1073
Live strokes for the History Brush, Healing Brush and the dab tools by @jason4short in #1040
Non-Unicode arguments: translate the desktop notice (follow-up to #1168) by @bflatastic in #1359
Fix #1313: Tab hides all panels, Shift+Tab the panel dock, as in Photoshop by @bflatastic in #1388
Selection tools: arrow keys nudge the selection outline (#1428) by @davidmann4 in #1502
Mesh warp of a gray surface writes the old and warped regions separately (#995) by @kayrockscreenprinting in #1500
Apply the transform when another layer is selected (#1400) by @davidmann4 in #1496
Preserve document depth when splitting stroked vector shapes by @harrisonoconnorhover in #1495
Puppet Warp: pins that stretch the content too far are refused (#1019) by @kayrockscreenprinting in #1492
Canvas: checker moves with the image; pixel grid from 500%, over pixels only by @Jeremy8776 in #1491
Liquify: Alt reverses Twirl and swaps Pucker/Bloat, as in Photoshop (#1442) by @davidmann4 in #1484
.pcraft: a tile index outside the i32 pixel range is a corrupt file (#938) by @kayrockscreenprinting in #1483
Camera RAW: a measured Nikon D4 profile (image area, white level, colour matrix, tone curve) by @Unemars in #1475
fix(psd): write Photoshop-compatible Photo Filter adjustment blocks by @Ni-zav in #1473
Speed up wide Motion Blur with adaptive FFT convolution by @optimalbytee in #1471
Crop: an explicit rectangle past 300000 px per side is refused (#960) by @kayrockscreenprinting in #1470
[P1] Enforce PNG text metadata decode limits by @Streetblock in #1460
Keep Arbitrary Rotation previews visible on the GPU canvas by @harrisonoconnorhover in #1459
Fix #1543: oversized Satin and Bevel & Emboss sizes render instead of panicking by @bflatastic in #1563
Fix #1544: Image Size refuses a resample past the raster budget; resampling writes bands as it goes by @bflatastic in #1569
Docker web deployment by @fplachecinski in #1334
macOS DMG: branded window background and icon layout by @XusBadia in #1201
Fill and adjustment layers take the active path as their vector mask, carrying #1539 by @davidmann4 by @bflatastic in #1570
docs: MCP tool names and job tools, codec README JPEG metadata and deep EXR by @bflatastic in #1573
Fix #1531: duplicate artboards beside the original, drag boards with the Move tool by @bflatastic in #1584
Free Transform: the reference point moves with the box when scaling (#1329) by @davidmann4 in #1535
MCP bridge: do not replay edits after a lost reply (#1007) by @harrisonoconnorhover in #1527
Control: reject queued requests after their reply deadline (#1109) by @harrisonoconnorhover in #1525
Undo: a paint stroke's undo keeps the painted layer active (#1356) by @davidmann4 in #1523
PSD: warn that Color Lookup tetrahedral interpolation is saved as trilinear (#1347) by @davidmann4 in #1515
TIFF: alpha after an unspecified extra sample opens transparent (#1349) by @davidmann4 in #1513
Crop tool: show the pixels past the canvas while a frame is edited, as Photoshop does by @Unemars in #1508
Help › Search: keep the field focused after a click opens Help (#1447, #1438) by @davidmann4 in #1507
Font menu keeps its height and focuses its search field (#1369) by @davidmann4 in #1505
Divide Slice: one division makes at most 10000 parts (#1020) by @kayrockscreenprinting in #1504
Canvas: a huge view centre draws the selection outline without overflow (#980) by @kayrockscreenprinting in #1441
Plug-ins: a missing parameter's default is clamped to the declared min..max (#1012) by @MarekSpodBiedry in #1443
Plug-in names reject bidi controls, zero-width spaces and other invisible format characters (#1011) by @MarekSpodBiedry in #1444
Opening a file with different horizontal and vertical resolutions says the vertical one is not kept (#1018) by @MarekSpodBiedry in #1445
Control channel: ui.click rejects a count above 256 instead of queueing unbounded input (#982) by @MarekSpodBiedry in #1446
Fix Transform Again action playback applying the transform twice by @harrisonoconnorhover in #1440
MCP previews: reject unsupported document indices (#1005), carrying #1533 by @harrisonoconnorhover by @bflatastic in #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 #1601
Faster blur and resize accumulators; release closed-document textures, carrying #1511 and #1509 by @GamerWil26 by @bflatastic in #1602
fix(ui): allow Delete and Backspace shortcuts to delete layer when a widget is focused by @buivanvu94 in #1565
Windows: use native bitmap cursors for brush tips by @mrjeye in #1160
Add full Type Color Picker and screen eyedropper with magnification by @abc2cb in #1232
i18n: fix pt-br collisions (View/Preview, Flip/Invert, Light/Thin, Warp/Distort) by @ArthurViniciusBA1 in #1292
Greek localization by @Camthalion77 in #1562
Dodge and Burn tone each pixel once per stroke by @jason4short in #1041
full_res_preview test: wait again when WARP outlasts egui_kittest's 10 s render wait (Windows CI) by @bflatastic in #1593
i18n(el): translate the screen color picker strings (main red since #1232 + #1562) by @echelon in #1618
History: count retained tiles incrementally below the byte budget by @Elvis33LE in #1157
feat: add saved New Document presets by @0x6Ason in #1516
i18n(el): translate the saved New Document preset strings (main red since #1516 + #1562) by @echelon in #1620
Improve Actions editing, nested playback, and function-key shortcuts by @GamerWil26 in #1093
PSD save: stream Lr16/Lr32 layer blocks into the output by @Elvis33LE in #1158
Speed up exact Shape Blur convolution by @optimalbytee in #1566
Command lookup: index registered and shell command IDs by @Elvis33LE in #1156
i18n(el): translate "Pick a screen pixel or press Esc to cancel" (main's xtask i18n test) by @bflatastic in #1623
Pipette cursor test: Windows reports the precise crosshair with its bitmap (Windows CI red since #1160) by @bflatastic in #1626
Rotate View tool (#1611 by @mvanhorn) and ui_set describes every field (#1599 by @kubuntugamer), carried by @bflatastic in #1633
Rotate View tool in the Hand flyout by @mvanhorn in #1611
Grammatical articles in layer diagnostics (#1549) and invalid document index errors (#1557), carrying #1571 and #1586 by @buivanvu94 by @bflatastic in #1634
A pathless PSD or PSB save leaves the document clean (#1547), carrying #1589 by @kubuntugamer by @bflatastic in #1635
fix(io): layered TIFF export warns that retained EXIF will be dropped by @kubuntugamer in #1597
Open Apply Image and Calculations dialogs by @rozaqabdul656 in #1596
fix(raw): a DNG with only DefaultCropSize is cropped from the active area's origin (#950) by @SBaksa in #1595
Layers panel: pop-up sliders for Opacity and Fill by @dhiorns15 in #1592
Snap the Marquee drag outline to whole pixels by @hideoneric in #1587
fix(autosave): report background write failures and retry unchanged revisions by @shmuelbiller1 in #1577
fix(engine): finish background job bookkeeping on its document by @shmuelbiller1 in #1572
[P2] Invalidate combined masks after pixel edits by @Streetblock in #1645
Layers panel: ⌥-click on the line between layers, measured against Photoshop (follow-up to #1066) by @Unemars in #1642
macOS: quit with terminate:, not by closing the window (#1575, #1458) by @brennanMKE in #1624
Keep legacy PSD text origins visible when editing by @rozaqabdul656 in #1560
Keep a brush per painting tool, as in Photoshop (#218), carrying #1629 by @agincel by @bflatastic in #1685
Linux: display server preference (X11 / XWayland) so file drops work, carrying #1319 by @switch87 by @bflatastic in #1686
fix(scorecard): mark the #204 preference rows done; their readers, allowlist and test exist (#1002) by @MarekSpodBiedry in #1694
fix(control): ui.inspect reports the documented view preferences (#1003) by @MarekSpodBiedry in #1695
fix(engine): Layer via Copy and Cut deselect, as Photoshop does (#1096) by @MarekSpodBiedry in #1696
fix(engine): layer bounds drop the area a selection transform moved pixels out of (#1097) by @MarekSpodBiedry in #1697
fix(ui): the Photoshop-style status bar shows messages with no document open (#1567) by @MarekSpodBiedry in #1698
fix(ui): the Navigator keeps its image during a live paint stroke (#1631) by @MarekSpodBiedry in #1699
fix(engine): Move tool Auto-Select clicks through fully locked layers (#1641) by @MarekSpodBiedry in #1701
fix(io): a CMYK Channel Mixer using the black source stays raw in CMYK documents (#940) by @MarekSpodBiedry in #1702
fix(io): keep a PSD Anno block that cannot be read instead of deleting it on save (#944) by @MarekSpodBiedry in #1703
fix(automation): bridge doc_save without path writes back like headless (#946) by @MarekSpodBiedry in #1704
fix(xtask): the scorecard's performance summary no longer counts not-run scenarios as tracked (#947) by @MarekSpodBiedry in #1705
fix(ui): Keyboard Shortcuts dialog rejects a malformed overrides map instead of wiping shortcuts (#956) by @MarekSpodBiedry in #1707
fix(compose): a Precise inner glow from the centre is no longer blank (#966) by @MarekSpodBiedry in #1708
fix(engine): prefs.set and prefs.reset apply the text blending gamma (#987) by @MarekSpodBiedry in #1709
docs: README tool count and list match Tool::ALL (#996) by @MarekSpodBiedry in #1710
fix(compose): don't clip Add and Divide at 1 in 32-bit documents by @hideoneric in #1722
Layered TIFF: an Intel-order file opened with every layer hidden (blend-if ranges swapped) by @llduyll10 in #1712
Fix small caps rendering across fonts by @rozaqabdul656 in #1644
CR2: read ColorData's as-shot white balance as words by @Elvis33LE in #1640
AF.3: native Affinity import (layers, artboards, vectors, text, images), carrying #1607 by @callmeBalloch by @bflatastic in #1778
Clarify that muda is a native menu crate, not Tauri by @bflatastic in #1786
fix(docs): control-protocol Preferences Apply and OK are refused over control (#1555) by @buivanvu94 in #1678
docs(control): align method signatures with accepted parameters (#1550) by @Ni-zav in #1674
docs(mcp): grant scoped file roots in headless registration examples … by @Ni-zav in #1673
docs: explain Windows source build prerequisites and app-control failures by @yearth in #1692
fix(i18n): refine 32 German UI translations by @Streetblock in #1791
Retouch tools: test the stroke-point bound on all eleven commands (#976) by @kayrockscreenprinting in #1784
CI: no macOS on PRs or main; macOS is built and tested by releases by @echelon in #1820
Liquify: a stroke segment walks only the dabs that can reach the field (#937) by @kayrockscreenprinting in #1736
fix(ui): Esc ends a Pen path and keeps it instead of discarding it (#1769) by @Duke242 in #1787
fix(ui): prevent selection tracing from blocking background job controls by @Ni-zav in #1690
Equalize, Average and Clouds edit the targeted channel, not the layer (#935) by @kayrockscreenprinting in #1777
View › Show › Target Path hides the path outlines (part of #1119) by @kayrockscreenprinting in #1794
fix(canvas): isolate rotation previews to the active document with headless tests by @Ni-zav in #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 (#19 - Oct 8, 2026
- Date parsed from source:Oct 8, 2026
- First seen by Releasebot:Oct 13, 2026
PhotoCraft v0.5.0
photocraft releases a major update with new editing tools, smarter text and layer workflows, expanded PSD, TIFF, HEIC and WebP support, faster filters, improved automation, and broader language support.
What's Changed
- Add rendering modes and CPU fallback recovery by @TheSeanLavery in #434
- Type layers keep their name in step with their text (#483) by @mnmlyw in #501
- Unsaved-changes prompt: (D)on't Save / (C)ancel / (S)ave keys, Tab order by @sommerper in #533
- Layer Style: the shadow/bevel Angle slider now moves the light (#350) by @agorevski in #411
- Color Picker: sample colours from the image with a pipette by @carterwsmith in #508
- Polygonal Lasso: double-click closes the polygon; a new polygon replaces the selection in one step by @rosematcha in #361
- Type: the Color panel, Swatches and Color Picker recolor selected text by @rosematcha in #364
- Free Transform: Undo steps through the transform; handles are easier to grab by @rosematcha in #365
- 32-bit documents: Levels don't clip the input and output ranges by @floflo777 in #403
- rustfmt discard_ui.rs (CI Format step red since #533) by @echelon in #597
- Smart objects keep their four-corner (Distort / Perspective) placement by @jason4short in #426
- feat(ui): add bounded Liquify redo history by @agorevski in #435
- Lasso inside liquify mode , with hotkeys L, alt , ctrl+i, ctrl+h for … by @siraxe in #453
- Expose the Mixer Brush as a UI tool (#213) by @agorevski in #433
- Control protocol docs: file.open/file.save are refused over --control (#379) by @floflo777 in #391
- docs: sync scorecard with implemented behavior by @arpitkjaiswal in #348
- Focus PhotoCraft for unsaved close prompt by @TheSeanLavery in #547
- PSD: read/write the artboard lock at Photoshop's lspf bit 3 (#395) by @agorevski in #406
- Show active ICC profile in the status bar (#321) by @agorevski in #432
- Clarify integer and float bit-depth labels (#324) by @agorevski in #428
- Wayland: explain native file drag-and-drop limitation (#386) by @agorevski in #430
- Preferences › Interface: Show bounding box when dragging layer by @sommerper in #484
- Hide unconfigured layer effects from Layers panel by @agorevski in #559
- Paste: a copied image file pastes its pixels (part of #338) by @Ar-maan05 in #384
- Content-Aware Scale: 13x faster seam removal, bit-identical output (part of #211) by @Ar-maan05 in #385
- PSD: read smart-filter masks (FEid) with one section per smart object by @EthanSuquet in #396
- Open documents in bounded reads, with a clear out-of-memory error (#375) by @ljkx in #401
- Camera Raw: interactive histogram, clipping warnings and scopes (part of #215) by @tiredIsa in #407
- Add the Patch tool with a live preview (#213) by @alexanderalber in #381
- Add blend modes to the Gradient tool by @TheSeanLavery in #543
- Start context-menu parity across canvas, paths, and document tabs by @TheSeanLavery in #556
- i18n: complete Simplified Chinese catalog and localize brush sections by @flyyangX in #359
- i18n: add French (fr) UI translation by @leblanc-simon in #410
- i18n: "id" indonesian translation by @trokute in #449
- Report per-language UI translation coverage (#220) by @agorevski in #427
- Add style warp splits and grid presets by @juansebsol in #388
- Add Edit Contents to the Smart Object context menu by @CQMHV in #599
- Edit type layers by double-clicking their thumbnails by @CQMHV in #598
- Monitor profile auto follows each window's display; what is applied is visible (#569) by @ha1des in #591
- feat(i18n): add Korean and live language switching by @neko233-com in #582
- Add fixed UI scale steps from 75% to 300% by @Sirsyorrz in #611
- algo: fix flaky cancel/progress test - tile workers report out of order by @Elvis33LE in #609
- Apply Image onto a transparent layer no longer turns it black by @cristianmoroaica in #607
- Remember desktop window and panel sizes across restarts by @Webificio in #587
- monitor_profile test: Unix only (fixes Windows CI after #591) by @echelon in #633
- README: remove a stray "ArtCraft" line before Star history by @echelon in #636
- Open HEIC/HEIF photos (#355) by @ljkx in #372
- Rename PrintCraft to PdfCraft by @echelon in #766
- Persist migrated presets with preferences by @CQMHV in #728
- Select Linked Layers excludes an unrelated active layer by @CQMHV in #764
- fix(cms): check LUT declared sizes before arithmetic by @agorevski in #725
- i18n: add German (de) UI translation (#309) by @Elvis33LE in #663
- fix(ui): search palette: the Enter that opens a dialog no longer closes it by @Mawfyy in #640
- scorecard: BUG-203 (atomic saves) is done - flip the stale rows (#203) by @Elvis33LE in #687
- layer.showOnly: ⌥-click a layer's eye to show only that layer by @jason4short in #665
- Text fields stop resetting the input method every frame, so keys no longer repeat endlessly on Wayland (#585) by @ianswope in #723
- fix(color): match Photoshop blend corner values by @agorevski in #699
- Box Blur: up to 26x faster at large radii (same running-sum boxes as Gaussian Blur) by @Ar-maan05 in #628
- Layers panel: drag down the eyes to show or hide layers; empty eye when hidden by @jason4short in #666
- Minimum / Maximum (Squareness): up to 37x faster at large radii, bit-identical output by @Ar-maan05 in #630
- Surface Blur: 13x to 40x+ faster on 8-bit layers (sliding histogram) by @Ar-maan05 in #631
- Free Transform: picking another tool applies the transform by @rosematcha in #732
- Layer › Remove Background: one-step subject cutout (layer.removeBackground) by @mvanhorn in #734
- Brazilian Portuguese UI translation (pt-br) by @gangldiego in #700
- fix(linux): AppImage registers its desktop entry and icon on launch by @Mawfyy in #617
- macOS: menus open on press; only the title bar's free gap drags the window by @jason4short in #669
- Color panel: click a chip to edit that color, double-click to open the Color Picker (#655) by @rosematcha in #664
- Fix #497: group type edits and renames in undo by @agorevski in #652
- Numeric fields evaluate typed arithmetic by @rosematcha in #726
- Transform modes: Skew / Distort / Perspective as real modes; legacy corners as a preference by @jason4short in #671
- document.pixel: no panic at x or y = i32::MAX, and no wrap-around past it by @Ar-maan05 in #629
- Fix #570: Shift-click connects brush strokes by @agorevski in #654
- Type: a forced line break (U+0003) breaks the line instead of drawing a box by @EthanSuquet in #644
- Fix multi-file open dialog (#595) by @agorevski in #657
- Fix Hue/Saturation range editor drag panic by @agorevski in #727
- JPEG export no longer fails when the document's XMP is over 64 KB by @EthanSuquet in #645
- Improve Korean terminology and dynamic UI translation coverage by @kijoong-kim in #604
- Image Size keeps the canvas border opaque instead of fading it by @EthanSuquet in #646
- Fix #695: validate Layer Style effect fields by @agorevski in #729
- type.edit: a reversed runs range is a bad-params error, not a panic (#714) by @mnmlyw in #754
- Arbitrary rotation starts at the ruler line's straightening angle by @rosematcha in #660
- Prevent "Export As" from saving webp files as "*.webp.psd" by @Cyanoxide in #724
- rustfmt xtask/src/i18n_coverage.rs (Format red on main since #663 + #700) by @tanish2k09 in #798
- Find and Replace Text: no panic searching a non-type active layer (#703) by @mnmlyw in #762
- Apply the Interface UI Font Size preference by @CQMHV in #616
- codecs: decode deep OpenEXR (deepscanline/deeptile), composited flat or structured by @Elvis33LE in #642
- Selections: drag to move the outline; ⌘-drag floats the selected pixels (engine commands) by @jason4short in #686
- Filter › Render › Relight: redirect a photo's lighting by @mvanhorn in #735
- rustfmt crates/codecs/tests/deep_exr.rs (Format red on main since #642) by @tanish2k09 in #804
- Fix document run and ID overflow (#684, #685) by @agorevski in #749
- Fix bridge preview PNG budgeting by @agorevski in #753
- Clamp Variables data-set indices from control input by @Ni-zav in #772
- Fix ui.set brush size command journaling by @agorevski in #744
- Fix TIFF WhiteIsZero and BigTIFF orientation by @agorevski in #746
- Shapes: a hairline vector stroke no longer darkens the shape's edge pixels by @EthanSuquet in #397
- Spot Healing: Sample All Layers heals onto an empty layer (#731) by @rosematcha in #769
- fix(i18n): follow native UI languages on first launch by @neko233-com in #661
- Support Alt-held polygon segments in the freehand lasso by @jerrykimo in #711
- Type: hitTest, caret and navigate commands so agents can edit text by position (part of #219) by @mvanhorn in #623
- Korean labels for Relight's Ambient and Warmth options by @tanish2k09 in #811
- fix(raw): validate DNG default crop bounds by @agorevski in #745
- Fix vector pixel bounds overflow by @agorevski in #747
- Layered TIFF: open and save Photoshop layer data in TIFF files, in either byte order (part of #215) by @ljkx in #672
- Reject overflowing slice rectangles by @Ni-zav in #768
- Fix hostile PSD pattern geometry by @agorevski in #743
- Bound paint stroke work (#678, #679) by @agorevski in #751
- Actions: actions.record/stop/play/list commands for agents and the CLI (part of #219) by @mvanhorn in #622
- Fix text ink bounds overflow by @agorevski in #750
- Repair corrupt directory-save objects by @agorevski in #752
- fix(automation): close ambient filesystem authorization gaps by @agorevski in #763
- rustfmt crates/ui-egui/src/canvas.rs (Format red on main since #711) by @echelon in #819
- Flat exports embed no document XMP by default; Export As gains a Metadata choice (#647) by @Elvis33LE in #733
- pcraft directory saves: re-verify a rolling share of cached objects; stronger file signature by @tanish2k09 in #821
- rustfmt crates/ui-egui/src/export_dialog.rs (Format red on main since #672 + #733) by @tanish2k09 in #822
- Follow-ups to #665, #666, #734: Photoshop's mask-only Remove Background, one-step eye sweep, no-clone Show Only by @bflatastic in #824
- Headless saves write a flat TIFF unless they ask for layers by @tanish2k09 in #825
- Dialog buttons follow the OS order; Windows/Linux unsaved-changes prompt asks Yes / No / Cancel (#627, #776) by @bflatastic in #826
- Layers panel: a double-click just above or below a layer name renames it (#651) by @rosematcha in #823
- Open .psdt templates as new untitled documents by @rosematcha in #807
- fix(algo): blur small sigmas instead of silently no-oping (#706) by @bfenty in #783
- fix(algo): gallery colour injection covers Colored Pencil and Neon Glow (#709) by @bfenty in #805
- fix(algo): HDR Toning gamma follows its documented direction (#710) by @bfenty in #801
- fix(engine): keyboard shortcut bulk set reports in-call clashes (#719) by @bfenty in #799
- Auto-Align Layers: the dialog no longer sends reference 0 (#674) by @rosematcha in #795
- fix(engine): view.newGuideLayout rejects absurd column/row counts (#704) by @bfenty in #797
- Windows DX12: never load a foreign dxcompiler.dll from PATH (#712) by @bflatastic in #817
- Cancel stale Warp drags when the mesh changes by @Ni-zav in #774
- Handle Stack Mode sources with no visible layers by @Ni-zav in #770
- Camera Raw: read and write settings as a live PSD Smart Filter (part of #215) by @tiredIsa in #459
- fix(engine): clone source_rect clamps huge mapped coordinates (#716) by @bfenty in #809
- Geom: Rect::width and height no longer overflow on i32-extreme rects (#675) by @Luna161 in #808
- New Document: changing Resolution keeps the physical size when a physical unit is shown (#758) by @Luna161 in #818
- Reject geometry params that would silently wrap through i64->i32 narrowing by @Elvis33LE in #803
- ⌘⌥⌃-click on the canvas selects the topmost layer under the pointer by @jason4short in #813
- Help › Search: find any menu command by name by @jason4short in #815
- i18n(ko): drop the duplicate Ambient and Warmth rows (main red since #811 + #824) by @echelon in #834
- rustfmt crates/engine/tests/hdr_gamma_direction.rs (Format red on main since #801) by @echelon in #842
- Copy works on smart object, type and shape layers (#541) by @bflatastic in #841
- Add the Content-Aware Move tool (#213) by @alexanderalber in #814
- Rework Camera Raw filter preview and navigation by @abc2cb in #781
- Bound layer-group nesting at import and Group Layers (stack-overflow guard) by @Elvis33LE in #796
- fix(photocraft): reject an unparseable --control port instead of silently dropping it (#701) by @bfenty in #777
- M9: create vertical type from the Type tool flyout by @midasdf in #784
- Drag-and-drop: place onto the canvas in Free Transform, open at a tab slot by @carterwsmith in #739
- Large PSBs open with their pixels: decode planes past 2 GiB, plus 4-5 GB PSB fixtures (#375) by @alexanderalber in #782
- Layer Style: complete multi-instance effects and dialog parity (#157) by @remidesbois1 in #786
- Italian UI translation (it) by @giallorosso84 in #853
- Add the Magnetic Lasso tool by @louwers in #864
- CI: never cancel main's runs; trim per-PR runner time by @tanish2k09 in #800
- tiff_corpus: ask for layers explicitly (corpus job red since #825) by @tanish2k09 in #876
- agent_tasks: wait for the MCP server task before removing the test folder (Windows os error 32) by @tanish2k09 in #877
- Preset store: a store directory that doesn't exist yet reads as empty on Windows too by @tanish2k09 in #878
- Locking a group locks the layers inside it by @rosematcha in #847
- fix(engine): Camera Raw clamps the noise amounts to their range (#707) by @bfenty in #839
- Test: press-drag-release across menu titles and into submenus (#775) by @bflatastic in #837
- Filter previews stay inside the selection on large documents (#740) by @bflatastic in #836
- fix(test): find sleep on PATH in monitor profile test by @simonwjackson in #855
- ui-egui tests: GPU adapter catch_unwind stops swallowing setup-command failures (#760) by @Luna161 in #854
- Warp: reject extreme rect params with BadParams instead of running a giant warp (#808 follow-up) by @Luna161 in #849
- fix(algo): Path Blur clamps per-path speeds (#708) by @bfenty in #840
- fix(io): artboard guide indices follow resource 1032 order (#722) by @bfenty in #845
- fix(codecs): large PNG exports no longer lose bytes at a band's sync flush by @ajsongpilot in #827
- PSD: decode the merged composite only when something consumes it by @Elvis33LE in #846
- Lossy WebP: a pure-Rust VP8 encoder with quality and lossless controls (#648) by @ljkx in #880
- Gaussian Blur: large radii are fast, live preview included (#464) by @bflatastic in #867
- Resampling reads a bounded window, however small the target (#713) by @mnmlyw in #860
- About: contributor and model credits compiled in (grab bag + table, self-submitted names) by @echelon in #898
- Automation: Apply Data Set works for text and visibility data sets (#806) by @rosematcha in #870
- Document tab × sits after the title on Windows and Linux, as in Photoshop (#619) by @bflatastic in #832
- Brush size and hardness keys are remappable in Keyboard Shortcuts (#626) by @bflatastic in #828
- Menu rows touch, as in native menus: long menus are a fifth shorter (#402) by @bflatastic in #844
- actionlint: declare the org macos-release runner label by @echelon in #927
- Slice Options and Divide Slice are one undo step; a rejected one changes nothing (#910, #911, #912) by @echelon in #928
- Selection tools: Photoshop's full right-click menu (#614, #738) by @bflatastic in #831
- CI: craft-fonts run uses the Test step's exact build again (Linux runner out of disk since #800) by @tanish2k09 in #955
- TIFF: BigTIFF, every IFD and SubIFD, banded parallel decode (FILE-215-8, part of #215) by @ljkx in #859
- Direct Selection tool: reshape pen and shape paths after they're drawn (#790) by @bflatastic in #865
- Windows and Linux: one title bar with the app icon (no stacked OS bar); long context menus scroll by @bflatastic in #986
- Filter Gallery: Angled Strokes paints strokes, not a smear; Rough Pastels' texture shows in dark areas (#879) by @echelon in #942
- Save for Web: slices never overwrite each other; overlapping slices keep their HTML cells (#908, #909) by @echelon in #929
- Out-of-range slice, layer comp and type style ids are rejected, not wrapped (#914) by @echelon in #930
- Invert (⌘I) inverts the targeted layer mask (#780) by @bflatastic in #838
- Drag layers onto another document's tab to copy them there (#589) by @bflatastic in #851
- Layer › Smart Objects › Convert to Layers (#535) by @bflatastic in #829
- Photo Filter and gradient glows render like Photoshop (#442, #443) by @bflatastic in #850
- Fix main: classify the Direct Selection path commands; Czech for "{n} layer" by @echelon in #1074
- Automation: an allowed command can't run a denied one on its behalf by @tanish2k09 in #861
- Variables dialog: malformed entries can't crash an edit by @tanish2k09 in #875
- Layers panel: drop layers on the footer's New Layer, New Group and Delete buttons (#736) by @echelon in #965
- Crop tool starts with a frame around the canvas (or the selection), as in Photoshop (#668 item 7) by @echelon in #971
- Type: ⌘/Ctrl+T while typing shows or hides the Character panel (#668 item 15) by @echelon in #983
- Shape tools: Shift and Alt pressed during the drag constrain it, as in Photoshop (#668 item 12) by @echelon in #984
- Layer via Copy, Copy and Cut read only the selected area: 33× faster on 24 MP (#668 item 18) by @echelon in #985
- Windows: selection and other crosshair tools stay visible over grey (#737) by @echelon in #954
- Clone Stamp / Healing Brush: the source crosshair shows only while painting (#668 item 10) by @echelon in #969
- Preferences: colour settings take a typed #rrggbb value (#668 item 2) by @echelon in #1001
- macOS: use the native menu bar instead of the in-window menus (#887) by @brennanMKE in #894
- README: Downloads section listing every release build by @echelon in #1210
- README Downloads: where to get it, then builds (Windows first) by @echelon in #1219
- Release workflow: only signing and draft-release jobs use the release environment by @echelon in #1220
New Contributors
- @TheSeanLavery made their first contribution in #434
- @mnmlyw made their first contribution in #501
- @rosematcha made their first contribution in #361
- @jason4short made their first contribution in #426
- @siraxe made their first contribution in #453
- @arpitkjaiswal made their first contribution in #348
- @EthanSuquet made their first contribution in #396
- @alexanderalber made their first contribution in #381
- @flyyangX made their first contribution in #359
- @leblanc-simon made their first contribution in #410
- @trokute made their first contribution in #449
- @ha1des made their first contribution in #591
- @neko233-com made their first contribution in #582
- @Sirsyorrz made their first contribution in #611
- @Elvis33LE made their first contribution in #609
- @cristianmoroaica made their first contribution in #607
- @Webificio made their first contribution in #587
- @mvanhorn made their first contribution in #734
- @gangldiego made their first contribution in #700
- @kijoong-kim made their first contribution in #604
- @Cyanoxide made their first contribution in #724
- @tanish2k09 made their first contribution in #798
- @jerrykimo made their first contribution in #711
- @bfenty made their first contribution in #783
- @Luna161 made their first contribution in #808
- @abc2cb made their first contribution in #781
- @remidesbois1 made their first contribution in #786
- @giallorosso84 made their first contribution in #853
- @louwers made their first contribution in #864
- @simonwjackson made their first contribution in #855
- @ajsongpilot made their first contribution in #827
- @brennanMKE made their first contribution in #894
Full Changelog: v0.3.0...v0.5.0
Original source - Oct 7, 2026
- Date parsed from source:Oct 7, 2026
- First seen by Releasebot:Oct 13, 2026
PhotoCraft v0.3.0
photocraft releases version 0.3.0 with a broad set of improvements, including multilingual support, new editing and automation tools, stronger file compatibility, faster performance, and safer recovery and saving. The update also expands PSD support and refines the interface across platforms.
Highlights since 0.2.0
182 commits from 183 merged pull requests, including work from 31 community contributors (thank you!), and 146 issues closed.
Your work is safer:
- Recovered unsaved documents survive a second crash.
- Deeply nested .pcraft files reopen.
- photocraft-cli batch refuses to overwrite its input folder.
- Preferences no longer get lost when two windows or tabs save, or when a save fails.
Languages: the interface is available in 日本語, 简体中文, 繁體中文, Español, Русский and Čeština (Edit › Preferences › Interface › Language), with CJK fonts and IME input in the Type tool.
Files:
- JPEG and other no-alpha exports composite transparency over white.
- Formats without colour profiles get sRGB.
- Truncated JPEGs and multi-frame files open with a warning instead of silently.
- TGA is offered in Save As and Export As.
Editing:
- Free Transform a Copy and Transform Again on a Copy.
- Keyboard layer navigation, number keys for opacity, Alt-click colour sampling.
- New from Clipboard.
- Undo and redo restore the targeted layer.
- Shortcuts pressed in quick succession all run, in order.
Automation (CLI, MCP, control channel):
- Stricter, clearer parameter and flag errors, and
<subcommand> --help. - Background jobs that agents can wait for or poll.
- Recorded actions run in batch.
Scorecard
This is the first release with docs/scorecard.md, so these numbers are its baseline. 0.2.0 had no scorecard to compare against. Area counts are done / partial / missing.
Area Done Partial Missing Measured Performance 3 22 12 46 scenarios: 3 within budget, 22 over budget or failing, 13 tracked only, 4 not run, 8 not yet measurable (baseline 2026-10-05) File compatibility 1 8 18 io corpus oracle ≥ 146/170, round trip ≥ 169/170; psd-tools oracle ≥ 229/309, round trip ≥ 307/309; Photoshop-authored oracles ≥ 130/256, round trip 258/258 Tools 3 14 13 Workspace and UI 0 4 19 settings that do nothing: 60 of 133 (target 0) Type 0 3 6 Automation 1 3 7 626 of 626 menu items live Reliability 3 1 3 never-crash lints on 26 of 26 crates; panic_hunt fuzzes every command Distribution 4 3 4 Open bugs 0 3 29What's Changed
- perf(compose): avoid unnecessary backdrop snapshots by @MikeeI in #109
- perf(compose): prepare gradient stops outside pixel loops by @MikeeI in #103
- Fix stale effect maps after default-only mask changes by @MikeeI in #105
- Preserve HDR samples when importing white-matted PSD composites by @MikeeI in #106
- Mix pass-through group coverage in premultiplied space by @MikeeI in #108
- perf(compose): avoid redundant effect-halo rendering by @MikeeI in #110
- Preserve merged PSD alpha at the exported sample precision by @MikeeI in #111
- perf(compose): reuse compiled vector masks within each render by @MikeeI in #112
- perf(compose): reuse bounded pattern preparation across render tiles by @MikeeI in #104
- fix(ui): pasting an image copied in another app never ran by @tiredIsa in #102
- fix(ui): make Move transform controls interactive by @Ni-zav in #99
- Menu overlap and overflow #92 by @Ni-zav in #98
- PR #96 — Liquify undo by @Ni-zav in #97
- fix(ui): shape tools show the shape while dragging by @sommerper in #87
- security: bound automation previews and reply resources by @Gh0stlyKn1ght in #93
- Japanese support: IME input in the Type tool and CJK glyphs in the UI by @kntrttm in #101
- Community batch follow-ups: on-demand OS clipboard paste; fmt + egui 0.36 test port by @echelon in #134
- perf(ui): borrow the active layer from its document snapshot by @MikeeI in #121
- perf(ui): reuse exact cached content bounds by @MikeeI in #116
- perf(ui): skip offscreen layer thumbnail generation by @MikeeI in #117
- perf(ui): retain channel thumbnails across view-only revisions by @MikeeI in #120
- fix(ui): prune thumbnails for removed layers and documents by @MikeeI in #119
- fix(ui): prune closed-document display and preview resources by @MikeeI in #118
- Disambiguate colliding document identities at session admission by @MikeeI in #114
- Warn when the PSD channel limit drops a Quick Mask by @MikeeI in #115
- Preserve compositing properties in single-layer flat export by @MikeeI in #122
- Preserve selected real masks during PSD import by @MikeeI in #130
- Scale artboard bounds in proxy documents by @MikeeI in #131
- Crop tool: move and resize the crop frame, Space repositions while drawing by @echelon in #132
- Fix flaky canvas_geom undo test (process-wide text gamma raced by another test) by @echelon in #135
- Dock: fixed-height panel groups, splitters, collapse, reorder; panels never vanish by @echelon in #139
- Brush Settings panel: Photoshop structure and depth, edits through tools.setBrush by @echelon in #136
- Selecting current bit depth must preserve redo by @MikeeI in #133
- Detect PhotoCraft archives independent of ZIP entry order by @MikeeI in #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 #142
- Layers groups expand/collapse (#126); every displayed shortcut fires (#127) by @echelon in #141
- Layers rows: names never run under the indicators; fx triangle; Collapse All Groups; designer PSD for QA by @echelon in #167
- fix(geom): saturate Rect::translate and inflate on i32 overflow by @kevin9327 in #159
- fix(ui): make tall menus scrollable on short displays by @Ni-zav in #160
- PSD type layers: bounds regression tests; #148 is the layer's vector mask, not text bounds by @echelon in #165
- Flatpak single-file bundles as release artifacts by @echelon in #163
- Roadmap: honest parity assessment (2026-10-05) by @echelon in #182
- AGENTS.md: no Tauri, Electron or webview shells by @echelon in #184
- Menus scroll and navigate by keyboard on small displays; Color Range dialog on the no-GPU path (#145, #138) by @echelon in #168
- Docs: where we stand and where we're going (roadmap, README, AGENTS.md) by @echelon in #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 #174
- fix(ui): refresh Liquify preview after undo by @Ni-zav in #175
- fix(ui): sample eyedropper colours while dragging by @Ni-zav in #176
- fix(ui): keep Curves endpoint handles inside the graph area by @Ni-zav in #177
- fix(ui): avoid duplicate sliders for wide filter ranges by @Ni-zav in #179
- Dock polish: Layers gets the height, Character/Paragraph group, eliding tab strips, reveal the active layer (#147, #150, #151, #152) by @echelon in #181
- Move/Free Transform modifier keys (#90); sharp full-resolution transform preview (#91) by @echelon in #183
- CJK UI font fallback: Simplified/Traditional Chinese and Korean, lazily loaded in locale order (#149) by @echelon in #185
- Layers mask thumbnails + chains; Channels/Paths temporary rows and footers (#153, #154) by @echelon in #191
- GPU compositor: paged residents and effect maps, so 20k+ documents refresh on the GPU (#49) by @echelon in #187
- Properties: uniform sections, per-kind Quick Actions, full-width controls (#155) by @echelon in #192
- PSD corpus: psd-tools set (pinned, verified), an oracle for every file, and the fixes it found by @echelon in #195
- Tool feedback: selection-mode cursor badges, scrubby zoom, contrasting outlines, Shift lines by @echelon in #188
- PSD fidelity: 16/32-bit colour modes, Lab, Levels, Exposure, Dissolve oracle (corpus 133 → 140, psd-tools 212 → 222) by @echelon in #202
- Fix tests on FreeBSD with RADV by @mekanix in #194
- fix(clipboard): use the wayland clipboard for images by @nuIIpointerexception in #222
- FreeBSD: build and test the workspace in a FreeBSD VM by @echelon in #223
- Fix automatic UI scaling on 4K monitors by @john8675309 in #225
- FreeBSD: serialise canvas GPU tests, CI template, RAM detection, CJK font paths by @echelon in #227
- Title bar: never draw the window title over the menus or controls by @echelon in #241
- Packaging: Linux runtime deps + start-up library check (#201); wasm 26.3 -> 18.8 MiB (#198) by @echelon in #237
- Fix live brush preview drawing a polygon (#189) by @echelon in #240
- PSD effects fidelity: spread metric, emboss, gradient geometry, text gamma (113 -> 118 oracle passes) by @echelon in #224
- Scorecard: cargo xtask perf + scorecard, budgets, checklists, nightly perf (#221) by @echelon in #239
- Layout documents: fix GPU device loss, live Move tool, local damage, no per-frame work (#125, #128) by @echelon in #226
- PSD export: write tagged blocks other readers can parse (#200) by @echelon in #236
- CR2: measure the colour filter row phase instead of assuming RGGB (#193) by @echelon in #244
- Atomic saves: one crash-safe atomic_write for every document write by @echelon in #230
- Preferences: wire tooltips, Home screen, recent files; hide what nothing reads by @echelon in #245
- Eraser on locked layers: no lock-out from the simple lock button; Stroke Path erases to the background colour (#76) by @echelon in #229
- Retouch tools paint the mask/channel target; Sample All Layers for Blur/Sharpen/Smudge; premultiplied Smudge (#207) by @echelon in #234
- Free Transform: selection moves only its part of a linked mask; masked preview; target masks and channels (#205) by @echelon in #242
- Vertical type (tategaki): lay out, render, edit and round-trip (#199) by @echelon in #246
- PSD stroke effects: outlines of filled shapes, vector stroke above interior effects, joined subpaths by @echelon in #233
- Live gradients: Gradient tool makes editable Gradient Fill layers (on-canvas handles, stops, midpoints) + Classic mode (#180) by @echelon in #197
- Marquee: Shift squares, Alt draws from the centre, live W × H readout (#208) by @echelon in #247
- GPU: crash-safe startup and device-loss fallback (#243, #4) by @echelon in #252
- Text: deterministic font family order; hide private system families (fixes a flaky test) by @echelon in #264
- Photoshop oracles via storytold/photocraft-corpus: pinned corpora, corpus feature, test-corpus, CI job by @echelon in #190
- Masks: Alt-click to view mask, Cmd-click vector mask to select, vector-mask target brackets (#196) by @echelon in #256
- Stylus pressure, tilt, rotation and eraser on macOS and X11 by @echelon in #255
- Fix Windows MSI advertised shortcut icons by @CQMHV in #238
- Windows taskbar icon: .exe icon id for the MSI shortcut + icon regression tests (#248) by @echelon in #269
- Colours: handle non-hex Unicode values without an internal error by @storybored379 in #261
- Align the CJK fallback font's baseline with Latin text by @kntrttm in #260
- UI: platform shortcut notation in every label and tooltip (#251) by @tiredIsa in #262
- New Document: a typed Width/Height reaches Create (#254) by @echelon in #270
- Menus are as tall as their items; scroll only when the window is too short (#235) by @echelon in #272
- Portable mode: keep settings beside the exe in the Windows portable zip (#228) by @echelon in #267
- Brush Settings for every brush: options-bar toggle and real preset picker (#258) by @echelon in #268
- Ctrl+Alt-drag resizes the brush on the canvas (#231) by @echelon in #271
- Shift rubber band: preview the straight line before the click (#257) by @echelon in #273
- Selection drag previews: regression tests for #253 (visible mid-drag, 1x and 2x) by @echelon in #274
- Shortcuts: rebindable fill keys, D/X and held temporary tools (#249) by @echelon in #275
- PSD manual and optical kerning: import, export, render, edit (#206) by @echelon in #259
- Localise the UI: i18n foundation and a Japanese catalog (menus, dialogs, panels) by @kntrttm in #169
- Pencil tool, Edit › Fill… dialog and "Rasterize?" prompt (#213) by @echelon in #279
- Fast Select › Modify › Smooth and Feather (part of #211) by @echelon in #280
- Compositor: effect maps never block inside parallel tiles (fixes #276 deadlock) by @echelon in #281
- FreeBSD release tarball and README platform lines by @echelon in #284
- fix: forward document index in bridge inspection by @kuishou68 in #287
- Marquee: stop the selection at the canvas edge by @Multipad-cyber in #263
- Background layer: double-click, masks and cut behave like Photoshop by @Multipad-cyber in #266
- i18n: add Simplified Chinese localization by @CQMHV in #282
- Enable dictionary segmentation for Japanese type by @midasdf in #250
- Smart Objects and Smart Filters survive PSD save and open by @echelon in #288
- Apply EXIF orientation on open, write Orientation = 1 on export (#285) by @echelon in #318
- PSD export: 32-bit files open in Photoshop (HDR toning Color Mode Data, #291) by @echelon in #327
- Windows on ARM64: release builds, PE header check, install test on ARM64 hardware by @echelon in #333
- Fix preference usage scanning on CRLF checkouts by @CQMHV in #331
- Windows: Alt-click clone hint and Ctrl+N channel errors (#251 follow-up) by @bommerts in #336
- Move tool: Auto-Select on by default; a click picks and drags the layer under the pointer (#296) by @echelon in #330
- Cmd+Enter (Ctrl+Enter) loads the path as a selection (#306) by @echelon in #329
- Layers panel: rename commits on click elsewhere, Enter or Tab; one at a time (#314) by @echelon in #326
- Keyboard Shortcuts: Ctrl+F records as Ctrl+F, not Ctrl+ControlLeft (#292) by @echelon in #323
- macOS CLI: verify the shipped CLI is Developer ID signed and notarized in the release workflow (#308) by @echelon in #320
- fix(ui): feed every pointer move per frame so fast strokes stay smooth by @leonaci in #317
- Fix logic Show the clone crosshair only while Option is held by @juansebsol in #301
- i18n: add Traditional Chinese (zh-hant) UI catalog by @WildfootW in #302
- Add a Spanish catalog (menus, dialogs, panels) by @Mawfyy in #299
- Localise the UI into Russian: a complete catalog and the missed tl! call sites by @tiredIsa in #298
- Preferences: add an Apply button by @CQMHV in #325
- i18n: add Czech (cs) UI translation by @petrleocompel in #328
- Menus: no menu or submenu covers the menu bar (#319) by @echelon in #337
- Menus stay above the taskbar; oversized windows open maximized (#315) by @echelon in #343
- Background jobs: engine job API, progress and cancel (part of #210) by @echelon in #289
- Background jobs in the app: progress, Cancel, open-as-job (part of #210) by @echelon in #373
- Harden EXIF orientation: limits after rotation, fallible allocation, strict IFD parsing by @echelon in #345
- Fonts: use craft-fonts as an optional build input; move the Japanese fonts out by @echelon in #353
- Stamp Visible (Cmd+Alt+Shift+E) and Stamp Down; Alt+Merge keeps the originals (#217) by @echelon in #356
- Right-click on the canvas lists the layers under the pointer (#307) by @echelon in #360
- Canvas scrollbars, and Preferences > Tools > Overscroll works (#300) by @echelon in #367
- Alt+right-drag resizes the brush and changes its hardness (#297) by @echelon in #370
- Alt+scroll zooms the canvas in 5% steps around the pointer (#293) by @echelon in #371
- ui.set: reject unknown fields; the theme error names all five themes (#412, #413) by @bflatastic in #437
- serve: methods lists jobs.list and jobs.cancel (#414) by @bflatastic in #438
- MCP command_batch and serve batch honour each step's wait (#415) by @bflatastic in #439
- Headless saves without path never flatten over the opened file (#416) by @bflatastic in #447
- Alt-click with the Brush, Pencil, Gradient or Paint Bucket samples a colour (#417) by @bflatastic in #450
- Layers panel: double-click beside a layer's name opens Layer Style (#350) by @bflatastic in #452
- Batch runs report inputs that share an output name instead of overwriting (#420, #422) by @bflatastic in #448
- New from Clipboard, and Paste with nothing open makes a document (#368) by @bflatastic in #458
- CLI: unknown flags are usage errors,
<subcommand> --helpprints usage, usage lists --quality (#421, #423) by @bflatastic in #460 - Liquify remembers its brush settings between uses and launches (#418) by @bflatastic in #461
- The main window opens centred on the screen (#419) by @bflatastic in #462
- Keyboard layer navigation: Alt+[ / Alt+] / Alt+, / Alt+. and Shift to add (part of #352) by @bflatastic in #470
- Transform Again on a Copy (Cmd+Alt+Shift+T): step and repeat (part of #352) by @bflatastic in #474
- Number keys set opacity, Shift+[ / Shift+] step hardness, Shift+Cmd+A opens Camera Raw (part of #352) by @bflatastic in #473
- Export: TGA in Save As and Export As (#363) by @Pedroj-64 in #377
- Docs and MCP schema: use the real Gaussian Blur id (#378) by @floflo777 in #390
- Image Size shows the one-pixel minimum it applies (#441) by @HEOJUNFO in #468
- prefs.reset resets a single colorSettings key (#445) by @HEOJUNFO in #467
- Content-Aware Scale: enlarging a 1 px wide or tall layer no longer panics by @Ar-maan05 in #387
- Build desktop app by default (#392) by @agorevski in #425
- fix(engine): use wasm-safe timing for Liquify by @naumanAhmed3 in #393
- Profile mismatch: compare profiles by colour, not bytes (sRGB vs sRGB prompt) by @ljkx in #394
- Type: dragging a paragraph box handle resizes the box (#351) by @Pedroj-64 in #376
- docs: correct VectorCraft sibling name by @agorevski in #429
- Free Transform a Copy (Cmd+Alt+T); Esc takes the copy back (part of #352) by @bflatastic in #482
- Raise rust-version to 1.95, the minimum egui 0.36 needs by @carterwsmith in #471
- docs: add star history chart to README by @coygeek in #469
- Move drag reveals a larger-than-canvas layer's off-canvas pixels by @sommerper in #526
- Spanish: add missing tool, filter and path translations by @neversaynv3r in #488
- Dialogs keep their top-left when their content resizes by @sommerper in #487
- PSD export selects PSB above size limit (#212) by @agorevski in #431
- 32-bit documents: Exposure works on the stored linear values by @floflo777 in #400
- Ctrl+Insert copies and Shift+Insert pastes on Linux; Shift+Insert pastes images on Windows by @sommerper in #531
- Docs: roadmap, scorecard and README after the 2026-10-07 fixes by @bflatastic in #538
- CLI batch: recorded-action steps, --format .ext, strict --quality, refuse --out = --in (#489, #490, #491, #492) by @bflatastic in #545
- Gradients honour explicit transparency stops; smart filter commands accept an explicit layer target (#465, #466) by @bflatastic in #544
- Recovered documents keep their recovery data until saved or closed (#444) by @bflatastic in #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 #551
- Shortcuts run in the order pressed; Shift+Delete fills on Windows; colour pickers stay put while dragging (#440, #530, #534) by @bflatastic in #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 #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 #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 #555
- Preferences merge with other tabs/windows and retry failed saves; web startup shows a Reload hint (#475, #476, #477) by @bflatastic in #561
- FreeBSD CI: run the GPU integration tests one at a time by @bflatastic in #576
- Import warns when it keeps only the first frame or page, or a JPEG ends early (#518, #523) by @bflatastic in #563
- Linux: AppImage update information and a .zsync beside it (#349) by @ianswope in #399
- Color Picker and Color panel fields accept typed values by @carterwsmith in #485
- Release 0.3.0 by @bflatastic in #577
New Contributors
- @MikeeI made their first contribution in #109
- @tiredIsa made their first contribution in #102
- @Ni-zav made their first contribution in #99
- @kntrttm made their first contribution in #101
- @kevin9327 made their first contribution in #159
- @mekanix made their first contribution in #194
- @nuIIpointerexception made their first contribution in #222
- @john8675309 made their first contribution in #225
- @CQMHV made their first contribution in #238
- @kuishou68 made their first contribution in #287
- @midasdf made their first contribution in #250
- @bommerts made their first contribution in #336
- @leonaci made their first contribution in #317
- @juansebsol made their first contribution in #301
- @WildfootW made their first contribution in #302
- @Mawfyy made their first contribution in #299
- @petrleocompel made their first contribution in #328
- @bflatastic made their first contribution in #437
- @Pedroj-64 made their first contribution in #377
- @floflo777 made their first contribution in #390
- @HEOJUNFO made their first contribution in #468
- @Ar-maan05 made their first contribution in #387
- @naumanAhmed3 made their first contribution in #393
- @ljkx made their first contribution in #394
- @carterwsmith made their first contribution in #471
- @coygeek made their first contribution in #469
- @neversaynv3r made their first contribution in #488
- @ianswope made their first contribution in #399
Full Changelog: v0.2.0...v0.3.0
Original source Similar to photocraft with recent updates:
- Gemini updates441 release notes · Latest Oct 13, 2026
- Claude updates166 release notes · Latest Oct 8, 2026
- Proton updates24 release notes · Latest Jun 9, 2026
- Proton Pass updates41 release notes · Latest Oct 10, 2026
- Mistral updates81 release notes · Latest Oct 6, 2026
- Mistral Inference updates7 release notes · Latest Mar 20, 2025
- Oct 5, 2026
- Date parsed from source:Oct 5, 2026
- First seen by Releasebot:Oct 13, 2026
PhotoCraft v0.2.0
photocraft releases a major image-editing update with expanded camera RAW support, color-managed editing, adjustment and eraser tools, Photoshop brush imports, and sandboxed plug-ins. It also strengthens automation security and improves stability for large images and core workflows.
Upgrade notes
Automation (MCP / control channel) now needs explicit file roots. File access from automation clients is limited to folders you grant with
--automation-read-root <dir>/--automation-write-root <dir>(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 #17
- MCP: a panicking command no longer wedges the headless session by @storybored379 in #16
- Layers: Add Layer Mask uses the active selection by @Multipad-cyber in #11
- feat(ui): add Exit to the File menu by @torstfugl in #10
- fix(ui): give menu bar labels more breathing room by @torstfugl in #8
- Eraser on Background layer paints the background colour (fixes #15) by @echelon in #19
- Open links in the system browser via a platform service (fixes #14) by @echelon in #20
- Test: Image Rotation rotates every layer (re #1) by @echelon in #21
- GPU: Rgba16Float fallback when Rgba32Float isn't renderable (fixes #7) by @echelon in #22
- Add File > Open Recent (fixes #5) by @echelon in #23
- Licensing: MIT OR Apache-2.0 files, NOTICE, ArtCraft brand terms, attribution by @echelon in #32
- cms tests: system_profiles skips malformed named-colour profiles by @storybored379 in #24
- Codecs: camera raw files fail with a clear "not supported" error by @storybored379 in #25
- Filter › Other › Minimum / Maximum: Preserve Roundness by @storybored379 in #27
- Layer Style › Blending Options › Blend If (render, PSD round trip, command) by @storybored379 in #26
- Dialogs can be moved by dragging the title bar by @sommerper in #29
- Layer Style dialog previews effects live on the canvas by @sommerper in #30
- Never crash: steering rules, clippy.toml, forbid unsafe by @echelon in #33
- CI: green on all platforms (rustfmt config, clippy 1.99, FXC-safe adjust shader) by @echelon in #37
- feat(ui): confirm before discarding unsaved changes by @torstfugl in #31
- docs: add mdBook and security documentation foundation by @Gh0stlyKn1ght in #35
- Never crash: psd, codecs, format, io are panic-free by @echelon in #34
- Never crash: cms is panic-free by @echelon in #36
- Never crash: text, color, doc, paint, geom, raster, compose, vector by @echelon in #39
- Never crash: automation (MCP/RPC) and photocraft-cli are panic-free by @echelon in #38
- Never crash: algo pyramids and ui-egui parity without expect by @echelon in #40
- Never crash: the engine is panic-free by @echelon in #54
- Never crash: the GPU compositor is panic-free by @echelon in #55
- Never crash: algo is panic-free by @echelon in #56
- Never crash: ui-egui is panic-free by @echelon in #57
- Never crash: last-resort guard for commands and file import/export by @echelon in #58
- Never crash: ops denies panicking shortcuts by @echelon in #59
- security: authenticate control channels and bound transport resources by @Gh0stlyKn1ght in #61
- PSD round trip: read/write Vibrance, Color Balance, B&W, Photo Filter, Channel Mixer; corpus floors by @echelon in #60
- UI input: Ctrl+'+' zooms the canvas, dialogs don't cancel on outside click, menu hover-switch by @echelon in #62
- macOS: open files from Finder/Open With/Dock; file path, recent, warnings and .pcraft fixes by @echelon in #63
- Camera raw: clean-room pure-Rust decoder (DNG, CR2, TIFF/EP raws) with develop pipeline by @echelon in #65
- Colour-managed canvas: document profile -> monitor (P3/Adobe RGB/ProPhoto/Gray/CMYK), linear EXR, embedded CMYK by @echelon in #66
- Sandboxed WebAssembly plug-ins: photocraft-plugins (wasmi), plugin.* commands, Filter › Plug-ins by @echelon in #67
- Image › Adjustments overhaul: full params, one editor per kind, live-preview dialogs, Curves point deletion by @echelon in #68
- Magic Eraser and Background Eraser tools; canvas rotation/flip/size move vector geometry by @echelon in #70
- Photoshop brushes: .abr import, stylus pressure/tilt, 36 grouped presets, .grd import by @echelon in #74
- security: constrain automation file access to granted roots by @Gh0stlyKn1ght in #72
- Large images: adapter texture limits, banded compositing/export, proxy thumbnails, history byte budget by @echelon in #71
- fix(ui): brush and eraser show the real stroke while drawing by @sommerper in #64
- Select › Color Range: the dialog, Select presets, eyedroppers, Localized Color Clusters, Invert by @storybored379 in #80
- Persist brush presets (user + imported .abr) in a size-aware preset store by @echelon in #82
- raw: Sony cRAW, Panasonic RW2 (RawFormat 5), uncompressed ORF + ORF previews; NEF blocked (clean-room) by @echelon in #83
- GPU canvas: Rgba16Float display texture for 16/32-bit documents (#46) by @echelon in #84
- Adjustment dialogs: GPU live preview through a clipped adjustment layer (#77) by @echelon in #85
- Painting: right-click opens the brush picker (or erases), real Smoothing, eraser-on-Background tests by @echelon in #86
- Release 0.2.0 by @echelon in #113
New Contributors
- @storybored379 made their first contribution in #17
- @Multipad-cyber made their first contribution in #11
- @torstfugl made their first contribution in #10
- @echelon made their first contribution in #19
- @sommerper made their first contribution in #29
- @Gh0stlyKn1ght made their first contribution in #35
Full Changelog: v0.1.1...v0.2.0
Original source - Oct 3, 2026
- Date parsed from source:Oct 3, 2026
- First seen by Releasebot:Oct 13, 2026
PhotoCraft v0.1.1
photocraft publishes its v0.1.1 changelog, marking a new release with no change details provided.
Full Changelog: v0.1.0...v0.1.1
Original source - Oct 2, 2026
- Date parsed from source:Oct 2, 2026
- First seen by Releasebot:Oct 13, 2026
PhotoCraft v0.1.1-rc.5
photocraft publishes a changelog covering updates from v0.1.0 through release candidate 5.
Full Changelog: v0.1.0...v0.1.1-rc.5
Original source - Oct 2, 2026
- Date parsed from source:Oct 2, 2026
- First seen by Releasebot:Oct 13, 2026
PhotoCraft v0.1.1-rc.4
photocraft releases v0.1.1-rc.4, with the full changelog available on GitHub.
Full Changelog: https://github.com/storytold/photocraft/commits/v0.1.1-rc.4
Original source - Oct 2, 2026
- Date parsed from source:Oct 2, 2026
- First seen by Releasebot:Oct 13, 2026
PhotoCraft v0.1.0
photocraft provides the full changelog for version 0.1.0.
Full Changelog: https://github.com/storytold/photocraft/commits/v0.1.0
Original source
This is the end. You've seen all the release notes in this feed!
Curated by the Releasebot team
Releasebot is an aggregator of official product update announcements from hundreds of software vendors and thousands of sources.
Our editorial process involves the manual review and audit of release notes procured with the help of automated systems.