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

> FLUX.1 [dev] tekst-til-billede med LoRAs, ControlNets, IP-Adapters, EasyControl og styring via referencebillede

Genererer billeder ud fra en `prompt` med flere conditioning-metoder: `loras`, `control_loras`, `controlnets`, `controlnet_unions`, `ip_adapters` og `easycontrols` samt `fill_image` til maskerede områder. Den tager også en `reference_image_url`, negativ prompt og et valg mellem euler- eller dpmpp_2m-scheduler. Op til 10 billeder pr. kald i png- eller jpeg-format.

- Model id: `flux-general`
- Made by: Black Forest Labs
- Category: Text to Image
- Output: image
- Estimated price per run: $0.30 / image (cheapest run $0.30 (300 API credits))
- Run: `POST https://api.doitong.ru/v1/run/flux-general`
- Quote: `POST https://api.doitong.ru/v1/quote/flux-general`
- Docs page: https://doitong.com/da/developers/models/flux-general

## Pricing

Price: **$0.30 / 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.30 = 300 API credits (1 image × 300 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/flux-general` 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, der styrer billedgenerering. |
| `image_size` |  | object {width, height} \| enum (string) | no |  | `square_hd`, `square`, `portrait_4_3`, `portrait_16_9`, `landscape_4_3`, `landscape_16_9` | Dimensioner for det genererede billede. |
| `num_inference_steps` |  | integer | no | `28` | 1 – 50 | Antal inferenstrin, der skal køres. |
| `seed` |  | integer \| null | no |  |  | Seed til reproducerbare billeder: En identisk prompt og seed producerer et identisk billede, når modelversionen er uændret. |
| `loras` |  | array of object {path, scale} | no | `[]` |  | LoRA'er, hvis kombinerede effekt producerer det genererede billede, uden begrænsning på antallet, du angiver. |
| `loras[].path` |  | string | yes |  |  | Placering af LoRA-vægtene, angivet som en URL eller sti. |
| `loras[].scale` |  | object \| number | no | `1` |  | Skalering anvendt på LoRA-vægte, før de flettes ind i basismodellen. Angiv en ordbog i formen {"layer_name":layer_scale} for at indstille individuelle lagskaleringer; lag, der ikke er angivet, bruger 1.0. |
| `control_loras` |  | array of object {path, scale, control_image_url, preprocess} | no | `[]` |  | Kontrolbilledets LoRA'er flettet til en kombineret konfiguration til generering af det endelige billede; antallet, der angives, er ubegrænset. |
| `control_loras[].path` |  | string | yes |  |  | Placering af LoRA-vægtene, angivet som en URL eller sti. |
| `control_loras[].scale` |  | object \| number | no | `1` |  | Skalering anvendt på LoRA-vægte, før de flettes ind i basismodellen. Angiv en ordbog i formen {"layer_name":layer_scale} for at indstille individuelle lagskaleringer; lag, der ikke er angivet, bruger 1.0. |
| `control_loras[].control_image_url` |  | string (image URL) | yes |  |  | Billed-URL, der leverer kontrolbilledet. |
| `control_loras[].preprocess` |  | enum (string) | no | `None` | `canny`, `depth`, `None` | Forbehandlingsmetode anvendt på det leverede billede. |
| `controlnets` |  | array of object {path, config_url, variant, control_image_url, mask_image_url, mask_threshold, conditioning_scale, start_percentage, end_percentage} | no | `[]` |  | ControlNet-konfiguration til billedgenerering, i øjeblikket begrænset til ét ControlNet. |
| `controlnets[].path` |  | string | yes |  |  | Placering af ControlNet-vægt angivet som en URL eller sti. |
| `controlnets[].config_url` |  | string \| null | no |  |  | Valgfri URL, der peger på ControlNets config.json-fil. |
| `controlnets[].variant` |  | string \| null | no |  |  | Valgfri variant til brug sammen med en Hugging Face-repositorynøgle. |
| `controlnets[].control_image_url` |  | string (image URL) | yes |  |  | Billed-URL, der leverer kontrolbilledet. |
| `controlnets[].mask_image_url` |  | string (image URL) | no |  |  | Maske-URL knyttet til kontrolbilledet. |
| `controlnets[].mask_threshold` |  | number | no | `0.5` | 0.01 – 0.99 | Masketærskelværdi. |
| `controlnets[].conditioning_scale` |  | number | no | `1` | 0 – 2 | Skalering anvendt på ControlNet-vægte, før de flettes ind i basismodellen. |
| `controlnets[].start_percentage` |  | number | no | `0` | 0 – 1 | Procentdel af de samlede timesteps, hvor ControlNet begynder at påvirke billedgenereringen. |
| `controlnets[].end_percentage` |  | number | no | `1` | 0 – 1 | Procentdel af de samlede timesteps, hvor ControlNet stopper med at påvirke billedgenereringen. |
| `controlnet_unions` |  | array of object {path, config_url, variant, controls} | no | `[]` |  | ControlNet-unionskonfiguration til billedgenerering, underlagt den aktuelle begrænsning på ét ControlNet. |
| `controlnet_unions[].path` |  | string | yes |  |  | Placering af ControlNet-vægt angivet som en URL eller sti. |
| `controlnet_unions[].config_url` |  | string \| null | no |  |  | Valgfri URL, der peger på ControlNets config.json-fil. |
| `controlnet_unions[].variant` |  | string \| null | no |  |  | Valgfri variant til brug sammen med en Hugging Face-repositorynøgle. |
| `controlnet_unions[].controls` |  | array of object {control_image_url, mask_image_url, control_mode, conditioning_scale, mask_threshold, start_percentage, end_percentage} | yes |  |  | Kontrolbilleder og tilknyttede tilstande, der leveres til ControlNet. |
| `controlnet_unions[].controls[].control_image_url` |  | string (image URL) | yes |  |  | Billed-URL, der leverer kontrolbilledet. |
| `controlnet_unions[].controls[].mask_image_url` |  | string (image URL) | no |  |  | Maske-URL knyttet til kontrolbilledet. |
| `controlnet_unions[].controls[].control_mode` |  | enum (string) | yes |  | `canny`, `tile`, `depth`, `blur`, `pose`, `gray`, `low-quality` | Kontroltilstand anvendt af Flux Controlnet Union. Valgmuligheder: canny styrer genereringen med kanter; tile styrer den med fliser; depth styrer den med et gråtone-dybdekort; blur slører billedet; pose styrer genereringen med billedets positur; gray gør billedet til gråtone; low-quality producerer en version af billedet i lav kvalitet. |
| `controlnet_unions[].controls[].conditioning_scale` |  | number | no | `1` | 0 – 2 | Skalering anvendt på ControlNet-vægte, før de flettes ind i basismodellen. |
| `controlnet_unions[].controls[].mask_threshold` |  | number | no | `0.5` | 0.01 – 0.99 | Masketærskelværdi. |
| `controlnet_unions[].controls[].start_percentage` |  | number | no | `0` | 0 – 1 | Procentdel af de samlede timesteps, hvor ControlNet begynder at påvirke billedgenereringen. |
| `controlnet_unions[].controls[].end_percentage` |  | number | no | `1` | 0 – 1 | Procentdel af de samlede timesteps, hvor ControlNet stopper med at påvirke billedgenereringen. |
| `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 anvendt under billedgenerering. |
| `ip_adapters[].path` |  | string | yes |  |  | IP-Adapter-placering på Hugging Face. |
| `ip_adapters[].subfolder` |  | string \| null | no |  |  | Undermappe, der indeholder ip_adapter-vægtene. |
| `ip_adapters[].weight_name` |  | string \| null | no |  |  | Safetensors-filnavn for IP-Adapterens vægte. |
| `ip_adapters[].image_encoder_path` |  | string | yes |  |  | Placering af IP-Adapter-billedencoder, f.eks. 'openai/clip-vit-large-patch14'. |
| `ip_adapters[].image_encoder_subfolder` |  | string \| null | no |  |  | Undermappe, der indeholder vægte til billedencoderen. |
| `ip_adapters[].image_encoder_weight_name` |  | string \| null | no |  |  | Navn på billedencoder. |
| `ip_adapters[].image_url` |  | string (image URL) | yes |  |  | URL til konditioneringsbilledet, der leveres til IP-Adapter. |
| `ip_adapters[].mask_image_url` |  | string (image URL) \| null | no |  |  | Maske-URL knyttet til kontrolbilledet. |
| `ip_adapters[].mask_threshold` |  | number | no | `0.5` | 0.01 – 0.99 | Masketærskelværdi. |
| `ip_adapters[].scale` |  | number | yes |  |  | Skaleringsfaktor for IP-Adapter. |
| `easycontrols` |  | array of object {control_method_url, scale, image_url, image_control_type} | no | `[]` |  | EasyControl-input anvendt under billedgenerering. |
| `easycontrols[].control_method_url` |  | string | yes |  |  | Safetensor-vægt-URL for kontrolmetoden eller en understøttet identifikator: `canny`, `depth`, `hedsketch`, `inpainting`, `pose`, `seg`, `subject`, `ghibli`. |
| `easycontrols[].scale` |  | number | no | `1` | 0 – 2 | Skaleringsfaktor for kontrolmetoden. |
| `easycontrols[].image_url` |  | string (image URL) | yes |  |  | Billed-URL, der leverer et kontrolinput. |
| `easycontrols[].image_control_type` |  | enum (string) | yes |  | `subject`, `spatial` | Billedkontroltilstand; accepterer enten `spatial` eller `subject`. |
| `fill_image` |  | object {fill_image_url} \| null | no |  |  | Inputbillede, der styrer genereringen og kan levere indhold til maskerede områder. |
| `fill_image.fill_image_url` |  | string (image URL) \| array of image URL | no | `[]` |  | Billed-URL'er til udfyldning via redux-prompts. |
| `guidance_scale` |  | number | no | `3.5` | 0 – 20 | Styrke for prompt-overensstemmelse ved billedvalg, udtrykt som CFG (Classifier Free Guidance). |
| `real_cfg_scale` |  | number | no | `3.5` | 0 – 5 | Styrke for prompt-overensstemmelse ved billedvalg, udtrykt som CFG (Classifier Free Guidance). |
| `use_real_cfg` |  | boolean | no | `false` |  | Klassisk CFG-kontakt, der automatisk aktiveres med XLabs IP-Adapter v1. Guidance-adfærden svarer til modeller som SD1.5 og SDXL. |
| `use_cfg_zero` |  | boolean | no | `false` |  | Aktiverer CFG-zero-initialiseringssampling, beskrevet på https://arxiv.org/abs/2503.18886. |
| `num_images` | `num_outputs` | integer | no | `1` | 1 – 10 | Angiv, hvor mange billeder der skal genereres; dette valg er fastsat til 1, når output streames. |
| `enable_safety_checker` |  | boolean | no | `true` |  | Sikkerhedskontrol, der returnerer sorte billeder i stedet for billeder, der markeres som usikre. true aktiverer kontrollen; false deaktiverer den kun for autoriserede konti, mens anmodninger uden autorisation altid kontrolleres. |
| `reference_image_url` |  | string (image URL) | no |  |  | Billed-URL anvendt til Reference-Only-guidance. |
| `reference_strength` |  | number | no | `0.65` | -3 – 3 | Referencebilledets indflydelse under reference_only-generering; uden et leveret referencebillede har denne styrkeindstilling ingen effekt. |
| `reference_start` |  | number | no | `0` | 0 – 1 | Startpunkt for referenceguidance angivet som en procentdel af alle timesteps. |
| `reference_end` |  | number | no | `1` | 0 – 1 | Slutpunkt for referenceguidance angivet som en procentdel af alle timesteps. |
| `base_shift` |  | number | no | `0.5` | 0.01 – 5 | Grundlinjeforskydning anvendt på planlagte timesteps. |
| `max_shift` |  | number | no | `1.15` | 0.01 – 5 | Maksimal forskydning anvendt på planlagte timesteps. |
| `output_format` |  | enum (string) | no | `png` | `jpeg`, `png` | Filformat for det resulterende billede. |
| `use_beta_schedule` |  | boolean | no | `false` |  | Styrer, om beta-sigmaer skal anvendes. |
| `sigma_schedule` |  | string \| null | no |  |  | Sigma-plan anvendt under denoising. |
| `scheduler` |  | enum (string) | no | `euler` | `euler`, `dpmpp_2m` | Scheduler anvendt under denoising. |
| `negative_prompt` |  | string | no | `` |  | Negativ prompt, der som standard behandles med NAG for at modvirke de angivne uønskede egenskaber i genererede billeder. |
| `nag_scale` |  | number | no | `3` | ≤ 10, > 1 | Undgåelse af negativ prompt styret af NAG-skalaen: en forøgelse gør det genererede billede mindre lig den negative beskrivelse. |
| `nag_tau` |  | number | no | `2.5` | > 0 | NAG tau-indstilling til normalisering af skjulte tilstande; det anbefales at lade den være uændret. En forøgelse svækker normaliseringen og indebærer risiko for uventede afvigelser fra det oprindelige billede. |
| `nag_alpha` |  | number | no | `0.25` | ≤ 1, > 0 | NAG alpha angiver, hvor meget den positive prompt omdirigerer den normaliserede guidance, der kombinerer de positive og negative prompts. Denne endelige vægtning giver den positive prompt større indflydelse ved lavere indstillinger og reducerer omdirigeringen ved højere indstillinger. |
| `nag_end` |  | number | no | `0.25` | ≤ 1, > 0 | NAG-cutoff angivet som en andel af genereringstrinnene. FLUX's oprindelige attention-processorer overtager, efter at NAG har kørt i denne indledende andel. |

File parameters (`reference_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"
}
```

A fuller example:

```json
{
  "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/flux-general?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"
  }'

# 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/flux-general?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"
  }),
});
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 = {
    "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/flux-general", 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": "flux-general",
      "input": {
        "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": "flux-general",
  "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": 300,
    "usd": "0.30",
    "charged": 300,
    "refunded": 0
  },
  "input": {
    "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",
        "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.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, width, height, content_type} | Filoplysninger for de genererede billeder. |
| `timings` | object |  |
| `seed` | integer | Seed til billedgenerering, inklusive den tilfældigt valgte værdi, hvis inputtet ikke angav en seed; ellers gentages den angivne værdi. |
| `has_nsfw_concepts` | array of boolean | Angiver, om NSFW-koncepter forekommer i de genererede billeder. |
| `prompt` | string | Prompt brugt under billedgenerering. |

## Related models

- [FLUX.1 \[dev\] with Controlnets and Loras · Differential Diffusion](https://doitong.com/developers/models/flux-general/differential-diffusion.md) (`flux-general/differential-diffusion`): $0.138 / 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 \[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

## Links

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