VI-Stage: Video & Image Playback App for Live Shows (MIDI/OSC Compatible)

Hello everyone,

I’d like to share an app I’ve released for macOS and Windows called VI-Stage. It’s designed for displaying videos and images during live shows.

The idea came after working with the B-Beat device. I wanted something simple, easy to use, and flexible enough to synchronize with any MIDI or OSC hardware or software, such as Gig Performer.

Here’s how the app works:

EDIT: You can find the tutorial in this blog article.

Users can create songs and assign a video or image to each one.
They can then organize those songs into setlists.
Each setlist can have an idle image or video that is shown between songs. This is useful for displaying a band logo, for example, or even a looping video that plays until the next song is triggered.
After the last song, you can define another media item to be shown. This can be used for things like a thank-you screen, social media info, or any closing visual.

Songs can be triggered in several ways. VI-Stage provides commands such as Play, Stop, Select Song, and more. These commands can be mapped to MIDI messages or OSC addresses. The app also includes built-in transport controls, so it can be used on its own without any external controller.

To synchronize with Gig Performer, there are multiple options since it can send both MIDI and OSC messages easily. I’ll share some examples soon.

The app is lightweight and performs well. I’m currently using it in tribute bands alongside Gig Performer on the same computer (2020 Mac M1) without any issues, outputting Full HD video through HDMI.

There’s a free version available, limited to 5 songs per setlist, so anyone can try it.

I hope you find it useful. Feel free to ask questions or share suggestions. Any feedback is very welcome.

Just trying it :slight_smile:

Does it support Ableton Link?
For many video clips with Grand VJ you can define how long the clip is in term of bars.
So the looping of a clip is automatically set depending on the BPM.
And is it possible to address directly a clip with a MIDI message or OSC Address?

And for me a very important feature, does it support keystone?
Sometimes the beamer is not places optimal, but from the side.
In this case when the beamer itself does not support keystone, then it is needed by the software.

Ableton Link is in the todo list but just for basic play/stop transport, not for tempo sync, as this is not meant to be a VJ tool but a simpler and easier to use media player.
Right now, transport commands can be assigned to Midi Clock, that are sent by default by Ableton Live or MainStage, so it behaves kind of the same. GP doesn’t send Midi Clock with the transport button, as far as I know, so a little script is needed to send a midi CC or OSC message.
Regarding addressing a clip, here you can play a specific song by just using the CC or OSC value.
So basically a CC with 0 will play next song in the setlist, and CC with any other value will play that specific song.

No, but this is something to explore, normally we fix it in the actual projector/beamer if needed, but doing it from the app itself could be useful.

VI-Stage has been updated with some improvements:

Now it can play up to 8 Audio tracks per song, and added support for Ableton Link transport.

Thanks for the feedback.
Keep this thread updated for any news :beers:

Over the past two months, the app has evolved significantly, with several major new features:

  • Video Slots: Each song now supports up to 8 video slots, allowing you to assign videos, images, or even live camera sources. The active slot can be switched manually via MIDI or OSC, or automatically using Timelines.
  • Scores & Prompts: Every song can now include PDF scores and lyrics assigned to specific performer roles. VI-Stage can display this content directly within the app or on the companion iOS mobile app, making it easy for each performer to access the right material.
  • Timelines: Songs now support powerful automation through Timelines. You can schedule events such as MIDI and OSC messages, score and prompt synchronization, visual slot changes, and other automated actions throughout the performance.

Take a look at the website when you have a chance, and I’d love to hear your feedback or any suggestions you might have.

There is a blog on the website where I share tutorials and guides. This post explains how to sync GP with VI-Stage, allowing GP to act as the master for setlist and transport control while VI-Stage functions solely as the video player.

Played around with it a little and I like it.

One hopefully simple request… When cueing up the next song with /VI-Stage/CueSong it would be nice if it would accept a string argument and cue that song by name if it exists in the setlist. (Even better if it’s case insensitive.)

The reason is probably self explanatory, but having to keep setlists in sync sequentially in multiple apps is kind of a pain. If whatever app is serving as the master can just send the song name it makes life a bit easier.

That raises the obvious question of what to do if the requested song can’t be found in the setlist. That seems like a “user error” situation, but perhaps just play the Idle Media.

Absolutely. I also want to see a “restart” that will either play a song if it’s not playing or restart it from the beginning if it currently playing.

I think one issue is that VI-Stage kinda wants to be the master but I want (most of the time) my sheet music app (Mobile sheets) to be the master in terms of selecting the song and then GP sends out all the appropriate messages to hardware, plugins and tools such as video players.

My secondary “master” is my MIDI pedal board which (among other things) sends the message to GP to go to the next song part of song and then again GP switches everything else.

Thank you for the suggestions :folded_hands: .
When VI-Stage acts as “slave”, having to duplicate the setlist in the same order is not ideal, but there is another approach if you want a kind of “free” mode, using MIDI in this case.
Songs can be cued by the the assigned PC. So every Song can use an explicit PC:

And then, in Setlist settings, CUE mode can be set to Assigned Song PC, rather than Setlist Index:


Then the order of the setlist doesn’t matter anymore, but we still have to go to Live mode with a setlist containing all the songs you could play.
Fortunately, next update will have this little button to populate current setlist with all the Songs.

A OSC command for selecting song by that PC, or even by name doesn’t exist yet but it can be easily added, to facilitate this approach to not being locked to a setlist order.

Regarding Play behaviour, right now if the app receives a Play Command and it’s already playing, nothing happens, but an optional restart behaviour is interesting to have, so you could choose if you want the song to be restarted.
Also a OSC command for seek is already in place for next update, so seeking to 0 basically will restart the Song.

image

Thank you again for the insights, it’s challenging for an app to be flexible for these setups, while being simple enough for users that just want a playlist with some mp3 and video :grinning_face: .

Did you stealthily add the OSC command /VI-Stage/CueSongByName while I wasn’t looking?

I see that in my VI-Stage now, don’t think it was there last time I looked.

Hello Álvaro,

First of all, congratulations on VI-Stage. I’ve been following the project’s development, and I really appreciate its philosophy of being simple, intuitive, and flexible. In my opinion, that’s exactly the direction a live performance software should take.

I recently started using VI-Stage while building my live performance setup, and I’ve been genuinely impressed by how well organized the interface is and how easy it is to use.

In my setup, I’m using an M-VAVE SMC Mixer, a MIDI control surface with physical faders. It’s an affordable controller that has become a popular option for musicians and small live production teams looking for a simple and practical way to control their shows without the need for a large mixing console.

While testing VI-Stage, I came across an idea that I believe fits perfectly with the software’s philosophy.

At the moment, I can use MIDI to control functions such as Play, Stop, and song navigation, but I found myself wishing it were possible to map the physical faders directly to the individual channel faders in VI-Stage’s internal mixer (Playback, Click, Guide, and the other audio channels).

From my perspective, this wouldn’t make the software more complicated. On the contrary, it would allow users with MIDI control surfaces to interact with the software in a much more natural and intuitive way while fully preserving the simplicity that makes VI-Stage so appealing.

I’m not sure whether this is already possible, currently under development, or perhaps planned for a future release. Either way, I wanted to share my experience and this idea with you.

If this feature is ever considered, I’d be more than happy to help by testing it with my M-VAVE SMC Mixer and providing feedback during development.

I also plan to create documentation and tutorials about VI-Stage in Brazilian Portuguese, helping more musicians in Brazil discover and learn how to use the software.

Congratulations once again on the excellent work. I’m really excited to follow the future of VI-Stage and support the project however I can.

Thank you for creating such a promising tool for the live performance community. I wish you continued success with the project!

Yes, it was introduced in a recent update, with a new Cue By (Song ID / Song Index).

This simplifies a lot the “duplicated” setlist problem we talked about before.

Thank you very much for your kind words.
Audio mixer settings are stored in the settings profile but, at the moment, can’t be controlled in real time with the app interface or midi/osc.
I think it’s a good addition to the app, for the people that connect the audio interface to PA system directly, so I’ll put in the backlog for future updates.
Sneak peak for the next update that is being cooked :slight_smile: → Multiple display support.
VI-Stage will allow multiple displays (as long as your computer supports them) with the usual 8 slots for video/image/camera each.
It’s being tested carefully, this should be expected end of summer at the latest.

The On Select behaviour for each visual slot was also added, where you can choose if the slot should use the master song clock, or just restart the clip.