Adoption returns to the repaint mask (option A) and layer blending stays opt-in via ◐. Right-click/Escape now flattens any remaining layer and releases the region in one action, so the separate ✓ commit button is gone.
The earlier status() rework let non-error hints stay visible, so "Orange is the
painted mask" lingered on the canvas. Restore the simple rule that only errors
stay visible, keep an explicit notice() for the one case that must persist, and
bump the editor asset version so browsers fetch the corrected module.
Crop & Blend adoption now bakes the layer into the source at full quality and
returns to the repaint mask immediately, so the user can generate again right
away. Layer blending is entered explicitly through the blend button instead of
auto-entering after adoption.
The inline mask change fingerprint now uses the source file's size and mtime
instead of hashing its full high-resolution bytes, removing a full-file read on
every change/execution.
Adopting a crop result previously downloaded the full-size image a second time
inside the crop layer. Pass the already-decoded image through, cutting one
decode round trip.
Adoption could also return without any feedback when the preview was still
loading, no target was selected, or the crop/layer state changed. Those cases now
show a visible message instead of failing silently.
Uploading previously reset the mask, history and viewport. It now goes through the
same replaceSource path that adopting a result uses, so only the source pixels
change and the painted mask, undo/redo history and current view survive.
If the new image has a different size the mask cannot be kept, so the upload falls
back to a fresh load and shows a notice instead of failing.
The inline mask gains a download button beside upload that saves the source image
as a PNG at its own resolution.
The pin toggle previously forced the image back to a fitted view on every
measurement, so it could not hold a deliberately panned or zoomed position. It now
freezes whatever position is currently drawn, keeps panning and zooming available,
and still routes the plain wheel to the workflow canvas.
Example 05 carried localized_name snapshots for its slots, so every reader saw
the author's language instead of their own. Remove them, as already done for the
other examples.
In Crop & Blend the bottom bar now reads preset, swap, clear, mask, blend and
merge. In Mask mode the other bar controls are hidden, so Clear remains the only
button and stays at the bottom left. Bump the inline crop asset version to fetch
the updated file.
One click empties the mask of the active target in both Mask and Crop & Blend
modes, reusing the existing clear command so the paint bounds still apply. The
button is disabled until an image is loaded. Also bump the inline crop module's
asset version so the changed file is fetched instead of a cached copy.
Hovering the image showed a hint in every mode. Drop the canvas title entirely
so no hover text appears over the picture, keep the instructions on the bottom
controls and their button tooltips, and delete the now-unused hint entries from
the locale dictionary.
The crop canvas repeated the selected-region painting help while a region was
locked. Move that text onto the repaint mask button, drop the now-unused
dictionary entry, and leave the locked canvas without a repeated hover hint.