It’s the same situation every year. The agency boss says:
“We need to create a Christmas greeting for our clients. Don’t spend too much time on it, client work comes first.” And every year, the greeting ends up being… fine.
This year, we decided to do it properly. We treated the Christmas greeting like a real project. A full month before Christmas, we gathered the team and generated ideas. We presented them to the agency boss: everything from traditional cards and short films to more unconventional, AI-driven concepts. One idea stood out.

Personalised Christmas greetings with a rapping Santa. One unique video for every client, made possible by AI tools. We had a winner.
But, turning that idea into reality turned out to be anything but simple.
“AI is cheap and fast,” I hear you say. Really? Let’s take a closer look.
Two Parallel Tracks
From the start, we split the work into two parallel processes:
- Story development
- Technical approach
Story Development
We started with what we believed was a great core idea: a Santa rapping about the client’s business while wishing them a Merry Christmas. A short, surprising Christmas music video.
From there, we began building a world around our rapping Santa. Instead of reindeer and a sleigh, we gave him a 1966 red Ford Mustang convertible. That decision sparked the idea of turning the video into a road trip through the Scandinavian winter landscape.
Santa would stop along the way and “spit bars”:
- On the ice
- By a campfire
- In a hot tub

The musical direction came easily. We wanted a laid back, warm, jazzy rap track, deep male vocals and a catchy, sing-along chorus.
So far, so good.
Technical Approach
Since we planned to produce over a hundred personalised versions, we quickly realised we didn’t just need a workflow. We needed a Christmas greeting machine.
A system that could orchestrate all the tools and components required to produce a finished music video. After experimenting with a wide range of AI tools and techniques, we built a custom web app for everything.


Well, almost everything, as you’ll see.
Generating music and lyrics
The first step was generating bespoke rap songs.
Suno had just released its new v5 beta model, and it sounded great. Its lyric-writing capabilities were solid, and we discovered that we could include a link to the client’s website in the prompt to make the lyrics more relevant.
Even better: Suno has an API, which meant we could automate song generation.
Then came the tricky part. At the time, there was no reliable way to:
- Enforce a specific song length
- Lock BPM
- Control structure using format tags
In the end, we chose a simpler strategy. We kept the prompt minimal and regenerated songs when needed. Since a human would review every song anyway, this didn’t add much friction.
Generating the scenes
For visuals, Midjourney is still the undisputed king of beautiful images, so we used it for character development and key frames. We also used Google’s NanoBana for alternative angles and Seedream for some starting frames.
For video generation, the best current approach is still to start from still images. Using an image as both a start and end frame gives the most control, but we were short on time and mostly used starting frames.
We also didn’t mind some AI artifacts. In fact, we wanted it to be obvious that AI was part of the process.
Some scenes were brought to life directly in Midjourney, but the heavy lifting was done by Google’s VEO3, which excels at human movement. Perfect for classic rap gestures.
By consistently using a “golden hour” prompt during both image and video generation, we achieved reasonably consistent colours across scenes. Normally, this is tricky.
Sadly, most AI video tools still output heavily compressed footage, which makes colour correction hard.
Solving Lip Sync
Lip sync was one of the biggest challenges. We realised early on that a video-to-video lip-sync tool would work best. That way, we could pre-produce a master video and later “map” different rap songs onto it.
After testing several options (Kling, Sync.so, etc.), InfiniteTalk delivered the best results.
There was just one problem: no API.
Since automation was essential, we ran InfiniteTalk in a hosted environment, Modal and created our own API interface. That worked, but each job was slow, and scaling GPU power was harder than expected.
Then panic.
Despite the documentation claiming support for 2–10 minute clips, InfiniteTalk struggled with anything longer than ~20 seconds, especially if there were scene changes.
A frantic search led us to a platform offering “InfiniteTalk as a service”, Wavespeed.
Phew.
But more quirks appeared.
InfiniteTalk sometimes added random objects to scenes that didn’t need lip sync. Our workaround was to split the video into individual scenes and only send the clips that required lip sync.
Another limitation: using Wavespeed there were a few hard-coded parameters that we couldn’t change, like the frame rate.
Our original footage was 24 fps (cinematic), but the service required 25 fps. On top of that, InfiniteTalk only supports 720p, so we changed the frame rate and resized all our clips.
Wavespeed was more expensive, but significantly faster. Worth it.
Putting it all together
Some of you may be wondering: how did you handle unpredictable song lengths with one master video?
We created a video structure framework:
- Bespoke greeting (static): 7s
- Intro (dynamic): up to 15s
- Main video (dynamic): up to 60s
- Outro (dynamic): up to 15s
- Phosworks logo (static): 7 s
One golden rule: a maximum song length of 1 minute 45 seconds. If a song exceeded that, we would regenerate it.
In the admin tool, a human marked the rap IN and OUT points. From there, the system calculated how much intro, main footage, and outro to use.
Example:
- Song length: 1:14
- Rap starts at 0:11
- Rap ends at 0:59
- Rap duration: 48s
That gave us:
- Intro: 4s
- Main video: 48s
- Outro: 8s
- Dynamic components length: 60s
Then we wrapped the company greeting and the Phoswork logo clip (7 + 7 = 14s) around this and we got a total runtime: 1:14.
We used FFmpeg to cut and assemble audio and video automatically.
Not quite done yet
The admin tool also imported a CSV file with company names to track progress and simplify lyric generation. Uploading videos to YouTube was done manually, every video needed review anyway. Emails were sent one by one, for the same reason.
And of course, we still had to write compelling email copy and create an irresistible thumbnail image.
The Result
The Christmas greeting was extremely well received.
“That’s so funny!! Thank you team Phosworks, for this very special Xmas Card!“
And that made all the effort worth it.
There is an AI for that, but only if you’re willing to put in the work. 🎄✨