Install
openclaw skills install @vargai/varg-birthday-videoTurns a name, an age and a few photos into a personalized AI birthday video on varg: a song that sings their name, their photo coming to life as they blow out the candles, a "then and now" montage, an epic trailer starring them, a pet's birthday, an animated e-card or invitation. Asks the 5 questions that make it theirs, writes the lyrics and prompts, makes the stills first (GPT Image 2.5 spells the name on the cake), animates them (Wan 3, Seedance 2.5), makes the song (ElevenLabs Music sings the name), then joins and exports one file that plays on WhatsApp and iMessage. Use when someone asks for a birthday video, a happy birthday message, a birthday song with a name, a birthday surprise, a video for a friend's, partner's, mom's or dad's birthday, a milestone birthday (18, 30, 40, 50, 60, 80), a pet's birthday or a birthday invitation. Not for weddings, anniversaries and holiday greetings (use varg-occasion-video) or a business sending birthday videos to every customer (make-personalized-videos-at-scale on varg how to).
openclaw skills install @vargai/varg-birthday-videoA name, an age and one to twenty photos in; a 15–60 s video that is unmistakably theirs out: their name sung on the hook, their face (or their dog's), the details only their people know. Generic "Happy Birthday" templates are what everyone already gets; the reason to make one with an agent is that it can be about one person.
Generation runs on varg: REST https://api.varg.ai/v2 (the varg-ai skill) or the MCP server
https://mcp.varg.ai/mcp (generate_image, generate_video, generate_music, call_tool, get_job,
estimate_cost). Quote the price of every clip before it runs.
| Format | What it is | Made with | Credits (tested) | |
|---|---|---|---|---|
| A | The song with their name | An original song with the name on the chorus, over their photos or one clip | eleven_music_v2_5 + photos | ~8–10 per song |
| B | Their photo comes to life | Their photo, a cake with the name piped on it, they blow out the candles, confetti | gpt_image_2_5 still → wan_3 or seedance_2_5 | ~22 + 100 (Wan, 10 s) or 339 (Seedance, 8 s, audio) |
| C | Then and now | Baby photo to today: each photo becomes the next, the age counting up | photos → kling_v4 or seedance_2_5 first/last frames | ~80–200 per transition |
| D | The trailer of their life | An epic movie trailer starring them, title card "{NAME}: {AGE}" | face sheet → seedance_2_5 multi-shot | ~340 per 8 s shot |
| E | The pet's birthday | The dog or cat in a party hat, the cake made for dogs, a tiny party | pet photo → gpt_image_2_5 → wan_3 | ~120 |
| F | Animated card or invitation | A 3D, clay, paper pop-up or watercolor card that opens to the message | gpt_image_2_5 → wan_3, or HyperFrames for the text | ~25–120 |
Formats, the prompts that made the viral examples and their styles: references/formats.md,
references/styles.md. The song: references/song.md.
gpt_image_2_5 (it spells short words right: put the exact text in quotes and
spell it out, "the words "MAYA 30", spelled M-A-Y-A then 3-0"). With a face, pass the photo as the reference:
generate_image { prompt, reference_image } or POST /v2/image with files. Look at it at full size before
spending on video: the face, the hands, the text, no logos.POST /v2/video with files: [{url}]):
wan_3 (best value, 2–30 s) or seedance_2_5 (native sound: the breath, the cheers, the crackle). Write the
action in timed beats and say what must not change ("the letters MAYA 30 stay exactly the same").references/song.md) and transcribe it to find where the name is sung.scripts/assemble.sh (below).# key still
curl -s -X POST https://api.varg.ai/v2/image -H "Authorization: Bearer $VARG_API_KEY" -H "Content-Type: application/json" \
-d '{"model":"gpt_image_2_5","aspect_ratio":"9:16","prompt":"<still prompt>","files":[{"url":"FACE_PHOTO_URL"}]}'
# animate it
curl -s -X POST https://api.varg.ai/v2/video -H "Authorization: Bearer $VARG_API_KEY" -H "Content-Type: application/json" \
-d '{"model":"wan_3","duration":10,"aspect_ratio":"9:16","files":[{"url":"STILL_URL"}],"prompt":"<timed action>"}'
# poll: GET https://api.varg.ai/v2/jobs/<id> until status is completed, then output.outputs[0].url
bash scripts/assemble.sh -s 9.5 -k birthday.mp4 song.mp3 clip1.mp4 clip2.mp4
It scales every clip to 1080×1920 (-W 1920 -H 1080 for a TV), joins them, starts the song at the given second
(the line before the first sung name), keeps the clips' own cheers under it (-k), fades out, normalizes to
-14 LUFS and writes H.264 + AAC with faststart: the file WhatsApp, iMessage and Instagram play without
re-encoding. Cut a clip before it goes wrong with ffmpeg -i in.mp4 -t 4.6 -c:v libx264 -c:a aac cut.mp4.
varg-consistent-characters.2026-10-30, a fictional 30-year-old "Maya" (no real person): the key still on gpt_image_2_5, 9:16 (22 credits,
"MAYA 30" spelled right on the first try); seedance_2_5, 8 s, 720p, with sound, from the still (308 credits: one
breath, the candles stay out, smoke, confetti, hands to the mouth, the face steady, the cheers in the native
audio); wan_3, 10 s from the same still (100 credits: the same action, but the candles lit again at 4.8 s, so
that cut ends at 4.6 s); the song on eleven_music_v2_5, 32 s (8 credits, every line and the name sung, vocal
from 9.9 s); lyria_3_5 refused the name "Maya" and the traditional lyric but sang "Lena". Whisper transcription
5 credits. assemble.sh -s 17.8 -k put "make a wish, Maya, blow the candles out" on the blow-out (-14.3 LUFS):
https://s3.varg.ai/files/72c55813-c0fa-4cf2-9f64-ec4f7ed0e7ae/file_7e6d05077855.mp4
varg-occasion-video (weddings, anniversaries, holidays, invitations), varg-music-video (a full music video
from the song), varg-consistent-characters (the same face in every shot), hyperframes (lyric captions,
title cards, photo montages rendered from HTML), varg-ai (models and prices).