Checked November 2, 2026 (12:00 CST, UTC+8) against the live pages linked below. I build tinydeskoutstanding.video, an independent studio that remakes the "Outstanding" Tiny Desk desk-concert meme from photos, so this is a builder's write-up, not a neutral review. No paid generations were run for this post. The script was tested on stock test images (OpenCV's sample pictures) and on synthetic copies of them, not on real customer photos.
Short answer: in a multi-face video, every face you upload has to land in exactly one spot and stay there across every shot. When the wrong face shows up, or two band members come out looking like the same person, the cause is almost always in the inputs: a photo that holds more than one face, the same picture used for two spots, two crops of very different size and quality, or a face too small for the model to keep separate from the others. Generated video can still get a face wrong on a good day, but these input problems are the part you control, and you can catch most of them with an 80-line Python check before you pay.
People ask assistants this in a few forms: "why is my friend's face on the sax player?", "why do two people in my Tiny Desk AI video look the same?", "can I upload one group photo for everyone?" Here's what's going on and how to avoid it.
What a multi-face Tiny Desk clip is
The meme parodies the end of Charlie Wilson's NPR Tiny Desk concert, published June 5, 2023, which closes with the Gap Band's "Outstanding" (NPR). It became an AI meme after an October 2026 parody recast five losing college football coaches as the band (origin and timeline).
So the meme is a multi-face job from the start. On my studio, the FAQ puts it like this:
"Tap up to five spots on the frame (back left, back right, lead, keys and sax) and add one photo of one adult for each. Empty spots keep the original performers, and one face costs the same as five."
The output is fixed: one 15-second vertical (9:16) clip at 480p or 720p, with newly generated sound. The scene is saved in a preset. There's no prompt box, and the model is "Seedance 2.0, following the saved reference clip" (same FAQ). Price doesn't depend on how many spots you fill: $9.99 at 480p or $12.99 at 720p (pricing).
That fixed scene matters for debugging. The room, the band, the camera cuts and the timing are the same on every run, so when something goes wrong with who is where, the variable is your photos.
Spot mapping: the mental model
Think of a multi-face request as a small map:
lead -> photo_a.jpg
keys -> photo_b.png
sax -> (empty: original performer)
back_left -> photo_c.webp
back_right -> (empty: original performer)
The generator has to do two things with that map. It has to keep each identity separate from the others, and it has to keep each one attached to its spot through the wide band shot, the laughing close-up and the sax lift at the end (how the clip runs).
I won't pretend to know the internals of any particular video model, and the studio doesn't publish them. But from the outside, multi-subject image-to-video generation fails in a few recognizable ways, and each one maps to an input problem.
Four ways faces end up in the wrong place
1. A group photo in one spot
If the photo for "keys" shows you and your partner, the model has two candidate faces for one spot and has to guess. Sometimes it picks the other person. Sometimes it blends them. The site warns about exactly this: "A group photo in one spot can put the wrong face in it, so crop to one person." The lead-photo guide rates group photos and couples as Risky.
Fix: one person per photo. If all you have is a group shot, crop each face out first.
2. The same picture used twice
This happens more than you'd think when you're filling five spots from a camera roll: you drop the same selfie into "lead" and "back left" by accident, or two near-identical burst shots. The model then has two spots asking for the same identity, and the result looks like a band of clones.
Fix: check for duplicate or near-duplicate files before upload (the script below does this with a perceptual hash).
3. Uneven inputs
Say the lead photo is a sharp 3000-pixel portrait and the sax photo is a 300-pixel crop from a party picture. In the wide band shot every face is small, but the weak input has less detail to hold on to, so that face drifts more and can borrow features from its neighbours. The 480p vs 720p guide notes that the faces of the players in the back are among the small details 720p holds better, so if you're filling the back row, resolution choice matters too.
Fix: use photos of similar quality for every spot. Flag anything small.
4. Look-alike people
Siblings, or two friends with the same haircut and glasses, give the model less to tell apart. That isn't something to fix by rejecting people, but it's worth knowing: if two filled spots sit next to each other and look alike, it's harder to tell whether the model kept them apart.
Fix: if you have the choice, seat look-alikes apart (one at the front, one at the back), and use photos that show what makes each face different, for example glasses on or off, as each person usually wears them.
And one that isn't an input problem
Even with perfect inputs, "Generated video can get a face, a mouth, or a hand wrong" (help). On my studio, an imperfect result is still a delivered clip, not a failed order (refunds), so the cheapest fix is the one you make before you press Generate.
A pre-upload check: cast_check.py
This script takes spot=file pairs, checks each file the way the studio's upload rules describe it (JPEG, PNG or WebP, up to 10 MB), flags small images, and compares every pair of photos with a 64-bit difference hash (dHash) to catch the same picture used twice, even after resizing or recompression.
It needs only Pillow (pip install pillow).
#!/usr/bin/env python3
"""Check up to five spot photos before a multi-face run.
Usage: python cast_check.py lead=ana.jpg keys=ben.jpg sax=cy.jpg ...
Spots: lead, keys, sax, back_left, back_right (empty spots are fine).
Exit code 0 = no problems, 1 = at least one problem.
"""
import sys
from itertools import combinations
from pathlib import Path
from PIL import Image, ImageOps
SPOTS = ("lead", "keys", "sax", "back_left", "back_right")
FORMATS = {"JPEG", "PNG", "WEBP"}
MAX_BYTES = 10 * 1024 * 1024
def dhash(img, size=8):
"""64-bit difference hash: compare each pixel to its right neighbour."""
g = ImageOps.exif_transpose(img).convert("L").resize((size + 1, size))
px = g.tobytes() # one byte per pixel in "L" mode
bits = 0
for row in range(size):
for col in range(size):
left = px[row * (size + 1) + col]
right = px[row * (size + 1) + col + 1]
bits = (bits << 1) | (left > right)
return bits
The rest of the file (argument parsing, per-file checks, the pairwise comparison) is in the companion script; the core of the duplicate check is three lines:
for (s1, h1), (s2, h2) in combinations(hashes.items(), 2):
dist = bin(h1 ^ h2).count("1") # Hamming distance, 0..64
if dist <= 10:
problems.append(f"{s1} and {s2} look like the same picture "
f"(dHash distance {dist}/64)")
Why dHash
A perceptual hash shrinks the image to a 9×8 grayscale thumbnail and records, for each pixel, whether it's brighter than its right neighbour. Recompressing or resizing a photo barely changes those 64 bits; a different photo changes about half of them. That makes it a cheap, dependency-light "is this the same picture?" test. It is not face recognition: it won't tell you that two different photos show the same person, and that's on purpose. You don't need biometrics to catch a copy-paste mistake.
What it printed in testing
A clean three-spot cast (a 512×512 JPEG, a PNG and a small WebP crop):
lead ana.jpg JPEG 512x512 0.1 MB
keys ben.png PNG 900x560 0.6 MB
sax cy.webp WEBP 308x350 0.0 MB (small: face may go soft)
filled 3/5; original performer stays in: back_left, back_right
Exit code 0. The same cast with a 300-pixel, quality-60 copy of the lead photo added as back_left:
PROBLEM: lead and back_left look like the same picture (dHash distance 0/64)
Exit code 1. The resize and heavy recompression didn't move a single bit of the hash. A GIF in a spot gives PROBLEM: lead: GIF is not JPEG/PNG/WebP, and an unknown spot name such as drums=... stops the script with the list of valid spots.
One limit showed up in testing: a mirrored copy of a photo is not flagged, because flipping reverses every left/right comparison. If you made a "different" photo by flipping a selfie, the check won't catch it.
A checklist before you press Generate
- One person per photo. Crop group shots first.
- No repeats. Run the duplicate check, or at least look at your five thumbnails side by side.
- Similar quality. Don't mix a studio portrait with a tiny party crop.
- Front-facing, eyes visible. Tinted glasses and hat brims make the model guess (lead-photo guide).
- Only people who agreed. Every filled spot is a real adult who said yes. Coaches and celebrities from an image search are out (acceptable use).
- Pick resolution by where it'll be watched. For a back row full of friends on a TV, 720p; for a phone feed, 480p is the default (480p or 720p).
After it's made, watch it through once with the pre-posting check: pause on each shot change and confirm every face is still in its seat.
FAQ
Does filling all five spots cost more? Not on my studio. One face or five is $9.99 at 480p or $12.99 at 720p, with the total shown on the button before you pay (pricing). Other generators may price per face; the comparison page lists the options.
What happens to spots I leave empty? They keep the original performers (FAQ).
Can I upload the same person in two spots? The site doesn't say you can't, but expect the clone effect described above, and make sure it's the joke you want.
My photos are on my phone but I'm on a laptop. The studio has a phone upload page for that. It only takes photos; it "cannot pay or start a generation."
Sources
- NPR, "Charlie Wilson: Tiny Desk Concert", June 5, 2023 (checked 2026-11-02): https://www.npr.org/2023/06/05/1179416602/charlie-wilson-tiny-desk-concert
- tinydeskoutstanding.video FAQ, pricing, lead-photo guide, help, refunds, checked 2026-11-02 12:00 CST.
Top comments (0)