I find as my system grows, I am wanting to reconfigure things. It would help a ton if I could select a couple of modules that are next to each other in the same row and ‘group’ them and move them as one.
Yes, and not only to move them as one, but also to save them as one. In my mind something like the Combinator in Propellerhead's Reason would be a possible solution. On the other hand, VCV Rack mimics hardware very closely and as far as I know, a module like Reason's Combinator doesn't exist in the Eurorack world. I don't know if Softube's Modular or Native Instrument's Reaktor Blocks do have solutions that could be applied to VCV Rack. One Suggestion might be the ability to load/save a single row in the rack. Of course this would mean that cable connections from and/or to other rows in the rack can't be saved and also can't be restored after loading. The idea behind this is to treat every row in the rack as a separate rack.
Creating virtual instruments out of collections of pre-configured modules would be really useful. Say for example setting up a polyphonic voice made from VCOs and a quad midi in. It can take a while to set this up and doing it for every track seems a waste. If these could be saved (and moved) as an instrument that would be really helpful. These configurations could also be shared between users.
To my mind it would be kind of like a partial view in MVC parlance - and have perhaps it's own format like vcvi for vcv instrument. Opening on of these files doesn't start a new project - instead it would import into the current project.
I'll call this feature Core Macro. It will require separation of Module and ModuleWidget, so that one can be created without the other. There are dozens of design problems that will need to be solved for this feature.
I believe that a tabbed interface would be a better solution for reuse and distribution. Especially if Rack is to be used efficiently and for more structured music too.
I have attached a picture of main gist of the idea. A Rack window with several tabs. A simple tab could be a Prophet 1, SH101, 1 drum machine, an algorithmic cv generator for song length tracks. Etc. etc.
Intra tab communication could then be done via a "patchbay module". I have added a simple example in black and red just as a simple example. The patchbay could also just be a "1U" band between the row as seen in some hardware cases. But a patch module that is not part of the core would probably be more flexible.
The tab and patchbay would also be a good interface for racks running on different computeres, if that is something that happens in the future. it could perhaps even be a CPU core per tab to make that possible
Perhaps a tabbed interface would even use less GPU as only one tab at a time need to be drawn.

If I read this correctly, you're essentially treating a tab like a skiff of modules? I do like the idea of virtual skiffs of modules that one can import and export at will, pre-patched, and ready to insert into a Rack by simply connecting cv/clock and audio cables. A skiff with one or more MIDI-CC core modules already addressed to one of several hardware controllers, just connect the cables to a Southpole Snake and pop another one or several up in a cluster of modules and set-up time is reduced, and one can get to playing the modules in no time flat.
So when envisioning a macro module, does one just select a Macro module then open the right-click menu, and load like one would load samples into Nysthi's Simplers? Modules connected to the Macro and their settings are recalled in the physical placement and with the parameter settings when the Macro was "saved as"? Perhaps Macros might use a particular color or thickness, or texture of cable that is unique to them to, as well as distinct plug ends so as to be visible even when cables are displayed at zero opacity?
In stating that Macros may be arbitrarily deep, does this mean that more than one Macro can be "clumped" together with others? Would one then be designated the Master Macro which the configuration would be saved under? Does this also mean that perhaps by disconnecting cables between Macros, they can be separated and handled as discreet clusters to then be added to another, possibly larger cluster of Macros and connected modules? Maybe to enable the movement of multiple modules, when connected to a Macro, they all move together if the macro is moved, and moving individual modules when connected to a Macro is just for arranging their proximity to the Macro they are connected to? Perhaps to avoid mayhem, modules should only be capable of being connected to one Macro at a time. Thoughts?
Just want to note that this isn't labeled as a feature request (I found it before, was looking for it and had some trouble finding).
This would be so amazing. It would allow us to build tools that are easily reusable, and I think it could lead to people sharing/reusing small patches a lot more (it's a big workflow improvement to have something that you can easily load into an existing patch, versus having to open a file you downloaded, cut something out of it, save it with strip or whatever, then bring it into whatever you're working on).
I think integrating these macros into the browser in some way would also be really helpful; they should be able to be browsed and added like other modules.
This would also be really helpful for reducing visual clutter, having better visual organization. That's achievable other ways too, but once a patch starts getting pretty big, it can get clunky to have to scroll around so much. Another relatively simple interim solution that would help on this level would be the ability to expand/collapse certain rows (perhaps along with the ability to label and/or color code the row).
Just to encourage useful discussion:
One possible approach:
One important thing to figure out is how to manage whether Macros are a part of their parent patch's file, or whether they are their own independent file. Might be worth looking at how Max/MSP does this -- both are possible there, and it works nicely. Dealing with this definitely increases complexity, so maybe to start you just have one or the other.
Some thoughts on how it could work:
If using "Macro host" to load a file when it already has a subpatch loaded that is part of the main patch, there should be a warning about losing changes to the subpatch (and an option to save/export)?
Ability to use relative or absolute paths for pointing to files. Ability to edit these as text (not just using file system browser)
will treat any audio i/o module in the patch as the Macro I/O module
This is the problem. VCV Audio isn't a "special" module. How is Rack supposed to handle it specially? What if someone creates their own module that communicates with an audio interface or other protocol? How is Rack supposed to handle that?
Instead, I think stoermelder Strip's approach is the best direction. It allows reusable collections and purposely doesn't hide the modules, or their patch points. It cleverly avoids getting into the mess of >1 nested patches.
Let's go this direction. The final proposal might look like Strip, or completely different, but I think it should be based on it.
This is the problem. VCV Audio isn't a "special" module. How is Rack supposed to handle it specially? What if someone creates their own module that communicates with an audio interface or other protocol? How is Rack supposed to handle that?
How are you going to deal with this in the VST version? Won't the potential configurations of ins/outs in the VST version be somewhat limited (I imagine there will be a stereo instrument, a multichannel instrument, a stereo effect, and a multichannel effect)? When the VST version comes out, I would imagine people will be building a lot of standalone instruments and effects meant to as a single instrument or effect in another DAW. It would be cool if those could also easily be loaded as Macros. I would think that you could just support the standard VCV Audio modules, and throw an error if none of those (or the Macro I/O) module is found when trying to load a rack as a Macro.
Instead, I think stoermelder Strip's approach is the best direction. It allows reusable collections and purposely doesn't hide the modules, or their patch points. It cleverly avoids getting into the mess of >1 nested patches.
If done in the right way, this could probably still achieve a lot of what I would want out of this feature. One key thing, I think, is having inputs and outputs that can stay patched while what's inside the Macro changes. This would allow us to relatively quickly audition different Macros we've created in the context of a larger rack.
Personally, part of what I actually want is to be able to hide the modules and reduce the complexity of what's in front of me, so I can focus more clearly on what I'm trying to work on at the moment. I get there are also reasons for not wanting them hidden. Maybe the Macro could be collapsed / expanded. I guess that would require moving other modules around too.
How are you going to deal with this in the VST version?
There will be a new audio and MIDI driver called "Host" which will communicate with the plugin host instead of audio hardware.
Maybe the Macro could be collapsed / expanded
That's probably the best direction. Might be a Rack v3 feature.
Cool. But just as food for thought - what if there was no distinction
between “Host” and the “Macro I/o” module I described? If the module is on
the top level of a VST instance, it’s Host; otherwise, it’s macro i/o. That
would make macros and vst racks somewhat cross compatible. There would be
some macros (like things oriented towards processing cv) that wouldn’t
really work or make sense to load as vst instances. But everything created
to run as a vst instrument or effect could also work as a macro. That might
create more interaction and sharing between folks using this as a vst and
standalone. Would also make it easier to quickly move ideas back and forth
between vst and standalone.
On Sat, Nov 9, 2019 at 2:22 PM Andrew Belt notifications@github.com wrote:
How are you going to deal with this in the VST version?
There will be a new audio and MIDI driver called "Host" which will
communicate with the plugin host instead of audio hardware.Maybe the Macro could be collapsed / expanded
That's probably the best direction. Might be a Rack v3 feature.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/VCVRack/Rack/issues/655?email_source=notifications&email_token=AFJXJ2VHRPAYLB443EEZ3NDQS4S25A5CNFSM4EODFQFKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEDUPSAI#issuecomment-552139009,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AFJXJ2WONWQZ5Q3SULAXVSTQS4S25ANCNFSM4EODFQFA
.
I still think that a tabbed interface of virtual skiffs would be a good solution. No recursion in the interface. Easy sharing of tabs via files. like now. Consistent interface, that could even be made to work across ethernet via a network patchbay module. (Albeit with some lag.)
But there might be something I have missed. Any reason for it to not be a good solution?
This is the problem. VCV Audio isn't a "special" module. How is Rack supposed to handle it specially? What if someone creates their own module that communicates with an audio interface or other protocol? How is Rack supposed to handle that?
I see this as a similar problem that people face in in node based visual effects software (for example SideFX's Houdini or Foundry's Nuke).
While it's certainly possible to communicate "outside" of a nested node, a general rule is that nested nodes can only communicate to their parents.
IE in the context of VCV, if you want to make a module that communicates to an external audio source, you have to create it at the top level.
All sub-patches would only have access to a macro i/o module.
Correct me if this isn't possible, but I believe this could be achieved by tracking what "level" or "context" you're currently at:
Launch VCV Rack -
_Top Level / Root Context (The only context available as of VCV 1.0.6) - audio IO behaves as usual_
Create a Macro-Module and "dive-in" (double click? right mouse-menu?)
_Macro/Sub-Patch Context - audio IO driver can only be set to Macro-IO (maybe we do the same for midi io because it probably will have the same problem)._

_Fig 1. A simple filter subpatch with LFO as input audio and second LFO as modulation._
The idea being that internal modules all operate as usual, but you can "expose" certain I/O and/or knobs to the parent module.
If someone wants to modulate a sub patch using external audio/midi, then they just have to properly expose the internals to the Macro-IO and do the external modulation via the top level context.
Alternatively, just copy paste the modules from the internals out to the top level context and work as normal.
I think something like the Stoemelder Strip would be useful for sharing "top level" patches, but I think there still could be a use for "sub-patches" like this.
I was going to have a go at implementing something like this just to see how it could be done.
If Rack could be used as a VSTi plugin, I would use Host to use Rack as plugins for itself.
To be pedant I believe my closed request was the first mention of this request #579
Not that it matters... 😄
By the way, to audition different modules quickly, Little Utils Teleport In/Out is very useful in combination with stoermelders Strip. Using it, you just delete the 'Strip' and load a new one and don't have to connect any wires.
Simply include some 'teleport out' to act as module inputs, e.g. 'Instrument Player' or 'Midi CC', or 'FX Audio'. Then put a 'teleport in' at the end to define the output e.g. 'sound source out'.
Most helpful comment
Yes, and not only to move them as one, but also to save them as one. In my mind something like the Combinator in Propellerhead's Reason would be a possible solution. On the other hand, VCV Rack mimics hardware very closely and as far as I know, a module like Reason's Combinator doesn't exist in the Eurorack world. I don't know if Softube's Modular or Native Instrument's Reaktor Blocks do have solutions that could be applied to VCV Rack. One Suggestion might be the ability to load/save a single row in the rack. Of course this would mean that cable connections from and/or to other rows in the rack can't be saved and also can't be restored after loading. The idea behind this is to treat every row in the rack as a separate rack.