Patchy is a free, open-source image editor for Windows, macOS, and Linux, built for accurate PSD and PSB editing and round trips with Adobe Photoshop. It supports editable text and vectors, masks, layer styles, Smart Objects and Smart Filters, legacy 8BF plug-ins, JavaScript scripting, and command-line automation.
The browser version is the same editor compiled to WebAssembly. It runs entirely on your machine and nothing you open or make is sent online. The desktop builds are the faster and more capable way to use Patchy: they are not limited to a browser tab's 4 GB of memory, and they add printing, scanner and camera import, and command-line automation.
Click a thumbnail for the full-size image.
Patchy is tested against Adobe Photoshop 2026 on a mixed PSD corpus. In the completed August 7, 2026 Testy run, Patchy had the strongest non-Adobe render result, Photoshop reopened all 64 Patchy saves, and all 312 text objects remained editable.
| Tested editor | Files opened | Perceptual render match | PSD saves rejected by Photoshop | Text still editable in resaved PSD |
|---|---|---|---|---|
Patchy 879a3a8 | 64 / 64 | 98.83% (n=63) | 0 / 64 | 312 / 312 |
| Photopea, web build | 63 / 64 | 97.13% (n=62) | 0 / 64 | 306 / 312 |
| Affinity 3.2.3.4646 | 61 / 64 | 88.30% (n=60) | 0 / 64 | 0 / 305 |
| GIMP 3.2.4 | 62 / 64 | 88.11% (n=61) | 0 / 64 | 0 / 312 |
| PhotoDemon 2026.01.0251 | 64 / 64 | 81.97% (n=63) | 0 / 64 | 0 / 312 |
| Krita 5.3.2.1 | 56 / 64 | 81.17% (n=56) | 9 / 64 | 187 / 205 |
The text column counts original text objects that Photoshop still recognizes as editable text after reopening the editor's PSD save. It does not identify whether conversion happened during import or export.
These are corpus-specific results, not universal product ratings. See the full results and methodology, including the image-free per-file run data, tested versions, native PSD data preservation, Photoshop round-trip rendering, and known limitations.
Windows releases are code signed by Seth A. Robinson; the macOS app is signed and notarized (Robinson Technologies Corporation).
| Platform | Package | Download |
|---|---|---|
| Windows 10/11 (64-bit) | Installer | PatchyWindowsInstaller.exe (35 MB) |
| Windows 10/11 (64-bit) | Portable ZIP (no installer) | PatchyWindowsNoInstaller.zip (35 MB) |
| macOS 12+ (Apple Silicon) | DMG - drag to Applications | PatchyMacOS.dmg (44 MB) |
| Linux | Flatpak bundle | PatchyLinux.flatpak (14 MB) |
| Any modern browser | Nothing to install | rtsoft.com/patchy (slower and less capable) |
The browser version is the same editor compiled to WebAssembly, and everything runs locally: nothing you open or make is sent online. Use a desktop build if you can. The browser version is slower, it is capped at a browser tab's 4 GB of memory so large documents run out of room sooner, and it leaves out printing, scanner and camera import, and command-line automation.
Linux one-line install (paste into a terminal; fetches the bundle and installs it, pulling the shared KDE runtime from Flathub automatically):
curl -L -o /tmp/PatchyLinux.flatpak https://rtsoft.com/files/PatchyLinux.flatpak && flatpak install -y /tmp/PatchyLinux.flatpak
Optional: opening iPhone HEIC photos on Linux uses the shared Freedesktop codec extension, which bundle installs do not fetch on their own. Patchy will show this command if it is needed:
flatpak install -y flathub org.freedesktop.Platform.ffmpeg-full//24.08
Build the dependency-light core and tests without the Qt app:
cmake --preset dev -DPATCHY_BUILD_APP=OFF
cmake --build --preset dev
ctest --preset dev
Build the Qt desktop app:
cmake --preset qt-local
cmake --build --preset qt-local
The local Qt app preset writes patchy.exe under build/app.
Run the standard local test script:
powershell -ExecutionPolicy Bypass -File scripts/run-tests.ps1
Install Qt 6.8.3 into .deps/Qt (for example pip install aqtinstall && aqt install-qt mac desktop 6.8.3 -m qtimageformats qtpdf -O .deps/Qt, or linux desktop 6.8.3 linux_gcc_64 on Linux), then build the matching preset. The qtpdf module is optional:
without it Patchy still exports PDF, it just cannot open one.
cmake --preset mac-release # or linux-release
cmake --build --preset mac-release
macOS produces build/mac-release/Patchy.app; Linux produces
build/linux-release/patchy. packaging/macos/make-dmg.sh and
packaging/linux/make-flatpak.sh create the distributable artifacts. Both test suites
run offscreen on all three platforms (QT_QPA_PLATFORM=offscreen).
Create local Windows release artifacts:
scripts\release\build-release.bat
The script configures and builds the release preset, signs build\release\patchy.exe, the installer helper executables, and the installer when the local signing environment is available, deploys the minimum Qt runtime needed by the current app, copies third-party notices, and creates:
build\package\PatchyWindowsNoInstaller.zip
build\package\PatchyWindowsInstaller.exe
The zip contains a top-level Patchy folder so it can be dragged anywhere and does not include installer-only helpers. The installer is a local per-user installer that installs to %LOCALAPPDATA%\Programs\Patchy, creates a Start Menu shortcut, offers a desktop shortcut, and registers an uninstall entry. latest_version.json is the update metadata file.
Patchy is not Photoshop-compatible across the full PSD surface yet, but a round-trip from/to Photoshop mostly works with RGB/RGBA 8-bit documents that use basic pixel layers, text objects, groups, masks, blend modes, layer styles, and the currently supported adjustment layers.
Important Photoshop features that are not supported yet, or are only partially supported:
Patchy opens Affinity documents read-only: the current .af format ("Affinity by Canva"), the Affinity 2 formats (.afphoto, .afdesign, .afpub), and most Affinity 1.x-era files. Raster layers (including 16-bit, float, CMYK, and Lab documents), groups, masks (raster and vector), clipping, blend modes, opacity, editable text with per-run styles, vector curves, parametric shapes (rectangles, ellipses, polygons, stars, triangles, diamonds, trapezoids, pies, segments, crescents, hearts, tears, arrows, double and square stars, cogs, clouds), compound-shape booleans, Designer symbols, artboards, layer effects, supported adjustment layers, and placed images (which become embedded Smart Objects) all import, verified against Affinity's own renders and a wild-file corpus that includes real Affinity 2 documents from all three apps. Vector fills and strokes keep their width, alignment, dash pattern, and miter limit, crop-to-shape containers come in as masked groups, and the Erase blend mode imports as an isolated group with an inverse-alpha mask, which is how PSD stores that construction natively. If a file can't be imported as layers, Patchy falls back to its embedded preview instead of failing the open, and an import notice explains what was skipped.
Affinity features that are not supported yet, or are only partially supported:
Patchy is released under the MIT License. Third-party runtime notices are tracked in NOTICE-THIRD-PARTY.md.
Adobe and Photoshop are either registered trademarks or trademarks of Adobe in the United States and/or other countries. Patchy is an independent project and is not authorized, endorsed, or sponsored by Adobe. References to Photoshop and its file formats (PSD, Smart Objects, Smart Filters) are only there to describe compatibility.
This project was developed with significant assistance from AI tools. I mean, you can still blame me (Seth) for bugs, but I just wanted to mention it.
Note: All included textures/materials are real images taken by humans, not AI generated
AI has reached the point where you can use your favorite AI to add the missing feature you want.
Just give it the link to this repo and say "Add .tiff support" and in about 10 minutes it will be done and working on your computer. Amazing, right?
I mean, that's kind of the power of open source.
Whatever AI you use, tell it (or more likely, it is reading this right now) to read AGENTS.md before doing anything else. It contains the build and repository-wide rules, then routes feature work to the relevant document under docs/.
There are 1000+ regression and benchmarking tests. AGENTS.md links agents to the testing guide that explains how to select and run them.
If you have a bug fix or feature you think should be in this repo, please look at the actual code and fully TEST IT YOURSELF before submitting the PR. If you're using AI, use a good one (Fable+ class), we don't want barely working slop.
I probably don't want any major features coming from outside, as there are wrong and right ways to do things, some of it a bit subjective. Remember, you can always go crazy in your own fork, have some fun!
Don't trust AI to create and submit PRs with no oversight, I'll delete ones that have too much AI smell. Smell human. This is starting to sound weird but you know what I mean.
Also, note that certain features are crippled or not included due to Adobe patents. For example, our "quick select" tool doesn't update in realtime, you have to finish the stroke. We can revisit this around 2030 when the patents expire...
Created by Seth A. Robinson - Homepage | Blog | Twitter | Bluesky | Mastodon
Code contributions from Michael Capogna
Photo "akiko_cycling_okinawa" (seen in the screenshots) by Seth A. Robinson
923 commits
23 commits
C++
86.0%
C
10.6%
Python
1.1%
Patchy is a free, open-source image editor for Windows, macOS, and Linux, built for accurate PSD and PSB editing and round trips with Adobe Photoshop. It supports editable text and vectors, masks, layer styles, Smart Objects and Smart Filters, legacy 8BF plug-ins, JavaScript scripting, and command-line automation.
The browser version is the same editor compiled to WebAssembly. It runs entirely on your machine and nothing you open or make is sent online. The desktop builds are the faster and more capable way to use Patchy: they are not limited to a browser tab's 4 GB of memory, and they add printing, scanner and camera import, and command-line automation.
Click a thumbnail for the full-size image.
Patchy is tested against Adobe Photoshop 2026 on a mixed PSD corpus. In the completed August 7, 2026 Testy run, Patchy had the strongest non-Adobe render result, Photoshop reopened all 64 Patchy saves, and all 312 text objects remained editable.
| Tested editor | Files opened | Perceptual render match | PSD saves rejected by Photoshop | Text still editable in resaved PSD |
|---|---|---|---|---|
Patchy 879a3a8 | 64 / 64 | 98.83% (n=63) | 0 / 64 | 312 / 312 |
| Photopea, web build | 63 / 64 | 97.13% (n=62) | 0 / 64 | 306 / 312 |
| Affinity 3.2.3.4646 | 61 / 64 | 88.30% (n=60) | 0 / 64 | 0 / 305 |
| GIMP 3.2.4 | 62 / 64 | 88.11% (n=61) | 0 / 64 | 0 / 312 |
| PhotoDemon 2026.01.0251 | 64 / 64 | 81.97% (n=63) | 0 / 64 | 0 / 312 |
| Krita 5.3.2.1 | 56 / 64 | 81.17% (n=56) | 9 / 64 | 187 / 205 |
The text column counts original text objects that Photoshop still recognizes as editable text after reopening the editor's PSD save. It does not identify whether conversion happened during import or export.
These are corpus-specific results, not universal product ratings. See the full results and methodology, including the image-free per-file run data, tested versions, native PSD data preservation, Photoshop round-trip rendering, and known limitations.
Windows releases are code signed by Seth A. Robinson; the macOS app is signed and notarized (Robinson Technologies Corporation).
| Platform | Package | Download |
|---|---|---|
| Windows 10/11 (64-bit) | Installer | PatchyWindowsInstaller.exe (35 MB) |
| Windows 10/11 (64-bit) | Portable ZIP (no installer) | PatchyWindowsNoInstaller.zip (35 MB) |
| macOS 12+ (Apple Silicon) | DMG - drag to Applications | PatchyMacOS.dmg (44 MB) |
| Linux | Flatpak bundle | PatchyLinux.flatpak (14 MB) |
| Any modern browser | Nothing to install | rtsoft.com/patchy (slower and less capable) |
The browser version is the same editor compiled to WebAssembly, and everything runs locally: nothing you open or make is sent online. Use a desktop build if you can. The browser version is slower, it is capped at a browser tab's 4 GB of memory so large documents run out of room sooner, and it leaves out printing, scanner and camera import, and command-line automation.
Linux one-line install (paste into a terminal; fetches the bundle and installs it, pulling the shared KDE runtime from Flathub automatically):
curl -L -o /tmp/PatchyLinux.flatpak https://rtsoft.com/files/PatchyLinux.flatpak && flatpak install -y /tmp/PatchyLinux.flatpak
Optional: opening iPhone HEIC photos on Linux uses the shared Freedesktop codec extension, which bundle installs do not fetch on their own. Patchy will show this command if it is needed:
flatpak install -y flathub org.freedesktop.Platform.ffmpeg-full//24.08
Build the dependency-light core and tests without the Qt app:
cmake --preset dev -DPATCHY_BUILD_APP=OFF
cmake --build --preset dev
ctest --preset dev
Build the Qt desktop app:
cmake --preset qt-local
cmake --build --preset qt-local
The local Qt app preset writes patchy.exe under build/app.
Run the standard local test script:
powershell -ExecutionPolicy Bypass -File scripts/run-tests.ps1
Install Qt 6.8.3 into .deps/Qt (for example pip install aqtinstall && aqt install-qt mac desktop 6.8.3 -m qtimageformats qtpdf -O .deps/Qt, or linux desktop 6.8.3 linux_gcc_64 on Linux), then build the matching preset. The qtpdf module is optional:
without it Patchy still exports PDF, it just cannot open one.
cmake --preset mac-release # or linux-release
cmake --build --preset mac-release
macOS produces build/mac-release/Patchy.app; Linux produces
build/linux-release/patchy. packaging/macos/make-dmg.sh and
packaging/linux/make-flatpak.sh create the distributable artifacts. Both test suites
run offscreen on all three platforms (QT_QPA_PLATFORM=offscreen).
Create local Windows release artifacts:
scripts\release\build-release.bat
The script configures and builds the release preset, signs build\release\patchy.exe, the installer helper executables, and the installer when the local signing environment is available, deploys the minimum Qt runtime needed by the current app, copies third-party notices, and creates:
build\package\PatchyWindowsNoInstaller.zip
build\package\PatchyWindowsInstaller.exe
The zip contains a top-level Patchy folder so it can be dragged anywhere and does not include installer-only helpers. The installer is a local per-user installer that installs to %LOCALAPPDATA%\Programs\Patchy, creates a Start Menu shortcut, offers a desktop shortcut, and registers an uninstall entry. latest_version.json is the update metadata file.
Patchy is not Photoshop-compatible across the full PSD surface yet, but a round-trip from/to Photoshop mostly works with RGB/RGBA 8-bit documents that use basic pixel layers, text objects, groups, masks, blend modes, layer styles, and the currently supported adjustment layers.
Important Photoshop features that are not supported yet, or are only partially supported:
Patchy opens Affinity documents read-only: the current .af format ("Affinity by Canva"), the Affinity 2 formats (.afphoto, .afdesign, .afpub), and most Affinity 1.x-era files. Raster layers (including 16-bit, float, CMYK, and Lab documents), groups, masks (raster and vector), clipping, blend modes, opacity, editable text with per-run styles, vector curves, parametric shapes (rectangles, ellipses, polygons, stars, triangles, diamonds, trapezoids, pies, segments, crescents, hearts, tears, arrows, double and square stars, cogs, clouds), compound-shape booleans, Designer symbols, artboards, layer effects, supported adjustment layers, and placed images (which become embedded Smart Objects) all import, verified against Affinity's own renders and a wild-file corpus that includes real Affinity 2 documents from all three apps. Vector fills and strokes keep their width, alignment, dash pattern, and miter limit, crop-to-shape containers come in as masked groups, and the Erase blend mode imports as an isolated group with an inverse-alpha mask, which is how PSD stores that construction natively. If a file can't be imported as layers, Patchy falls back to its embedded preview instead of failing the open, and an import notice explains what was skipped.
Affinity features that are not supported yet, or are only partially supported:
Patchy is released under the MIT License. Third-party runtime notices are tracked in NOTICE-THIRD-PARTY.md.
Adobe and Photoshop are either registered trademarks or trademarks of Adobe in the United States and/or other countries. Patchy is an independent project and is not authorized, endorsed, or sponsored by Adobe. References to Photoshop and its file formats (PSD, Smart Objects, Smart Filters) are only there to describe compatibility.
This project was developed with significant assistance from AI tools. I mean, you can still blame me (Seth) for bugs, but I just wanted to mention it.
Note: All included textures/materials are real images taken by humans, not AI generated
AI has reached the point where you can use your favorite AI to add the missing feature you want.
Just give it the link to this repo and say "Add .tiff support" and in about 10 minutes it will be done and working on your computer. Amazing, right?
I mean, that's kind of the power of open source.
Whatever AI you use, tell it (or more likely, it is reading this right now) to read AGENTS.md before doing anything else. It contains the build and repository-wide rules, then routes feature work to the relevant document under docs/.
There are 1000+ regression and benchmarking tests. AGENTS.md links agents to the testing guide that explains how to select and run them.
If you have a bug fix or feature you think should be in this repo, please look at the actual code and fully TEST IT YOURSELF before submitting the PR. If you're using AI, use a good one (Fable+ class), we don't want barely working slop.
I probably don't want any major features coming from outside, as there are wrong and right ways to do things, some of it a bit subjective. Remember, you can always go crazy in your own fork, have some fun!
Don't trust AI to create and submit PRs with no oversight, I'll delete ones that have too much AI smell. Smell human. This is starting to sound weird but you know what I mean.
Also, note that certain features are crippled or not included due to Adobe patents. For example, our "quick select" tool doesn't update in realtime, you have to finish the stroke. We can revisit this around 2030 when the patents expire...
Created by Seth A. Robinson - Homepage | Blog | Twitter | Bluesky | Mastodon
Code contributions from Michael Capogna
Photo "akiko_cycling_okinawa" (seen in the screenshots) by Seth A. Robinson
923 commits
23 commits
C++
86.0%
C
10.6%
Python
1.1%