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

> FLUX.1 [dev] text-till-bild med LoRAs, ControlNets, IP-Adapters, EasyControl och styrning med referensbild

Genererar bilder från en `prompt` och stöder flera konditioneringsmetoder: `loras`, `control_loras`, `controlnets`, `controlnet_unions`, `ip_adapters` och `easycontrols`, samt `fill_image` för maskerade områden. Den tar även emot en `reference_image_url`, negativa prompter och valet mellan schemaläggarna euler och dpmpp_2m. Upp till 10 bilder per anrop, i png eller jpeg.

- 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.com/v1/run/flux-general`
- Quote: `POST https://api.doitong.com/v1/quote/flux-general`
- Docs page: https://doitong.com/sv/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.com/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 som vägleder bildgenereringen. |
| `image_size` |  | object {width, height} \| enum (string) | no |  | `square_hd`, `square`, `portrait_4_3`, `portrait_16_9`, `landscape_4_3`, `landscape_16_9` | Dimensioner för den genererade bilden. |
| `num_inference_steps` |  | integer | no | `28` | 1 – 50 | Antal inferenssteg som ska köras. |
| `seed` |  | integer \| null | no |  |  | Seed för reproducerbara bilder: en identisk prompt och ett identiskt seed ger en identisk bild när modellversionen är oförändrad. |
| `loras` |  | array of object {path, scale} | no | `[]` |  | LoRA:er vars kombinerade effekt producerar den genererade bilden, utan begränsning av hur många du anger. |
| `loras[].path` |  | string | yes |  |  | Plats för LoRA-vikterna, angiven som en URL eller sökväg. |
| `loras[].scale` |  | object \| number | no | `1` |  | Skalning som tillämpas på LoRA-vikter innan de slås samman med basmodellen. Ange en ordlista i formen {"layer_name":layer_scale} för att ställa in enskilda lagerskalor; ospecificerade lager använder 1.0. |
| `control_loras` |  | array of object {path, scale, control_image_url, preprocess} | no | `[]` |  | LoRA:er för kontrollbilder som slås samman till en kombinerad konfiguration för att generera den slutliga bilden; antalet du anger är obegränsat. |
| `control_loras[].path` |  | string | yes |  |  | Plats för LoRA-vikterna, angiven som en URL eller sökväg. |
| `control_loras[].scale` |  | object \| number | no | `1` |  | Skalning som tillämpas på LoRA-vikter innan de slås samman med basmodellen. Ange en ordlista i formen {"layer_name":layer_scale} för att ställa in enskilda lagerskalor; ospecificerade lager använder 1.0. |
| `control_loras[].control_image_url` |  | string (image URL) | yes |  |  | Bild-URL som tillhandahåller kontrollbilden. |
| `control_loras[].preprocess` |  | enum (string) | no | `None` | `canny`, `depth`, `None` | Förbehandlingsmetod som tillämpas på den angivna bilden. |
| `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 för bildgenerering, för närvarande begränsad till ett enda ControlNet. |
| `controlnets[].path` |  | string | yes |  |  | Plats för ControlNet-vikter, angiven som en URL eller sökväg. |
| `controlnets[].config_url` |  | string \| null | no |  |  | Valfri URL till ControlNets config.json-fil. |
| `controlnets[].variant` |  | string \| null | no |  |  | Valfri variant för användning med en Hugging Face-repositorynyckel. |
| `controlnets[].control_image_url` |  | string (image URL) | yes |  |  | Bild-URL som tillhandahåller kontrollbilden. |
| `controlnets[].mask_image_url` |  | string (image URL) | no |  |  | Mask-URL som är kopplad till kontrollbilden. |
| `controlnets[].mask_threshold` |  | number | no | `0.5` | 0.01 – 0.99 | Masktröskelvärde. |
| `controlnets[].conditioning_scale` |  | number | no | `1` | 0 – 2 | Skalning som tillämpas på ControlNet-vikter innan de slås samman med basmodellen. |
| `controlnets[].start_percentage` |  | number | no | `0` | 0 – 1 | Procentandel av de totala tidsstegen då ControlNet börjar påverka bildgenereringen. |
| `controlnets[].end_percentage` |  | number | no | `1` | 0 – 1 | Procentandel av de totala tidsstegen då ControlNet slutar påverka bildgenereringen. |
| `controlnet_unions` |  | array of object {path, config_url, variant, controls} | no | `[]` |  | ControlNet-unionskonfiguration för bildgenerering, med förbehåll för den aktuella begränsningen till ett enda ControlNet. |
| `controlnet_unions[].path` |  | string | yes |  |  | Plats för ControlNet-vikter, angiven som en URL eller sökväg. |
| `controlnet_unions[].config_url` |  | string \| null | no |  |  | Valfri URL till ControlNets config.json-fil. |
| `controlnet_unions[].variant` |  | string \| null | no |  |  | Valfri variant för användning med en Hugging Face-repositorynyckel. |
| `controlnet_unions[].controls` |  | array of object {control_image_url, mask_image_url, control_mode, conditioning_scale, mask_threshold, start_percentage, end_percentage} | yes |  |  | Kontrollbilder och tillhörande lägen som skickas till ControlNet. |
| `controlnet_unions[].controls[].control_image_url` |  | string (image URL) | yes |  |  | Bild-URL som tillhandahåller kontrollbilden. |
| `controlnet_unions[].controls[].mask_image_url` |  | string (image URL) | no |  |  | Mask-URL som är kopplad till kontrollbilden. |
| `controlnet_unions[].controls[].control_mode` |  | enum (string) | yes |  | `canny`, `tile`, `depth`, `blur`, `pose`, `gray`, `low-quality` | Kontrolläge som används av Flux Controlnet Union. Alternativ: canny styr genereringen med kanter; tile styr den med plattor; depth styr den med en gråskalad djupkarta; blur gör bilden suddig; pose styr genereringen med bildens pose; gray gör bilden till gråskala; low-quality producerar en version av bilden med låg kvalitet. |
| `controlnet_unions[].controls[].conditioning_scale` |  | number | no | `1` | 0 – 2 | Skalning som tillämpas på ControlNet-vikter innan de slås samman med basmodellen. |
| `controlnet_unions[].controls[].mask_threshold` |  | number | no | `0.5` | 0.01 – 0.99 | Masktröskelvärde. |
| `controlnet_unions[].controls[].start_percentage` |  | number | no | `0` | 0 – 1 | Procentandel av de totala tidsstegen då ControlNet börjar påverka bildgenereringen. |
| `controlnet_unions[].controls[].end_percentage` |  | number | no | `1` | 0 – 1 | Procentandel av de totala tidsstegen då ControlNet slutar påverka bildgenereringen. |
| `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 som tillämpas under bildgenerering. |
| `ip_adapters[].path` |  | string | yes |  |  | Plats för IP-Adapter på Hugging Face. |
| `ip_adapters[].subfolder` |  | string \| null | no |  |  | Underkatalog som innehåller ip_adapter-vikterna. |
| `ip_adapters[].weight_name` |  | string \| null | no |  |  | Safetensors-filnamn för IP-Adapterns vikter. |
| `ip_adapters[].image_encoder_path` |  | string | yes |  |  | Plats för IP-Adapters bildkodare, till exempel 'openai/clip-vit-large-patch14'. |
| `ip_adapters[].image_encoder_subfolder` |  | string \| null | no |  |  | Underkatalog som innehåller bildkodarens vikter. |
| `ip_adapters[].image_encoder_weight_name` |  | string \| null | no |  |  | Bildkodarens namn. |
| `ip_adapters[].image_url` |  | string (image URL) | yes |  |  | URL till konditioneringsbilden som skickas till IP-Adaptern. |
| `ip_adapters[].mask_image_url` |  | string (image URL) \| null | no |  |  | Mask-URL som är kopplad till kontrollbilden. |
| `ip_adapters[].mask_threshold` |  | number | no | `0.5` | 0.01 – 0.99 | Masktröskelvärde. |
| `ip_adapters[].scale` |  | number | yes |  |  | Skalfaktor för IP-Adapter. |
| `easycontrols` |  | array of object {control_method_url, scale, image_url, image_control_type} | no | `[]` |  | EasyControl-indata som tillämpas under bildgenerering. |
| `easycontrols[].control_method_url` |  | string | yes |  |  | Safetensor-vikt-URL för kontrollmetoden eller en identifierare som stöds: `canny`, `depth`, `hedsketch`, `inpainting`, `pose`, `seg`, `subject`, `ghibli`. |
| `easycontrols[].scale` |  | number | no | `1` | 0 – 2 | Skalfaktor för kontrollmetoden. |
| `easycontrols[].image_url` |  | string (image URL) | yes |  |  | Bild-URL som tillhandahåller en kontrollindata. |
| `easycontrols[].image_control_type` |  | enum (string) | yes |  | `subject`, `spatial` | Bildkontrolläge; accepterar antingen `spatial` eller `subject`. |
| `fill_image` |  | object {fill_image_url} \| null | no |  |  | Indatabild som styr genereringen och kan tillhandahålla innehåll för maskerade områden. |
| `fill_image.fill_image_url` |  | string (image URL) \| array of image URL | no | `[]` |  | Bild-URL:er för ifyllnad via redux-promptning. |
| `guidance_scale` |  | number | no | `3.5` | 0 – 20 | Styrka för promptföljsamhet vid bildval, uttryckt som CFG (Classifier Free Guidance). |
| `real_cfg_scale` |  | number | no | `3.5` | 0 – 5 | Styrka för promptföljsamhet vid bildval, uttryckt som CFG (Classifier Free Guidance). |
| `use_real_cfg` |  | boolean | no | `false` |  | Klassisk CFG-växel, aktiveras automatiskt med XLabs IP-Adapter v1. Styrningsbeteendet motsvarar det hos modeller som SD1.5 och SDXL. |
| `use_cfg_zero` |  | boolean | no | `false` |  | Aktiverar CFG-zero-initialiserad sampling, beskriven på https://arxiv.org/abs/2503.18886. |
| `num_images` | `num_outputs` | integer | no | `1` | 1 – 10 | Ange hur många bilder som ska genereras; detta val är låst till 1 när utdata strömmas. |
| `enable_safety_checker` |  | boolean | no | `true` |  | Säkerhetskontroll som returnerar svarta bilder i stället för bilder som flaggats som osäkra. true aktiverar kontrollen; false inaktiverar den endast för behöriga konton, medan begäranden utan behörighet alltid kontrolleras. |
| `reference_image_url` |  | string (image URL) | no |  |  | Bild-URL som används för Reference-Only guidance. |
| `reference_strength` |  | number | no | `0.65` | -3 – 3 | Referensbildens påverkan under reference_only-generering; utan en angiven referensbild har denna styrkeinställning ingen effekt. |
| `reference_start` |  | number | no | `0` | 0 – 1 | Startpunkt för referensstyrning, uttryckt som en procentandel av alla tidssteg. |
| `reference_end` |  | number | no | `1` | 0 – 1 | Slutpunkt för referensstyrning, uttryckt som en procentandel av alla tidssteg. |
| `base_shift` |  | number | no | `0.5` | 0.01 – 5 | Baslinjeförskjutning som tillämpas på schemalagda tidssteg. |
| `max_shift` |  | number | no | `1.15` | 0.01 – 5 | Maximal förskjutning som tillämpas på schemalagda tidssteg. |
| `output_format` |  | enum (string) | no | `png` | `jpeg`, `png` | Filformat för den resulterande bilden. |
| `use_beta_schedule` |  | boolean | no | `false` |  | Styr om beta-sigman ska användas. |
| `sigma_schedule` |  | string \| null | no |  |  | Sigma-schema som används under avbrusning. |
| `scheduler` |  | enum (string) | no | `euler` | `euler`, `dpmpp_2m` | Schemaläggare som används under avbrusning. |
| `negative_prompt` |  | string | no | `` |  | Negativ prompt som som standard bearbetas med NAG för att motverka de angivna oönskade egenskaperna i genererade bilder. |
| `nag_scale` |  | number | no | `3` | ≤ 10, > 1 | Undvikande av den negativa prompten styrs av NAG-skalan: en ökning gör den genererade bilden mindre lik den negativa beskrivningen. |
| `nag_tau` |  | number | no | `2.5` | > 0 | NAG tau-inställning för normalisering av dolda tillstånd; det rekommenderas att låta den vara oförändrad. En höjning försvagar normaliseringen och riskerar oväntade avvikelser från originalbilden. |
| `nag_alpha` |  | number | no | `0.25` | ≤ 1, > 0 | NAG alpha anger hur mycket den positiva prompten omdirigerar den normaliserade styrningen som kombinerar de positiva och negativa promptarna. Denna slutliga viktning ger den positiva prompten större påverkan vid lägre inställningar och minskar omdirigeringen vid högre inställningar. |
| `nag_end` |  | number | no | `0.25` | ≤ 1, > 0 | NAG-avslut uttryckt som en andel av genereringsstegen. FLUX:s ursprungliga uppmärksamhetsprocessorer tar över efter att NAG har körts under denna inledande 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.com/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.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?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.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",
}

# 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.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",
      "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.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} | Filinformation för de genererade bilderna. |
| `timings` | object |  |
| `seed` | integer | Seed för bildgenerering, inklusive det slumpmässigt valda värdet om indata saknade seed; annars upprepas det angivna värdet. |
| `has_nsfw_concepts` | array of boolean | Anger om NSFW-koncept förekommer i de genererade bilderna. |
| `prompt` | string | Prompt som används under bildgenereringen. |

## 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.com/v1/models/flux-general
