Provider options (advanced knobs)
Every per-model providerOptions field across image, video, and voice — exact names, allowed values, and examples.
Provider options (advanced knobs)
Every generation endpoint accepts an optional providerOptions object that
is forwarded verbatim to the underlying model. It is how you reach a provider's
full capability — resolution, negative prompts, voice emotion, output format,
and more — beyond the common fields (prompt, aspectRatio, durationSec).
Rules of the road:
- Optional. Omit
providerOptionsentirely and you get sensible defaults. - Per-provider. Each model reads only the fields it understands. Fields a
- model doesn't support are ignored (or rejected by that provider with a clear
- error) — they never silently corrupt a request.
- Forwarded on three endpoints:
POST /api/v1/images, -
POST /api/v1/video/generate, andPOST /api/v1/tts(voice also takes - top-level
formatandspeed).POST /api/v1/musicuses its own fields - (
tags,instrumental,lyrics,title) instead.
All field names below are confirmed against each provider's live API.
---
Images — POST /api/v1/images
{
"prompt": "a glossy red paperclip on white, studio light",
"modelId": "flux-1.1-pro",
"aspectRatio": "1:1",
"providerOptions": { "outputFormat": "jpg", "outputQuality": 80 }
}OpenAI — gpt-image-2 (the old id dall-e-3 is served by it)
| Field | Type / values | Notes |
quality | "low" | "medium" | "high" | "auto" | render quality — default "medium" at the list price ($0.08 per image); "high" or "auto" is billed higher ($0.24 per image) |
background | "transparent" | "opaque" | "auto" | transparent needs png/webp |
outputFormat | "png" | "jpeg" | "webp" | |
outputCompression | 0–100 | jpeg/webp only |
moderation | "low" | "auto" |
fal — flux-1-schnell, ideogram-v3, recraft-v3
| Field | Applies to | Type / values |
numInferenceSteps | flux | integer (schnell 1–12, optimal 4) |
enableSafetyChecker | flux | boolean |
guidanceScale | flux (image-to-image edit) | number — a Schnell edit (a reference image) runs on fal's image-to-image endpoint and costs $0.05 per image |
style | ideogram, recraft | string (recraft: "realistic_image", "digital_illustration", "vector_illustration", …; recraft vector styles — style starting with vector_illustration — cost $0.08 per image instead of $0.04) |
negativePrompt | ideogram | string (flux/recraft have no negative prompt) |
renderingSpeed | ideogram | "TURBO" | "BALANCED" | "QUALITY" ("QUALITY" is honoured only on your own fal key; on Varosity Credits it renders at "BALANCED") |
expandPrompt | ideogram | boolean |
strength | any (image-to-image edit) | 0–1, how far to deviate from the source |
Replicate — flux-1.1-pro
| Field | Type / values | Notes |
outputFormat | "png" | "jpg" | "webp" | |
outputQuality | 0–100 | jpg/webp |
safetyTolerance | 1–6 | 1 = strict, 6 = lax |
promptUpsampling | boolean | |
imagePrompt | image URL | Flux Redux image-to-image (also falls back to referenceImageUrl) |
width, height | 256–1440 | both required; overrides the aspect preset |
Note:flux-1.1-prohas nosteps/guidancefields (those belong toflux-dev).
Google — gemini-3-pro-image, gemini-3.1-flash-image, gemini-3.1-flash-lite-image
The Gemini (Nano Banana) image models expose no provider options today —
the aspect ratio is passed natively via imageConfig. No seed or
negativePrompt.
Imagen 4 is retired: Google shut downimagen-4/imagen-4-faston 2026-08-17. Requests for those ids are transparently aliased —imagen-4→gemini-3-pro-image,imagen-4-fast→gemini-3.1-flash-lite-image— and billed at the successor's price, so the old ImagenpersonGenerationoption is ignored.
WaveSpeed (Varosity Credits) — gpt-image-2.5-flare, gpt-image-2.5-sunburst
| Field | Type / values |
quality | "low" 1¢ | "medium" 3¢ (default) | "high" 9¢ | "xhigh" 16¢ | "max" 36¢ per image; an edit (referenceImageUrl) adds about 1.5¢ (3/4/11/18/38¢). Any other value is sent and billed as medium. |
Always rendered at 1K (1024 px on the long side);resolutioncan't be changed. On an edit the output follows the reference image's shape.qualityis a REST option: MCPgenerate_imagealways usesmedium.
---
Video — POST /api/v1/video/generate
{
"prompt": "a red paper airplane glides over a city, smooth aerial motion",
"modelId": "seedance-1.0-pro",
"aspectRatio": "16:9",
"durationSec": 5,
"providerOptions": { "resolution": "1080p", "cameraFixed": true }
}fal — kling-3.0, seedance-1.0-pro, seedance-2.0, seedance-2.0-fast
| Field | Applies to | Type / values |
resolution | seedance | seedance 1.0 Pro: "480p" | "720p" | "1080p"; seedance 2.x: "480p" | "720p" |
generateAudio | kling, seedance 2.x | boolean — native audio, default true; set false for silent. Seedance 1.0 Pro has no audio. |
cfgScale | kling | number (guidance) |
shotType | kling | "customize" | "intelligent" |
cameraFixed | seedance 1.0 Pro | boolean (locked camera) |
enableSafetyChecker | seedance 1.0 Pro | boolean |
On Varosity Credits the price covers one tier, so that is what renders: Kling always with audio, Seedance 1.0 Pro at 1080p, Seedance 2.x at 720p, Grok Imagine Video and Wan Animate at 720p. generateAudio: false on Kling, and lower resolutions, take effect only on your own provider key. Seedance 2.x is the exception for audio: generateAudio: false is honoured on Varosity Credits too, at the same per-second price.
Seedance 2.x end frame. Seedance 2.x uses a second reference image as
the clip's last frame (a start → end transition). Only the studio sends
more than one reference image (a chained start frame plus asset images).
POST /api/v1/video/generate and the MCP generate_video tool each take a
single reference image, so they can't set an end frame today.
HeyGen — heygen-avatar-4, heygen-photo-avatar, heygen-cinematic
| Field | Applies to | Type / values |
avatarId | avatar-4, cinematic | a look id from GET /api/v1/heygen/library |
avatarIds | cinematic | 1–3 look ids (wins over avatarId) |
voiceId | avatar-4, photo-avatar | a voice id from GET /api/v1/heygen/library?only=voices |
audioUrl | avatar-4, photo-avatar | a public audio track to lip-sync instead of a voice |
resolution | all three | cinematic renders at most 1080p |
outputFormat, removeBackground | avatar-4, photo-avatar | outputFormat: "mp4" | "webm" |
On your own HeyGen key, a missing avatar or voice falls back to a default
look and voice from your account. On Varosity Credits there is no default:
pass avatarId (or avatarIds for cinematic), and for heygen-avatar-4
and heygen-photo-avatar also voiceId or audioUrl, or the call fails. GET /api/v1/heygen/library
lists exactly the public looks and voices Credits renders accept (scope
generate:video, free). heygen-photo-avatar takes your photo as the
reference image instead of a look.
WaveSpeed (Varosity Credits) — veo-3.1, veo-3.1-quality, veo-3.1-lite, ws-pika-2.2, ws-luma-ray-2, ws-hailuo-02, ws-runway-gen4
| Field | Applies to | Type / values |
seed | all | number |
negativePrompt | all | string |
enablePromptExpansion | hailuo | boolean |
loop | luma | boolean |
resolution | veo | "720p" (default) | "1080p", same price; 1080p only on 8-second clips (shorter ones render 720p); Veo Lite is always 720p. Veo always renders with audio. |
size | pika/luma (text-to-video) | "1280720" | "7201280" |
image | pika/luma/hailuo | image URL — auto-routes to image-to-video |
Passing a referenceImageUrl on pika/luma/hailuo also triggers image-to-video automatically.muapi (Varosity Credits) — muapi-wan-t2v, muapi-wan-effects
| Field | Applies to | Type / values |
resolution | both | "480p" | "720p" |
quality | both | "medium" | "high" |
negativePrompt | wan-t2v | string |
effect | wan-effects | effect name, e.g. "Cakeify", "Inflate", "VHS Footage", "Samurai It", "Film Noir" (validated against muapi's catalog — unknown names error) |
Replicate — kling-3.0-replicate
| Field | Type / values |
generateAudio | boolean (default true; false = silent — on your own Replicate key only; on Varosity Credits it always renders with audio) |
endImage | image URL (last-frame keyframe) |
Hailuo direct — hailuo-02 (currently unavailable — use ws-hailuo-02, whose options are in the WaveSpeed section above)
| Field | Type / values |
resolution | "768P" | "1080P" (1080P is 6s-only) |
promptOptimizer | boolean |
---
Voice / TTS — POST /api/v1/tts
Voice takes two top-level fields plus providerOptions:
{
"text": "Hello from Varosity.",
"voiceModel": "cartesia-sonic-3.6",
"format": "wav", // mp3 | wav | ogg | opus | aac | flac | pcm
"speed": 1.1, // OpenAI 0.25–4.0, Cartesia 0.6–1.5; others (incl. ElevenLabs) ignore
"providerOptions": { "language": "en", "emotion": "calm" }
}OpenAI — openai-tts-1, openai-tts-1-hd
Uses the top-level speed (0.25–4.0) and format
(mp3/opus/aac/flac/wav/pcm). No extra providerOptions.
Cartesia — cartesia-sonic-3.6, cartesia-sonic-3
Speed, volume and emotion are sent as Cartesia's generation_config.
| Field | Type / values |
|---|---|
| language | "en", "es", "fr", … (Sonic 3.x is multilingual) |
| speed | number 0.6–1.5 (1 = normal), or the older words "slowest"…"fastest" |
| volume | number 0.5–2.0 (1 = normal) |
| emotion | one word, English only, e.g. "calm", "excited", "sad"; older tag arrays like ["positivity:high"] still pass through |
| container | "mp3" | "wav" | "raw" |
| sampleRate | number (default 44100) |
| bitRate | number (mp3, default 128000) |
| encoding | "pcm_s16le", "pcm_f32le", … (wav/raw) |
Fish Audio — fish-audio-tts
| Field | Type / values |
model | "speech-1.5" | "speech-1.6" | "s1" (default speech-1.6) |
mp3Bitrate | 64 | 128 | 192 |
normalize | boolean |
latency | "normal" | "balanced" |
speed | number (prosody, 1.0 = normal) |
volume | number (prosody) |
temperature, topP | number |
Deepgram — deepgram-aura-2
| Field | Type / values |
encoding | "mp3" | "linear16" | "flac" | "opus" | "aac" | "mulaw" | "alaw" |
sampleRate | number (required for linear16) |
bitRate | number (mp3/opus/aac) |
container | "none" | "wav" | "ogg" |
Tip: passing top-level"format": "wav"is enough — Deepgram maps it tolinear16in a WAV container for you.
ElevenLabs — elevenlabs-tts, elevenlabs-tts-v3
Pick the model with voiceModel (elevenlabs-tts, elevenlabs-tts-v3) or an
ElevenLabs id in modelId (eleven_multilingual_v2, eleven_v3,
eleven_flash_v2_5, eleven_turbo_v2_5 — Flash and Turbo cost half), and the
voice with voiceId. Output is MP3 (44.1 kHz, 128 kbps). speed, format,
stability, similarity and style aren't applied; the voice's own settings are.
---
Music — POST /api/v1/music
Music does not use providerOptions. Use the dedicated fields: tags
(genre/mood), instrumental (boolean), lyrics (custom-lyrics mode), and
title.