A source-available, browser-first photo editor with layered editing, Photoshop-inspired workflows, a WebGL2-accelerated compositor, and desktop/browser distributions. It aims for useful Photoshop / GIMP / Photopea workflow compatibility, not full feature-for-feature or plugin-binary equivalence.
Open the live editor · Download builds · User guide · Feature & format reference · Tool parity audit · Cross-app parity chart · Report an issue
- Open the live editor or install a release from GitHub. Use File → New, Open…, New from Clipboard, or drag a supported image into the editor.
- Select a tool in the left toolbar. Modify size, shape, sampling, selection mode and other settings in Tool Options. Right-click a tool group or use Edit → Customize Toolbar… to organize tools.
- Keep edits reversible with layers, masks, adjustment layers, Smart Objects / Smart Filters, named Paths, History snapshots and Layer Comps.
- File → Save Project stores an editable
.zproj.json. Export As… produces shareable raster or supported layered files. Use File → Recent & Recovery… after an interruption; current desktop/browser builds also let you download portable backups of recovery snapshots.
Privacy & connectivity: Most editing and local file processing run on your device; your images are not uploaded merely by opening them. AI image generation and explicitly selected remote providers are network services and may transmit prompts or image content. Optional local ComfyUI and desktop filter programs are separate installations. See offline limitations.
| Area | Available in the current main branch |
|---|---|
| 52 registered tools | Move/transform, rectangular/elliptical/single-row/single-column marquee; Lasso/Polygonal/Magnetic; Object/Quick/Brush selection; Magic Wand; crop/perspective crop; painting, erasers, healing, retouching, Pen/Path tools, editable Type/Shapes, Hand/Zoom |
| Selections | New/Add/Subtract/Intersect, Color Range, Select Subject, Focus Area, Grow/Similar, Select & Mask edge refinement, channels and luminosity selections, feather/smooth/contract/expand |
| Layers & masks | Raster, native text/shape, adjustments, Smart Objects with Smart Filters, alpha/vector masks, clipping, blending, Layer Styles, alignment, layer duplication into another document, Layer Comps |
| History & automation | Undo/redo, durable snapshots and snapshot notes, Actions recording/playback, Batch / Image Processor, scripting console and portable recovery snapshot exports |
| CSV Bulk Create | File → Bulk Create from CSV: merge {{Column}} placeholders in editable text layers with up to 100 CSV rows, preview input, select output format and export independent PNG/JPEG/WebP designs without modifying source layers. Local only; no image placeholders or advanced automatic layouts. |
| Offline design templates and brand kits | File → Design Templates & Brand Kits: save current layered project as a categorized, previewable editable template; open new document from template; local IndexedDB library, portable template/brand-kit JSON import/export. Apply saved hex swatches and font families to editable shapes/text; place imported logos as Smart Objects. Linked color/font token references on editable layers propagate updates from saved kits into open documents, with Undo/Redo, project persistence and offline last-value fallback. No stock library, shared cloud tokens, publishing or template marketplace. |
| Web assets (Fireworks-inspired) | File → Web Slices & Hotspots: draw/edit rectangular slices and clickable hotspots in a preview, preserve regions in native project saves, and export cropped images plus an HTML image map. Native Fireworks project and page/state parity are not provided. |
| Artboards / pages (initial) | File → Artboards / Pages: named artboards, grid layouts, individual layer selection, Undo/Redo and PNG/JPEG/WebP export. Optional Normal/Hover/Pressed Layer Comp snapshots export images and a CSS-only rollover HTML preview. Project saves retain metadata. No independent page trees or native Fireworks states. |
| Retouching | Healing and Spot Healing, Patch, Content-Aware Move/Fill, Clone/Pattern Stamps and source transforms, Mixer/History Brushes, Dodge/Burn/Sponge, Blur/Sharpen/Smudge, red-eye correction |
| Transforms | Free Transform, editable Transform/Split Warp, Puppet Warp, crop/perspective crop, smart guides and distance labels; Liquify |
| Color | RGB/HSL/Lab and related adjustments, curves, gradient controls, HDR-aware operations where supported, proof-color preview and gamut warnings, PPI/rulers/guides/grid |
| File information | EXIF, XMP/IPTC, camera and GPS metadata inspection; editable File Info and metadata-aware export/sidecar workflows where supported |
| Interface | Classic/custom or Photoshop-style workspace, themes including OLED black, floating panels, eight desktop dock locations (left, right, top, bottom and four corners), touch-first mode, keyboard shortcut customization, lazy-loaded panels and dialogs |
The table is a capability summary, not a claim that every combination of file format, effect, layer type, bit depth, or Photoshop feature is supported. Review the tool audit and known limits before using unfamiliar formats on important files.
Choose Photoshop-style or Classic / custom from the Workspace selector. Color themes (Dark, Light, OLED black and Photoshop-inspired) are independent from workspace layout. On desktop, panels may be docked left/right/top/bottom and in all four corners, or floated. Dock dimensions adapt to the active content (Open Files is a compact strip); resizing by dragging preserves a manual size and double-clicking the divider restores automatic fitting. Open Window → All Tools / Tool Search to filter and launch tools by name, category or shortcut. These improvements were merged in PR #81.
Open Help → Keyboard Shortcuts (or Edit → Keyboard Shortcuts…) to inspect/change bindings. Several Photoshop-style tools share a letter and cycle on repeated presses; they do not all have distinct default keys. The Pen group now includes Standard Pen, Freeform Pen and Curvature Pen (P); the Type group includes Horizontal/Vertical Type Mask selection tools (T). These are in main after PR #82.
Open/import: native PNG/JPEG/WebP/GIF/AVIF/SVG where the webview decodes them; custom PSD/PSB, TIFF, TGA, BMP, QOI, PNM/PFM, Radiance HDR, ICO/ICNS, PCX and other supported formats; some structured third-party project containers via dedicated parsers or raster preview extraction. Camera RAW, HEIC/HEIF, JXL, JPEG 2000 and exotic/partial document formats are decoder- and platform-dependent. The LibRaw WASM path attempts true sensor decoding, with an embedded-preview fallback when decoding fails. RAW imports can preserve original bytes (up to 64 MiB) as redevelopable Smart Objects; development settings and optional imported Lensfun corrections can be reapplied. This is not universal camera or high-bit-depth compatibility.
Video frames: open MP4/WebM/MKV to preview, scrub, enter an exact timestamp or step approximately by 1/24, 1/25, 1/30 or 1/60 seconds before Import frame; this does not create a video-editing timeline. Export: PNG, JPEG, WebP, TIFF (including supported 16-bit options), BMP, TGA, QOI, PPM, ICO, OpenRaster and PSD, plus native editable .zproj.json. PSD and PSB layered export support 8/16-bit RGB documents and simple scene-linear 32-bit RGB round-trips only when Photoshop-origin hdrt color-mode metadata is available. New HDR documents without that metadata must use the native project format until a verified Photoshop HDR metadata writer exists. Photoshop-native adjustment layers, text, shapes and Smart Objects are not yet fully interoperable. Original Photoshop folder delimiters and supported zero-channel adjustment records are retained for re-export when the imported layer order is unchanged. Imported Photoshop text/Smart Object/vector descriptors remain opaque, but the exporter now fingerprints their raster pixels, mask, and geometry: unchanged source descriptors can be retained; edited raster previews trigger explicit confirmation and are exported without stale native descriptors. The Layers panel now shows original nested Photoshop folder paths as read-only context; Studio cannot yet edit nested groups or render the retained Photoshop-only adjustments; their appearance in Photoshop may differ from the Studio preview. Export warns before omitting/rasterizing incompatible editable layers, and refuses complex HDR layer stacks instead of silently downconverting. ZIP-with-prediction import and Lr16/Lr32 high-depth layer blocks are supported. Photoshop indexed palettes/transparency and legacy ResolutionInfo are supported; Photoshop 8/16-bit Lab and CMYK are converted to approximate RGB previews; these conversions are not ICC-managed and are not exported back as native Lab/CMYK. RGB exports discard incompatible CMYK/Lab ICC profiles and indexed transparency resources; unknown Photoshop blend mode keys are preserved for unchanged layers even when Studio cannot preview them faithfully. Export also regenerates duplicate Photoshop layer IDs (lyid) to avoid ID collisions after duplicating imported layers. Extra merged RGB spot/alpha channels can survive compatible PSD/PSB and native-project round-trips, but are not directly editable; changing the document dimensions or bit depth warns before dropping them. Layer protection (lspf plus legacy transparency-protection flags) is imported; unchanged partial locks retain their Photoshop settings, while Studio's single lock toggle maps changes to locked/unlocked states. Validate PSD/PSB fixtures with bun run psd:validate.
PDF / PDF-compatible Illustrator: PDF.js now renders actual page contents offline, including text and vectors, into editable raster page layers. Multi-page imports offer first-page, a specific page, or all pages (up to 32, within a memory budget). PDF fonts, editable paths, and PDF-native text are not preserved as editable objects; EPS still uses its existing embedded-preview/partial parser fallback. Encrypted/corrupt PDFs produce errors rather than blank placeholder documents.
See Feature & Format Reference and real-camera RAW tests for support details. Six selected cameras passed LibRaw sensor-decoding checks; untested compression variants, precision, color matching and RAW round-trip fidelity are not guaranteed.
Browser regression coverage: CI exercises the exported editor in headless Chromium, including eight dock positions, saved/manual/automatic sizing, panel context menus, workspace switches, PNG import, layer Undo/Redo, GIMP script lazy-loading and explicit Scheme worker cleanup, real PSD imports and mobile startup. See development/testing. Native Electron/GIMP and multi-camera RAW integration are separately validated where possible.
- Native Chay plugins: manifest/script extensions with a permission model and worker-based execution. Only install extensions you trust.
- Photoshop UXP compatibility: practical selected manifest,
batchPlayand command APIs; not a complete UXP runtime and not binary Photoshop.8bfsupport. - GIMP compatibility:
.gbrbrush/.ggrgradient assets, filter discovery and script analysis. Electron can invoke GIMP 3 PDB procedures and supported Python/Script-Fu source on demand through a separate installed GIMP, alongside optional G'MIC/GEGL programs. The embedded Scheme subset or opt-in Pyodide runtime runs only when selected; neither emulates the full GIMP API. - AI helpers: local selection/subject, masks, cleanup and image analysis; optional ComfyUI workflows if independently configured; remote Pollinations/custom image generation requires internet and may transmit prompts or image data.
Expanded GIMP compatibility was merged in PR #83. Native GIMP commands are Electron-only and require a trusted installed GIMP 3; the Pyodide interpreter is downloaded only when explicitly requested and therefore needs internet on first use. See the user guide for common workflows.
The editor is distributed via web/PWA, Electron desktop (including Windows portable), Tauri WebView, and Chrome/Firefox browser plugin. Embedded WebView releases apply a CSP; native window position/size can persist, and About → Check for updates performs a user-initiated release check without silent installation. Distribution and releases lists package formats, GitHub Actions and signing behavior.
| Distribution | Local editor assets | Important distinction |
|---|---|---|
| Web / PWA | PWA caches the shell after installation | First load needs a hosted page; cached content and browser storage can be cleared |
| Electron | Bundled Next.js standalone server and Chromium | Runs a local server internally; does not require an external hosted editor |
| Tauri WebView | Default releases embed the static frontend | Uses OS WebView2/WKWebView/WebKitGTK; a separate Windows offline-runtime installer is built; optional manual release check, no automatic updater |
| Browser plugin | Bundled static app in extension | Right-click images for import, subject to remote image access/CORS |
The additional Windows WebView2 offline installer is now configured in main (PR #85); its release filename starts webview-windows-offline-x64-- once the release job successfully publishes it. Embedded-release CSP, native window persistence, portable recovery exports and a manual update checker are now in main after merged PR #86. Authenticode signing is optional and requires publisher-provided secrets.
Requires Node.js 20+ or a compatible recent Bun runtime; native desktop packages also require their platform toolchains.
bun install
cp .env.example .env # adjust SQLite / Prisma environment if needed
bun run db:push
bun run dev # http://localhost:3000Run targeted checks before a PR:
bun run tools:validate
bun run help:validate
bun run dist:validate
bun run autosave:validate
bunx tsc --noEmit
bun run lintBuild/packaging entry points:
bun run build # Next.js standalone web bundle
bun run app:dist # Electron installer for host OS
bun run app:dist:win # Windows Electron setup + portable
bun run webview:build # Tauri static editor (requires Rust / OS SDK)
bun run ext:build # Chrome and Firefox extension bundles
bun run dist:all # Shared icons, web build, Electron & extensions (not Tauri)CI: .github/workflows/ci.yml runs validations and build smoke tests; .github/workflows/release.yml produces per-platform artifacts, GitHub Pages and GitHub Releases with SHA-256 checksums. bun run dist:all is not a substitute for native cross-platform release jobs.
| Path | Responsibility |
|---|---|
src/editor/ |
Editor state, tools, layers, image processing, formats, plugins, workspace and Help content |
src/editor/help/topics.ts |
Canonical in-app Help content, generating docs/USER_GUIDE.md |
src/editor/constants/tools.ts + src/editor/tools/registry.ts |
Tool definitions, options, key groups and implementations |
src/editor/formats/ |
File import/export handlers, structured document codecs and metadata |
electron/ · webview/ · extension/ |
Platform-specific shells and installers |
scripts/ · .github/workflows/ |
Build, distribution, regression tests and CI |
| User Guide | Tutorials and troubleshooting, mirrored in the app |
| Feature & Format Reference | Formats, bit depth, runtime limitations and feature overview |
| Tool Parity Audit | Photoshop-style tool audit and remaining tool work |
| Cross-app Parity Matrix | Photoshop, GIMP, Fireworks CS6, Illustrator and PhotoCraft; status, priorities and fidelity limits |
| Canva and Creative-Suite Comparison | Canva, Adobe Express, Figma, Affinity, Photopea, Pixlr, Krita, Inkscape and Clip Studio; missing and partial features |
| Distribution Guide | Native builds, release artifacts, optional configuration and packaging |
| Development & Testing | Source-of-truth files, validation scripts, CI and release smoke tests |
| Changelog | Historical changes; upcoming PRs are not treated as released |
Documentation maintenance: Edit src/editor/help/topics.ts rather than directly changing the generated User Guide; run bun run help:generate and bun run help:validate. Feature claims should reflect merged code or be explicitly labeled pending.
Free for personal and educational use under a non-commercial, source-available license; commercial use requires licensing, and redistribution/modifications have additional restrictions. This is not an OSI-approved open-source license. See LICENSE for the authoritative terms. Commercial contact: chaython@live.ca · Support development. The project is not affiliated with Adobe, GIMP or Photopea.
Support this project through GitHub Sponsors, Patreon, Buy Me a Coffee, or PayPal.
Crypto donations:
- Ethereum (ETH):
0x201B6E0B0282BBAE1592C24f9CbD39009A70F7d7 - Bitcoin (BTC):
32o7JmXgFcs4R1SbcLLVKQCRw9KHkhneJi - Solana (SOL):
BDicyUL9zizDeYBLw8oBwotv6jtHotLLQD7Bcqg2atLk - USDC (Base network):
0xBeD35dcAd9F1A32459B3C0DF004371EBE939E760
Send USDC only on Base.