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

> Urejanje slike FLUX.1 [dev] z zemljevidom sprememb, ki določa jakost sprememb posameznih območij

Izvorno sliko preoblikuje po območjih in z zemljevidom sprememb določa, koliko se posamezno območje spremeni. Zahteva `prompt`, `image_url` in `change_map_image_url`. Sprejme tudi LoRA, ControlNet, IP-Adapter in referenčno sliko. `num_inference_steps` sega od 1 do 50, `num_images` pa do 10; izhod je png ali 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/sl/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 |  |  | Poziv, ki usmerja generiranje slike. |
| `image_size` |  | object {width, height} \| enum (string) | no |  | `square_hd`, `square`, `portrait_4_3`, `portrait_16_9`, `landscape_4_3`, `landscape_16_9` | Dimenzije generirane slike. |
| `num_inference_steps` |  | integer | no | `28` | 1 – 50 | Število korakov sklepanja, ki jih je treba izvesti. |
| `seed` |  | integer \| null | no |  |  | Seed za ponovljive slike: enak poziv in seed ustvarita enako sliko, če različica modela ostane nespremenjena. |
| `loras` |  | array of object {path, scale} | no | `[]` |  | LoRA-ji, katerih skupni učinek ustvari generirano sliko; število podanih LoRA-jev ni omejeno. |
| `loras[].path` |  | string | yes |  |  | Lokacija uteži LoRA, navedena kot URL ali pot. |
| `loras[].scale` |  | object \| number | no | `1` |  | Skaliranje, uporabljeno za uteži LoRA, preden se združijo z osnovnim modelom. Za nastavitev posameznih plasti podaj slovar oblike {"layer_name":layer_scale}; nedefinirane plasti uporabijo 1.0. |
| `control_loras` |  | array of object {path, scale, control_image_url, preprocess} | no | `[]` |  | LoRA-ji kontrolne slike, združeni v skupno konfiguracijo za generiranje končne slike; število je neomejeno. |
| `control_loras[].path` |  | string | yes |  |  | Lokacija uteži LoRA, navedena kot URL ali pot. |
| `control_loras[].scale` |  | object \| number | no | `1` |  | Skaliranje, uporabljeno za uteži LoRA, preden se združijo z osnovnim modelom. Za nastavitev posameznih plasti podaj slovar oblike {"layer_name":layer_scale}; nedefinirane plasti uporabijo 1.0. |
| `control_loras[].control_image_url` |  | string (image URL) | yes |  |  | URL slike, ki zagotavlja kontrolno sliko. |
| `control_loras[].preprocess` |  | enum (string) | no | `None` | `canny`, `depth`, `None` | Metoda predprocesiranja, uporabljena za podano sliko. |
| `controlnets` |  | array of object {path, config_url, variant, control_image_url, mask_image_url, mask_threshold, conditioning_scale, start_percentage, end_percentage} | no | `[]` |  | Konfiguracija ControlNet za generiranje slike, trenutno omejena na en ControlNet. |
| `controlnets[].path` |  | string | yes |  |  | Lokacija uteži ControlNet, navedena kot URL ali pot. |
| `controlnets[].config_url` |  | string \| null | no |  |  | Izbirni URL do datoteke config.json za ControlNet. |
| `controlnets[].variant` |  | string \| null | no |  |  | Izbirna različica za uporabo s ključem repozitorija Hugging Face. |
| `controlnets[].control_image_url` |  | string (image URL) | yes |  |  | URL slike, ki zagotavlja kontrolno sliko. |
| `controlnets[].mask_image_url` |  | string (image URL) | no |  |  | URL maske, povezan s kontrolno sliko. |
| `controlnets[].mask_threshold` |  | number | no | `0.5` | 0.01 – 0.99 | Vrednost praga maske. |
| `controlnets[].conditioning_scale` |  | number | no | `1` | 0 – 2 | Skaliranje uteži ControlNet, preden se združijo z osnovnim modelom. |
| `controlnets[].start_percentage` |  | number | no | `0` | 0 – 1 | Odstotek skupnih časovnih korakov, pri katerem ControlNet začne vplivati na generiranje slike. |
| `controlnets[].end_percentage` |  | number | no | `1` | 0 – 1 | Odstotek skupnih časovnih korakov, pri katerem ControlNet preneha vplivati na generiranje slike. |
| `controlnet_unions` |  | array of object {path, config_url, variant, controls} | no | `[]` |  | Konfiguracija unije ControlNet za generiranje slike, ob upoštevanju trenutne omejitve enega ControlNeta. |
| `controlnet_unions[].path` |  | string | yes |  |  | Lokacija uteži ControlNet, navedena kot URL ali pot. |
| `controlnet_unions[].config_url` |  | string \| null | no |  |  | Izbirni URL do datoteke config.json za ControlNet. |
| `controlnet_unions[].variant` |  | string \| null | no |  |  | Izbirna različica za uporabo s ključem repozitorija 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 |  |  | Kontrolne slike in povezani načini, poslani ControlNetu. |
| `controlnet_unions[].controls[].control_image_url` |  | string (image URL) | yes |  |  | URL slike, ki zagotavlja kontrolno sliko. |
| `controlnet_unions[].controls[].mask_image_url` |  | string (image URL) | no |  |  | URL maske, povezan s kontrolno sliko. |
| `controlnet_unions[].controls[].control_mode` |  | enum (string) | yes |  | `canny`, `tile`, `depth`, `blur`, `pose`, `gray`, `low-quality` | Kontrolni način, ki ga uporablja Flux Controlnet Union. Možnosti: canny usmerja generiranje z robovi; tile s ploščicami; depth z sivinskim globinskim zemljevidom; blur zamegli sliko; pose usmerja generiranje s pozo slike; gray spremeni sliko v sivinsko; low-quality ustvari različico slike nizke kakovosti. |
| `controlnet_unions[].controls[].conditioning_scale` |  | number | no | `1` | 0 – 2 | Skaliranje uteži ControlNet, preden se združijo z osnovnim modelom. |
| `controlnet_unions[].controls[].mask_threshold` |  | number | no | `0.5` | 0.01 – 0.99 | Vrednost praga maske. |
| `controlnet_unions[].controls[].start_percentage` |  | number | no | `0` | 0 – 1 | Odstotek skupnih časovnih korakov, pri katerem ControlNet začne vplivati na generiranje slike. |
| `controlnet_unions[].controls[].end_percentage` |  | number | no | `1` | 0 – 1 | Odstotek skupnih časovnih korakov, pri katerem ControlNet preneha vplivati na generiranje slike. |
| `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, uporabljen med generiranjem slike. |
| `ip_adapters[].path` |  | string | yes |  |  | Lokacija IP-Adapterja na Hugging Face. |
| `ip_adapters[].subfolder` |  | string \| null | no |  |  | Podmapa, ki vsebuje uteži ip_adapter. |
| `ip_adapters[].weight_name` |  | string \| null | no |  |  | Ime datoteke Safetensors za uteži IP-Adapterja. |
| `ip_adapters[].image_encoder_path` |  | string | yes |  |  | Lokacija kodirnika slike IP-Adapterja, na primer 'openai/clip-vit-large-patch14'. |
| `ip_adapters[].image_encoder_subfolder` |  | string \| null | no |  |  | Podmapa, ki vsebuje uteži kodirnika slike. |
| `ip_adapters[].image_encoder_weight_name` |  | string \| null | no |  |  | Ime kodirnika slike. |
| `ip_adapters[].image_url` |  | string (image URL) | yes |  |  | URL pogojne slike, poslane IP-Adapterju. |
| `ip_adapters[].mask_image_url` |  | string (image URL) \| null | no |  |  | URL maske, povezan s kontrolno sliko. |
| `ip_adapters[].mask_threshold` |  | number | no | `0.5` | 0.01 – 0.99 | Vrednost praga maske. |
| `ip_adapters[].scale` |  | number | yes |  |  | Faktor skaliranja IP-Adapterja. |
| `easycontrols` |  | array of object {control_method_url, scale, image_url, image_control_type} | no | `[]` |  | Vhodi EasyControl, uporabljeni med generiranjem slike. |
| `easycontrols[].control_method_url` |  | string | yes |  |  | URL uteži safetensor metode nadzora ali podprt identifikator: `canny`, `depth`, `hedsketch`, `inpainting`, `pose`, `seg`, `subject`, `ghibli`. |
| `easycontrols[].scale` |  | number | no | `1` | 0 – 2 | Faktor skaliranja metode nadzora. |
| `easycontrols[].image_url` |  | string (image URL) | yes |  |  | URL slike, ki zagotavlja kontrolni vhod. |
| `easycontrols[].image_control_type` |  | enum (string) | yes |  | `subject`, `spatial` | Način nadzora slike; sprejme `spatial` ali `subject`. |
| `fill_image` |  | object {fill_image_url} \| null | no |  |  | Vhodna slika, ki usmerja generiranje in lahko zagotovi vsebino za maskirana območja. |
| `fill_image.fill_image_url` |  | string (image URL) \| array of image URL | no | `[]` |  | URL-ji slik za zapolnjevanje z uporabo pozivanja redux. |
| `guidance_scale` |  | number | no | `3.5` | 0 – 20 | Jakost upoštevanja poziva pri izbiri slike, izražena kot CFG (Classifier Free Guidance). |
| `real_cfg_scale` |  | number | no | `3.5` | 0 – 5 | Jakost upoštevanja poziva pri izbiri slike, izražena kot CFG (Classifier Free Guidance). |
| `use_real_cfg` |  | boolean | no | `false` |  | Klasično stikalo CFG, samodejno omogočeno z XLabs IP-Adapter v1. Vedenje vodenja se ujema z modeli, kot sta SD1.5 in SDXL. |
| `use_cfg_zero` |  | boolean | no | `false` |  | Omogoči vzorčenje z inicializacijo CFG-zero, opisano na https://arxiv.org/abs/2503.18886. |
| `num_images` | `num_outputs` | integer | no | `1` | 1 – 10 | Nastavi število slik za generiranje; pri pretočnem izhodu je ta izbira vedno 1. |
| `enable_safety_checker` |  | boolean | no | `true` |  | Varnostno preverjanje, ki namesto slik, označenih kot nevarne, vrne črne slike. Vrednost true omogoči preverjanje; false ga onemogoči samo za pooblaščene račune, zahteve brez pooblastila pa se preverjajo ne glede na to. |
| `reference_image_url` |  | string (image URL) | no |  |  | URL slike, uporabljen za vodenje Reference-Only. |
| `reference_strength` |  | number | no | `0.65` | -3 – 3 | Vpliv referenčne slike med generiranjem reference_only; brez podane referenčne slike ta nastavitev moči nima učinka. |
| `reference_start` |  | number | no | `0` | 0 – 1 | Začetna točka referenčnega vodenja, izražena kot odstotek vseh časovnih korakov. |
| `reference_end` |  | number | no | `1` | 0 – 1 | Končna točka referenčnega vodenja, izražena kot odstotek vseh časovnih korakov. |
| `base_shift` |  | number | no | `0.5` | 0.01 – 5 | Osnovni premik, uporabljen za načrtovane časovne korake. |
| `max_shift` |  | number | no | `1.15` | 0.01 – 5 | Največji premik, uporabljen za načrtovane časovne korake. |
| `output_format` |  | enum (string) | no | `png` | `jpeg`, `png` | Oblika datoteke končne slike. |
| `use_beta_schedule` |  | boolean | no | `false` |  | Določa, ali naj se uporabijo beta sigme. |
| `sigma_schedule` |  | string \| null | no |  |  | Razpored sigm, uporabljen med odstranjevanjem šuma. |
| `scheduler` |  | enum (string) | no | `euler` | `euler`, `dpmpp_2m` | Razporejevalnik, uporabljen med odstranjevanjem šuma. |
| `negative_prompt` |  | string | no | `` |  | Negativni poziv, ki se privzeto obdela z NAG za zmanjšanje navedenih neželenih značilnosti v generiranih slikah. |
| `nag_scale` |  | number | no | `3` | ≤ 10, > 1 | Izogibanje negativnemu pozivu, nadzorovano z lestvico NAG: višja vrednost naredi generirano sliko manj podobno negativnemu opisu. |
| `nag_tau` |  | number | no | `2.5` | > 0 | Nastavitev NAG tau za normalizacijo skritega stanja; priporočamo, da jo pustiš nespremenjeno. Višja vrednost oslabi normalizacijo in lahko povzroči nepričakovane odmike od izvirne slike. |
| `nag_alpha` |  | number | no | `0.25` | ≤ 1, > 0 | NAG alpha določa, koliko pozitivni poziv preusmeri normalizirano vodenje, ki združuje pozitivni in negativni poziv. Ta končna utež pozitivnemu pozivu pri nižjih nastavitvah daje večji vpliv, pri višjih pa zmanjša preusmerjanje. |
| `nag_end` |  | number | no | `0.25` | ≤ 1, > 0 | Prag NAG, izražen kot delež korakov generiranja. Izvirni procesorji pozornosti FLUX prevzamejo nadzor, ko NAG obdela ta začetni delež. |
| `image_url` | `image` | string (image URL) | yes |  |  | URL slike, ki zagotavlja začetno sliko. |
| `change_map_image_url` |  | string (image URL) | yes |  |  | URL do zemljevida sprememb. |
| `strength` |  | number | no | `0.85` | 0.01 – 1 | Moč diferencialne difuzije, od ohranitve izvirnika pri 0.0 do popolne ponovne izdelave pri 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} | Podatki o datotekah ustvarjenih slik. |
| `timings` | object |  |
| `seed` | integer | Seme za generiranje slike, vključno z naključno izbrano vrednostjo, če vhod ni vseboval semena; sicer ponovi podano vrednost. |
| `has_nsfw_concepts` | array of boolean | Označuje, ali se v generiranih slikah pojavljajo koncepti NSFW. |
| `prompt` | string | Poziv, uporabljen pri generiranju slike. |

## 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
