Reaper is very flexible when it comes to render options.
Still, exporting stems is a chore -
1. It usually requires a lot of pre-planning.
2. It is often impossible to do without requiring signal flow changes or compromises.
3. It's especially hard to make multiple sets of stems containing the same tracks in several unrelated stems, making sure all send FX are rendered for only the selected tracks.
4. A lot of things need to be verified or re-made before each export.
5. It often needs re-doing on every project.
Enter Stem Manager!
Stem manager allows easily creating stems by saving and recalling multiple sets of solo and mute states, running different sets of rules and actions for rendering those stems, and either adding them to the render queue or rendering them consecutively (avoiding the need to reload the project between each render operation), all in a simple interface.
For example - some stems need to be rendered from a bar-line with a certain render preset, while others from the audio start point with a different render preset.
Some render presets require making sure specific regions are selected before rendering, while others require making a specific time selection. This is easy to do in Stem Manager, as well as selecting markers for Reaper's recently added ability to render between selected markers!
There are many more render rules available, and if that's not enough - custom actions can be run before and/or after rendering.
While setting Stem Manager up is a breeze, all settings are saved with the project, so they can be a part of a project template for easy recall.
Tracks save their stem assignments as part of their "chunk" which is also included in track presets. That means that loading a track preset which is part of a stem to a new project will create that stem in the new project and assign the track to it! For example, a "guitar bus" track preset will always be a part of the "Guitars", "Playback" and "TV Mix" stem, if defined that way.
Additionally, custom actions can easily be exported to the Reaper action list to trigger behaviors from anywhere within Reaper using shortcuts (or any other remote control method Reaper supports), even when the script isn't running!
Stems can also be "mirrored" - meaning the project will reflect the stem's solo and mute states in order to audition what the stem sounds like.
This, with the addition of the custom action, makes Stem Manager a convenient solo/mute groups toggle tool as well.
There's a lot more to cover, and a video demonstrating the full capabilities will be up shortly, but before I make it I wanted to get your feedback and requests to make sure this fits the needs of most users.
In the meanwhile, almost every item in Stem Manager can be hovered and an explanation of what it does will appear in the bottom of the window.
There's also a detailed help window.
To install Stem Manager, simply add my repository's link in your ReaPack "manage repositories" page, and install!
Matrix layout, colors, progress bars... and this is your first public script ? damn !
Thanks very much! It's actually my second public script, but the first one with ReaImGui - that was a rollercoaster ride!
Quote:
Originally Posted by X-Raym
Is there a way to render directly rather than render queue ?
That could easily be accomplished but only for individual stems. Since that is what the script does by definition - it creates "mixes" from individual stems using solo/mute states, individual stems can't be rendered together as part of the same render operation.
Right now what you could do is:
- In the settings menu, under "global settings", set "after adding stems to the render queue" to "run render queue", and click save.
- Hover over the relevant stem, click the context (...) menu, and select "add to render queue"
I can see why that's a bit of a PITA if you just want to render one stem, since the project will need to be reloaded before rendering.
Do you think it will make a good addition to render immediately?
Update:
Thinking about it some more, I could just replace the render queue altogether and render the stems in sequence, but some render dialog warnings/questions might pop-up between renders, especially when there are name clashes ("This will overwrite the file xxx") and I don't think I can suppress them without overriding the "auto increase" flag, which I'm not really keen on "deciding" for the user. What do you think? I'm just not sure that the render-queue requires re-thinking. It's pretty well thought out I think.
I still believe using the render queue is a better approach for multiple stems, but perhaps adding a "render now" action for individual stems is a nice feature to have.
I'd love to get your thoughts about it.
Do you think it will make a good addition to render immediately?
I do have some advanced render scripts, like Render Items Groups or Render Sets of Overlapping Items which are used in intensive context for which I really had to find ways to not have the project to reload, so I add to use regular render.
What it does basically is just render things one by one by altering render settings (like time end and start etc) in a loop (in your case, for each stems groups), but having this in a defer loop with a "Esc" key check so that if it is pressed it will not trigger the next render.
Just a small tooltip warn about this feature so warning about this feature at topmost position is visible.
This is way more efficient than render queue. No project reload needed. Seemless integration from user side.
I do have some advanced render scripts, like Render Items Groups or Render Sets of Overlapping Items which are used in intensive context for which I really had to find ways to not have the project to reload, so I add to use regular render.
What it does basically is just render things one by one by altering render settings (like time end and start etc) in a loop (in your case, for each stems groups), but having this in a defer loop with a "Esc" key check so that if it is pressed it will not trigger the next render.
Just a small tooltip warn about this feature so warning about this feature at topmost position is visible.
Sound great!
In the meantime two other people asked me about avoiding the render queue, so apparently it's a feature people want.
I'll peek in your scripts then, and draw inspiration
Looks awesome! I'll give it a shot. Plenty of moments where my mixing process forced me into a corner and I had to setup a bunch of stuff manually for multiple render passes.
EDIT: I had to restart Reaper, now working. Sorry!
This is indeed the solution! Reaper needs to restart to reload native extensions such as ReaImGui.
I updated the script with a clearer message for when that happens, as it seems to happen to quite a lot of people.
Reminds me of Andrew Scheps Bounce Factory for PT. Only difference is that Bounce Factory costs $10 a month!
Awesome work! Very much appreciated ��
Haha I actually started working on the script before I saw Bounce Factory, and when I showed my script to someone he referred me to it.
Gotta love Scheps though
Quote:
Originally Posted by JonLinnarson
Do you have a Paypal/Patreon or other donation option?
I do! It's in the help section of the script, but here it is just in case
What it does basically is just render things one by one by altering render settings (like time end and start etc) in a loop (in your case, for each stems groups), but having this in a defer loop with a "Esc" key check so that if it is pressed it will not trigger the next render.
Just so that I'm clear - I can't see how my script can do anything (defer loop or not) while the render window is active. I can only capture input between renders.
Are you able to capture "esc" keys that are hit during render?
That's perfect! Thank you so much for making this.
I found a performance issue when you check "Select Regions before rendering". When it is ON, the Settings window becomes very laggy until you save/close the window.
I found a performance issue when you check "Select Regions before rendering". When it is ON, the Settings window becomes very laggy until you save/close the window.
I'll look into it!
The whole region/marker selection thing is a bit hacky, as Reaper does not offer a direct way for scripts to select or query what regions are selected, so I'm using an approach that I saw in some other script, which is, as I said, a bit hacky, albeit the only one there is, until Reaper devs implement a native way of doing that.
Either way - I'll see if there's a way to improve performance.
I found a performance issue when you check "Select Regions before rendering". When it is ON, the Settings window becomes very laggy until you save/close the window.
Should hopefully be better now, if you update to v0.3.2.
Please let me know if it's better on your end (I just got a mac studio so everything is so fast I can't notice any performance issues )
Just going to echo the sentiment shared by everyone else already... this is ridiculously cool and such an impressive script for an initial foray into ReaScript & ImGui. Great work!!
Should hopefully be better now, if you update to v0.3.2.
Please let me know if it's better on your end (I just got a mac studio so everything is so fast I can't notice any performance issues )
Yes, it's better now, but it is still laggy. My CPU is also pretty good (Ryzen 9 5900x), but for me, it's really noticeable.
I'm also getting a problem where my Render group settings are not being saved with the project. Every time I load it, they are completely blank.
If I close the script and open it again and the settings are not saved as well.
edit: Well, I tested with a blank project and while I still got the bug, it wasn't every time. I'm trying to discover when the bug happens and I'll let you know if I figure it out.
Yes, it's better now, but it is still laggy. My CPU is also pretty good (Ryzen 9 5900x), but for me, it's really noticeable.
I tweaked it to be a bit better hopefully (v0.3.4). I need to find a way to reproduce it, since it kinda flies over here. Let me know if that's ok now.
Quote:
Originally Posted by thommazk
edit: Well, I tested with a blank project and while I still got the bug, it wasn't every time. I'm trying to discover when the bug happens and I'll let you know if I figure it out.
I found the culprit. I didn't mark the project as "dirty" when saving settings, which means you couldn't save it (and the settings along with it) unless you changed anything else in the project which did make it dirty. So if you, say, saved settings, closed the project, open the projects - settings would be gone. If however you saved the settings, did something else, closed the project, reaper would then prompt you to save the project, which you would do, and then reopen the script - the settings will be there. That explains the seemingly random behavior.
Anyway - Also fixed in v0.3.4.
Please let me know how if it's ok now.
Quote:
Originally Posted by thommazk
If I close the script and open it again and the settings are not saved as well.
That is weird though.
I have to ask the obvious question -
Do you close the settings window with the save button or with the X at the top right? If you use the top right (or hit esc) it's like hitting "cancel" - it doesn't save the settings. This is intentional, but I might change it if you feel it is unintuitive or does not reflect what you expect the behavior to be.
I can also just remove the "x" button altogether and make the user have to select either save or cancel. Would that be better?
Ok, I think I know when the Render Groups presets are not being saved:
If I follow this exact step [1,2,3], the bug happens. I'm testing with a blank project containing 3 regions (A, B C)
[1]
-Open Stem Manager->Settings
-Select Render Preset (one that has its bounds by region areas)
-Check Select regions before rendering
-Click the button to open Region/Marker manager and select region A
-Click Capture selected regions
-Click Save
-Close the script (by terminating the instance)
|
[2]
-Open Stem Manager->Settings
-Select Render Preset (the same)
-Select a new Render Group (can be number 2)
-Check Select regions before rendering
-Click the button to open Region/Marker manager and select region B
-Click Capture selected regions
-Click Save
-Close the script (by terminating the instance)
|
[3]
-Open Stem Manager->Settings
-Select Render Preset (the same)
-Select a new Render Group (can be number 3)
-Check Select regions before rendering
-Click the button to open Region/Marker manager and select region C
-Click Capture selected regions
-Click Save
||
||
||
||
[Result] -Open settings and the presets will be gone
OR
-Close the script (by terminating the instance) and open it again to check the missing presets.
It seems to be related to when it has 3 selected regions saved, but that's just a guess.
I hope that helps!
I tweaked it to be a bit better hopefully (v0.3.4). I need to find a way to reproduce it, since it kinda flies over here. Let me know if that's ok now.
Anyway - Also fixed in v0.3.4.
Please let me know how if it's ok now.
It seems to be working now, thanks! The performance is great now. You can feel just a little delay, but nothing that ruins the experience.
Quote:
Originally Posted by odedd
That is weird though.
I have to ask the obvious question -
Do you close the settings window with the save button or with the X at the top right? If you use the top right (or hit esc) it's like hitting "cancel" - it doesn't save the settings. This is intentional, but I might change it if you feel it is unintuitive or does not reflect what you expect the behavior to be.
I can also just remove the "x" button altogether and make the user have to select either save or cancel. Would that be better?
Yes, I'm saving instead of clicking the X button.
I think that Save and Cancel only are better. You could also try to insert an Apply button, so you can save without closing the Settings window.
It did help actually. At some point the size of the settings is too big to be saved as one blob of settings (one ProjExtState key), so reaper just discards it completely. Hopefully I can figure out a way of fixing it without breaking backwards-compatibility. Let's see...
It did help actually. At some point the size of the settings is too big to be saved as one blob of settings (one ProjExtState key), so reaper just discards it completely. Hopefully I can figure out a way of fixing it without breaking backwards-compatibility. Let's see...
Wow, I'm glad that helped then!
Thanks for the support, btw. The script is beautiful and it's everything I was needing.
If you want more feedback/ideas, here are some based on my experience and needs:
When rendering with Render Immediately mode, after the first render and while waiting for the time between the next stem render, the playback is still playing. I don't know what's the purpose of this, but I'd suggest stopping any playback while waiting.
The reason is that the tail is baked at the beginning of the next render and the only way to avoid this is if the overwrite window pops up before the render actually starts.
Would be nice to have an option to not be asked when the file is gonna be overwritten. That's useful when you're going to render lots of stuff and will be away while it renders.
Would be great to select some specific stems to be rendered on Render Immediately mode. If there are no stems selected, then it'll render everything.
When rendering with Render Immediately mode, after the first render and while waiting for the time between the next stem render, the playback is still playing. I don't know what's the purpose of this, but I'd suggest stopping any playback while waiting.
The reason is that the tail is baked at the beginning of the next render and the only way to avoid this is if the overwrite window pops up before the render actually starts.
That was by design, because playing is the only way to get the reverb tails etc... to actually die down. If the playback is stopped they just "wait there" until the render starts - then they are really baked into the beginning of the next render. At least that's what I encountered in my tests with some plugins.
What I'm actually doing between renders is going to the end of the project and playing so that there's an empty space for the tails to end. Is it not what you're seeing?
Quote:
Originally Posted by thommazk
Would be nice to have an option to not be asked when the file is gonna be overwritten. That's useful when you're going to render lots of stuff and will be away while it renders.
I'm pretty sure that's out of my control.
However, if you set "auto increment" in the render preset (or if the file doesn't actually exist) it shouldn't be asking this. Can you describe in detail how exactly it happens?
Quote:
Originally Posted by thommazk
Would be great to select some specific stems to be rendered on Render Immediately mode. If there are no stems selected, then it'll render everything.
That requires a whole stem "selection" system, which doesn't currently exist. It's possible.
As a workaround in the meantime what you can do is assign those to a render group, and use one of the "render group #n" actions in the custom actions window.
I still believe using the render queue is a better approach for multiple stems, but perhaps adding a "render now" action for individual stems is a nice feature to have.
I'd love to get your thoughts about it.
Unfortunately it isn't. The render queue has a major flaw (and I think it could be easily resolved by the devs):
Every item in the render queue will reload the whole project, EVEN if that project is currently loaded.
This might not be a problem with a wav only project. But it really is with a project with many VSTis that load a huge amount of samples.
Unfortunately it isn't. The render queue has a major flaw (and I think it could be easily resolved by the devs):
Every item in the render queue will reload the whole project, EVEN if that project is currently loaded.
This might not be a problem with a wav only project. But it really is with a project with many VSTis that load a huge amount of samples.
I actually already changed it so that the default behavior is rendering in sequence rather than using the render queue (which is optional). There's also a user-defined wait time between renders to allow for canceling the operation mid-way and also let reverb tails die down, as those sometimes sneak in to the beginning of the next render (doesn't happen with all plugins, but with some).
I never minded the reloading for the render queue, as running the render queue was something I did at the end of the day or before a large break, but I get why for some workflows this isn't possible.
Anyway - you can update to the latest version to get that behavior.
Wow, thanks, that's amazing!
I'm sorry, if I did come across as moaning. Was absolutely not my intention.
I only wanted to give pointers why the render queue is a bit flawed in that regard. Thanks again!
working realky well here!
one suggestion: I use hidden tracks a lot.
can we have a setting/preference to hide hidden TCP tracks in Stem Manager too?
Or maybe that should be the default behavior?
Hey odedd!
Wow, thanks, that's amazing!
I'm sorry, if I did come across as moaning. Was absolutely not my intention.
I only wanted to give pointers why the render queue is a bit flawed in that regard. Thanks again!
working realky well here!
one suggestion: I use hidden tracks a lot.
can we have a setting/preference to hide hidden TCP tracks in Stem Manager too?
Or maybe that should be the default behavior?
Thanks!!
I'm planning on adding hidden tracks support in the coming week. Sounds like a good default behaviour to have it sync to the hidden/visible state of the TCP.
It's a little tricky with their folder depth, but it's manageable.
The Stems are processed passing through the Master Channel?
Thank you sidney!
They are rendered just as they are played, so yes.
However, you can add "SWS: Disable master FX" as a pre-render action and "SWS: Enable master FX" and voila
Great stuff! Misses some features I'd need to start using it regularly though.
A "use project folder as output directory" checkbox would save having to manually open the render window before stem rendering (if this isn't already saved in the render settings)
A "use current time selection" checkbox would be more practical for my usecases instead of manually capturing timeselections for every render group.
A way of muting FX on specific tracks would allow me to toggle group processing. I'd mainly use this for disabling my sidechaining groups.
A "use project folder as output directory" checkbox would save having to manually open the render window before stem rendering (if this isn't already saved in the render settings)
The renders will be saved in the folder defined in the render preset. The "folder" setting is just there to allow putting the stems in that render group in a subfolder within the that folder (so if you have one preset but three different render groups and you'd wish each one to render to a different folder). You don't have to fill anything there.
Quote:
Originally Posted by Netchicks
A "use current time selection" checkbox would be more practical for my usecases instead of manually capturing timeselections for every render group.
Simply don't check "make time selection" and it will use the current one.
Quote:
Originally Posted by Netchicks
A way of muting FX on specific tracks would allow me to toggle group processing. I'd mainly use this for disabling my sidechaining groups.
That's something that I can definitely consider adding.
In the meantime it is possible by adding pre render actions to:
1-select the tracks you want to disbale fx on
2-disable fx on selected tracks
and a post render action to do the opposite.
As I said - I might make it a built in feature if I can figure out a way to do it clearly, UI wise.
The renders will be saved in the folder defined in the render preset. The "folder" setting is just there to allow putting the stems in that render group in a subfolder within the that folder (so if you have one preset but three different render groups and you'd wish each one to render to a different folder). You don't have to fill anything there.
Reaper defaults to the /Reaper/Render directory when making a new project. Having to manually create a new render preset for every format for every project is exactly what I want to avoid
I (almost) always render my stems, mixes and versions in a dedicated subfolder in the given project folder, so a checkbox like I mentioned would allow me to only have a handfull of render presets that I'd use and share across projects.