Video Lab · character design and lip-sync

Meet the cast: building ten AI hosts with consistent faces and matched ElevenLabs voices

Rated G

How the Video Lab's ten fictional AI hosts were made: three reference images each, a dossier written from them, one wardrobe anchor and a fixed ElevenLabs voice. Then what holds when LTX 2.5 animates them.

Listen

Narrated by Daisy Lane (AI voice, ElevenLabs)

Transcript

Approximate read-along: sentence timing is estimated from the audio length.

Hi, it's Daisy. This one's about all of us: the ten AI hosts you'll meet across the Video Lab. Before anything else, the important part. None of us is a real person. Our faces come from an image model, our voices come from ElevenLabs, and our biographies were written for us. Every dossier says that in writing. So, who's here? Me, the lead host. Priya, co-host and anchor. Sloane, the skeptic. Ama, the builder. Lucía, the field reporter. Marcus on the news desk. Theo, the explainer. Rafa, the hardware guy. Omar, creator strategy. And Tobi, the rookie. Five women, five men, twenty-one to twenty-nine. Here's how we got made. Pictures came first. Each of us has three images. A front portrait on plain grey with the mouth closed, which is the one for lip-sync. A three-quarter view on the same grey. And an on-set still in the dark studio with the orange lights, which is where every video of us starts. Thirty images, made with the Codex built-in image tool. The prompts, the seeds and the model version weren't written down, so I can't tell you those. And if you look closely, my three-quarter view barely turns. It's almost a second front portrait. Oops. Then the writing. Each dossier was written from the images, so the continuity notes describe what's actually in the frame. Eye color. Freckles. Which side Priya's beauty mark is on, and a note not to mirror it. Then everything you can't see was invented on purpose: hometowns, heights, apartment floor plans, a car with exactly one scuff on the bumper. Somewhere between forty-five hundred and fifty-four hundred words per host, with eight rules each that never change. Now the trick that does the most work. Every host has an anchor: one piece of clothing and one accessory that show up in all three images. Mine is the white top with the pink L E J and a little gold flower necklace. Sloane's is the black glasses and the charcoal turtleneck. Tobi's is the mustard hoodie and white headphones. A face is subtle. An anchor isn't. So when a frame looks a little off, the anchor is the first thing you check. Voices. I'm the only premade one, Jessica, from the ElevenLabs library. The other nine were designed from a short written description with ElevenLabs Voice Design. Three previews each, the first one saved. Then every voice gets fixed settings that never change. Similarity is point seven five for everyone. Style goes up with personality: Tobi's the highest, Marcus the lowest. We measured the ten intros. They all land within less than one L U of each other in loudness, so nobody jumps out when we cut between hosts. Pace is where personality shows. Omar talks fastest, about a hundred and ninety words a minute. I'm the slowest, at a hundred and fifty-five. Which, honestly, surprised me. And the speech recognizer heard Rafa's name as "Hafa". His voice was designed with a light Brazilian Portuguese accent, and that's how Portuguese says it. So the accent made it through. Then the real test. Each of us got one still, one line of audio and the same video model, LTX two point five, and we checked the last frame against the first. Here's what held. Every anchor, in every frame we sampled, across all fourteen clips. My letters read L E J in all forty frames. Sloane's glasses, Ama's headphones, Marcus's watch, Tobi's hoodie: all still there, and the camera never moved. The faces mostly held too. Lucía, Theo, Rafa and Omar stay themselves from the first frame to the last. Sloane does too, apart from some raised eyebrows at the end. The drift is in expressions. I raise my eyebrows a lot, with forehead lines that aren't in any of my pictures. Marcus gets very wide-eyed. Priya turns her head and, for about a second, reads like someone else, then she's back. And Tobi drifted the most. By the end of a three-and-a-half-second line, his face reads wider and the smile isn't quite his. One more honest thing. My lip-sync is loose at the pauses. My mouth is open on the words, which is good, but it closed at only about one pause in four. Mostly I'm smiling with my teeth showing, which is very me, but it misses the lab's own bar. Speed, because Rafa would ask. Fourteen clips, about a hundred and fifteen seconds of video, in thirty-three minutes on one Spark. That's fifteen to nineteen seconds of compute for every second of us. So here's the recipe, if you want your own cast. Make the pictures first, three views, with the anchor in every one. Write the dossier from the pictures, not the other way round. Give every voice fixed settings and never touch them per line. Then animate from the on-set still, and check the anchor before you check anything else. Every reference image, every voice setting and every strip is on the page. We're all AI, we're all fictional, and we'll all be back. No rules, just vibes... and benchmarks.

The short film, 'Roll call' (63 s): all ten AI hosts say their own opening line, cut from the intro audio the cast build made, animated from each host's on-set still by LTX 2.5 image+audio-to-video. Every host is a fictional AI character. Lip-sync on these short lines was not scored against the lab's pause gate. Music: ElevenLabs Music, AI-generated.
The instructional (275 s): Daisy Lane (AI host, AI voice) walks through the reference set, the dossiers, the wardrobe anchor, the voices and what held once the cast was animated. On camera: LTX 2.5 image+audio-to-video from her on-set still. Lip-sync is loose at pauses: her mouth closed at about 5 to 7 of 23. Music: ElevenLabs Music, AI-generated.
Meet the cast: ten AI hostsClick a host to see their three reference images, their role and voice settings, and hear their opening line. Every host is a fictional AI character: generated face, generated voice.

Verdict

A cast of AI hosts stays consistent when the pictures come first and every shot carries the same big, simple anchor. That means three reference images per host, a dossier written from them, one garment plus one accessory in every image, and a voice with fixed settings. Animated from a single still with LTX 2.5, all ten hosts kept their anchors in every sampled frame that had picture, and most kept their faces. The drift is in expressions (raised brows, wide eyes, one head turn). Tobi drifted most, and lip-sync is loose at pauses.

Credits and settings

WorkflowA recurring cast of AI hosts: reference images, dossiers, ElevenLabs voices, LTX 2.5 lip-sync
MakerOpenAI (reference images, via Codex); ElevenLabs (voices); Lightricks (LTX 2.5)
Versioncast.json v1 (2026-11-02 04:40 ET); ElevenLabs eleven_v4 TTS + Voice Design eleven_ttv_v3; LTX 2.5 22B distilled int8 convrot image+audio-to-video
What it doescharacter design and lip-sync
LicenseImages: OpenAI image generation via Codex (OpenAI terms of use); voices: ElevenLabs; animation: LTX-2 Community License
HardwareDGX Spark: NVIDIA GB10, ARM (aarch64), 128 GB unified memory. ComfyUI 0.43.0, PyTorch 2.11.0+cu130, int8 LTX 2.5 transformer and text encoder. One GPU job at a time under a queue lock.
Tested onNov 2, 2026
AI hosts

Daisy Lane (AI host; AI voice)

Narration
Daisy Lane (AI voice, ElevenLabs)
Music source
Not supplied

What it does well

  • The anchor (one garment plus one accessory, in all three references) survived animation in every sampled frame with picture, all 14 clips (111 of 112 strip cells; the last is past the end of a clip), including Daisy's text: LEJ correct in 40 of 40 frames
  • Writing the dossier from the images gives continuity notes that describe what's actually in the frame (eye colour, freckles, which side a beauty mark is on)
  • Ten voices, one loudness: the intros measure -16.80 to -17.65 LUFS, within 0.85 LU of each other, so cuts between hosts don't jump
  • Voice Design from a one-paragraph description kept the accents: speech recognition heard Rafael's name the Brazilian Portuguese way ('Hafa')
  • Four of ten faces (Lucía, Theo, Rafael, Omar) stayed on-model from first to last frame of their roll-call line with no notable expression drift; Sloane stayed on-model apart from raised brows
  • Cheap to animate: 14.8 to 19.0 s of compute per second of 1280x704 video on one DGX Spark

Where it breaks

  • Expressions drift past the references: raised brows with forehead creases (Daisy, Sloane), wide eyes (Marcus)
  • A head turn can briefly read as another person (Priya at about 1.7 s)
  • Tobi drifted most: by 3.3 s, in a clip with 3.4 s of picture, his face reads wider and his smile differs from the reference
  • Lip-sync at pauses: Daisy's mouth closed at only about 5 to 7 of 23 pauses on eleven_v3, below the lab's 4-of-6 gate
  • Daisy's three-quarter reference barely turns, so it teaches a model little about her profile
  • How the reference images were made (prompts, seeds, model version) and who wrote the dossiers is not recorded
  • Speech recognition misspells designed accents ('Duarchi', 'Hafa'): use the script's words with the recognizer's timing for captions

Every Video Lab post tonight is hosted by someone from this cast, so here's who they are and how they were made. Ten hosts, five women and five men, aged 21 to 29. None of them is a real person. Each one is a fictional AI character: the face comes from an image model, the voice from ElevenLabs, the biography was written for them. Every dossier says so in writing: each host is fictional and synthetic, with no real person as a likeness target.

#Host (AI)AgeRoleVoice
1Daisy Lane22Lead hostJessica (premade)
2Priya Vance27Co-host and anchorVoice Design
3Sloane Mercer29Skeptic and reviewerVoice Design
4Ama Boateng24Hands-on builderVoice Design
5Lucía Navarro26Field reporterVoice Design
6Marcus Bell29News desk anchorVoice Design
7Theo Lindqvist25ExplainerVoice Design
8Rafael Duarte27Hardware and local modelsVoice Design
9Omar Haddad26Creator strategistVoice Design
10Tobi Okoro21The rookie, comic reliefVoice Design

The film above is the roll call: each host says their own opening line, cut from the intro audio the cast build already made, and animated from a single still by LTX 2.5. The player lets you click through all thirty reference images and hear each line.

How we tested

Two halves. The build half is reporting, not testing: everything about how the cast was made comes from the files the cast build left in the cast folder (cast.json v1, last updated Nov 2 at 04:40 ET; CAST.md; a DOSSIER.md and dossier.json per host; three reference PNGs and an intro mp3 per host; three Voice Design previews for each designed voice). Where those files don't say how something was done, this post says not recorded instead of guessing.

The measured half is what I could check on the Spark tonight:

  • The intros. Integrated loudness and true peak of all ten intro mp3s (ffmpeg loudnorm analysis), and speaking pace (script words divided by the speech span from faster-whisper large-v3 word timestamps, run on the CPU).
  • The animation. One queue job (060) rendered 14 lip-synced clips with LTX 2.5 image+audio-to-video (one still plus an audio track in, a talking video out): the ten roll-call lines (seed 42) plus Daisy's four on-camera segments for the instructional, one seed each (42). Every clip starts from the host's on-set still. Each one went through bin/identity-strip (eight evenly spaced frames, first to last) and a face check against the reference still: the still, the first frame and the last frame side by side. I also stripped the four host clips other posts rendered earlier tonight (Daisy, Rafael, Sloane, Marcus), which gives a second take on four of the faces.

How a host drifts across many shots, image strength and the rest gets its own post, "Keeping an AI host on-model with reference images", coming soon to the Video Lab. This one stays on how the cast was built and whether it survives the trip into video.

Pictures first: the reference set

Each host has three images, and they came before anything else was written:

  • Portrait (<slug>-portrait.png, 1254x1254): front on, plain grey background, mouth closed. CAST.md marks this one as the image to use for lip-sync.
  • Three-quarter (<slug>-three-quarter.png, 1254x1254): the same grey, the face turned off-axis, so a model sees the shape of the nose, jaw and hair from an angle.
  • On set (<slug>-on-set.png, 1672x941): the host at a desk in the dark Video Lab studio with the orange practical lights. This is the frame every animated clip starts from.

Thirty images in total. CAST.md says they were made with the Codex built-in image tool (OpenAI image generation) on an existing ChatGPT subscription, at no per-image cost. The image model version, the prompts, seeds, the number of attempts and whether the second and third views were generated from the portrait are not recorded. The PNGs carry no embedded metadata either (I checked all thirty).

Two things you can see by looking at the set:

  1. Daisy's three-quarter view barely turns. Every other host's three-quarter is clearly off-axis; hers is close to a second front portrait. It still works as a reference, it just teaches a model less about her profile than the others' do.
  2. The on-set stills are not all the same pose. Daisy stands with her hands on the desk; the other nine sit. Sloane's still has a coffee mug on the desk. Small, but the still is the identity for every clip, so whatever is in it shows up in the video.

The dossier

Then the writing. Every dossier was written from the three reference images: each one bases its visual notes on "the supplied" portrait, three-quarter and on-set images, and five of them (Daisy, Ama, Lucía, Rafael, Theo) say outright that the images were inspected or reviewed first. Everything you can't see (height, home, car, family) was assigned on purpose and labelled as invented production canon.

Per host that comes to 4,527 to 5,425 words (DOSSIER.md, word count), in the same structure every time:

  • Backstory: hometown, family, education, how they joined LEJ, what they want, flaws and quirks, running jokes, relationships with the rest of the cast.
  • Wardrobe: eight categories, signature on-camera look first.
  • Home, vehicle and set pieces: a floor plan with a fixed orientation point, so a reverse angle never rearranges the room.
  • Continuity: height, build, hair, eye colour, skin, face, tattoos (none, for everyone, assigned), jewelry, signature items, and eight "never changes" rules.

The continuity section is the part that matters for video. It's written as instructions to whoever renders the host next, and it's specific: Priya's beauty mark is on her anatomical left and must not be mirrored; Daisy's pendant is a five-petal gold flower that sits high on the chest above the LEJ print. That's the level of detail you need when a model gives you something almost right and you have to say exactly what's wrong.

Who or what wrote the dossiers, and from which prompt, is not recorded.

The anchor: one garment, one accessory

Here's the consistency trick, and it's boring on purpose. Every host has a visual anchor in cast.json (look.anchor): one piece of clothing and one accessory, worn in all three reference images and named in the dossier as the default on-camera look.

HostAnchor
Daisy LaneWhite crop top with bold hot-pink "LEJ" across the chest, and a delicate gold pendant necklace
Priya VanceBurnt-orange blazer and small gold hoop earrings
Sloane MercerBlack rectangular glasses and the charcoal turtleneck
Ama BoatengOlive overshirt and over-ear headphones resting around her neck
Lucía NavarroDenim jacket with a small round orange enamel pin on the collar
Marcus BellNavy blazer and a slim silver watch
Theo LindqvistRound tortoiseshell glasses and the cream cable-knit sweater
Rafael DuarteCharcoal henley and a black digital watch
Omar HaddadOlive bomber jacket and a thin silver chain
Tobi OkoroMustard-yellow hoodie and white over-ear headphones

Why it helps: a face is subtle, an anchor isn't. When a frame looks a little off, the anchor is the first thing to check because it's big, it has a colour, and it's in every reference. Daisy's anchor is the hardest one in the cast for a video model, because it's text: three hot-pink letters across her chest. It held: the letters read L-E-J in 40 of 40 sampled frames across her five clips.

The voices

One premade voice and nine designed ones, all on ElevenLabs.

  • Daisy is ElevenLabs' premade Jessica ("Playful, Bright, Warm"), voice id cgSgspJ2msm6clMCkdW9. Jon picked it.
  • The other nine were made with ElevenLabs Voice Design (eleven_ttv_v3) from a one-paragraph text description each, stored in cast.json as voice.design_prompt. Sloane's, for example: "A 29-year-old American woman with a low, calm, slightly husky voice and a neutral American accent. Measured, deadpan, dry wit, precise articulation, unhurried pace, sounds smart and a little skeptical." Each design produced three previews; CAST.md says preview 1 was saved to the account for every host and the other two are kept as alternates (voice-design-preview-*.mp3). Why preview 1 won each time is not recorded.

Then each voice gets fixed settings, used for every line that host ever says (all on eleven_v4, speaker boost on):

HostVoice idStabilitySimilarityStyle
Daisy LanecgSgspJ2msm6clMCkdW90.450.750.3
Priya VanceZMmwAMTbqjCypdiVPlId0.50.750.25
Sloane MercerPGiGTEDvl5OFrKrzcSkU0.60.750.15
Ama Boatenge36yWxaLBZmSilJEommM0.450.750.3
Lucía Navarro8kFPciV7PpPbZvLg5ocr0.50.750.2
Marcus BellTwlVrS05eywfWCFpThgp0.60.750.1
Theo LindqvistPlzxuzyui1ObKhiQ1KNR0.550.750.15
Rafael Duarteu5jpsUIFdBKesSnGamP90.50.750.2
Omar Haddad5zQl4rBlT1VRLrLTkpmj0.450.750.25
Tobi OkoroX3ID5JTg06Lt2JKpXJSq0.40.750.35

In plain terms: stability is how steady the voice stays from line to line, similarity is how closely it sticks to the source voice, and style is how much acting it adds. Similarity is 0.75 for everyone. The other two track personality: style goes up with how animated the character is (Tobi, the rookie, 0.35; Marcus, the news anchor, 0.10), and stability goes up with how controlled they are (Sloane and Marcus 0.60, Tobi 0.40). That's a sensible rule of thumb, but it's the cast build's choice; nobody A/B tested it tonight.

The intros, measured. CAST.md gives the recipe: POST /v1/text-to-speech/<voice_id> with eleven_v4 and the settings above, then ffmpeg loudnorm to I=-16. Measured on the ten files:

  • Integrated loudness (LUFS measures how loud speech sounds to a person; one LU is about the smallest difference you'd notice) -16.80 to -17.65 LUFS, true peak -1.80 to -1.94 dBTP. So they all land 0.8 to 1.65 LU quieter than the -16 target, but within 0.85 LU of each other, which is what matters when you cut from one host to the next. The exact loudnorm options used are not recorded.
  • Pace 155 to 191 words per minute. Omar is fastest (191), Priya next (187). Daisy is the slowest in the cast (155), which I didn't expect from the bubbly one.
  • Intro length 18.8 s (Priya) to 24.0 s (Daisy).

One fun one from the Whisper pass: on Rafael's intro it heard "Rafael Duarchi" and "Hafa" for "Rafa". His design prompt asks for a light Brazilian Portuguese accent, and that's how Brazilian Portuguese says those sounds (an initial R like an H, a final "-te" like "chee"). So the accent made it through the design. It also means captions built from speech recognition will misspell his name; use the script's spelling with the recognizer's timing, which is what the roll call does.

What holds up once they move

Fourteen clips, all LTX 2.5 image+audio-to-video from the on-set still, checked two ways: bin/identity-strip (eight frames from first to last, full frame) for the anchors, and a face crop of the reference still next to the clip's first, middle and last frames.

The anchors held everywhere. In all 14 clips, every sampled strip frame with picture in it (111 of 112; Tobi's last cell falls just past the end of his 3.4 s of video) still has the anchor: Daisy's letters, Priya's blazer, Sloane's glasses, Ama's headphones, Lucía's denim jacket, Marcus's watch, Theo's glasses and sweater, Rafael's henley, Omar's chain, Tobi's hoodie and headphones. The desk, background and camera position didn't move either.

Faces mostly held. Expressions are where it drifts. Frame 0 is the still, so every clip starts on-model. By the middle and the end:

  • Lucía, Theo, Rafael and Omar stay on-model the whole way.
  • Sloane stays on-model; by the end of her line her brows are raised, with forehead creases her references don't have.
  • Daisy stays on-model, but raises her eyebrows a lot, with forehead creases that aren't in any of her references. Same in three of her four instructional segments (C1 to C3); the short outro (C4) stays smooth-browed.
  • Marcus stays himself, with wide-eyed expressions that are bigger than anything in his references.
  • Ama stays herself; her skin reads a little warmer and more saturated by the last frame.
  • Priya reads as a different face for a moment during a head turn around 1.7 s, then comes back by 3.3 s.
  • Tobi drifts the most. By 3.3 s his face reads wider and his smile isn't the one in his references. His clip has only 3.4 s of picture, so this isn't the slow drift you get over a long take.

The four host clips other posts rendered earlier tonight (Daisy, Rafael, Sloane and Marcus, 12 to 18 s each) say the same thing over a longer run, with bigger swings: the face stays recognisable, and the drift shows up as a lean toward the camera (Sloane's is the biggest: her face fills noticeably more of the frame by 14.7 s), exaggerated mouth shapes on vowels, and large expressions (wide eyes, raised brows). Sloane at 7.4 s, tilted with an open "O" mouth, is the frame least like her reference.

Lip-sync is loose at the pauses. Daisy's four on-camera segments were scored on frame sheets: her mouth is open at 32 of 33 speech points, which is good, but closed at only about 5 to 7 of 23 pauses. Most of those pauses land on a smile with teeth showing. That misses the lab's gate (closed at 4 of 6 pauses), even with eleven_v3's longer pauses, so the instructional's caption says so. The roll-call lines weren't gate-scored; they're short, with one or two pauses each.

Setup and gotchas

  • The roll-call lines are not new takes. They're cut out of the intro mp3s the cast build made, so the voice, settings and delivery are exactly the cast's. Cutting at Whisper's word end times clipped the last syllable: Whisper's ends run early, and the last quarter second of those first cuts still had speech in it. Cutting inside the first real pause after the last word (ffmpeg silencedetect, -35 dB, 0.12 s) fixed all ten: their last 0.12 s now peaks at -47.7 to -80.8 dB.
  • The video stream ends a little before the audio. The LTX graph rounds the length down to a third of a second (a frame-count rule), and bin/host-segments muxes the full mp3 back on, so the last fraction of a second plays over a held frame. In Daisy's 18.3 s clip from the memory post, the video stream is 18.04 s and the audio 18.32 s. It's invisible in an edit, but a strip tool asked for "the last frame" at the audio's length gets a black cell.
  • identity-strip's default centre crop cuts off standing hosts. It keeps the centre 60% of the frame. For the nine seated hosts that's the face; for Daisy, who stands, it's her chin and the LEJ letters. Use --crop 1.0 for her, or crop the face yourself.
  • Hand the grid player audio carefully. Remotion's <Player> creates its own shared <audio> tags, so a plain document.querySelector("audio") finds one of those, not yours. The CastGrid player tags its own element.

Settings

  • Cast: cast.json v1 (2026-11-02T04:40). Images: Codex built-in image tool (model version not recorded). Portrait and three-quarter 1254x1254 PNG, on-set 1672x941 PNG.
  • Voices: ElevenLabs eleven_v4 text-to-speech at the settings in the table above; Voice Design eleven_ttv_v3 for nine of ten. The instructional's voice-over was rendered tonight with bin/tts.py --cast daisy-lane at her cast settings (with-timestamps endpoint, loudnorm I=-16). Her four on-camera lines are the exception: eleven_v3 with "..." written at the pauses, stability 0.5, style 0, because v3 leaves longer pauses for the mouth to close on (the lab's interim host-line rule; v4 caps pauses around half a second). A later controlled test on Daisy (nine renders of one window) found the longer pauses don't help: her mouth closed at 6 of 51 pauses across eleven_v3, eleven_v4 and multilingual_v2. So new host lines go back to eleven_v4, and the edit cuts away from her face over long pauses instead.
  • Animation: LTX 2.5 22B distilled (int8 convrot transformer, int8 Gemma 4 12B text encoder) in ComfyUI 0.43.0, image+audio-to-video (ltx_ia2v in the lab's graph builder): the narration is encoded with the LTX audio VAE and frozen in both stages so the picture is generated to match it. 1280x704, 24 fps, two stages, image strength 1.0, seed 42, input image the host's on-set still. Prompt, filled per host from cast.json (age, then the look fields: ethnicity note, hair, wardrobe, anchor; the wardrobe and anchor overlap, so some words appear twice). Daisy's, verbatim: "An adult AI host, age 22, white woman with a light sun-kissed tan; Long honey-blonde beachy waves, loose and voluminous; White fitted crop top with the letters "LEJ" in bold hot-pink block letters across the front, high-waisted light-wash denim; White crop top with bold hot-pink "LEJ" across the chest, and a delicate gold pendant necklace. The host speaks naturally to the camera in the reference setting, with subtle head movement, natural blinking, small conversational gestures and accurate lip movement. Preserve the reference face, clothing and background. Locked camera, consistent soft studio lighting."
  • Edit: Remotion ShortFilm (film) and Instructional (instructional) templates, 1920x1080, 30 fps. Music: one ElevenLabs Music instrumental bed (AI-generated), loudnorm I=-18.

Speed and memory

From tests/HOSTS.tsv and the queue log for job 060 (wall time per clip, measured by the queue tool, LTX 2.5 at 1280x704, 24 fps):

  • Roll call: ten clips, 56.3 s of video, 917 s of GPU: 14.8 to 17.9 s of compute per second of video.
  • Daisy's instructional segments: four clips, 58.9 s, 1,061 s: 16.9 to 19.0 s per second.
  • The whole job: 115.2 s of video in 1,983 s of wall time (33 min), 17.2 s of compute per second overall, run back to back after another LTX host job.
  • Memory: the lowest MemAvailable the queue logged during the job was 26 GiB (that's free memory on the whole machine, which has 128 GB of unified memory, not this job's peak).
  • Everything else is cheap. The ten roll-call lines cost no TTS at all (cut from existing audio). Word timing for the cuts: faster-whisper large-v3 on the CPU. Building the cast itself (30 images, 9 voice designs, 10 intros) cost the cast build nothing per image on the ChatGPT subscription plus ElevenLabs credits; the exact credit count is not recorded.

Licenses

  • Reference images: made with OpenAI's image generation through Codex. OpenAI's terms of use say that, as between you and OpenAI, you own the output; check the current terms before reusing anything. The lab's model inventory doesn't list this tool, because it isn't a local model.
  • Voices: ElevenLabs premade and Voice Design voices on the account's paid plan.
  • Animation: LTX 2.5 is under the LTX-2 Community License (free for organisations under $10M a year in revenue).
  • No FLUX.2 dev, MiniMax or research-only output appears anywhere in this post.