David Mann and Claude Opus 5.5
a1b56b2d72
Address CodeRabbit review: a layered Duotone writes its real merged image, for #4935
...
A Duotone PSD opens flattened from its merged image (its layer records are
not read back), but with Maximize Compatibility off a layered Duotone was
saved with the white placeholder, so reopening it showed white. Its merged
image is now always written, like a document without layer records.
Test: a_layered_duotone_keeps_its_image_without_maximize_compatibility.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-21 21:04:36 +02:00
David Mann and Claude Opus 5.5
45c7b57b6a
Address CodeRabbit review: render smart filters with unmodeled settings stay verbatim, for #6160
...
Clouds, Difference Clouds, Fibers and Lens Flare opened as editable smart
filters even when their descriptor held an extra or repeated setting, a
value of another type (a long centre, a unit seed), an RGBC colour with
extra keys or out of 0-255, or a Lens Flare enum of another type. A
re-save rebuilt the item without it. They now need exactly the keys and
value types Photoshop writes; anything else stays a psd.unsupportedFilter
and round-trips byte for byte, as main's newer filters do with only_keys.
Test: render_filters_with_settings_we_dont_model_stay_verbatim (30 cases).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-21 21:04:36 +02:00
David Mann and Claude Opus 5.5
30c420761d
Merge remote-tracking branch 'origin/main' into integration-batch-5
...
Conflicts with main's smart-filter and layer-style work, both sides kept:
- smart_map: main's 27 more filters and this batch's Clouds, Difference
Clouds, Fibers and Lens Flare (45 known); the item colours are written for
Pointillize, Tiles and the three coloured render filters.
- layer_style: main's new Stroke default (1 px inside black) with this
batch's Overprint.
- psd_export: main's verbatim unknown adjustments with this batch's unpadded
Gradient Map check.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-21 19:50:16 +02:00
aiongg
68348dcafc
Merge pull request #8271 from aiongg/integration-8
...
Integration batch: 86 PRs on main
2026-10-21 11:02:54 -04:00
4decb8dd30
Address CodeRabbit review: .act vs .aco by content, strict corpus walks ( #5407 , #4496 )
...
- swatches.import with bytes only (no path or format): an .act whose first
colour is 0, 1, x or 0, 2, x still went to the .aco reader, which ignores
trailing bytes and returned a handful of junk swatches. At the two .act
lengths (768/772) an .aco header now counts only when its sections span
the whole file (new `aco::sections_len`); a Photoshop .aco of exactly
768 bytes is still an .aco. Test: act_that_starts_like_an_aco_is_still_an_act.
- The .atn corpus tests (psd and engine) skipped unreadable folders and
entries silently; they now fail with the path.
- act::write doc: the trailer is written when `count` or `transparent` is given.
Co-authored-by: Abdul karim mia <97598943+abdul-karim-mia@users.noreply.github.com >
Co-authored-by: Fabio Lissi <fabio.lissi@gmail.com >
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-21 14:06:56 +02:00
David Mann
b68b64ccb5
Merge PR #6160 : feat(psd): editable Render smart filters (Clouds, Difference Clouds, Fibers, Lens Flare)
...
# Conflicts:
# docs/file-format-parity.md
2026-10-21 11:37:14 +02:00
David Mann
86811ddeee
Merge PR #6002 : Stroke: keep Overprint (overprint)
...
# Conflicts:
# crates/engine/src/layer_style.rs
# crates/ui-egui/src/layer_style.rs
# docs/file-format-parity.md
2026-10-21 11:36:58 +02:00
David Mann
d276fce259
Merge PR #8081 : fix(psd): pad Gradient Map blocks ( #8070 )
2026-10-21 11:30:21 +02:00
David Mann
a492716367
Merge PR #5990 : Bevel & Emboss: keep the Gloss Contour's Anti-aliased (antialiasGloss)
2026-10-21 11:29:05 +02:00
David Mann
213eaa260d
Merge PR #5407 : Support .act color tables end to end (swatches + Color Table dialog)
2026-10-21 11:28:43 +02:00
David Mann
b16910427c
Merge PR #4935 : PSD Duotone: read and write the ink block (names, colours, curves)
2026-10-21 11:28:32 +02:00
David Mann
27b8d133d8
Merge PR #4771 : Fix mixed-order layered TIFF type geometry and unsafe text fallback
2026-10-21 11:28:23 +02:00
David Mann
4cfb576ee0
Merge PR #4496 : .atn: a pinned corpus of real action sets, with byte-exact and load/save/reload tests ( #219 )
2026-10-21 11:28:19 +02:00
f5543e85fc
Integration: merge main, resolve conflicts ( #5407 )
...
main added the GPU adapter strings (#1885 ) at the end of every
translation table, where this PR adds the Color Table strings. Both
blocks are kept.
Co-authored-by: abdul-karim-mia <97598943+abdul-karim-mia@users.noreply.github.com >
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-21 11:23:09 +02:00
Dylan M. Taylor
04d0212c7a
Merge pull request #6448 from dylanmtaylor/ci/shared-nix-workflow
...
ci: switch to shared nix workflow from craft-common-actions
2026-10-21 03:40:26 -04:00
aiongg
abd0582add
Integration: the Type units test makes its type after the resolution change, for #7125
...
#7125 keeps existing type's pixel size across Image Size, so the #6491 test's 12 pt layer, made before the change to 144 ppi, became 6 pt. The test now creates its layer at 144 ppi; its assertions are unchanged.
2026-10-21 05:04:04 +00:00
aiongg
194dfcf0ec
Integration: Clear History resets the History Brush source and Undo brings it back, for #3534 and #3536
2026-10-21 05:04:04 +00:00
aiongg
c5176efd93
Integration: a scale beyond f32 range is refused, not clamped, for #7048
...
Main's 3f216a0cd1 rejects numeric overflow before document edits; #7048 's test predates it and expected 1e39 to clamp to 150 %.
2026-10-21 05:04:04 +00:00
aiongg
b1e408d28f
Merge the smart-filter track ( #7066 #6398 #6397 #6297 #6299 #6301 #6303 #6315 #6305 #6317 )
...
# Conflicts:
# docs/file-format-parity.md
2026-10-21 05:04:04 +00:00
aiongg
a2c56f960f
Integration: gaps.md preferences count from the regenerated scorecard, for #6208 and #6211
2026-10-21 05:04:04 +00:00
aiongg
8e04e6f21e
Integration: regenerate docs/scorecard.md for the batch
2026-10-21 05:04:04 +00:00
aiongg
cb8bea1636
Merge PR #7044 : Conditional Mode Change: "gray" as a single source mode matches Grayscale ( #7042 )
...
# Conflicts:
# crates/engine/src/file_cmds/tests.rs
2026-10-21 05:04:04 +00:00
aiongg
1d567a115f
Merge PR #7015 : Actions: deleting an action removes its function key ( #7014 )
...
# Conflicts:
# crates/engine/src/actions_cmds.rs
2026-10-21 05:04:04 +00:00
aiongg
2a1ac6a6fb
Merge PR #6208 : Preferences: Save in Background off saves in the foreground ( #6207 )
...
# Conflicts:
# docs/gaps.md
# docs/scorecard.md
2026-10-21 05:04:04 +00:00
aiongg
050caf9ecd
Merge PR #6681 : Content-Aware Move: live preview for large selections (TOOL-213-4, #6680 )
...
# Conflicts:
# docs/gaps.md
# docs/scorecard.md
# docs/target-app-parity.md
2026-10-21 05:04:04 +00:00
aiongg
4804148ff9
Merge PR #3759 : Pattern Stamp and Background Eraser draw live; Spot Healing shows its heal area (TOOL-213-7, #3754 )
...
# Conflicts:
# docs/gaps.md
# docs/target-app-parity.md
2026-10-21 05:04:04 +00:00
aiongg
f163e3ce0b
Merge PR #6211 : Zoom tool: hold to zoom continuously with Animated Zoom on ( #6210 )
...
# Conflicts:
# docs/gaps.md
# docs/scorecard.md
# docs/ui-parity.md
2026-10-21 05:04:03 +00:00
aiongg
1a5d22ca94
Merge PR #6708 : Paths: the path selected in the Paths panel is drawn on the canvas ( #6550 )
...
# Conflicts:
# crates/ui-egui/src/vector_ui.rs
2026-10-21 05:04:03 +00:00
aiongg
fc371711e6
Merge PR #5847 : Shapes: Density and Feather on shape layers ( #5846 )
...
# Conflicts:
# docs/scorecard.md
# docs/target-app-parity.md
# docs/ui-parity.md
2026-10-21 05:04:03 +00:00
aiongg
cd710ca898
Merge PR #5622 : Filters: Lens Correction, Adaptive Wide Angle and Camera Raw Filter respect locks on smart objects ( #5621 )
...
# Conflicts:
# crates/engine/src/lens_cmds.rs
2026-10-21 05:04:02 +00:00
aiongg
34c5e7d49e
Merge PR #3536 : History: set the History Brush source from the panel (history.setSource) ( #2966 )
...
# Conflicts:
# crates/engine/src/commands.rs
# crates/ops/src/lib.rs
2026-10-21 05:04:02 +00:00
aiongg
c23a6c9b90
Merge PR #6206 : Performance: a cancelled Gaussian Blur job stops within budget ( #6205 )
...
# Conflicts:
# docs/gaps.md
2026-10-21 05:04:02 +00:00
aiongg
375c5e1517
Merge PR #7085 : Actions: an imported Crop step in a unit other than pixels is not applied as pixels ( #7084 )
2026-10-21 05:04:02 +00:00
aiongg
3d233afd31
Merge PR #7028 : Transform Selection: an unknown reference point is an error ( #7027 )
2026-10-21 05:04:02 +00:00
aiongg
4699d3605c
Merge PR #7026 : Automation: place and layer/data-set export by index keep the active document ( #7025 )
2026-10-21 05:04:01 +00:00
aiongg
7db7f847c4
Merge PR #7024 : Automation: doc.save rejects a bad quality instead of ignoring or clamping it ( #7023 )
2026-10-21 05:04:01 +00:00
aiongg
26844944b9
Merge PR #7005 : Keyboard Shortcuts: switching sets keeps action function keys ( #7004 )
2026-10-21 05:04:01 +00:00
aiongg
de03dd43f1
Merge PR #6861 : CLI batch: skip shell-only Save and view steps inside played action sets ( #6860 )
2026-10-21 05:04:01 +00:00
aiongg
1637ae25e1
Merge PR #6805 : Droplets: carry the actions that Conditional steps call ( #6804 )
2026-10-21 05:04:01 +00:00
aiongg
9d5bf2a82c
Merge PR #6773 : Actions: renaming an action updates the Conditional steps that call it ( #6772 )
2026-10-21 05:04:01 +00:00
aiongg
dc8b8834e0
Merge PR #5889 : Image: Bitmap dialog with Output resolution and per-method settings ( #5559 )
2026-10-21 05:04:01 +00:00
aiongg
40895532aa
Merge PR #5840 : Export As: Resample menu, incl. Nearest Neighbor ( #5838 )
...
# Conflicts:
# docs/scorecard.md
2026-10-21 05:04:01 +00:00
aiongg
5ec2b90f1b
Merge PR #7771 : Save for Web: later slices cover earlier ones, covered slices split into pieces ( #7770 )
2026-10-21 05:03:49 +00:00
aiongg
c633674b6d
Integration: one smart-filter count (41 plus Hue/Saturation, Perspective Warp, Filter Gallery and Camera Raw) in the parity doc and FILE-215-2, for #6317
2026-10-21 01:21:19 +00:00
aiongg
47488dff8e
Integration: recount KNOWN smart filters (41), for #6317
2026-10-21 01:21:06 +00:00
aiongg
bfce71cddd
Integration: name #6317 's test item pixelate_item (measured_item is taken), for #6317
2026-10-21 01:18:45 +00:00
aiongg
af3dff34a6
Merge PR #6317 : PSD: Mezzotint and Color Halftone smart filters open and save like Photoshop ( #6316 )
...
# Conflicts:
# crates/io/src/smart_map.rs
# docs/file-format-parity.md
# docs/scorecard.md
# scorecard/file_compat.toml
2026-10-21 01:18:35 +00:00
aiongg
3fee618fd6
Integration: recount KNOWN smart filters (39), for #6305
2026-10-21 01:18:16 +00:00
aiongg
bc248fbcec
Integration: name #6305 's range check long_in_range and its test item measured_named_item (int_in and measured_item are taken), for #6305
2026-10-21 01:18:07 +00:00
aiongg
2c87bd630b
Merge PR #6305 : PSD: Offset and Custom smart filters open and save like Photoshop ( #6304 )
...
# Conflicts:
# crates/io/src/smart_map.rs
# docs/file-format-parity.md
# docs/scorecard.md
# scorecard/file_compat.toml
2026-10-21 01:17:09 +00:00