Graphite, an open source 2D procedural graphics editor, has spent the months of July, August, and September introducing node graph organisation, non destructive vector editing, faster boolean operations, and many more improvements.
In this quater we have continued iterating on the usability of our unqiue node powered vector workflow. As we reach the conclusion of the Google Summer of Code projects, we now have a polished node graph organisation system, a working RAW image pipeline (not yet in the editor), and a WebGPU based renderer (File -> Preferences -> Vello). Thanks to the students for their hard work on this and to Google's open source team for sponsoring.
This is the third of our quarterly progress report blog posts. If you missed the last 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 Q3 2024 commits may be viewed in this list and all noteworthy changes are detailed below.
Additions
-
Nondestructive vector editing (#1676)
-
Basic artboard snapping (#1734)
-
Draggable upstream nodes feature (#1812)
-
Stack-based Boolean Operation layer node (#1813)
-
Scope API (#1814)
-
Graph breadcrumb trail button (commit 8e774ef)
-
Integrate Vello for vector rendering (#1802)
-
Add caching to boolean operations (commit 6ecb173)
-
Gradient rendering with Vello (#1865)
-
Memoize hashing (#1876)
-
Artboard names in the export dialog with persistant settings (commit 4d3e459)
-
"Painted Dreams" demo artwork (and retire Just a Potted Cactus) (commit 80cf486)
-
Layer node chains, import/export edge connectors, and refactor graph editing to go through a NodeNetworkInterface (#1794)
-
Distribute and algin snapping (#1793)
-
Quick measure overlays with Alt pressed (#1894)
-
Seed parameters to all nodes with RNG (commit c39032a)
-
New nodes: Blend Colors, Percentage Value (commit d7546fb)
-
Raw-rs: add post-processing steps (#1923)
-
Raw-rs: use camera white balance when available (#1941)
-
Add path-bool library (#1952)
-
Add drag-and-drop and copy-paste file importing/opening throughout the UI (#2012)
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)
-
Reorganize cargo dependencies and upgrade most of them (#1815)
-
Fix a lot of Clippy warnings (#1808)
-
Disable snapping by default as a bug mitigation, and assorted cleanup (commit a17ed68)
-
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)
-
Insert transform node on groups (#1829)
-
Finish removing GraphicElement::Artboard started in #1824 (#1830)
-
Simplify build process by auto-installing npm packages and simplify the contributor guide (#1799)
-
Restore functionality of GPU infrastructure (#1797)
-
Fix Rust-Analyzer conflicts with build targets and other compile speed issues (commit 857bc77)
-
Update dependencies and lock files (#1841)
-
Fix breakage of shallow select mode in the Select tool (#1843)
-
Fix graph not being resent after Ctrl+D node duplication (#1852)
-
Disable Vello renderer checkbox in preferences if browser doesn't support WebGPU (#1844)
-
Fix Layers panel UI not updating on selection change and expand/collapsing (#1847)
-
Fix, document, and update npm dependencies and tooling; fix Bezier-rs demos not building (#1857)
-
Fix spelling in several code comments (#1860)
-
Fix rendering of non closed paths and improve bbox 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)
-
Sandbox node graph execution on native targets and attempt recovery from panics on Wasm (#1846)
-
Fix Vello rendering of transforms for nested graphic groups (#1871)
-
Apply opacity and blend modes to individual layers in Vello (#1874)
-
Improve rendered SVG output syntax for better compatibility and terseness (#1880)
-
Apply correct stroke styling with Vello (#1875)
-
Blog post: Graphite progress report (Q2 2024) (#1805)
-
Use a coarse bounding box to avoid a detailed check for intersection when clicking artwork (#1887)
-
Switch to MSAA for Vello rendering for better anti-aliasing (#1899)
-
Make Vello render groups with a blending stack only when necessary (#1905)
-
Restructure window state management and fix Vello canvas not resizing with viewport (#1900)
-
Correctly set the dimensions of the SVG foreignObject container for the Vello canvas (#1907)
-
Set Vello to render an explicit background color behind artboards (#1902)
-
Integrate raw WGPU textures into Vello rendering pipeline (#1897)
-
Fix regressions from network interface PR (#1906)
-
Restore the Imaginate node with the full node graph architecture (but a flaky deadlock remains) (#1908)
-
Refactor document node type lookup function to fix performance degradation over time (#1878)
-
Make noise generation resolution aware (#1909)
-
Fix render disappearing while panning when using Vello (#1915)
-
Fix node graph type errors not being shown (#1917)
-
Add 'Gradient Map' adjustment node (commit 501b562)
-
Add colors to all nodes in a graph, even if disconnected, and properly display hidden network imports (#1921)
-
Add grid snapping to graph imports/exports; improve layer panel drag into/between insertion; better preserve graph space on reordering (#1911)
-
Respect 'Clip' on Artboards when exporting "All Artworks". (#1916)
-
Raw-rs: Add preprocessing and demosaicing steps (#1796)
-
Format demo artwork's nodes in layer chains (commit e28e841)
-
Add profiling metrics for, and speed up, Graphene graph compilation (#1924)
-
Improve layer panel positioning for upstream nodes (#1928)
-
Post Clippy warnings as PR comments (#1926)
-
Fix all Clippy warnings (#1936)
-
Add a profiling action to CI which comments on PRs with notable demo art performance variances (#1925)
-
Add a profiling action to CI which comments on PRs with notable demo art performance variances (#1925) (commit 12ebc6f)
-
New node: Assign Colors (#1938)
-
Separate the Merge node from the Boolean Operation node (#1933)
-
Rename document_node_types.rs to document_node_definitions.rs (commit 6a2b0d7)
-
Improve profiling CI action's comment output text (#1939)
-
Recategorize the node catalog (commit e647ca9)
-
Revamp the website (commit 5d74178)
-
Fix website base template escaping (commit 98ab069)
-
Revamp the website more (commit 40fd447)
-
Add shifting of layers in stacks as blocks that collide and bump other layers/nodes (#1940)
-
Add self-hosted build asset deployment to GitHub releases in the CI action (commit f2493d5)
-
Implement node path insertion at compile time (#1947)
-
Improve layer positioning in graph upon reordering; improve history system; add selection history (#1945)
-
Fix crash from gradients with bounds of zero (#1950)
-
Update various content on the website (commit fb7d597)
-
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)
-
Bezier-rs: Fix crash when outlining a small bézier (#1958) (commit bf5019d)
-
Fix invalid segment crash when disolving point loop (#1959)
-
Refactor navigation metadata (#1956)
-
Raw-rs: Flip and rotate image based on camera orientation (#1954)
-
Make the Clippy Check CI action not comment on draft PRs (commit a93dcb2)
-
Set integer ruler intervals when zoomed in (#1966)
-
Fix some typos in the node graph code (#1970)
-
Fix some typos in the node graph code (#1970) (commit 507210b)
-
Make the node graph use a document node's default type (#1965)
-
Make CI collapse previous PR comments with profiling benchmark deltas (#1974)
-
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)
-
Refactor the node macro and simply most of the node implementations (#1942)
-
Raw-rs: run tests in parallel (#1968)
-
Update Cargo.lock to fix CI (#1994)
-
Box TaggedValue::VectorModification (#1995)
-
Fix blend modes and opacity on raster data (#1996)
-
Use overlays to draw artboard names (#1981)
-
Fix Graphene CLI crash (#1993)
-
Improve node macro and add more diagnostics (#1999)
-
Fix compilation on nightly (#2001)
-
Improve type compatibility and clean up new node macro usages (#2002)
-
Path Bool library code cleanup (#2000)
-
Fix broken Opacity slider in Layers panel (#2004)
-
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)
-
New node: Dehaze (#1882)
-
Add manually-runnable benchmarks for runtime profiling (#2005)
-
Replace terminology "primary" with "call argument" and "parameter" with "secondary input" (commit c738b4a)
-
Fix many regressions introduced mostly in #1946 (#1986)