MIDI Surf: A free, customisable, web-based MIDI controller

Hi everyone, I made a browser-based MIDI controller that I thought some of you might be interested in, as I developed it for use with my OP-Z (although it works with any device). It’s available at https://midisurf.app and is totally free to use. You can even install it as an app and use it offline. If you’d like to see it in action (with an OP-Z), I made this video:

I’m planning to add lots more features, so please let me know if you have any feedback.


This is cool, additional LFOs would be nice!

1 Like

That’s definitely possible!

1 Like

You can also take a look at the iOS apps „x/y pal“ and „cc pal“ - what I missed in cc pal was an opportunity to sync the parameter animations to the internal clock/measures, so that they would stay in the rhythm of the track. x/y pal on the other hand can‘t record movements, which would be nice as well.

Another thing: Not sure if that‘s possible via midi, or only via config file manipulation, but what I miss on the op-z is presets for midi channel and cc setups that you can save and recall.


Thanks for the suggestions, I’ll look into those. I’m going to add X/Y faders later this week, syncing parameters to clock sounds cool, but is probably further away. Regarding the midi config, I think it’s only possible by changing the config file in disk mode or through the OP-Z app. It’d be great if you could save config presets on the OP-Z.


Hi everyone, I’ve just released an update for MIDI Surf that adds XY faders, customizable buttons, pitch bend and more. You can see a video of all the new things in action here:

1 Like

Looks great! Also the track really demonstrates the x/y and pitch bend very well, it becomes much more alive - One question regarding the Command feature, so with this I could basically use this to configure other devices via MIDI, such as the 0-coast, that uses external MIDI CC for changing it’s own config parameters, right? Like what MakeNoise made available in Ableton:

1 Like

Absolutely! You could set up commands, faders, xy faders, sequences to send CC MIDI messages to the 0-Coast. I don’t have an 0-Coast, but I took a look at the manual and I found this table (p. 15) of the things you can control with MIDI CC.

For example, you could make a button that toggles legato using a “Sequence” controller that sends a CC (Controller Change) message with a controller number of 118 and a value of 0 and another message that sends CC with controller 118 and a value of 127, to turn it off and on respectively.

1 Like

I played around with this a bit - First of all, the app is neat! I also got the 0-coast config working, but with caveats that are specific to the OP-Z being (ab)used as an USB to TRS MIDI interface: Since the OP-Z will only respond to hardcoded CC as specified in the manual’s incoming MIDI table, in order to send this MIDI back out on a different CC, the new CC has to be set in the MIDI settings of the OP-Z: e.g. the 0-Coast Arpeggiator can be triggered on CC 117, so on MIDISURF I used CC1 and then mapped the first encoder on the OP-Z to CC 117. It worked fine, but I will try it again with a Kenton USB MIDI interface without the OP-Z between the PC and the 0-Coast.

Also I noticed a bug: When setting up messages in the Sequence module, the MIDI Channel is then displayed incorrectly, e.g. you enter Ch 5, but in the list it will show Ch 4 (always minus one). The one you enter is the one that is used, so it’s just a list display issue.

Looking forward to the save & share functionality! I’d be happy to create an 0-coast config template, which would be useful to a lot of people, since at the moment the only other options are M4L via Ableton and PD. which is a bit more technical to set up than just opening a browser app that is ready to go.

1 Like

i also noticed when you press a Note and drag outside the area (I used the mouse), the note gets stuck. There is no way to stop it other than pressing Stop on the OP-Z. But it would be great to have a latch mode.

Thanks very much for using it, and for providing feedback, I appreciate it!

This is slightly trickier than it seems, it is actually intentional, although very confusing, so I think I’ll change it. The actual midi data for the channel is 0-F in hex (0-15), which corresponds to channel 1-16. While I was working on it, I thought it was less confusing (for me) to show the data being sent, but it’s definitely more confusing for the user, so I’ll change that.

That would be fantastic! I’m working on that functionality at the moment, so hopefully it’ll be ready in the next week or so. Once it is, if you could export it using the new feature, I’ll add a section to the GitHub repo sharing it and mention it in the demo video!

You should be able to just press the note again and the note will turn off as it sends the note off event, although it isn’t very convenient. I haven’t been able to figure out a nice way to detect this kind of thing using the browser input API. If you want an actual note latch, you can make one using a Sequence cycling between a note on and note off event.

Thanks again for using it and providing feedback!

1 Like

@RoutineDiscount I’ve added the sharing functionality to MIDI Surf, you can now share controllers through a URL like this: click to load

You should be prompted to open a import a page called OP Forums. There’s a new button in the menu that lets you share your current page as a URL. Could you try exporting your 0-Coast preset as a URL and pasting it here?

This looks like an amazing app and I’d like to try it out. Unfortunately, I can’t get my iPad Air 4th Gen w/USB-C to connect to my OP-Z with USB-C. What I mean is MIDI Surf App doesn’t see the iPad. I can connect the OP-Z to the OP-Z App, but for whatever reason, connecting the ipad directly to the op-z isn’t working.

Anyone know how to get an iPad Air 4th Gen w/USB-C talking to an OP-Z?

Hi @HionHiFi, I don’t have an iPad to test this, but there seems to be a problem with using the Webmidi API on certain Apple devices. Another person told me that they have a similar issue. I developed and tested it on Linux, Android and Windows, and they all work fine, seems that Apple didn’t implement the API. Are you using a Chrome-based browser?

Hi there, just wanted to let you know I didn’t forget about the 0-coast template, but I’m having trouble passing MIDI CCs through the OP-Z that do not correspond to the incoming MIDI CC table for the OP-Z. I enabled MIDI Echo but still not working. I could swear this worked in the past? Anyway, nothing to do with your app, but I have no other MIDI interface at the moment and this is holding me up :wink:


No worries, sounds tricky!

Install web midi app, looks like a browser because it is, from App Store, open midi surf url in web midi app and save it for offline use


Wow, thanks @vantablack! I’ll add that to the documentation.

Interesting. Okay, so it’s not me.

Yes I’m using Chrome. I’ve also installed it the way the developer did in his video. It is a link on my iOS device Home Screen which is how I launch the app.

I’ll try it out. I’ll try my Android tablet too.