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

> עריכת תמונת ייחוס מבוססת הנחיה באמצעות היפוך RF

עורך את התמונה שב־`image_url` בהתאם ל־`prompt` באמצעות צינור RF-Inversion, שעובד מהתמונה המקורית במקום להתחיל מרעש. ניתן להוסיף LoRAs, control LoRAs, ControlNets ותמונת ייחוס, והגדרות NAG (`nag_scale`, `nag_tau`, `nag_alpha`, `nag_end`) מכווננות את ההנחיה השלילית.

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

## Pricing

Price: **$0.025 / 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.025 = 25 API credits (1 image × 25 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/rf-inversion` 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 |  |  | הנחיה המכוונת את עריכת התמונה. |
| `image_size` |  | object {width, height} \| enum (string) | no |  | `square_hd`, `square`, `portrait_4_3`, `portrait_16_9`, `landscape_4_3`, `landscape_16_9` | ממדי התמונה שנוצרה. |
| `num_inference_steps` |  | integer | no | `28` | 1 – 50 | מספר שלבי ההסקה לביצוע. |
| `seed` |  | integer \| null | no |  |  | seed לתמונות ניתנות לשחזור: הנחיה ו־seed זהים מפיקים תמונה זהה כאשר גרסת המודל לא השתנתה. |
| `loras` |  | array of object {path, scale} | no | `[]` |  | LoRA-ים שההשפעה המשולבת שלהם מפיקה את התמונה שנוצרת, ללא הגבלה על מספרם. |
| `loras[].path` |  | string | yes |  |  | מיקום משקלי ה־LoRA, המצוין ככתובת URL או כנתיב. |
| `loras[].scale` |  | object \| number | no | `1` |  | קנה המידה המוחל על משקלי LoRA לפני מיזוגם במודל הבסיס. יש לספק מילון בתבנית {"layer_name":layer_scale} כדי להגדיר קני מידה לשכבות בודדות; שכבות שלא צוינו משתמשות ב־1.0. |
| `control_loras` |  | array of object {path, scale, control_image_url, preprocess} | no | `[]` |  | LoRA-ים של תמונת הבקרה שמוזגו לתצורה משולבת לצורך יצירת התמונה הסופית; מספר ה־LoRA-ים אינו מוגבל. |
| `control_loras[].path` |  | string | yes |  |  | מיקום משקלי ה־LoRA, המצוין ככתובת URL או כנתיב. |
| `control_loras[].scale` |  | object \| number | no | `1` |  | קנה המידה המוחל על משקלי LoRA לפני מיזוגם במודל הבסיס. יש לספק מילון בתבנית {"layer_name":layer_scale} כדי להגדיר קני מידה לשכבות בודדות; שכבות שלא צוינו משתמשות ב־1.0. |
| `control_loras[].control_image_url` |  | string (image URL) | yes |  |  | כתובת URL של תמונה המספקת את תמונת הבקרה. |
| `control_loras[].preprocess` |  | enum (string) | no | `None` | `canny`, `depth`, `None` | שיטת העיבוד המקדים שהוחלה על התמונה שסופקה. |
| `controlnets` |  | array of object {path, config_url, variant, control_image_url, mask_image_url, mask_threshold, conditioning_scale, start_percentage, end_percentage} | no | `[]` |  | תצורת ControlNet ליצירת תמונה, המוגבלת כעת ל־ControlNet יחיד. |
| `controlnets[].path` |  | string | yes |  |  | מיקום משקלי ControlNet, המצוין ככתובת URL או כנתיב. |
| `controlnets[].config_url` |  | string \| null | no |  |  | כתובת URL אופציונלית המצביעה על קובץ config.json של ControlNet. |
| `controlnets[].variant` |  | string \| null | no |  |  | וריאנט אופציונלי לשימוש עם מפתח מאגר Hugging Face. |
| `controlnets[].control_image_url` |  | string (image URL) | yes |  |  | כתובת URL של תמונה המספקת את תמונת הבקרה. |
| `controlnets[].mask_image_url` |  | string (image URL) | no |  |  | כתובת URL של מסכה המשויכת לתמונת הבקרה. |
| `controlnets[].mask_threshold` |  | number | no | `0.5` | 0.01 – 0.99 | ערך סף המסכה. |
| `controlnets[].conditioning_scale` |  | number | no | `1` | 0 – 2 | קנה המידה המוחל על משקלי ControlNet לפני מיזוגם במודל הבסיס. |
| `controlnets[].start_percentage` |  | number | no | `0` | 0 – 1 | אחוז צעדי הזמן הכוללים שבו ControlNet מתחיל להשפיע על יצירת התמונה. |
| `controlnets[].end_percentage` |  | number | no | `1` | 0 – 1 | אחוז צעדי הזמן הכוללים שבו ControlNet מפסיק להשפיע על יצירת התמונה. |
| `controlnet_unions` |  | array of object {path, config_url, variant, controls} | no | `[]` |  | תצורת איחוד ControlNet ליצירת תמונה, הכפופה להגבלה הנוכחית של ControlNet יחיד. |
| `controlnet_unions[].path` |  | string | yes |  |  | מיקום משקלי ControlNet, המצוין ככתובת URL או כנתיב. |
| `controlnet_unions[].config_url` |  | string \| null | no |  |  | כתובת URL אופציונלית המצביעה על קובץ config.json של ControlNet. |
| `controlnet_unions[].variant` |  | string \| null | no |  |  | וריאנט אופציונלי לשימוש עם מפתח מאגר 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 |  |  | תמונות הבקרה והמצבים המשויכים אליהן שסופקו ל־ControlNet. |
| `controlnet_unions[].controls[].control_image_url` |  | string (image URL) | yes |  |  | כתובת URL של תמונה המספקת את תמונת הבקרה. |
| `controlnet_unions[].controls[].mask_image_url` |  | string (image URL) | no |  |  | כתובת URL של מסכה המשויכת לתמונת הבקרה. |
| `controlnet_unions[].controls[].control_mode` |  | enum (string) | yes |  | `canny`, `tile`, `depth`, `blur`, `pose`, `gray`, `low-quality` | מצב הבקרה המשמש את Flux Controlnet Union. אפשרויות: canny מנחה את היצירה באמצעות קצוות; tile מנחה אותה באמצעות אריחים; depth מנחה אותה באמצעות מפת עומק בגווני אפור; blur מטשטש את התמונה; pose מנחה את היצירה באמצעות תנוחת התמונה; gray הופך את התמונה לגווני אפור; low-quality מפיק גרסה באיכות נמוכה של התמונה. |
| `controlnet_unions[].controls[].conditioning_scale` |  | number | no | `1` | 0 – 2 | קנה המידה המוחל על משקלי ControlNet לפני מיזוגם במודל הבסיס. |
| `controlnet_unions[].controls[].mask_threshold` |  | number | no | `0.5` | 0.01 – 0.99 | ערך סף המסכה. |
| `controlnet_unions[].controls[].start_percentage` |  | number | no | `0` | 0 – 1 | אחוז צעדי הזמן הכוללים שבו ControlNet מתחיל להשפיע על יצירת התמונה. |
| `controlnet_unions[].controls[].end_percentage` |  | number | no | `1` | 0 – 1 | אחוז צעדי הזמן הכוללים שבו ControlNet מפסיק להשפיע על יצירת התמונה. |
| `easycontrols` |  | array of object {control_method_url, scale, image_url, image_control_type} | no | `[]` |  | קלטי EasyControl המוחלים במהלך יצירת התמונה. |
| `easycontrols[].control_method_url` |  | string | yes |  |  | כתובת URL של משקל safetensor של שיטת הבקרה, או מזהה נתמך: `canny`, `depth`, `hedsketch`, `inpainting`, `pose`, `seg`, `subject`, `ghibli`. |
| `easycontrols[].scale` |  | number | no | `1` | 0 – 2 | מקדם קנה המידה של שיטת הבקרה. |
| `easycontrols[].image_url` |  | string (image URL) | yes |  |  | כתובת URL של תמונה המספקת קלט בקרה. |
| `easycontrols[].image_control_type` |  | enum (string) | yes |  | `subject`, `spatial` | מצב בקרת התמונה; מקבל `spatial` או `subject`. |
| `fill_image` |  | object {fill_image_url} \| null | no |  |  | תמונת קלט שמנחה את היצירה ויכולה לספק תוכן לאזורים מוסווים. |
| `fill_image.fill_image_url` |  | string (image URL) \| array of image URL | no | `[]` |  | כתובות URL של תמונות למילוי באמצעות הנחיה מחדש. |
| `guidance_scale` |  | number | no | `3.5` | 0 – 20 | עוצמת ההיצמדות להנחיה עבור בחירת תמונה, המבוטאת כ-CFG (Classifier Free Guidance). |
| `use_cfg_zero` |  | boolean | no | `false` |  | מאפשר דגימה עם אתחול CFG-zero, המתוארת ב־https://arxiv.org/abs/2503.18886. |
| `num_images` | `num_outputs` | integer | no | `1` | 1 – 10 | הגדרת מספר התמונות ליצירה; בחירה זו קבועה ל־1 כאשר הפלט מוזרם. |
| `enable_safety_checker` |  | boolean | no | `true` |  | בדיקת בטיחות, שמחזירה תמונות שחורות במקום תמונות שסומנו כלא בטוחות. ערך true מאפשר את הבדיקה; false משבית אותה רק עבור חשבונות מורשים, בעוד שבקשות ללא הרשאה נבדקות בכל מקרה. |
| `reference_image_url` |  | string (image URL) | no |  |  | כתובת URL של תמונה המשמשת להנחיה מסוג Reference-Only. |
| `reference_strength` |  | number | no | `0.65` | -3 – 3 | השפעת תמונת הייחוס במהלך יצירת reference_only; ללא תמונת ייחוס שסופקה, להגדרת העוצמה הזו אין השפעה. |
| `reference_start` |  | number | no | `0` | 0 – 1 | נקודת ההתחלה של הנחיית הייחוס, המבוטאת כאחוז מכל צעדי הזמן. |
| `reference_end` |  | number | no | `1` | 0 – 1 | נקודת הסיום של הנחיית הייחוס, המבוטאת כאחוז מכל צעדי הזמן. |
| `base_shift` |  | number | no | `0.5` | 0.01 – 5 | הסטת בסיס המוחלת על צעדי הזמן המתוזמנים. |
| `max_shift` |  | number | no | `1.15` | 0.01 – 5 | הסטה מרבית המוחלת על צעדי הזמן המתוזמנים. |
| `output_format` |  | enum (string) | no | `png` | `jpeg`, `png` | פורמט הקובץ של התמונה שהתקבלה. |
| `use_beta_schedule` |  | boolean | no | `false` |  | קובע אם להשתמש ב־beta sigmas. |
| `sigma_schedule` |  | string \| null | no |  |  | לוח הסיגמאות המשמש במהלך הסרת הרעש. |
| `scheduler` |  | enum (string) | no | `euler` | `euler`, `dpmpp_2m` | מתזמן המשמש במהלך הסרת הרעש. |
| `negative_prompt` |  | string | no | `` |  | הנחיה שלילית המעובדת כברירת מחדל באמצעות NAG כדי להרתיע מהמאפיינים הלא רצויים שצוינו בתמונות שנוצרות. |
| `nag_scale` |  | number | no | `3` | ≤ 10, > 1 | הימנעות מהנחיה שלילית הנשלטת על ידי קנה המידה של NAG: הגדלתו הופכת את התמונה שנוצרת לפחות דומה לתיאור השלילי. |
| `nag_tau` |  | number | no | `2.5` | > 0 | הגדרת NAG tau לנרמול מצב חבוי; מומלץ להשאיר אותה ללא שינוי. הגדלתה מחלישה את הנרמול ועלולה לגרום לסטיות בלתי צפויות מהתמונה המקורית. |
| `nag_alpha` |  | number | no | `0.25` | ≤ 1, > 0 | NAG alpha קובע עד כמה ההנחיה החיובית מנתבת מחדש את ההנחיה המנורמלת המשלבת את ההנחיות החיובית והשלילית. שקלול סופי זה מעניק להנחיה החיובית השפעה רבה יותר בהגדרות נמוכות ומפחית את הניתוב מחדש בהגדרות גבוהות. |
| `nag_end` |  | number | no | `0.25` | ≤ 1, > 0 | חיתוך NAG המבוטא כחלק מצעדי היצירה. מעבדי הקשב המקוריים של FLUX נכנסים לפעולה לאחר ש־NAG פעל במשך אותו חלק ראשוני. |
| `image_url` | `image` | string (image URL) | yes |  |  | כתובת URL של תמונה המזהה את קלט העריכה. |
| `controller_guidance_forward` |  | number | no | `0.6` | 0.01 – 3 | הנחיית הבקר (gamma) ליצירת רעש מובנה. |
| `controller_guidance_reverse` |  | number | no | `0.75` | 0.01 – 3 | הגדרת eta, ערך הנחיית בקר הסרת הרעש; מתקבלת תמונה הדומה יותר לקלט בהגדרות הקרובות ל־1. |
| `reverse_guidance_start` |  | integer | no | `0` |  | צעד הזמן ההתחלתי להנחיה בתהליך ההפוך. |
| `reverse_guidance_end` |  | integer | no | `8` |  | צעד הזמן הסופי להנחיה בתהליך ההפוך. |
| `reverse_guidance_schedule` |  | enum (string) | no | `constant` | `constant`, `linear_increase`, `linear_decrease` | לוח הזמנים השולט בהחלת ההנחיה ההפוכה. |

File parameters (`reference_image_url`, `image`) 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"
}
```

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"
}
```

## 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/rf-inversion?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"
  }'

# 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/rf-inversion?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"
  }),
});
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",
}

# Run the model; wait up to 20 s for the finished result in the same call
r = requests.post(API + "/run/flux-general/rf-inversion", 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/rf-inversion",
      "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"
      },
      "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/rf-inversion",
  "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": 25,
    "usd": "0.025",
    "charged": 25,
    "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"
  },
  "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} | פרטי קובץ עבור התמונות שנוצרו. |
| `timings` | object |  |
| `seed` | integer | Seed ליצירת תמונה, כולל הערך שנבחר באקראי אם הקלט לא כלל Seed; אחרת, הוא חוזר על הערך שסופק. |
| `has_nsfw_concepts` | array of boolean | מציין אם מושגים מסוג NSFW מופיעים בתמונות שנוצרו. |
| `prompt` | string | הנחיה המשמשת במהלך יצירת התמונה. |

## 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 · 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 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/rf-inversion
- 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/rf-inversion
- Errors: https://doitong.com/developers/docs/errors
- Model details as JSON: https://api.doitong.com/v1/models/flux-general/rf-inversion
