招待して報酬

招待報酬の仕組み

招待リンクを共有します。友だちがリンクから登録してチャージすると、その後のチャージごとに表示された報酬を受け取れます。

Ideogram 4.5 vs FLUX 3:商品画像の精密編集を比較

承認済みの商品画像に小さな修正を加えるなら、まず Ideogram 4.5 を試すのが合理的です。複数オブジェクトの配置制御や多くの参照画像が必要なら、FLUX 3 を先に試します。本記事は同一条件の独立ベンチマークがない状態で勝者を断定せず、同一素材による比較、チェックポイント運用、ローカルのピクセル検証を提示します。

目次
Ideogram 4.5 vs FLUX 3:商品画像の精密編集を比較

商品画像の編集では、「きれいな新画像」ができれば成功とは限りません。すでに承認された素材なら、求められるのはラベルの一行だけを直す、キャップだけを別の色にする、小さな物体だけを置き換える、といった限定的な変更です。パッケージ形状、ロゴ、バーコード、照明、反射、影、背景、構図は勝手に描き直されてはいけません。

実務上の出発点は明確です。「この小領域だけを変更し、それ以外を保つ」が契約なら、まず Ideogram 4.5 Precise Edit を試します。難所が空間配置、複数要素の連動、または多くの参照画像にあるなら、まず FLUX 3 Image を試します。これは普遍的な画質ランキングではありません。確認できた公式資料には、両者を同じ入力で独立・再現可能に比較したベンチマークがないため、最終判断は自社の受け入れテストで行う必要があります。

30 秒で決める最初の候補

要件先に試すモデル理由
ラベル、法定表示、バッジ、小さな色領域の修正Ideogram 4.5Precise Edit は入力と同じ出力寸法、任意のマスク、意味のある変更を受けなかったピクセルの正確なコピーを文書化しています。
大きな印刷マスターの一部だけを編集して戻すIdeogram 4.5公式モデルページが、切り出した領域の境界を保って元画像へ戻す手順を説明しています。
複数の要素を移動・削除・置換するFLUX 3構造化された bounding box 行で、元位置と目標位置を指定できます。
多数の参照画像を使うFLUX 3API は 1〜10 枚を受け取り、Ideogram は最大 4 枚、マスク利用時はさらに少なくなります。
「領域外は変えてはいけない」を厳格な条件にするIdeogram を先に試し、必ず検証Ideogram の mask は編集領域を制限します。FLUX の box は配置ガイドであり、clipping mask ではありません。
市場別・配色別の大量バリエーションどちらでもよいが分岐必須すべての派生版を同じ承認済みチェックポイントから作り、派生版同士を直列編集しません。

「精密」を検証可能な条件にする

モデルを選ぶ前に、次の三つを明文化します。

  1. **変更可能領域:**変更を許す最小範囲。境界のなじみ、影、反射に必要な余白も含めます。
  2. **保護領域:**安定していなければならないすべてのピクセルと物体。
  3. **合格条件:**寸法、領域外の変化、文字の正確性、色、形状、光、カラープロファイル、人による確認。

意味として同じ画像に見えることと、元データを保つことは別です。ボトル自体は同じに見えても、ロゴの字間、ラベルの質感、ハイライト形状、背景の粒状感が変わることがあります。コンセプト画像では許容できても、EC、規制文言、パッケージ承認、印刷では問題になります。

Ideogram 4.5 の仕組み

公式の Ideogram 4.5 Precise Edit API は次の endpoint を使います。

POST https://api.ideogram.ai/v2/image/precise-edit/ideogram-4-5

元画像を image、指示を prompt として送り、必要なら reference_images と mask を追加します。文書では、出力の幅と高さは入力と同じで、編集によって意味のある変更を受けなかったピクセルは入力から正確にコピーされると説明されています。Ideogram に渡すマスクは 黒が編集、白が保持 です。

そのため、承認済み素材への小さな外科的修正では、Ideogram の公開仕様のほうが目的に近い出発点になります。高解像度素材では、Ideogram 4.5 のモデルページ が、対象を余白付きで切り出して編集し、境界を保ったまま元画像へ戻す方法を案内しています。

ただし二つ注意があります。

  • API 文書では、モデルに対して大きすぎる画像は縮小されるとされています。巨大なマスター全体を送り、全ピクセルが維持されると仮定してはいけません。
  • mask は参照スロットを一つ使うため、マスク付きリクエストでは使える補助画像が減ります。

既定では同期応答です。async または webhook を使う場合は generation_id を保存し、GET /v2/generations/{generation_id} をポーリングします。API 概要 は結果 URL が失効すると説明しているため、元ファイルをすぐにダウンロードします。

FLUX 3 の仕組み

公式の FLUX 3 Image API は次を使います。

POST https://api.bfl.ai/v1/flux-3-image

独立した編集モードはなく、prompt と 1 枚以上の images を送ります。API は 1〜10 枚の参照画像を受け取ります。aspect_ratio: auto では、prompt に明示した比率が優先され、それ以外は参照画像がある場合に最初の画像のフレーミングを保ちます。

空間制御の特徴は bounding box 形式 です。box は正規化された 0〜1000 のグリッド上で [top, left, bottom, right] と記述します。行を使って、保持、移動、追加、置換、色変更、削除のための元位置と目標位置を表せます。

したがって、「この物体をここへ置く」「複数の要素を一度に合わせる」作業では FLUX 3 が有力です。ただし公式文書は重要な境界も示しています。**box は配置を導くもので、clipping mask ではありません。**編集 box の外側は「通常」同一に保たれるという表現であり、絶対保証ではありません。

FLUX の処理は非同期です。返された id と polling_url を保存し、統合ガイド の指示どおり返却された URL を使います。状態が Ready になったら result.sample をすぐに保存してください。BFL は生成画像が 10 分後に利用できなくなると説明しています。

厳密な比較では grounding: false を検討します。grounding は既定で web 検索や画像検索を利用する可能性があり、与えられた商品画像だけを変更するテストには不要な変数です。

同一素材で再現可能な比較を行う

1. 不変のマスターを固定する

ロスレス PNG、または承認済み TIFF から作成した PNG を使用します。ファイル名、SHA-256、ピクセル寸法、カラープロファイル、承認バージョンを記録し、生成処理が上書きできないコピーを保管します。

2. 内部用の「変更許可マスク」を作る

元画像と同じ寸法のグレースケール画像を用意します。

  • **白:**変更してよい。
  • **黒:**保護しなければならない。

対象の周囲に小さな余白を入れます。ラベルの影、反射、エンボス、透明フィルムが変化に追従する必要があるなら、それも許可領域へ含めます。

この内部マスクは「白=変更可」です。Ideogram に送るマスクの「黒=編集、白=保持」と逆なので、ファイル名を明確に分けてください。

3. 1 回のリクエストで 1 つだけ変える

適切なテストは、一行の置換、キャップだけの色変更、ステッカー一枚の削除です。文字修正、背景交換、再照明、再構図を一度に行ってはいけません。

prompt の例:

LABEL EDIT
Change only the product label text from "CLASSIC" to "ZERO SUGAR".
Keep the package shape, logo, barcode, lighting, reflections, shadows, background,
camera angle, crop, and all pixels outside the label area unchanged.
Do not redesign, restyle, or add objects.

COLORWAY
Change only the bottle cap from matte black to Pantone 186 C red.
Preserve the bottle, label, liquid, highlights, reflections, shadows, background,
camera angle, crop, and every object outside the cap area.

OBJECT REPLACEMENT
Replace only the small paper sticker with a clean white sticker of the same size,
position, perspective, edge softness, and shadow. Keep everything else unchanged.

FLUX では位置が難しい場合に実測した box 行を加えます。次は例示です。実画像から座標を計算し、box はマスクではないことを忘れないでください。

Edit only <front_label>. Keep every other part of ref_image_0 unchanged.
[
  {
    "id": "front_label",
    "from": null,
    "src_bbox": null,
    "tgt_bbox": [360, 285, 690, 725],
    "desc": "the same front label with the text ZERO SUGAR; preserve its size, perspective, typography, print texture, highlights, and shadow"
  }
]

4. 同じ業務意図を各モデルの正式な制御で試す

  • **Ideogram:**画像全体または余白付き crop を送り、厳密な局所化には黒編集・白保持の公式マスクを使います。
  • **FLUX 3:**元画像を images の先頭に置き、aspect_ratio: auto を維持し、必要なら box 行を追加し、比較用 run では grounding を無効にします。

すべての設定を記録します。公平な比較とは、インターフェースを無理に同じにすることではなく、同じ業務変更を各製品の公開制御で実行することです。

5. 生の出力をすぐ保存する

ブラウザのスクリーンショット、チャットのプレビュー、SNS の圧縮画像で比較してはいけません。次のような名前で保存します。

masterHash_model_editId_attempt.ext

候補ファイルの hash も計算します。後からリサイズ、色変換、圧縮したファイルは、元出力と分けて派生物として保存します。

保護領域をローカルでピクセル検証する

次のスクリプトは、内部マスクの外側で元画像と候補画像を比較します。差分画像では、変更された保護ピクセルが白、変更許可領域が灰色、変わらなかった保護領域が黒になります。

依存パッケージをインストールします。

python -m pip install pillow numpy

verify_edit.py として保存します。

#!/usr/bin/env python3
"""Check whether an edited image changed pixels outside an allowed mask."""
from __future__ import annotations

import argparse
import sys
from pathlib import Path

import numpy as np
from PIL import Image


def parse_args() -> argparse.Namespace:
    parser = argparse.ArgumentParser()
    parser.add_argument("original", type=Path)
    parser.add_argument("edited", type=Path)
    parser.add_argument("allowed_mask", type=Path,
                        help="white = may change, black = must stay unchanged")
    parser.add_argument("--tolerance", type=int, default=0,
                        help="maximum per-channel delta treated as unchanged")
    parser.add_argument("--max-outside-ratio", type=float, default=0.0)
    parser.add_argument("--diff-map", type=Path, default=Path("outside-diff.png"))
    return parser.parse_args()


def main() -> int:
    args = parse_args()
    if not 0 <= args.tolerance <= 255:
        raise SystemExit("--tolerance must be between 0 and 255")
    if not 0.0 <= args.max_outside_ratio <= 1.0:
        raise SystemExit("--max-outside-ratio must be between 0 and 1")

    with Image.open(args.original) as original_file, \
         Image.open(args.edited) as edited_file, \
         Image.open(args.allowed_mask) as mask_file:
        if original_file.size != edited_file.size or original_file.size != mask_file.size:
            print("FAIL: original, edited image, and mask must have identical dimensions")
            return 2

        original_profile = original_file.info.get("icc_profile")
        edited_profile = edited_file.info.get("icc_profile")
        original = np.asarray(original_file.convert("RGB"), dtype=np.int16)
        edited = np.asarray(edited_file.convert("RGB"), dtype=np.int16)
        allowed = np.asarray(mask_file.convert("L")) >= 128

    delta = np.abs(edited - original)
    changed = np.max(delta, axis=2) > args.tolerance
    protected = ~allowed
    outside_changed = changed & protected

    protected_pixels = int(protected.sum())
    changed_pixels = int(outside_changed.sum())
    outside_ratio = changed_pixels / protected_pixels if protected_pixels else 0.0
    max_delta = int(delta[protected].max()) if protected_pixels else 0

    diff_map = np.zeros(allowed.shape, dtype=np.uint8)
    diff_map[allowed] = 64
    diff_map[outside_changed] = 255
    Image.fromarray(diff_map, mode="L").save(args.diff_map)

    print(f"protected_pixels={protected_pixels}")
    print(f"outside_changed_pixels={changed_pixels}")
    print(f"outside_changed_ratio={outside_ratio:.8f}")
    print(f"max_outside_channel_delta={max_delta}")
    print(f"icc_profile_match={original_profile == edited_profile}")
    print(f"diff_map={args.diff_map}")

    if outside_ratio > args.max_outside_ratio:
        print("FAIL: protected area changed beyond the allowed threshold")
        return 1
    print("PASS: protected-area pixel check passed")
    return 0


if __name__ == "__main__":
    sys.exit(main())

ロスレスファイルを厳格に検査します。

python verify_edit.py master.png candidate.png allowed-mask.png --tolerance 0 --max-outside-ratio 0

outside_changed_pixels=0 なら、許可領域外の RGB 値は一致しています。outside_changed_ratio が 0 でなければ drift があるため、outside-diff.png を確認します。icc_profile_match=False はカラー処理経路が変わった警告です。許容差 0 はロスレス向けです。JPEG の再圧縮は多数のピクセルを変えるので、元のロスレス出力を検証するか、承認したしきい値を明文化します。

保護領域が一致しても、編集箇所が正しいとは限りません。スペル、書体、ロゴ、素材感、遠近、境界、高光、影、反射、前後関係を人が確認します。

連続編集で劣化を蓄積させない

ファイルを三種類に分けます。

  1. **Master:**承認済みで不変の元データ。
  2. **Checkpoint:**自動検査と人の確認を通過した候補。
  3. **Variant:**checkpoint から分岐した地域、色、サイズ別の派生版。

赤、青、緑のバリエーションは同じ checkpoint から作ります。赤を元に青、青を元に緑を作ってはいけません。1 回に 1 変更だけ行い、失敗したら最後に承認された checkpoint へ戻ります。却下画像にさらに「ずれを直す」編集を重ねないでください。

編集台帳には、元画像 hash、モデル、endpoint、prompt、mask または box、出力 hash、寸法、保護領域の変更率、レビュー結果を残します。Ideogram の drift 低減という説明も FLUX の box 制御も、この手順で検証すべきであり、checkpoint の代わりにはなりません。

シナリオ別の推奨

ラベルや法定表示の修正

**まず Ideogram 4.5。**余白付き crop と公式マスクを使い、戻す前に全文字を確認します。複雑な配置なら FLUX も試せますが、box を隔離保証と見なしてはいけません。

単一の色変更

境界が明確で、それ以外を安定させたいなら まず Ideogram 4.5。色の反射や投射光も許可領域に含めます。複数オブジェクトが同時に変わる、または参照画像が素材と色を規定するなら まず FLUX 3。

物体の置換・移動・削除

元位置と目標位置が中心課題なら まず FLUX 3。対象が小さく mask で隔離でき、元画像の厳密な形状が重要なら まず Ideogram 4.5。

高解像度の印刷マスター

余白付きで切り出し、部分編集し、境界を検査して元へ戻します。Ideogram はこの方法を直接文書化しています。FLUX では最終寸法と保護ピクセルを前提ではなく合格条件として扱います。

大量のバリエーション

小さく代表的な素材群で両ワークフローを試し、却下率と手作業が少ないほうを選びます。checkpoint を固定し、すべての派生版をそこから分岐します。

公開前のチェックリスト

  • 正しい master または checkpoint が元になっている。
  • 1 回の処理で、記録された 1 変更だけを依頼した。
  • 寸法、向き、crop が正しい。
  • 保護領域がプロジェクトのしきい値を満たす。
  • 文字、ロゴ、バーコード、法定情報が正確である。
  • 素材感、境界、影、反射、前後関係が自然である。
  • プロファイルと形式が出力先に適合する。
  • 生出力、prompt、制御データ、hash、レビュー判断を保存した。
  • 新しい variant は別の variant ではなく checkpoint から作る。

結論

完成済みの商品画像への小さな外科的修正では、公開仕様が保存要件に近く、実際の mask を持つ Ideogram 4.5 を最初に試すのが合理的です。空間関係が複雑、複数要素を連動、または参照画像が多い編集では、構造化 box を持つ FLUX 3 を最初に試すのが合理的です。

どちらを選んでも検証は必要です。不変の master を保ち、同じ source で試し、保護領域を測定し、変更箇所を人が確認し、variant を作る前に checkpoint を承認します。この工程こそが、小さな修正の連続をいつの間にか別画像へ変えてしまう事故を防ぎます。

公式資料

LLM ワークフローを最適化しませんか?

単一 API でモデルを接続し、キーと AI コストを管理できます。

無料で始める