# Stable Diffusion with LoRAs API

> Teksto į vaizdą generavimas su bet kuriuo Stable Diffusion baziniu modeliu bei LoRA, įterpiniais, ControlNets ir IP adapteriais

Generuoja vaizdus iš tekstinio raginio naudodamas bazinį modelį, nurodytą URL arba HuggingFace ID formatu per `model_name`. Galima sujungti kelias `loras`, taip pat palaikomi įterpiniai, ControlNets, IP adapteriai ir IC Light įvestys. Atrankos parinktys apima daugybę planuoklių ir nuo 1 iki 150 žingsnių. Generuojama nuo 1 iki 8 vaizdų png arba jpeg formatu.

- Model id: `lora`
- Made by: Open model
- Category: Text to Image
- Output: image
- Estimated price per run: $0.057 / image (cheapest run $0.057 (57 API credits))
- Run: `POST https://api.doitong.ru/v1/run/lora`
- Quote: `POST https://api.doitong.ru/v1/quote/lora`
- Docs page: https://doitong.com/lt/developers/models/lora

## Pricing

Price: **$0.057 / 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.057 = 57 API credits (1 image × 57 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.ru/v1/quote/lora` 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 |
|---|---|---|---|---|---|---|
| `model_name` |  | string | yes |  |  | Vaizdui generuoti naudojamas bazinis modelis, nurodomas URL arba HuggingFace ID. |
| `unet_name` |  | string \| null | no |  |  | Pasirinktinis U-Net pasirinkimas vaizdams generuoti; pateikite jo HuggingFace ID arba URL. |
| `variant` |  | string \| null | no |  |  | HuggingFace modelio varianto pasirinkimas; 'fp16' yra vienas iš pavyzdžių. |
| `prompt` |  | string | yes |  |  | Kuo išsamiau aprašykite norimą sugeneruoti vaizdą, kad gautumėte geriausius rezultatus. |
| `negative_prompt` |  | string | no | `` |  | Neigiamas raginys, nurodantis nepageidaujamas vaizdo detales. Juo galima pašalinti spalvas, objektus, aplinką, smulkesnius bruožus ir savybes, pvz., ūsus, suliejimą arba mažą raišką. |
| `prompt_weighting` |  | boolean | no | `false` |  | Raginio svorių perjungiklis: true pašalina 77 žetonų limitą naudodamas įdėtųjų vektorių vidurkinimą ir įjungia svorių sintaksę. |
| `loras` |  | array of object {path, scale} | no | `[]` |  | LoRA, kurių bendras poveikis sukuria generuojamą vaizdą; jų skaičius neribojamas. |
| `loras[].path` |  | string | yes |  |  | LoRA svorių vieta, nurodyta kaip URL arba kelias. |
| `loras[].scale` |  | number | no | `1` | 0 – 4 | Daugiklis, taikomas LoRA svoriui prieš jį sujungiant su baziniu modeliu. |
| `embeddings` |  | array of object {path, tokens} | no | `[]` |  | Generuojant vaizdą taikomi įdėtiniai vektoriai, susiejantys raginio žetonus su įdėtųjų vektorių svoriais. Šiuo metu palaikomas tik vienas įdėtinis vektorius. |
| `embeddings[].path` |  | string | yes |  |  | Įdėties svoriai, nurodyti URL arba failo keliu. |
| `embeddings[].tokens` |  | array of string \| null | no |  |  | Raginio žetonai, susieti su įdėtųjų vektorių svoriais. Jei jų nenurodysite, kiekvienam įdėtųjų vektorių failo vektoriui sukuriamas po vieną žetoną pavadinimu <s0>, <s1>, ...; naudokite susietus žetonus raginikuose. |
| `controlnets` |  | array of object {path, config_url, variant, image_url, mask_url, conditioning_scale, start_percentage, end_percentage, ip_adapter_index} | no | `[]` |  | Control net tinklai, kuriuos generuojant nurodytais laiko taškais reikia taikyti vaizdui; jų skaičius neribojamas. |
| `controlnets[].path` |  | string | yes |  |  | ControlNet svorių vieta, nurodoma kaip URL arba kelias. |
| `controlnets[].config_url` |  | string \| null | no |  |  | Pasirinktinis URL į ControlNet config.json failą. |
| `controlnets[].variant` |  | string \| null | no |  |  | Pasirinktinis variantas, naudojamas su Hugging Face saugyklos raktu. |
| `controlnets[].image_url` |  | string (image URL) | yes |  |  | Vaizdo URL, pateikiamas kaip ControlNet įvestis. |
| `controlnets[].mask_url` |  | string (image URL) \| null | no |  |  | ControlNet kaukė, kurią pateikus jos dydis turi sutapti su valdomo vaizdo dydžiu; plotis ir aukštis turi dalytis iš 32. |
| `controlnets[].conditioning_scale` |  | number | no | `1` | 0 – 2 | ControlNet svoriams taikomas mastelis prieš juos suliejant su baziniu modeliu. |
| `controlnets[].start_percentage` |  | number | no | `0` | 0 – 1 | Bendrų laiko žingsnių procentinė dalis, nuo kurios ControlNet pradeda veikti vaizdo generavimą. |
| `controlnets[].end_percentage` |  | number | no | `1` | 0 – 1 | Bendrų laiko žingsnių procentinė dalis, kuriai pasiekus ControlNet nustoja veikti vaizdo generavimą. |
| `controlnets[].ip_adapter_index` |  | integer \| null | no |  |  | IP adapterio pasirinkimas pagal indeksą, skirtas InstantID ControlNet; kitiems ControlNet tinklams šio nustatymo nereikia. |
| `controlnet_guess_mode` |  | boolean | no | `false` |  | Kai reikšmė true, ControlNet taikymas apribojamas sąlyginėmis prognozėmis. |
| `ip_adapter` |  | array of object {ip_adapter_image_url, ip_adapter_mask_url, path, model_subfolder, weight_name, insight_face_model_path, scale, scale_json, unconditional_noising_factor, image_projection_shortcut} | no | `[]` |  | IP adapteriai, naudojami vaizdams generuoti. Pateikus bet kokius įrašus, būtinas image_encoder_path. |
| `ip_adapter[].ip_adapter_image_url` |  | string (image URL) \| array of image URL | yes |  |  | Vaizdo URL, pateikiamas kaip IP adapterio įvestis. |
| `ip_adapter[].ip_adapter_mask_url` |  | string (image URL) \| null | no |  |  | IP adapterio kaukė; ją pateikus, jos matmenys turi sutapti su adapterio vaizdo matmenimis. |
| `ip_adapter[].path` |  | string | yes |  |  | IP adapterio svorių vieta, nurodyta URL arba keliu. |
| `ip_adapter[].model_subfolder` |  | string \| null | no |  |  | IP adapterio svorių vieta, nurodyta kaip poaplankis modelio kataloge. |
| `ip_adapter[].weight_name` |  | string \| null | no |  |  | Svorių failo pavadinimas. |
| `ip_adapter[].insight_face_model_path` |  | string \| null | no |  |  | InsightFace modelio svorių vieta, nurodyta URL arba keliu. |
| `ip_adapter[].scale` |  | number | no | `1` | ≥ 0 | IP adapterio svorių mastelio koeficientas, taikomas prieš juos sujungiant su baziniu modeliu. |
| `ip_adapter[].scale_json` |  | object \| null | no |  |  | IP adapterio svorių mastelio koeficientas, taikomas prieš juos sujungiant su baziniu modeliu. |
| `ip_adapter[].unconditional_noising_factor` |  | number | no | `0` | 0 – 1 | Veiksnys, valdantis besąlyginį triukšmo pridėjimą IP adapteriui. |
| `ip_adapter[].image_projection_shortcut` |  | boolean | no | `true` |  | Vaizdo projekcijos sparčioji nuoroda; numatytoji reikšmė yra True. FaceID plus V1 modeliams naudokite False, o FaceID plus V2 modeliams – True. |
| `image_encoder_path` |  | string \| null | no |  |  | Vaizdo koduotuvas, nurodytas HTTPS URL arba Hugging Face ID; suderinamumą lemia IP-Adapter svoriai: SD1.5 naudoja image_encoder_subfolder='models/image_encoder', o h94/IP-Adapter SDXL – h94/IP-Adapter ir image_encoder_subfolder='sdxl_models/image_encoder'. Koduotuvas būtinas, kai ip_adapter turi reikšmę. |
| `image_encoder_subfolder` |  | string \| null | no |  |  | Poaplankis image_encoder_path viduje, kuriame saugomi vaizdo koduotuvo svoriai. |
| `image_encoder_weight_name` |  | string \| null | no | `pytorch_model.bin` |  | Pagal pavadinimą pasirinkite vaizdo koduotuvo svorius, skirtus vaizdams generuoti. |
| `ic_light_model_url` |  | string \| null | no |  |  | IC Light modelio URL, naudojamas generuojant vaizdus. |
| `ic_light_model_background_image_url` |  | string (image URL) \| null | no |  |  | Su modeliu suderinamas fonas IC Light vaizdui generuoti, pateikiamas kaip vaizdo URL. |
| `ic_light_image_url` |  | string (image URL) \| null | no |  |  | Įvesties vaizdo URL generavimui naudojant IC Light modelį. |
| `seed` |  | integer \| null | no |  |  | Pradinis skaičius vaizdams atkurti Stable Diffusion. Vaizdą galima tiksliai atkurti kiekvieno paleidimo metu, jei nekeičiama modelio versija, raginys ir pradinis skaičius. |
| `image_size` |  | object {width, height} \| enum (string) \| null | no | `square_hd` | `square_hd`, `square`, `portrait_4_3`, `portrait_16_9`, `landscape_4_3`, `landscape_16_9` | Išvesties vaizdo matmenys, pasirenkami iš išankstinių nuostatų arba nurodomi kaip pasirinktinis plotis ir aukštis. Abu pasirinktiniai matmenys turi dalytis iš 8. |
| `num_inference_steps` |  | integer | no | `30` | 1 – 150 | Valdo, kiek generavimo veiksmų atlieka Stable Diffusion; papildomi veiksmai gali sukurti detalesnę galutinę išvestį. |
| `guidance_scale` |  | number | no | `7.5` | 0 – 20 | Raginio laikymosi stiprumas vaizdo parinkimui, išreikštas kaip CFG (Classifier Free Guidance). |
| `clip_skip` |  | integer | no | `0` | 0 – 2 | Praleidžiama dalis vaizdo generavimo, kad atvaizdavimas būtų spartesnis, tačiau rezultatas šiek tiek skirsis. |
| `scheduler` |  | enum (string) \| null | no |  | `DPM++ 2M`, `DPM++ 2M Karras`, `DPM++ 2M SDE`, `DPM++ 2M SDE Karras`, `Euler`, `Euler A`, `Euler (trailing timesteps)`, `LCM`, `LCM (trailing timesteps)`, `DDIM`, `TCD` | Vaizdui triukšmui šalinti naudojamas planuoklis arba sempleris. |
| `timesteps` |  | object {method, array} | no | `{"array":[],"method":"default"}` |  | Triukšmo šalinimo laiko taškų tvarkaraščio perrašymas, nesuderinamas su sigmas. Be perrašo – pagal numatytuosius nustatymus – planuoklis apskaičiuoja laiko taškus iš num_inference_steps; pateikus pasirinktinį tvarkaraštį, num_inference_steps tampa nesvarbus. Perrašymui reikia, kad planuoklis palaikytų timesteps argumentą funkcijoje set_timesteps. |
| `timesteps.method` |  | enum (string) | no | `default` | `default`, `array` | Pasirinkite, kaip nustatomi laiko taškai: 'default' – numatytasis nustatymas – leidžia planuokliui naudoti `num_inference_steps`. Norėdami patys pateikti laiko taškų tvarkaraštį, pasirinkite 'array' ir įrašykite jį į `array` lauką. |
| `timesteps.array` |  | array of integer | no | `[]` |  | Laiko taškų tvarkaraštis, taikomas pasirinkus metodą 'custom'. |
| `sigmas` |  | object {method, array} | no | `{"array":[],"method":"default"}` |  | Triukšmo šalinimo sigmų tvarkaraščio perrašymas, nesuderinamas su timesteps. Be perrašo – pagal numatytuosius nustatymus – planuoklis apskaičiuoja sigmas iš num_inference_steps; pateikus pasirinktinį tvarkaraštį, num_inference_steps tampa nesvarbus. Perrašymui reikia, kad planuoklis palaikytų sigmas argumentą funkcijoje set_sigmas. |
| `sigmas.method` |  | enum (string) | no | `default` | `default`, `array` | Pasirinkite, kaip nustatomos sigmos: 'default' – numatytasis nustatymas – naudoja paties planuoklio sigmų reikšmes. Norėdami patys pateikti sigmų tvarkaraštį, pasirinkite 'custom' ir įrašykite jį į `array` lauką. |
| `sigmas.array` |  | array of number | no | `[]` |  | Sigmų tvarkaraštis, taikomas pasirinkus metodą 'custom'. |
| `prediction_type` |  | enum (string) | no | `epsilon` | `v_prediction`, `epsilon` | Pasirinkite prognozės tipą vaizdams generuoti; jei nepasirenkama kita reikšmė, naudojama `epsilon`. |
| `rescale_betas_snr_zero` |  | boolean | no | `false` |  | Valdo, ar sempleriui įjungti rescale_betas_snr_zero. |
| `image_format` |  | enum (string) | no | `png` | `jpeg`, `png` | Galutinio vaizdo failo formatas. |
| `num_images` | `num_outputs` | integer | no | `1` | 1 – 8 | Nustatykite, kiek vaizdų sukuria viena užklausa; didesnei paketai skiriama daugiau generavimo laiko. |
| `enable_safety_checker` |  | boolean | no | `false` |  | Saugos tikrintuvo aktyvinimas; true įjungia tikrinimą. |
| `tile_width` |  | integer | no | `4096` | 128 – 4,096 | Nustatykite kiekvienos plytelės dydį generuojant vaizdą. |
| `tile_height` |  | integer | no | `4096` | 128 – 4,096 | Nustatykite kiekvienos plytelės dydį generuojant vaizdą. |
| `tile_stride_width` |  | integer | no | `2048` | 64 – 2,048 | Nustatykite tarpą tarp gretimų plytelių padėčių generuojant vaizdą. |
| `tile_stride_height` |  | integer | no | `2048` | 64 – 2,048 | Nustatykite tarpą tarp gretimų plytelių padėčių generuojant vaizdą. |
| `eta` |  | number | no | `0` | 0 – 1 | Eta nustatymas, naudojamas generuojant vaizdus. |
| `debug_latents` |  | boolean | no | `false` |  | Kai reikšmė true, išsaugomi latentiniai duomenys derinimui. |
| `debug_per_pass_latents` |  | boolean | no | `false` |  | Nustatykite true, kad būtų įjungtas derinimas kiekvieno praejimo metu ir išsaugoti kiekvieno praejimo latentiniai duomenys. |

File parameters (`ic_light_model_background_image_url`, `ic_light_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
{
  "model_name": "stabilityai/stable-diffusion-xl-base-1.0",
  "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field"
}
```

A fuller example:

```json
{
  "model_name": "stabilityai/stable-diffusion-xl-base-1.0",
  "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.ru/v1/run/lora?wait=20" \
  -H "Authorization: Bearer $DOITONG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model_name": "stabilityai/stable-diffusion-xl-base-1.0",
    "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.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/lora?wait=20", {
  method: "POST",
  headers,
  body: JSON.stringify({
    "model_name": "stabilityai/stable-diffusion-xl-base-1.0",
    "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.ru/v1"
headers = {"Authorization": "Bearer " + os.environ["DOITONG_API_KEY"]}

payload = {
    "model_name": "stabilityai/stable-diffusion-xl-base-1.0",
    "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/lora", 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": "lora",
      "input": {
        "model_name": "stabilityai/stable-diffusion-xl-base-1.0",
        "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": "lora",
  "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": 57,
    "usd": "0.057",
    "charged": 57,
    "refunded": 0
  },
  "input": {
    "model_name": "stabilityai/stable-diffusion-xl-base-1.0",
    "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field"
  },
  "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
      }
    ],
    "seed": 42,
    "has_nsfw_concepts": [
      false
    ],
    "debug_latents": {
      "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
    },
    "debug_per_pass_latents": {
      "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
    }
  },
  "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.ru/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t",
    "cancel": "https://api.doitong.ru/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t/cancel"
  }
}
```

### Output fields (`output`)

| Field | Type | Description |
|---|---|---|
| `images` | array of object {url, content_type, file_name, file_size, width, height} | Sugeneruotų vaizdų failo informacija. |
| `seed` | integer | Vaizdo generavimo pradinė reikšmė, įskaitant atsitiktinai parinktą reikšmę, jei įvestyje pradinė reikšmė nenurodyta; kitu atveju kartojama pateikta reikšmė. |
| `has_nsfw_concepts` | array of boolean | Nurodo, ar sugeneruotuose vaizduose yra NSFW sąvokų. |
| `debug_latents` | object {url, content_type, file_name, file_size} \| null | Derinimui saugomi latentiniai duomenys. |
| `debug_per_pass_latents` | object {url, content_type, file_name, file_size} \| null | Derinimui saugomi kiekvieno praejimo latentiniai duomenys. |

## Related models

- [Stable Diffusion with LoRAs · Image to Image](https://doitong.com/developers/models/lora/image-to-image.md) (`lora/image-to-image`): $0.264 / image
- [Stable Diffusion with LoRAs · Inpaint](https://doitong.com/developers/models/lora/inpaint.md) (`lora/inpaint`): $0.184 / image
- [FLUX.1 \[dev\]](https://doitong.com/developers/models/flux/dev.md) (`flux/dev`): $0.025 / megapixel
- [FLUX.1 \[schnell\]](https://doitong.com/developers/models/flux/schnell.md) (`flux/schnell`): $0.003 / megapixel
- [FLUX.2 \[dev\]](https://doitong.com/developers/models/flux-2.md) (`flux-2`): $0.012 / megapixel
- [FLUX.2 \[pro\]](https://doitong.com/developers/models/flux-2-pro.md) (`flux-2-pro`): $0.015 / megapixel of output image
- [GPT Image 2.5 Text to Image](https://doitong.com/developers/models/openai/gpt-image-2.5/flare/text-to-image.md) (`openai/gpt-image-2.5/flare/text-to-image`): from $0.008 / image
- [Ideogram V4.5](https://doitong.com/developers/models/ideogram/v4.5.md) (`ideogram/v4.5`): from $0.03 / image

## Links

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