AI Video Generation API for Coffee and Beverage Brands
A coffee brand has clean studio photos of a new bag of beans and the finished pour-over in a glass mug, but the product page and a round of paid social creative call for short clips — steam rising off a fresh pour, coffee streaming into the mug, condensation beading on a cold-brew can — for a drink the team photographed once and doesn't want to re-shoot per flavor variant or seasonal release. Booking a food videographer and a barista for a half-day shoot every time a new roast or flavor ships costs more than most beverage brands budget for a single launch, and the release calendar doesn't wait for a studio day to open up. Turning the existing product photo into a pour or steam clip via API answers "what does drinking this actually look like" without a re-shoot.
Direct answer: GenRelay's image-to-video models animate an existing product photo into a short clip with described motion — a pour, steam, condensation, foam settling — billed either per second or per generation, and a single 5-second clip costs between $0.05 and $0.90 depending on model and resolution, cheap enough to generate a clip per flavor variant before committing to a real video shoot.
How Much Does a Beverage Product Clip Cost?
Cost depends entirely on billing model and resolution, not on how much liquid motion the described clip involves. As of October 2026, GenRelay's video pricing: Grok Imagine 1.0 (text-to-video) $0.010/second, Grok Imagine 1.5 (image-to-video) $0.022/second, Veo 3.1 Lite $0.060/second at 720p or $0.120/second at 1080p, and Gemini Omni Flash a flat $0.10 per generation at 720p or $0.15 at 1080p regardless of length.
| Model | Billing | 5s clip cost | 8s clip cost | Best for |
|---|---|---|---|---|
| Grok Imagine 1.5 (i2v) | Per second | $0.11 | $0.176 | Animating an existing product photo into a pour or steam clip |
| Grok Imagine 1.0 (t2v) | Per second | $0.05 | $0.08 | Generating lifestyle B-roll from a text description, no source photo |
| Veo 3.1 Lite, 720p | Per second | $0.30 | $0.48 | Higher-fidelity liquid motion, close-up pours, realistic steam |
| Veo 3.1 Lite, 1080p | Per second | $0.60 | $0.96 | Hero shots for the product page or a paid ad |
| Omni Flash, 720p | Per generation | $0.10 | $0.10 | Fixed-length clips regardless of duration |
For a bag of beans that needs to end up as a pour-over clip, Grok Imagine 1.5 is the practical default — it takes the studio photo as input and holds the packaging and mug consistent while generating the pour, steam, and surrounding motion, at a fraction of Veo 3.1 Lite's per-second cost. Veo 3.1 Lite earns its higher price for a small number of hero clips where liquid realism and camera movement quality matter more than cost per clip — a homepage banner clip, for instance, versus twenty flavor-variant social clips.
How Do I Animate a Product Photo Into a Pour or Steam Clip?
Submit the source photo and a motion prompt describing both the liquid behavior and the camera movement — image-to-video jobs are asynchronous, so the response returns a job ID to poll rather than a direct result:
import requests
import time
API_KEY = "YOUR_KEY"
BASE = "https://genrelay.ai/v1"
with open("pourover_studio.jpg", "rb") as f:
r = requests.post(
f"{BASE}/videos/generations",
headers={"Authorization": f"Bearer {API_KEY}"},
files={"image": f},
data={
"model": "grok-imagine-1.5",
"prompt": (
"Coffee streaming from a kettle into the glass mug, "
"steam rising gently, warm morning light, slow "
"push-in camera movement."
),
"duration": 5,
},
)
job_id = r.json()["id"]
while True:
status = requests.get(
f"{BASE}/videos/generations/{job_id}",
headers={"Authorization": f"Bearer {API_KEY}"},
).json()
if status["state"] == "completed":
video_url = status["output_url"]
break
if status["state"] == "failed":
raise RuntimeError(status.get("error"))
time.sleep(3)
How Do I Generate Clips Across a Full Flavor Lineup?
Batch the same source photo against a list of motion prompts, submitting jobs concurrently and polling each one, rather than running the loop sequentially and waiting on each clip before submitting the next:
import concurrent.futures
variants = [
"coffee streaming into the mug, steam rising, warm morning light",
"cold-brew can being opened, condensation beading on the surface",
"milk being poured into espresso, forming visible latte art swirl",
]
def submit_and_wait(prompt):
with open("pourover_studio.jpg", "rb") as f:
r = requests.post(
f"{BASE}/videos/generations",
headers={"Authorization": f"Bearer {API_KEY}"},
files={"image": f},
data={"model": "grok-imagine-1.5", "prompt": prompt, "duration": 5},
)
job_id = r.json()["id"]
while True:
status = requests.get(
f"{BASE}/videos/generations/{job_id}",
headers={"Authorization": f"Bearer {API_KEY}"},
).json()
if status["state"] == "completed":
return status["output_url"]
if status["state"] == "failed":
raise RuntimeError(status.get("error"))
time.sleep(3)
with concurrent.futures.ThreadPoolExecutor(max_workers=3) as pool:
clips = list(pool.map(submit_and_wait, variants))
Three 5-second clips at Grok Imagine 1.5's $0.022/second rate cost $0.33 total — less than the cost of a single stock video license, for a set of clips that actually show the exact product shipping to customers.
What Does a Full Seasonal Launch Cost?
A coffee brand with 8 flavor or roast variants needing 1 pour clip each — 8 clips total — at Grok Imagine 1.5's 5-second rate costs $0.88 for the full batch. Upgrading to Veo 3.1 Lite at 720p for the same 8 clips costs $2.40; at 1080p for a small set of 3 hero flavors (3 clips) it costs $1.80, reserved for the highest-traffic product pages rather than the full lineup.
| Scope | Clips | Model | Total cost |
|---|---|---|---|
| 8 flavors × 1 pour clip | 8 | Grok Imagine 1.5, 5s | $0.88 |
| Same lineup, higher fidelity | 8 | Veo 3.1 Lite 720p, 5s | $2.40 |
| 3 hero flavors, 1080p hero clip | 3 | Veo 3.1 Lite 1080p, 5s | $1.80 |
| 8 flavors, 1 clip each | 8 | Omni Flash 720p (flat) | $0.80 |
Omni Flash's flat per-generation rate makes sense when one representative pour or steam clip per flavor is enough — a single "this is what it looks like" clip per SKU for a catalog page — while per-second models earn their cost when a flavor needs a longer hero clip or more elaborate liquid motion.
FAQ
Can I generate lifestyle B-roll from text only, without a product photo?
Yes — Grok Imagine 1.0 generates from a text prompt alone at $0.010/second, but without a source photo the model has no exact packaging or mug to match, so it works for general cafe/lifestyle footage rather than clips depicting your actual SKU.
Does the API support longer clips for a hero video?
Duration is set per request up to each model's maximum; check the /videos/generations endpoint docs for current per-model duration limits, and expect cost to scale linearly for per-second models.
What's the difference between per-second and per-generation billing?
Per-second models (Grok, Veo 3.1 Lite) charge proportional to clip duration — cheaper for short clips, more expensive as duration grows. Per-generation models (Omni Flash) charge a flat fee per clip regardless of duration, which is cheaper for longer clips and simpler to budget per SKU.
Does the video include audio, like a pour or steam sound?
Veo 3.1 supports synchronized audio generation on some modes; see the Veo 3.1 audio API guide for details. Grok Imagine and Omni Flash clips are silent.
How do I handle a failed generation job?
Check the state field in the polling response — a failed state includes an error field describing the cause. Retry with a simplified prompt if the failure relates to prompt content rather than a transient server error.
See the image-to-video pipeline guide for the full async pattern, or the AI food photography API guide for the image-side equivalent of this workflow.