Integration with Bandhelper app -> MIDI remote control for Zynthian UI


I think that GM has my vote


I planned to do both.
GM doesn’t need a directory structure. Moving files because of the selection manipulation is an over-kill. You wanted the directories to group songs, John.
I propose 2 more fields which say GM 2 bank and GM 2 program. When those are selected, the free configuration is greyed.
Fernando, we need to discuss how the information is stored in the zss.


if we have no snapshots in the root directory and a sub directory for each show and inside the Snapshots need for that show for example maybe by song name

Abstract Anarchy 3 piece
----Song 1
----Song 2
----Song 3
Abstract Anarchy 5 piece
----Song 1
----Song 2
----Song 3
Lamar Chase Band
----Song 1
----Song 2
----Song 3
Friday Jam
----EP patch
----Synt Strings patch
----B3 patch

for example.
So bank change would change between shows and program changing the patches inside the show. so to change from Lamar Chase Band to Friday Jam is done by bank change. Program Change would change inside a Show like Friday Jam from EP patch to Synt Strings patch.

also need to copy patches like song 1 in the both Abstract Anarchy sub directory could be the same but song 2 could be be different because of the band make up.


Yes John, this will be possible. You will be able to configure it as you like.
I have two architectural decisions to make.

A) where to store the information. My first proposal within the zss is not good. I) a new central config file. Json structure? II) for each snapshot a zsc like zynthian snapshot config file. Fernando, you have the insight information knowing what’s best during initialization.

B) Name of snapshot. The first thought of just renaming the file means, that we shouldn’t allow characters like / : \ et. al.
Or we use a field in the config that allows all characters and we rename the file substituting those characters with underscore.


The only other thing is midi bank change 1 goes down the list midi bank change 128 goes up the list. Program change 1 goes down to the next patch and program change 128 goes up to the previous patch.

Then I am happy. :smile:



Is this standard? Guess not.
But yes, we should have a Midi Filter configuration panel, where we can define this. Like the master midi channel, the snapshot midi conf is listening to.
Like the Hz, the pitch is changed to.
I can do that panel, but Fernando has to do the midi filter…at least the scaffold of it.


Well it is Roland standard now if it is standard GM not sure. But over the year Roland is sortof the gold standard.


Do you happen to know if the Card/Internal switches of a D50 are bank 1 and bank 128 then?


Hi guys, that’s my 2 cents:

Snapshot directory structure should fit bank/program GM structure. First level, bank/directory. Second level, snapshot files. If we do otherway, it will be confusing for most of users.

Also, directory order should match the bank order. If you want to enforce a particular order, then you can add a numerical prefix, like that:

  • 01-Abstract Anarchy 3 piece
  • 02-Abstract Anarchy 5 piece
  • 03-Lamar Chase Band
  • 04-Friday Jam

Same applies to snapshots and program order :wink:

Every snapshot should be loaded using the right combination of bank and program change messages. If you think it’s really important, we can add a custom MIDI sequence for loading a snapshot, but you always could use the default bank+program sequence. If we implement this custom sequence feature, it could be done as “MIDI routing/filtering rules” and stored in a global config file.

Regarding the up/down feature of “Roland standard”, i understand that this feature removes bank 1 and bank 128 from the list. So, first usable bank is bank 2, and last one is 127. Right?
I like this feature and can understand that it can be really convenient for some advanced users, so i would like to support it, but it should be optional to maintain compatibility with GM. We could add some configuration “flags” for controlling this kind of special features …

So … what do you think?

Kind Regards!


I think, we limit ourselves unnecessarily if we map the file structure to the midi bank/program structure.
My usecase is the following:
I like to have unlimited depth to file the snapshots…band-directory, musikstyle, songs etc.
Live i can use a pedal to change programs up.
For a gig I would change the midi settings, so that they follow the order of the gig.
Renaming the file all the time seems to be too complicated. Or even copying them around…just imagining that the desired slot is not freed up. If we keep the midi information in a separate config file, I just can delete the mapping of the previous slot…after confirmation.


The D50 has 64 patches they represented by a bank number 1-8 (bank change) and a patch number (program change) 1-8. so if you are on bank 3 patch 4 and you want bank 3 patch 5 you would just send a program change value of 5. now If you now want to go to bank 5 patch 5 you would just send a bank change value5. To switch from internal to memory card you would have to do that manually or sysex command to do that.

But we have moved on from there to things like my access Virus which has 8 banks with 126 patches in each bank but the method is the same. Roland has also standardise how to go up and down the patch list with in a bank. which also work with all plugins under Logic.

again we dont have to limit the number of banks or number of patches in a bank. So the banks could represent what ever you want. and if you have a song that us the same patch you can clone it to live in two different banks or even clone it with a new name in the same bank.

So I agree with you.



Dear @mheidt!

I understand your POV, but i really think that we should try to use an uniform criteria for this. Banks and Programs are the standard way for years. Zynthian engines use this paradigm (in some way ;-)) for organizing its presets:

  • ZynAddSubFX & FluidSynth use natively this paradigm. They understand bank and program messages.

  • LinuxSampler no, but Zynthian UI adds a “bank” layer for it.

The three engines use directory structures that (in some way) match the paradigm.

  • MOD-UI engine is a little special, of course, and banks are used for “pedalboards”. “Presets” inside a “pedalboard” are the presets of the different plugins. Currently this is a mess but i will try to fix it very soon…

  • setBfree doesn’t understand bank messages, but Zynthian UI adds a “bank” layer to separate the presets by its functionality type.

Snapshots should follow the “bank&program” paradigm too. If we use a different paradigm for snapshots, most of users will get confused in an UI that is already quite complex. No need to add more wood to the fire.

Also, if we use this paradigm, every snapshot has a MIDI command assigned by default. No need for extra configuration if you don’t need it …

Moreover … 65536 banks should be enough for everybody … ;-D

Kind Regards!


Before I fill the buttons with life:

When I change the bank and program, the file will be moved.
"+ New bank" will create a new bank…in this case 2 or 4?

You can change the bank name after creation:

or move it to a new banknumber.
A delete deletes the directory incl. the snapshots!? There is a confirmation message of course.

The numbers are 5 or with leading zeros? Could be 00003 for banks and 005 for programs instead.


Hi @mheidt!

Excelent work, my dear!! Really!! Thanks a lot for your time and effort!!
The next 2 weeks i will be really busy with the Maker Faires: Berlin and Barcelona!
After that, i will start to implement the Zynthian UI part. I want this feature working ASAP!! Yesssss!!! :sunglasses:

Regarding your questions:

I think 4 is OK. If you can rename it after, no problem.

Buff!! A simple confirmation is dangerous … perhaps it’s safer not allow to delete a bank if it contains snapshots.
Another posibility is asking to “write” a word for confirmation… but this is some “geek-way”.

I like leading zeros, but not too many. 2 or 3 are anough for banks and programs, like “003”. If somebody really needs so much banks and programs, always can tweak the source code :wink:

Anyway, default snapshot names should be the default MIDI program. Same for banks.

Also, i don’t like too much the “1-Bank1” notation … perhaps we can find something better? :innocent:

Super Regards!


This wont work as snapshots can contain multiple engines with multiple midi channels.
so maybe default to how os deal with creating new folders. Just call it New Bank and if it exists put a number at the end. and snapshot just name it snapshot with a number after for example.

New Bank
----- Snapshot 1
----- Snapshot 2
----- Snapshot 3
New Bank 1
----- Snapshot 1
----- Snapshot 2
----- Snapshot 3

It is not sex I know but then you can go in and change it to whatever you want later.
One other thing when you create a snapshot on the Zynthian it should as what bank to save it in.



I have new screenshots.

  1. New bank: I propose the next free bank, but you can choose any other number. “Bank exists already”, if the number exists. The name is Bank# initially, but you can change that name later. (see second screenshot)
  2. yes, I will only allow the deletion of empty banks
  3. I decided to use leading zeros, because otherwise the file system order doesn’t work correctly in linux. OsX is smarter with numbers in filenames.

And here a screenshot to show how a snapshot is moved:

Only existing banks are possible. I take care if the program number is used within a bank already.

Next I will prepare the MIDI-Config-Panel. As submenu of System?


And here we go: the MIDI panel

Save doesn’t work yet, because I can’t commit changes in the setenv script.
But you will take over from here, Fernando :slight_smile:

Pad Assignment

Hi @mheidt!

Here we go with the full implementation of this feature! Sorry for the delay … :wink:

I found some problems in the webconf tool:

When selecting a snapshot, the full path is shown in the “name” input field, like this:


For autogenerated snapshot names, this field should remain empty and a default “program number” should be selected, based in the first part (0001) of snapshot name. Autogenerated snapshot names are 0001, 0002 and so on, so it will work quite well for the first 128 snapshots in every bank, that should be enough for most of users.

Regarding your last posts in this thread, I think this is your vision too, but something is not working OK :wink:


Bank and snapshot dir/filenames are composed of 2 parts separated by “-”, like this:


This first part is the MIDI bank/program number and the second part is the “name” itself.

Currently, snapshot autogenerated filenames contains only the first part (001, 002, 003, …). I suggest so the same with bank dirnames. So, initially (on creation), bank “name” is also empty and the dirname is only the first part (0001, 0002, …). This will simplify bank creation from the UI and will unify the way bank/snapshot names work.

The second part of the dir/filename, the “name” itself, would be “optional” and can be edited using the webconf tool.

What do you think? :wink:



Yes, that was what I was thinking, when I implemented the webconf part.
Names are optional and zynthian-ui only displays them later. Manipulation via webconf only.

I couldn’t follow “your problem”.

What exactly is not working?