Giting.
낮의 Giting

홈 · 사진 편집 · Rust · 클린룸 · 에이전트 개발 · PSD · MIT·Apache-2.0

photocraft 대표 이미지 포토샵과 같은 손버릇(메뉴·단축키·패널)을 가진 데스크톱 사진 편집기. 레이어, 마스크, 조정 레이어, 레이어 스타일, 글자, 벡터, 브러시, 실제 PSD 파일 읽고 쓰기, 카메라 RAW 현상을 내세운다. macOS·Windows·Linux·FreeBSD 네이티브와 웹(WebAssembly). ArtCraft 팀이 내는 「Crafting Apps」(벡터·영상·PDF 등 7종) 중 하나다
분석 리포트실측 정보사이트적용점원문 README

뭘 하나

PhotoCraft 는 포토샵을 쓰던 손이 그대로 움직이는 사진 편집기다. 메뉴 위치, 단축키(⌘J 레이어 복제, ⇧⌘D 다시 선택 같은 것), 패널 배치를 포토샵에 맞췄다. README 의 첫 문장이 정체를 그대로 말한다.

> an open-source, clean-room reimplementation of Adobe Photoshop, rebuilt in pure Rust.

내세우는 기능은 레이어, 마스크, 조정 레이어, 레이어 스타일, 글자와 벡터, 브러시, 실제 PSD 읽고 쓰기, 카메라 RAW 현상이다. macOS·Windows·Linux·FreeBSD 네이티브 앱으로 나오고 웹(WebAssembly)으로도 돈다. 만든 곳은 AI 이미지·영상 스튜디오 ArtCraft 팀이고, 같은 방식으로 만든 「Crafting Apps」가 벡터·영상·PDF·레이아웃까지 일곱 개 있다.

어떻게 만들었나 (실측)

분석 기준 커밋 1e916a4e(2026-10-13). 이력은 전체를 받아 다시 셌다.

  • 전체 1,722 파일, 628,083줄. Rust 1,281 파일 530,308줄
  • crates 25개, Cargo.lock 패키지 730개
  • 테스트 파일 427개, CI 워크플로 7개
  • 커밋 2,104개, 저자 287명, 첫 커밋 2026-09-30

구조의 중심은 명령 등록부다. 메뉴 항목, 도구, 대화상자가 전부 500개가 넘는 명령 하나하나를 부르고, CLI·JSON 제어 채널·MCP 서버도 같은 명령을 부른다. 그래서 화면에서 할 수 있는 일은 명령줄과 에이전트에서도 똑같이 된다.

photocraft-cli run wave.psd \
  --cmd filter.sharpen.smartSharpen --params '{"amount":80}' \
  --out wave-final.png

픽셀은 256×256 타일로 나눠 여러 시점이 함께 쓰고, 고칠 때만 복사한다. 실행 취소와 자동 저장이 문서 전체를 복사하지 않아도 된다. 알고리즘마다 CPU 기준 구현이 있고, 빠르게 돌릴 것만 GPU 판을 따로 두되 둘이 같은 파라미터 구조체를 읽는다. 결과가 CPU 와 GPU, 미리보기와 내보내기에서 같아야 한다는 원칙이 docs/architecture.md 에 적혀 있다.

2주의 숫자

하루 커밋은 첫 주에 6~102개였다가 둘째 주에 188 → 211 → 366 → 254 → 253 → 276 → 276개로 늘었다.

별은 10월 5일까지 거의 바닥이었다. 10월 6일부터 하루 수천 개씩 오르기 시작해 지금 56,755개다(star-history 그래프). 열흘 만에 별이 몰렸다는 점은 REA 와 닮았다. 다른 점은 같이 움직인 숫자들이다.

릴리스 내려받기 (10개 합계)약 1,177,516
PR 병합 형태 커밋1,912
저자287
열린 이슈1,482

릴리스 내려받기는 0.5.0 하나가 343,849, 0.7.0 이 330,736이다. 별을 누른 계정은 볼 수 없지만, 사람이 실제로 받아 보고 고쳐 보내지 않으면 생기지 않는 숫자들이 별과 같이 올랐다.

에이전트로 지은 정도도 숫자로 보인다. 커밋 2,104개 중 1,317개(63%)에 Co-Authored-By: Claude 표시가 붙었다. 첫날의 두 커밋 「one-shot」과 「continued wip」이 각각 42,241줄과 37,990줄을 더했다. 남은 일정표는 칸 이름이 「Agent-hours」(에이전트 시간)와 「Wall-clock」(실제 걸리는 시간)이다. 영상·타임라인 기능 하나를 「에이전트 50~80시간, 실제 10~14시간」으로 잡는 식이다. 사람의 일정이 아니라 에이전트 여럿이 동시에 도는 시간으로 계획을 짠 문서다.

조심할 것

아직 알파다. README 배지가 「early alpha」다. 0.1.0 에서 0.8.2 까지 열흘에 왔고 열린 이슈가 1,482개다. PSD 를 열어 볼 때는 원본을 따로 둔다.

클린룸은 원칙이지 검증이 아니다. docs/architecture.md 는 「다른 편집기의 동작만 관찰하고, 읽을 수 있는 형태로 배포된 독점 코드도 베끼지 않는다」고 적었다. 명세는 Adobe 가 공개한 PSD 명세, ICC 같은 표준, 논문에서 온다. 좋은 규칙이다. 다만 커밋 대부분을 쓴 것이 사람이 아니라 모델이고, 그 모델이 무엇을 보고 배웠는지는 저장소가 말해 줄 수 없다. 클린룸이 지켜졌는지를 밖에서 확인할 길은 아직 없다.

포토샵을 정면으로 따라간다. 이름과 단축키, 메뉴 배치까지 맞춘 것은 사용자에게는 장점이다. 반면 앞으로 Adobe 가 어떻게 반응할지는 아무도 모른다. 오래 기대어 쓸 도구로 고를 때 넣어 둘 변수다.

좋은 쪽도 적어 둔다. 통계·오류 보고 코드가 없다. HTTP 클라이언트 라이브러리도 의존성에 없다. 「오프라인, 네 것」이라는 README 의 말과 코드가 맞는다. 라이선스는 MIT 또는 Apache-2.0 중 고르는 이중 라이선스다.

이번엔 돌려 보지 않았다. 위 내용은 저장소, 이력, 의존성, 문서를 읽은 것이다. 실제로 포토샵 파일을 얼마나 잘 여는지는 다음에 직접 열어 보고 덧붙인다.

우리가 가져올 것

  • 화면·CLI·에이전트가 같은 명령 하나를 부르게 만들면, 에이전트를 붙이는 일이 따로 생기지 않는다.
  • 프로젝트 원칙을 짧은 번호 목록으로 적어 두면 사람 수백 명과 에이전트가 같은 기준으로 일한다.
  • 「무엇을 보고 만들었는가」를 남기는 일은 에이전트가 코드를 쓰는 시대에 더 중요해진다. 이 저장소가 그 질문을 가장 크게 보여 준다.

실측 정보

무엇
포토샵과 같은 손버릇(메뉴·단축키·패널)을 가진 데스크톱 사진 편집기. 레이어, 마스크, 조정 레이어, 레이어 스타일, 글자, 벡터, 브러시, 실제 PSD 파일 읽고 쓰기, 카메라 RAW 현상을 내세운다. macOS·Windows·Linux·FreeBSD 네이티브와 웹(WebAssembly). ArtCraft 팀이 내는 「Crafting Apps」(벡터·영상·PDF 등 7종) 중 하나다
규모 / 실측
총 1,722 파일 · 628,083줄. Rust 1,281 파일 530,308줄. crates 25개(engine·psd·raw·gpu·paint·text·ui-egui 등), Cargo.lock 패키지 730. 테스트 파일 427 · CI 워크플로 7. 가장 큰 파일 `crates/ui-egui/src/canvas.rs` 7,899줄
활발 / 유지
첫 커밋 2026-09-30, 전체 커밋 2,104 · 저자 287. 하루 커밋은 10-04 59개에서 10-09 366개까지 늘었다. 커밋 1,912개가 PR 병합 형태라 대부분이 외부 기여로 들어왔다. 릴리스 10개(rc 포함, 0.1.0 → 0.8.2 를 10일에), 열린 이슈 1,482, 이슈 표본 25건 중 5건에 답(중앙값 0.4시간)
에이전트로 만든 정도
커밋 2,104개 중 1,317개(63%) 에 `Co-Authored-By: Claude` 표시가 있다. 첫날 커밋 두 개(「one-shot」·「continued wip」)가 각각 42,241줄과 37,990줄을 더했다. `AGENTS.md`(159줄)의 첫 줄이 「AI 에이전트와 기여자를 위한 안내」이고, 남은 일정표(`docs/target-app-parity.md`)는 칸 이름부터 「Agent-hours」와 「Wall-clock」이다
작동 방식
명령 등록부 하나에 500개가 넘는 명령이 있고 메뉴·CLI·JSON 제어 채널·MCP 서버가 모두 같은 명령을 부른다. 픽셀은 256×256 타일을 공유하는 쓰기 시 복사 구조라 실행 취소와 자동 저장이 가볍다. 알고리즘마다 CPU 기준 구현(Rust)이 있고 일부는 GPU(WGSL) 구현이 같은 파라미터 구조체를 읽는다(`docs/architecture.md`)
개인정보 / 네트워크
통계·오류 보고 코드가 없다(telemetry·posthog·sentry·analytics 검색 0건). HTTP 클라이언트 라이브러리(reqwest·ureq·hyper 등)도 의존성에 없다. README 의 「오프라인」 약속과 맞는다
라이선스 / 클린룸
MIT 또는 Apache-2.0 이중 라이선스(LICENSE 파일 둘). C/C++ 의존성은 입출력 끝단의 선택 기능으로만 허용한다는 원칙이고, 의존성의 `-sys` 크레이트는 운영체제 연결용(windows·wayland·pipewire 등)이다. 「클린룸」은 공개 명세(PSD 명세·ICC)·논문·관찰한 동작만 쓰고 독점 코드는 베끼지 않는다는 규칙으로 문서에 적혀 있다. 그 규칙이 실제로 지켜졌는지는 저장소만으로 확인할 수 없다

사이트 실측

주소
getartcraft.com/apps/photocraft
응답 · 첫 화면
200 · 0.9초 (데스크톱)
요청 · 전송량
66개 · 1.4MB
깨진 요청 · 콘솔 오류
0개 · 0개
폰(390px)
가로로 4px 넘침
디자인
밝은 화면 · Inter · Archivo

홈페이지를 실제 크롬으로 띄워 첫 화면까지만 쟀습니다(2026-10-16 · 데스크톱 1440px · 폰 390px). 로그인 · 입력 같은 동작은 하지 않았고, 사이트 상태는 리포 품질과 따로 봅니다. 색 칸은 바탕 · 면 · 글자 · 흐린 글자 · 강조 · 선, 점선은 「못 잼」.

적용점

  • 이럴 때 유용포토샵 없이 PSD 를 열어 레이어째 고치거나, 명령줄로 같은 보정을 폴더째 돌려야 할 때 시험해 볼 만하다(`photocraft-cli batch`). 무엇보다 에이전트로 큰 데스크톱 앱을 짓는 사람에게는 읽을거리가 많다. 명령 등록부 하나로 UI·CLI·MCP 를 묶은 구조, 기능 동등성 점수표(`scorecard/`), 에이전트용 기여 안내가 전부 공개돼 있다.
  • 이럴 땐 주의본업 편집기로 바꾸기엔 이르다. 스스로 early alpha 라 적었고, 열린 이슈가 1,482개, 0.1 에서 0.8 까지 열흘에 왔다. PSD 를 다룬다면 원본은 따로 두고 열어 본다. 「클린룸」은 저장소가 밝힌 원칙일 뿐 외부 검증을 거친 사실이 아니다. 포토샵의 이름과 손버릇을 정면으로 따라가는 제품이라 앞으로의 법적 판단은 지켜봐야 한다.
  • 먼저 볼 것`docs/architecture.md` 의 원칙 목록이다. 「알고리즘 하나에 파라미터 구조체 하나」, 「CPU 와 GPU 가 같은 결과를 낸다」, 「클린룸」 같은 규칙이 짧게 적혀 있어 사람과 에이전트가 같은 기준으로 일하게 만든다. 그다음 `docs/target-app-parity.md` 에서 남은 일을 어떻게 쪼개 두었는지 본다.
◈ 참고용

판정은 참고용이다. 숫자는 진짜로 보인다. 별만 오른 게 아니라 같은 기간에 릴리스 내려받기 약 118만 회, PR 병합 1,912개, 저자 287명이 함께 움직였고, 코드도 Rust 53만 줄에 테스트 파일 427개로 실재한다. 통계 전송 코드가 없고 이중 라이선스도 깔끔하다. 그런데도 도입 후보로 두지 않는 이유는 둘이다. 첫째, 아직 알파다. 2주 된 편집기에 작업 파일을 맡길 수는 없다. 둘째, 이 저장소의 진짜 가치는 편집기보다 만드는 방식에 있다. 커밋 63% 가 Claude 와 함께 쓰였고, 첫날 8만 줄이 들어왔고, 그 뒤 수백 명이 에이전트로 PR 을 보냈다. 「포토샵을 클린룸으로 다시 짓는다」는 말이 에이전트 시대에 어떤 속도로 현실이 되는지, 그리고 그 클린룸을 누가 어떻게 보증하는지라는 질문을 동시에 보여 준다. 그래서 지금은 쓰기보다 읽어 둘 저장소다. 이번 리포트는 저장소·이력·의존성·문서를 읽어 썼고 앱을 설치해 돌려 보지는 않았다.

원문 README

아래는 storytold/photocraft 저장소의 README 원문입니다(GitHub 렌더, 수집 시점 기준). 저작권은 원 프로젝트에 있으며 원 저장소의 라이선스를 따릅니다. GitHub에서 보기

README 전문 펼치기

ArtCraft

PhotoCraft

Image editing; an open-source, clean-room reimplementation of Adobe Photoshop, rebuilt in pure Rust.
Layers, masks, adjustment layers, layer styles, type, vectors, brushes and real PSD files,
in a native app written entirely in Rust. Open source, offline, and yours.

100% Rust macOS · Windows · Linux · FreeBSD · Web License: MIT OR Apache-2.0 Status: early alpha

Join the ArtCraft community on Discord

PhotoCraft on getartcraft.com · ArtCraft · All Crafting Apps


PhotoCraft editing Hokusai's The Great Wave: a caption card with a drop shadow, Title and Credit type layers, Vibrance and Curves adjustment layers, and the Curves editor drawn over the image's histogram
A caption card with a drop shadow, live type, and Vibrance and Curves adjustment layers, with the Curves editor open.
The Great Wave off Kanagawa, Katsushika Hokusai, c. 1831

Note

ArtCraft is a community of artists from all walks of life. Digital, generative, music, games — if you make things, you're one of us. Come say hi on Discord.

Features · Everything in the box · PSD · Agents · Under the hood · Get started · Downloads · Crafting Apps · Discord


🎛️ Familiar by design

The menus, shortcuts, panels and tools are where your hands expect them, from ⌘J to ⇧⌘D. If you know Photoshop, you already know PhotoCraft.

⚡ Native and fast

A GPU compositor on wgpu (Metal, Vulkan, DX12, WebGPU), copy-on-write tiles and multithreaded filters. No Electron, no web view, no waiting.

🗂️ Real PSD files

Open, edit and save layered Photoshop documents. Re-saving keeps the render of 307 of the 309 psd-tools test files.

🤖 Agent-ready

Every action is a command, so you can drive the same engine from the UI, the CLI, a JSON control channel or an MCP server.

Features

Every screenshot here is the real app at work on public-domain art, rendered offscreen through its control channel.

Monet's Impression, Sunrise with Levels and Vibrance adjustment layers; the Levels editor and the Histogram panel with mean, standard deviation and median are open on the right
Levels and Vibrance adjustment layers, with the live Histogram panel.
Impression, Sunrise, Claude Monet, 1872

Edit without regret

Adjustment layers keep every edit live. Stack Levels, Curves, Vibrance, Hue/Saturation and a dozen more, mask them to an area, reorder them, or turn them off, and your original pixels never change.

16 adjustment layers that also apply directly to pixels, including Curves with per-channel editing, Levels with a live histogram, Black & White, Channel Mixer, Gradient Map, Photo Filter, Selective Color and Color Lookup (.cube, .3dl, .look). Plus Shadows/Highlights, Replace Color, Match Color, HDR Toning, Desaturate and Equalize.
The Layer Style dialog editing an Outer Glow on the EARTHRISE type layer, with Stroke also enabled, over the Apollo 8 Earthrise photograph
Outer Glow and Stroke on a live type layer, in the Layer Style dialog.
Earthrise, William Anders / NASA, 1968

Styles that sell the shot

Drop Shadow, Inner Shadow, Outer and Inner Glow, Bevel & Emboss, Satin, Stroke, and Color, Gradient and Pattern Overlay, live on any layer, including type. Patterns come from a library (built-ins, Edit › Define Pattern, .pat import/export) and PSD Patt blocks.

Copy and paste styles between layers, hide all effects at once, and open styles straight from your PSDs, rendered to match Photoshop.
Vermeer's Girl with a Pearl Earring: an elliptical selection around the face, and a Hue/Saturation layer with an elliptical mask that turns everything outside the face gray
An elliptical selection becomes the mask of a Hue/Saturation layer, so only the face keeps its color.
Girl with a Pearl Earring, Johannes Vermeer, c. 1665

Selections that understand your image

Marquees, lassos and the Magic Wand for precision; Quick Selection, Object Selection and Select Subject when you want the computer to do the tracing; Select and Mask to refine hair-fine edges.

Feather, expand, contract, smooth, grow, reselect. Turn any selection into a layer mask, a vector path or a shape. Smart selection runs on your machine, with no cloud and no account.
Bierstadt's Among the Sierra Nevada with the headline SIERRA NEVADA being edited on the canvas in Georgia, a byline, and a paragraph caption; the Character and Paragraph controls are open
A headline edited in place, with a byline and a paragraph of body text.
Among the Sierra Nevada, California, Albert Bierstadt, 1868

Type that sets beautifully

Point and paragraph text, edited right on the canvas, with full Character and Paragraph controls: font, weight, size, leading, tracking, alignment and colour. The full Type Color Picker also supports screen sampling with a pixel loupe.

Type layers stay editable, take layer styles, and round-trip through PSD.
A lotus badge built from shape layers (Lotus, Water, Sun, Badge and Dotted Ring) over Monet's Water Lilies, with the lotus path's anchor points selected
A badge made of shape layers: a gradient-filled lotus, a star and a dotted ring.
Water Lilies, Claude Monet, 1906

Pixel-perfect vectors

Rectangle, Ellipse, Triangle, Polygon, Line and the Pen, Freeform Pen and Curvature Pen tools, with resolution-independent shape layers, gradient fills, and dashed, aligned strokes.

Combine shapes (unite, subtract, intersect, exclude), keep paths in the Paths panel, use them as vector masks, or stroke and fill them. 116 of 116 shape layers in our PSD corpus match Photoshop's pixels.
The Twirl filter dialog at a 320 degree angle, previewing live inside an elliptical selection on Van Gogh's The Starry Night
Twirl previews live on the canvas, only inside the selection.
The Starry Night, Vincent van Gogh, 1889

See it before you commit

Every filter dialog previews live on the canvas, through your selection. Blurs (Gaussian, Box, Motion, Radial, Surface, Smart, Lens, Shape, and the Blur Gallery: Tilt-Shift, Iris, Field, Spin, Path), sharpening, Reduce Noise, distortions (Twirl, Wave, Ripple, Displace, Shear, Zig Zag…), Pixelate, Stylize (Oil Paint, Wind, Extrude…), Render (Clouds, Fibers, Lens Flare, Lighting Effects) and more.

Run filters on a smart object and they stay editable: change, hide, reorder or mask them at any time.

Large-radius blurs use running-sum box passes across all cores: a radius-180 Gaussian on 3.6 MP takes under a second.
Free Transform handles around a rotated copy of Ansel Adams' The Tetons and the Snake River, with the History panel listing Open, Duplicate Layer, Free Transform and other steps
Free Transform on a rotated print, with every step listed in History.
The Tetons and the Snake River, Ansel Adams, 1942

Shape it any way you like

Free Transform with scale, rotate, skew, distort and perspective; exact 90° and 180° rotations and flips; Transform Again. Layers, type, shapes, masks and selections all transform together.

Full history, Toggle Last State and the History Brush mean every step can be undone, even one brush stroke at a time.
The Export As dialog in the light theme over Klimt's The Kiss: JPG at quality 90, scaled to 50 percent, with a preview and an estimated size of about 684K
Export As in the light theme, with a preview and a file-size estimate.
The Kiss, Gustav Klimt, 1907–1908

Ship it anywhere

Export As with format, quality, transparency and scale, plus a preview and an instant file-size estimate. Quick Export to PNG in one click.

Choose a dark Pro theme, the airy Studio themes, or a Classic look.

Everything in the box

🧰 67 tools

Move · Artboard · Rectangular and Elliptical Marquee · Single Row Marquee · Single Column Marquee · Lasso · Polygonal Lasso · Magnetic Lasso · Object Selection · Quick Selection · Magic Wand · Crop · Perspective Crop · Slice · Slice Select · Frame · Eyedropper · Color Sampler · Ruler · Note · Count · Remove · Spot Healing Brush · Healing Brush · Patch · Content-Aware Move · Red Eye · Brush · Pencil · Mixer Brush · Color Replacement · Clone Stamp · Pattern Stamp · History Brush · Eraser · Background Eraser · Magic Eraser · Gradient · Paint Bucket · Blur · Sharpen · Smudge · Dodge · Burn · Sponge · Pen · Freeform Pen · Curvature Pen · Add Anchor Point · Delete Anchor Point · Convert Point · Horizontal and Vertical Type · Horizontal and Vertical Type Mask · Path Selection · Direct Selection · Rectangle · Ellipse · Triangle · Polygon · Line · Custom Shape · Hand · Rotate View · Zoom

🖌️ A real brush engine

Shape Dynamics, Scattering, Texture, Dual Brush, Color Dynamics, Transfer, Brush Pose, Wet Edges, Build-up and Smoothing (including Pulled String), driven by pen pressure, tilt, rotation and direction. Brush presets, Define Brush from Selection, and deterministic, replayable strokes.

🗃️ Layers, done properly

Groups, clipping masks, pixel and vector masks, fill layers (solid, gradient and pattern), adjustment layers, live smart objects with smart filters and lossless transforms and warps, multi-layer selection with align, distribute and link, alpha channels and Quick Mask, 27 Photoshop blend modes plus six Paint.NET variants, opacity and fill, locks, colour labels, layer filters, merge, flatten, rasterize, Layer via Copy/Cut, Paste Into.

🎨 Any colour, any depth

RGB, Grayscale, CMYK and Lab documents at 8, 16 and 32 bits per channel. Bit depth and colour model are runtime data, so every tool works at every depth.

Real ICC colour management in pure Rust: embedded profiles, Assign and Convert to Profile with all four rendering intents and black point compensation, soft proofing (⌘Y) and Gamut Warning (⇧⌘Y) on the GPU.

🗂️ Formats

PSD and PSB, layered TIFF (Photoshop's layer data in the TIFF, read and written in either byte order), Paint.NET PDN3 (read, with editable layers and all 14 blend modes), OpenRaster (read and write, with layers, groups and blend modes, for Krita, MyPaint and GIMP), Krita .kra (read, with paint layers, groups, blend modes and transparency masks), SVG (opens as shape layers, places as a vector Smart Object), plus flat PNG, JPEG, TIFF, WebP (lossy and lossless), GIF, BMP, TGA, ICO, QOI, PNM, OpenEXR, Radiance HDR and FITS (astronomy images: 8/16-bit and 32-bit float, gray or RGB, header kept), and the native .pcraft format. Flat formats retain the depths they support: PNG keeps 8/16-bit samples, TIFF keeps 8/16-bit and 32-bit float samples, and OpenEXR keeps half/float samples; JPEG, WebP and the other 8-bit formats reduce higher-depth samples with an export warning. See the codec capability matrix for each format. HEIC photos from iPhone and Mac are read-only (included in official builds; optional --features heif for source builds). AVIF is write-only with the optional avif build feature; AVIF decoding and JPEG XL are unavailable. Affinity documents (.af, .afdesign, .afphoto, .afpub) open natively, read only, with artboards, layers, vectors, text, images and masks; effects, adjustments and other unsupported parts are listed in a warning, and Affinity export is unavailable.

🪄 The everyday essentials

Auto Tone, Contrast and Color · Equalize · Image and Canvas Size · Crop and Trim · Reveal All · Edit › Fill and Stroke · Copy Merged · Paste in Place · guides, rulers, grid and snapping · Actions record and replay · a command palette (⌘F).

PSD without compromise

PhotoCraft's PSD support is a standalone crate written from Adobe's public specification and tested against a corpus of real-world files.

  • Faithful round trips: opening and re-saving a document renders the same for 307 of the 309 files in the psd-tools test set and 169 of 170 in our mixed ag-psd/psd-tools set (crates/io/tests/corpus.rs; fetch the psd-tools set with cargo xtask corpus --psd-tools), and anything we don't model yet (raw blocks, descriptors, extras) is carried over instead of being dropped. A re-saved file is not byte-identical to its source: PhotoCraft rewrites image resources, layer records and the composite. Only the standalone photocraft-psd crate, parsing and writing a file without the document model, reproduces every parseable corpus file byte for byte (crates/psd/tests/corpus.rs).
  • Pixels that match: a composite oracle compares our render with Photoshop's own merged image, covering gradient interpolation (Classic, Perceptual and Linear), layer effects, shape strokes, clipping and fill opacity.
  • Large documents: PSB, 16 and 32-bit files, and CMYK and Lab documents open natively.

Built for agents

Every menu item, tool and dialog runs a command from one registry of 500+ commands. The UI, the CLI, the JSON control channel and the MCP server all call the same commands, so anything you can click, a script or an AI agent can do too.

# Headless: open, edit, save
photocraft-cli run wave.psd \
  --cmd filter.sharpen.smartSharpen     --params '{"amount":80}' \
  --cmd layer.newAdjustmentLayer.curves --params '{"points":[[0,0],[64,48],[192,212],[255,255]]}' \
  --out wave-final.png

# Apply one action list to a folder of images
photocraft-cli batch --actions grade.json --in ./raw --out ./graded

# Every subcommand explains itself
photocraft-cli batch --help

# Let an agent drive it over MCP (headless, or bridged to the running app)
photocraft-cli mcp

The desktop app also offers an authenticated, loopback-only control channel (photocraft --control) for inspecting UI state, driving tools with pointer events, and taking offscreen screenshots. Every image in this README was rendered that way. See docs/control-protocol.md.

Under the hood

  • Engine first: a pure-data document model and a command engine, with a thin egui UI on top. Layering is enforced at build time across 24 crates.
  • Two compositors: a CPU compositor serves as the reference oracle, and a wgpu compositor puts the canvas on the GPU. They are tested against each other.
  • Copy-on-write tiles: 256² sparse tiles make undo cheap and huge canvases light, and effect maps are cached per layer state.
  • Runs in the browser: the whole engine and UI compile to WebAssembly.
  • Clean-room: implemented from public specs and observed behaviour only. No proprietary code, shaders or assets.
  • Tested: more than 1,700 tests, including PSD round trips, synthetic generators, compositor oracles and multi-depth checks.

Get started

git clone https://github.com/storytold/photocraft
cd photocraft
cargo run --release -p photocraft -- image.psd   # the desktop app
cargo test --workspace                           # the test suite

Japanese fonts for the UI and Type tool come from craft-fonts, an optional build input (desktop release builds always include it). Without it PhotoCraft uses your system's CJK fonts:

git clone https://github.com/storytold/craft-fonts ../craft-fonts
CRAFT_FONTS_DIR="$PWD/../craft-fonts" cargo run --release -p photocraft

New contributors and AI agents: start with AGENTS.md, then docs/.

Installers for macOS, Windows, Linux, FreeBSD and the web are attached to each GitHub release. On Linux you can pick an AppImage, a .deb, an .rpm, a tarball or a Flatpak bundle. The bundle needs the freedesktop runtime from Flathub, which flatpak offers to install along with it:

flatpak install --user photocraft-<version>-linux-x86_64.flatpak   # or -linux-aarch64
flatpak run ai.storyteller.photocraft

The AppImage needs no install: the first run registers its launcher icon and menu entry in ~/.local/share so the dock shows PhotoCraft's icon on Wayland. Set PHOTOCRAFT_NO_DESKTOP_INTEGRATION=1 to skip that, and see docs/releasing.md › Linux to undo it.

On a Wayland session, files dropped on the window don't open yet: winit 0.30, the windowing library under egui, has no Wayland drag and drop (#386). Use File › Open, or copy the image in your file manager and paste it with Ctrl+V. To drag and drop, start PhotoCraft under XWayland: WAYLAND_DISPLAY= photocraft, WAYLAND_DISPLAY= ./photocraft-<version>-linux-x86_64.AppImage, or flatpak run --nosocket=wayland --socket=x11 ai.storyteller.photocraft. On Wayland, PhotoCraft shows the command for your install in a notice until you dismiss it.

On macOS, the command-line tool comes as photocraft-cli-<version>-macos-universal.zip. The binary is signed with the same Developer ID as the app and notarized by Apple. A bare binary can't carry a stapled notarization ticket the way the DMG does, so the first time you run it macOS checks the notarization online. You can confirm it yourself:

ditto -x -k photocraft-cli-<version>-macos-universal.zip .
spctl --assess --type install -vv photocraft-cli-<version>-macos-universal/photocraft-cli
# ... accepted, source=Notarized Developer ID

On FreeBSD 14 (x86_64), the release has a tarball laid out like /usr/local. Install the runtime libraries, then unpack it there:

pkg install libxkbcommon wayland libX11 libXcursor libXrandr libXi libxcb mesa-libs vulkan-loader gtk3 fontconfig freetype2 alsa-lib
tar -xzf photocraft-<version>-freebsd-x86_64.tar.gz --strip-components 1 -C /usr/local
photocraft

Maintainers: docs/releasing.md explains how releases are built, signed and published.

Important

Status: PhotoCraft is in early alpha, and we want to be straight about where it stands: much of Photoshop's feature surface exists in some form, but it is not yet a Photoshop replacement for daily professional work. The biggest gaps are AI/generative features, 15 missing tools, depth in typography and pro workflows, and plug-in compatibility. Every Photoshop menu item is wired to a command (docs/parity-checklist.md), but that measures wiring, not behaviour. The honest, dimension-by-dimension picture and where we're going next are in the roadmap and parity assessment. Expect rough edges, and please file issues (include your OS, document size, layer count and a screenshot). You can also tell us what broke on Discord.

Documentation

Developer, architecture, automation, format, and security documentation is maintained in the PhotoCraft documentation book.

To self-host the browser version with Docker, see Docker web hosting.

Security

Security architecture, threat modeling, parser hardening, fuzzing, and vulnerability reporting are covered in the security documentation and the repository security policy.

Test corpora

PhotoCraft is tested against real files: our own Photoshop-authored oracle PSDs in photocraft-corpus plus the psd-tools, ag-psd and PngSuite sets, pinned and sha256-verified. Fetch them with cargo xtask corpus --all and run the tests with cargo xtask test-corpus (details in docs/development.md).

Downloads

New to PhotoCraft? Download it from the PhotoCraft page on getartcraft.com. That's the easiest way to install it.

Want a specific build or format? On GitHub, the latest release has every build listed below, and all releases has earlier versions and their notes. <ver> in the file names is the version number, and SHA256SUMS.txt lists a checksum for every file.

Windows

Build Installer Portable
x64 (64-bit Intel/AMD) photocraft-<ver>-windows-x64.msi photocraft-<ver>-windows-x64-portable.zip
arm64 (Snapdragon and other ARM PCs) photocraft-<ver>-windows-arm64.msi photocraft-<ver>-windows-arm64-portable.zip
x86 (32-bit) photocraft-<ver>-windows-x86.msi photocraft-<ver>-windows-x86-portable.zip

Installers and executables are code-signed.

macOS

Build File Notes
App, universal (Apple silicon + Intel) photocraft-<ver>-macos-universal.dmg Signed and notarized
Command-line tool, universal photocraft-cli-<ver>-macos-universal.zip Signed and notarized

Linux

Format x86_64 aarch64 (ARM64) Notes
AppImage photocraft-<ver>-linux-x86_64.AppImage photocraft-<ver>-linux-aarch64.AppImage Runs anywhere; updates itself with AppImageUpdate (.zsync files)
Flatpak photocraft-<ver>-linux-x86_64.flatpak photocraft-<ver>-linux-aarch64.flatpak Sandboxed; flatpak install --user <file>
Debian/Ubuntu photocraft-<ver>-linux-x86_64.deb photocraft-<ver>-linux-aarch64.deb
Fedora/RHEL/openSUSE photocraft-<ver>-linux-x86_64.rpm photocraft-<ver>-linux-aarch64.rpm
Tarball photocraft-<ver>-linux-x86_64.tar.gz photocraft-<ver>-linux-aarch64.tar.gz Unpack anywhere

RISC-V (riscv64): photocraft-<ver>-linux-riscv64.tar.gz only, built against Ubuntu 24.04 (needs glibc 2.39+).

FreeBSD

Build File
x86_64 photocraft-<ver>-freebsd-x86_64.tar.gz

Web (WebAssembly)

Build File Notes
Static site photocraft-web-<ver>.zip Runs in a modern browser; host it on any static server

The Crafting Apps

PhotoCraft is one of the Crafting Apps: free, open-source creative tools from the ArtCraft team, each written from scratch in Rust and each able to stand on its own.

App What it's for Code Learn more
PhotoCraft Image editing: layers, masks, type and real PSD files · you are here GitHub Website
VectorCraft Vector illustration GitHub Website
FilmCraft Video editing, color and sound GitHub Website
LightCraft Photo library and raw development GitHub Website
PdfCraft Reading, organizing and protecting PDFs GitHub Website
EffectCraft Motion graphics and visual effects GitHub Website
DesignCraft Page layout and publishing GitHub Website

And ArtCraft itself, our AI image and video studio for artists who want real control.

The Crafting Apps share the same conventions: clean-room and pure Rust, native on macOS, Windows and Linux, in the browser via WebAssembly, and fully drivable by agents.


Join the ArtCraft community on Discord

Come make things with us

Our Discord is where artists of every kind hang out: people who paint, shoot, draw, cut film, set type, and people still figuring out what they like to make. Share what you're working on, ask for help, tell us what's broken, or tell us what you wish these tools could do. Whatever your medium and however long you've been at it, you're welcome here.

discord.gg/artcraft · getartcraft.com · The Crafting Apps · PhotoCraft


License and credits

PhotoCraft is dual-licensed under MIT or Apache-2.0, at your option. Copyright (c) 2026 ArtCraft Team and the PhotoCraft contributors. Required notices are in NOTICE.

Bundled fonts, icons, images and other assets keep their own open licenses; each one is listed with its author, source and license in ATTRIBUTION.md.

Every artwork shown is in the public domain (Wikimedia Commons, NASA, U.S. National Archives); sources are listed in docs/images/SOURCES.md.

The ArtCraft name, wordmark and logos in docs/brand/ are trademarks of the ArtCraft Team and are not covered by this license. They may be used only unmodified, and only as part of this repository and PhotoCraft, under docs/brand/LICENSE-brand.txt. Forks and modified versions must remove them.

Adobe, Photoshop, Illustrator, Premiere Pro, Lightroom, Acrobat, After Effects and InDesign are trademarks or registered trademarks of Adobe Inc. in the United States and/or other countries. PhotoCraft is an independent, open-source project and is not affiliated with, sponsored by or endorsed by Adobe Inc.; these names are used only to describe the workflows it is compatible with.

ArtCraft
Made by the ArtCraft team and community.

Star history

Star History Chart

의견

판정에 대한 반론, 도입 경험, 정정 제보를 환영합니다. GitHub 계정으로 참여합니다.

이것도 재봤습니다

전체 리포트 →