An open-source alternative to Photoshop written in Python. Full-featured image editor with layers, filters, brushes, selections, and a familiar Photoshop-inspired workflow.
- Layer System — Create, reorder, merge, and manage multiple layers with blend modes and opacity
- Selection Tools — Rectangular, elliptical, lasso, and magic wand selections
- Brush Engine — Customizable brushes with size, opacity, and hardness controls
- Filters & Effects — Editable effect layers for blur, sharpen, stylize, and pixel filters plus color adjustments and transforms
- File Support — Save and reopen native
.pyshoplayered projects; import common raster formats, camera RAW files, PSDs, and OpenRaster; export flattened raster images, export presets, batch conversions, layered/flattened PSDs, and OpenRaster - Dark Theme — Professional dark-themed interface
- Undo/Redo — Full history support
- Automation — Record, save, load, replay, and persist action macros with workspace presets
- Responsive Jobs — Open, save, export, and effect rasterize operations run through cancellable status-bar background jobs
- Recovery — Atomic saves, job error logs, and autosave recovery projects protect in-progress work
- Windows Integration — User-scope
.pyshopfile association, Explorer image context menu, and command-line file opening - Plugin Discovery — Validates
plugins/<plugin>/plugin.jsonmanifests and lists discovered plugins in the Plugins menu
python -m pip install -r requirements.txt
python pyshop_image_editor.pyFor development and smoke tests:
python -m pip install -r requirements-dev.txt
python -m pytest -q- Python 3.10-3.12
- PyQt5 5.15.x
- Pillow 12.2.x
- numpy 1.24.x-2.x
- rawpy 0.25+
PyQt5 is available under GPL/commercial licensing from Riverbank. Keep that license boundary in mind before redistributing packaged builds.
- Open an existing PNG or JPG and confirm the canvas renders with zoom and pan working.
- Import a PNG, JPG, or PSD and confirm Save As defaults to a
.pyshopproject instead of overwriting the source file. - Save a layered
.pyshopproject, reopen it, and confirm layers, masks, groups, text/vector metadata, paths, guides, channels, macro steps, and color profiles are preserved. - Paint with brush and eraser tools, then undo and redo the edits.
- Add, duplicate, reorder, hide, lock, and merge layers while confirming the canvas composite updates.
- Create rectangular, elliptical, lasso, and magic wand selections, then clear and invert selections.
- Apply one adjustment and one filter to the active layer.
- Save the document, export with a preset, batch-export two inputs, and reopen the output images.
- Run
python -m pyshop.windows_shell printand confirm the generated open command points at the current PyShop launch path. - Add a temporary
plugins/sample/plugin.json, refresh the Plugins menu, and confirm the manifest appears without executing plugin code.
| Tool | Type | Best For |
|---|---|---|
| PyShop (this repo) | Python desktop app | Native desktop image editor with familiar app behavior |
| Openshop | Single-file browser app | Zero-install editing in any browser with 33 tools, PSD import, and offline use |
If you want an image editor with no Python install required, see Openshop — a single HTML file that runs entirely in your browser.
MIT License