About this project

Darkly is an open-source painting application positioned as a Photoshop alternative where painters are the primary audience. It runs in the browser via WebAssembly and WebGPU, works offline without a login, and is also published as a standalone Rust crate that can be embedded in other graphics tools. Core capabilities described in the README: - Node-based brush engine with brushes such as round, ink pen, charcoal, smudge, watercolor, liquify, clone, blur and calligraphy; pressure, tilt, spacing, distance and angle inputs; a Laplacian stabilizer. - Raster layers and groups, layer masks, 16 blend modes, floating layers, smart objects, and a set of filter layers (brightness/contrast, HSL, levels, curves, invert, desaturate, chromatic aberration). - Selection tools: rectangle, ellipse, lasso, polygon and magic wand, with replace/add/subtract/intersect modes, plus feather, antialias, grow, shrink, border and smooth operations. - Transform tools including generic and perspective transforms, crop to selection, canvas resize, image rescale, DPI handling, canvas flip and 90-degree rotation. - Document handling: new document, open image, native .darkly save/open, PNG/JPEG/WebP export, clipboard operations, autosave with crash recovery, process recording. - Interface features: command palette, application menu, dockable and tiled panels, panels that can pop out into separate OS windows, theme system, hotkey system with searchable cheatsheet, Krita/Photoshop/GIMP hotkey presets, installable PWA. Distinctive features: - Veils: nondestructive shader-like layers that shroud the canvas, including effects such as chromatic aberration, frozen, grain, lens blur, painting, pixelate, rainy glass and VHS. The README frames them as aids against premature fixation on detail, blank-page syndrome and art fatigue. - Voids: layers that pull in outside sources, such as a noise generator or a screenshare stream from another application, useful for reference and hybrid workflows. Voids support masks and blend modes, and a dedicated Blender extension exists. Architecture and usage: - The core is a platform-agnostic Rust crate named darkly, containing the document model, brush engine, GPU compositor and undo system, running anywhere wgpu does (Vulkan, Metal, DX12, or WebGPU in the browser). - The shipped app is a Svelte frontend over that crate through a WebAssembly bridge. - Building requires Rust stable, Node.js 22 or newer, make, and wasm-opt from binaryen. A browser with WebGPU support is needed (Chrome 113+, Edge 113+, or Firefox Nightly with a flag). On Linux, Chromium may need Vulkan and unsafe WebGPU flags enabled. - Developers can add the crate with cargo add darkly and consult its README and API docs for a runnable example. The project is in beta, with a public roadmap of implemented and planned features. Contributions are welcome; the README states that AI-assisted coding is allowed but careless vibe coding is forbidden, that every PR needs a human-written rationale, and that generative AI features inside Darkly are unlikely to be accepted unless they run fully offline without third-party APIs and preserve artist control. The README also credits GIMP, Krita and Graphite as influences, and notes that some veil and void shaders are ports or adaptations of Shadertoy works.