Go to file
Alexandru Ică 0a775fe9be Take the transform of the ImageFrame into account when blending (#1072)
* Take the transform of the ImageFrame into account when blending

The implementation computes the axis-aligned bounding box after we transform
the corners of the source image, and then iterates through that box
and computes the inverse of the affine transform of the source image.
The samples are taken based on the u/v coordinates, so that the differences
in size/aspect ratio between the images don't matter.

This makes for a much simpler implementation, and gives us the flexibility
to add different filtering methods in the future, for example.

Signed-off-by: Ică Alexandru-Gabriel <alexandru@seyhanlee.com>

* Name the parameters for the blend node properly

This avoids confusion between which one of the images is the `source`
image and which one is the `destination`.

Signed-off-by: Ică Alexandru-Gabriel <alexandru@seyhanlee.com>

* Remove rendundant computation for u/v coordinates

Signed-off-by: Ică Alexandru-Gabriel <alexandru@seyhanlee.com>

* Rewrite the sampling/clamping logic

* Add image frame transform node

* Move transform node to transform module

* Fix a few issues with our transformation logic

* Fix math + do cleanup

---------

Signed-off-by: Ică Alexandru-Gabriel <alexandru@seyhanlee.com>
Co-authored-by: Dennis Kobert <dennis@kobert.dev>
2023-03-15 12:48:13 +02:00
.deploy Remove all references to Vue 2023-03-10 04:02:02 -08:00
.github Remove all references to Vue 2023-03-10 04:02:02 -08:00
.vscode Remove all references to Vue 2023-03-10 04:02:02 -08:00
docs Rename the legacy Graphene crate to document-legacy (#899) 2022-12-22 02:12:05 -08:00
document-legacy Add basic vector nodes (#1059) 2023-03-02 21:54:23 +00:00
editor Take the transform of the ImageFrame into account when blending (#1072) 2023-03-15 12:48:13 +02:00
frontend Make image downscaling have a configurable factor (#1044) 2023-03-12 06:42:44 +00:00
libraries Update GPU execution and quantization to new node system (#1070) 2023-03-05 13:22:14 +01:00
node-graph Take the transform of the ImageFrame into account when blending (#1072) 2023-03-15 12:48:13 +02:00
proc-macros Update Imaginate to output bitmap data to the graph via Image Frame node (#1001) 2023-02-11 08:56:31 +00:00
website Assorted code file cleanup following Svelte switch 2023-03-10 15:48:04 -08:00
.editorconfig Remove all references to Vue 2023-03-10 04:02:02 -08:00
.gitattributes Add `npm start` script alias for `npm run serve` 2022-01-12 06:14:32 -08:00
.gitignore Restructure GPU compilation execution pipeline (#903) 2022-12-31 02:52:04 +01:00
.gitmodules Add dyn-any as a submodule 2022-08-02 11:52:08 +02:00
.nvmrc Switch to Node.js 16 LTS, upgrade TypeScript, ESLint, and other dependencies (#395) 2021-11-29 03:32:09 -08:00
Cargo.lock Remove all references to Vue 2023-03-10 04:02:02 -08:00
Cargo.toml Remove all references to Vue 2023-03-10 04:02:02 -08:00
LICENSE.txt Add Apache 2 license 2020-07-12 13:58:50 -07:00
README.md Update project readme and MSRV 2023-01-24 01:33:30 -08:00
about.hbs Do not silently install cargo-about. (#377) 2021-09-19 16:58:04 +02:00
about.toml Replace hashing algorithm and disable debug logging for improved performance 2023-03-09 18:26:38 +01:00
deny.toml Replace hashing algorithm and disable debug logging for improved performance 2023-03-09 18:26:38 +01:00
package.json Assorted code file cleanup following Svelte switch 2023-03-10 15:48:04 -08:00
rustfmt.toml Upgrade rustfmt to 2021 edition 2021-11-02 20:08:39 -07:00

README.md

Graphite logo

Redefining state-of-the-art graphics editing.

Graphite is an in-development raster and vector 2D graphics editor that is free and open source. It is powered by a node graph compositing engine that supercharges your layer stack, providing a completely non-destructive editing experience.

Graphite is a lightweight vector graphics editor that runs in your browser. Its nascent node-based compositor lets you apply raster effects and co-create amazing art with AI in a non-destructive workflow. Fully-featured raster image editing, and a native desktop application, are current high-level development goals.

Launch the latest alpha version and learn more on the project website.

Please star this GitHub repository to help build momentum.

Discord

Join our Discord community to chat with the community and development team. Feel free to lurk, ask questions, give suggestions, or get involved in the project. We are always seeking new collaborators to help design and develop the software and this is where we communicate.

Building/Contributing

We need Rust and web developers! See instructions here for setting up the project and getting started.

We are also in search of artists to create beautiful sample work in Graphite and illustrations for the website and social media. Please get in touch if you are able to help out.

Design

The #1 priority for the Graphite software is providing a delightful user experience. The UI, UX, and product design is not an afterthought, but is a central guiding light in the software development process.

Below are some mockups demonstrating future goals for the user interface once nodes and raster photo editing is fully available.

Graphite raster UI viewport mockup

Viewport interface mockup showcasing a photo editing project that utilizes Graphite's raster graphics pipeline, one of the upcoming roadmap milestones. Raster editing is not yet supported.

Graphite raster UI node graph mockup

Node graph mockup demonstrating how the layers directly correspond to nodes. Thick vertical (upward) lines represent compositing stacks and horizontal (rightward) links represent data flow connections.

Features/Roadmap

See the web page for this information.