github storytold/photocraft v0.17.0
PhotoCraft v0.17.0

3 hours ago

What's Changed

  • Package: never overwrite one link's copy with another, list a missing link once by @softwaregames1 in #9185
  • Fix CPU pixel grid stroke width on HiDPI displays by @ssh-den in #9199
  • Image Rotation › Arbitrary turns unlinked layer masks (#9201) by @davidmann4 in #9203
  • fix(cms): ignore tags inside .look XML comments (#9109) by @DuBearte in #9210
  • fix(cms): headerless .3dl tables read on at least the 12-bit scale (#9121) by @DuBearte in #9215
  • fix(engine): turn a shape's gradient stroke with the canvas (#9239) by @davidmann4 in #9240
  • fix(ui): Hue/Saturation's spectrum bars stretch with the panel (#9242) by @DuBearte in #9250
  • fix(ui): a swatch click recolours selected type and shapes with any tool (#9238) by @hectorviov in #9253
  • feat: New Document can start as an artboard (#9086) by @DuBearte in #9258
  • Crop: in Full Screen Mode Match Canvas is the black pasteboard (#9294) by @davidmann4 in #9295
  • Crop and Straighten Photos processes only the selection (#9297) by @davidmann4 in #9298
  • fix(algo): Dehaze leaves no bright halo beside dark objects (#9273) by @DuBearte in #9316
  • fix(engine): defined and imported patterns survive a restart (#9317) by @hectorviov in #9318
  • Paste: centre pixels copied from another document (#8945) by @DuBearte in #9353
  • feat(ui): Browse… for the folders of Image Processor and Batch (#9357) by @hectorviov in #9360
  • Tests: the smart filter stack-cache test runs in its own binary (#9376) by @davidmann4 in #9377
  • Reveal All: ignore erased, fully transparent pixels (#9379) by @davidmann4 in #9380
  • SVG: text reads each font file once instead of once per glyph (#9406) by @davidmann4 in #9407
  • Export Data Sets as Files keeps outputs in the chosen folder (#9420) by @davidmann4 in #9422
  • Plug-ins: refuse a manifest that declares a parameter twice (#9441) by @davidmann4 in #9442
  • Engine: assets_dir's doc comment back on assets_dir (#9390) by @davidmann4 in #9391
  • fix(atn): preserve unsupported event kinds by @justinjohn0306 in #8509
  • Kept composites follow the text gamma and free their memory; GPU timing survives an OOM retry (#8520, #8521) by @davidmann4 in #8522
  • Fix layout benchmark setup for preserved Smart Objects by @bommerts in #8664
  • Regression tests for eight fixes merged without one by @skylartaylor in #8690
  • Refuse .pcraft manifests with too many JSON values before parsing by @Silvertree2010 in #8893
  • ora: test that Soft Light exports as svg:soft-light by @switch87 in #9028
  • Filter Gallery: ⌘+ / ⌘− / ⌘0 / ⌘1 zoom the preview, stepping like Liquify's by @andeecollard in #9107
  • Channels panel: drag alpha channels to reorder them (#9163) by @hectorviov in #9168
  • fix(ui): Save for Web reopens on the preview tab chosen last (#9174) by @hectorviov in #9178
  • Codecs: save Amiga IFF (.iff) as 24-bit ILBM by @dotCooCoo in #9080
  • fix(cms): read UTF-16 LUT files by their byte-order mark by @bercedev in #9129
  • fix(ui): Properties Transform shows a shape's path, not its stroke by @hectorviov in #9181
  • contributors: credit VoiceLessQ by display name by @VoiceLessQ in #9264
  • Contributors: add my name (erenova) by @erenova in #9369
  • ci(deps): bump the actions group across 1 directory with 3 updates by @dependabot[bot] in #8979
  • Security: pin and verify the Windows signing client (#2936) by @Erica4fr in #3938
  • Migrate PhotoCraft to egui 0.37 by @skylartaylor in #9363
  • feat(updates): add startup self-update prompt modal by @dylanmtaylor in #9322
  • build: pin craft-update to craft-libs main (495e597) by @dylanmtaylor in #9548
  • chore(deps): refresh safe dependency bumps by @skylartaylor in #9558
  • chore: resolve SonarCloud maintainability issues by @dylanmtaylor in #9044
  • Integration batch 8: 37 reviewed community PRs on main by @davidmann4 in #9386
  • Crop tool: right-click on a pending crop opens its menu: presets, overlays, Cancel and Crop (#6561) by @marcoarnulfo in #6620
  • codecs: read and write TIFF extra samples (spot and alpha channels) by @jasallen in #7415
  • perf(photomerge): track multiband timing and peak memory by @ersoynarin-code in #7873
  • PSD: type on a path opens on its path and saves back into the file's Txt2 (#7962) by @Higgs32584 in #8175
  • Raw: open lossy DNGs (floating-point JPEG XL raw data), and fall back to the JPEG XL preview, not the tiny thumbnail (fixes #8125) by @SBaksa in #8402
  • Menu bar: Space no longer opens File › New after Alt+zoom, finishing #6256's fix (#7688) by @artman67 in #8679
  • fix(io): DDS export writes the document's alpha channel by @FinnNk in #8776
  • Fix stacked brush-tip artifacts in hard-round presets by @wanikhawar in #8846
  • PSD: recognise Photoshop's MTrn merged-transparency marker by @jasallen in #8877
  • PSD: spot channels in Photoshop's polarity; PSDs from earlier PhotoCraft versions keep their ink by @jasallen in #8885
  • fix(#9098): preserve PSD byte order in layered TIFF text descriptors by @ronibalthazar in #9128
  • Rebuild the Histogram panel by @mathildalabs in #9139
  • Layered TIFF: write Photoshop's global layer mask block (#9095) by @hectorviov in #9148
  • fix(cms): Resolve .cube files with a 1D shaper and a 3D table load (#9177) by @hectorviov in #9183
  • fix(ui): the font menu opens on the current family's recent row (#9160) by @hectorviov in #9197
  • fix(ui): Bevel & Emboss Highlight and Shadow Mode are separate dropdowns (#9368) by @hectorviov in #9370
  • raw: a non-finite black level no longer panics the AHD demosaic by @vangel76 in #9446
  • raw: grouped 10/12/14-bit unpack, single-strip buffer kept, in-place undelta by @vangel76 in #9449
  • raw: block-wise final encode stage for the default rendering by @vangel76 in #9452
  • raw: develop_half, a fused half-size preview develop (part of #9433) by @vangel76 in #9454
  • Add optional local models for subject matting and object selection by @mighty-programmer in #1199
  • Art History Brush in the Y-group flyout by @mvanhorn in #1610
  • Add intermediate UI scale presets between 100% and 125% by @WebWork-rrs in #3316
  • History panel: New Snapshot dialog and the first snapshot (#2966) by @itsF4LCON in #3567
  • Mixer Brush: render mixed paint during the stroke and commit the live result by @durtyrobbin in #3627
  • Integrations: wire Allow Agent Control and Control Port (#204) by @Erica4fr in #4097
  • Interface: Animation Effects follows the system setting, or is on or off by @JeremyYao in #4573
  • Camera Raw: Calibration panel, Auto, raw sidecars and live Camera Raw Defaults (FILE-215-11) by @FabioLissi in #5128
  • perf(algo): Content-Aware Scale 2x faster, within its P28 budget (#211) by @SckraT in #5236
  • Blend mode keys: Shift+Alt+letter picks a mode, as in Photoshop by @paulou-jpg in #5478
  • Mode dropdowns for Clone Stamp, Pattern Stamp, History Brush, Healing and Paint Bucket by @paulou-jpg in #5504
  • fix(zoom): Restore smooth wheel zoom by @sn-o-w in #5547
  • perf(camera-raw): develop the preview's per-pixel stages on the GPU (#6916) by @fjamesprice in #6923
  • feature: gradient paint to the shape tools, any shape can have a gradient stroke. by @deniskhud in #7203
  • Brush: large tips rasterize, accumulate and composite in parallel by @Unemars in #7218
  • Crop: Content-Aware Fill keeps the pixels a non-deleting crop hid (#8060) by @Higgs32584 in #8179
  • fix(xtask): derive scorecard corpus counts from pinned manifests by @Lucenx9 in #8658
  • io: TIFF alpha and spot channels, with PSD output unchanged by @jasallen in #8878
  • fix(ui): Type options bar alignment follows the target paragraph by @hectorviov in #9179
  • Panels: move onto craft-ui's shared docking by @aiongg in #9366
  • Panels: review follow-ups to the shared docking and egui 0.37 merges by @aiongg in #9575
  • lint: clear new-code S8855/S8856/S8862/S1612/S7688/S7679 findings by @dylanmtaylor in #9576
  • Panels: remove the old dock's drawing code by @aiongg in #9583
  • Preserve locale-aware CJK fonts and migration regressions after #9363 by @skylartaylor in #9518
  • refactor: lower cognitive complexity in styles apply, affinity text read and warp identity by @dylanmtaylor in #9577
  • ci: require nextest 0.9.150 by @skylartaylor in #9749
  • refactor: shared module layout (craft-contrib#20) by @aiongg in #9758
  • perf(selection): window marquee and lasso feather masks by @wanikhawar in #9794
  • Expand, Contract and Border: crop to the selection, up to 40× faster on small selections by @wanikhawar in #9697
  • refactor(selection): take the feather reach from the blur by @aiongg in #9802
  • fix(ui): dropdown menus grow back after a search with no matches by @aiongg in #9849
  • perf(save): faster .pcraft and PSD saves, byte-identical output by @Silvertree2010 in #9877
  • Integration batch: 22 PRs on main by @aiongg in #9880
  • Crop: X with a ratio preset turns the frame instead of shrinking it (#7057) by @davidmann4 in #7058
  • Tests: the effect-map deadlock watchdog waits 120 s for each render, not for all 101 by @dotCooCoo in #9340
  • Actions: save and read the Lab Lightness channel as Lght (#9384) by @davidmann4 in #9385
  • Preferences: the Generator checkbox reads Enable Generator, as in the reference application (#9392) by @davidmann4 in #9393
  • Color panel: the Color Wheel fits the panel at its default height (#9394) by @davidmann4 in #9395
  • SVG: an embedded data-URL SVG gets the nesting-depth check (#9397) by @davidmann4 in #9398
  • XML: deeply nested ORA, KRA, Camera Raw XMP, .kys and layer XMP are an error, not a crash (#9419) by @davidmann4 in #9421
  • Automation: refuse every Windows device name in request paths (#9424) by @davidmann4 in #9425
  • Automation: refuse to replace a non-image file in the write root (#9439) by @davidmann4 in #9445
  • Plug-ins: refuse a code section with no functions but many bytes instead of panicking (#9679) by @davidmann4 in #9680
  • CMYK: the test reference keeps a fully covered type pixel's ink exact (#9688) by @davidmann4 in #9689
  • History: History Options with Allow Non-Linear History and undoable visibility changes (#2966) by @davidmann4 in #3535
  • PSD save: choose PSB by the encoded size, not the raw estimate (#5285) by @davidmann4 in #5287
  • Channels: CMYK channels duplicate, load, split and merge as tone, not ink (#5787) by @davidmann4 in #5789
  • Compose: Transparency Shapes Layer off blends a layer's alpha as Fill in the special eight (#5692) by @davidmann4 in #5837
  • PSD: Frame layers keep their stroke (#4381) by @davidmann4 in #5890
  • PSD: Diffuse, Trace Contour, Crystallize and Pointillize smart filters open and save like Photoshop (#6302) by @davidmann4 in #6303
  • Paths: making a selection from a path deselects the path (#6079) by @davidmann4 in #6353
  • Color Lookup: PSD save keeps a .3dl/.look LUT file as loaded (#6544) by @davidmann4 in #6723
  • Paste: a drawing copied as SVG markup pastes its pixels by @dotCooCoo in #7154
  • Autosave: replace a recovery sidecar in one step, so a listing never misses or doubles it (#9034) by @davidmann4 in #9036
  • Integration batch: 21 PRs on main by @davidmann4 in #9775
  • feat(type): add editable font size, leading and tracking preset menus by @Ni-zav in #3558
  • fix(app): add missing supported file formats to Save As file picker (#3400) by @buivanvu94 in #3609
  • Layers: New Group dialog and modifiers; new layers go into an open group and join its clip group by @SckraT in #4329
  • feat(transform): show distort and skew cursor indicators when holding Ctrl/Cmd by @catursurapam in #5405
  • Font menu: favourites, recent fonts, class and similar-font filters, live preview by @D-monized in #6526
  • PSD/PSB open without reading the whole file: channel data read as decoded, in bands into tiles (#5106) by @ptrinh in #6583
  • perf(compression): Use zlib-rs with runtime detection by @reneleonhardt in #7689
  • fix(codecs): check header dimensions against the file size before allocating by @FinnNk in #8704
  • fix(ui): Remove Tool trail tints all a stroke removes; brush trails follow hardness (#8916) by @hnoerenberg in #8923
  • fix(io): preserve Halftone Pattern smart filters in PSD/PSB by @denstu473 in #9031
  • perf(gpu): NVIDIA's own memory on Linux, so many-layer documents stay off the CPU budget penalty (#5973) by @VishnuByrraju in #9042
  • Batch: folder sources take every format PhotoCraft opens by @dotCooCoo in #9097
  • Color panel: the cube modes warn when a colour can't print (#8672) by @hectorviov in #9154
  • feat: Artboard from Layers takes a size of your own (#9087) by @DuBearte in #9262
  • feat: type on a path follows its path when the path is edited (#9114) by @DuBearte in #9321
  • fix(ui): Select and Mask starts from its defaults unless Remember Settings is on (#9423) by @hectorviov in #9444
  • raw: AHD demosaic with reused planar scratch, about 1.6x fewer instructions by @vangel76 in #9450
  • raw: develop the default rendering band by band, without the f32 RGB frame by @vangel76 in #9455
  • fix(ui): Camera Raw's Color Mixer Hue tracks show the neighbouring hues by @hectorviov in #9601
  • Free Transform: show the live W/H readout in the ruler unit (#9400) by @NaufalDzz in #9678
  • paint.stroke: fill: true fills the enclosed region (#3659) by @dottedt in #3779
  • Windows installation policy: PhotoCraft by @Jeremy8776 in #9756
  • Perf: cliff rows for the CPU compositor, Advanced Blending, adjustment toggles, over-budget and huge documents (#7494) by @brennanMKE in #9565
  • Enforce Rust coding standards via Clippy by @dylanmtaylor in #9770
  • Render path: one place records why a view left the GPU (#9328) by @brennanMKE in #9566
  • xtask perf: a baseline knows how trustworthy it is (#7494) by @brennanMKE in #9564
  • refactor: split oversized filter, adjustment, crop and effect builders by @osaidahmed in #6463

New Contributors

Full Changelog: v0.16.0...v0.17.0

Don't miss a new photocraft release

NewReleases is sending notifications on new releases.