# FLUX.1 [dev] with Controlnets and Loras · Differential Diffusion API

> Penyuntingan imej FLUX.1 [dev] dipacu peta perubahan yang menetapkan kekuatan perubahan setiap kawasan

Mengubah imej sumber mengikut kawasan menggunakan imej peta perubahan untuk mengawal jumlah pengubahsuaian setiap kawasan. Memerlukan `prompt`, `image_url` dan `change_map_image_url`. Ia turut menerima LoRAs, ControlNets, IP-Adapters dan imej rujukan. `num_inference_steps` berjulat 1 hingga 50 dan `num_images` sehingga 10, dengan output png atau jpeg.

- Model id: `flux-general/differential-diffusion`
- Made by: Black Forest Labs
- Category: Image Editing
- Output: image
- Estimated price per run: $0.138 / image (cheapest run $0.138 (138 API credits))
- Run: `POST https://api.doitong.com/v1/run/flux-general/differential-diffusion`
- Quote: `POST https://api.doitong.com/v1/quote/flux-general/differential-diffusion`
- Docs page: https://doitong.com/ms/developers/models/flux-general/differential-diffusion

## Pricing

Price: **$0.138 / 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.138 = 138 API credits (1 image × 138 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/flux-general/differential-diffusion` 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 |  |  | Prompt yang memandu penjanaan imej. |
| `image_size` |  | object {width, height} \| enum (string) | no |  | `square_hd`, `square`, `portrait_4_3`, `portrait_16_9`, `landscape_4_3`, `landscape_16_9` | Dimensi imej yang dijana. |
| `num_inference_steps` |  | integer | no | `28` | 1 – 50 | Bilangan langkah inferens yang perlu dijalankan. |
| `seed` |  | integer \| null | no |  |  | Seed untuk imej yang boleh dihasilkan semula: prompt dan seed yang sama menghasilkan imej yang sama apabila versi model tidak berubah. |
| `loras` |  | array of object {path, scale} | no | `[]` |  | LoRA yang kesan gabungannya menghasilkan imej yang dijana, tanpa had pada bilangan yang dibekalkan. |
| `loras[].path` |  | string | yes |  |  | Lokasi berat LoRA, yang dinyatakan sebagai URL atau laluan. |
| `loras[].scale` |  | object \| number | no | `1` |  | Penskalaan yang digunakan pada pemberat LoRA sebelum digabungkan ke dalam model asas. Bekalkan kamus dalam bentuk {"layer_name":layer_scale} untuk menetapkan skala lapisan individu; lapisan yang tidak dinyatakan menggunakan 1.0. |
| `control_loras` |  | array of object {path, scale, control_image_url, preprocess} | no | `[]` |  | LoRA imej kawalan yang digabungkan ke dalam konfigurasi gabungan untuk menjana imej akhir; bilangan yang dibekalkan tidak terhad. |
| `control_loras[].path` |  | string | yes |  |  | Lokasi berat LoRA, yang dinyatakan sebagai URL atau laluan. |
| `control_loras[].scale` |  | object \| number | no | `1` |  | Penskalaan yang digunakan pada pemberat LoRA sebelum digabungkan ke dalam model asas. Bekalkan kamus dalam bentuk {"layer_name":layer_scale} untuk menetapkan skala lapisan individu; lapisan yang tidak dinyatakan menggunakan 1.0. |
| `control_loras[].control_image_url` |  | string (image URL) | yes |  |  | URL imej yang membekalkan imej kawalan. |
| `control_loras[].preprocess` |  | enum (string) | no | `None` | `canny`, `depth`, `None` | Kaedah prapemprosesan yang digunakan pada imej yang dibekalkan. |
| `controlnets` |  | array of object {path, config_url, variant, control_image_url, mask_image_url, mask_threshold, conditioning_scale, start_percentage, end_percentage} | no | `[]` |  | Konfigurasi ControlNet untuk penjanaan imej, kini terhad kepada satu ControlNet. |
| `controlnets[].path` |  | string | yes |  |  | Lokasi pemberat ControlNet, dinyatakan sebagai URL atau laluan. |
| `controlnets[].config_url` |  | string \| null | no |  |  | URL pilihan yang menunjuk ke fail config.json ControlNet. |
| `controlnets[].variant` |  | string \| null | no |  |  | Varian pilihan untuk digunakan dengan kunci repositori Hugging Face. |
| `controlnets[].control_image_url` |  | string (image URL) | yes |  |  | URL imej yang membekalkan imej kawalan. |
| `controlnets[].mask_image_url` |  | string (image URL) | no |  |  | URL topeng yang dikaitkan dengan imej kawalan. |
| `controlnets[].mask_threshold` |  | number | no | `0.5` | 0.01 – 0.99 | Nilai ambang topeng. |
| `controlnets[].conditioning_scale` |  | number | no | `1` | 0 – 2 | Penskalaan yang digunakan pada pemberat ControlNet sebelum digabungkan ke dalam model asas. |
| `controlnets[].start_percentage` |  | number | no | `0` | 0 – 1 | Peratusan jumlah langkah masa apabila ControlNet mula mempengaruhi penjanaan imej. |
| `controlnets[].end_percentage` |  | number | no | `1` | 0 – 1 | Peratusan jumlah langkah masa apabila ControlNet berhenti mempengaruhi penjanaan imej. |
| `controlnet_unions` |  | array of object {path, config_url, variant, controls} | no | `[]` |  | Konfigurasi gabungan ControlNet untuk penjanaan imej, tertakluk kepada sekatan satu ControlNet semasa. |
| `controlnet_unions[].path` |  | string | yes |  |  | Lokasi pemberat ControlNet, dinyatakan sebagai URL atau laluan. |
| `controlnet_unions[].config_url` |  | string \| null | no |  |  | URL pilihan yang menunjuk ke fail config.json ControlNet. |
| `controlnet_unions[].variant` |  | string \| null | no |  |  | Varian pilihan untuk digunakan dengan kunci repositori Hugging Face. |
| `controlnet_unions[].controls` |  | array of object {control_image_url, mask_image_url, control_mode, conditioning_scale, mask_threshold, start_percentage, end_percentage} | yes |  |  | Imej kawalan dan mod berkaitan yang dibekalkan kepada ControlNet. |
| `controlnet_unions[].controls[].control_image_url` |  | string (image URL) | yes |  |  | URL imej yang membekalkan imej kawalan. |
| `controlnet_unions[].controls[].mask_image_url` |  | string (image URL) | no |  |  | URL topeng yang dikaitkan dengan imej kawalan. |
| `controlnet_unions[].controls[].control_mode` |  | enum (string) | yes |  | `canny`, `tile`, `depth`, `blur`, `pose`, `gray`, `low-quality` | Mod kawalan yang digunakan oleh Flux Controlnet Union. Pilihan: canny membimbing penjanaan dengan tepi; tile membimbingnya dengan jubin; depth membimbingnya dengan peta kedalaman skala kelabu; blur mengaburkan imej; pose membimbing penjanaan dengan pose imej; gray menjadikan imej skala kelabu; low-quality menghasilkan versi imej berkualiti rendah. |
| `controlnet_unions[].controls[].conditioning_scale` |  | number | no | `1` | 0 – 2 | Penskalaan yang digunakan pada pemberat ControlNet sebelum digabungkan ke dalam model asas. |
| `controlnet_unions[].controls[].mask_threshold` |  | number | no | `0.5` | 0.01 – 0.99 | Nilai ambang topeng. |
| `controlnet_unions[].controls[].start_percentage` |  | number | no | `0` | 0 – 1 | Peratusan jumlah langkah masa apabila ControlNet mula mempengaruhi penjanaan imej. |
| `controlnet_unions[].controls[].end_percentage` |  | number | no | `1` | 0 – 1 | Peratusan jumlah langkah masa apabila ControlNet berhenti mempengaruhi penjanaan imej. |
| `ip_adapters` |  | array of object {path, subfolder, weight_name, image_encoder_path, image_encoder_subfolder, image_encoder_weight_name, image_url, mask_image_url, mask_threshold, scale} | no | `[]` |  | IP-Adapter yang digunakan semasa penjanaan imej. |
| `ip_adapters[].path` |  | string | yes |  |  | Lokasi IP-Adapter di Hugging Face. |
| `ip_adapters[].subfolder` |  | string \| null | no |  |  | Subfolder yang mengandungi pemberat ip_adapter. |
| `ip_adapters[].weight_name` |  | string \| null | no |  |  | Nama fail safetensors untuk pemberat IP-Adapter. |
| `ip_adapters[].image_encoder_path` |  | string | yes |  |  | Lokasi pengekod imej IP-Adapter, seperti 'openai/clip-vit-large-patch14'. |
| `ip_adapters[].image_encoder_subfolder` |  | string \| null | no |  |  | Subfolder yang mengandungi pemberat pengekod imej. |
| `ip_adapters[].image_encoder_weight_name` |  | string \| null | no |  |  | Nama pengekod imej. |
| `ip_adapters[].image_url` |  | string (image URL) | yes |  |  | URL imej penentuan keadaan yang dibekalkan kepada IP-Adapter. |
| `ip_adapters[].mask_image_url` |  | string (image URL) \| null | no |  |  | URL topeng yang dikaitkan dengan imej kawalan. |
| `ip_adapters[].mask_threshold` |  | number | no | `0.5` | 0.01 – 0.99 | Nilai ambang topeng. |
| `ip_adapters[].scale` |  | number | yes |  |  | Faktor penskalaan IP-Adapter. |
| `easycontrols` |  | array of object {control_method_url, scale, image_url, image_control_type} | no | `[]` |  | Input EasyControl yang digunakan semasa penjanaan imej. |
| `easycontrols[].control_method_url` |  | string | yes |  |  | URL pemberat safetensor kaedah kawalan, atau pengecam yang disokong: `canny`, `depth`, `hedsketch`, `inpainting`, `pose`, `seg`, `subject`, `ghibli`. |
| `easycontrols[].scale` |  | number | no | `1` | 0 – 2 | Faktor penskalaan kaedah kawalan. |
| `easycontrols[].image_url` |  | string (image URL) | yes |  |  | URL imej yang membekalkan input kawalan. |
| `easycontrols[].image_control_type` |  | enum (string) | yes |  | `subject`, `spatial` | Mod kawalan imej; menerima sama ada `spatial` atau `subject`. |
| `fill_image` |  | object {fill_image_url} \| null | no |  |  | Imej input yang membimbing penjanaan dan boleh membekalkan kandungan untuk kawasan bertopeng. |
| `fill_image.fill_image_url` |  | string (image URL) \| array of image URL | no | `[]` |  | URL imej untuk diisi melalui prompting redux. |
| `guidance_scale` |  | number | no | `3.5` | 0 – 20 | Kekuatan pematuhan prompt untuk pemilihan imej, dinyatakan sebagai CFG (Classifier Free Guidance). |
| `real_cfg_scale` |  | number | no | `3.5` | 0 – 5 | Kekuatan pematuhan prompt untuk pemilihan imej, dinyatakan sebagai CFG (Classifier Free Guidance). |
| `use_real_cfg` |  | boolean | no | `false` |  | Suis CFG klasik, didayakan secara automatik dengan XLabs IP-Adapter v1. Tingkah laku panduan sepadan dengan model seperti SD1.5 dan SDXL. |
| `use_cfg_zero` |  | boolean | no | `false` |  | Mendayakan pensampelan permulaan CFG-zero, yang diterangkan di https://arxiv.org/abs/2503.18886. |
| `num_images` | `num_outputs` | integer | no | `1` | 1 – 10 | Tetapkan bilangan imej untuk dijana; pilihan ini ditetapkan kepada 1 apabila output distrim. |
| `enable_safety_checker` |  | boolean | no | `true` |  | Pemeriksaan keselamatan, yang mengembalikan imej hitam menggantikan imej yang ditandai tidak selamat. Nilai true mendayakan pemeriksaan; false melumpuhkannya hanya untuk akaun yang dibenarkan, manakala permintaan tanpa kebenaran tetap diperiksa. |
| `reference_image_url` |  | string (image URL) | no |  |  | URL imej yang digunakan untuk panduan Reference-Only. |
| `reference_strength` |  | number | no | `0.65` | -3 – 3 | Pengaruh imej rujukan semasa penjanaan reference_only; tanpa imej rujukan yang dibekalkan, tetapan kekuatan ini tidak berkesan. |
| `reference_start` |  | number | no | `0` | 0 – 1 | Titik mula panduan rujukan, dinyatakan sebagai peratusan semua langkah masa. |
| `reference_end` |  | number | no | `1` | 0 – 1 | Titik akhir panduan rujukan, dinyatakan sebagai peratusan semua langkah masa. |
| `base_shift` |  | number | no | `0.5` | 0.01 – 5 | Anjakan asas yang digunakan pada langkah masa berjadual. |
| `max_shift` |  | number | no | `1.15` | 0.01 – 5 | Anjakan maksimum yang digunakan pada langkah masa berjadual. |
| `output_format` |  | enum (string) | no | `png` | `jpeg`, `png` | Format fail untuk imej yang terhasil. |
| `use_beta_schedule` |  | boolean | no | `false` |  | Mengawal sama ada sigma beta digunakan. |
| `sigma_schedule` |  | string \| null | no |  |  | Jadual sigma yang digunakan semasa penyahbisingan. |
| `scheduler` |  | enum (string) | no | `euler` | `euler`, `dpmpp_2m` | Penjadual yang digunakan semasa penyahbisingan. |
| `negative_prompt` |  | string | no | `` |  | Prompt negatif yang diproses dengan NAG secara lalai untuk menghalang ciri tidak diingini yang dinyatakan dalam imej yang dijana. |
| `nag_scale` |  | number | no | `3` | ≤ 10, > 1 | Pengelakan prompt negatif dikawal oleh skala NAG: meningkatkannya menjadikan imej yang dijana kurang menyerupai penerangan negatif. |
| `nag_tau` |  | number | no | `2.5` | > 0 | Tetapan tau NAG untuk penormalan keadaan tersembunyi; disyorkan supaya tidak mengubahnya. Menaikkannya melemahkan penormalan dan berisiko menyebabkan penyimpangan tidak dijangka daripada imej asal. |
| `nag_alpha` |  | number | no | `0.25` | ≤ 1, > 0 | Alfa NAG menetapkan sejauh mana prompt positif mengubah hala panduan dinormalkan yang menggabungkan prompt positif dan negatif. Pemberatan akhir ini memberikan prompt positif lebih banyak pengaruh pada tetapan rendah dan mengurangkan pengubahan hala pada tetapan tinggi. |
| `nag_end` |  | number | no | `0.25` | ≤ 1, > 0 | Pemotongan NAG yang dinyatakan sebagai perkadaran langkah penjanaan. Pemproses perhatian asal FLUX mengambil alih selepas NAG berjalan untuk perkadaran awal tersebut. |
| `image_url` | `image` | string (image URL) | yes |  |  | URL imej yang membekalkan imej awal. |
| `change_map_image_url` |  | string (image URL) | yes |  |  | URL yang menunjuk ke peta perubahan. |
| `strength` |  | number | no | `0.85` | 0.01 – 1 | Kekuatan resapan berbeza, merangkumi pengekalan imej asal pada 0.0 hingga penghasilan semula sepenuhnya pada 1.0. |

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

A fuller example:

```json
{
  "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field",
  "image_url": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg",
  "change_map_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/flux-general/differential-diffusion?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",
    "image_url": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg",
    "change_map_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/flux-general/differential-diffusion?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",
    "image_url": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg",
    "change_map_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 = {
    "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field",
    "image_url": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg",
    "change_map_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/flux-general/differential-diffusion", 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": "flux-general/differential-diffusion",
      "input": {
        "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field",
        "image_url": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg",
        "change_map_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": "flux-general/differential-diffusion",
  "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": 138,
    "usd": "0.138",
    "charged": 138,
    "refunded": 0
  },
  "input": {
    "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field",
    "image_url": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg",
    "change_map_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",
        "width": 1024,
        "height": 768,
        "content_type": "image/jpeg"
      }
    ],
    "timings": {},
    "seed": 42,
    "has_nsfw_concepts": [
      false
    ],
    "prompt": "string"
  },
  "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, width, height, content_type} | Maklumat fail untuk imej yang dijana. |
| `timings` | object |  |
| `seed` | integer | Seed penjanaan imej, termasuk nilai yang dipilih secara rawak jika input tidak membekalkan seed; jika tidak, nilai yang dibekalkan diulang. |
| `has_nsfw_concepts` | array of boolean | Menunjukkan sama ada konsep NSFW muncul dalam imej yang dijana. |
| `prompt` | string | Prompt yang digunakan semasa penjanaan imej. |

## Related models

- [FLUX.1 \[dev\] with Controlnets and Loras](https://doitong.com/developers/models/flux-general.md) (`flux-general`): $0.30 / image
- [FLUX.1 \[dev\] with Controlnets and Loras · Image to Image](https://doitong.com/developers/models/flux-general/image-to-image.md) (`flux-general/image-to-image`): $0.15 / image
- [FLUX.1 \[dev\] with Controlnets and Loras · Inpainting](https://doitong.com/developers/models/flux-general/inpainting.md) (`flux-general/inpainting`): $0.192 / image
- [FLUX.1 \[dev\] with Controlnets and Loras · Rf Inversion](https://doitong.com/developers/models/flux-general/rf-inversion.md) (`flux-general/rf-inversion`): $0.025 / 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

## Links

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