Hi, i'm very new here. I found SoundFlow looking for Pro Tools solutions. It's amazing for that but I've just used the custom templates! I don't see a lot of information on uses in Reaper, but I'd like to use SoundFlow to enhance my workflow in Reaper as well. My first attempt seems very simple but I haven't figured it out. Reaper runs a bulk of it's functions from the Action list. this can be called with Actions/Show action list... Once in the action list i just want to run a command. In this case the action: "Custom: Add Volcano", to load the plugin. I can get the menu open but don't know how to select either the action name or command ID from sound flow. Any help would be much appreciated!
Linked from:
- Christian Scheuer @chrscheuer2025-01-15 18:56:57.744Z
Hi Ryan,
This code should log any Reaper command that has the text 'volcano' as part of the command name:
for (let command of Array.from(sf.app.reaper.getAllCommands().commands)) { var name = command.name; if (name.toLowerCase().includes('volcano')) { log({ commandId: command.commandId, name: command.name, sectionId: command.sectionId, }); } }
Does this show anything?
Christian Scheuer @chrscheuer2025-01-15 18:58:07.496Z
If you get a commandId through that, it should theoretically be possible to the run that command through:
sf.app.reaper.runCommand({ commandId: 12345, });
But I can't right now remember if this works well for custom commands.
Christian Scheuer @chrscheuer2025-01-15 18:58:56.931Z
It's also possible that this would work, but not sure about the "Custom: " prefix:
var commandId = sf.app.reaper.getCommandIdForNamedCommand({ commandName: 'Custom: Add Volcano', }).commandId; sf.app.reaper.runCommand({ commandId: commandId, });
- In reply tochrscheuer⬆:RRyan Franks @Ryan_Franks
Hi Christian, thank you so much for your response! Looking at these 3 options the 2nd seemed like it was the most Reapery in logic and it turns out that it was the one that I was able to to get it to work for native Reaper commands. That's awesome and thank you! I attached a few screenshots. I tried to run it initially just replacing your generic command ID with the actual command ID for my "Custom: Add Volcano" action. SF didn's like. But "Custom: Add Volcano" is something I setup in Reaper's Cycle Action Editor and is not native so it has a very different kind of commandID. In this case: "_S&M_CYCLACTION_131".
In the attached screenshots you can see that when I used a native Reaper function with command ID 41588 the script worked. when i switched to the Volcano cycle action SF didn't seem to be able to read the syntax of the commandID (not sure syntax is the right word, but it didn't like the S or was thrown off by the & symbol).
However, Reaper will call actions by the descriptions just the same as the Command IDs if that's helpful. So a script that just runs the Action named (Description) "Custom: Add Volcano", that should work too.
Lastly, and this may be a different thread, but in the last screenshot you can see that i added a custom image to the button to launch Volcano. However, I have not been able to get that to pop up on my iPad. I just have the default text "add volcano". I followed your comments from a different thread and made a 144x144 rectangle with a 138x138 rounded rectangle inside and saved as png but I'm doing something wrong.
Thanks again for your help! and sorry for the slow response. I need to check why i didn't get any notification that you responded, but i'll be refreshing today :)
Christian Scheuer @chrscheuer2025-01-16 14:24:47.789Z
It's great that you got it to work using the CommandId in numerical form.
However, Reaper will call actions by the descriptions just the same as the Command IDs if that's helpful. So a script that just runs the Action named (Description) "Custom: Add Volcano", that should work too.
Can you share the ReaScript code that would work here? SoundFlow interacts with Reaper's APIs directly under the hood, so the syntax will look different in Javascript, and you may need to go through more calls (hence why I used the name lookup example) to do the same thing.
In terms of getting your deck to show on your iPad, yes, please open up a new thread so we can investigate what the problem is.
You can see here for the best way to get us the information needed to troubleshoot:
https://soundflow.org/docs/help#help-issue- RRyan Franks @Ryan_Franks
thanks! I'd be happy to get you whatever info you need. I need a little clarification though. For this command I just used SWS Extensions to run the Cycle Action Editor.
I'm not sure how much you use Reaper, so sorry if this is info you already know: SWS is fundamental to Reaper use and extends functionality. https://www.sws-extension.org/.
in this case i used the Cycle Action Editor which allows you to create custom actions, similar to "new custom action" from the action list, but it allows for more advanced processes like including if/then logic.I chose this action as a random starting point because the underlying action is very simple. Here is a screenshot
I'm not using Reascript myself. just calling several actions that are bundled under the name Custom: Add Volcano in the action list:
40289 Item: Unselect (clear selection of) all items
_BR_FOCUS_TRACKS: Focus Tracks
CONSOLE x Volcano 3: ReaConsole Command
_BR_FOCUS_ARRANGE_WND: Focus ArrangeThis is something used to make a drop down menu at my mouse cursor for adding VSTs. I figured buttons with Logos would be even easier to use on the fly though.
My goal is to duplicate this script to call any action I want so that I can create custom actions and cycle actions and assign them to buttons/pages in SoundFlow for anything from adding FX to visibility etc.
I wasn't exactly sure how to answer regarding ReaScript.
There is a script called S&M_cycleactions.ini that stores code about the actions in the cycle action editor. I couldn't upload it here but i can paste the code if you want. That is a part of a number of scripts that factor in to SWS extensions though.If it's possible to call the actions by command ID that is great.
Looking at the code in the script editor in SF it just looked like when i changed the commandID to "_S&M_CYCLEACTION_131" SF was maybe looking for numbers only(?)hope that is useful in some way. please let me know and i'll send you whatever info you want.
Christian Scheuer @chrscheuer2025-01-16 20:43:55.557Z
Thanks for the added info, Ryan.
I am indeed very new to Reaper, so every bit of info you add is helpful.It's a while ago since I built the integration, so it's definitely possible there's missing pieces.
You're right, right now, the runCommand call in SoundFlow expects ID numbers only.My goal is to duplicate this script to call any action I want so that I can create custom actions and cycle actions and assign them to buttons/pages in SoundFlow for anything from adding FX to visibility etc.
Gotcha. I think I have some learning to do to understand exactly about Reaper's different action/command/custom action concepts and how they show up in the APIs that SF calls.
- RRyan Franks @Ryan_Franks
Thank you so much for looking into it! Reaper is so customizable, on one hand, i could see there being less call for it than something more rigid like Pro Tools, where being able to show/hide automation lanes with a button makes a huge difference.
However, SoundFlow has a really nice interface and due to the fact that if you can call actions in Reaper, you can pretty much make it do anything, it seems like it could be a great way to have a visual interface while firing commands directly. I use a hardware interface and have messed with TouchOSC a bit, but just being able to put a picture of the plugins right in front of you makes it so easy. (i fixed that problem by the way, not sure how, but it's fixed)
If there's anyway I can be of help, please let me know. I know Reaper well, I know nothing about coding. :)
- RRyan Franks @Ryan_Franks
Hi Christian, I just wanted to follow up and see if you'd had any luck or insight on the Reaper Action topic we've been discussing. Hope you have been well!
Christian Scheuer @chrscheuer2025-01-24 19:12:55.922Z
Hi Ryan,
I'm at NAMM this week, so I most likely won't have time to dive into this before after the show.
- RRyan Franks @Ryan_Franks
sounds good. no worries. just curious about it. I've been messing around with Touch OSC stuff for firing actions, which is cool, but the look and feel of soundflow is a lot nicer, so i'm excited to check that out. have fun at NAMM
Christian Scheuer @chrscheuer2025-01-25 19:33:59.255Z
Thanks Ryan! If I forget to reply next week, please feel free to ping me here.
- RRyan Franks @Ryan_Franks
Hi Christian, how was NAMM? Just wanted to follow up with you. Thanks!
- RRyan Franks @Ryan_Franks
HI @chrscheuer just wanted to follow up with you again. hope all is well!
- In reply tochrscheuer⬆:RRyan Franks @Ryan_Franks
Hi Christian, checking in again. have you had any thoughts on this?
- In reply toRyan_Franks⬆:
Christian Scheuer @chrscheuer2025-02-23 13:36:35.215Z
Hi Ryan,
I was able to run a cycle action called "CycleTest" (in the main section) like this:
var commandName = `CycleTest`; var cmd = sf.app.reaper.getAllCommands().commands.find(c => c.name === commandName); if (!cmd) throw `Command "${commandName}" was not found`; var cmdId = cmd.commandId; sf.app.reaper.runCommand({ commandId: cmdId, });
This is how it looks in the action list:
And in the Cycle Action Editor:
Christian Scheuer @chrscheuer2025-02-23 13:38:20.836Z
It appears that Reaper has many different ways of storing commands, and that the term "command id" means more than one thing, hence, why you're seeing that some functions that you'd expect to work, don't. The code I shared bypasses this and just browses all commands by their name and then gets the numerical value of the command ID, which the Reaper UI for some reason doesn't show in this case.
- SIn reply toRyan_Franks⬆:SoundFlow Bot @soundflowbot
This issue is now tracked internally by SoundFlow as SF-1555
- RIn reply toRyan_Franks⬆:Ryan Franks @Ryan_Franks
Hi @chrscheuer, is this topic dead? I've been checking back for a month now with no response. I will continue to seek solutions elsewhere, but was hoping to hear back. if nothing else, i'd love to find out a little more about what is under the hood. The command you sent me was just sf.app.reaper.runcommand with the command ID. however, i don't know how to find the root macro that is running this. it's probably beyond my understanding, but if there is a way to allow SF to read the strings that Reaper uses for all command IDs, it would open up the power of the software significantly. Some examples of command IDs I'm using: _02523ff4db1d1e4cbce9973ba09ab23, _S&M_CYCLACTION_81, _RSef72e1e5ee9cf04d1b458a17760b57aca13ef548. Those cover the most common formats i see, though the number of digits changes somewhat. Please let me know if there's something i can do to begin adding this functionality or investigating more . thank you.
Christian Scheuer @chrscheuer2025-02-23 13:25:13.344Z
Hi Ryan,
Thanks so much for your patience! I've just been slammed, and unfortunately, with Reaper, I'm the only person on the team who can help you, so in this case, I wasn't able to delegate things to our team. I will have more time this coming week.
Christian Scheuer @chrscheuer2025-02-23 13:38:38.344Z
Please see here:
- RIn reply toRyan_Franks⬆:Ryan Franks @Ryan_Franks
Thank you @chrscheuer! This is fantastic. Doing it by name is always preferred when possible, so this makes it even easier. i just tried a handful of actions and it seems to work great! I really appreciate you taking a look at this as it is opens up a lot of possibilities for me.
I ran 3 different types of actions: Cycle Action, Script and Custom Action. I am not sure why, but for custom actions, right clicking on the command name and choosing "copy action text" and pasting that text in sound flow results in soundflow getting not only the command name, but all embedded actions.
This is not a big deal and it's very easy to simply delete the extraneous text, but thought i'd let you know jus tin case someone asks about it later. Here's an image of what happened when i copied and pasted the command text for "Custom: Split Item Under Mouse at Cursor (no snapping)".Simply truncating it to this solved the issue though:
Thank you again. I'm excited to work with this!
Another question, kind of an oddball Reaper thing, but I'm curious if you have any ideas on how to do this: Reaper allows for multiple side-by-side installations for various purposes. I am just starting to use this because I've found that my key commands, window sets etc... for doing sound design and sound editing are very different from what i need for composing. In order to do this, Reaper allows "portable" installs. so i have 3 folders, my main reaper application, Reaper SFX and ReaMD which is a stripped down version i'm using to test some software i'm working on. Would there be a way to get SF to open those with button clicks. The portable installs are self-contained folders but they are not located in the application folder. they're simply sitting on my desktop.
Christian Scheuer @chrscheuer2025-02-24 11:01:54.418Z
Awesome! In terms of opening up different application instances, yes, you should be able to do this using "Launch Application" or "Open a File" actions in a macro. Please open a new thread for this if you're having issues with it :)
- RRyan Franks @Ryan_Franks
@chrscheuer Awesome! I will give it a try and start a new thread if i have issues. and thank you again. so pumped. i am starting to build my master controller, which i'll share as it goes. it's going to be very cool for handling some things that get a little overwhelming for key commands and even my hardware controller buttons. too many facets to keep straight, so having images for quick reference will make a huge difference.