Need advice on setting up visual feedback for the Midiremote

I’m continuing with my project to install Sherlock 2 on a touchscreen

and i’ve set the triggers on the C-2 range (Note 0)..

Regarding Feedback (Visual Feedback): “How can I force the MIDI Remote to send the activation state of an Expression Map slot back to Sherlock (in JS) without latency?”

Regarding Page Switching: “Is it better to manage family pages (Strings, Brass, etc.) directly in the JS script or let Sherlock send MIDI channel changes?”

I only created the Sherlock in the remote MIDI only with the midi remote manager.

This means Cubase only created a JSON file and no associated JavaScript. We tried using Gemini to create this JavaScript file and include code(or even several codes) to provide visual feedback to Sherlock and when it works, will allow us to assign dynamic pages associated with tracks containing expression maps after modifying the WPF window code but nothing works because there is no feedback in the console.

Here is one of the proposed codes

Gemini told me that having initially created only a Cubase json file would make it difficult for it to link with the js.

The original 14bitMIDI Sherlock could do this by only opening certain controls related to a track, but if you added too many it became extremely slow, and it was based on the old generic remote.

As you can see, otherwise everything works perfectly with this little gif

AnimationSherlock2

And it’s this keyswitches page that I’d like to replace with one or more dynamic windows when I’m on a track containing expression maps and activated.

Unfortunately this is not possible. There is no integration between midi remote and expression maps in cubase. You can’t bind any Expression Map functions directly in the Midi Remote.

All Midi Remote scripts that control expression maps, use a work around with virtual midi ports (or other solutions), that allow the Midi Remote device to also function as a separate Midi Input device, that is included in the “All Midi Inputs”. But these work-arounds only allow one way communication, from the Midi Remote Device to Cubase.

It’s still frustrating because with 14bitMIDI’s Sherlock coupled with the old Generic Remote, it was possible to have a window and/or dynamic buttons linked to one or more specific tracks and there was even a return of the track names.

I wanted to make the switch for two reasons: Generic Remote will eventually disappear. Sherlock’s limitations regarding commands, which are virtually unlimited in the new MIDI Remote, and the fact that Sherlock was originally programmed for Cubase 10 and 11and I also sometimes experienced startup bugs.

All the new functions added up to Cubase 15 aren’t integrated into the menus, although of course, there’s always the option to add them via macros or PLEs. Shouldn’t MIDI Remote be more modern?

It’s 2026 and I don’t understand why Steinberg only designed its MIDI remote, even though it’s well-designed but admittedly very complicated, primarily for physical keyboards and not at all for touchscreens.

The new midi remote can do all the things that the Generic Remote can do.
Just not expression maps. The old Generic Remote was also never able to control expression maps either. Expression Maps are somehow their own thing that is completly cut off from all the other things in Cubase, (keycommand, PLE, Midi Logical Editor, they all can’t control Expression maps)

The new Midi Remote can work very well with touchscreens.
Getting Track Names, Colors, Mute, Solo, Quick Controls, faders etc. all that is possible in the new Midi remote, and getting Cubase to send feedback to the Remote Device is also possible (for pretty much everything, except for expression maps).

But programming the JS script isn’t easy, and the AIs are not able to really help you unless you know what you’re doing. The code example that you provided is not even close to being usable.

That being said, if you have a setup that works with the Generic Midi Remote, I would stick to that. Even though it’s a legacy system, I don’t think that Steinberg will ever remove the Generic Midi Remote. And if you expect the new Midi Remote to run more smoothly and less buggy, that’s likely not happening either, as the new Midi Remote System is infamous for being buggy and glitchy.

Thank you for your feedback. Regarding Gemini, we didn’t create a JavaScript script, just a test, as all the configuration was done using the MIDI Remote Assistant with a JSON file.

However, Gemini did create the WPF floating window for me, which allowed me to communicate with Cubase using my touchscreen.
The Sherlock plugin by Karol Obara is a great plugin, but it dates back to Cubase 10 and 11 and therefore doesn’t include the new features introduced in Cubase 12, 13, 14, and now 15.

Furthermore, I often experience startup bugs and have to close and reopen the session.

I have a huge number of macros, especially PLEs for track visibility, and back then Karol was kind enough to add 256 PLE and LE macros for me. I’m now too limited with PLEs, and being on the new MIDI remote removes all those limitations. This is one of the main reasons I wanted to migrate, but I had already tried last year and failed because I was using the wrong approach, relying on the old XML files. I started with Gemini and Visual Studio Code, the C# language, and XAML files, and frankly, I didn’t believe it would work at all at first. We launched this migration about 15 days ago, and it required a lot of patience, trial and error, and backtracking. The most difficult thing was Gemini’s volatile memory, but we finally got there.

Regarding expression maps, I can get the first 24 keys to work with the keyswitches, but it’s true that I’m far from my 128 keys with the program changes.

I am someone who is very reserved about AI, but for integrating modern tools and not for creating music, I think it is the future.

As for the new MIDI remote, let’s give it time to evolve and grow; perhaps in the near future we’ll have all the features we’re hoping for.

And regarding the feedback from Cubase to Sherlock to create dynamic pages linked to the selected tracks, is that not possible either, even with JavaScript?

For example, I open a track with keyswitches, a page opens with my 24 buttons linked to the track.

I don’t believe MIDI Remote is able to tell whether or not a track has an Expression Map but you could work around that shortcoming with some clever track naming and/or track color scheme.

Well, what we’re trying to do is all my expression map tracks have the term “KS” and each family has its own color: red for woodwinds, orange for brass, green for strings, blue for percussion, yellow for choirs, etc…

And I can’t figure out if Cubase 15 and MIDI remote can send a feedback to my Sherlock 2.

il me semble que certains y arrivent avec Mategrid Pro et/ou Touch OSC

Sending Tracknames and Colors is only possible using JS script, the editor can’t do it.

I suggest you check out these threads here:

This is how I learned how to make cubase send the name of a track and the colors of a selected track to a midi remote device, by downloading and reverse engineering all of FabioTBS projects from these two threats.

Since FabiotTBS using TouchOSC, you would have to figure out on your own, how to correctly interpret the Midi SysEx Messages that are send by Cubase, inside Sherlock2 or in what format you need to send the messages from Cubase, for Sherlock2 to interpret it correctly. I can’t help you with that since I don’t own or use Sherlock2.

Thank you very much for this feedback, I will look into this with Gemini :+1:

Thanks mate.

Very curious about projects that use my system.

I’m actually thinking of porting the TouchOSC thing to Open Stage Control (which has a little more variety, you can use SVGs etc.). Not sure when since I did the bare minimum to make it work for my own workflow… if anyone wants to help, let me know. I know somebody did it over at VI-Control.

Hi Fabio, how do you get feedback on the selected track using your touchscreen and TouchOSC? I’m using a WPF floating window and everything works except for the feedback, because the part created in Cubase’s MIDI Remote is a JSON file. We’ve tried creating the JS, but nothing works.

I have a 24" screen displaying my remote control with 20 pages of 240 buttons, ten of which are fully functional.
But I need this feedback to be able to open dynamic pages based on a track using expression maps.

What I did in my TouchOSC template (with a lot of help from @m.c who I’ll never thank enough for the pointers he gave me) is programming it so that Nuendo sends out SysEx messages that start with FP, then 4 bits of header that are for name (‘NAME’ in Hexadecimal), colour (‘COLR’), quick control 0x name (‘QC01’, ‘QC02’, etc.) and quick control value (‘QV01’, ‘QV02’, etc.).

Depending on this header, what comes after can be a string (name, QC name and QC value) or an array (colour components).

On TouchOSC there’s a Lua script that converts this into the different strings and sends them to the proper labels.

My case is a little different from yours, as I ditched on purpose anything that was real-time as mine was a… recycled hardware project (I used to work off a Samsung Galaxy Tab 2 with a custom Slim ROM to allow me some unstable upgrade to Android 8).

Things with the new, cheap-ass Chinese tablet are smoother but I haven’t tried anything real-time. The closer I got to a negligible latency was by using TouchOSC in Windows, directly on the same PC where I have Nuendo. Even there, when I rigged one of the controls to the metronome, the latency was clearly visible.

This being said.

I read in some other threads that there are a few things that mHostAccess can do and I’m wondering if this is something to investigate.

My cheap, basic solution would be to assign as you did a suffix to the track name like “KS” for example, and every time that is detected, according to the name of the track, it implies that you’re using one specific, preconfigured Expression Map.

Lots of thing can go wrong with this: you change one thing on the Expression Map, or on the track name, and it won’t work anymore. But since Expression Maps are mapped often on notes, this should work.

Feedback at this point would be just “sending notes out” to your controller.

You’re more than welcome to take apart what was in my thread. It’s a little bit old now but you’ll get the gist of it.

But you have to use JS-Script. Sending Track Names and Colors is impossible with the editor generated JSON file, that function simply doesn’t exist inside the JSON file.

Yes, programming the JS script is hard, but if you want this functionality, you need to learn it, this is not something you can hand off to the AI without understanding what is going on. The AI only has a very surface level understanding of the Cubase Remote API, and it will forget about half of the functions that are necessary.

So the steps for creating a working JS script are:

  1. Locate the JSON file that is automatically generated in the VS Code browser.
  2. Create a new Javascript file in that exact location with the exact same name as the JSON file, (except that it ends as with a .js)
  3. Delete the JSON file. (yes this means you will lose everything you did inside the editor, you now have to generate each button, fader, etc. inside with js script)
  4. Copy Paste the code from this example project Simple Device | MIDI REMOTE API into your project, and start customizing it.

Thank you for your feedback. The simplest solution if I only need to create a JS file is to delete the JSON file, but I have it backed up anyway, so I don’t really lose it.
Regarding the interface, I only need to create buttons immediately and no fader for now, so 240 buttons in total: 20 rows of 12 buttons each, plus 20 buttons for page navigation, which we had already started working on.

We agree that once the JavaScript is created, adding these buttons is done solely within the JavaScript code and not through the automatic key assignment wizard.
So far we have been using notes on channels 14-15 and 16, with ranges from 0 to 79 for the 240 buttons, and channel 13 for the 20 page change buttons.

Regarding the API, do you think I can use these options with the playground interface in the case of my application, i.e., without physical hardware?

So I need to use this part?

example test:

Gemini explained to me that I could create a variable that generates all 240 buttons at once, along with the note assignments.
For the data part, it’s better if I stick with the note that my floating window is configured this way, but what would be the point of switching to CCs?

Thank you Fabio, do you think mHostAccess is the right approach for my feedback?