2D vector & raster editor that melds traditional layers & tools with a modern node-based, non-destructive, procedural workflow. https://graphite.rs
Find a file
Ahmed Moharram 504af4e68d
Rename 'Sample Points' node to 'Sample Polyline' and add a parameter spacing based on separation or quantity (#2727)
* Added Count point Radio button to property pannel

* Implemented on Count radio button functionality

* Fixed linting and Title case problem

* Fixing more linting problem

* Instance tables refactor part 8: Make repeater nodes use pivot not bbox and output instance type not group; rename 'Flatten Vector Elements' to 'Flatten Path' and add 'Flatten Vector' (#2697)

Make repeater nodes use pivot not bbox and output instance type not group; rename 'Flatten Vector Elements' to 'Flatten Path' and add 'Flatten Vector'

* Refactor the 'Bounding Box' node to use Kurbo instead of Bezier-rs (#2662)

* use kurbo's default accuracy constant

* fix append_bezpath() method

* refactor bounding box node

* fix append bezpath implementation.

* comments

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>

* Add overlays for free-floating anchors on hovered/selected vector layers (#2630)

* Add selection overlay for free-floating anchors

* Add hover overlay for free-floating anchors

* Refactor outline_free_floating anchor

* Add single-anchor click targets on VectorData

* Modify ClickTarget to adapt for Subpath and PointGroup

* Fix Rust formatting

* Remove debug statements

* Add point groups support in VectorDataTable::add_upstream_click_targets

* Improve overlay for free floating anchors

* Remove datatype for nodes_to_shift

* Fix formatting in select_tool.rs

* Lints

* Code review

* Remove references to point_group

* Refactor ManipulatorGroup for FreePoint in ClickTargetGroup

* Rename ClickTargetGroup to ClickTargetType

* Refactor outline_free_floating_anchors into outline

* Adapt TransformCage to disable dragging and rotating on a single anchor layer

* Fix hover on single points

* Fix comments

* Lints

* Code review pass

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>

* Add anchor sliding along adjacent segments in the Path tool (#2682)

* Improved comments

* Add point sliding with approximate t value

* Add similarity calculation

* Numerical approach to fit the curve

* Reliable point sliding for cubic segments

* Fix formatting and clean comments

* Fix cubic with one handle logic

* Cancel on right click and escape

* Two parameter optimization

* Esc/ Right click cancellation

* Code review

* Fix dynamic hints

* Revert selected_points_counts and fix comments

* Code review

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>

* Fix Sample Points node to avoid duplicating endpoints instead of closing its sampled paths (#2714)

* Skip duplicate endpoint and close sampled paths in Sample Points node
Closes #2713

* Comment

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>

* Implemented on Count radio button functionality

* Fixed linting and Title case problem

* The sample count can now work with adaptive spacing

* Readying for production

* Rename to 'Sample Polyline' and add migration

* Upgrade demo artwork

* Add monomorphization

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
Co-authored-by: Priyanshu <indierusty@gmail.com>
Co-authored-by: seam0s <153828136+seam0s-dev@users.noreply.github.com>
Co-authored-by: Adesh Gupta <148623820+4adex@users.noreply.github.com>
Co-authored-by: Ezbaze <68749104+Ezbaze@users.noreply.github.com>
2025-06-25 20:14:08 -07:00
.cargo Unify feature dependencies with workspace dependencies (#2736) 2025-06-21 16:26:25 -07:00
.devcontainer Replace Footprint/() call arguments with dynamically-bound Contexts (#2232) 2025-03-06 05:35:56 -08:00
.github Reduce development environment warnings and remove DWARF debug symbols (#2741) 2025-06-22 03:10:25 -07:00
.nix Fix missing cargo-about in nix shell (#2665) 2025-05-28 12:41:52 +02:00
.vscode Add new icons to all menu bar entries 2025-02-07 19:08:06 -08:00
demo-artwork Rename 'Sample Points' node to 'Sample Polyline' and add a parameter spacing based on separation or quantity (#2727) 2025-06-25 20:14:08 -07:00
editor Rename 'Sample Points' node to 'Sample Polyline' and add a parameter spacing based on separation or quantity (#2727) 2025-06-25 20:14:08 -07:00
frontend Improve node creation menu and categorization (#2719) 2025-06-23 18:51:16 -07:00
libraries Reduce development environment warnings and remove DWARF debug symbols (#2741) 2025-06-22 03:10:25 -07:00
node-graph Rename 'Sample Points' node to 'Sample Polyline' and add a parameter spacing based on separation or quantity (#2727) 2025-06-25 20:14:08 -07:00
proc-macros Remove unused dependencies from the Cargo.toml files via cargo shear (#2723) 2025-06-19 20:28:17 -07:00
website Fix website donation page to work with responsive design 2025-06-23 03:55:32 -07:00
.editorconfig Remove all references to Vue 2023-03-10 04:02:02 -08:00
.envrc Update Tauri to v2 and execute only the node graph in native (#2362) 2025-04-14 11:43:15 +00:00
.gitattributes Update Git Attributes for JSON syntax highlighting in *.graphite files (#1752) 2024-05-13 22:35:32 +00:00
.gitignore Bulk remove old code for legacy GPU node implementations (#2722) 2025-06-19 20:28:17 -07:00
.nvmrc Add dev container configuration 2024-01-24 23:04:00 +00:00
.prettierrc Fix Bezier-rs interactive demos and migrate its Webpack bundler to Vite 2024-01-04 23:13:40 -08:00
about.hbs Replace license generator web infra to use Vite 2023-11-13 03:38:36 -08:00
about.toml Migrate node graph UI interaction from frontend to backend (#1768) 2024-06-15 08:55:33 -07:00
Cargo.lock Make wasm only depend on gstd, not gcore (#2745) 2025-06-23 10:30:41 +00:00
Cargo.toml Extract gapplication_io from gcore (#2742) 2025-06-23 11:35:14 +02:00
deny.toml Instance tables refactor part 5: unwrap GraphicGroup as multi-row Instance<GraphicElement> tables and move up transforms (#2363) 2025-03-12 01:38:36 -07:00
LICENSE.txt Add Apache 2 license 2020-07-12 13:58:50 -07:00
package-lock.json Add dev container configuration 2024-01-24 23:04:00 +00:00
package.json Update Tauri to v2 and execute only the node graph in native (#2362) 2025-04-14 11:43:15 +00:00
README.md Update website with improved student project details 2025-02-11 17:18:57 -08:00
rustfmt.toml Upgrade to the Rust 2024 edition (#2367) 2025-03-12 17:29:12 -07:00
shell.nix Fix missing cargo-about in nix shell (#2665) 2025-05-28 12:41:52 +02:00

Graphite logo

Your procedural toolbox for 2D content creation

Graphite is a free, open source vector and raster graphics engine, available now in alpha. Get creative with a fully nondestructive editing workflow that combines layer-based compositing with node-based generative design.

Having begun life as a vector editor, Graphite continues evolving into a generalized, all-in-one graphics toolbox that's built more like a game engine than a conventional creative app. The editor's tools wrap its node graph core, providing user-friendly workflows for vector, raster, and beyond. Photo editing, motion graphics, digital painting, desktop publishing, and VFX compositing are additional competencies from the roadmap making Graphite into a highly versatile content creation tool.

Learn more from the website, subscribe to the newsletter, consider volunteering or donating, and remember to give this repository a !


Discord      Reddit      Bluesky      Twitter      YouTube

Screenshots

"Isometric Fountain" vector artwork

"Marbled Mandelbrot" fractal raster artwork

Contributing/building the code

Are you a graphics programmer or Rust developer? Graphite aims to be one of the most approachable projects for putting your engineering skills to use in the world of open source. See instructions here for setting up the project and getting started.

By submitting code for inclusion in the project, you are agreeing to license your changes under the Apache 2.0 license, and that you have the authority to do so. Some directories may have other licenses, like dual-licensed MIT/Apache 2.0, and code submissions to those directories mean you agree to the applicable license(s).

Support our mission ❤️

Graphite is 100% community built and funded. Please become a part of keeping our project alive and thriving with a donation if you share a belief in our mission:

Graphite strives to unshackle the creativity of every budding artist and seasoned professional by building the best comprehensive art and design tool that's accessible to all.

Mission success will come when Graphite is an industry standard. A cohesive product vision and focus on innovation over imitation is the strategy that will make that possible.