# Void Video Inpainting API

> Tar bort ett objekt från en video tillsammans med dess påverkan på scenen, med en maskvideo eller en textbaserad maskprompt

Tar `video_url` och en `prompt` som beskriver önskad bakgrund. Ange en `quad_mask_video_url` eller använd `mask_prompt` för att generera en mask. Kontrollerna omfattar `num_frames` (1-197), `num_inference_steps` (1-50), `guidance_scale`, `strength` och den valfria, långsammare `enable_pass2_refinement` för tidsmässig konsekvens.

- Model id: `void-video-inpainting`
- Made by: Open model
- Category: Video to Video
- Output: video
- Price per run: from $0.10 / run (cheapest run $0.10 (100 API credits))
- Run: `POST https://api.doitong.com/v1/run/void-video-inpainting`
- Quote: `POST https://api.doitong.com/v1/quote/void-video-inpainting`
- Docs page: https://doitong.com/sv/developers/models/void-video-inpainting

## Pricing

Price: **from $0.10 / run** (the lowest tier; the quote prices your exact input). Price per run: 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.

The full example input below costs $0.10 = 100 API credits (1 run × $0.10).

Prices are the upstream price in USD, paid from the API balance in API credits (1000 API credits = 1 USD). `POST https://api.doitong.com/v1/quote/void-video-inpainting` 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 |
|---|---|---|---|---|---|---|
| `video_url` | `video` | string (video URL) | yes |  |  | Källvideo-URL som innehåller objektet som ska tas bort. |
| `quad_mask_video_url` |  | string (video URL) | no | `` |  | URL till video med borttagningsmask; om den saknas skapar appen en tillfällig videomask via SAM-3-videoändpunkten med `mask_prompt` och konverterar den sedan automatiskt till en quadmask. För bästa resultat bör du ange en VOID-liknande quadmask med 4 gråskalvärden: 255 för bevarad bakgrund, 127 för det berörda området, 63 för överlappning och 0 för objektet som ska tas bort. Binära masker accepteras också, där 255 behåller och 0 tar bort. |
| `mask_prompt` |  | string \| null | no |  |  | Instruktioner för maskmålet som SAM-3 använder för att skapa en tillfällig videomask när ingen `quad_mask_video_url` anges. Identifiera vad som ska maskeras, till exempel ett objekt eller en person som ska tas bort från källvideon. |
| `prompt` |  | string | yes |  |  | Beskrivning som anger hur bakgrunden ska se ut när objektet har tagits bort. |
| `enable_pass2_refinement` |  | boolean | no | `false` |  | Valfri VOID-förfining som byter långsammare bearbetning mot potentiellt bättre temporal konsekvens i längre klipp. Den tillämpar förfining med förvridet brus som Pass 2 efter Pass 1. |
| `negative_prompt` |  | string | no | `The video is not of a high quality, it has a low resolution. Watermark present in each frame. The background is solid. Strange body and strange trajectory. Distortion.` |  | Negativ prompt som beskriver oönskade resultat för att styra genereringen bort från dem. |
| `num_inference_steps` |  | integer | no | `30` | 1 – 50 | Antal avbrusningssteg. Om du ökar det förbättras kvaliteten, men fördröjningen ökar. |
| `guidance_scale` |  | number | no | `1` | 0 – 20 | Styrka för classifier-free guidance. |
| `strength` |  | number | no | `1` | 0 – 1 | Avbrusningens styrka, där 1.0 anger fullständig avbrusning. |
| `seed` |  | integer \| null | no |  |  | Seed som styr slumpmässigheten för reproducerbara resultat. |
| `num_frames` |  | integer | no | `85` | 1 – 197 | Begärt tidsmässigt inferensfönster, justerat av backend till en av de CogVideoX-säkra storlekarna 69, 77, 85, ..., 197. Närmaste sådan storlek väljs för att hantera temporal komprimering och patchning. |
| `enable_safety_checker` |  | boolean | no | `true` |  | Aktiverar säkerhetskontroller för genererat innehåll. |

File parameters (`video`, `quad_mask_video_url`) 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
{
  "video": "https://content.doitong.com/video/showcase/v3/gen_fox_cartoon.mp4",
  "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field"
}
```

A fuller example:

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

## 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.com/v1/run/void-video-inpainting?wait=20" \
  -H "Authorization: Bearer $DOITONG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "video_url": "https://content.doitong.com/video/showcase/v3/gen_fox_cartoon.mp4",
    "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field"
  }'

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

### JavaScript

```javascript
const API = "https://api.doitong.com/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/void-video-inpainting?wait=20", {
  method: "POST",
  headers,
  body: JSON.stringify({
    "video_url": "https://content.doitong.com/video/showcase/v3/gen_fox_cartoon.mp4",
    "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field"
  }),
});
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.com/v1"
headers = {"Authorization": "Bearer " + os.environ["DOITONG_API_KEY"]}

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

# Run the model; wait up to 20 s for the finished result in the same call
r = requests.post(API + "/run/void-video-inpainting", 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.com/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": "void-video-inpainting",
      "input": {
        "video_url": "https://content.doitong.com/video/showcase/v3/gen_fox_cartoon.mp4",
        "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field"
      },
      "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": "void-video-inpainting",
  "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": 100,
    "usd": "0.10",
    "charged": 100,
    "refunded": 0
  },
  "input": {
    "video_url": "https://content.doitong.com/video/showcase/v3/gen_fox_cartoon.mp4",
    "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field"
  },
  "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
    },
    "seed": 42,
    "timings": {}
  },
  "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.com/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t",
    "cancel": "https://api.doitong.com/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t/cancel"
  }
}
```

### Output fields (`output`)

| Field | Type | Description |
|---|---|---|
| `video` | object {url, content_type, file_name, file_size} | Resulterande video efter att objektet tagits bort. |
| `seed` | integer | Seed-värde som tillämpas under genereringen. |
| `timings` | object | Detaljerad tidsmätning per steg för pipelinen. |

## Related models

- [AMT Interpolation](https://doitong.com/developers/models/amt-interpolation.md) (`amt-interpolation`): $0.000575 / second of processing time
- [AnimateDiff Turbo · Video to Video](https://doitong.com/developers/models/fast-animatediff/turbo/video-to-video.md) (`fast-animatediff/turbo/video-to-video`): $0.00125 / second of processing time
- [AnimateDiff · Video to Video](https://doitong.com/developers/models/fast-animatediff/video-to-video.md) (`fast-animatediff/video-to-video`): $0.00125 / second of processing time
- [Bernini-R Edit Video](https://doitong.com/developers/models/bernini-r/edit-video.md) (`bernini-r/edit-video`): from $0.04 / second of output video
- [Bernini-R Reference Edit Video](https://doitong.com/developers/models/bernini-r/reference-edit-video.md) (`bernini-r/reference-edit-video`): from $0.04 / second of output video
- [DWPose Pose Prediction · Video](https://doitong.com/developers/models/dwpose/video.md) (`dwpose/video`): $0.0006 / second of processing time
- [Editto](https://doitong.com/developers/models/editto.md) (`editto`): from $0.04 / second of output video
- [ID-V2V](https://doitong.com/developers/models/id-v2v.md) (`id-v2v`): $0.20 / second of output video

## Links

- HTML page: https://doitong.com/developers/models/void-video-inpainting
- 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=void-video-inpainting
- Errors: https://doitong.com/developers/docs/errors
- Model details as JSON: https://api.doitong.com/v1/models/void-video-inpainting
