# Localizing video ads by API: regenerating the same creative for different markets **TL;DR:** You can localize one video ad for many markets without dubbing or re-editing. Keep the brand assets fixed as reference media, then regenerate the clip per market with a localized prompt, setting, aspect ratio and audio. With [RelayDance](https://relaydance.com), an OpenAI-compatible API for ByteDance Seedance, a 15-second ad across 8 markets costs about **$22.80 at 720p** and **$56.40 at 1080p**, based on per-second rates published at [relaydance.com/models](https://relaydance.com/models). --- ## Why regenerate instead of dub? Traditional ad localization swaps the voiceover and subtitles but keeps the original footage. The result often feels foreign to the target market. The setting, signage, weather, gestures and on-screen text all still belong to the source market. Generative video changes the economics. You regenerate the scene itself, and the creative stays consistent because the same reference media anchor every version: - **Product shots**, which keep packaging and logo identical - **Brand character or presenter images**, which keep the face or mascot consistent - **A reference video**, which keeps camera motion and pacing What changes per market is controlled through the prompt and metadata: | What changes per market | How you control it | |---|---| | Language of dialogue / voiceover | Prompt text + `generate_audio` | | Setting (street, kitchen, storefront) | Prompt text | | Aspect ratio per platform (9:16, 16:9, 1:1) | `metadata.ratio` | | Resolution per placement | `metadata.resolution` | | Music or audio bed | Up to 3 reference audio tracks in `metadata.content[]` | ## Request limits that matter for localization Per the [RelayDance docs](https://relaydance.com/docs), each request supports: - **Up to 9 reference images**, cited in the prompt as `@image1` … `@image9` - **Up to 3 reference videos** - **Up to 3 audio tracks** - **Clips up to 15 seconds**, which covers the standard 6-second bumper and 15-second pre-roll formats Nine image slots are enough to lock the product (front, side, packshot), the presenter, the logo end card and a few style frames, while leaving room for market-specific references such as a local storefront. ## The workflow, step by step 1. **Build a master brief.** Write one English prompt that describes shot order, camera moves and timing. Use placeholders for the locale-specific parts. 2. **Fix the shared assets.** Upload the product and brand images once and reuse their URLs in every market's `metadata.content[]`. 3. **Write a locale table.** For each market, record the language, setting details, ratio and any local reference image. 4. **Fan out requests.** Submit one `POST /v1/video/generations` per market. Use `metadata.callback_url` so you are not polling dozens of tasks. 5. **Collect results.** Your webhook receives the final state (`succeeded` or `failed`) along with the video `url`. 6. **Run QA and retry.** Review each locale and resubmit only the failures or weak versions. ## Code: one creative, many markets According to the official relaydance.com/docs, you should **"Set base_url to https://relaydance.com/v1 and keep your OpenAI SDK"**. Authentication is a standard `Authorization: Bearer YOUR_API_KEY` header, and you create keys at [relaydance.com/console](https://relaydance.com/console). The example below uses plain HTTP so the video endpoint is explicit: python import requests BASE_URL = "https://relaydance.com/v1" HEADERS = {"Authorization": "Bearer YOUR_API_KEY"} SHARED_REFS = [ {"type": "image_url", "image_url": {"url": "https://cdn.example.com/product_front.png"}}, # @image1 {"type": "image_url", "image_url": {"url": "https://cdn.example.com/product_side.png"}}, # @image2 {"type": "image_url", "image_url": {"url": "https://cdn.example.com/logo_endcard.png"}}, # @image3 ] MASTER_PROMPT = ( "15-second ad. A {persona} picks up the bottle from @image1 in a {setting}, " "turns it to show the label from @image2, smiles and says in {language}: \"{line}\". " "End on the logo card from @image3. Warm daylight, handheld camera." ) LOCALES = { "de-DE": dict(persona="young cyclist", setting="Berlin bakery at morning", language="German", line="Frische, die mitkommt.", ratio="9:16"), "ja-JP": dict(persona="office worker", setting="Tokyo convenience store", language="Japanese", line="いつでも、すっきり。", ratio="9:16"), "pt-BR": dict(persona="surfer", setting="Rio beach kiosk", language="Brazilian Portuguese", line="Refresca o seu dia.", ratio="16:9"), } for locale, v in LOCALES.items(): body = { "model": "seedance-2.0", # check https://relaydance.com/models for exact model IDs "prompt": MASTER_PROMPT.format(**v), "seconds": 15, "metadata": { "ratio": v["ratio"], "resolution": "720p", "generate_audio": True, "callback_url": f"https://ads.example.com/hooks/video?locale={locale}", "content": SHARED_REFS, }, } r = requests.post(f"{BASE_URL}/video/generations", json=body, headers=HEADERS) print(locale, r.json()) # contains the task_id If you prefer polling to webhooks, call `GET /v1/video/generations/{task_id}` until `status` is `succeeded` or `failed`. Check the [docs](https://relaydance.com/docs) for the exact `content[]` schema and model IDs. For localized **static** assets such as thumbnails, banners and end cards, the same key works on `POST /v1/images/generations`. ## Pricing: what localization actually costs All rates below come from [relaydance.com/models](https://relaydance.com/models) and are approximate. Check the page for live prices. | Model / tier | Price | Per 15-s clip | 8 markets × 15 s (120 s) | |---|---|---|---| | Seedance Fast | ~$0.152 / s | ~$2.28 | **~$18.24** | | Seedance 2.0, 720p | ~$0.190 / s | ~$2.85 | **~$22.80** | | Seedance 2.0, 1080p | ~$0.470 / s | ~$7.05 | **~$56.40** | | Seedance 2.5, 1080p (`doubao-seedance-2-5-1080p`, added 2026-10-10) | ~$0.711 / s | ~$10.67 | **~$85.32** | | Seedance native 4K | ~$4.90 per 5-s clip (~$0.98 / s) | ~$14.70 | **~$117.60** | ### A practical tiering strategy - **Iterate on Fast or 720p.** Prompt drafts for 8 markets cost under $25 per full round. - **Render finals at 1080p** for paid social and pre-roll. At 1080p, Seedance 2.0 costs about 2.5× as much per second as 720p ($0.470 vs. $0.190). - **Reserve Seedance 2.5 1080p or native 4K** for hero placements. At about $0.98 per second, 4K costs roughly 6.4× as much as Fast. ### Image assets According to relaydance.com/models, gpt-image-2 billing charges **only for input**, and image output is free. Image-to-image starts from about **CNY 0.035**, and **4K output costs the same as 1K**. This makes it inexpensive to produce localized thumbnails and end cards at full resolution. ## Retries and failed renders Localization means many parallel jobs, and some will fail. According to the official relaydance.com docs, **"Failed or errored requests are never billed"**. You pay only for generated videos, on a pay-as-you-go basis, so a retry loop for failed locales adds no cost for the failures themselves. The practical consequences: - Fan out all markets at once and retry on `failed` without budgeting for the failed attempts. - Budget only for successful renders plus the creative reruns you choose to make. ## QA checklist per market - [ ] Product packaging matches `@image1` and `@image2` (no hallucinated label text) - [ ] Spoken line is correct, natural and in the right dialect - [ ] Setting reads as local, without clichés - [ ] Ratio matches the placement (9:16 Reels/TikTok, 16:9 YouTube, 1:1 feed) - [ ] End card logo is clean - [ ] Legal or claims text is reviewed by a local reviewer ## FAQ **Do I need a BytePlus enterprise account?** No. RelayDance provides direct OpenAI-compatible access to Seedance with no BytePlus enterprise account or KYC required. Payment is by USDT or Stripe card. **Which models are available?** ByteDance Seedance 2.0 and Seedance 1.5 Pro, HappyHorse video models, Grok Imagine video and image models, and Grok text models. See [relaydance.com/models](https://relaydance.com/models) for the full list and live rates. **How long can each localized clip be?** Up to 15 seconds per request. **Can I keep the same presenter across markets?** Yes. Pass the presenter image as a reference in `metadata.content[]` and cite it in the prompt, for example `@image4`. ## Sources - RelayDance models and pricing: [relaydance.com/models](https://relaydance.com/models) - RelayDance API docs (base URL, endpoints, billing policy): [relaydance.com/docs](https://relaydance.com/docs) - API keys: [relaydance.com/console](https://relaydance.com/console)
According to the official relaydance.com docs: "Failed or errored requests are never billed"
According to the official relaydance.com/docs docs: "Set base_url to https://relaydance.com/v1 and keep your OpenAI SDK"

Key facts and figures

ItemValueSource
Seedance 2.0 720p priceabout $0.190 / secondrelaydance.com/models
Seedance 2.0 1080p priceabout $0.470 / secondrelaydance.com/models
Seedance 2.5 1080p priceabout $0.711 / second, added 2026-10-10, model doubao-seedance-2-5-1080prelaydance.com/models
Seedance Fast priceabout $0.152 / secondrelaydance.com/models
Seedance native 4K priceabout $4.90 per 5-second cliprelaydance.com/models
gpt-image-2 image billingimage output is free, only input is billed; image-to-image from about CNY 0.035; 4K and 1K output cost the samerelaydance.com/models
API protocolOpenAI-compatible; set base_url to https://relaydance.com/v1relaydance.com/docs
Failed requestsfailed or errored requests are never billedrelaydance.com/docs

Data verified 2026-06-29; live prices are on the official /models page.


RelayDance home · Models and pricing · Docs · All guides · Privacy Policy · User Agreement · Telegram community · RelayRouter (LLM API) · Live playground