A GPU-focused digital painting application for Windows, derived from Krita.
Website: https://solstice.tidalboxstudio.com: an overview, the download page and pages for the main features.
This GitHub repository holds the source code, the releases and the user guides; the highlights link to individual feature guides.
Solstice is an open-source digital painting application derived from the Krita 6 codebase.
|
Vulkan-powered layer compositing and canvas updates, and a GPU brush that is on by default: from pen input to the displayed frame, about four times faster than the CPU brush. |
Puppet Warp with movable and rotatable pins, eye marks that put brush settings in Tool Options, and a Brush Stroke Layer that redraws its strokes sharply when scaled, like a vector layer. |
Brush Presets with stroke previews, filters and grouping, a reworked Brush Editor, Photoshop brush import with presets, textures and folders, docker locks, a live Overview and a modernized interface, together with native tools such as Quick Access and the Asset Library. |
Solstice is independently maintained and desktop-only. It is not an official Krita edition; upstream Krita changes are adopted selectively as needed. See Versions for its pre-1.0 version numbering.
Learning Solstice: for the basics of using the application, see the Krita User Manual. The features Solstice adds are described in its user guides.
- What's new in 0.4.0
- Highlights
- Development and downloads
- Differences from Krita
- GPU engine
- Benchmarks
- Supported environment
- Relationship to Krita
Solstice 0.4.0 enhances the Reference Tool:
- Non-destructive native filter stacks with editable settings and ordering
- Per-effect and whole-stack enable/disable, removal and undo
- Named templates reusable across reference images and documents
- Illustrated overview and filter guide
GPU Engine |
Brush Presets |
Brush options in Tool Options |
Puppet Warp |
Brush Stroke Layer |
Effects & Color |
Reference Tool filters |
Layer Comps |
Python plugins reimplemented natively in C++, with no Python installation required.
Quick Access Manager |
Lazy Tools |
Asset Library |
Rest Note |
Vision Tools |
- Asset Library on the welcome page: browse and open assets from the welcome page before opening a document.
- Popup Palette removed: the right-click Popup Palette and the On-Canvas Brush Editor are replaced by Quick Access.
- Native Export Region: the export feature of the Export Region plugin is
now built in as File > Export Region... (
Alt+Shift+E), which exports the selection or the active layer's bounds. - Performance improvements and bug fixes across the application.
See the user guides for every Solstice feature.
Experimental software. The Vulkan engine is on by default and can be turned off. It does not yet replace every CPU processing path, and its supported hardware and platforms are limited.
Download the unsigned Windows x64 ZIP from
GitHub Releases,
extract it and start solstice.exe.
Source code and newer Windows x64 trial ZIPs are also available from successful
manual GitHub Actions builds.
These temporary artifacts expire after seven days and are development builds,
not stable releases. See Experimental Windows builds
for download instructions and packaging limitations. To show .kra
thumbnails in Explorer, see Explorer thumbnails.
The application and document icons are described in
Visual branding.
The primary development and default branch is main. For source
builds, see the development environment and build workflow.
Check the supported environment before building.
Solstice follows its own development direction, centered on an experimental Vulkan image engine and a separately maintained native feature set. Selected Python-based extensions have been reimplemented in C++, with compatibility for existing settings where practical. The Asset Library is also available from the welcome page, and Puppet Warp is integrated into the Transform Tool.
Android support and its build and packaging infrastructure have been removed. The right-click Popup Palette and the On-Canvas Brush Editor have been removed as well. Solstice does not merge upstream Krita wholesale; upstream changes are reviewed regularly and adopted selectively as needed. Solstice-specific changes and support are maintained in this repository.
The experimental engine uses Vulkan compute for supported RGBA floating-point layer compositing in RGBA32F and RGBA16F and shares data with the OpenGL canvas for display. Supported layer modes include Normal, Multiply, Screen, Overlay, Soft Light and the HSY, HSL, HSV and HSI color modes; every blend mode runs on the GPU except Dissolve, Marker, Destination In/Atop and Divisive Modulo (and its Continuous variants), including individual channel locks. It is enabled by default and falls back to CPU paths for unsupported operations.
The GPU pixel brush (on by default) also composites the same blend modes, Erase and Alpha Darken on the GPU, with selections, alpha lock and mirror painting. Supported Buildup strokes and Wash previews and final merges use GPU paths with CPU-compatible channel handling. RGBA16F brushes support the same modes in Buildup and Wash, including Wash's Alpha Darken painting buffer. Blend modes without a GPU version retain CPU fallback. Batched tile transfers and reusable upload buffers reduce transfer waits, including for textured and masked brushes. Layer and Wash compositing reuse completed work buffers and can queue consecutive updates. Whole-tile copies can retain GPU pixels, and CPU filters, FFT convolution, affine transforms and layer flips now batch their GPU readbacks.
The GPU brush can be turned off with Paint brush strokes on the GPU next
to the GPU engine option; KRITA_GPU_BRUSH=1 or 0 overrides the setting. On RGBA32F
and RGBA16F layers, circle, Gaussian and soft auto-brush dabs, image-based brush tips (also as
colour stamps, Lightness or Gradient maps) and their pattern textures are
also computed on the GPU, and so is the masking brush composite. The masking brush's
own mask, most filter calculations and most transform
calculations still run on the CPU; the Transform Tool's
affine transforms, Liquify, Puppet Warp and Gaussian Blur (also inside
Unsharp Mask and Gaussian High Pass) are applied on the GPU for float layers. Large mirrored brushes with
Alpha Lock can still catch up after pen release; further tuning of that case
is deferred. This is an ongoing rewrite, not a fully GPU-based painting pipeline.
See the GPU Engine guide for setup and limitations.
These numbers measure specific engine operations, not overall application performance. They are not frame rates or pen-to-screen latency measurements.
Measured on October 11, 2026, with an AMD Ryzen 9 9950X and NVIDIA RTX PRO 6000 Blackwell (driver 596.86), using local development builds:
| Workload | CPU | GPU |
|---|---|---|
| Resident full layer projection, 4096 x 4096 RGBA32F, 16 layers | 270 ms | 60.6 ms |
| Canvas data preparation, 4096 x 4096 RGBA32F, 8 layers | 1215 ms | 1.81 ms |
| Four mirror passes, 14 dabs of 73 x 73 pixels | 0.949 ms | 0.437 ms |
| Four mirror passes, 32 dabs of 256 x 256 pixels | 51.1 ms | 2.08 ms |
| Transform Tool apply, scale + rotate (bicubic), 2480 x 3508 RGBA32F | 502 ms | 61.5 ms |
| Liquify apply, 20 strokes, 2480 x 3508 RGBA32F | 253 ms | 63.5 ms |
| Gaussian Blur apply, radius 30, 2480 x 3508 RGBA32F | 212 ms | 68.0 ms |
| Puppet Warp apply, 3 pins, 2480 x 3508 RGBA32F | 750 ms | 212 ms |
The affine transform and Liquify results are identical to the CPU results, pixel for pixel; so are Puppet Warp's parts, which are then combined on the CPU. The Gaussian Blur results match the CPU results within one rounding step.
Each value is the median of three fresh-process results, with GPU completion included and Vulkan validation disabled. Projection and canvas results use five-sample medians per process; mirror results use five-update averages after warming all three brush staging slots; transform results are medians of three calls with a CPU-resident source layer. The Gaussian Blur CPU value splits the layer into 32 parallel bands, like the Filter dialog's patches; the GPU value is one call. Projection excludes full CPU readback (53-57 ms). Canvas preparation starts with GPU-resident projection pixels and excludes projection work and final OpenGL texture copies. Mirror measurements include reflection and uploads, compare against serial CPU painting, and exclude dab generation, scheduling and display.
Completed-stroke measurements from the same day show both the remaining overhead and workloads that benefit from GPU brushes:
| Queued stroke | CPU only | GPU projection and brush |
|---|---|---|
| RGBA32F, 64px Normal Wash | 6.19 ms | 10.88 ms |
| RGBA32F, 256px Normal Buildup | 8.15 ms | 10.70 ms |
| RGBA16F, 128px Soft Light (SVG) Wash, selection and both mirrors | 73.60 ms | 11.46 ms |
| RGBA32F, 300px textured (pattern) Buildup | 53.35 ms | 18.42 ms |
| RGBA32F, 300px textured with a masking brush, Wash | 80.51 ms | 37.45 ms |
These use a 1024 x 1024 document, four layers and 24 queued line segments. Each value is the median of five-sample medians from three fresh processes. They include brush generation, final merging and completed projection, but exclude tablet input and screen presentation. These are different workloads, not an F16-versus-F32 comparison. Pattern textures and masking brushes are applied on the GPU since October 10-11, 2026. See the measurement details and ranges.
Complete short strokes can still be slower on the GPU. Work-buffer reuse removed an avoidable wait, but its before/after timing ranges overlap and do not establish a substantial stroke speedup. Measured from pen input to the displayed frame instead, the GPU brush is about four times faster (2026-10-10, see the input-to-display comparison).
See the current benchmark results and limitations. Input-to-display timings are Qt input-to-command-swap measurements, not physical pen-to-screen latency. Results vary with workload and hardware and do not establish performance for a packaged release.
- Primary tested platform: Windows 11, 64-bit desktop.
- GPU engine target: NVIDIA Blackwell GPUs (GeForce RTX 50 series and RTX PRO Blackwell). Validation and benchmarks use an RTX PRO 6000 Blackwell; other GPUs are untested.
- Graphics APIs: Vulkan 1.3 and desktop OpenGL with Vulkan/OpenGL external memory and semaphore interoperability for the accelerated canvas path. ANGLE/Direct3D does not provide that canvas path.
- Validation setup: NVIDIA driver 596.86, Qt 6.8 and desktop OpenGL 4.6.
- Other platforms: Linux and macOS are not currently validated for this custom build. Android is not supported.
- Interface languages: English and Simplified Chinese cover everything, including Solstice's own features (see Interface languages); other languages use Krita's translations, with Solstice's features in English.
The GPU engine has narrower requirements than Krita itself. See the GPU Engine guide for the supported document formats and fallback behavior.
Solstice is not affiliated with, endorsed by, sponsored by, or supported by the Krita project or KDE. It is independently maintained and is not an official Krita edition. Its source-code origins do not imply an organizational relationship with those projects.
Please report Solstice-specific issues to this repository, not to the Krita or KDE issue trackers. Credit for the original application belongs to Krita's contributors. Existing copyright notices and license terms remain applicable; see COPYING and the notices in individual files.














