diff --git a/website/content/blog/2024-9-30-graphite-progress-report-q3-2024.md b/website/content/blog/2024-9-30-graphite-progress-report-q3-2024.md new file mode 100644 index 0000000000..60650c0f7a --- /dev/null +++ b/website/content/blog/2024-9-30-graphite-progress-report-q3-2024.md @@ -0,0 +1,297 @@ ++++ +title = "Graphite progress report (Q3 2024)" +date = 2024-09-30 +[extra] +banner = "ToDo" +banner_png = "ToDo" +author = "Keavon Chambers" +summary = "Graphite's Q3 2024 update introduces node graph organisation, non destructive vector editing, and faster boolean operations." +reddit = "ToDo" +twitter = "ToDo" ++++ + +[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](/blog/graphite-internships-announcing-participation-in-gsoc-2024/) 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](../graphite-progress-report-q2-2024), be sure to check it out as well. If you'd like to help speed up future progress, please consider [getting involved](/volunteer) with code, QA/bug testing, or art/marketing projects. [Donations](/donate) are also valued, as are [stars of GitHub](https://github.com/GraphiteEditor/Graphite). Follow along and partake in our [Discord community](https://discord.graphite.rs), too. + +All Q3 2024 commits may be [viewed in this list](https://github.com/GraphiteEditor/Graphite/commits/master/?since=2024-07-01&until=2024-09-30) and all noteworthy changes are detailed below. + +## Additions + + + +- Nondestructive vector editing ([#1676](https://github.com/GraphiteEditor/Graphite/pull/1676)) + +- Basic artboard snapping ([#1734](https://github.com/GraphiteEditor/Graphite/pull/1734)) + + +- Draggable upstream nodes feature ([#1812](https://github.com/GraphiteEditor/Graphite/pull/1812)) + +- Stack-based Boolean Operation layer node ([#1813](https://github.com/GraphiteEditor/Graphite/pull/1813)) + +- Scope API ([#1814](https://github.com/GraphiteEditor/Graphite/pull/1814)) + +- Graph breadcrumb trail button ([commit 8e774ef](https://github.com/GraphiteEditor/Graphite/commit/8e774efe9dae51c0c1db2928e22c6de5b93d0584)) + +- Integrate Vello for vector rendering ([#1802](https://github.com/GraphiteEditor/Graphite/pull/1802)) + +- Add caching to boolean operations ([commit 6ecb173](https://github.com/GraphiteEditor/Graphite/commit/6ecb173c1c06807f13a859ef90b7d7f43af042be)) + +- Gradient rendering with Vello ([#1865](https://github.com/GraphiteEditor/Graphite/pull/1865)) + +- Memoize hashing ([#1876](https://github.com/GraphiteEditor/Graphite/pull/1876)) + +- Artboard names in the export dialog with persistant settings ([commit 4d3e459](https://github.com/GraphiteEditor/Graphite/commit/4d3e459f1f52f04be81727fe5946010bcabeb1eb)) + +- "Painted Dreams" demo artwork (and retire Just a Potted Cactus) ([commit 80cf486](https://github.com/GraphiteEditor/Graphite/commit/80cf486790d9300510904622924162a9b4017b1e)) + +- Layer node chains, import/export edge connectors, and refactor graph editing to go through a NodeNetworkInterface ([#1794](https://github.com/GraphiteEditor/Graphite/pull/1794)) + +- Distribute and algin snapping ([#1793](https://github.com/GraphiteEditor/Graphite/pull/1793)) + +- Quick measure overlays with Alt pressed ([#1894](https://github.com/GraphiteEditor/Graphite/pull/1894)) + +- Seed parameters to all nodes with RNG ([commit c39032a](https://github.com/GraphiteEditor/Graphite/commit/c39032ab548d4f33d18a399c64b77d3d6f4ecd45)) + +- New nodes: Blend Colors, Percentage Value ([commit d7546fb](https://github.com/GraphiteEditor/Graphite/commit/d7546fb18310490d5ce10d406e7a3faaf1ae98fe)) + +- Raw-rs: add post-processing steps ([#1923](https://github.com/GraphiteEditor/Graphite/pull/1923)) + +- Raw-rs: use camera white balance when available ([#1941](https://github.com/GraphiteEditor/Graphite/pull/1941)) + +- Add path-bool library ([#1952](https://github.com/GraphiteEditor/Graphite/pull/1952)) + +- Add drag-and-drop and copy-paste file importing/opening throughout the UI ([#2012](https://github.com/GraphiteEditor/Graphite/pull/2012)) + +# Fixes + +- Fix rulers showing in the wrong spot when initially opening a document ([#1801](https://github.com/GraphiteEditor/Graphite/pull/1801)) + +- Restore backwards compatibility broken with #1750 to prepare next release ([commit 621f469](https://github.com/GraphiteEditor/Graphite/commit/621f469a150d4a14c86ba9be87df82aae5dded74)) + +- Fix multi-subpath boolean operations ([#1804](https://github.com/GraphiteEditor/Graphite/pull/1804)) + +- Fix bug causing some node outputs to fail connecting wires to other inputs ([commit 84d7262](https://github.com/GraphiteEditor/Graphite/commit/84d72621e545ba7743e38d46ce1607133bb13461)) + +- Fix 'Zoom with Scroll' not working after a page refresh ([#1807](https://github.com/GraphiteEditor/Graphite/pull/1807)) + +- Fix Pen and Freehand tool path extension ([#1809](https://github.com/GraphiteEditor/Graphite/pull/1809)) + +- Reorganize cargo dependencies and upgrade most of them ([#1815](https://github.com/GraphiteEditor/Graphite/pull/1815)) + +- Fix a lot of Clippy warnings ([#1808](https://github.com/GraphiteEditor/Graphite/pull/1808)) + +- Disable snapping by default as a bug mitigation, and assorted cleanup ([commit a17ed68](https://github.com/GraphiteEditor/Graphite/commit/a17ed68008ab9d16f929fac2d23fc98367d7e151)) + + +- Fix snapping bug where snapped-together shapes couldn't be moved ([#1818](https://github.com/GraphiteEditor/Graphite/pull/1818)) + +- Apply the graphic group transform in the boolean node ([#1825](https://github.com/GraphiteEditor/Graphite/pull/1825)) + +- Remove artboard from graphic element ([#1824](https://github.com/GraphiteEditor/Graphite/pull/1824)) + +- Insert transform node on groups ([#1829](https://github.com/GraphiteEditor/Graphite/pull/1829)) + +- Finish removing GraphicElement::Artboard started in #1824 ([#1830](https://github.com/GraphiteEditor/Graphite/pull/1830)) + +- Simplify build process by auto-installing npm packages and simplify the contributor guide ([#1799](https://github.com/GraphiteEditor/Graphite/pull/1799)) + +- Restore functionality of GPU infrastructure ([#1797](https://github.com/GraphiteEditor/Graphite/pull/1797)) + +- Fix Rust-Analyzer conflicts with build targets and other compile speed issues ([commit 857bc77](https://github.com/GraphiteEditor/Graphite/commit/857bc772de8c5731a2eaf7f442beb573ccf8ca4c)) + +- Update dependencies and lock files ([#1841](https://github.com/GraphiteEditor/Graphite/pull/1841)) + +- Fix breakage of shallow select mode in the Select tool ([#1843](https://github.com/GraphiteEditor/Graphite/pull/1843)) + +- Fix graph not being resent after Ctrl+D node duplication ([#1852](https://github.com/GraphiteEditor/Graphite/pull/1852)) + +- Disable Vello renderer checkbox in preferences if browser doesn't support WebGPU ([#1844](https://github.com/GraphiteEditor/Graphite/pull/1844)) + +- Fix Layers panel UI not updating on selection change and expand/collapsing ([#1847](https://github.com/GraphiteEditor/Graphite/pull/1847)) + +- Fix, document, and update npm dependencies and tooling; fix Bezier-rs demos not building ([#1857](https://github.com/GraphiteEditor/Graphite/pull/1857)) + +- Fix spelling in several code comments ([#1860](https://github.com/GraphiteEditor/Graphite/pull/1860)) + +- Fix rendering of non closed paths and improve bbox calculation ([#1859](https://github.com/GraphiteEditor/Graphite/pull/1859)) + +- Serialize documents with images in linear space instead of sRGB ([#1856](https://github.com/GraphiteEditor/Graphite/pull/1856)) + +- Fix grid overlay color showing as none ([commit a4a5139](https://github.com/GraphiteEditor/Graphite/commit/a4a513911dac29ee5c6546842be194b1513f2cec)) + +- Fix viewport bounds getting out of sync at times, like when toggling rulers ([commit 0617759](https://github.com/GraphiteEditor/Graphite/commit/06177597ae8ef52f7a273875d6afb63fb09ec3c8)) + +- Sandbox node graph execution on native targets and attempt recovery from panics on Wasm ([#1846](https://github.com/GraphiteEditor/Graphite/pull/1846)) + +- Fix Vello rendering of transforms for nested graphic groups ([#1871](https://github.com/GraphiteEditor/Graphite/pull/1871)) + +- Apply opacity and blend modes to individual layers in Vello ([#1874](https://github.com/GraphiteEditor/Graphite/pull/1874)) + +- Improve rendered SVG output syntax for better compatibility and terseness ([#1880](https://github.com/GraphiteEditor/Graphite/pull/1880)) + +- Apply correct stroke styling with Vello ([#1875](https://github.com/GraphiteEditor/Graphite/pull/1875)) + +- Blog post: Graphite progress report (Q2 2024) ([#1805](https://github.com/GraphiteEditor/Graphite/pull/1805)) + +- Use a coarse bounding box to avoid a detailed check for intersection when clicking artwork ([#1887](https://github.com/GraphiteEditor/Graphite/pull/1887)) + +- Switch to MSAA for Vello rendering for better anti-aliasing ([#1899](https://github.com/GraphiteEditor/Graphite/pull/1899)) + +- Make Vello render groups with a blending stack only when necessary ([#1905](https://github.com/GraphiteEditor/Graphite/pull/1905)) + +- Restructure window state management and fix Vello canvas not resizing with viewport ([#1900](https://github.com/GraphiteEditor/Graphite/pull/1900)) + +- Correctly set the dimensions of the SVG foreignObject container for the Vello canvas ([#1907](https://github.com/GraphiteEditor/Graphite/pull/1907)) + +- Set Vello to render an explicit background color behind artboards ([#1902](https://github.com/GraphiteEditor/Graphite/pull/1902)) + +- Integrate raw WGPU textures into Vello rendering pipeline ([#1897](https://github.com/GraphiteEditor/Graphite/pull/1897)) + +- Fix regressions from network interface PR ([#1906](https://github.com/GraphiteEditor/Graphite/pull/1906)) + +- Restore the Imaginate node with the full node graph architecture (but a flaky deadlock remains) ([#1908](https://github.com/GraphiteEditor/Graphite/pull/1908)) + +- Refactor document node type lookup function to fix performance degradation over time ([#1878](https://github.com/GraphiteEditor/Graphite/pull/1878)) + +- Make noise generation resolution aware ([#1909](https://github.com/GraphiteEditor/Graphite/pull/1909)) + +- Fix render disappearing while panning when using Vello ([#1915](https://github.com/GraphiteEditor/Graphite/pull/1915)) + +- Fix node graph type errors not being shown ([#1917](https://github.com/GraphiteEditor/Graphite/pull/1917)) + +- Add 'Gradient Map' adjustment node ([commit 501b562](https://github.com/GraphiteEditor/Graphite/commit/501b562d0f17b91a54a14c83a4a0f90a1e03e369)) + +- Add colors to all nodes in a graph, even if disconnected, and properly display hidden network imports ([#1921](https://github.com/GraphiteEditor/Graphite/pull/1921)) + +- Add grid snapping to graph imports/exports; improve layer panel drag into/between insertion; better preserve graph space on reordering ([#1911](https://github.com/GraphiteEditor/Graphite/pull/1911)) + +- Respect 'Clip' on Artboards when exporting "All Artworks". ([#1916](https://github.com/GraphiteEditor/Graphite/pull/1916)) + +- Raw-rs: Add preprocessing and demosaicing steps ([#1796](https://github.com/GraphiteEditor/Graphite/pull/1796)) + +- Format demo artwork's nodes in layer chains ([commit e28e841](https://github.com/GraphiteEditor/Graphite/commit/e28e841e3bef401c19f5ddcf01c68fedd6b5c9c3)) + +- Add profiling metrics for, and speed up, Graphene graph compilation ([#1924](https://github.com/GraphiteEditor/Graphite/pull/1924)) + +- Improve layer panel positioning for upstream nodes ([#1928](https://github.com/GraphiteEditor/Graphite/pull/1928)) + +- Post Clippy warnings as PR comments ([#1926](https://github.com/GraphiteEditor/Graphite/pull/1926)) + +- Fix all Clippy warnings ([#1936](https://github.com/GraphiteEditor/Graphite/pull/1936)) + +- Add a profiling action to CI which comments on PRs with notable demo art performance variances ([#1925](https://github.com/GraphiteEditor/Graphite/pull/1925)) + +- Add a profiling action to CI which comments on PRs with notable demo art performance variances (#1925) ([commit 12ebc6f](https://github.com/GraphiteEditor/Graphite/commit/12ebc6f97269791cb935d17d1f6de59b271a240a)) + +- New node: Assign Colors ([#1938](https://github.com/GraphiteEditor/Graphite/pull/1938)) + +- Separate the Merge node from the Boolean Operation node ([#1933](https://github.com/GraphiteEditor/Graphite/pull/1933)) + +- Rename document_node_types.rs to document_node_definitions.rs ([commit 6a2b0d7](https://github.com/GraphiteEditor/Graphite/commit/6a2b0d74dc51b786f1d8765508043e3272b82faa)) + +- Improve profiling CI action's comment output text ([#1939](https://github.com/GraphiteEditor/Graphite/pull/1939)) + +- Recategorize the node catalog ([commit e647ca9](https://github.com/GraphiteEditor/Graphite/commit/e647ca9f91a5e823137122126fe9e980f65d62ea)) + +- Revamp the website ([commit 5d74178](https://github.com/GraphiteEditor/Graphite/commit/5d74178f5f417afdd70abec596d38f22d490240a)) + +- Fix website base template escaping ([commit 98ab069](https://github.com/GraphiteEditor/Graphite/commit/98ab069a1703e89cea031fedffc55c3bf4191b5d)) + +- Revamp the website more ([commit 40fd447](https://github.com/GraphiteEditor/Graphite/commit/40fd4473a784ba24fc3105f8da56baacccf2dcf5)) + +- Add shifting of layers in stacks as blocks that collide and bump other layers/nodes ([#1940](https://github.com/GraphiteEditor/Graphite/pull/1940)) + +- Add self-hosted build asset deployment to GitHub releases in the CI action ([commit f2493d5](https://github.com/GraphiteEditor/Graphite/commit/f2493d5308ace728c3525d51609c3a2efcbdc139)) + +- Implement node path insertion at compile time ([#1947](https://github.com/GraphiteEditor/Graphite/pull/1947)) + +- Improve layer positioning in graph upon reordering; improve history system; add selection history ([#1945](https://github.com/GraphiteEditor/Graphite/pull/1945)) + +- Fix crash from gradients with bounds of zero ([#1950](https://github.com/GraphiteEditor/Graphite/pull/1950)) + +- Update various content on the website ([commit fb7d597](https://github.com/GraphiteEditor/Graphite/commit/fb7d5970b38c61fc1a35aeefd7028858c96f5ff2)) + +- Fix broken SVG importing and crash when exporting ([#1953](https://github.com/GraphiteEditor/Graphite/pull/1953)) + +- Switch attribute-based vector data from referencing PointIds to indexes in the points table ([#1949](https://github.com/GraphiteEditor/Graphite/pull/1949)) + +- Bezier-rs: Fix crash when outlining a small bézier ([#1958](https://github.com/GraphiteEditor/Graphite/pull/1958)) + +- Bezier-rs: Fix crash when outlining a small bézier (#1958) ([commit bf5019d](https://github.com/GraphiteEditor/Graphite/commit/bf5019db7b52120bbb255adae78ee416c96a39b4)) + +- Fix invalid segment crash when disolving point loop ([#1959](https://github.com/GraphiteEditor/Graphite/pull/1959)) + +- Refactor navigation metadata ([#1956](https://github.com/GraphiteEditor/Graphite/pull/1956)) + +- Raw-rs: Flip and rotate image based on camera orientation ([#1954](https://github.com/GraphiteEditor/Graphite/pull/1954)) + +- Make the Clippy Check CI action not comment on draft PRs ([commit a93dcb2](https://github.com/GraphiteEditor/Graphite/commit/a93dcb2776027bfcb385ae9dfddff249bdfd896b)) + +- Set integer ruler intervals when zoomed in ([#1966](https://github.com/GraphiteEditor/Graphite/pull/1966)) + +- Fix some typos in the node graph code ([#1970](https://github.com/GraphiteEditor/Graphite/pull/1970)) + +- Fix some typos in the node graph code (#1970) ([commit 507210b](https://github.com/GraphiteEditor/Graphite/commit/507210b961ba620f8908da3ce3bf26518fda4a4b)) + +- Make the node graph use a document node's default type ([#1965](https://github.com/GraphiteEditor/Graphite/pull/1965)) + +- Make CI collapse previous PR comments with profiling benchmark deltas ([#1974](https://github.com/GraphiteEditor/Graphite/pull/1974)) + +- Make the primitive shape tools avoid setting a negative transform scale ([#1973](https://github.com/GraphiteEditor/Graphite/pull/1973)) + +- Nudge only the shallowest selected layers to avoid amplified translation ([#1975](https://github.com/GraphiteEditor/Graphite/pull/1975)) + +- Improve select tool click targets ([#1976](https://github.com/GraphiteEditor/Graphite/pull/1976)) + +- Correctly apply transforms to vector data and strokes ([#1977](https://github.com/GraphiteEditor/Graphite/pull/1977)) + +- Fix types of inputs to nodes with a nested network implementation ([#1978](https://github.com/GraphiteEditor/Graphite/pull/1978)) + +- Fix click targets (in, e.g., the boolean node) by resolving footprints from render output ([#1946](https://github.com/GraphiteEditor/Graphite/pull/1946)) + +- Refactor the node macro and simply most of the node implementations ([#1942](https://github.com/GraphiteEditor/Graphite/pull/1942)) + +- Raw-rs: run tests in parallel ([#1968](https://github.com/GraphiteEditor/Graphite/pull/1968)) + +- Update Cargo.lock to fix CI ([#1994](https://github.com/GraphiteEditor/Graphite/pull/1994)) + +- Box TaggedValue::VectorModification ([#1995](https://github.com/GraphiteEditor/Graphite/pull/1995)) + +- Fix blend modes and opacity on raster data ([#1996](https://github.com/GraphiteEditor/Graphite/pull/1996)) + +- Use overlays to draw artboard names ([#1981](https://github.com/GraphiteEditor/Graphite/pull/1981)) + +- Fix Graphene CLI crash ([#1993](https://github.com/GraphiteEditor/Graphite/pull/1993)) + +- Improve node macro and add more diagnostics ([#1999](https://github.com/GraphiteEditor/Graphite/pull/1999)) + +- Fix compilation on nightly ([#2001](https://github.com/GraphiteEditor/Graphite/pull/2001)) + +- Improve type compatibility and clean up new node macro usages ([#2002](https://github.com/GraphiteEditor/Graphite/pull/2002)) + +- Path Bool library code cleanup ([#2000](https://github.com/GraphiteEditor/Graphite/pull/2000)) + +- Fix broken Opacity slider in Layers panel ([#2004](https://github.com/GraphiteEditor/Graphite/pull/2004)) + +- Upgrade the third-party library license generation ([commit 14de67c](https://github.com/GraphiteEditor/Graphite/commit/14de67c5a78a1e8369a8b023da441237a44e48cb)) + +- Clean up web code errors and make CI enforce them ([commit 1ee5ffb](https://github.com/GraphiteEditor/Graphite/commit/1ee5ffbbe8a64da5a83da889dd16d41c3463c332)) + +- Upgrade web dependencies ([commit aa03dc8](https://github.com/GraphiteEditor/Graphite/commit/aa03dc8278859c5be9159603f771913568f02567)) + +- Remove serde from Bezier-rs web demos to reduce Wasm size ([commit 0b0169a](https://github.com/GraphiteEditor/Graphite/commit/0b0169a415453b9d9910d765f0538ecd67b618c0)) + +- New node: Dehaze ([#1882](https://github.com/GraphiteEditor/Graphite/pull/1882)) + +- Add manually-runnable benchmarks for runtime profiling ([#2005](https://github.com/GraphiteEditor/Graphite/pull/2005)) + +- Replace terminology "primary" with "call argument" and "parameter" with "secondary input" ([commit c738b4a](https://github.com/GraphiteEditor/Graphite/commit/c738b4a1f9a309f3ab12d2259ba8631402d73da6)) + +- Fix many regressions introduced mostly in #1946 ([#1986](https://github.com/GraphiteEditor/Graphite/pull/1986))