PhotoCraft is an open-source image editor designed as a clean-room reimplementation of Adobe Photoshop, built entirely in Rust. It provides a surprisingly broad set of professional image-editing features, including layers, masks, adjustment layers, filters, vector shapes, editable text, brushes, and native PSD support.
The project is particularly interesting for users who want a local, open-source Photoshop alternative without relying on Electron, cloud services, or proprietary software. However, PhotoCraft is still in early alpha, so it is better viewed as a promising alternative under active development than as a complete replacement for Photoshop.
Features
PhotoCraft offers a substantial collection of image-editing tools:
Layer groups, clipping masks, pixel and vector masks
Adjustment layers for Curves, Levels, Vibrance, Hue/Saturation, Black & White, Gradient Map, Selective Color and more
Layer styles including Drop Shadow, Inner Shadow, Glow, Bevel & Emboss, Stroke, and overlays
Brush, Pencil, Mixer Brush, Clone Stamp, Healing Brush and other painting tools
Marquee, Lasso, Magic Wand, Quick Selection, Object Selection and Select Subject
Editable point and paragraph text
Pen and vector shape tools
Smart objects and smart filters
Free Transform with scale, rotate, skew, distort and perspective
History and History Brush
Multiple blend modes, opacity, fill and layer controls
Color management with RGB, Grayscale, CMYK and Lab
8, 16 and 32-bit-per-channel documents
PSD and PSB support
PNG, JPEG, TIFF, WebP, GIF, BMP, TGA, ICO, OpenEXR, HDR, AVIF and other formats
Export preview with quality, transparency, scale and estimated file size
Command palette and recorded actions
Its PSD support is one of its strongest features. The project tests its implementation against real-world PSD files and reports very high rendering compatibility across its test corpora. Unsupported data is designed to be preserved rather than simply discarded when documents are saved.
Another unusual feature is its automation architecture. PhotoCraft exposes its editing engine through the desktop interface, CLI, JSON control channel and MCP, making the application suitable for scripted workflows and AI-agent automation.
Download PhotoCraft v0.17.0 - Software Mirrors |
|---|
PhotoCraft v0.17.0 for Windowsphotocraft-0.17.0-windows-x86.msi | 97.46 MB photocraft-0.17.0-windows-x86-portable.zip | 114.87 MB photocraft-0.17.0-windows-x64.msi | 100.72 MB photocraft-0.17.0-windows-x64-portable.zip | 120.47 MB photocraft-0.17.0-windows-arm64.msi | 95.34 MB photocraft-0.17.0-windows-arm64-portable.zip | 114.75 MB |
PhotoCraft v0.17.0 for macOSphotocraft-cli-0.17.0-macos-universal.zip | 101.09 MB photocraft-0.17.0-macos-universal.dmg | 129.82 MB |
PhotoCraft v0.17.0 for Linuxphotocraft-0.17.0-linux-x86_64.tar.gz | 117.5 MB photocraft-0.17.0-linux-x86_64.rpm | 118.41 MB photocraft-0.17.0-linux-x86_64.pkg.tar.zst | 94.79 MB photocraft-0.17.0-linux-x86_64.flatpak | 88.24 MB photocraft-0.17.0-linux-x86_64.deb | 119.19 MB photocraft-0.17.0-linux-x86_64.AppImage.zsync | 195.94 kB photocraft-0.17.0-linux-x86_64.AppImage | 111.82 MB photocraft-0.17.0-linux-riscv64.tar.gz | 114.99 MB photocraft-0.17.0-linux-riscv64.rpm | 115.96 MB photocraft-0.17.0-linux-riscv64.deb | 116.49 MB photocraft-0.17.0-linux-aarch64.tar.gz | 112.73 MB photocraft-0.17.0-linux-aarch64.rpm | 114.61 MB photocraft-0.17.0-linux-aarch64.pkg.tar.zst | 91.73 MB photocraft-0.17.0-linux-aarch64.flatpak | 83.08 MB photocraft-0.17.0-linux-aarch64.deb | 115.57 MB photocraft-0.17.0-linux-aarch64.AppImage.zsync | 188.25 kB photocraft-0.17.0-linux-aarch64.AppImage | 107.43 MB |
PhotoCraft v0.17.0 for BSDphotocraft-0.17.0-freebsd-x86_64.tar.gz | 116.84 MB |
Others Download related to PhotoCraft v0.17.0photocraft-web-0.17.0.zip | 12.35 MB |
PhotoCraft v0.17.0 Source Code
PhotoCraft v0.17.0 Source code (zip)
PhotoCraft v0.17.0 Source code (tar.gz)
|
PhotoCraft v0.17.0 Release Notes: What's Changed- Package: never overwrite one link's copy with another, list a missing link once by @softwaregames1 in #9185
- Fix CPU pixel grid stroke width on HiDPI displays by @ssh-den in #9199
- Image Rotation › Arbitrary turns unlinked layer masks (#9201) by @davidmann4 in #9203
- fix(cms): ignore tags inside .look XML comments (#9109) by @DuBearte in #9210
- fix(cms): headerless .3dl tables read on at least the 12-bit scale (#9121) by @DuBearte in #9215
- fix(engine): turn a shape's gradient stroke with the canvas (#9239) by @davidmann4 in #9240
- fix(ui): Hue/Saturation's spectrum bars stretch with the panel (#9242) by @DuBearte in #9250
- fix(ui): a swatch click recolours selected type and shapes with any tool (#9238) by @hectorviov in #9253
- feat: New Document can start as an artboard (#9086) by @DuBearte in #9258
- Crop: in Full Screen Mode Match Canvas is the black pasteboard (#9294) by @davidmann4 in #9295
- Crop and Straighten Photos processes only the selection (#9297) by @davidmann4 in #9298
- fix(algo): Dehaze leaves no bright halo beside dark objects (#9273) by @DuBearte in #9316
- fix(engine): defined and imported patterns survive a restart (#9317) by @hectorviov in #9318
- Paste: centre pixels copied from another document (#8945) by @DuBearte in #9353
- feat(ui): Browse… for the folders of Image Processor and Batch (#9357) by @hectorviov in #9360
- Tests: the smart filter stack-cache test runs in its own binary (#9376) by @davidmann4 in #9377
- Reveal All: ignore erased, fully transparent pixels (#9379) by @davidmann4 in #9380
- SVG: text reads each font file once instead of once per glyph (#9406) by @davidmann4 in #9407
- Export Data Sets as Files keeps outputs in the chosen folder (#9420) by @davidmann4 in #9422
- Plug-ins: refuse a manifest that declares a parameter twice (#9441) by @davidmann4 in #9442
- Engine: assets_dir's doc comment back on assets_dir (#9390) by @davidmann4 in #9391
- fix(atn): preserve unsupported event kinds by @justinjohn0306 in #8509
- Kept composites follow the text gamma and free their memory; GPU timing survives an OOM retry (#8520, #8521) by @davidmann4 in #8522
- Fix layout benchmark setup for preserved Smart Objects by @bommerts in #8664
- Regression tests for eight fixes merged without one by @skylartaylor in #8690
- Refuse .pcraft manifests with too many JSON values before parsing by @Silvertree2010 in #8893
- ora: test that Soft Light exports as svg:soft-light by @switch87 in #9028
- Filter Gallery: ⌘+ / ⌘− / ⌘0 / ⌘1 zoom the preview, stepping like Liquify's by @andeecollard in #9107
- Channels panel: drag alpha channels to reorder them (#9163) by @hectorviov in #9168
- fix(ui): Save for Web reopens on the preview tab chosen last (#9174) by @hectorviov in #9178
- Codecs: save Amiga IFF (.iff) as 24-bit ILBM by @dotCooCoo in #9080
- fix(cms): read UTF-16 LUT files by their byte-order mark by @bercedev in #9129
- fix(ui): Properties Transform shows a shape's path, not its stroke by @hectorviov in #9181
- contributors: credit VoiceLessQ by display name by @VoiceLessQ in #9264
- Contributors: add my name (erenova) by @erenova in #9369
- ci(deps): bump the actions group across 1 directory with 3 updates by @dependabot[bot] in #8979
- Security: pin and verify the Windows signing client (#2936) by @Erica4fr in #3938
- Migrate PhotoCraft to egui 0.37 by @skylartaylor in #9363
- feat(updates): add startup self-update prompt modal by @dylanmtaylor in #9322
- build: pin craft-update to craft-libs main (495e597) by @dylanmtaylor in #9548
- chore(deps): refresh safe dependency bumps by @skylartaylor in #9558
- chore: resolve SonarCloud maintainability issues by @dylanmtaylor in #9044
- Integration batch 8: 37 reviewed community PRs on main by @davidmann4 in #9386
- Crop tool: right-click on a pending crop opens its menu: presets, overlays, Cancel and Crop (#6561) by @marcoarnulfo in #6620
- codecs: read and write TIFF extra samples (spot and alpha channels) by @jasallen in #7415
- perf(photomerge): track multiband timing and peak memory by @ersoynarin-code in #7873
- PSD: type on a path opens on its path and saves back into the file's Txt2 (#7962) by @Higgs32584 in #8175
- Raw: open lossy DNGs (floating-point JPEG XL raw data), and fall back to the JPEG XL preview, not the tiny thumbnail (fixes #8125) by @SBaksa in #8402
- Menu bar: Space no longer opens File › New after Alt+zoom, finishing #6256's fix (#7688) by @artman67 in #8679
- fix(io): DDS export writes the document's alpha channel by @FinnNk in #8776
- Fix stacked brush-tip artifacts in hard-round presets by @wanikhawar in #8846
- PSD: recognise Photoshop's
MTrn merged-transparency marker by @jasallen in #8877 - PSD: spot channels in Photoshop's polarity; PSDs from earlier PhotoCraft versions keep their ink by @jasallen in #8885
- fix(#9098): preserve PSD byte order in layered TIFF text descriptors by @ronibalthazar in #9128
- Rebuild the Histogram panel by @mathildalabs in #9139
- Layered TIFF: write Photoshop's global layer mask block (#9095) by @hectorviov in #9148
- fix(cms): Resolve .cube files with a 1D shaper and a 3D table load (#9177) by @hectorviov in #9183
- fix(ui): the font menu opens on the current family's recent row (#9160) by @hectorviov in #9197
- fix(ui): Bevel & Emboss Highlight and Shadow Mode are separate dropdowns (#9368) by @hectorviov in #9370
- raw: a non-finite black level no longer panics the AHD demosaic by @vangel76 in #9446
- raw: grouped 10/12/14-bit unpack, single-strip buffer kept, in-place undelta by @vangel76 in #9449
- raw: block-wise final encode stage for the default rendering by @vangel76 in #9452
- raw: develop_half, a fused half-size preview develop (part of #9433) by @vangel76 in #9454
- Add optional local models for subject matting and object selection by @mighty-programmer in #1199
- Art History Brush in the Y-group flyout by @mvanhorn in #1610
- Add intermediate UI scale presets between 100% and 125% by @WebWork-rrs in #3316
- History panel: New Snapshot dialog and the first snapshot (#2966) by @itsF4LCON in #3567
- Mixer Brush: render mixed paint during the stroke and commit the live result by @durtyrobbin in #3627
- Integrations: wire Allow Agent Control and Control Port (#204) by @Erica4fr in #4097
- Interface: Animation Effects follows the system setting, or is on or off by @JeremyYao in #4573
- Camera Raw: Calibration panel, Auto, raw sidecars and live Camera Raw Defaults (FILE-215-11) by @FabioLissi in #5128
- perf(algo): Content-Aware Scale 2x faster, within its P28 budget (#211) by @SckraT in #5236
- Blend mode keys: Shift+Alt+letter picks a mode, as in Photoshop by @paulou-jpg in #5478
- Mode dropdowns for Clone Stamp, Pattern Stamp, History Brush, Healing and Paint Bucket by @paulou-jpg in #5504
- fix(zoom): Restore smooth wheel zoom by @sn-o-w in #5547
- perf(camera-raw): develop the preview's per-pixel stages on the GPU (#6916) by @fjamesprice in #6923
- feature: gradient paint to the shape tools, any shape can have a gradient stroke. by @deniskhud in #7203
- Brush: large tips rasterize, accumulate and composite in parallel by @Unemars in #7218
- Crop: Content-Aware Fill keeps the pixels a non-deleting crop hid (#8060) by @Higgs32584 in #8179
- fix(xtask): derive scorecard corpus counts from pinned manifests by @Lucenx9 in #8658
- io: TIFF alpha and spot channels, with PSD output unchanged by @jasallen in #8878
- fix(ui): Type options bar alignment follows the target paragraph by @hectorviov in #9179
- Panels: move onto craft-ui's shared docking by @aiongg in #9366
- Panels: review follow-ups to the shared docking and egui 0.37 merges by @aiongg in #9575
- lint: clear new-code S8855/S8856/S8862/S1612/S7688/S7679 findings by @dylanmtaylor in #9576
- Panels: remove the old dock's drawing code by @aiongg in #9583
- Preserve locale-aware CJK fonts and migration regressions after #9363 by @skylartaylor in #9518
- refactor: lower cognitive complexity in styles apply, affinity text read and warp identity by @dylanmtaylor in #9577
- ci: require nextest 0.9.150 by @skylartaylor in #9749
- refactor: shared module layout (craft-contrib#20) by @aiongg in #9758
- perf(selection): window marquee and lasso feather masks by @wanikhawar in #9794
- Expand, Contract and Border: crop to the selection, up to 40× faster on small selections by @wanikhawar in #9697
- refactor(selection): take the feather reach from the blur by @aiongg in #9802
- fix(ui): dropdown menus grow back after a search with no matches by @aiongg in #9849
- perf(save): faster .pcraft and PSD saves, byte-identical output by @Silvertree2010 in #9877
- Integration batch: 22 PRs on main by @aiongg in #9880
- Crop: X with a ratio preset turns the frame instead of shrinking it (#7057) by @davidmann4 in #7058
- Tests: the effect-map deadlock watchdog waits 120 s for each render, not for all 101 by @dotCooCoo in #9340
- Actions: save and read the Lab Lightness channel as Lght (#9384) by @davidmann4 in #9385
- Preferences: the Generator checkbox reads Enable Generator, as in the reference application (#9392) by @davidmann4 in #9393
- Color panel: the Color Wheel fits the panel at its default height (#9394) by @davidmann4 in #9395
- SVG: an embedded data-URL SVG gets the nesting-depth check (#9397) by @davidmann4 in #9398
- XML: deeply nested ORA, KRA, Camera Raw XMP, .kys and layer XMP are an error, not a crash (#9419) by @davidmann4 in #9421
- Automation: refuse every Windows device name in request paths (#9424) by @davidmann4 in #9425
- Automation: refuse to replace a non-image file in the write root (#9439) by @davidmann4 in #9445
- Plug-ins: refuse a code section with no functions but many bytes instead of panicking (#9679) by @davidmann4 in #9680
- CMYK: the test reference keeps a fully covered type pixel's ink exact (#9688) by @davidmann4 in #9689
- History: History Options with Allow Non-Linear History and undoable visibility changes (#2966) by @davidmann4 in #3535
- PSD save: choose PSB by the encoded size, not the raw estimate (#5285) by @davidmann4 in #5287
- Channels: CMYK channels duplicate, load, split and merge as tone, not ink (#5787) by @davidmann4 in #5789
- Compose: Transparency Shapes Layer off blends a layer's alpha as Fill in the special eight (#5692) by @davidmann4 in #5837
- PSD: Frame layers keep their stroke (#4381) by @davidmann4 in #5890
- PSD: Diffuse, Trace Contour, Crystallize and Pointillize smart filters open and save like Photoshop (#6302) by @davidmann4 in #6303
- Paths: making a selection from a path deselects the path (#6079) by @davidmann4 in #6353
- Color Lookup: PSD save keeps a .3dl/.look LUT file as loaded (#6544) by @davidmann4 in #6723
- Paste: a drawing copied as SVG markup pastes its pixels by @dotCooCoo in #7154
- Autosave: replace a recovery sidecar in one step, so a listing never misses or doubles it (#9034) by @davidmann4 in #9036
- Integration batch: 21 PRs on main by @davidmann4 in #9775
- feat(type): add editable font size, leading and tracking preset menus by @Ni-zav in #3558
- fix(app): add missing supported file formats to Save As file picker (#3400) by @buivanvu94 in #3609
- Layers: New Group dialog and modifiers; new layers go into an open group and join its clip group by @SckraT in #4329
- feat(transform): show distort and skew cursor indicators when holding Ctrl/Cmd by @catursurapam in #5405
- Font menu: favourites, recent fonts, class and similar-font filters, live preview by @D-monized in #6526
- PSD/PSB open without reading the whole file: channel data read as decoded, in bands into tiles (#5106) by @ptrinh in #6583
- perf(compression): Use zlib-rs with runtime detection by @reneleonhardt in #7689
- fix(codecs): check header dimensions against the file size before allocating by @FinnNk in #8704
- fix(ui): Remove Tool trail tints all a stroke removes; brush trails follow hardness (#8916) by @hnoerenberg in #8923
- fix(io): preserve Halftone Pattern smart filters in PSD/PSB by @denstu473 in #9031
- perf(gpu): NVIDIA's own memory on Linux, so many-layer documents stay off the CPU budget penalty (#5973) by @VishnuByrraju in #9042
- Batch: folder sources take every format PhotoCraft opens by @dotCooCoo in #9097
- Color panel: the cube modes warn when a colour can't print (#8672) by @hectorviov in #9154
- feat: Artboard from Layers takes a size of your own (#9087) by @DuBearte in #9262
- feat: type on a path follows its path when the path is edited (#9114) by @DuBearte in #9321
- fix(ui): Select and Mask starts from its defaults unless Remember Settings is on (#9423) by @hectorviov in #9444
- raw: AHD demosaic with reused planar scratch, about 1.6x fewer instructions by @vangel76 in #9450
- raw: develop the default rendering band by band, without the f32 RGB frame by @vangel76 in #9455
- fix(ui): Camera Raw's Color Mixer Hue tracks show the neighbouring hues by @hectorviov in #9601
- Free Transform: show the live W/H readout in the ruler unit (#9400) by @NaufalDzz in #9678
- paint.stroke: fill: true fills the enclosed region (#3659) by @dottedt in #3779
- Windows installation policy: PhotoCraft by @Jeremy8776 in #9756
- Perf: cliff rows for the CPU compositor, Advanced Blending, adjustment toggles, over-budget and huge documents (#7494) by @brennanMKE in #9565
- Enforce Rust coding standards via Clippy by @dylanmtaylor in #9770
- Render path: one place records why a view left the GPU (#9328) by @brennanMKE in #9566
- xtask perf: a baseline knows how trustworthy it is (#7494) by @brennanMKE in #9564
- refactor: split oversized filter, adjustment, crop and effect builders by @osaidahmed in #6463
New Contributors- @softwaregames1 made their first contribution in #9185
- @ssh-den made their first contribution in #9199
- @DuBearte made their first contribution in #9210
- @bercedev made their first contribution in #9129
- @VoiceLessQ made their first contribution in #9264
- @erenova made their first contribution in #9369
- @dependabot[bot] made their first contribution in #8979
- @jasallen made their first contribution in #7415
- @mathildalabs made their first contribution in #9139
- @mighty-programmer made their first contribution in #1199
- @WebWork-rrs made their first contribution in #3316
- @durtyrobbin made their first contribution in #3627
- @JeremyYao made their first contribution in #4573
- @sn-o-w made their first contribution in #5547
- @deniskhud made their first contribution in #7203
- @catursurapam made their first contribution in #5405
- @D-monized made their first contribution in #6526
- @ptrinh made their first contribution in #6583
- @hnoerenberg made their first contribution in #8923
Full Changelog: v0.16.0...v0.17.0 |
Performance and Compatibility
PhotoCraft is built as a native Rust application rather than a web wrapper or Electron application. Its rendering architecture uses wgpu for GPU compositing with support for graphics APIs including Metal, Vulkan, DirectX 12 and WebGPU.
The application also uses multithreaded filters and copy-on-write sparse tiles. This design is intended to reduce unnecessary copying and make large layered documents more manageable.
The project reports extensive automated testing, including PSD round-trip tests, compositor comparisons and multi-depth testing. Its architecture also includes a CPU compositor used as a reference against the GPU compositor.
PhotoCraft can run natively on Windows, macOS, Linux and FreeBSD, with a WebAssembly build for browser use.
The main limitation is maturity. The developers explicitly describe the project as early alpha and acknowledge that it is not yet suitable as a complete replacement for Photoshop in professional daily workflows. Missing areas include AI and generative features, some tools, deeper typography and professional workflows, and plugin compatibility.
System Requirements
PhotoCraft supports:
Windows
macOS
Linux
FreeBSD
WebAssembly/browser
Linux distributions can use AppImage, DEB, RPM, tarball or Flatpak packages.
Hardware requirements are not presented as a simple minimum specification. Because PhotoCraft uses GPU acceleration, actual performance will depend heavily on the graphics hardware and the size and complexity of the documents being edited.
Pros and Cons
Pros
Open-source and available under permissive MIT or Apache-2.0 licensing
Native Rust application
No Electron or embedded web browser required
Excellent focus on PSD compatibility
Extensive layer and adjustment-layer support
GPU-accelerated rendering
Supports CMYK, Lab and high-bit-depth documents
Strong brush and vector capabilities
Windows, macOS, Linux and FreeBSD support
Can also run through WebAssembly
Powerful CLI and automation capabilities
MCP support makes it interesting for AI-assisted workflows
Offline-first approach
Cons
Still early alpha
Not yet a complete Photoshop replacement
Missing some tools and professional workflows
No Photoshop plugin compatibility
AI and generative editing features are limited or absent
Typography capabilities are not yet as mature as established professional editors
Some rough edges should be expected
How to Install
The easiest approach is to download the appropriate package from the project's GitHub releases.
Linux users have several packaging options, including AppImage, DEB, RPM, tarball and Flatpak. Windows has a portable package, while macOS has a universal disk image.
Developers can also build PhotoCraft directly from source using Rust:
git clone https://github.com/storytold/photocraft
cd photocraft
cargo run --release -p photocraft -- image.psd
The repository also provides CLI functionality for automated editing and batch processing.
Final Verdict
PhotoCraft is one of the more ambitious open-source Photoshop alternatives currently available. Its combination of native Rust performance, extensive layer support, serious PSD compatibility work and an unusually capable automation architecture makes it much more than a basic image editor.
The strongest reason to watch PhotoCraft is its engineering approach. The project is building a real image-editing engine rather than simply creating a Photoshop-like interface, and its extensive PSD testing provides a useful foundation for compatibility.
The biggest problem is maturity. The project itself acknowledges that it is still early alpha and lacks several areas required for professional Photoshop replacement workflows. Users who depend on plugins, advanced typography, AI features or highly polished production workflows should not switch completely yet.
For enthusiasts, developers, Linux users, open-source advocates and anyone interested in building automated image-processing workflows, however, PhotoCraft is particularly compelling.
Post a Comment/Report Broken Link: