AI Perfume Photography API — Bottle and Packaging Variants

Oct 13, 2026·6 min read

A fragrance house is launching a seasonal collection of four scents in the same faceted glass bottle: only the liquid tint, the cap finish, and the label color change from one scent to the next. The studio shot exists for the first scent, but the other three are still in formulation, and the retailer's listing deadline lands before the filled samples do. Generating the remaining bottles from the one reference photo lets the listing carry a complete lineup grid while the physical samples are still being finished.

Direct answer: a reference-guided image generation API takes one perfume bottle photo as image input plus a prompt describing the target liquid color, cap finish, or label tone, and returns a new image that keeps the bottle silhouette and glass facets consistent while changing only the requested elements.

How Does an API Generate Perfume Bottle Variants From One Photo?

Reference-guided generation anchors the output to the geometry of the source image, then applies the change described in the prompt. Reference-guided generation means the model receives an existing image as input alongside the text prompt, rather than starting from text alone. For perfume, that anchoring keeps the facet pattern, shoulder curve, and cap proportions of the real bottle, where a text-only prompt would invent a generic bottle that does not match the SKU in the warehouse.

Glass is the hard part. Liquid tint, refraction through thick glass, and highlights on the facets all interact, so name them in the prompt: "pale rose liquid, thick clear glass base, soft white highlight along the left facet" gives the model something concrete, while "pink perfume" leaves the glass behavior to chance.

What Should the Prompt Say About Labels and Engraved Text?

Keep label and engraving instructions minimal, because small printed text is the most common perfume-photography failure. Text rendering at the size of a brand mark or an ingredient line is unreliable in current image models, and a warped logo on a listing photo is more damaging than a plain label would be.

Two practical rules:

  1. Ask for a blank or softly blurred label area when the variant is only meant to show liquid or cap changes.
  2. Composite the real logo and any regulatory text onto the generated image afterward, as a separate step.

Which Model Fits Perfume Photography?

Nano Banana Pro's reference-guided mode holds facet geometry and cap shape consistent across tint and finish changes, which matters when shoppers compare bottles side by side in a grid. GPT-image-2 suits instruction-based touch-ups on an image that is otherwise final, such as a background swap or a reflection cleanup.

Model Mode Resolution / price Geometry consistency Best for
Nano Banana Pro Reference-guided 1K $0.030 / 2K $0.030 / 4K $0.042 High Full scent-line sets from one base studio photo
Nano Banana 2 Reference-guided 1K $0.020 / 4K $0.036 Medium-high Lower-cost drafts for internal brand review
GPT-image-2 Instruction-based edit $0.014/image N/A (edits existing photo) Background swap or reflection cleanup on a near-final shot

For a retail-facing launch, Nano Banana Pro at 2K costs the same $0.030 as 1K, so there is no reason to submit the final set below 2K.

How Do I Generate a Bottle Variant via API?

Submit the base photo as image input with a prompt describing the target liquid, cap, and label; the endpoint returns a job ID to poll for the finished image.

import requests, time

API_KEY = "YOUR_KEY"
BASE = "https://genrelay.ai/v1"

def generate_variant(reference_url, liquid, cap):
    r = requests.post(
        f"{BASE}/images/generations",
        headers={"Authorization": f"Bearer {API_KEY}"},
        json={
            "model": "nano-banana-pro",
            "prompt": f"same faceted glass bottle shape and proportions, "
                      f"{liquid} liquid, {cap} cap, blank label area, "
                      f"soft highlight along one facet, studio product shot, "
                      f"light gradient background",
            "image": reference_url,
            "resolution": "2k",
        },
    )
    return r.json()["id"]

job_id = generate_variant(
    "https://cdn.example.com/parfum-sample.jpg",
    "pale rose",
    "brushed gold",
)

Reference-guided generation is asynchronous, so poll the job until it completes:

def wait_for_result(job_id, timeout=90):
    start = time.time()
    while time.time() - start < timeout:
        status = requests.get(
            f"{BASE}/images/generations/{job_id}",
            headers={"Authorization": f"Bearer {API_KEY}"},
        ).json()
        if status["status"] == "completed":
            return status["output_url"]
        if status["status"] == "failed":
            raise RuntimeError(status.get("error"))
        time.sleep(2)
    raise TimeoutError(f"Job {job_id} did not finish in {timeout}s")

image_url = wait_for_result(job_id)

How Do I Batch a Full Scent Collection?

Loop over the scent list and submit each as its own job. The batch image generation guide covers the concurrency and retry pattern this scales to.

scents = [
    ("pale rose", "brushed gold"),
    ("amber", "polished bronze"),
    ("clear with a faint green tint", "matte silver"),
    ("deep violet", "black lacquer"),
]

jobs = [(liquid, generate_variant(reference_url, liquid, cap))
        for liquid, cap in scents]

for liquid, job in jobs:
    print(f"{liquid}: {wait_for_result(job)}")

What Does a Full Collection Cost?

Four scents at 2K on Nano Banana Pro cost 4 × $0.030 = $0.12. A house with three bottle formats in four scents each costs 12 × $0.030 = $0.36.

Launch size Images Model Cost
One bottle, 4 scents 4 Nano Banana Pro, 2K $0.12
Three formats, 4 scents each 12 Nano Banana Pro, 2K $0.36
Internal review pass 12 Nano Banana 2, 1K $0.24

Running the internal review pass on Nano Banana 2 first keeps early color decisions inexpensive, and only the approved set moves to Nano Banana Pro. Once stills are approved, the same photos can feed the perfume showcase video guide for rotation and mist clips.

FAQ

Can the API change the liquid color without changing the bottle?
Yes. Describe the target tint and say the bottle shape and proportions stay the same; the reference image keeps the glass geometry anchored.

Will the model reproduce my logo and label text?
Not reliably at small sizes. Request a blank label area and composite the real logo and regulatory text afterward.

Can I use the output for a retail listing?
That is a decision for your own brand and retailer guidelines. Many marketplaces have rules about showing products that differ from the shipped item, so check that the generated image matches the real SKU before publishing.

How long does a generation take?
Jobs are asynchronous. The polling loop above uses a 90-second timeout, which is a conservative ceiling rather than a typical time.


See the Nano Banana Pro model page for parameter docs.

Related posts

Join our DiscordAI Perfume Photography API — Bottle and Packaging Variants — GenRelay