I did something similar to what you’re describing for a touring show back in 2018, using QLab and Keynote. The audience loved it (and the marketing people loved it too, for reasons below). It was a great idea by one of the production team, Henri White, but unhelpfully this came to him the night before the first show, so my “solution” was a bit thrown together, and limited to what I had on hand. A bit clunky in places, but held up for 50 odd shows without falling over. Might not be helpful for your needs, but here’s a run down of what I did:
This was for a magic show that used lots of audience participation, so the premise was that if an audience member wanted to volunteer they would post a selfie to Twitter or Instagram, tagging in the show and using the hashtag #pickme. The photos then got arranged into a grid, each with a number overlayed. When we needed a volunteer, a random number generator would ‘spin’ over the top of the grid to choose someone - and then the grid would zoom in on that photo. At that point the volunteer could stand up and agree to come on stage, or we’d spin again. Over the course of the night it would gradually fill up - my max grid size was 144 selfies, which we managed to hit a few times.
https://www.dropbox.com/scl/fi/uo9yfw7w59klrzat1ty9u/Audience-selection.mov?rlkey=0xu9fee7sm9ngqiztvidg2vjr&dl=0In terms of what was going on under the surface:
I had the social pages open in a browser and would periodically check for new selfies. When one appeared I would screen grab it just using MacOS Screenshot and the marquee select (taking care to hold shift to make them square). This meant I could make their face fill the image, and also allowed for grabbing multiple people from the same photo (if it was a group selfie). So I now had a folder of square selfies. You could equally get to this point by less complicated means - like snapping photos on a phone and saving to a cloud folder.
When we were getting near to needing the next volunteer, I then ran an AppleScript via Script Editor (wasn’t brave enough to run it within QLab in case it crashed the show) which prompted me to select the JPGs I’d captured, and it would then put them into placeholders in a pre-made Keynote file. Benefits of using Keynote were that it was very easily AppleScriptable (being an Apple product!) and also I could set the size of the slide to 6000 x 3375. This meant I could zoom in on a single square and still have a reasonable resolution of the selected selfie (375x375). The placeholders had numbers pre-overlayed on them.
For the first show my Keynote template had space for 144 images. What we immediately discovered is that at the start of the show not many people had gotten the idea, so we had only 8 images on screen and they looked tiny. By show two I had made five templates: 4x2, 6x3, 8x4, 12x6 and 16x9, so I would just pick the appropriate template for how many images we had at that point.
With the place holders filled, I would then select and delete any unused slots, and export the slide as a JPG. So now I've got all the audience selfies arranged into a single file to put on screen (trying to do this with up to 144 video cues was way too much for my Mac, so hence why needing to use Keynote to flatten it down).
Back in QLab, I had a script cue to run that would prompt for the exported JPG of the selfie grid. This would assign the image to the GRID cue and then prompt for the size of the grid (to configure the zoom in cue) and the number of images (to setup the upper limit of the random number generator).
First cue would fade in the GRID, geometry set to fill the screen. This gave everyone a chance to try and spot themselves on the screen.
Second cue would run the random number generator - just a video file with alpha with the end point set to be the highest number (the number of images on the grid). There was a slight cheat here: The “spinning” number was running at 25fps with a different odd number every frame (so the even numbers were never on screen, but they’re changing so fast you can’t tell). Then a second clip would cut in to show the actual number. This was identical visually, but had a different number showing every second, so to show 101 you pause on 101 seconds (1 minute 41 seconds). Had to do it this way because you can’t set the time in frames in QLab, only decimal seconds, which doesn’t always line up very well. The actual chosen random number was of course selected instantaneously by AppleScript, the numbers changing on screen is just presentation.
Once the winner is selected, a script adjusted the geometry of a fade cue so that it would zoom in on the correct square.