はじめに
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の概要
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以上の全プランで対象モデル・解像度での無制限生成プロモーションが実施されている。
APIによるカスタムモデル画像生成
前提条件
Firefly APIを利用するには、以下の準備が必要となる。
- Adobe Developer Console でプロジェクトを作成
- Firefly Services APIを追加し、Client IDとClient Secretを取得
- 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"
レスポンスには、各モデルの assetId、displayName、trainingMode、baseModel、samplePrompt が含まれる。この 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 |
width と height(最大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の両方で非対応)。
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モデルを統合したことも発表した。
| プロバイダー | モデル | 用途 |
|---|---|---|
| Nano Banana 2 | 画像生成 | |
| 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が用意されている
現在はパブリックベータの段階であり、ネガティブプロンプトの非対応など制約もあるが、ブランドガイドラインに沿った画像生成の自動化を検討しているチームにとって、有力な選択肢となる。



