0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Adobe Firefly Custom Models入門 — ブランド画像生成をAPIで自動化する

0
Last updated at Posted at 2026-03-22

Adobe Firefly Custom Modelsによるブランド画像生成

はじめに

2026年3月19日、AdobeはFirefly Custom Modelsのパブリックベータを公開した。10〜30枚の画像をアップロードするだけで、自社ブランドのスタイルを学習したカスタムAI画像生成モデルを作成できる。さらに、このカスタムモデルはREST API経由でプログラムから呼び出せるため、コンテンツパイプラインへの組み込みが可能になる。

この記事では、Firefly Custom Modelsの仕組みから、APIを使った画像生成の実装方法までを解説する。

この記事で学べること

  • Firefly Custom Modelsの3つのモデルタイプと訓練プロセス
  • OAuth 2.0認証からカスタムモデルでの画像生成までのAPI実装
  • Firefly Foundryによるエンタープライズ向け展開の全体像

対象読者

  • ブランドガイドラインに沿った画像生成を自動化したいエンジニア
  • コンテンツパイプラインにAI画像生成を組み込みたい開発者
  • Adobe Firefly APIの活用を検討しているチーム

TL;DR

  • Firefly Custom Modelsは10〜30枚の画像で「イラスト」「フォト」「キャラクター」の3タイプのカスタムモデルを訓練できる
  • REST APIの /v3/images/generate-async エンドポイントに customModelId を渡すことで、カスタムモデルによる画像生成が可能
  • 訓練コストは500クレジット、Firefly Standardプラン($9.99/月、2,000クレジット)から利用可能

Firefly Custom Modelsの訓練ワークフロー

Firefly Custom Modelsの概要

3つのモデルタイプ

Firefly Custom Modelsでは、用途に応じて3種類のモデルタイプを選択できる。

モデルタイプ 用途 学習対象
イラストスタイル ブランドのビジュアルスタイル統一 線の太さ、塗り、配色パターン
フォトスタイル 写真のトーン・雰囲気の再現 ライティング、構図、色調
キャラクター キャラクターの一貫性維持 キャラクターの外見、ポーズ変化

公式ドキュメントによると、訓練されたモデルはデフォルトでプライベートに設定されており、生成されたコンテンツの権利もユーザーに帰属する。

訓練の要件と制約

訓練に必要なアセットの仕様は以下のとおりである。

項目 要件
画像枚数 10〜30枚
ファイル形式 JPGまたはPNG
アスペクト比 最大16:9
解像度 最低1,000ピクセル
訓練時間 30分〜数時間
コスト 500クレジット(訓練開始時に消費)

訓練セットには品質スコアリング機能が備わっており、85以上のスコアが推奨されている。画像をアップロードすると、モデルタイトル、説明、サンプルプロンプト、タグ、画像キャプションが自動生成され、ユーザーが確認・編集した上で訓練を開始する流れとなる。

訓練開始と同時にクレジットが消費される。訓練をキャンセルしてもクレジットは返金されない(システムエラーによる失敗を除く)。

料金プランとクレジット体系

Firefly Custom Modelsを利用するには、有料プランへの加入が必要となる。2026年3月時点で、Adobeは以下のFireflyプランを提供している。

プラン プレミアムクレジット 主な用途
Firefly Pro 4,000 個人クリエイター向け
Firefly Pro Plus 7,000 プロフェッショナル向け
Firefly Premium 50,000 大量生成・エンタープライズ向け

すべての有料プランで標準画像生成は無制限である。カスタムモデルの訓練には500クレジットが必要なため、Firefly Proプランでは月に最大7モデルの訓練が可能となる。最新の料金は Adobe Firefly公式プランページ を参照されたい。

2026年4月22日まで、Firefly Pro以上の全プランで対象モデル・解像度での無制限生成プロモーションが実施されている。

Firefly API認証・画像生成フロー

APIによるカスタムモデル画像生成

前提条件

Firefly APIを利用するには、以下の準備が必要となる。

  1. Adobe Developer Console でプロジェクトを作成
  2. Firefly Services APIを追加し、Client IDとClient Secretを取得
  3. OAuth 2.0 Server-to-Server認証情報を設定

Step 1: アクセストークンの取得

Firefly APIはOAuth 2.0 Client Credentials Flowで認証する。トークンエンドポイントにPOSTリクエストを送信してアクセストークンを取得する。

curl -X POST "https://ims-na1.adobelogin.com/ims/token/v3" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=client_credentials" \
  -d "client_id=YOUR_CLIENT_ID" \
  -d "client_secret=YOUR_CLIENT_SECRET" \
  -d "scope=openid,AdobeID,firefly_api,ff_apis"

レスポンスとして以下のJSONが返される。

{
  "access_token": "eyJhbGciOi...",
  "token_type": "bearer",
  "expires_in": 86399
}

expires_in は86,399秒(約24時間)であり、本番環境ではトークンの有効期限管理を実装する必要がある。

Step 2: カスタムモデル一覧の取得

訓練済みのカスタムモデルの一覧を取得するには、 /v3/custom-models エンドポイントにGETリクエストを送信する。

curl -X GET "https://firefly-api.adobe.io/v3/custom-models" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "x-api-key: YOUR_CLIENT_ID" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json"

レスポンスには、各モデルの assetIddisplayNametrainingModebaseModelsamplePrompt が含まれる。この assetId が画像生成時に customModelId として使用する値となる。

Step 3: カスタムモデルによる画像生成

画像生成は非同期APIとして提供されている。 /v3/images/generate-async エンドポイントにPOSTリクエストを送信し、ジョブIDを取得した後、ステータスをポーリングして結果を受け取る。

curl -X POST "https://firefly-api.adobe.io/v3/images/generate-async" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "x-api-key: YOUR_CLIENT_ID" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "x-accept-mimetype: image/jpeg" \
  -H "x-model-version: image3_custom" \
  -d '{
    "prompt": "A product shot on a marble table with soft natural lighting",
    "customModelId": "urn:aaid:sc:VA6C2:your-model-id",
    "numVariations": 2,
    "size": {
      "width": 2048,
      "height": 2048
    },
    "contentClass": "photo",
    "visualIntensity": 6
  }'

ポイントは以下の3点である。

  • x-model-version: image3_custom ヘッダーが必須。このヘッダーがないとカスタムモデルが適用されない
  • customModelId にStep 2で取得した assetId を指定する
  • contentClass には "photo" または "art" を指定する

レスポンスとして、ジョブIDとステータス確認用URLが返される。

{
  "jobId": "urn:ff:jobs:example-job-id",
  "statusUrl": "https://firefly-api.adobe.io/v3/status/example-status-id",
  "cancelUrl": "https://firefly-api.adobe.io/v3/cancel/example-cancel-id"
}

Step 4: 生成結果の取得

statusUrl にGETリクエストを送信して、ジョブの完了を確認する。

curl -X GET "STATUS_URL_FROM_STEP3" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "x-api-key: YOUR_CLIENT_ID" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json"

ステータスが "succeeded" になると、レスポンスに生成画像のURLが含まれる。

{
  "status": "succeeded",
  "result": {
    "size": { "width": 2048, "height": 2048 },
    "outputs": [
      {
        "seed": 1779323515,
        "image": { "url": "https://..." }
      }
    ],
    "contentClass": "photo"
  }
}

リクエストボディの全パラメータ

パラメータ 必須 説明
prompt string Yes 画像生成のテキストプロンプト
customModelId string Yes カスタムモデルのアセットID
numVariations number No 生成するバリエーション数
seeds number[] No 再現性のためのシード値配列
size object No widthheight(最大2048)
contentClass string No "photo" または "art"
visualIntensity number No ビジュアルの強度(1〜10)
style.presets string[] No スタイルプリセット名の配列
style.strength number No スタイル適用の強度(0〜100)
promptBiasingLocaleCode string No プロンプトのロケール(例: "en-US"

Firefly Custom Modelsでは、ネガティブプロンプトはサポートされていない(Image Model 3およびImage Model 4の両方で非対応)。

標準生成とCustom Modelsの比較

Pythonでの実装例

上記のAPIフローをPythonで実装した例を示す。

import requests
import time

# 認証情報
CLIENT_ID = "your_client_id"
CLIENT_SECRET = "your_client_secret"
BASE_URL = "https://firefly-api.adobe.io"
AUTH_URL = "https://ims-na1.adobelogin.com/ims/token/v3"


def get_access_token():
    """OAuth 2.0 Client Credentialsでアクセストークンを取得"""
    resp = requests.post(AUTH_URL, data={
        "grant_type": "client_credentials",
        "client_id": CLIENT_ID,
        "client_secret": CLIENT_SECRET,
        "scope": "openid,AdobeID,firefly_api,ff_apis",
    })
    resp.raise_for_status()
    return resp.json()["access_token"]


def list_custom_models(token):
    """訓練済みカスタムモデルの一覧を取得"""
    resp = requests.get(
        f"{BASE_URL}/v3/custom-models",
        headers={
            "Authorization": f"Bearer {token}",
            "x-api-key": CLIENT_ID,
            "Content-Type": "application/json",
            "Accept": "application/json",
        },
    )
    resp.raise_for_status()
    return resp.json().get("custom_models", [])


def generate_image(token, model_id, prompt):
    """カスタムモデルで画像を非同期生成"""
    resp = requests.post(
        f"{BASE_URL}/v3/images/generate-async",
        headers={
            "Authorization": f"Bearer {token}",
            "x-api-key": CLIENT_ID,
            "Content-Type": "application/json",
            "Accept": "application/json",
            "x-accept-mimetype": "image/jpeg",
            "x-model-version": "image3_custom",
        },
        json={
            "prompt": prompt,
            "customModelId": model_id,
            "numVariations": 2,
            "size": {"width": 2048, "height": 2048},
            "contentClass": "photo",
        },
    )
    resp.raise_for_status()
    return resp.json()


def poll_status(token, status_url, interval=5, timeout=120):
    """ジョブ完了までポーリング"""
    elapsed = 0
    while elapsed < timeout:
        resp = requests.get(
            status_url,
            headers={
                "Authorization": f"Bearer {token}",
                "x-api-key": CLIENT_ID,
                "Content-Type": "application/json",
                "Accept": "application/json",
            },
        )
        resp.raise_for_status()
        data = resp.json()

        if data.get("status") == "succeeded":
            return data.get("result", {})
        if data.get("status") == "failed":
            raise RuntimeError(f"Generation failed: {data}")

        time.sleep(interval)
        elapsed += interval

    raise TimeoutError("Image generation timed out")


# 実行
token = get_access_token()
models = list_custom_models(token)

if models:
    model = models[0]
    print(f"Using model: {model['displayName']}")

    job = generate_image(
        token,
        model["assetId"],
        "A hero banner with brand colors and geometric patterns",
    )
    result = poll_status(token, job["statusUrl"])

    for output in result.get("outputs", []):
        print(f"Generated image: {output['image']['url']}")

Firefly Foundry: エンタープライズ向け展開

個人クリエイター向けのCustom Modelsに加え、Adobeはエンタープライズ向けに Firefly Foundry を提供している。

項目 Custom Models Firefly Foundry
対象 個人・小規模チーム エンタープライズ
コンテンツタイプ 画像のみ 画像・動画・音声・ベクター・3D
訓練データ 10〜30枚の画像 企業のIP資産全体
料金体系 クレジットベース 使用量ベース(要問合せ)
統合先 Firefly Web・API Adobe製品群 + 企業システム

Firefly Foundryでは、ビジネスニーズの評価、モデル訓練・ワークフロー設計、テスト・検証、統合・デプロイまでをAdobeが支援する。大規模なコンテンツサプライチェーンの自動化が必要な場合は、Foundryの検討が推奨される。

30以上の外部モデルとの統合

Firefly Custom Modelsの発表と同時に、AdobeはFireflyプラットフォームに30以上の外部AIモデルを統合したことも発表した。

プロバイダー モデル 用途
Google Nano Banana 2 画像生成
Google Veo 3.1 動画生成
Runway Gen-4.5 動画生成
Kuaishou Kling 2.5 Turbo 動画生成
Adobe Firefly Image Model 5 画像生成(GA)

これにより、Fireflyは単体の画像生成ツールから、複数のAIモデルを統合したクリエイティブプラットフォームへと進化している。外部モデルの利用にはプレミアムクレジットが必要となる。

Project Moonlight: エージェント型AIアシスタント

現在プライベートベータとして提供されている Project Moonlight は、会話形式でAdobe製品を横断操作できるエージェント型AIアシスタントである。「バナー画像を3サイズで作成して」といった自然言語の指示で、Firefly Custom Modelsを含む各種Adobe機能を連携実行できる。

Project Moonlightは、Custom ModelsのAPIと組み合わせることで、ブランドアセットの生成ワークフローをさらに効率化する可能性がある。

注意点

Firefly Custom Models APIを利用する際に留意すべきポイントをまとめる。

  • ネガティブプロンプト非対応: Image Model 3およびImage Model 4のカスタムモデルでは、ネガティブプロンプトが使用できない
  • 非同期API: 画像生成は非同期で実行されるため、ステータスポーリングの実装が必須となる
  • クレジット管理: 訓練開始時に500クレジットが即座に消費される。キャンセルしても返金されないため、訓練データの品質を事前に十分確認することが重要である
  • モデル共有: カスタムモデルをAPI経由で利用するには、Adobe Developer Consoleのアプリに対してモデルへのアクセス権を付与する必要がある
  • 認証情報の管理: Client IDとClient Secretはサーバーサイドで管理し、クライアントサイドのコードに含めないこと

まとめ

Adobe Firefly Custom Modelsは、ブランド一貫性のある画像生成を少量の訓練データとREST APIで実現するサービスである。

  • 10〜30枚の画像と500クレジットで、イラスト・フォト・キャラクターの3タイプから選択してカスタムモデルを訓練できる
  • /v3/images/generate-async エンドポイントと customModelId パラメータで、既存のコンテンツパイプラインに組み込める
  • エンタープライズ規模のブランドアセット管理にはFirefly Foundryが用意されている

現在はパブリックベータの段階であり、ネガティブプロンプトの非対応など制約もあるが、ブランドガイドラインに沿った画像生成の自動化を検討しているチームにとって、有力な選択肢となる。

参考リンク

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?