Load song by...name?

So I’m reworking my live setlist while we’ve got some quarantine-induced down-time. One thing that drives me crazy is that I really like keeping the numbers of my setlist in order - so if we add a new tune or something, and I “Reassign Program Numbers,” then all my bindings that load songs break because the numbers don’t line up anymore. It’s not a huge deal to go fix them, but I’ve put off cleaning up my setlists before because it’s a time sink.

Seems like the better solution would be to map the bindings to the song save name somehow, and then they would load regardless of what setlist number was assigned to that song, but I can’t find a way to do that?

Also, I do not grok the difference between Load by Program, Load by Index and Load WITH Program and Load WITH Index. I couldn’t find it elucidated in the manual.

Any help would be appreciated.

1 Like

Hi scheater5,

I see your dilemma, a possible fix would be to have the index numbers independently sortable from the program numbers. Then you could have list orders that were different from your program number dependent bindings. As far as the difference between the Program by and Program With binding choices the Program by allows continuous controller absolute values if you use a MIDI input type of that sort

or if it is set to a no edge input it can pick an explicit program number.

The Program with binding assumes it is a momentary no edge input and defaults to that when you select it and provides a sandwich menu with the current set-list program numbers and the song they are associated with for your selection.

Maybe @brad will consider this discussion and see a helpful fix or method to help you out. I would vote for it!


Hi @scheater5,

First, to explain the difference between the bindings:

  1. Load By Program - loads the song whose program number matching the value passed from the MIDI event (eg: a program change number, or controller value)
  2. Load By Index - loads the song at the index specified by the MIDI event. eg: a program change 2 will load the second song in the set list regardless of its program number.
  3. Load With Program - same as Load By Program but the program number is specified explicitly in the binding rather than coming from the MIDI event
  4. Load With Index - same as Load By Index but the index numbers is specified explicitly in the binding rather than coming from the MIDI event.

In short there are two ways to reference a song in the set list:

  • By Program - the program number set on the song entry
  • By Index - the position of the song in the list (regardless of program number)

and there are two ways of binding:

  • “By” where the program number/index comes from the incoming MIDI event (or other binding source)
  • “With” where the program number is specified in the binding itself.

As for binding by song name, that might require some refactoring of the binding framework so might not be trivial. I’d have to look into that.

In the meantime, I think the solution is to simply not reassign the program numbers in your set list. The whole idea of the program numbers here is that they’re a unique id for a particular song. Assign the song a program number, use it in the binding and then don’t change it. Is there a reason you need to reassign them?


1 Like

Hmm…I suppose I don’t have to.

I use a very large setlist (mostly consisting of a small number of linked racks, configured in various ways) because my band doesn’t have a “set list” exactly live - the bandleader calls tunes on the fly based on the crowd. So I just have my setlist in alphabetical order and…I guess it just seemed weird to have the songs not also in numerical order. But yeah, I guess I can just not reorder them, and the numbers will just reflect when the song was added.

And thank you very much for the bindings explanation - I hadn’t even considered that someone might want to call songs by position in setlist regardless of number, but it makes a lot of sense for bands that decide the order of tunes before a show (which…is probably most bands, just not what I’m used to).

I have a similar request to @scheater5, but perhaps I’m missing some existing functionality.

Often we get a request for a song that’s not in the current set list. In these cases I usually click ‘Add Song’ and search for the song in the Songs folder. This adds the song to the end of the set list. Then I need to remember not to save the set list when I exit C4.

  1. Is there a way to dynamically load a song without modifying the existing set list?

  2. @brad, related to the above, would it be possible to add functionality to the javascript api to:

  • load a song not in the current setlist?
  • load a different setlist?

Thank you - David

1 Like

Hi @dbrendon,

Yes: File -> Open.

Also, don’t forget you can now also add songs to the set list but exclude them from preload - so you could also create a group at the end of your set list with all your other songs, mark them as exclude from pre-load and then they’ll be available like any other song, without the memory over head of loading them until used.

I’ve been reluctant to add these because I don’t want API dependant on local file system paths. What I could do is add is the ability load by filename, but where the files must reside in the songs and/or set lists folder as specified in options. I’ve logged this here.


Interesting idea, but I would have to add many songs to each set list. I will try File->Open.

Having an API method for “Load by filename” might work for me. Would it possible to have a method to return all the songs in the Songs folder (as specified in Options)? And similarly all the sets in the configured SetList folder?

I also noticed that this item is already in the suggestions list:

Ability to switch set lists via the web ui/api

Thank you!

The way i handle this (your needs may differ) is rather than make a list of just the songs to be played at a show, i make a copy of my master set list and just move all the songs for the current show to the top in order (followed by an Add Break note “End of set”). That way all the songs are available if needed, without having to open or add from another set list.

Just an idea you might consider.
– Jimbo

1 Like

Exactly the way I do it, except the songs not in the play list are selected not to load with the play list, and I arrange those extra songs on the bottom in alphabetical order. Makes it very easy when needing a song not on the playlist, which is sometimes in the hundreds. Color coding the songs can also help you get there faster. I use this method frequently.

Hi @brad,

I tried File -> Open and that works quite well for my needs. However, the only visual indication of the newly loaded song name is in the Window Title Bar (which is small and not a place I typically look). There is no indication of the currently loaded song name in the Control Bar or Status Bar or on the Stream Deck. Would it possible to to display the currently loaded song somewhere more visible?

Thank you - David

Did you try right clicking on the status bar? It gives you several options. I have mine as song title - song state.

  • Paul
1 Like

You can use the variable $(SongTitle) to display the currently loaded song name anywhere a variable can be used: in show notes, in the controller bar, status panel, stream deck button etc…

1 Like

I always have my “master setlist” pre-loaded, so I have all my songs on direct access. With systematic use of shared racks, this isn’t too strenuous on CPU or RAM - works nicely for a setlist of > 100 songs for me.

My preferred way of working is to stick with the same setlist for one band/project, and then change songs via MIDI program change from LivePrompter, so LivePrompter is my leading system I manage setlists on, with Cantabile slaved.

But for Cantabile as the lead system, I would also suggest going with @Corky’s approach of keeping all songs in the setlist, just moving the ones for the current gig to the top. Then using the setlist grid view to quickly search through the tail of the set list will let you find songs outside the sequence pretty quickly.

Generally, I use the Show Notes page for that - I always have the current song and current state displayed there (using variables, as @brad suggested) in bright and friendly type, so I know exactly where I am. You can use any type size you want, so you can make it reeeeeealllly visible :wink:




+1 for Grid View. I have a keyboard controller button for that. Also on touchscreen video monitor.