[HELP - BIG PICTURE] Big picture about: video editing, painting, vector graphic, animation, gui, 2d image processing... rust ecosystem, libraries and other things to know?

Hi Rustaceans and Graphic Connoisseurs :smile:!

I'm here to ask to the rust community about some topics that fascinate me!

But! I need to put in the table that I'm a completely noob about this stuff and I can make bad and unfocused questions!

first of all I need to cite some of my favorite software:

  • Gimp - image editor
  • Krita - painting software
  • Inkscape - vector image editor
  • Sygfig Studio - vector and animation editor
  • Obs Studio - streaming video software
  • Davinci Resolve - video editor

I've always used these software wondering how they worked on a technical level :thinking:.

But when I try to understand these things better, I hit a wall of hard technical details, my noobness and unfriendly C++ stuff... :thinking:

Today I feel like diving down this rabbit hole again with Rust :sweat_smile:, but I think I need to have a better overview and a clearer roadmap to follow.

if I want to understand how these software work and try to make some sketches in Rust, I think i need to separate in topic and subjects what these software do and what have in common each other.

I would like to try to make/experiment a GUI application with these features:

  • create a vector-layer-like canvas and modify vector-objects with the Bezier Curve
  • create an animation of a plain blue square that follow a path and export it in mp4
  • using alpha channel, make a selection and remove the background of a photo
  • paint 5 frames of a stupid stick man with the mouse and create an mp4/gif with them in succession
  • play and stop a video, crop it smaller, make appear a text with fade-in fade-out effect and save it

is it too hard? :sweat_smile:

I've been googling a lot and now I'm posting here a summary of what was found and I hoped I understood:

Windowing, Canvas, GPU and Cross-platform issues
When I want to create a desktop application, the first task is to take care of creating the GUI. In the web I found many different toolkits to do this: gtk, qt, wxWidgets. But I don't like dealing with cpp stuff :sweat_smile:. In Rust I found some interesting ones: egui, slint, druid and others: areweguiyet :thinking:
The second problem is to create and manipulate some kind of infinite canvas that allows me to create animations and image manipulation, I found egui very interesting in this topic with it's canvas widget.
But I don't know how low level I'll need to go on this kind of canvas. In this regard I found the lower level libraries winit and wgpu. But here I also discover the rabbit hole of os-specific-api, gpu and graphics drivers (webgpu, webgl, opengl, vulkan, proprietary drivers :dizzy_face:). I found these things and the cross platform issues to be quite confusing.

Math, Vector graphics, and Animations
in my google research in order to handle vector images/objects i found the beizer curve topic and regarding it's applications i found this two interesting projects: pathfinder, lyon and the fantastic egui canvas.
Furthermore, to make animations :thinking: i only found game engines and this interesting plugins for bevy engine: bevy+lyon and bevy+egui, but i don't know if this is the right way to go... :thinking:

Image/Video Processing \ Reproduction
When I tackled how to reproduce/manipulate/apply effects/export/import/get frame streaming/texture in a video in rust i don't found a lot: only a not-so-mature rust-media, but instead lot of threads cited these software: gstreamer, ffmpeg, sdl2. I see there is a rust binding for everything! but I honestly don't understand much which is better to use, if i need some of them or all of them :thinking:

now! some questions:

  • What is your vision about the rust ecosystem about this topic?
  • Do you have advises and material to share?
  • How difficult is this field, what are the challenges and difficulties i will face?
  • What are your recommendations?
  • Where should i start from? what are the right tools? what i should use?
  • What I'm missing?

plus some curiosity/technical questions:

  • What are the architectural/low level canvas difference in video playback, painting, apply effects to images, vector image handling, animate 2d objects? are all the same thing?
  • What technical aspects game engines and video editors have in common or do they differ?? :thinking:

thanks for your time! :grin: