Uploaded a preview of "pw-videomix" with a new render backend.

Amazing new possibilities!

Complex chains of mixers and mandala filter lead to marvelous animations. Even loopbacks between two mixers don't break anything. (Maybe keep an eye on GPU temps.)

Still more like a prototype, but the framework seems pretty solid.

Menu allows for a little bit more customization now.

You can find compiled binaries here:
https://gitlab.freedesktop.org/AdeptVeritatis/pw-videomix

#vulkan #egui #winit #rust #rustlang #opensource

Adept Veritatis / pw-videomix · GitLab

freedesktop.org GitLab login

GitLab

Main problems:

Mixer inputs can NOT be removed, although there is a button. Remove the whole mixer and create a new, empty one.

Filter output size can be changed, but connected nodes need to be connected again to load the changes. If it is a mixer, remove it and create a new, empty one.

Monitor output is still very experimental.

Stacks don't work at the moment.

Added a color mixer node.

This was one of the main pieces, I was missing from Gimp.

If you want to try this node out, you need to compile the app yourself. (Or ask here, then I will temporarily change my policy to only upload compiled binaries for new versions.)

Let's see, what's up next.
I lost a little bit of my interest in stacks of pictures for animations at the moment. Maybe, then it is time for more in- and output options now.

The best thing is, I needed only around 1h for the node part, 1h for the render scene and 1 hour for pushing the mixer values to the pipeline.
As I know now what to do, this could be 10 min + 10 min + 10 min next time, if mathematics and Vulkan methods are already worked out.

The relief, that this isn't a pile of overcomplicated jumble anymore.  

#MyProjectDiary

You can remove inputs from mixers now.

That was important, because in my concepts mixers are spread everywhere in between. Like a safeguard, if you want to add something.

I should fix the allocation of new buffers, when changing the output size of a source node, next.

Or I start with a completely different task.

In the beginning, my main goal was to take #PipeWire video inputs, manipulate them and write to a pw output. A video filter node.

That is, where the name "pw-videomix" came from.

It felt odd, not to have any of this implemented. So instead of cleaning up, I went back to my previous tries with pipewire-rs. The updates of the #rust crate made it much clearer now.

tadaaa!
Only the connection. No data is exchanged yet. (See picture description)

And there was another argument for playing around with PipeWire. Before creating a cleaner update event system between all the nodes, I thought it is a good idea to have these kind of frame counting and time stamp adhering nodes in the framework to not do this all again and again.

I don't know, where this leads, but I am sure, I can identify a path.

The path was pretty clear and I came really close to the goal, but a big puddle with crocodiles was in the way. I could have taken a liana and jump over it, like I have seen another one doing. But I am not in a hurry.

PipeWire input can wait. It would feel awesome to have the flexibility of it now. But I know, I will solve it some day.

I integrated PipeWire into the event loop of the app, discarding an extra thread for it.

It seems to be a good starting point now, when going back next time.

Mixer values work now completely, by the way. You can blend in sources with the mix slider.

And move around, scale and remove the sources.

Click on the mixer node to open the side panel for all options.

#vulkan #egui #winit #opensource #freesoftware #rust #rustlang

I am satisfied with the app and the state of it at the moment. It may have a huge potential for much more, but to be honest it is doing exactly, what I needed when outlining the concept.

And the code doesn't look ugly to me. Not glamorous but somehow beautiful in its way. (Still very prototypical.)

It is fun to work on new nodes or integrate new features. And clean up!

Looking forward to save snapshots and create some different tiling nodes.
And a rotation node is necessary, too.

Snapshots work.

Whenever you press the button, it saves an uncompressed PNG image of the connected node to the disk.
With selectable folder. Doesn't overwrite existing files. That were a lot of small details to pay attention to.

Snapshot sequences is done too for #pwvideomix.

You can select between taking a series of snapshots within a time frame or after certain frames.

You can even use it, to make snapshots of your work for up to every 10 minutes.

Now I can create animations again with defined frame numbers and convert them to GIFs afterwards.

Would like to have scaling the output next. But I think, a new version number would fit first after all these changes.

https://gitlab.freedesktop.org/AdeptVeritatis/pw-videomix

#Vulkan #Egui #rustlang

Adept Veritatis / pw-videomix · GitLab

freedesktop.org GitLab login

GitLab

A FPS counter will be added with the next update.

I tested the sequential snapshots with quite a large photo. FPS dropped to 4-5 on a 10 year old computer, which was optimized for power-saving. But with SSD.

Yeah, this is definitely not meant for writing 4K-high resolution files every frame on embedded hardware in realtime. You always have to be sensible with the values you choose.

Or take the time the work needs.

But when I look back to idk ... maybe 3 to 5 seconds for one frame with my old GIMP scripts.

(Which was partly because of extra compression for the PNG files, I suppose.)

#Rust is such a great language, enabling me to do that.