github storytold/photocraft v0.18.0
PhotoCraft v0.18.0

2 hours ago

What's Changed

  • Grant network access so update checks can reach GitHub by @dylanmtaylor in #9982
  • Correct update_transport comment: Flatpak sandbox now has network by @dylanmtaylor in #9983
  • Honor CARGO_BUILD_TARGET in FreeBSD packaging for aarch64 release builds by @dylanmtaylor in #9989
  • Engine: a pixel change damages only the tiles that changed (#9329) by @brennanMKE in #9942
  • Perf: every frame records its stages; slow frames are kept, logged and reported (#9328) by @brennanMKE in #9943
  • Arabic interface language, combined from the community catalogs (#10005) by @davidmann4 in #10006
  • ADDED ARABIC TRANSLATION by @azizr12 in #2505
  • Add Arabic (ar) as the first right-to-left UI language by @hicbest in #4520
  • Add Arabic (العربية) interface translation with RTL alignment by @hasan-sdaif in #4569
  • i18n: Arabic interface with RTL display order by @NibrasAz7 in #5593
  • Add Arabic (ar) interface translation catalog by @vfggf95565 in #5915
  • i18n(ar): stage Arabic catalog and add user guides by @syrrevshin4202-prog in #6092
  • i18n(ar): add complete Arabic UI translations by @test-bit-sys in #6287
  • Actions: an Arrange step that can't move the layer plays on instead of stopping (#8453) by @wanikhawar in #8457
  • Reduce Noise: reuse guide statistics with bit-identical output by @wanikhawar in #9639
  • Median stacking: select the middle values without fully sorting by @wanikhawar in #9628
  • perf(stack): cache bounded entropy terms across pixels by @wanikhawar in #9622
  • perf(algo): row-parallel local_sharpen with fast-path protect_detail (#5426) by @wanikhawar in #9651
  • perf(retouch): avoid duplicate rasterization while drawing by @wanikhawar in #9532
  • Save for Web: WebP, lossy at its Quality or lossless (part of #6391, #2415) by @wanikhawar in #6421
  • Free Transform moves every selected layer (#6501, #3384, #6096) by @wanikhawar in #6590
  • Select and Mask: Photoshop's full-window workspace (#7069, #8148) by @wanikhawar in #8896
  • i18n(ar): the Select and Mask workspace strings; main is green again (#10173) by @davidmann4 in #10174
  • Enable update checks in Flatpak by @dylanmtaylor in #10206
  • Integration test: 24 parity PRs together by @FedeOlivares in #9166
  • CLI: run and batch skip Deselect with nothing selected, as playback does by @switch87 in #8807
  • Layers: a new fill or adjustment layer drops the selection it took as mask by @switch87 in #8811
  • Indexed Color: keep Brush strokes inside the colour table (#8669) by @xwize in #8823
  • ui: larger Align icons and overflow button; Save for Web keeps its width on an invalid Matte by @batuhangozegu in #8892
  • fix: File > Import > Variable Data Sets opens a file picker (#8816) by @MarekSpodBiedry in #8901
  • Raise the Define Pattern size cap from 4000 to 8000 px per edge (#8820) by @MarekSpodBiedry in #8902
  • Box-filter minified patterns in the CPU and GPU samplers (#8831) by @MarekSpodBiedry in #8903
  • fix(ui): Clone Source overlay for the Healing Brush, soft with the brush (#8907, #8908) by @hnoerenberg in #8912
  • fix(ui): the brush resize HUD previews the engine's soft falloff (#8930) by @hnoerenberg in #8935
  • fix(ui): the options-bar brush chip draws the brush's own tip (#8936) by @hnoerenberg in #8963
  • Fix keyboard shortcut set names with '/' or '=' being truncated by @Silvertree2010 in #8548
  • Keep a bare '+' key when saving a keyboard shortcut set by @Silvertree2010 in #8640
  • Read layer-record blend keys in PSD layer effects by @mercuryVM in #8685
  • Export As: a remembered pixel size keeps the proportions of the image being exported by @marcoarnulfo in #8791
  • fix(text): write a style-only type edit into the PSD's Txt2 style runs by @jturnbach in #8888
  • Tests: a missing translation never fails CI by @aiongg in #10212
  • Swedish, Finnish, Danish and Norwegian interface languages, combined from the community catalogs (#10020) by @davidmann4 in #10021
  • Add Finnish language by @metuuu in #6961
  • i18n: add Danish interface translation by @pechnikov2026-star in #7267
  • i18n: add Norwegian Bokmal (nb) interface language by @Bolla76 in #9025
  • i18n(sv): add Swedish interface language catalog by @davvarn in #9536
  • i18n: Swedish (sv) interface translation by @kler in #5985
  • Tests: the autosave outcome test waits up to 5 minutes for a real write (#10198) by @davidmann4 in #10199
  • packaging: Flatpak finds and prints to CUPS printers by @dylanmtaylor in #10196
  • History: trimming to the memory budget after Clear History keeps the History Brush source by @dotCooCoo in #8715
  • Integrate 16 reviewed performance and UI fixes by @FredApps in #10157
  • PNG export: documents over 256 MiB of pixels are encoded a band of rows at a time (#8456) by @wanikhawar in #8472
  • fix(engine): convert Image › Mode › Bitmap in bands so huge images don't abort (#8477) by @wanikhawar in #8488
  • Select Inverse: invert shared tiles without full-canvas buffers by @wanikhawar in #9793
  • Smooth and Feather: crop to the selection, up to 395× faster on small selections by @wanikhawar in #9809
  • perf(selection): use sparse combination for marquee Add and Subtract by @wanikhawar in #9813
  • perf(selection): crop Color Range sampling to the active selection by @wanikhawar in #9814
  • perf(selection): combine GRAY8 masks directly in tiles by @wanikhawar in #9822
  • perf(curves): sample graphs directly and cache channel polylines by @wanikhawar in #9826
  • perf(paint): keep circular tips on the fast path with angle jitter by @wanikhawar in #9847
  • perf(paint): cache round-tip geometry per dab by @wanikhawar in #9850
  • perf(algo): solve Adaptive Wide Angle's mesh with a factor-once direct solve by @wanikhawar in #9921
  • Mixer Brush: dry strokes up to 2× faster with identical output by @wanikhawar in #9924
  • perf(segment): solve GrabCut and the band re-cut with Boykov-Kolmogorov by @wanikhawar in #9961
  • Smart objects: re-render without full-size float buffers, and bound the caches that held decoded sources by @wanikhawar in #10080
  • perf(paint): accumulate serial dabs in place with packed tile keys by @wanikhawar in #9852
  • CI: workflows only call craft-common-actions at @main (AGENTS.md; windows-arm64 unpinned) by @dylanmtaylor in #10228
  • Update prompt shows the app icon and accent color instead of a letter by @dylanmtaylor in #10243
  • Fix pretend-version testing for update prompts by @dylanmtaylor in #10254
  • test: partition long parity matrices without dropping cases by @FredApps in #10223
  • Integrate 87 reviewed bugfix and Photoshop-parity PRs by @FredApps in #10204
  • feat(algo): describe the Gaussian blur as data for other devices by @FinnNk in #8931
  • Color panel and Color Picker: clip the round cursor to the colour field by @marcoarnulfo in #8985
  • Path tools: edit the saved path selected in the Paths panel (#8478) by @switch87 in #8986
  • fix(ui): enlarge Move tool alignment icons for legibility by @ersoynarin-code in #9004
  • fix(xtask): reject unknown performance benchmark selections by @Lucenx9 in #9019
  • Gradient Fill layer: default to Foreground to Transparent (#8708) by @hectorviov in #9172
  • fix(export): embed requested sRGB profile for untagged sources (#9325) by @vanvo in #9339
  • fix(io, engine): Embed Color Profile writes sRGB for an untagged document (#9325) by @hectorviov in #9342
  • Color Lookup: honour the .3dl Mesh header's cube edge and output depth (#9078, #9073) by @mroxso in #9418
  • raw: faster tone stage (Shadows, Highlights, Clarity, Texture, Dehaze), same bytes by @vangel76 in #9457
  • fix(io): import a Displace smart filter that names its map file without embedding it (#9162) by @dark13b in #9472
  • fix(text): vertical type sets roman letters upright, one per em, as Photoshop does (#9470) by @hectorviov in #9478
  • fix(ui): new layer effects start from the Make Default values by @hectorviov in #9481
  • fix: an edit at full coverage keeps its result over huge 32-bit values by @hectorviov in #9509
  • fix(compose, gpu): adjustment layers apply Fill inside the special eight blend modes by @hectorviov in #9512
  • Fix Type on a Path wrapping and caret positioning across closed-path seams by @FartmanAndBurps in #9523
  • fix(io): PSD layer-effect contours keep at most 16 points by @hectorviov in #9590
  • fix(io): drop a kept Txt2 once no type layers are left by @hectorviov in #9596
  • fix(ui): Liquify's Twirl Counterclockwise gets a mirrored twirl icon by @hectorviov in #9598
  • fix(ui): the Color panel remembers its options across restarts by @hectorviov in #9606
  • Pencil: keep a 1 px freehand line connected where it turns by @Silvertree2010 in #9623
  • Fix adjustment layer name clicks targeting masks by @vanvo in #9703
  • Layer Style: one dialog size on every page, and it fits short screens by @OctaNebula in #4938
  • Preserve Dissolve coverage when compositing clipped layers by @Ni-zav in #4992
  • fix(mixer-brush): Alt-click samples the foreground colour like the Brush (#4873) by @MarekSpodBiedry in #5082
  • Actions: add editable PhotoCraft Essentials starter presets by @harrisonoconnorhover in #5090
  • Selecting subject now automatically applies to selected layer, and us… by @stevanmarjanovic in #5515
  • fix(ui): keep detached documents in one interactive window by @mostyk in #5744
  • fix(format): reject duplicate native layer identities by @0x6Ason in #5870
  • fix(paint): scale blur sigma with brush size (#5892) by @seotarek in #5939
  • Marquee: Fixed Size selects exactly the entered width and height (fixes #6015) by @itsF4LCON in #6026
  • Fix painting workflows, File Info and layer selection by @channelramble in #6139
  • Shift+Alt+right-click opens Photoshop's HUD Color Picker (#6098) by @mroxso in #6236
  • Windows releases ship a symbols zip: the release build's PDBs for profilers (#688) by @Higgs32584 in #6383
  • Fail control startup promptly when its port is occupied by @denstu473 in #6492
  • Automation: resolve configured root aliases for absolute paths (#6426) by @PerchAnton in #6510
  • Crop: right-click on the pending crop opens the crop menu (#6561) by @mroxso in #6621
  • Smart Filters: double-clicking a Liquify filter reopens it in the Liquify workspace by @dotCooCoo in #7153
  • fix(engine): guard trim and duplicate merged against documents exceeding render limits (#7223) by @seotarek in #7255
  • Actions: a fractional setting an integer field cannot hold is refused, not rounded by @Hamza0101 in #7742
  • packaging: the portable zip holds the files, not a folder with the files in it by @Hamza0101 in #7743
  • fix(retouch): preserve Smudge pickup with live-pixel stroke commits by @skylartaylor in #7848
  • Transform: remember selected interpolation (#8067) by @Sir-Starch in #8074
  • Filter Gallery › Cutout 2/4: regions stage by @andeecollard in #8192
  • Type: Roman Hanging Punctuation (trailing marks hang, don't steer the alignment) by @VladimirPozdnyakov in #8347
  • Startup: a failed launch says why in a dialog instead of closing silently (#7643) by @ebosido444-ai in #9436
  • fix(ui): Keyboard Shortcuts records ⌘Z instead of undoing the capture by @hectorviov in #9504
  • fix(ui): Layer Style scrolls on a short window so OK stays on screen by @hectorviov in #9517
  • fix(compose, gpu): Blend If hard points match Photoshop at 16 bits and for Gray by @hectorviov in #9584
  • feat(actions): import and export reusable Actions JSON files by @Ni-zav in #1991
  • Scroll the viewport while outlining with Polygonal Lasso by @harrisonoconnorhover in #2300
  • Draw right-to-left layer names in visual word order by @MathMattTech in #3139
  • Add grouped gradient presets and selectable style icons by @Skyfuller1303 in #3345
  • feat(codecs): add lossless JPEG XL export for 8/16-bit images by @Ni-zav in #3387
  • Undo and redo action definition edits from the Actions panel by @kotulsky in #3455
  • fix(vector): target selected saved paths and own Pen gestures by @Skyfuller1303 in #3464
  • fix(ui): restore square color chips in Studio Dark theme by @Ni-zav in #3520
  • fix(packaging): launch bundled CLI directly from AppImage by @haranishi in #3554
  • control: suggest near matches for unknown command ids and methods (#3674) by @itrycodinganditsbad in #3748
  • Add move and delete actions to Smart Filter rows by @zenjabba in #3967
  • i18n(es): add 548 missing rows, fix five filter and video terms by @diegozpy in #4023
  • fix(cmyk): Flatten Image and merges keep the inks of a tagged CMYK document (#3778) by @echelon in #4035
  • Treat Dissolve as a per-pixel choice by @vbasky in #4711
  • refactor(liquify): reuse native brush resizing and anchored HUD feedback by @Ni-zav in #4763
  • feat(ui): show selection and active-layer bounds in the status bar by @Ni-zav in #4883
  • Prevent control-channel engine commands from editing behind modal dialogs by @Ni-zav in #4993
  • Fix: brush section selection by @Ni-zav in #5165
  • Layer Style: Gradient Overlay takes any number of colour stops (#5177) by @FabioLissi in #5270
  • Guides: ⌥ turns a dragged guide; dropping one on either ruler deletes it (#5034) by @LloydNicholson in #5650
  • fix(plugins): bound a run's total plug-in memory, not just each instance by @jturnbach in #8905
  • test: GPU tests honour WGPU_BACKEND, so they run on Windows with an Intel GPU (#4) by @drunkeninja42 in #9110
  • fix(ui): Full Screen Mode needs a document (#9349) by @hectorviov in #9354
  • fix(format): a save on macOS keeps the file's creation time (#9388) by @hectorviov in #9401
  • Affinity reader: contiguous curve records and a cheaper object tag index by @vangel76 in #9416
  • fix(vector): a mask feather continues the mask past the canvas edge by @hectorviov in #9493
  • fix(compose, gpu): an adjustment layer's This Layer range judges its result before Opacity by @hectorviov in #9589
  • fix(engine): copied type keeps its size across resolutions after an edit by @hectorviov in #9594
  • fix(compose, gpu): a Pass Through group with Blend If renders isolated by @hectorviov in #9595
  • fix(ui): the layer list doesn't move with no layer selected by @hectorviov in #9597
  • Read applied Sony RAW metadata and crop ILCE-6000 images by @optimalbytee in #3142
  • Replay recorded layer visibility on the intended named layer by @kotulsky in #3461
  • feat(export): optionally trim transparent margins from layer files by @Ni-zav in #3519
  • fix(layer-style): support Blend If Alt-split handle feathering and throttle live preview by @Gotix-eg in #3874
  • feat(canvas): rotate view with Shift + middle-mouse drag by @Ni-zav in #4042
  • Filter > Other > Frequency Separation (#1714) by @marcoarnulfo in #4305
  • fix(icons): PhotoCraft icon corner radius matches other Craft apps (#4478) by @mjohnson7cd in #4547
  • fix(macos): bundle photocraft-cli and resolve it from droplet scripts by @Ni-zav in #4742
  • Fix/4758 type extreme finite geometry 20261013s1215 by @Ni-zav in #4783
  • Layer Style: Photoshop's layout (three columns, OK/Cancel/New Style/Preview on the right, one-line rows) [depends on #4938] by @OctaNebula in #5010
  • Video Frames to Layers: every page of a multi-page TIFF (part of #6379) by @itsF4LCON in #6387
  • Pen: Path Operations menu, as in Photoshop (#1397) by @wanikhawar in #7648
  • Compose: Extend Softer outer glows past Size (#7899) by @Sir-Starch in #8039
  • Filter Gallery › Cutout 1/4: colour and palette stage by @andeecollard in #8191
  • Filter Gallery › Cutout 3/4: edges and curves stage by @andeecollard in #8193
  • fix(io): read linked smart objects for PSD export as regular files only by @jturnbach in #8897
  • fix(xtask): reject leading zeroes in numeric prerelease identifiers by @Lucenx9 in #9015
  • feat(ui): Preset menus for Levels, Exposure, Black & White and Channel Mixer by @hectorviov in #9282
  • Play CopyCat, AJ and Line and Color action sets; keep patterns across restarts; Shift Edge scale by @VegaEX in #5176
  • Shapes: independent fill and stroke paints (solid, gradient, pattern), part 1 by @Skyfuller1303 in #5453
  • Hand tool: Cmd held zooms in and Alt zooms out, as in Photoshop by @marcoarnulfo in #6449
  • Filter Gallery › Cutout 4/4: trace the image into flat paper shapes by @andeecollard in #7903
  • Extra windows share the main window's app id, so Wayland docks and window rules see them (#6697) by @TaylorBurke in #9894
  • Screen picker: a Wayland desktop picks through the portal when the window runs on Xwayland (#8977) by @TaylorBurke in #9893
  • fix(flatpak): allow reading launcher version pins by @dylanmtaylor in #10393
  • Follow-up to #10204: match the reference application in ten places (#10327) by @davidmann4 in #10328

New Contributors

Full Changelog: v0.17.0...v0.18.0

Don't miss a new photocraft release

NewReleases is sending notifications on new releases.