AI Video Generation API for Skincare and Spa Brands

Oct 5, 2026·7 min read

A skincare brand has a clean studio photo of its new serum bottle — amber glass, dropper cap, catching the light — but the product page and a round of paid social creative call for short clips the lab can't shoot on demand: a drop of serum falling in slow motion, cream swirling into a jar, a spa room with steam rising off a warm towel. Booking a beauty videographer every time a new SKU launches costs more than most skincare brands budget for a product refresh, and a small spa or indie brand often doesn't have in-house video capacity at all. Turning the existing bottle or jar photo into a texture or ambience clip via API answers "what does this actually feel like to use" without a studio day.

Direct answer: GenRelay's image-to-video models animate an existing bottle, jar, or spa-scene photo into a short clip with described motion — a serum drop, a cream swirl, steam rising, a massage stone gliding — 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 SKU before committing to a real video shoot.

How Much Does a Skincare Product Clip Cost?

Cost depends entirely on billing model and resolution, not on how much drop or swirl 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 $0.180/second at 4K), 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 bottle or jar photo into a drop or swirl clip
Grok Imagine 1.0 (t2v) Per second $0.05 $0.08 Generating spa-ambience B-roll from a text description, no source photo
Veo 3.1 Lite, 720p Per second $0.30 $0.48 Higher-fidelity liquid and steam motion, close-up texture shots
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 serum that needs to end up as a drop-and-absorb clip, Grok Imagine 1.5 is the practical default — it takes the studio bottle photo as input and holds the glass shape and cap consistent while generating the drop, shimmer, 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 a dozen SKU-launch social clips.

How Do I Animate a Bottle or Jar Photo Into a Texture Clip?

Submit the source photo and a motion prompt describing both the product's motion 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("serum_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 single drop of amber serum falling slowly from the "
                "dropper into soft focus, light catching the glass, "
                "subtle steam in the background, 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 Product Line?

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 = [
    "serum drop falling into soft focus, light catching the glass",
    "cream swirling into an open jar, fingertip dipping in gently",
    "warm towel with steam rising, spa room ambience, soft lighting",
]

def submit_and_wait(prompt):
    with open("serum_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 bottle and jar shipping to customers.

What Does a Full Product Line Launch Cost?

A skincare brand with 5 SKUs needing 1 texture clip each — 5 clips total — at Grok Imagine 1.5's 5-second rate costs $0.55 for the full batch. Upgrading to Veo 3.1 Lite at 720p for the same 5 clips costs $1.50; at 1080p for a small set of 2 hero SKUs (2 clips) it costs $1.20, reserved for the highest-traffic product pages rather than the full line.

Scope Clips Model Total cost
5 SKUs × 1 texture clip 5 Grok Imagine 1.5, 5s $0.55
Same line, higher fidelity 5 Veo 3.1 Lite 720p, 5s $1.50
2 hero SKUs, 1080p hero clip 2 Veo 3.1 Lite 1080p, 5s $1.20
5 SKUs, 1 clip each 5 Omni Flash 720p (flat) $0.50

Omni Flash's flat per-generation rate makes sense when one representative texture clip per SKU is enough — a single "here's what it feels like" clip per product for a launch page — while per-second models earn their cost when a SKU needs a longer hero clip or more elaborate liquid or steam motion.

FAQ

Can I generate spa-ambience 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 bottle or jar to match, so it works for general spa-atmosphere 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 drop 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 bakery photography API guide for an image-side equivalent of this workflow.

Related posts

Join our DiscordAI Video Generation API for Skincare and Spa Brands — GenRelay