Presets
Named, versioned prompt templates and settings for image.generate and video.generate that you apply with one field.
A preset is a named bundle that Windpaint maintains for one capability: a prompt template plus default settings such as aspect ratio and resolution. Add "preset": "<slug>" to a submit, and your prompt is placed into the template before it goes to the model.
curl -X POST https://api.windpaint.ai/v1/generation/capabilities/image.generate \
-H "Authorization: Bearer $WINDPAINT_API_KEY" \
-H "Content-Type: application/json" \
-d '{"prompt": "a matte black ceramic mug", "preset": "product-shot"}'
You can’t create your own presets. The list below is the current set; read it live from GET /v1/generation/presets.
How a preset is applied
- Prompt. Every
{prompt}in the preset’sprompt_templateis replaced by your prompt, trimmed but otherwise as written. With theproduct-shotpreset,a matte black ceramic mugbecomesProfessional studio product photograph of a matte black ceramic mug, centered on a seamless light gray paper backdrop. ... - Settings. The preset’s
params(resolution,aspect_ratio,quality,duration,seed) fill only the fields you leave out or send asnull. Anything you send wins. The preset’smodelis used only when you don’t name one. - Prompt required.
image.generatestill needs a prompt; the preset styles a subject, it doesn’t invent one. Forvideo.generateyou can leave the prompt out when you pass astart_frame, and the template’s camera instructions are used on their own. - Pricing is the same as without a preset: it depends on the model and tier that end up being used.
The request’s status reports the preset as "preset": {"slug": "product-shot", "version": 1}, or null when none was used.
Versions
Presets are versioned. "preset": "product-shot" uses the current version; "preset": "product-shot@1" pins version 1, so a later change to the template doesn’t change your results. Pin a version when you need repeatable output, along with a seed.
Image presets
All run on z-image-turbo at 1k.
| Slug | Title | Aspect ratio |
|---|---|---|
product-shot | Product shot on seamless | 1:1 |
cinematic-still | Cinematic still | 16:9 |
isometric-illustration | Isometric illustration | 1:1 |
anime-key-art | Anime key art | 2:3 |
editorial-portrait | Editorial portrait | 4:5 |
flat-illustration | Flat vector illustration | 4:3 |
food-overhead | Overhead food photo | 4:5 |
Video presets
Coming soon: these will run on wan-2.2-i2v at 480p for 5 seconds once video is live. They describe camera or subject motion. They don’t set an aspect ratio, so send the one that matches your start frame (the default is 16:9).
| Slug | Title | Motion |
|---|---|---|
dolly-push-in | Slow dolly push-in | The camera glides slowly toward the subject. |
orbit-subject | Orbit around subject | A smooth arc around the subject with background parallax. |
living-photo | Living photo | Locked-off camera with subtle ambient motion. |
product-turntable | Product turntable | The product turns slowly in place. |
crane-up-reveal | Crane-up reveal | The camera rises and tilts down to reveal the scene. |
curl -X POST https://api.windpaint.ai/v1/generation/capabilities/video.generate \
-H "Authorization: Bearer $WINDPAINT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"inputs": {"start_frame": ["8e1f2a3b-4c5d-4e6f-9a0b-1c2d3e4f5a6b"]},
"preset": "orbit-subject",
"aspect_ratio": "1:1"
}'
Errors
These return 422 with code request.validation_failed:
- The preset reference isn’t a slug or
slug@version. - The preset is unknown, or the version you asked for isn’t active.
- The preset belongs to another capability, for example a video preset on
image.generate, or on/v1/generation/models/{model}for a model of another capability. - No prompt on a capability that needs one, and no input asset to stand in for it.
POST /v1/generation/estimate also takes preset, so you can check the price and output size before you submit.