Windpaint
Generation

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’s prompt_template is replaced by your prompt, trimmed but otherwise as written. With the product-shot preset, a matte black ceramic mug becomes Professional 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 as null. Anything you send wins. The preset’s model is used only when you don’t name one.
  • Prompt required. image.generate still needs a prompt; the preset styles a subject, it doesn’t invent one. For video.generate you can leave the prompt out when you pass a start_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.

SlugTitleAspect ratio
product-shotProduct shot on seamless1:1
cinematic-stillCinematic still16:9
isometric-illustrationIsometric illustration1:1
anime-key-artAnime key art2:3
editorial-portraitEditorial portrait4:5
flat-illustrationFlat vector illustration4:3
food-overheadOverhead food photo4: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).

SlugTitleMotion
dolly-push-inSlow dolly push-inThe camera glides slowly toward the subject.
orbit-subjectOrbit around subjectA smooth arc around the subject with background parallax.
living-photoLiving photoLocked-off camera with subtle ambient motion.
product-turntableProduct turntableThe product turns slowly in place.
crane-up-revealCrane-up revealThe 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.