画像&ビデオクイックスタート

テキストプロンプトと参照メディアから画像やビデオを生成する方法を学びます。

画像&ビデオAPIは非同期です。生成を送信し、完了後に署名付きURLから結果をダウンロードします。画像とビデオには別々のエンドポイントがありますが、どちらもリクエストとレスポンスの形式は同じです。

結果を取得する方法は2つあります。推奨されるのは、以下の例で使用しているWebhook配信です。生成が最終ステータスに達した時点でElevenLabsがエンドポイントを呼び出すため、待機に時間を費やしません。ポーリングは、コールバックを受信するエンドポイントがない場合の代替手段であり、各例ではポーリングに切り替える方法も示しています。

画像&ビデオAPIを使用するには、プロ以上のプランが必要です。それより下のティアのワークスペースからの呼び出しは、 402 paid_plan_requiredエラーで拒否されます。APIキーには、ワークスペースの画像&ビデオまたは Flows権限も必要です。

画像を生成する

1

APIキーを作成する

ダッシュボードでAPIキーを作成し、安全にAPIへアクセスするために使用します。

キーは管理されたシークレットとして保存し、好みに応じて.envファイルによる環境変数として、またはアプリの設定で直接SDKに渡してください。

.env
ELEVENLABS_API_KEY=<your_api_key_here>
2

SDKをインストールする

dotenvライブラリも使用して、環境変数からAPIキーを読み込みます。

pip install elevenlabs
pip install python-dotenv
3

生成を送信する

各モデルには固有のリクエストクラスがあり、そのフィールドがモデルで利用可能なパラメータです。 そのため、モデルを切り替えると利用できるフィールドが変わることがあります。不明なフィールドは無視されず、 拒否されます。

webhookは、完了した結果をワークスペースのWebhookへ配信するよう指定するため、呼び出しは生成がキューに追加されるとすぐに 戻ります。生成イベントを購読するWebhookが必要です。設定方法は画像&ビデオ Webhookを参照するか、フィールドを省略して 代わりにポーリングしてください。

# example.py
import os
from dotenv import load_dotenv
from elevenlabs import ImageGenerationRequest_Gemini3ProImage, WebhookTarget_All
from elevenlabs.client import ElevenLabs
load_dotenv()
elevenlabs = ElevenLabs(api_key=os.getenv("ELEVENLABS_API_KEY"))
generation = elevenlabs.flows.image.create(
request=ImageGenerationRequest_Gemini3ProImage(
prompt="A corgi in a tiny lifeguard chair on a sunlit beach at golden hour, photorealistic",
aspect_ratio="16:9",
resolution="2K",
webhook=WebhookTarget_All(),
)
)
print(generation.id, generation.status)

レスポンスには生成IDのみが含まれます。新しく作成された生成のステータスは常に pendingです。

{
"id": "JWr5N6X9ZTqf8jD2LmQb",
"status": "pending"
}
4

結果を取得する

リクエストでwebhookを指定しているため、生成がcompletedまたはfailedに達すると、ElevenLabsは エンドポイントにflows_generationイベントを送信します。イベントのdataはGETエンドポイントが返す内容と同一で、 画像&ビデオWebhookでは、それを受信する ハンドラーについて説明しています。

コールバックを受信するエンドポイントがない場合は、上記のリクエストからwebhookを削除して、代わりにポーリングします。 ステータスがcompletedまたはfailedになるまで生成を取得し、画像の場合はリクエストの間隔を少なくとも2秒空けます。 モダリティごとの間隔については、ポーリングのガイドラインを参照してください。

import time
import requests
while True:
result = elevenlabs.flows.image.get(generation.id)
if result.status in ("completed", "failed"):
break
time.sleep(2)
if result.status == "failed":
raise RuntimeError(f"{result.failure_reason}: {result.error_message}")
with open("corgi.png", "wb") as f:
f.write(requests.get(result.content_url).content)

どちらの方法でも、完了した生成には同じフィールドが含まれます。

{
"id": "JWr5N6X9ZTqf8jD2LmQb",
"status": "completed",
"content_url": "https://storage.googleapis.com/generations/JWr5N6X9ZTqf8jD2LmQb",
"content_mime_type": "image/png"
}
5

コードを実行する

python example.py

生成がキューに追加され、IDが表示されます。Webhook配信では画像がエンドポイントに届き、 ポーリングの場合はcorgi.pngに保存されます。

ビデオを生成する

ビデオ生成ではflows.videoを使用し、送信して結果を取得するという同じパターンに従います。ビデオには 数分かかる場合があるため、この例では結果を待つのではなく、webhookでWebhook配信を指定しています。

from elevenlabs import VideoGenerationRequest_Veo31FastGenerate001, WebhookTarget_All
generation = elevenlabs.flows.video.create(
request=VideoGenerationRequest_Veo31FastGenerate001(
prompt="A corgi rides a tiny surfboard across a sunlit wave at golden hour, cinematic",
duration_secs=8,
aspect_ratio="16:9",
resolution="1080p",
generate_audio=True,
webhook=WebhookTarget_All(),
)
)
print(generation.id)

生成がキューに追加されるとすぐに呼び出しが戻り、完了した結果は、生成イベントを購読しているワークスペース内のすべての Webhookに配信されます。ビデオ出力はMP4のため、完了ペイロードのcontent_mime_typeは video/mp4になります。Webhookの設定と、これを受信するハンドラーの実装については、 画像&ビデオWebhookを参照してください。

webhookには、生成イベントを購読しているワークスペースWebhookが少なくとも1つ必要です。Webhookがない場合、 結果の配信先がない生成を開始するのではなく、作成呼び出しが拒否されます。フィールドを削除すると、 flows.video.getによるポーリングに切り替えられます。ポーリングの頻度は10秒に1回以下にしてください。

結果の取得

Webhookとポーリングは同じペイロードを返します。違いは取得する内容ではなく、結果を待つ方法です。

Webhook配信ポーリング
最適な用途両方のモダリティのデフォルト、および本番環境でのあらゆる用途公開エンドポイントのないスクリプトや環境
必要なもの生成イベントを購読するHTTPSエンドポイントなし
待機のコストなし。生成の完了時に呼び出されますポーリングごと、生成ごとに1リクエスト

可能な限りWebhookを使用してください。コールバックの受信先がない場合はポーリングを使用し、その際は以下の間隔に従ってください。

Webhookターゲットの選択

webhookには2つの形式があります。WebhookTarget_Allは、生成イベントを購読しているすべてのWebhookに配信します。Webhookがローテーションまたは置き換えられても機能するため、これが適切なデフォルトです。 WebhookTarget_Idsは配信先を特定のWebhookに絞り込みます。1つのワークスペースから複数のコンシューマーに配信し、特定のジョブをそのうち1つだけに届ける場合に使用します。

from elevenlabs import WebhookTarget_Ids
webhook = WebhookTarget_Ids(ids=["Q8mVr2LpXcT4nB6yJdKw"])

すべてのIDは、あらかじめ生成イベントを購読している必要があります。未購読のWebhookを指定すると、暗黙的に無視されるのではなく拒否されます。配信されるペイロードはGETエンドポイントが返すものと同一のため、一方に対応して作成したハンドラーはもう一方でも機能します。Webhookガイドでは、Webhookの設定、署名の検証、イベントの処理について説明しています。

ポーリングのガイドライン

生成時間はモデル、解像度、動画の場合は長さによって異なります。固定ループではなく、リクエスト内容に合わせた間隔でポーリングしてください。

  • 画像:2秒に1回を超える頻度でポーリングしないでください。ほとんどは数秒以内に完了します。
  • 動画:10秒に1回を超える頻度でポーリングしないでください。数秒ではなく数分かかることを想定し、duration_secsとresolutionに合わせて間隔を調整してください。

どちらにも2つのルールがあります。生成に時間がかかる場合はバックオフしてください。間隔を約1分まで倍増させると、遅い生成が数百件のリクエストになるのを防げます。また、ループには上限を設けてください。停止した生成を無制限ループではなく、自身のコード内でタイムアウトとして終了できます。

これより速くポーリングしても意味はありません。2回問い合わせても、生成のステータスが早く変わることはありません。継続的に過度なポーリングを行うと、429レスポンスが返ることがあります。指数バックオフで処理してください。

生成のライフサイクル

生成は4つのステータスを経ます。2つの終了ステータスでは含まれるフィールドが異なるため、レスポンスの残りを読み取る前にstatusで分岐してください。

ステータス意味
pending生成はキューに入っています。新しく作成されたすべての生成はこのステータスです。
generatingモデルが実行中です。
completed出力の準備ができました。レスポンスにはcontent_urlとcontent_mime_typeが含まれます。
failed生成は出力を作成できませんでした。レスポンスには失敗の詳細が含まれます。

content_urlは、レスポンスの返却から約1時間で期限切れになる署名付きURLです。署名付きURL自体を保存するのではなく、生成を再度取得して新しいURLを取得してください。

失敗の処理

失敗した生成では、人が読めるerror_messageとともにfailure_reasonカテゴリが報告されます。

{
"id": "JWr5N6X9ZTqf8jD2LmQb",
"status": "failed",
"failure_reason": "moderated",
"error_message": "The prompt was rejected by content moderation. You were not charged for this generation."
}
failure_reason原因
timeoutモデルが時間内に結果を返しませんでした。
model_errorモデルプロバイダーがエラーを返したか、出力を生成しませんでした。
moderatedプロンプトまたは入力がコンテンツモデレーションにより拒否されました。
invalid_parameters生成がモデルに到達した時点でパラメーターが拒否されました。
dependency_failedこの生成が依存している参照先の生成が失敗しました。
charging_failedワークスペースに生成の料金を請求できませんでした。
internal_error予期しないエラーが発生しました。

失敗した生成には料金はかかりません。サポートされていないフィールド、モデルで許可される範囲外の値、無効な参照入力の組み合わせなど、事前に検出できるパラメーターの問題は、生成が開始される前に作成リクエストで拒否されます。

料金

生成にはクレジットが課金されます。料金はモデル、解像度や長さなど選択したパラメーター、提供する入力によって異なります。API経由の生成料金は、送信前に料金が表示されるElevenLabsアプリと同じです。モデルと設定の組み合わせごとの料金表示については、プレイグラウンドの画像&ビデオを参照してください。

生成の一覧

各エンドポイントでは、そのエンドポイントで作成された生成が新しい順に一覧表示されます。結果はワークスペースとこのAPIに限定されるため、ElevenLabsアプリで作成された生成は表示されません。

page = elevenlabs.flows.image.list(page_size=20, status="completed")
for item in page.generations:
print(item.id, item.content_url)
while page.has_more:
page = elevenlabs.flows.image.list(page_size=20, status="completed", cursor=page.next_cursor)
for item in page.generations:
print(item.id, item.content_url)

page_sizeには1~100を指定でき、デフォルトは30です。statusを渡すと、1つのライフサイクル状態にある生成のみを返します。model_idを渡すと、単一モデルの生成のみを返します。next_cursorは不透明な値として扱ってください。値をそのまま渡し戻し、has_moreがfalseになったら停止します。

利用可能なモデル

APIでは、ElevenLabsアプリで利用できるモデルの一部を提供しています。各モデルで使用できるのは一覧に記載されたパラメーターのみです。別のモデルがサポートするフィールドを送信すると、検証エラーが返ります。

ByteDanceモデルはデフォルトで無効になっており、使用前に明示的な承認が必要です。アクセスが許可されるまで、これらのモデルのいずれかを指定したリクエストはmodel_access_deniedエラーで拒否されます。エンタープライズのお客様は、サポートに連絡してアクセスをリクエストできます。

画像モデル

model_id参照画像出力コントロール
gpt-image-1最大5枚、maskを追加可能aspect_ratio(1:1、3:2、2:3)、quality、background
gpt-image-1.5最大5枚、maskを追加可能aspect_ratio(1:1、3:2、2:3)、quality、background
gpt-image-2最大10枚、maskを追加可能15種類のアスペクト比、resolution(1K、2K、4K)、quality
gpt-image-2.5-sunburst最大10枚、maskを追加可能15種類のアスペクト比、resolution(1K、2K、4K)、quality(最大max)
gpt-image-2.5-flare最大10枚、maskを追加可能15種類のアスペクト比、resolution(1K、2K、4K)、quality(最大max)
gemini-2.5-flash-image最大5枚aspect_ratio
gemini-3-pro-image最大10枚aspect_ratio、resolution(1K、2K、4K)
gemini-3.1-flash-image最大14枚aspect_ratio(1:4、4:1、1:8、8:1を含む)、resolution(512~4K)
gemini-3.1-flash-lite-image最大14枚aspect_ratio、resolution(1K)
bytedance-seedream-5-lite最大10枚aspect_ratio、resolution(2K、3K)、seed
bytedance-seedream-5-pro最大10枚aspect_ratio、resolution(1K、2K)、seed

GPT Image 2.5モデルでは、qualityにlow、medium、high、xhigh、maxを指定でき、デフォルトはhighです。GPT Image 2はhighまでで、デフォルトはmediumです。

動画モデル

model_idメディア入力出力コントロール
veo-3.1-generate-001start_frame、end_frame、role付きの最大3つのimagesduration_secs(4、6、8)、aspect_ratio(16:9、9:16)、resolution(720p、1080p、4K)、generate_audio
veo-3.1-fast-generate-001start_frame、end_frame、role付きの最大3つのimagesduration_secs(4、6、8)、aspect_ratio(16:9、9:16)、resolution(720p、1080p、4K)、generate_audio
bytedance-seedance-v2start_frame、end_frame、最大9つのimages、3つのvideos、3つのaudiosduration_secs(4~15)、7種類のアスペクト比、resolution(480p~4k)、generate_audio
bytedance-seedance-v2-faststart_frame、end_frame、最大9つのimages、3つのvideos、3つのaudiosduration_secs(4~15)、7種類のアスペクト比、resolution(480p、720p)、generate_audio
bytedance-seedance-v2-ministart_frame、end_frame、最大9つのimages、3つのvideos、3つのaudiosduration_secs(4~15)、7種類のアスペクト比、resolution(480p、720p)、generate_audio
bytedance-seedance-v2.5start_frame、end_frame、最大30のimages、10のvideos、10のaudiosduration_secs(4~30)、7種類のアスペクト比、resolution(480p、720p)、generate_audio
creatify-auroraimageとaudio、両方必須resolution(480p、720p)、guidance_scale、audio_guidance_scale

モデルの機能、提供状況、料金については、画像&ビデオの概要を参照してください。

次のステップ