Q3 progress report: https://graphite.rs/blog/graphite-progress-report-q3-2024/
[Open source Rust graphics editor] Graphite progress report (Q2 2024) - https://news.ycombinator.com/item?id=41138691 - Aug 2024 (3 comments)
Graphite 2D graphics editor built in Rust: Looking back on 2023 and what's next - https://news.ycombinator.com/item?id=38855850 - Jan 2024 (2 comments)
Graphite: 2D Raster and Vector Editor - https://news.ycombinator.com/item?id=38169500 - Nov 2023 (4 comments)
Graphite: Open-source raster and vector 2D graphics editor - https://news.ycombinator.com/item?id=36901406 - July 2023 (64 comments)
Graphite – open-source raster and vector 2D graphics editor written in Rust - https://news.ycombinator.com/item?id=30675530 - March 2022 (18 comments)
In short, please be patient :) The app's architecture is designed with performance that'll make your CPU and GPU scream, but it's a big job building all of it. Especially for raster imagery, that's where a CPU-bottlenecked render pipeline is especially affected. But next year is the year we move on from vector graphics to raster once the GPU is utilized in the render pipeline.
Thanks for taking a look!
Personally, I always try to use a PWA when the app is otherwise offered via Electron.
If it’s going to depend on a browser engine, it may as well be the one I already have open and update regularly.
I read it as a replacement for Blender, but upon testing it I was confused as everything was 2D and looks like Photoshop.
But no, you meant the next Photoshop, while referencing Blender as a popular open source version of closed-source 3D modeling/rendering software? Is that right?
Someday, I'd like to try my hand at making my own vector graphics tool that contains a constraint solver. I am just an amateur when it comes to graphic design, but I often find Inkscape incredibly difficult to use. Certain shapes take bizarre combinations of commands to create and once a design is finished it can be hard to make adjustments. I find it much easier to make 2D designs as a fusion 360 sketches because constraining a bunch of lines and curves then playing with measurements is significantly more intuitive and interactive. Also maybe a tool like this already exists and I'm just not aware of it.
I'm not up on Adobe (I use InkScape which is sort of the default open-source / free alternative) but I guess Adobe Illustrator is the closest analogue here.
Why create a new project instead of advancing InkScape though?
You should probably add Graphite to this list [2]. I'll definitely try Graphite and follow its progress.
Good luck!
--
Here are some things in mine that I've found useful but don't see here (/ might have missed) and could be food for thought (presumably some of these are just NYI but noting them regardless): [edit: a couple of these things are already noted at https://github.com/GraphiteEditor/Graphite/issues/1870]
- shift+G/R/S for setting handle mode (bent, colinear, and colinear+equidistant respectively) works out quite intuitively; mode can be displayed as a different icon on the point (square for bent, rectangle aligned to angle for colinear, and circle for equidistant is what I use; circle is somewhat questionable but my handles have arrow tips)
- while holding just a handle, set the rotation/scale anchor point to its point
- allow both rotate and scale at the same time (maybe never useful but I still did it. ¯\_(ツ)_/¯)
- while rotating/scaling, some shortcut for setting the anchor point (esp. snapped to an element representing the rotational center of a symmetric design)
- middle-mouse-dragging while holding an element should ignore the delta mouse movement during the movement
- I draw visual indicators of the current r/g/s accumulated action (g: a line from the starting mouse position in the canvas to where it'd be dragged to; s: line from the anchor point through the current and original mouse position with different colors (i.e. the ratio of the color lengths is the ratio of scaling); r: lines from the anchor to original & current mouse position, with an arc in between (very busy-looking, don't quite like it))
- some actions - cut a path into two (a thing I don't have but have wanted is drag-selecting to cut into three), snapping to existing points if near enough; and another to join paths if two end-points are selected; and select all linked to current selection
Importantly, it's both "just Rust" and "very Rust". You can stay on the yellow brick road and kinda just get the app out there with incredible multi-threaded CPU + GPU rendering performance from the outset... or dig deeper and go into advanced stuff. Per the docs, it "leverages Rust to its full extent: ownership, borrowing, lifetimes, futures, streams, first-class functions"... it's just up to you how much of that you want to use
The documentation is admittedly WIP but if you need help, the Discord server is very helpful. I'm there virtually 24/7 and happy to answer any questions
The repo is at https://github.com/iced-rs/iced -- check out the readme for two complex apps recently built. It's fully themeable so you can make apps look exactly as you want them to (which is a downside for those looking for more native widgets)
It makes me very excited to see tools that are built as web apps because more gravity on web means more capabilities for the web platform which is more open and accessible.
Rust is great - amazing. I presume it is compiled to Web Assembly.
I'm just wondering how and why these three passionate gifted individuals didn't go Round A, Round B Investor funding, post valuation SAFE, Press briefing route?
Been thinking a lot about it lately when I see tons of AI wrappers, open weight fine tuned packaged models and everything in between.
Probably passion can't be priced? Happiness is not valuation?
- Ctrl+1: dotted stamp roller - Ctrl+2: bristle brush - Ctrl+3: diluted ink - Ctrl+4: ragged solid ink brush
This concept will be reimplemented in Graphite eventually. Maybe as a GSoC project.
The actual thesis write-up is here <https://digitalcommons.calpoly.edu/theses/2653/> in case you're really interested for some reason.
And because it's time for a fresh start. Sometimes you can't turn around a heavy ship, and that ship doesn't want to be turned around. It's easy to write a sentence like that, but once you actually think about it, how does an outsider with a good idea and a capability to execute on it somehow approach an existing project and decide to "take it over"? That would be neither viable nor would it yield a desirable outcome. We're building something fundamentally different from Inkscape that just so happens to eclipse it.
If there's no plan for that or if its limited to usual suspects like GDrive, Dropbox etc., then I guess there's not much benefit to selfhosting.
When searching for "scripting" on the pages, I don't see any scripting support. Are there plans to integrate it?
Also some kind of API?
No support for custom scripts yet. But the whole concept is that we're basically building a WYSIWYG editor on top of a node-based compositor on top of a visual programming language (so that's three products in one, lots of work ahead for us!). The result is that the whole thing is a programmatic data pipeline and you'll be able to write custom scripts in both node and code form, then compose them into reusable pieces and pipelines. But since we're building three products in one, we have only been able to focus on the parts that matter most to get things working. Your request hasn't yet been one of those, but worry not, that's very much a core feature.
This leaves only three options:
1. start contributing to the project slowly, try to get into their ranks, participate in conversation, and hope that you share the same vision
2. fork it and learn the codebase by yourself
3. write your own
Out of those, given the obviously conscious choice to go with Rust, and the ambitious goals, the third option is the only one that makes sense.
Re: open weight models Most of the innovation happens within companies who use OSS to either appeal to developers or to destroy potential competitors (think Meta spending a fraction of its ad revenue just to ruin the market for OpenAI / Microsoft) Some individuals get grants from VCs who want to make a name in AI for themselves for the cost of peanuts (eg. a16z sponsors some models)
At the same time, for wealthy tech people with skills and a well paid job (think 300-500) raising capital is not always an attractive proposition. You'll likely have a lower salary when doing your own startup and if it turns out your open model can't make enough money you'll just have a bunch of worthless equity and 1-2 years of high stress / pressure.
Every update (even moving the canvas around takes 1-2 secs on my laptop.
TLDR; looks like this is redrawing everything every time which makes it useable only for very simple projects atm, unless I miss sth. I.e. needs caching of vectors as bitmaps/textures of some sort.
Also doesn't seem to support OpenEXRs yet? They won't show in the file browser.
Screenshots look great and I love the node editor's mapping to the layer stack.
But as always with Graphite it's still unclear to me how many of the screenshots show actual functinality and how many are mockups or the functionality behind some UI elements is simply not implemented yet.
The one thing is when something is drawn in the interactive UI, rather than becoming a single node which cannot be decomposed/worked with via sub-elements, it should become (or there should be an option for) "ungrouping" it to an equivalent set of nodes/values --- if this capability is present, I couldn't figure it out, and I'd be glad to know of it.
The Adobe suite is a bunch of bugs stuck together for the benefit of no one in particular, at this point. Hopefully with time and donations this can disrupt the market as Blender did in 3D.
I just think sometimes when I see cool apps like this, it seems like there could be a new wave of cool web/phone apps using RUST/WASM.
Something about these Rust examples just seem snappier, sharper.
> Graphite's code architecture is structured to deliver native performance for your graphically intensive workloads on desktop platforms and very low overhead on the web thanks to WebAssembly and WebGPU
Zed has an interesting WASM-based extension APIN that makes it really easy to write extensions in Rust, it might be worth checking out for this project.
Maybe they wanted to work for themselves, not for a VC?
Also they say "native" apps are coming which I am assuming means "actually talks to the OS properly instead of going through a web browser", I have loathed Electron apps ever since Evernote got rewritten as a pile of webshit.
Founders are just as tired of "ugh, why can't they just stop ruining good things!" as you are. Or some of us are, anyway.
1. I couldn't find that button. Perhaps show a picture of it or just embed it in the error message.
2. Make the error text selectable.
3. Let me report the bug straight from the app?
I'm not an illustrator so I can't add much beyond that, but I'm rooting for the devs to turn it into a success!
----
although I just played with it and judging by the state of your layers palette there's clearly a lot of stuff to do in terms of organizing the elements of the document in general - to me, documents contain one of more layers, that contain paths, compound paths, groups of paths, and/or layers, and I can choose to place new paths at the top or bottom of any layer (or inside a clipping path); Graphite just calls every path a "layer" and this becomes very unwieldy within a few seconds of drawing shapes.
And generally, you'll get your worst terms the earlier you solicit those funds.
If you don't need those funds, it's (mostly) to your advantage to hold off on raising them until you've got your feet underneath you and a company whose future is less disputable.
On the way there, you may even decide not to sell much to investors at all, which makes a big difference if you actually care about either your product or your team. Because your outside investors will rarely care about either and will often convince you to compromise both. They're financiers, and they're there for the money. You should be sure your objectives align with theirs before you sell to them.
Though, I guess it does somehow extend the SVG format, as it provides saving as either Inkscape SVG or plain SVG.. So maybe my understanding is incorrect?
Again, since iced is "just rust", you can write whatever widgets you need, although it comes with a long list of built-in widgets (and there are many more built by the community). You can compose views with a bunch of these widgets to get to the UI you want.
There's also nothing stopping you from creating a way for users to write widgets for your iced application. The sky is the limit.
And I'm singling out iced because I'm a fan, but this should be true for pretty much all robust GUI toolkits out there.
2) Given that this is written in Rust (compiled), is it on the roadmap to 'export' the parameterized designs into some callable library code? e.g: a game engine that calls "leaves = generate_texture("changing_leaves.graphite", percentage=0.2)"? It would be cool to keep that configurability even once you leave the editor - basically, splitting the node-graph renderer out as its own library that you can call programmatically.
I'm surprised that Ctrl+Z undid more than one step, I've never seen that before. If you get the chance to reproduce that and write up the steps, please file an issue since we'd like to take a look into that.
I see that you have constraints on your roadmap, but that's not what I mean. I am specifically referring to the 2D mode of Vectorworks, which is, special modules aside, really just a vector editor with support for hairlines and representational line styling (so lines don't have a 'real' thickness, but you set semantical pen thickness).
The main feature here is more about the path drawing workflow, which enables you to efficiently work with exact measurements. E.g. to draw a line you'd click to start, hover on the desired angle, enter number, (optionally press tab, enter exact angle,) click. A rectangle, say, would have additional parameters to access via tab.
So thinking about it, it in fact it is kind of a restraints system, but it only applies to the current drawing process and has the absolute minimum needed key presses/actions as possible, because you need to do this a lot (Sketchup works simlar, too)
I could see myself working on something like that, but didn't see anything pointing in that direction in your open tasks, so I am wondering if that would be in scope for graphite.
The red error message does tell you where to look:
> Check for error details in the node graph, which can be > opened with the viewport's top right _Node Graph_ button.
So in the top right of the viewport, and it's the button labeled "Node Graph". Is it possible your window was very small and the button got scrolled out of the way by other buttons? I'm open to feedback about how you may suggest improving the text of that message. It would currently be hard to make that dialog more visual or interactive, unfortunately, but that'll be something worth building towards improving in the future with improved diagonstics all around.
I think a tutorial regarding basics such as how to find shortcuts, do's/dont's for new beginners might help.
To me it looked like a crash, but I do understand that programmatically it wasn't a "crash" or an unhandled exception.
2. Since this is a pre-alpha/alpha/beta version, there's nothing wrong with a green button with a picture of a bug anywhere in the interface. Just open a dialog explaining that although horrified, you'll be thrilled to learn of any bugs.
I'm no authority here but that's the gist of my understanding