Graphite progress report (Q3 2024)

By Keavon Chambers & Hypercube. October 02, 2024.

Graphite, a new open source 2D procedural graphics editor, has spent April–June introducing boolean path operations, a new gradient picker, layer locking, and more improvements.

Overall, editor functionality has been shaping up and becoming an all around useful tool suite, with notable reductions in rough edges for the vector graphics workflow (our initial focus). Raster and raw photo processing workflows are also now in-development by our Google Summer of Code student interns. Node graph quality-of-life improvements centered around tidy node organization are also the focus of the summer work that's underway. These projects are detailed below.

This is the second of our quarterly progress report blog posts. If you missed the first one, be sure to check it out as well. If you'd like to help speed up future progress, please consider getting involved with code, QA/bug testing, or art/marketing projects. Donations are also valued, as are stars of GitHub. Follow along and partake in our Discord community, too.

All Q2 2024 commits may be viewed in this list and all noteworthy changes are detailed below. To showcase the much anticipated introduction of boolean path operations, the new Painted Dreams artwork shown here extensively utilizes nondestructive booleans.

Vector art of Painted Dreams

Painted Dreams
Open this artwork to
explore it yourself.

Additions

Performance

  • Add caching to boolean operations (commit 6ecb173)

  • Add path-bool library (#1952, #2000)

  • Memoize hashing (#1876)

  • Refactor document node type lookup function to fix performance degradation over time (#1878)

  • Speed up Graphene graph compilation (#1924)

Fixes

  • Fix rulers showing in the wrong spot when initially opening a document (#1801)

  • Restore backwards compatibility broken with #1750 to prepare next release (commit 621f469)

  • Fix multi-subpath boolean operations (#1804)

  • Fix bug causing some node outputs to fail connecting wires to other inputs (commit 84d7262)

  • Fix 'Zoom with Scroll' not working after a page refresh (#1807)

  • Fix Pen and Freehand tool path extension (#1809)

  • Fix snapping bug where snapped-together shapes couldn't be moved (#1818)

  • Apply the graphic group transform in the boolean node (#1825)

  • Remove artboard from graphic element (#1824, #1830)

  • Insert transform node on groups (#1829)

  • Restore functionality of GPU infrastructure (#1797)

  • Fix breakage of shallow select mode in the Select tool (#1843)

  • Fix graph not being resent after Ctrl+D node duplication (#1852)

  • Fix Layers panel UI not updating on selection change and expand/collapsing (#1847)

  • Fix rendering of non closed paths and improve bounding box calculation (#1859)

  • Serialize documents with images in linear space instead of sRGB (#1856)

  • Fix grid overlay color showing as none (commit a4a5139)

  • Fix viewport bounds getting out of sync at times, like when toggling rulers (commit 0617759)

  • Improve rendered SVG output syntax for better compatibility and terseness (#1880)

  • Use a coarse bounding box to avoid a detailed check for intersection when clicking artwork (#1887)

  • Make noise generation resolution aware (#1909)

  • Fix node graph type errors not being shown (#1917)

  • Add colors to all nodes in a graph, even if disconnected, and properly display hidden network imports (#1921)

  • Respect 'Clip' on Artboards when exporting "All Artworks". (#1916)

  • Format demo artwork's nodes in layer chains (commit e28e841)

  • Improve history system (#1945)

  • Add selection history (#1945)

  • Fix crash from gradients with bounds of zero (#1950)

  • Fix broken SVG importing and crash when exporting (#1953)

  • Switch attribute-based vector data from referencing PointIds to indexes in the points table (#1949)

  • Bezier-rs: Fix crash when outlining a small bézier (#1958)

  • Fix invalid segment crash when dissolving point loop (#1959)

  • Set integer ruler intervals when zoomed in (#1966)

  • Fix some typos in the node graph code (#1970)

  • Make the node graph use a document node's default type (#1965)

  • Make the primitive shape tools avoid setting a negative transform scale (#1973)

  • Nudge only the shallowest selected layers to avoid amplified translation (#1975)

  • Improve select tool click targets (#1976)

  • Correctly apply transforms to vector data and strokes (#1977)

  • Fix types of inputs to nodes with a nested network implementation (#1978)

  • Fix click targets (in, e.g., the boolean node) by resolving footprints from render output (#1946, #1986)

  • Fix blend modes and opacity on raster data (#1996)

  • Use overlays to draw artboard names (#1981)

  • Fix broken Opacity slider in Layers panel (#2004)

Internal

  • Refactor graph editing to go through a NodeNetworkInterface (#1794, #1906)

  • Scope API (#1814)

  • Reorganize cargo dependencies and upgrade most of them (#1815)

  • Fix a lot of Clippy warnings (#1808)

  • Simplify build process by auto-installing npm packages and simplify the contributor guide (#1799)

  • Fix Rust-Analyzer conflicts with build targets and other compile speed issues (commit 857bc77)

  • Update dependencies and lock files (#1841)

  • Fix, document, and update npm dependencies and tooling; fix Bezier-rs demos not building (#1857)

  • Fix spelling in several code comments (#1860)

  • Restore the Imaginate node with the full node graph architecture (but a flaky deadlock remains) (#1908)

  • Add profiling metrics for Graphene graph compilation (#1924, #1974)

  • Post Clippy warnings as PR comments (#1926, commit a93dcb2)

  • Fix all Clippy warnings (#1936)

  • Add a profiling action to CI which comments on PRs with notable demo art performance variances (#1925, #1939)

  • Add self-hosted build asset deployment to GitHub releases in the CI action (commit f2493d5)

  • Implement node path insertion at compile time (#1947)

  • Rename document_node_types.rs to document_node_definitions.rs (commit 6a2b0d7)

  • Refactor navigation metadata (#1956)

  • Refactor the node macro and simply most of the node implementations (#1942, #1999, #2002)

  • Update Cargo.lock to fix CI (#1994)

  • Box TaggedValue::VectorModification (#1995)

  • Fix Graphene CLI crash (#1993)

  • Fix compilation on nightly (#2001)

  • Upgrade the third-party library license generation (commit 14de67c)

  • Clean up web code errors and make CI enforce them (commit 1ee5ffb)

  • Upgrade web dependencies (commit aa03dc8)

  • Remove serde from Bezier-rs web demos to reduce Wasm size (commit 0b0169a)

  • Add manually-runnable benchmarks for runtime profiling (#2005)

Raw-rs

  • Raw-rs: add post-processing steps (#1923)

  • Raw-rs: use camera white balance when available (#1941)

  • Raw-rs: Add preprocessing and demosaicing steps (#1796)

  • Raw-rs: Flip and rotate image based on camera orientation (#1954)

  • Raw-rs: run tests in parallel (#1968)

Website