AI Video Generation API for Professional Headshots and Team Pages
A company refreshing its "About" and team pages has a full set of professional headshots from last quarter's photo day, and the design team wants each team member's photo to animate with a subtle motion — a slight head turn, a blink, a settling smile — instead of sitting static next to a name and title. Booking a videographer for a short intro clip of every employee on the roster costs far more than the original headshot session, and most of that budget would go toward a few seconds of barely-there motion rather than anything scripted or spoken. Turning the existing headshot set into short motion clips via API answers the "what would this cost per employee" question before scheduling anything.
Direct answer: GenRelay's image-to-video models animate an existing headshot into a short silent motion clip, billed either per second or per generation, and a 3-second subtle-motion clip costs between $0.03 and $0.36 depending on the model and resolution — low enough to generate one for every employee on a team page rather than reserving motion for leadership bios alone.
How Much Does a Single Headshot Intro Clip Cost?
A 3-second clip's cost depends entirely on which model and resolution generate it, since per-second models scale with duration while per-generation models charge a flat fee regardless of length. As of September 2026, GenRelay's video pricing: Grok Imagine 1.0 (text-to-video) $0.010/s, Grok Imagine 1.5 (image-to-video) $0.022/s, Veo 3.1 Lite $0.060/s at 720p or $0.120/s at 1080p, and Gemini Omni Flash a flat $0.10 per generation at 720p or $0.15 at 1080p.
| Model | Mode | Billing | 3s clip cost (720p) | Native audio |
|---|---|---|---|---|
| Grok Imagine 1.0 | Text-to-video | Per second | 3 × $0.010 = $0.030 | No |
| Grok Imagine 1.5 | Image-to-video | Per second | 3 × $0.022 = $0.066 | No |
| Veo 3.1 Lite | Image-to-video | Per second | 3 × $0.060 = $0.180 | Yes |
| Gemini Omni Flash | Image-to-video | Flat per generation | $0.10 (720p) | No |
For an existing headshot with no footage to work from, image-to-video is the relevant mode — it animates the person in the source photo rather than generating a face from a text description, which matters for a team page where the clip needs to visibly be the same person as the headshot next to it.
Why Does Subtle Motion Matter More Than Dramatic Motion Here?
A headshot intro clip reads as professional only when the motion is restrained — a blink, a slight head turn, a settling smile — because a wider range of motion pushes the output toward an uncanny, over-animated look that undercuts the polished tone a team or about page is going for. These are silent motion clips, not scripted speaking avatars with lip-sync — the model animates plausible idle motion from a still photo, it does not generate speech or match audio to mouth movement, so a prompt asking for the subject to "say" something will not produce reliable lip-sync.
Naming the motion explicitly and narrowly in the prompt — "subtle head turn toward camera, soft blink, no camera movement" — produces more consistent, professional-looking results than a vague "person comes to life" prompt, which gives the model too much latitude and increases the odds of an unnatural result on any given generation.
Which Model Fits Headshot Intro Clips?
Grok Imagine 1.5's lower per-second rate fits a full-roster rollout where every employee on the team page gets a clip regardless of seniority; Veo 3.1 Lite's higher fidelity is a better fit for a small set of leadership or founder clips meant for a homepage or investor deck, where the extra per-second cost buys a visibly cleaner result at a resolution worth zooming into.
Gemini Omni Flash's flat per-generation price becomes cheaper than Grok Imagine 1.5 once a clip runs past roughly 4.5 seconds at 720p, which matters less here since headshot intro clips are typically short — most of the roster fits comfortably under Grok Imagine 1.5's per-second rate before the flat-rate model becomes the better deal.
How Do I Generate an Intro Clip From a Headshot Photo?
Submit the headshot photo with a prompt describing the intended subtle motion — naming the exact motion reads better than a generic "animate this photo" prompt with no constraint on range of movement.
import requests
import time
API_KEY = "YOUR_GENRELAY_KEY"
BASE_URL = "https://genrelay.ai/v1"
def submit_job(image_url, prompt, duration=3, model="grok-imagine-1.5"):
r = requests.post(
f"{BASE_URL}/videos/generations",
headers={"Authorization": f"Bearer {API_KEY}"},
json={
"model": model,
"mode": "image-to-video",
"image_url": image_url,
"prompt": prompt,
"duration": duration,
},
timeout=30,
)
return r.json()["id"]
def poll_job(job_id, interval=5, timeout=180):
elapsed = 0
while elapsed < timeout:
r = requests.get(
f"{BASE_URL}/videos/generations/{job_id}",
headers={"Authorization": f"Bearer {API_KEY}"},
)
data = r.json()
if data["status"] in ("completed", "failed"):
return data
time.sleep(interval)
elapsed += interval
raise TimeoutError(f"job {job_id} did not finish in {timeout}s")
job_id = submit_job(
"https://cdn.example.com/team/jordan-headshot.jpg",
"Subtle head turn toward camera, soft blink, settling smile, "
"no camera movement, studio background stays still",
)
result = poll_job(job_id)
print(result.get("output_url"))
How Do I Batch a Full Team Roster?
Loop over the roster and submit each headshot as its own job, bounding concurrency with a thread pool so the batch stays under the account's rate limit — see the image-to-video pipeline guide for the async polling and error-handling pattern this scales to.
from concurrent.futures import ThreadPoolExecutor
ROSTER = [
("jordan", "https://cdn.example.com/team/jordan-headshot.jpg"),
("priya", "https://cdn.example.com/team/priya-headshot.jpg"),
("marcus", "https://cdn.example.com/team/marcus-headshot.jpg"),
]
PROMPT_TEMPLATE = (
"Subtle head turn toward camera, soft blink, settling smile, "
"no camera movement, studio background stays still"
)
def generate_and_wait(entry):
name, image_url = entry
job_id = submit_job(image_url, PROMPT_TEMPLATE)
return name, poll_job(job_id)
with ThreadPoolExecutor(max_workers=3) as pool:
results = list(pool.map(generate_and_wait, ROSTER))
for name, r in results:
print(f"{name}: {r.get('output_url')}")
What Does a Full Team Rollout Cost?
A 20-person team at 3-second clips via Grok Imagine 1.5 costs 20 × 3 × $0.022 = $1.32. Adding a hero tier of 3 leadership clips through Veo 3.1 Lite at 720p with audio adds 3 × 3 × $0.060 = $0.54. A combined rollout — full roster plus a leadership tier — totals $1.32 + $0.54 = $1.86 for a 20-person team page with motion throughout.
| Package tier | Composition | Cost |
|---|---|---|
| Full roster clips (Grok Imagine 1.5) | 20 × 3s | $1.32 |
| Leadership tier (Veo 3.1 Lite, 720p) | 3 × 3s | $0.54 |
| Combined rollout | Both above | $1.86 |
| Flat-rate alternative (Gemini Omni Flash) | 20 × $0.10 | $2.00 |
At under $2 for a 20-person team page with a leadership tier included, adding motion to every headshot costs less than a single hour of videographer time, without scheduling a shoot day around everyone's calendar. See the AI headshot generation API guide for generating the source headshots this pipeline starts from.
Internal Links
FAQ
Can these clips make a headshot appear to talk?
No — image-to-video models animate plausible idle motion like blinks and head turns from a still photo, they do not generate lip-synced speech, so a prompt asking the subject to speak will not produce reliable results.
Why keep clips to 3 seconds instead of longer?
Subtle idle motion reads as natural for a few seconds; stretched further without new motion cues in the prompt, the model either loops the same motion or drifts toward unnatural movement, so shorter clips at this cost level are the more reliable choice for team pages.
Does Veo 3.1 Lite's audio track add anything useful for a silent headshot clip?
Not for a true silent clip — audio only adds value if the use case calls for ambient sound, so most team-page rollouts skip the audio-generating model and use Grok Imagine 1.5 for the lower per-second cost.
Is per-second or per-generation billing cheaper for a large roster?
Grok Imagine 1.5 stays cheaper than Gemini Omni Flash's flat $0.10 (720p) up to roughly 4.5 seconds per clip; since headshot intro clips are typically 2-4 seconds, the per-second model usually wins for a full-roster rollout.