# Fooocus Inpainting API

> اختیاری ماسک کے ساتھ تصویر میں اِن پینٹنگ یا آؤٹ پینٹنگ، تفصیلی اصلاح یا مواد کی تبدیلی کے موڈز کے ساتھ

ایک موجودہ تصویر میں ماسک شدہ حصے کو دوبارہ تیار کر کے یا اس کی سرحدوں کو بڑھا کر ترمیم کرتا ہے۔ `inpaint_image_url` اور اختیاری طور پر `mask_image_url` فراہم کریں، پھر ایک `inpaint_mode` منتخب کریں: سادہ inpaint/outpaint، تفصیل میں بہتری، یا مواد میں تبدیلی۔ یہ LoRAs، چار تک تصویر کے پرامپٹ، ایک refiner کا انتخاب اور فی درخواست 1 سے 4 آؤٹ پٹ png، jpeg یا webp میں قبول کرتا ہے۔ Strength اور متعلقہ فیلڈ کی سیٹنگز اس بات پر باریک بینی سے کنٹرول فراہم کرتی ہیں کہ کتنی تبدیلی ہونی چاہیے۔

- Model id: `fooocus/inpaint`
- Made by: Open model
- Category: Image Editing
- Output: image
- Estimated price per run: $0.055 / image (cheapest run $0.055 (55 API credits))
- Run: `POST https://api.doitong.com/v1/run/fooocus/inpaint`
- Quote: `POST https://api.doitong.com/v1/quote/fooocus/inpaint`
- Docs page: https://doitong.com/ur/developers/models/fooocus/inpaint

## Pricing

Price: **$0.055 / image**. Estimated from the typical cost of one run, per output (`num_images`). The quote is exactly what the run charges.

The full example input below costs $0.055 = 55 API credits (1 image × 55 API credits).

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/fooocus/inpaint` 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 | no | `` |  | جتنی ممکن ہو تفصیل کے ساتھ مطلوبہ تصویر بیان کریں تاکہ بہترین نتائج حاصل ہوں۔ |
| `negative_prompt` |  | string | no | `` |  | خارج کی جانے والی تصویر کی تفصیلات بتانے والا منفی پرامپٹ، مثلاً رنگ، اشیا، مناظر یا باریک خصوصیات۔ مثالوں میں مونچھ، دھندلا پن یا کم ریزولوشن شامل ہیں۔ |
| `styles` |  | array of enum (string) | no | `["Fooocus Enhance","Fooocus Sharp","Fooocus V2"]` |  | تخلیق کے دوران لاگو کیا جانے والا انداز۔ |
| `performance` |  | enum (string) | no | `Extreme Speed` | `Speed`, `Quality`, `Extreme Speed`, `Lightning` | کارکردگی کا انتخاب: Speed یا Quality۔ |
| `guidance_scale` |  | number | no | `4` | 1 – 30 | تصویر کے انتخاب کے لیے پرامپٹ کی پابندی کی طاقت، CFG (Classifier Free Guidance) کے طور پر ظاہر کی جاتی ہے۔ |
| `sharpness` |  | number | no | `2` | 0 – 30 | آؤٹ پٹ تصویر کی شارپنس کی ترتیب۔ اسے بڑھانے سے تصویر اور اس کی ساختیں زیادہ واضح ہو جاتی ہیں۔ |
| `aspect_ratio` |  | string | no | `1024x1024` |  | آؤٹ پٹ تصویر کے ابعاد، presets سے منتخب یا custom width اور height کے طور پر متعین کیے جاتے ہیں۔ دونوں custom dimensions کو 8 سے قابل تقسیم ہونا چاہیے۔ |
| `num_images` | `num_outputs` | integer | no | `1` | 1 – 4 | ہر درخواست میں تخلیق کی جانے والی تصاویر کی تعداد۔ |
| `loras` |  | array of object {path, scale} | no | `[{"path":"https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/sd_xl_offset_example-lora_1.0.safetensors","scale":0.1}]` |  | حتمی تصویر کی تخلیق کے لیے merge کیا جانے والا LoRA انتخاب؛ زیادہ سے زیادہ 5 LoRAs۔ |
| `loras[].path` |  | string | yes |  |  | LoRA weights کا مقام، URL یا path کے طور پر۔ |
| `loras[].scale` |  | number | no | `0.1` | 0 – 1 | بنیادی ماڈل میں ضم کرنے سے پہلے LoRA weight پر لاگو ہونے والا multiplier۔ |
| `refiner_model` |  | enum (string) | no | `None` | `None`, `realisticVisionV60B1_v51VAE.safetensors` | Refiner کا انتخاب: SDXL یا SD 1.5۔ |
| `refiner_switch` |  | number | no | `0.8` | 0 – 1 | Refiner switch value: حقیقی SD1.5 ماڈلز کے ساتھ 0.4، anime SD1.5 ماڈلز کے ساتھ 0.667، اور XL-refiners کے ساتھ 0.8 استعمال کریں۔ دو SDXL ماڈلز کے درمیان switching کے لیے کوئی بھی قدر استعمال کی جا سکتی ہے۔ |
| `output_format` |  | enum (string) | no | `jpeg` | `png`, `jpeg`, `webp` | نتیجہ خیز تصویر کا فائل فارمیٹ۔ |
| `seed` |  | integer \| null | no |  |  | Stable Diffusion میں تصاویر دوبارہ بنانے کے لیے seed۔ ماڈل ورژن، پرامپٹ اور seed یکساں رکھ کر ہر بار تصویر بالکل دوبارہ بنائی جا سکتی ہے۔ |
| `inpaint_image_url` |  | string (image URL) | yes |  |  | اِن پینٹنگ کے دوران استعمال ہونے والی حوالہ جاتی تصویر۔ |
| `mask_image_url` |  | string (image URL) \| null | no |  |  | تصویر کی تخلیق کے دوران لاگو ہونے والی ماسک تصویر۔ |
| `inpaint_mode` |  | enum (string) | no | `Inpaint or Outpaint (default)` | `Inpaint or Outpaint (default)`, `Improve Detail (face, hand, eyes, etc.)`, `Modify Content (add objects, change background, etc.)` | inpainting کے دوران لاگو کیا جانے والا mode۔ |
| `inpaint_additional_prompt` |  | string | no | `` |  | مطلوبہ inpainting مواد کی تفصیل۔ |
| `outpaint_selections` |  | array of enum (string) | no | `[]` |  | وہ سمتیں جن میں outpainting تصویر کو پھیلاتی ہے۔ |
| `override_inpaint_options` |  | boolean | no | `false` |  | ایڈوانسڈ inpainting settings کے لیے override toggle: `inpaint_disable_initial_latent`, `inpaint_engine`, `inpaint_strength`, `inpaint_respective_field`, اور `inpaint_erode_or_dilate`۔ اسے true کرنے سے یہ options override ہوتے ہیں، ورنہ ان کے ڈیفالٹ لاگو ہوتے ہیں۔ |
| `inpaint_disable_initial_latent` |  | boolean | no | `false` |  | ابتدائی preprocessing toggle: true کرنے سے یہ preprocessing غیر فعال ہو جاتی ہے۔ |
| `inpaint_engine` |  | enum (string) | no | `v2.6` | `None`, `v1`, `v2.5`, `v2.6` | Fooocus اِن پینٹنگ کے لیے ماڈل کا ورژن۔ |
| `inpaint_strength` |  | number | no | `1` | ≤ 1, > 0 | inpainting کی denoising strength، A1111 کی inpaint setting کے مساوی۔ یہ outpainting پر لاگو نہیں ہوتی، جو ہمیشہ 1.0 استعمال کرتی ہے۔ |
| `inpaint_respective_field` |  | number | no | `0.618` | 0 – 1 | A1111 کے مساوی اختیارات سے inpainting کا علاقہ منتخب کریں: "Only Masked" کی قدر 0 اور "Whole Image" کی قدر 1 ہے۔ Outpainting اس setting کو نظرانداز کرتی ہے اور ہمیشہ 1.0 استعمال کرتی ہے۔ |
| `inpaint_erode_or_dilate` |  | number | no | `0` | -64 – 64 | کسی بھی inversion سے پہلے mask کے سفید حصے کو ایڈجسٹ کریں؛ ڈیفالٹ قدر 0 ہے۔ مثبت قدریں حصہ پھیلاتی ہیں اور منفی قدریں اسے سکیڑتی ہیں۔ |
| `invert_mask` |  | boolean | no | `false` |  | Mask inversion toggle؛ true کرنے سے mask الٹ جاتا ہے۔ |
| `image_prompt_1` |  | object {type, image_url, stop_at, weight} | no |  |  |  |
| `image_prompt_1.type` |  | enum (string) | no | `ImagePrompt` | `ImagePrompt`, `PyraCanny`, `CPDS`, `FaceSwap` |  |
| `image_prompt_1.image_url` |  | string (image URL) \| null | no |  |  |  |
| `image_prompt_1.stop_at` |  | number | no | `0.5` | 0 – 1 |  |
| `image_prompt_1.weight` |  | number | no | `1` | 0 – 2 |  |
| `image_prompt_2` |  | object {type, image_url, stop_at, weight} | no |  |  |  |
| `image_prompt_2.type` |  | enum (string) | no | `ImagePrompt` | `ImagePrompt`, `PyraCanny`, `CPDS`, `FaceSwap` |  |
| `image_prompt_2.image_url` |  | string (image URL) \| null | no |  |  |  |
| `image_prompt_2.stop_at` |  | number | no | `0.5` | 0 – 1 |  |
| `image_prompt_2.weight` |  | number | no | `1` | 0 – 2 |  |
| `image_prompt_3` |  | object {type, image_url, stop_at, weight} | no |  |  |  |
| `image_prompt_3.type` |  | enum (string) | no | `ImagePrompt` | `ImagePrompt`, `PyraCanny`, `CPDS`, `FaceSwap` |  |
| `image_prompt_3.image_url` |  | string (image URL) \| null | no |  |  |  |
| `image_prompt_3.stop_at` |  | number | no | `0.5` | 0 – 1 |  |
| `image_prompt_3.weight` |  | number | no | `1` | 0 – 2 |  |
| `image_prompt_4` |  | object {type, image_url, stop_at, weight} | no |  |  |  |
| `image_prompt_4.type` |  | enum (string) | no | `ImagePrompt` | `ImagePrompt`, `PyraCanny`, `CPDS`, `FaceSwap` |  |
| `image_prompt_4.image_url` |  | string (image URL) \| null | no |  |  |  |
| `image_prompt_4.stop_at` |  | number | no | `0.5` | 0 – 1 |  |
| `image_prompt_4.weight` |  | number | no | `1` | 0 – 2 |  |
| `mixing_image_prompt_and_inpaint` |  | boolean | no | `false` |  | تصویر پرامپٹ کو Inpaint کے ساتھ یکجا کرتا ہے۔ |
| `enable_safety_checker` |  | boolean | no | `true` |  | حفاظتی checker کا ٹوگل؛ false کرنے سے جانچ غیر فعال ہو جاتی ہے۔ |

File parameters (`inpaint_image_url`, `mask_image_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
{
  "inpaint_image_url": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg"
}
```

A fuller example:

```json
{
  "inpaint_image_url": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg"
}
```

## 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/fooocus/inpaint?wait=20" \
  -H "Authorization: Bearer $DOITONG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "inpaint_image_url": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg"
  }'

# 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/fooocus/inpaint?wait=20", {
  method: "POST",
  headers,
  body: JSON.stringify({
    "inpaint_image_url": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg"
  }),
});
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 = {
    "inpaint_image_url": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg",
}

# Run the model; wait up to 20 s for the finished result in the same call
r = requests.post(API + "/run/fooocus/inpaint", 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": "fooocus/inpaint",
      "input": {
        "inpaint_image_url": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg"
      },
      "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": "fooocus/inpaint",
  "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": 55,
    "usd": "0.055",
    "charged": 55,
    "refunded": 0
  },
  "input": {
    "inpaint_image_url": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg"
  },
  "output": {
    "images": [
      {
        "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.jpeg",
        "content_type": "image/jpeg",
        "file_name": "0-output.jpeg",
        "file_size": 1843200,
        "width": 1024,
        "height": 768
      }
    ],
    "timings": {},
    "has_nsfw_concepts": [
      false
    ]
  },
  "outputs": [
    {
      "type": "image",
      "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.jpeg",
      "content_type": "image/jpeg",
      "file_size": 1843200,
      "width": 1024,
      "height": 768,
      "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 |
|---|---|---|
| `images` | array of object {url, content_type, file_name, file_size, width, height} | تخلیق شدہ تصویر کی فائل کی معلومات۔ |
| `timings` | object | تخلیق میں گزرا ہوا وقت۔ |
| `has_nsfw_concepts` | array of boolean | بتاتا ہے کہ تخلیق کردہ تصاویر میں NSFW تصورات موجود ہیں یا نہیں۔ |

## Related models

- [Fooocus](https://doitong.com/developers/models/fooocus.md) (`fooocus`): $0.444 / image
- [Fooocus Image Prompt](https://doitong.com/developers/models/fooocus/image-prompt.md) (`fooocus/image-prompt`): $0.085 / image
- [Fooocus Upscale or Vary](https://doitong.com/developers/models/fooocus/upscale-or-vary.md) (`fooocus/upscale-or-vary`): $0.007 / image
- [FLUX.1 Kontext \[pro\]](https://doitong.com/developers/models/flux-pro/kontext.md) (`flux-pro/kontext`): $0.04 / image
- [GPT Image 2.5 Edit](https://doitong.com/developers/models/openai/gpt-image-2.5/flare/edit.md) (`openai/gpt-image-2.5/flare/edit`): from $0.12 / image
- [Nano Banana 2 Edit](https://doitong.com/developers/models/nano-banana-2/edit.md) (`nano-banana-2/edit`): from $0.06 / image
- [Nano Banana Pro Edit](https://doitong.com/developers/models/nano-banana-pro/edit.md) (`nano-banana-pro/edit`): from $0.15 / image
- [Qwen Image 3 Edit](https://doitong.com/developers/models/alibaba/qwen-image-3/edit.md) (`alibaba/qwen-image-3/edit`): from $0.04 / image

## Links

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