GlobalChannelPreseter (63.3 KB)

10 years ago I started making a preseter for patches and as I was making new ones for every project, I started to use kontrolleur to expose ioboxes for a no patch preset utility.
The main thing was that you should be able to set a variable via the gui, or in the patch and everything loom the same.
Global channels seems to do the same job and as I have to remake an installation patch from 10 years ago in gamma, I thought I’d start again with a simple preseter.
Let me know if I’m doing anything stupid, I feel like there should be a better way to save values than serialise the whole object, it makes it hard to human read save files.
And really I feel like this shoud be in the global channels hde. Every job I’ve ever done whether vjing, art or commercial always needs a way to save looks even if they are just as a reference. Hopefully this will help someone else, and if not, its here so I can find it again :D

It uses tag/name as a naming convention, so that you can tag patches to reduce the slider counts, and they save into separate banks of presets. I use them for different scene presets. Left click to recall a preset, right click to save into one.

( I left the patch quite open so you can see whats going on where, It will get bagged and tagged I guess in the future and become more esoteric)

Also it mostly came from this thread How to get Channel (Ungeneric) attributes so thanks to @lasal and @elias for that. I still don’t know where the interface lives :D


Ah, now I come to try and make a dropdown list, I have a question, as enums aren’t a type, it seems I would need to add a custom type for ever type of enum, is that correct, or is there a workaround?

Turns out a try region is all it needed (72.8 KB)

Hey Chris,

great to see you dive into global channels! And yes, I’d say you are on the right track there - implying that we’re on the right track ;) Well, we are on the same track at least ;)

After some detours into more prominent areas of the vvvv UX, we plan to get back to those guys and make them as nicely integrated as possible with lots of high-level UX support. There are already quite some modules and there will be more. Not all of them are already supported by the channel browser, but the list is growing…
We’ll come back to all of those topics right after releasing 6.0.

Let me give you an outlook on how they are meant to glue low-level with high-level reasoning, internal with outside perspectives. Global channels are meant to be the middle man, the solid interface between those worlds.

  • vvvv gamma started with being strong on the implementation / low-level side and we’re on our way up. Implementation details are done with custom data types. Let’s start there. You’ll be able to expose properties and attach some metadata to those properties via the inspector. A module called SubChannels will then help you organize nested global channels for your objects and their properties. The intuition with the nesting is that often you want to focus on properties (colors and other primitive data types). Basically what you were stumbling over already.

  • global channels can be thought of as an interface to your app. An in-process database. They are decoupled just enough from the low-level patches to allow stable names / pathes, even when the low-level details change. The browser currently supports dot-separated paths and displays them hierarchically.

  • If you want to generate global channels dynamically yourself - without the support of SubChannels - you can do so by reflecting over your data types yourself. Upcoming previews will outline how meta-data can be read. An example will show you how you can use tags to instruct bindings to be created for you.

  • We’re now getting into the realm of modules that allow you to make your app remote-controllable via OSC, RCP, MIDI, and more.

And, yes, indeed presets are on our list as well. While those could make sense on different levels of the language, they are also a perfect fit for an app-level preset system. Again, the meta data efforts point into this direction already.

Sorry to not already be able to hand you over the ready-to-use solution, but the fact that you look into all of this tells me that we’re talking. Pretty excited about the weeks and months ahead.
Will keep you posted for more.


Thanks for the update. Given this was a super quick patch, and can do pretty much all I need for now, I’ll keep adding bits for this project. Obviously osc/rcp etc are useful addons, and with my intial gui in vvvv, part of the reason for making it was for when you have your server and screen at the back of the room/in another room, but you want to tweak values from stage/where you can see the screen, etc. So very glad you are on it too :)
Next on the list is rebuilding my sequencer for the presets…

1 Like

This patch no longer works as serialize /Deserialize Xml has some how changed since 5.3 Any suggestions how to fix that? I would guess that all I need is the channel name and the value as string? Do I need to that in a similar way to the custom editor for the imgui?

So how can I get a value and cast it to a string from a channel?
If I can get the value I dont need to serialise an object, and presumably I could cast it back to a global channel from the name of the channel. I’m somewhat bewildered by how encapsulated channels are. Or how can I write these objects to a file for recall?

Hi, I’ve looked at the original patch but it’s quite complicated to understand. Maybe this patch can help illustrate some ideas that I think might help. In fact, a lot of ideas from this patch can be seen in my “add-on” work.

SpreadOfObjectChannel.vl (18.0 KB)

If that’s not what you need, I can try to look into it - I’ve experimented with channels quite a bit.

By the way, something has actually changed with the new stable version. I would do more testing. For example, there is a frame length exception that wasn’t expected:


uhm sorry for the late reply. had another look at your patch.

I found two approaches to work in a non-generic way with channels.

  • either you make use of a channel feature: each Channel<WhatEver> is also always a Channel<Object>
  • or you make use of a more standard way of dealing with situations of unkown type at design time: make use of the fact that each Channel has a non-generic access to it.

GlobalChannelPresets for gamma6.vl (311.7 KB)

still. I will have another look together with @Elias to figure out what exactly changed in terms of serialization and how it broke the patch.

Had another look and found the bug. Fixed for preview 6.4-4.


I’ll have another look when I’m free again, thanks!