A layered image editor and photo manager written in Rust on GPUI. Paint, retouch, develop camera RAW files, work with layered documents, and organize a photo library in the same app. Tools, filters, formats and menu commands share a plugin registry with the headless editor and automation APIs.
Schist runs on Linux, macOS and Windows, with iOS, Android and browser builds. See the platform guides below for their requirements and differences.
Download desktop releases · Try it in your browser · Documentation
Thanks to the people and brands supporting Schist.
The app's 💜 Support Schist dialog uses
the backers API. The editor's
build.rs fetches the response, groups backers in the API's tier order,
and generates backers.json in Cargo's build output directory. It also
downloads the light and dark logos and embeds everything, so the dialog
works offline on every platform. No backer or logo requests are made while
the app runs, and builds do not modify the source tree.
The generated catalog and logos are cached in Cargo's build output; a clean
build needs network access. Run
SCHIST_REFRESH_BACKERS="$(date +%s)" make app to refresh both the catalog
and its logos. A new value makes Cargo rerun the build script even when the
app is otherwise up to date. Release CI sets a unique value for each run and
rerun so every release refreshes the catalog and logos, including cached builds.
Tier and backer names are displayed as supplied;
empty tiers are hidden, and backers without logos appear by name.
Install stable Rust through rustup, GNU Make, and your platform's native
build toolchain. The repository's rust-toolchain.toml
selects the Rust channel and components.
On Debian/Ubuntu, install the Linux build dependencies:
sudo apt-get install build-essential pkg-config libfontconfig-dev \
libwayland-dev libxkbcommon-x11-dev libxcb1-dev libxcb-render0-dev \
libxcb-shape0-dev libxcb-xfixes0-dev libvulkan-dev libgphoto2-dev libclang-dev clang moldLinux also needs a working Vulkan driver at runtime. For Mesa drivers on
Debian/Ubuntu, install mesa-vulkan-drivers; other GPUs may need their
vendor's driver. The Vulkan loader alone is not a driver.
From a checkout, build and launch the desktop editor:
make app
./target/release/schist
# Or open a document:
./target/release/schist path/to/image.psdOn Windows, run target/release/schist.exe. For development, use
make app PROFILE=debug and the executable under target/debug/.
make app builds the editor without the Photoshop filter helper bundle.
make build includes those helpers; on Linux their cross-compilation also
needs gcc-mingw-w64. See the helper build guide
for platform requirements, and make help for the main build targets.
| Target | Output / guide |
|---|---|
make release |
Platform packages in dist/; release and signing details |
make web |
Static browser app in dist/web/; build and serve locally |
make ios PROFILE=debug |
Simulator bundle in dist/ios/; iOS and iPadOS |
make ios-device |
Device bundle, requiring signing; device setup |
make android PROFILE=debug |
APK in dist/android/; Android SDK and installation |
make library |
Native C API and browser/Node WebAssembly bindings in dist/library/; library guide |
The browser needs WebGPU and a secure context (localhost or HTTPS).
Mobile builds need their platform SDKs. These builds share the editor, with
platform-specific file access, plugin and background-service support described
in their guides.
The interface follows the system's preferred language. The
locale registry lists the shipped translations;
SCHIST_LANG=de overrides the language for a native run. See
internationalisation for translation and font support.
Layered editing. Layers and groups, masks and clipping masks, blend modes, adjustment layers, layer effects, artboards, slices and layer comps. Work with embedded and linked smart objects and editable filter stacks that retain their source pixels through supported moves and transforms. History, undo/redo and native crash recovery keep edits recoverable.
Painting and retouching. Brush, pencil, erasers, gradients, clone and healing tools, patching, content-aware fill and move, dodge/burn, blur, sharpen and smudge. Brush presets support imported bitmap tips and brush packs, spacing, scattering, stroke stabilization, and pressure-controlled size and opacity. Symmetry and seamless painting add mirrored or radial strokes and wraparound texture painting. Stylus tilt is supported in the browser where the device supplies it; native tilt is not yet available.
Selections and masks. Marquees, lassos, wand, quick and object selection, colour range, grow/similar, feathering and saved selections. Mask refinement provides edge cleanup and previews before applying the result to a selection or layer mask.
Vectors and text. Editable paths and live shapes, path selection, fills and strokes. Text layers support OpenType controls, text on paths, mixed-direction paragraphs and vertical writing. Editable interchange depends on the destination format; see file formats.
Filters and transforms. Blur, sharpen, noise, distortion, artistic and neural filters, Camera Raw, Lens Correction and Filter Gallery. Lens Correction can match EXIF camera/lens metadata to installed or imported Lensfun calibration, with profile overrides and portable saved coefficients. Filters preview on the canvas, with draggable controls for supported blur and lighting effects. Free Transform, Liquify, Puppet Warp, Content-Aware Scale and Vanishing Point cover geometric edits.
Colour. ICC profiles, assign/convert operations, display transforms and soft
proofing. Native CMYK and Lab editing preserves
process channels through supported edits and saves. Import .aco, .ase and
.acb palettes in the Color panel, including user-supplied colour books; no
Pantone libraries are bundled. Spot ink channels provide
editable separations and an overprint display simulation, with PSD/PSB
interchange and documented proofing limits.
Photo library. The gallery watches local folders, imports from cameras, organizes photos by folder/date/place, and provides buckets, maps, search and People indexing. Rate, flag and label photos, compare them with synchronized zoom and pan, and review similar images or capture bursts. Gallery edits use sidecars and version history so the originals remain available. Metadata editing supports individual or batch changes to keywords, captions, copyright, capture times and GPS through portable XMP sidecars.
Photo workflows. Merge photos into aligned layers, focus stacks, bracketed HDR images or translation-based panoramas on native builds. Recorded actions replay editing steps, and export recipes save reusable sets of outputs for documents and gallery selections.
Video frames. The native video viewer provides silent playback, frame stepping, nearby sharper-frame search, and capture into an image document. Codec availability depends on the platform; Linux uses system GStreamer plugins. Audio and video editing can be handed to an external editor.
Schist Cloud. Sign in from the welcome screen or File menu to browse remote folders and buckets, upload photos, search, and edit collaboratively. Compatible providers also support metadata, photo review, version history, and syncing saved brushes, actions and export recipes. Mobile camera-roll backup is opt-in. Cloud is enabled by default; feature flags can disable it. See the Cloud guide for sign-in, transfers and platform support, and the gallery sync implementation notes for provider-dependent workflows.
Workspace and search. Spotlight (Cmd/Ctrl+Shift+P) finds tools, commands,
filters, documents, layers and photos. The editor includes draggable and
resizable side panels, rulers, guides, snapping, a navigator, themes and
remappable keyboard shortcuts.
GPU acceleration. Supported compositing, viewport rendering, filters and
other pixel operations use GPU compute, with CPU fallbacks for unsupported
operations or unavailable compute adapters. Browser canvas and supported
filters use asynchronous WebGPU. Preferences and SCHIST_GPU=0 / SCHIST_GPU=1
control native GPU use; see browser GPU support for web-specific
boundaries.
| Format | Support |
|---|---|
| PSD / PSB | Layered 8/16/32-bit read/write with groups, masks, blend modes, adjustments, effects, native colour channels and spot separations. Supported text and smart filters remain editable in other readers; see PSD interchange and native smart filters. |
Affinity .af, .afphoto, .afdesign, .afpub |
Import layered documents; export layered .af files, including supported native text and curves. Unsupported content may use preserved native data or raster previews. See Affinity support and limits. |
Paint.NET .pdn / GIMP .xcf |
Read/write supported layered content; see format limits. |
| PNG, JPEG, WebP, TIFF | Import and export raster images. |
| HEIC / HEIF | Native import through a supported runtime libheif decoder; Schist can offer a download when needed. |
| Camera RAW | Import through Schist's pure-Rust decoder and develop in Camera Raw. The original capture and development settings can survive PSD/PSB save and reopen. See camera and codec coverage. |
Format support is not a guarantee of identical rendering or complete feature interchange. Schist preserves unrecognized PSD data where supported, and uses its own blocks for editing state that other applications may not understand or retain. The format guides describe editable subsets, raster fallbacks and known limits.
Packaged macOS builds include Quick Look extensions for thumbnails and previews of supported layered documents.
Photoshop's defaults (⌘ on macOS, Ctrl elsewhere):
| Area | Shortcuts |
|---|---|
| Tools | V move · M marquee · L lasso · W wand · C crop · B brush · E eraser · S clone · J spot healing · Y history brush · G gradient · O dodge · P pen · A path selection · T type · U shapes · I eyedropper · H/space hand · Z zoom |
| Tool groups | Shift+the tool's key cycles nested tools (Shift+M marquee ⇄ ellipse); hold or right-click a toolbar slot for its flyout |
| Edit | ⌘Z / ⌘⇧Z undo・redo · ⌘X/C/V · ⌘⇧C copy merged · ⌘T free transform |
| Select | ⌘A all · ⌘D deselect · ⌘⇧D reselect · ⌘⇧I inverse · shift/alt-drag to add/subtract |
| Layers | ⌘⇧N new · ⌘J duplicate · ⌘⇧J via cut · ⌘G group · ⌘E/⌘⇧E merge · ⌘[ ⌘] reorder · ⌘⌥G clipping mask |
| Adjust | ⌘L levels · ⌘M curves · ⌘U hue/sat · ⌘I invert |
| Fill | ⇧F5 Fill… · ⌥⌫ / ⌃⌫ fill with fore/background |
| View | ⌘0 fit · ⌘1 100% · ⌘R rulers · ⌘' grid · ⌘; guides · ⌘H extras · Tab/F screen modes · ⌘K preferences |
| Painting | [/] brush size · digits set opacity · D/X default・swap colours |
Two-finger scroll pans; Ctrl/Cmd/Alt + scroll zooms toward the pointer. Preferences → Zoom with scroll wheel swaps these behaviours. Pinch support and stylus input depend on the platform; Windows precision touchpads normally zoom through Ctrl+scroll. The mobile guides describe touch and pen controls.
Remap shortcuts in ~/.config/schist/keymap.json (or under
$XDG_CONFIG_HOME/schist/):
{ "ctrl-shift-x": "command:edit.fill_foreground", "f1": "tool:brush" }The desktop app loads sandboxed WebAssembly filters and codecs. Plugins have
no filesystem, network or clock access, and run with a fuel budget. Put .wasm
files in ~/.config/schist/plugins/, or manage them with File → Plugins….
The plugin guide covers the SDK and ABI, with
example plugins to build on. Photoshop filter hosting uses
separate native helper processes; see the host guide for
compatibility and setup.
The MCP server, schist-mcp, exposes headless editing sessions,
tools, filters, commands, gallery access and rendered previews to MCP clients.
It ships alongside desktop releases. For embedding, the
headless library provides a C API and WebAssembly bindings
with independently owned editor instances.
The desktop AI panel, under View → AI Panel, uses an
installed and authenticated claude or codex CLI to work with the open
document or gallery. Document edits appear as undoable history entries.
Native builds send a daily usage ping to telemetry.schist.app by default.
It contains a random installation ID, app version, OS and architecture, CPU
model and core count, GPU adapter/driver, and RAM capacity. It does not include
usernames, hostnames, file paths or document contents.
The server keeps the latest ping per ID, its first and last contact times, and the country Cloudflare derives from the request. The IP address itself is not stored.
Disable it in Preferences → Diagnostics, set SCHIST_NO_TELEMETRY=1, or
create an empty no_telemetry file in ~/.config/schist/ (or
$XDG_CONFIG_HOME/schist/).
Update checks and crash reporting are opt-in. The Diagnostics preferences
separately control local crash reports and uploads to the project's Sentry.
Uploads require a build configured with a reporting endpoint; ordinary source
builds have none. Crash uploads omit hostnames and breadcrumbs and redact the
home directory from paths. SCHIST_CRASH_REPORTS=1 and SCHIST_CRASH_UPLOAD=1
enable the respective options for a single run. Cloud, map tiles, font/model
downloads and agent integrations make network requests when those features are
used.
Use the Makefile for builds and the checks relevant to the area you change:
make check-app # type-check application crates and their tests
make test-app # test application crates
make lint-app # lint application crates
make check-app-web # type-check the browser application
make check-i18n # validate translations and the browser loader's stringsThese application checks are a subset of the workspace checks. The CI workflow defines workspace formatting, lint, tests and platform checks; individual feature guides document more focused Make targets and any hardware or fixture requirements.
Read AGENTS.md for repository guidance. Rust interface strings go
through crates/i18n; browser loading messages use the web i18n support.
Architecture describes the crate boundaries, and
versioning covers compatibility and releases.
The logo and platform icons are generated from tools/logo.py.
Edit that source and run make logos (requires Pillow) to regenerate them.
- Platforms: Browser, iOS/iPadOS, Android, macOS Quick Look.
- Library and workflows: Gallery, photo metadata, photo merging, actions, export recipes, Cloud.
- Editing: Brushes, symmetry, mask refinement, text, smart objects, filter stacks, filter canvas controls, native colour, spot ink.
- Interchange: PSD/PSB, native smart filters, Affinity, PDN/XCF, RAW.
- Extending Schist: Architecture, plugins, headless library, MCP, AI panel, Anti-Smudge, shared document engine, internationalisation, feature flags, versioning.
Schist is available under the MIT license.
