AI Video Generation API for Perfume Brands — Showcase Clip Costs
A fragrance brand has a polished studio photo of its new eau de parfum — faceted glass bottle, gold collar, amber liquid catching the light — but the product page and paid social creative need short clips: a mist spraying from the atomizer, light sliding across the glass as the bottle turns, a slow push-in on the cap. Fragrance video usually means a studio, macro lenses, and careful lighting for glass, and that overhead repeats for every new scent or limited edition. Turning the existing bottle photo into a short motion clip via API answers "what does this fragrance look like in motion" without booking a shoot.
Direct answer: GenRelay's image-to-video models animate an existing perfume bottle photo into a short clip with described motion — a mist spray, a slow rotation, a light sweep across the glass — billed per second or per generation, and a 5-second clip costs between $0.05 and $0.90 depending on model and resolution.
How Much Does a Perfume Showcase Clip Cost?
Cost depends on billing model and resolution, not on how elaborate the described motion is. As of October 2026, GenRelay video pricing is: 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, $0.120/second at 1080p, and $0.180/second at 4K, and Gemini Omni Flash a flat $0.10 per generation at 720p or $0.15 at 1080p.
| Model | Billing | 5s clip cost | 8s clip cost | Best for |
|---|---|---|---|---|
| Grok Imagine 1.5 (i2v) | Per second | $0.11 | $0.176 | Animating an existing bottle photo into a rotation or mist clip |
| Grok Imagine 1.0 (t2v) | Per second | $0.05 | $0.08 | Generic mood footage from text, no source photo |
| Veo 3.1 Lite, 720p | Per second | $0.30 | $0.48 | Finer glass refraction and liquid detail |
| Veo 3.1 Lite, 1080p | Per second | $0.60 | $0.96 | Hero clips for the product page or a paid ad |
| Omni Flash, 720p | Per generation | $0.10 | $0.10 | Fixed-price clips regardless of duration |
For a bottle that needs a rotation or mist clip, Grok Imagine 1.5 is the practical default: it takes the studio photo as input and keeps the bottle shape, label, and collar consistent while generating the motion and reflections, at a fraction of Veo 3.1 Lite's per-second cost. Veo 3.1 Lite earns its price for a few hero clips where glass and liquid realism matter more than cost per clip, such as a launch-page banner.
How Do I Animate a Perfume Photo Into a Showcase Clip?
Submit the source photo with a prompt describing both the product motion and the camera movement. Image-to-video jobs are asynchronous, so the response returns a job ID to poll:
import requests
import time
API_KEY = "YOUR_KEY"
BASE = "https://genrelay.ai/v1"
with open("perfume_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": (
"A faceted glass perfume bottle slowly rotating on a "
"reflective surface, soft light sliding across the glass, "
"fine mist drifting from the atomizer, dark gradient "
"background, slow macro camera push-in."
),
"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 Scent Line?
Submit jobs concurrently and poll each one, rather than waiting on each clip before sending the next:
import concurrent.futures
variants = [
"bottle slowly rotating, light sweeping across the faceted glass",
"mist spraying from the atomizer in slow motion, dark background",
"close-up push-in on the gold collar and cap, soft reflections",
]
def submit_and_wait(prompt):
with open("perfume_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 cost $0.33 in total, for clips that show the actual bottle shipping to customers.
What Does a Full Scent-Line Launch Cost?
A fragrance house with 5 scents needing one rotation or mist clip each — 5 clips — pays $0.55 at Grok Imagine 1.5's 5-second rate. The same 5 clips on Veo 3.1 Lite at 720p cost $1.50; 2 hero scents at 1080p cost $1.20, reserved for the highest-traffic pages.
| Scope | Clips | Model | Total cost |
|---|---|---|---|
| 5 scents × 1 rotation/mist clip | 5 | Grok Imagine 1.5, 5s | $0.55 |
| Same line, higher fidelity | 5 | Veo 3.1 Lite 720p, 5s | $1.50 |
| 2 hero scents, 1080p hero clip | 2 | Veo 3.1 Lite 1080p, 5s | $1.20 |
| 5 scents, 1 clip each | 5 | Omni Flash 720p (flat) | $0.50 |
Omni Flash's flat rate fits when one representative clip per scent is enough, while per-second models earn their cost when a hero scent needs a longer clip or more elaborate motion.
FAQ
Can I generate fragrance mood footage from text only, without a product photo?
Yes. Grok Imagine 1.0 generates from a text prompt at $0.010/second, but with no source photo it can't match your exact bottle, so it suits general atmosphere footage — petals, silk, light — rather than clips of 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 docs for current per-model limits; per-second model cost scales linearly with duration.
Does the video include audio?
Veo 3.1 supports synchronized audio on some modes; see the Veo 3.1 audio API guide. 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; retry with a simplified prompt if the cause is prompt content rather than a transient server error.
Do you have a similar guide for other home and lifestyle brands?
Yes. The candle and home fragrance video guide covers flame, pour, and mist clips with the same pricing math.
See the image-to-video pipeline guide for the full async pattern, or the Veo model page for parameter docs.