* Use doubles in graph
* Format .graphite files onto one line
* Rename new node to Vector2
* No primary input
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Cache base64 representation of images when converting to graphic group
* Fix build
* Fix build again
* Actually fix it this time
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
Changes:
Graph is evaluated on every viewport change
move all navigation logic into the viewport
reduce the number of js roundtrips
add canvas rendering
enable image pasting
various cleanups
Fix cache nodes being reset every evaluation
* Make transform node accept footprint as input and pass it along to its input
use f32 instead of f64 and add default to document node definition
* Add cull node
* Fix types for Transform and Cull Nodes
* Add render config struct
* Add Render Node skeleton
* Add Render Node to node_registry
* Make types macro use macro hygiene
* Place Render Node as output
* Start making DownresNode footprint aware
* Correctly calculate footprint in Transform Node
* Add cropping and resizing to downres node
* Fix Output node declaration
* Fix image transform
* Fix Vector Data rendering
* Add concept of ImageRenderMode
* Take base image size into account when calculating the final image size
* Supply viewport transform to the node graph
* Start adapting document graph to resolution agnosticism
* Make document node short circuting not shift the input index
* Apply clippy lints
* Create asynchronous rust imaginate node
* Make a first imaginate request via rust
* Implement parsing of imaginate API result image
* Stop refresh timer from affecting imaginate progress requests
* Add cargo-about clarification for rustls-webpki
* Delete imaginate.ts and all uses of its functions
* Add imaginate img2img feature
* Fix imaginate random seed button
* Fix imaginate ui inferring non-custom resolutions
* Fix the imaginate progress indicator
* Remove ImaginatePreferences from being compiled into node graph
* Regenerate imaginate only when hitting button
* Add ability to terminate imaginate requests
* Add imaginate server check feature
* Do not compile wasm_bindgen bindings in graphite_editor for tests
* Address some review suggestions
- move wasm futures dependency in editor to the future-executor crate
- guard wasm-bindgen in editor behind a `wasm` feature flag
- dont make seed number input a slider
- remove poll_server_check from process_message function beginning
- guard wasm related code behind `cfg(target_arch = "wasm32")` instead
of `cfg(test)`
- Call the imaginate idle states "Ready" and "Done" instead of "Nothing
to do"
- Call the imaginate uploading state "Uploading Image" instead of
"Uploading Input Image"
- Remove the EvalSyncNode
* Fix imaginate host name being restored between graphite instances
also change the progress status texts a bit.
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Reorganize file structure
* Remove all unsafe code
* Add testcase for debugging ub
* Convert into proper test with fail condition
* General cleanup
* Fix tests
* Add feature guard for deallocation
* Use raw pointer for storing values to avoid violating aliasing rules
* Add comment explaining the disabling of simd128
* Fix brush node
* Fix formatting
* Laid groundwork for per-stroke brush parameters.
* Added new spacing parameter.
* Added back interpolation, using spacing parameter.
* Move bounding box code into core.
* Initial working prototype of per-stroke styles.
* Removed now useless brush node properties.
* Made default spacing 50% for performance comparison.
* Quick and dirty prototype for BlitNode copied from blend.
* Fixed error after rebase.
* Optimized the blitting loop.
* Pretty big optimization for into_flat_u8.
* Insert brush node for images
* Fix starting position transform
* UX polish
* Code review nits
---------
Co-authored-by: 0hypercube <0hypercube@gmail.com>
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Make node graph execution async
Make node macro generate async node implementations
Start propagating async through the node system
Async checkpoint
Make Any<'i> Send + Sync
Determine node io type using panic node
Fix types for raster_node macro
Finish porting node registry?
Fix lifetime errors
Remove Send + Sync requirements and start making node construction async
Async MVP
Fix tests
Clippy fix
* Fix nodes
* Simplify lifetims for node macro + make node macro more modular
* Reenable more nodes
* Fix pasting images
* Remove http test from brush node
* Fix output type for cache node
* Fix types for let scope
* Fix formatting
* Add Channel Extrataction Node
* Add hacky BlendModes for Inserting Color Channels
* Fix Channel Exporter
* Add Monochrome Option and Multi Output Node
* Fix Input Mapping
* Fix Formatting
* Split Alpha Extraction to seperate node
* Remove unnecessary functionality
* Add Alpha Channel as an output to the extract channel node
* Fix compilation
* Add unpolished 'Combine Channels' Node
* Fix Rebasing Issues
* Add a bit of polish
* Fix Rebase Issues
* Switch from 'ColorChannel' to 'RedGreenBlue'
I initially added an enum to hold color channels called 'ColorChannel', but while implementing the nodes, there somebody allready added a similar enum so I switched to that type
* Add correct names
* Add Improvement
- Some Performance Improvements
- Some Formatting Improvements
* Add some improvements
Most of this stuff was done by TrueDoctor in my Luchbreak :D
* Implement IO Improvements
- Converted primary output from split node to a dummy output
- Removed primary Input from split node
* Fix Formatting
* Fix Combine RGB Node (hopefully final :D )
* Swap around Inputs and Outputs
Move from ARGB -> RGBA
* Improve naming
* More naming fixes
* Fix Replace -> Into
* Rename Replacment -> Insertion
* Add blank assist area
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
Co-authored-by: Dennis Kobert <dennis@kobert.dev>
Implement Infrastructuro to reuse the previous evaluation of the
node graph to blend the new stroke with instead of drawing the
entire trace from scratch.
This does not transition to a blending based approach because that still
caused regressions but allows the brush node to work with input data
natively.
Test Plan:
- Use the brush tool in the editor and check for regressions
- Evaluate the performance
Reviewers: Keavon
Pull Request: https://github.com/GraphiteEditor/Graphite/pull/1190
Fix transform logic for mask node + other fixes
* Fixes the transform logic for the mask node reverting the breakage
introduced by the color pr
* Actually modifies the pixel values
* Fix storage format for images
* Export images as unassociated alpha
* Migrate Nodes to use RasterMut + Samplable
* Add Pixel trait to include serialization
* Implement traits for Color and propagate new generics
* Always convert to linear color when loading images
* 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>
* Implement let binding
* Add lambda inputs
* Fix tests
* Fix proto network formatting
* Generate a template Scoped network by default
* Add comment to explain the lambda parameter
* Move binding wrapping out of the template
* Fix errors cause by image frames
* Add Blend node
* Add more implementations
Currently, known buggy implementations:
* Color Burn
* Saturation
Opacity is currently achieved by linear interpolation, this will be changed as soon as all filters are implemented.
* Add more implementations
Currently, known incorrect implementations:
* Color Burn
* Saturation
Not yet Tested:
* Linear Burn
* Linear Dodge
* Vivid Light
* Linear Light
* Pin Light
* Hard Mix
* Subtract
* Divide
Opacity is currently achieved by linear interpolation, this will be changed as soon as all filters are implemented.
* Cleanup
* Removed Unused Code
* Fixed Clamping Issue
* Fixed Inverted Opacity
* Moved Opacity Calculation from individual Blend Functions into 'blend_node' function
* Fix 'Color Burn' blend mode
Currently, known incorrect implementations:
* Saturation
Not yet Tested:
* Linear Burn
* Darker Color
* Linear Dodge
* Lighter Color
* Vivid Light
* Linear Light
* Pin Light
* Hard Mix
* Subtract
* Divide
Opacity is currently achieved by linear interpolation, this will be changed as soon as all filters are implemented.
* Fix 'Saturation' blend mode
Currently, known incorrect implementations:
* None :D
Not yet Tested:
* Linear Burn
* Darker Color
* Linear Dodge
* Lighter Color
* Vivid Light
* Linear Light
* Pin Light
* Hard Mix
* Subtract
* Divide
Opacity is currently achieved by linear interpolation, this will be changed as soon as all filters are implemented.
* Final Cleanups
* Add proper Inputs
* cargo fmt
* Add test for doubling number
* Display implementation for ProtoNetwork
* Switch top and bottom
* Add input types for blend image node
* Fix test
---------
Co-authored-by: 0hypercube <0hypercube@gmail.com>
Co-authored-by: Dennis Kobert <dennis@kobert.dev>
* Multiple node outputs
* Add new nodes
* gcore use std by default to allow for testing
* Allow multiple node outputs
* Multiple outputs to frontend
* Add ImageFrameNode to node registry
* Minor cleanup
* Basic transform implementation
* Add some logging to image encoding
* Fix ImageFrameNode
* Add transform input to Imaginate node (#1014)
* Add transform input to imaginate node
* Force the resolution to be edited with no transform
* Add transform to imaginate generation
* Fix compilation
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Add labels to node outputs
* Fix seed; disable mask when transform is disconnected; add Imaginate tooltips
* Rename 'Input Multiple' node to 'Input'
* Code review
* Replicate to Svelte
* Show only the primary input chain in the Properties panel
---------
Co-authored-by: Dennis Kobert <dennis@kobert.dev>
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Generate stable node ids
* checkpoint
* Implement borrow tree
* Add eval function on borrow tree
* Refactor Node trait to fix lifetime issues
* Compiler infinite loop
* Impl compose pair
* Transition to double lifetime on trait
* Change node trait to use a generic arg for the input
* Start adapting node_macro
* Migrate more nodes to new macro
* Fix raster tests
* Port vector nodes
* Make Node trait object safe
* Fix FlatMapResultNode
* Translate most of gstd
* Fix DowncastBothNode
* Refactor node trait once again to allow for HRTB for type erased nodes
* Start working on type erased nodes
* Try getting DowncastBothNode to work
* Introduce Upcasting node + work on BorrowTree
* Make enough 'static to get the code to compile
* Transition DynamicExecutor to use borrow tree
* Make Compose Node use HRTB's
* Fix MapResultNode
* Disable blur test
* Add workaround for Composing type erased nodes
* Convert more nodes in the node_registry
* Convert more of the node_registry
* Add update tree fn and hook up to frontend
* Fix blur node
* Implement CacheNode
* Make frontend use graph compiler
* Fix document_node_types type declaration for most nodes
* Remove unused imports
* Move comment down
* Reuse nodes via borrow tree
* Deprecate trait based value in favor of TaggedValue
* Remove unsafe code in buffer creation
* Fix blur node
* Fix stable node id generation
* Fix types for Image adjustment document nodes
* Fix Imaginate Node
* Remove unused imports
* Remove log
* Fix off by one error
* Remove macro generated imaginate node entry
* Create parameterized add node
* Fix test case
* Remove link from layer_panel.rs
* Fix formatting