> ## Documentation Index
> Fetch the complete documentation index at: https://docs.laozhang.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# FLUX.2 API：画像編集の使い方と料金

> LaoZhang APIでflux-2-pro、flux-2-flex、flux-2-maxに最大8枚の参照画像をJSONで送って画像を編集し、結果を失効前に保存する方法です。

FLUX.2では、画像の編集も生成と同じエンドポイントで行い、料金も生成と同じ1回あたりの固定額です。結果のURLは生成から10分で失効します。

| 項目 | 内容 |
| - | - |
| エンドポイント | `POST https://api.laozhang.ai/v1/images/generations`（JSONボディ） |
| 編集する画像 | `prompt` と `input_image` を送る |
| 追加の参照画像 | `input_image_2` 〜 `input_image_8`。合計8枚まで |
| 参照画像の形式 | 公開画像のURL、または `data:` URL |
| 料金 | 1回あたり `flux-2-pro` \$0.03、`flux-2-flex` \$0.06、`flux-2-max` \$0.07。2026年9月24日時点の公開価格（[AIモデルのAPI料金一覧](https://docs.laozhang.ai/ja/models.md)を参照） |
| 結果 | `data[0].url`。画像の生成から10分で失効するため、すぐにダウンロードする |

まずは `flux-2-pro` で始めてください。Black Forest Labsは、最も精度の高い編集には `flux-2-max`、文字の描画や細部など細かな制御には `flux-2-flex` を勧めています。3つのモデルは同じリクエストを受け付けます。

## 始める前に

**1. APIキーを作成する**

FLUX.2のモデルは回数課金です。[トークン管理](https://api.laozhang.ai/token)でキーを作成（または既存のキーを編集）し、**課金方式**（计费模式）を**従量優先**（按量优先、推奨）または**回数課金**（按次计费）にします。従量優先のキーは回数課金と従量課金の両方のモデルを呼び出せますが、回数課金のキーが呼び出せるのは回数課金のモデルだけです。

キーはサーバー側の環境変数に保存してください。

![LaoZhang APIコンソールのトークン作成ダイアログ。課金方式が回数課金（按次计费）になっている](https://mintcdn.com/laozhangai-edd05f2c/_loZ0Jy0ZI__xJ9z/images/token-create-per-request.png?fit=max\&auto=format\&n=_loZ0Jy0ZI__xJ9z\&q=85\&s=1fdceb804bb3ad50f83a21ec65b4d807)

**2. 環境を準備する**

キーを環境変数に設定し、Pythonの例で使う `requests` をインストールします。

```bash theme={null}
export LAOZHANG_API_KEY="sk-..."  # 自分のLaoZhang APIキーに置き換える
python3 -m pip install requests
```

**3. ダウンロード用のスクリプトを保存する**

次のスクリプトを `save_images.py` として保存します。cURLの例では、レスポンスのファイルに対してこのスクリプトを実行し、すべての画像をダウンロードします。FLUXが返すのはURLだけですが、ほかの画像モデルが返す `b64_json` のデコードにも対応しています。

```python save_images.py theme={null}
import base64
import json
import sys
import urllib.request
from pathlib import Path

response_file, stem = sys.argv[1], sys.argv[2]
response = json.loads(Path(response_file).read_text())
if not response.get("data"):
    sys.exit(f"{response_file} に画像がありません: {response}")

for number, item in enumerate(response["data"], start=1):
    if item.get("b64_json"):
        # data:image/...;base64, のプレフィックスがあれば取り除き、欠けたパディングを補う
        value = item["b64_json"].split(",", 1)[-1]
        image = base64.b64decode(value + "=" * (-len(value) % 4))
    else:
        with urllib.request.urlopen(item["url"], timeout=120) as download:
            image = download.read()
    if image.startswith(b"\x89PNG"):
        extension = "png"
    elif image[:4] == b"RIFF" and image[8:12] == b"WEBP":
        extension = "webp"
    else:
        extension = "jpg"
    path = Path(f"{stem}-{number}.{extension}")
    path.write_bytes(image)
    print(f"保存しました: {path}")
```

## 画像を編集する

生成のリクエストに `input_image` を追加すると、編集のリクエストになります。URLは公開アクセスできる画像に置き換えてください。

```bash theme={null}
curl --fail-with-body --max-time 300 "https://api.laozhang.ai/v1/images/generations" \
  -H "Authorization: Bearer $LAOZHANG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "flux-2-pro",
    "prompt": "メインの被写体はそのまま残してください。背景をすっきりした淡いブルーのスタジオ背景に変え、元のライティングを保ってください。",
    "input_image": "https://example.com/source.png",
    "width": 1792,
    "height": 1024,
    "output_format": "png"
  }' \
  -o flux-edit.json

python3 save_images.py flux-edit.json flux-edit
```

`保存しました: flux-edit-1.png` と表示されます。参照画像のURLはリクエストの処理中に取得されるため、ログイン、Cookie、ボット対策なしで読み込める必要があります。

> [!WARNING]
>
> **参照画像を合成するときは、`/v1/images/generations` にJSONを送ってください。**
>
> * 参照画像は、それぞれ `input_image` 系のフィールドに入れます。
> * マルチパートの `/v1/images/edits` は、`image` という名前のフィールドでファイルを1つしか受け取らないため、合成には使えません。

### ローカルファイルを編集する

手元のファイルを編集するときは、ファイルに合ったMIMEタイプのデータURLとして送ります。PNGなら `data:image/png;base64,...` です。ヒアドキュメントでボディを渡すと、大きな画像をコマンドラインに載せずに済みます。

```bash theme={null}
IMG=$(base64 < product.png | tr -d '\n')

curl --fail-with-body --max-time 300 "https://api.laozhang.ai/v1/images/generations" \
  -H "Authorization: Bearer $LAOZHANG_API_KEY" \
  -H "Content-Type: application/json" \
  --data-binary @- \
  -o flux-local-edit.json <<EOF
{
  "model": "flux-2-pro",
  "prompt": "柔らかな朝の光が差す大理石のカウンターに商品を置いてください。商品とラベルは変えないでください。",
  "input_image": "data:image/png;base64,$IMG",
  "size": "1024x1024",
  "output_format": "png"
}
EOF

python3 save_images.py flux-local-edit.json flux-product
```

## 参照画像を合成する

参照画像を増やすときは `input_image_2` 〜 `input_image_8` を追加し、プロンプトではフィールドの順に「画像1」「画像2」のように指定します。カレントディレクトリにある3つのPNGファイルを読み込む例です。

```bash theme={null}
IMG1=$(base64 < robot.png | tr -d '\n')
IMG2=$(base64 < greenhouse.png | tr -d '\n')
IMG3=$(base64 < skateboard.png | tr -d '\n')

curl --fail-with-body --max-time 300 "https://api.laozhang.ai/v1/images/generations" \
  -H "Authorization: Bearer $LAOZHANG_API_KEY" \
  -H "Content-Type: application/json" \
  --data-binary @- \
  -o flux-multi-edit.json <<EOF
{
  "model": "flux-2-pro",
  "prompt": "3枚の参照画像を、1枚のまとまった新しい画像に合成してください。画像1は赤いロボット、画像2はターコイズ色のガラス温室の背景、画像3は黄色いスケートボードとして使います。3枚すべての細部を取り入れてください。コラージュや画面分割のレイアウトにはしないでください。",
  "input_image": "data:image/png;base64,$IMG1",
  "input_image_2": "data:image/png;base64,$IMG2",
  "input_image_3": "data:image/png;base64,$IMG3",
  "width": 1792,
  "height": 1024,
  "output_format": "png"
}
EOF

python3 save_images.py flux-multi-edit.json flux-multi-edit
```

## Pythonで編集する

次のスクリプトは1〜8枚の参照画像を受け取り、ローカルファイルはデータURLに変換し、公開URLはそのまま渡して、リクエストが返ったらすぐ結果を保存します。

```python theme={null}
import base64
import mimetypes
import os
from pathlib import Path

import requests

API_URL = "https://api.laozhang.ai/v1/images/generations"
HEADERS = {"Authorization": f"Bearer {os.environ['LAOZHANG_API_KEY']}"}


def to_image_input(source):
    """URLはそのまま返し、ローカルファイルはデータURLに変換する。"""
    if source.startswith(("https://", "http://", "data:")):
        return source
    path = Path(source)
    mime_type = mimetypes.guess_type(path.name)[0] or "image/png"
    encoded = base64.b64encode(path.read_bytes()).decode("ascii")
    return f"data:{mime_type};base64,{encoded}"


def flux_edit(prompt, sources, width=1024, height=1024, model="flux-2-pro"):
    if not 1 <= len(sources) <= 8:
        raise ValueError("FLUX.2の参照画像は1〜8枚です")
    payload = {
        "model": model,
        "prompt": prompt,
        "width": width,
        "height": height,
        "output_format": "png",
    }
    for number, source in enumerate(sources, start=1):
        field = "input_image" if number == 1 else f"input_image_{number}"
        payload[field] = to_image_input(source)
    response = requests.post(API_URL, headers=HEADERS, json=payload, timeout=240)
    response.raise_for_status()
    return response.json()


def save_first_image(result, stem):
    # FLUXが返すURLは10分で失効するため、すぐにダウンロードする
    download = requests.get(result["data"][0]["url"], timeout=120)
    download.raise_for_status()
    image = download.content
    extension = "png" if image.startswith(b"\x89PNG") else "jpg"
    path = Path(f"{stem}.{extension}")
    path.write_bytes(image)
    return path


result = flux_edit(
    "画像1を赤いロボット、画像2を温室の背景、画像3を黄色いスケートボードとして使い、"
    "コラージュではなく、1つのまとまった新しいシーンにしてください。",
    ["robot.png", "greenhouse.png", "skateboard.png"],
    width=1792,
    height=1024,
)
print("保存しました:", save_first_image(result, "flux-python-edit"))
```

## パラメーター

| パラメーター | 型 | 必須 | 説明 |
| - | - | - | - |
| `model` | string | 必須 | `flux-2-pro`、`flux-2-flex`、`flux-2-max` |
| `prompt` | string | 必須 | 編集の指示。参照画像が複数あるときは「画像1」「画像2」のように指定する |
| `input_image` | string | 編集では必須 | 1枚目の参照画像（公開URLまたはデータURL） |
| `input_image_2` … `input_image_8` | string | 任意 | 追加の参照画像。順に番号を付ける |
| `size` | string | 任意 | 出力サイズ。例：`1792x1024` |
| `width`、`height` | integer | 任意 | ピクセル単位の出力サイズ。16の倍数、64以上、総ピクセル数は約4MPまで。`size` の代わりに使う |
| `output_format` | string | 任意 | `jpeg`（既定値）または `png` |
| `seed` | integer | 任意 | 結果を再現するための固定シード |
| `n` | integer | 任意 | 画像の枚数。`1` のみ対応 |

出力サイズは、`size` か、`width` と `height` のどちらか一方で指定します。よく使う `size` の値は、[FLUX.2の生成](https://docs.laozhang.ai/ja/api-capabilities/flux-image-generation.md)の「出力サイズ」に一覧があります。

## レスポンスを処理する

レスポンスは、画像1枚を `data[0].url` で返します。FLUXは `b64_json` を返さないため、`response_format` は送らないでください。リンクは画像の生成から10分で失効するので、特にバッチ処理では、リクエストが返ったらすぐにダウンロードしてください。

`output_format` を `png` にしない限り、画像はJPEGです。

## プロンプトのコツ

* 各画像は、フィールドの順に「画像1」「画像2」「画像3」のように呼びます。
* ロゴ、顔、商品の色など、各参照画像から残すべき要素を明記します。
* 出力を1枚のまとまった画像にするよう指示します。
* コラージュ、画面分割、枠線、ラベルなど、避けたいものを書きます。

```text theme={null}
画像1をキャラクター、画像2を背景、画像3を商品として使ってください。
1枚のまとまった広告ポスターにしてください。
キャラクターの服装、背景のライティング、商品のロゴは保ってください。
コラージュや画面分割のレイアウトにはしないでください。
```

## エラーと課金

* **HTTP 400**：フィールド名、参照画像の枚数、出力サイズを確認します。
  * フィールド名：`input_image`、続いて `input_image_2` 以降
  * 参照画像の枚数：最大8枚
  * 出力サイズ：16の倍数、64ピクセル以上、約4MPまで。`size`、または `width` と `height` で指定
* **参照画像を読み込めない**：URLは公開されている必要があります。公開できない場合は、ファイルをデータURLとして送ります。
* **結果のリンクが使えない**：生成から10分が過ぎて失効しています。リクエストを再実行し、すぐに結果をダウンロードします。
* **HTTP 401**：キーと `Authorization: Bearer` ヘッダーを確認します。
* **HTTP 429、5xx、タイムアウト**：間隔を空けてリトライします。タイムアウトのあとは、二重に支払わないよう、再送する前に[呼び出しログ](https://api.laozhang.ai/log)を確認します。

リクエストごとに、モデルの1回あたりの料金が課金されます。呼び出しログには、リクエストごとのモデルと課金額が表示されます。

## 旧モデルのFLUX Kontext

`flux-kontext-pro` と `flux-kontext-max` は、既存の連携のためにモデル一覧に残っています。`size` の代わりに `aspect_ratio` フィールドを使います。詳しくは[FLUX.2の生成](https://docs.laozhang.ai/ja/api-capabilities/flux-image-generation.md)の旧モデルの節を参照してください。新しく編集を組み込む場合は、FLUX.2を使ってください。

## よくある質問

### 画像の一部だけを編集できますか？

できます。ただし範囲は言葉で指定します。リクエストにはマスクのフィールドがないため、変更する要素と変えずに残す部分をプロンプトに書いてください。

### 編集は生成より高いですか？

いいえ。FLUX.2は回数課金なので、編集も生成と同じ1回あたりの料金です。参照画像が1枚でも8枚でも、出力サイズがいくつでも変わりません。実際の課金額は[呼び出しログ](https://docs.laozhang.ai/en/faq/call-logs.md)で確認できます。

### 編集と生成は同じモデルですか？

はい。`flux-2-pro`、`flux-2-flex`、`flux-2-max` は、どちらにも使えます。`input_image` があるリクエストは編集、ない場合は[FLUX.2の生成](https://docs.laozhang.ai/ja/api-capabilities/flux-image-generation.md)のとおり新しい画像の生成になります。

### OpenAI SDKの `images.edit()` で編集できますか？

1枚の画像の編集だけなら可能です。`images.edit()` はマルチパートのフォームデータを `/v1/images/edits` にアップロードしますが、このエンドポイントは画像を1枚しか受け取らず、参照画像を合成できません。

代わりに `client.images.generate()` を使い、`input_image`（参照画像を増やすときは番号付きのフィールドも）を公開URLかデータURLとして `extra_body` に入れてください。このページのPythonヘルパーも、`requests` で同じことをしています。

## 関連ドキュメントと参考資料

* [FLUX.2の生成](https://docs.laozhang.ai/ja/api-capabilities/flux-image-generation.md)：テキストからの画像生成、出力サイズ、旧モデルのKontext
* [画像APIの比較](https://docs.laozhang.ai/ja/api-capabilities/image-generation-guide.md)：FLUX.2とほかの画像モデルの比較
* [Images API](https://docs.laozhang.ai/ja/api-reference/images.md)：共通のリクエストとレスポンスの形式
* [AIモデルのAPI料金一覧](https://docs.laozhang.ai/ja/models.md)：FLUXの現在の価格とグループ
* [呼び出しログ](https://docs.laozhang.ai/en/faq/call-logs.md)：リクエストごとのモデルと課金額の確認
* [Black Forest Labs：FLUX.2の画像編集](https://docs.bfl.ai/flux_2/flux2_image_editing)（英語）：複数の参照画像による編集、参照画像の上限、結果URLの有効期間
* [Black Forest Labs：FLUX.2の概要](https://docs.bfl.ai/flux_2/flux2_overview)（英語）：各FLUX.2モデルの用途


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.