# Wan VACE 14B · Pose API

> Generování videa řízené pózou pomocí VACE 14B, kde prompt popisuje pózu a akci objektu

Vyžaduje `prompt` popisující požadovanou pózu a akci a zdrojové `video_url`, jehož pohyb řídí výsledek. Volitelné `ref_image_urls` a obrázky prvního či posledního snímku přidávají reference. `num_frames` může být až 241, `frames_per_second` je 5 až 30 a `resolution` je v rozmezí 240p až 720p.

- Model id: `wan-vace-14b/pose`
- Made by: Alibaba
- Category: Video to Video
- Output: video
- Price per second of your output video: from $0.04 / second of output video (cheapest run $0.04 (40 API credits))
- Run: `POST https://api.doitong.ru/v1/run/wan-vace-14b/pose`
- Quote: `POST https://api.doitong.ru/v1/quote/wan-vace-14b/pose`
- Docs page: https://doitong.com/cs/developers/models/wan-vace-14b/pose

## Pricing

Price: **from $0.04 / second of output video** (the lowest tier; the quote prices your exact input). Price per second of your output video: the input files are measured before the run (length, resolution, frame rate). The quote measures the same files and is exactly what the run charges.

Price by tier:

- 240p: $0.04 / second of output video
- 360p: $0.04 / second of output video
- 480p: $0.04 / second of output video
- 580p: $0.06 / second of output video
- auto: $0.08 / second of output video
- 720p: $0.08 / second of output video

The full example input below costs $0.405 = 405 API credits (5.0625 s output video × $0.08 (auto)).

Prices are the upstream price in USD, paid from the API balance in API credits (1000 API credits = 1 USD). `POST https://api.doitong.ru/v1/quote/wan-vace-14b/pose` with the same JSON body returns the exact price for that input; the quote is exactly what a run charges. Invalid input is never charged and failed or canceled requests are refunded automatically.

## Input parameters

Send either the canonical name or the native field name (not both). Canonical names are the same across models.

| Parameter | Canonical name | Type | Required | Default | Allowed values / range | Description |
|---|---|---|---|---|---|---|
| `prompt` |  | string | yes |  |  | Pokyny pro generování videa, které u úlohy pózy určují pózu objektu a prováděnou akci. |
| `negative_prompt` |  | string | no | `letterboxing, borders, black bars, bright colors, overexposed, static, blurred details, subtitles, style, artwork, painting, picture, still, overall gray, worst quality, low quality, JPEG compression residue, ugly, incomplete, extra fingers, poorly drawn hands, poorly drawn faces, deformed, disfigured, malformed limbs, fused fingers, still picture, cluttered background, three legs, many people in the background, walking backwards` |  | Negativní prompt použitý při generování videa. |
| `match_input_num_frames` |  | boolean | no | `false` |  | Zdroj počtu snímků vygenerovaného videa: false používá `num_frames`, zatímco true kopíruje počet snímků vstupního videa. |
| `num_frames` |  | integer | no | `81` | 17 – 241 | Počet snímků výstupu včetně obou mezních hodnot, v rozsahu 81–241. |
| `match_input_frames_per_second` |  | boolean | no | `false` |  | Zdroj snímkové frekvence vygenerovaného videa: false používá `frames_per_second`, zatímco true kopíruje snímkovou frekvenci vstupního videa. |
| `frames_per_second` |  | integer \| null | no | `16` | 5 – 30 | Snímková frekvence vygenerovaného videa, použitá pouze tehdy, když `match_input_frames_per_second` není true; přijímané hodnoty jsou 5–30 snímků za sekundu. |
| `seed` |  | integer \| null | no |  |  | Seed zajišťující reprodukovatelné generování. Nastavení na None vybere seed náhodně. |
| `resolution` |  | enum (string) | no | `auto` | `auto`, `240p`, `360p`, `480p`, `580p`, `720p` | Rozlišení výstupního videa. |
| `aspect_ratio` |  | enum (string) | no | `auto` | `auto`, `16:9`, `1:1`, `9:16` | Poměr stran výsledného videa. |
| `num_inference_steps` |  | integer | no | `30` | 2 – 50 | Počet vzorkovacích kroků; vyšší počet znamená delší zpracování, ale lepší kvalitu. |
| `guidance_scale` |  | number | no | `5` | 1 – 10 | Síla zarovnání promptu řízená pomocí classifier-free guidance; zvýšení škály vede vygenerované obrázky k přesnějšímu dodržení textu. |
| `sampler` |  | enum (string) | no | `unipc` | `unipc`, `dpm++`, `euler` | Sampler použitý při generování videa. |
| `shift` |  | number | no | `5` | 1 – 15 | Nastavení posunu použité při generování videa. |
| `video_url` | `video` | string (video URL) | yes |  |  | URL zdrojového videosouboru, povinná při provádění úlohy pózy. |
| `ref_image_urls` |  | array of image URL | no |  |  | Volitelné URL zdrojových obrázků poskytujících modelu referenční obrázky k použití. |
| `first_frame_url` | `image` | string \| null | no |  |  | Volitelná reference prvního snímku zadaná pomocí URL, kterou má model použít při zpracování videa. |
| `last_frame_url` | `end_image` | string \| null | no |  |  | Volitelná reference posledního snímku zadaná pomocí URL, kterou má model použít při zpracování videa. |
| `enable_safety_checker` |  | boolean | no | `false` |  | Přepínač bezpečnostní kontroly, jehož vypnutí vyžaduje autorizaci účtu. Bez této autorizace se kontroluje každý požadavek bez ohledu na nastavení; true kontrolu povolí. |
| `enable_prompt_expansion` |  | boolean | no | `false` |  | Určuje, zda je povoleno rozšíření promptu. |
| `preprocess` |  | boolean | no | `false` |  | Určuje předzpracování vstupního videa. |
| `acceleration` |  | enum (string) \| null | no | `regular` | `none`, `low`, `regular` | Nastavení urychlení inference s volbou 'none' nebo 'regular': urychlené zpracování výrazně zvyšuje rychlost za cenu velmi malé změny výstupu. |
| `video_quality` |  | enum (string) | no | `high` | `low`, `medium`, `high`, `maximum` | Úroveň kvality výsledného videa. |
| `video_write_mode` |  | enum (string) | no | `balanced` | `fast`, `balanced`, `small` | Režim zápisu výsledného videa. |
| `num_interpolated_frames` |  | integer | no | `0` | 0 – 5 | Počet interpolací: 0 ponechá původní snímky bez interpolace; ostatní hodnoty určují počet mezilehlých snímků vytvořených mezi nimi. |
| `temporal_downsample_factor` |  | integer | no | `0` | 0 – 5 | Faktor vynechávání snímků videa vyjádřený celým číslem; pro každý faktor podvzorkování se jednou použije automatické převzorkování. Hodnota 0 ponechá časové podvzorkování vypnuté. |
| `enable_auto_downsample` |  | boolean | no | `false` |  | Automatické přizpůsobení počtu snímků: povolení umožní modelu zpracovat časově podvzorkované video vhodné délky a následná interpolace obnoví původní počet snímků. |
| `auto_downsample_min_fps` |  | number | no | `15` | 1 – 60 | Minimální snímková frekvence ve snímcích za sekundu povolená po podvzorkování. U záběrů s malým pohybem umožní snížení této hodnoty větší podvzorkování a delší sekvence; velmi rychlý pohyb může vyžadovat vyšší hodnotu, výchozí hodnota však vyhovuje většině videí. Automatické podvzorkování používá tento práh k nalezení nejnižšího faktoru, který zachová detaily. |
| `interpolator_model` |  | enum (string) | no | `film` | `rife`, `film` | Volba modelu interpolace snímků: buď 'rife', nebo 'film'. |
| `transparency_mode` |  | enum (string) | no | `content_aware` | `content_aware`, `white`, `black` | Zpracování průhlednosti počátečních a koncových snímků, určující, jak se vyplní jejich průhledné oblasti. |
| `return_frames_zip` |  | boolean | no | `false` |  | Určuje, zda se vrátí také archiv ZIP obsahující každý vygenerovaný snímek; aktivováno při hodnotě true. |

File parameters (`video`, `ref_image_urls`) take a public `https://` URL, a `data:` URI up to 10 MB, or the `file_url` of an upload from `POST /files`.

## Example input

Required parameters only:

```json
{
  "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field",
  "video": "https://content.doitong.com/video/showcase/v3/gen_fox_cartoon.mp4"
}
```

A fuller example:

```json
{
  "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field",
  "video_url": "https://content.doitong.com/video/showcase/v3/gen_fox_cartoon.mp4"
}
```

## Run it

Set `DOITONG_API_KEY` to a key from https://doitong.com/developers/dashboard#keys. `?wait=20` returns the finished request in the same call when it is ready within 20 seconds; otherwise poll `GET /requests/{id}` (it also accepts `?wait=`), or pass `webhook_url`.

### curl

```bash
# Run the model; wait up to 20 s for the finished result in the same call
curl -X POST "https://api.doitong.ru/v1/run/wan-vace-14b/pose?wait=20" \
  -H "Authorization: Bearer $DOITONG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field",
    "video_url": "https://content.doitong.com/video/showcase/v3/gen_fox_cartoon.mp4"
  }'

# Still "queued" or "running"? Poll with the id from the response:
curl "https://api.doitong.ru/v1/requests/REQUEST_ID?wait=20" \
  -H "Authorization: Bearer $DOITONG_API_KEY"
```

### JavaScript

```javascript
const API = "https://api.doitong.ru/v1";
const headers = {
  "Authorization": "Bearer " + process.env.DOITONG_API_KEY,
  "Content-Type": "application/json",
};

// Run the model; wait up to 20 s for the finished result in the same call
let res = await fetch(API + "/run/wan-vace-14b/pose?wait=20", {
  method: "POST",
  headers,
  body: JSON.stringify({
    "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field",
    "video_url": "https://content.doitong.com/video/showcase/v3/gen_fox_cartoon.mp4"
  }),
});
let request = await res.json();
if (!res.ok) throw new Error(request.error.code + ": " + request.error.message);

// Not finished yet: long-poll until it is
while (request.status === "queued" || request.status === "running") {
  res = await fetch(API + "/requests/" + request.id + "?wait=20", { headers });
  request = await res.json();
}
if (request.status !== "succeeded") throw new Error(JSON.stringify(request.error));
console.log(request.outputs.map((o) => o.url), request.cost.credits + " API credits ($" + request.cost.usd + ")");
```

### Python

```python
import os
import requests

API = "https://api.doitong.ru/v1"
headers = {"Authorization": "Bearer " + os.environ["DOITONG_API_KEY"]}

payload = {
    "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field",
    "video_url": "https://content.doitong.com/video/showcase/v3/gen_fox_cartoon.mp4",
}

# Run the model; wait up to 20 s for the finished result in the same call
r = requests.post(API + "/run/wan-vace-14b/pose", params={"wait": 20}, json=payload, headers=headers)
request = r.json()
if not r.ok:
    raise RuntimeError(request["error"]["code"] + ": " + request["error"]["message"])

# Not finished yet: long-poll until it is
while request["status"] in ("queued", "running"):
    request = requests.get(API + "/requests/" + request["id"], params={"wait": 20}, headers=headers).json()
if request["status"] != "succeeded":
    raise RuntimeError(request["error"])
print([o["url"] for o in request["outputs"]], request["cost"]["credits"], "API credits", "$" + request["cost"]["usd"])
```

### MCP

The MCP server at `https://api.doitong.ru/v1/mcp` exposes the tools `search_models`, `get_model`, `quote`, `run`, `get_request`, `cancel_request`, `list_requests`, `create_upload` and `get_account`. A `run` call for this model:

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "run",
    "arguments": {
      "model_id": "wan-vace-14b/pose",
      "input": {
        "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field",
        "video_url": "https://content.doitong.com/video/showcase/v3/gen_fox_cartoon.mp4"
      },
      "wait_seconds": 20
    }
  }
}
```

## Response

Every call returns a request object. `status` is one of `queued`, `running`, `succeeded`, `failed`, `canceled`. `outputs` lists the generated files with URLs on our storage (kept forever, or 7 days with `?storage=temporary`; `storage` says which); `output` is the model's own result object with the same URLs.

```json
{
  "id": "req_8k2m4q7x1z9c3v5b6n0p2r4t",
  "object": "request",
  "model": "wan-vace-14b/pose",
  "status": "succeeded",
  "created_at": "2026-10-20T12:00:00Z",
  "started_at": "2026-10-20T12:00:02Z",
  "completed_at": "2026-10-20T12:00:09Z",
  "queue_position": null,
  "cost": {
    "credits": 405,
    "usd": "0.405",
    "charged": 405,
    "refunded": 0
  },
  "input": {
    "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field",
    "video_url": "https://content.doitong.com/video/showcase/v3/gen_fox_cartoon.mp4"
  },
  "output": {
    "video": {
      "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.mp4",
      "content_type": "video/mp4",
      "file_name": "0-output.mp4",
      "file_size": 1843200,
      "width": 1024,
      "height": 768,
      "fps": 1.0,
      "duration": 5,
      "num_frames": 1
    },
    "prompt": "string",
    "seed": 42,
    "frames_zip": {
      "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.mp4",
      "content_type": "video/mp4",
      "file_name": "0-output.mp4",
      "file_size": 1843200
    }
  },
  "outputs": [
    {
      "type": "video",
      "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.mp4",
      "content_type": "video/mp4",
      "file_size": 1843200,
      "width": 1280,
      "height": 720,
      "duration": 5,
      "stored": true
    }
  ],
  "error": null,
  "metrics": {
    "inference_seconds": 6.8
  },
  "urls": {
    "self": "https://api.doitong.ru/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t",
    "cancel": "https://api.doitong.ru/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t/cancel"
  }
}
```

### Output fields (`output`)

| Field | Type | Description |
|---|---|---|
| `video` | object {url, content_type, file_name, file_size, width, height, fps, duration, num_frames} | Videosoubor s pózou vytvořený generováním. |
| `prompt` | string | Prompt použitý k vygenerování výstupu. |
| `seed` | integer | Hodnota seedu použitá při generování. |
| `frames_zip` | object {url, content_type, file_name, file_size} \| null | Archiv ZIP obsahující každý snímek videa, vrácený na vyžádání. |

## Related models

- [Wan VACE 14B](https://doitong.com/developers/models/wan-vace-14b.md) (`wan-vace-14b`): from $0.04 / second of output video
- [Wan VACE 14B · Depth](https://doitong.com/developers/models/wan-vace-14b/depth.md) (`wan-vace-14b/depth`): from $0.04 / second of output video
- [Wan VACE 14B · Inpainting](https://doitong.com/developers/models/wan-vace-14b/inpainting.md) (`wan-vace-14b/inpainting`): from $0.04 / second of output video
- [Wan VACE 14B · Outpainting](https://doitong.com/developers/models/wan-vace-14b/outpainting.md) (`wan-vace-14b/outpainting`): from $0.04 / second of output video
- [Wan VACE 14B · Reframe](https://doitong.com/developers/models/wan-vace-14b/reframe.md) (`wan-vace-14b/reframe`): from $0.04 / second of output video
- [Happy Horse Video Edit](https://doitong.com/developers/models/alibaba/happy-horse/video-edit.md) (`alibaba/happy-horse/video-edit`): from $0.28 / second of input video
- [Wan 2.1 VACE Long Reframe](https://doitong.com/developers/models/wan-vace-apps/long-reframe.md) (`wan-vace-apps/long-reframe`): from $0.04 / 2 seconds of input video
- [Wan 2.2 VACE Fun A14B · Depth](https://doitong.com/developers/models/wan-22-vace-fun-a14b/depth.md) (`wan-22-vace-fun-a14b/depth`): from $0.05 / second of output video

## Links

- HTML page: https://doitong.com/developers/models/wan-vace-14b/pose
- All models and guides for AI agents: https://doitong.com/developers/llms.txt
- OpenAPI 3.1 with this model's typed request body: https://doitong.com/developers/openapi.json?model=wan-vace-14b/pose
- Errors: https://doitong.com/developers/docs/errors
- Model details as JSON: https://api.doitong.ru/v1/models/wan-vace-14b/pose
