- Added passive plugin discovery for validated
plugins/<plugin>/plugin.jsonmanifests and a Plugins menu refresh/listing workflow.
- Added user-scope Windows shell integration for
.pyshopassociations, Explorer image context menus, and command-line file opening.
- Added camera RAW import, document-level color profile preservation, export presets, and batch image conversion.
- Added practical layered PSD export for pixel, text, and vector layers with opacity, visibility, supported blend modes, masks, and compatibility notes for unsupported PyShop metadata.
- Added timestamped job error logs, atomic raster/PSD save writes, and autosave recovery project creation/restoration for unsaved work.
- Added pytest-qt GUI workflow and accessibility regressions for no-shortcut actions, icon labels, layer panel operations, macro failures, dock persistence, import state, save filters, and brush flow.
- Added OpenRaster
.oraimport/export with layer names, pixels, visibility, opacity, supported blend modes, PyShop mask extensions, and compatibility reporting.
- Moved image open/save/export and effect rasterize work onto status-bar background jobs with progress reporting and cancel requests.
- Added editable non-destructive effect layers for blur, sharpen, stylize, posterize, solarize, and pixelate filters, including serialization and explicit rasterize-down support.
- Added QSettings-backed workspace preset persistence plus validated macro save/load/replay support using
.pyshopmacrofiles and native project macro storage.
- Moved canvas mouse behavior behind registered tool-handler objects with focused handler tests for paint, selection, crop, path, text, shape, and retouch workflows.
- Extracted document state into a core
Documentmodel with layer, active index, selection, path, channel, guide, macro, file provenance, and dirty-revision ownership.
- Added native
.pyshoplayered project save/open support with metadata round-tripping for layers, masks, groups, text/vector layers, adjustments, paths, guides, channels, active layer, and macro steps.
- Hardened raster and PSD file I/O with safe pixel-count checks, psd-tools-backed flattened PSD export, and Save/Save As guardrails that prevent accidental layered PSD data loss.
- Added action macro recording/replay and session workspace presets while preserving the no-keyboard-shortcut action contract.
- Added a Pen path workflow with point capture, canvas preview, Paths dock actions, and path-to-selection conversion.
- Added channel visibility compositing and a Channels dock for red, green, blue, and alpha channel workflow toggles.
- Converted text insertion into non-destructive text layers rendered by the compositor, with text-layer cloning and render tests.
- Added non-destructive vector rectangle shape layers, compositor rendering, shape-tool drag creation, and vector-layer tests.
- Added core retouch dab operations and canvas workflows for healing, blur, sharpen, dodge, burn, and sponge toolbar tools.
- Added the complete top-level menu structure for File, Edit, Image, Layer, Type, Select, Filter, View, Window, and Help workflows.
- Added grouped toolbar slot metadata and UI separators for marquee, lasso, crop, sample, retouch, paint, blur, tone, path, type, shape, hand, and zoom tool groups.
- Added ruler overlays plus Navigator, Histogram, and Info dock panels with composite previews, RGB histograms, and cursor/document readouts.
- Added grid and guide overlays, snap-to-grid/guide math, View menu controls, and tests for snapping behavior.
- Added layer group metadata, group-aware compositing, layer-panel grouping controls, and tests for grouped child rendering.
- Added non-destructive adjustment layer metadata, compositor rendering, layer-panel creation, and core tests for adjustment compositing.
- Added layer mask and clipping-mask metadata, compositor support, layer-panel controls, mask-aware transforms, and an alpha-compositing regression fix.
- Added dynamic brush settings for pressure, smoothing, spacing, scatter, texture, and color jitter, with toolbar controls and core stroke tests.
- Capped canvas paint work to the visible image extent with viewport bounds and intersecting tile iteration.
- Extracted canvas viewport zoom, pan, coordinate conversion, fit, and anchored zoom math into
pyshop.ui.CanvasViewport.
- Expanded layer compositing with Photoshop-style blend modes including soft/hard light, linear/pin/vivid light, color compare, arithmetic, and HSL modes.
- Added tile-level layer compositing and a canvas tile cache for bounded paint operations.
- Added core tile geometry helpers and routed canvas composite painting through bounded image tiles.
- Added editor-level Qt signals for layer and active-layer changes, then routed layer panel refresh through those signals.
- Added diff-backed history commands for same-structure layer edits, with snapshot fallback for structural changes.
- Replaced raw history tuple stacks with explicit bounded
HistoryCommandobjects while preserving undo/redo behavior.
- Added a
pyshop.toolsregistry for toolbar metadata, options grouping, cursor metadata, and input-handler routing. - Removed installed keyboard shortcuts from menu, toolbar, and swap-color actions while preserving clickable controls.
- Extracted document construction, color conversion, brush/eraser painting, and selection bounds helpers into
pyshop.core. - Completed the first architecture extraction pass while preserving the current single-window UI entrypoint.
- Fixed eraser strokes so transparent brush dabs clear existing alpha instead of leaving painted pixels intact.
- Extracted layer state, bounded history, selection contour generation, and blend-mode compositing into
pyshop.core. - Added focused core tests for layer copies, history snapshots, blend immutability, and selection path generation.
- Added the initial
pyshop/package skeleton with core, tools, panels, filters, ui, and resources namespaces. - Moved app identity and icon discovery into
pyshop.app_infowhile preserving the existing desktop entrypoint.
- Fixed the top-level Qt import syntax error that prevented the app from compiling.
- Added explicit runtime and development dependency manifests.
- Added a pytest import smoke test that verifies the module imports without launching a GUI.
- Documented supported Python/PyQt versions and the manual desktop QA checklist.