sora-2
Sora 2 は、テキストや参照画像から、会話、効果音、背景音を同期させた動画を生成します。標準プロファイルは映像表現の探索やコンセプト映像に対応し、再利用可能な人間以外のキャラクター、延長、対象を絞った動画編集には、それぞれ開発元の専用ワークフローがあります。
- Ailoot Ultra · Chat Completions
POST /v1/chat/completionssora-2 - Ailoot Ultra · Anthropic メッセージ
POST /v1/messagessora-2
モデルについて
この説明はモデルの機能を紹介するものです。Ailootで利用できる入力、出力、オプションは、選択したメソッドごとに以下に記載されています。
Sora 2 は、文章によるシーン説明や参照画像から動きのあるクリップを作る、OpenAI の動画・音声生成モデルです。映像の連続した動きとともに、同期した発話、効果音、背景音を生成します。標準の Sora 2 プロファイルは、映像表現の探索、コンセプト開発、試作、ラフ編集向けに位置付けられています。Sora 2 Pro は、より高い映像忠実度と高解像度での仕上げを目指す別の版です。
見えて、聞こえるショットを描写する
開発元のプロンプトガイドでは、構図、被写体、動作、場所、光を軸に依頼を組み立てています。シーン全体の映像スタイルを統一し、動きを明確な段階に分けて説明してください。独自の商品コンセプトなら、小さな機械が作業台の上で 1 回転し、カメラがゆっくり近づく場面を、柔らかな窓の光と控えめなモーター音とともに描けます。視聴者に注目してほしい点と、動作の終わり方を明示します。
各ショットのカメラの動きと被写体の動作を、理解しやすく保ってください。複雑なシーケンスは、構図、動作、照明をそれぞれ指定したショット単位に分けられます。複数のクリップを 1 つのシーケンスにする場合は、被写体の細部と色調を共通にします。ガイドでは、一般に短いショットのほうが指示に忠実になりやすく、同じプロンプトを繰り返し生成しても異なるテイクになると強調しています。
モデルの発表では、リアル、映画的、アニメの各スタイルを含め、物理的な挙動とショット間の連続性の改善が説明されています。これらは、指示して確かめるべき目標能力です。最初のフレームが自然に見えるだけでシーケンス全体も一貫すると考えず、動き、物体同士の接触、比率、連続性を確認してください。動作が不明瞭なら単純化し、目に見える始まりと終わりを設定します。
会話と音を分けて指示する
せりふは映像の説明と分けて指定し、話者のラベルを一貫させます。会話は、動作と予定するクリップの長さに収まる短さにしてください。2 人のキャラクターが登場するアニメーションなら、短いショットに長い演説を詰め込むより、短い質問と回答を交互にします。ガイドでは、複雑で長い会話はテンポと同期を乱すおそれがあると注意しています。
小さな動作の音、室内の環境音、周囲の現象が生むリズムなど、シーンに合った音の環境を説明してください。どの音を動作に合わせるかを明示します。生成された発話と効果音を映像と一緒に聞き、話者の割り当て、言葉、タイミングを確認します。同期した音声は生成クリップの一部であり、別のテキスト回答ではありません。
サイズ、長さ、画像を使った冒頭
標準モデルで文書化されている出力サイズは、縦向きの 720×1280 と横向きの 1280×720 です。Pro プロファイルの高解像度サイズを、標準 Sora 2 の仕様として扱わないでください。サイズと長さは明示的なリクエスト設定です。プロンプトに別のサイズを書いたり、より長い映像を求めたりしても、その設定は変わりません。生成リファレンスには 4 秒、8 秒、12 秒のクリップ設定が記載されているため、ショットの準備では短く明確な動きの単位を選びます。拡張された開発元のワークフローには、16 秒と 20 秒のクリップ設定も記載されています。
参照画像が最初のフレームの基準となり、テキストでその後の展開を説明します。開発元は JPEG、PNG、WebP の参照画像に対応し、画像を対象動画のサイズに合わせることを求めています。冒頭の画像で被写体、環境、構図を整え、その後の具体的な動きを指示してください。これは開始フレームの参照であり、クリップ全体のすべての細部が一致する保証ではありません。
再利用可能な人間以外のキャラクター
拡張された開発元のワークフローでは、動物、マスコット、物体の短い参照動画から、再利用可能なキャラクターアセットを作れます。準備ガイドは、長さがおよそ 2〜4 秒、解像度が 720p〜1080p、アスペクト比が 16:9 または 9:16 の MP4 クリップを求めています。元動画と出力のアスペクト比を合わせると、引き伸ばされた見た目を避けやすくなります。1 回の生成で参照できるキャラクターは最大 2 つです。
キャラクター識別子を保持し、プロンプトにその名前を記載してください。識別子を渡すだけでは、ガイドが示す準備を満たしません。画像を使った生成にはキャラクターアセットを併用できますが、動画の延長では使えません。開発元は標準で人間に似たキャラクターのアップロードをブロックし、文書化された API フローでは人間の顔を含む参照画像を拒否します。Sora アプリの個人キャラクター機能は、別の製品ワークフローです。
完成したクリップを延長、編集する
延長では、完成した元動画と続きのプロンプトを受け取り、元クリップ全体を、動き、カメラの方向、シーンの連続性に関するコンテキストとして使います。ガイドには、1 回の延長で最大 20 秒を追加できると説明されています。文書化されている延長の入力は元動画とテキストで、このモードでは追加のキャラクターや画像の参照を使えません。つながりなく無関係なシーンを導入するのではなく、既存の動作がどう続くかを説明してください。
動画編集は、既存のクリップへの明確な変更を対象とします。対象を絞った修正では、ショットの残りを保ちながら物体の色やシーンの色調を変えられます。開発元のガイドは、一度に 1 つの明確な変更を行うことを勧め、生成済み動画の編集と、別の利用条件がある任意の映像のアップロードを区別しています。完成した元動画を残し、次の編集の前に必要な修正を正確に指定してください。
レンダリングジョブと完成動画
文書化された開発元の動画フローは非同期です。送信されたジョブは、完了または失敗する前に、待機中や処理中の状態になる場合があります。完了したジョブからは MP4 動画が得られ、サムネイルとスプライトシートのアセットはプレビューや一覧表示に使えます。ジョブの識別情報を、プロンプト、参照素材、返されたアセットと関連付けて保持してください。最初のジョブ応答は、再生可能な完成動画ではありません。
通常のダウンロードワークフローでは、ダウンロード URL の有効期間は 1 時間と説明されています。拡張されたバッチワークフローでは、安定した項目識別子とアップロード済み参照素材を使って独立した JSON レンダリングリクエストを用意し、各ショットに結果を対応付けます。その完成アセットには最大 24 時間という別のダウンロード期間があります。完成したクリップを速やかに保存し、採用テイクとみなす前に実際の映像と音を確認してください。
開発元が文書化している API のコンテンツ制限では、18 歳未満の視聴者にも適した素材を求め、著作権で保護されたキャラクターや音楽、実在する人物の生成を拒否します。それに沿ってシーンと参照素材を用意してください。モデルが直接返す結果は音声付きの動画であり、生成した静止画、対話ツールの応答、長さ無制限の映画ではありません。映像コンセプトを発展させる際は、標準モデルの正確な識別情報と、採用した元クリップを保持します。
Ailoot Ultra · Chat Completions POST /v1/chat/completions sora-2
sora-2はじめに
Sora 2 は、テキストや参照画像から、会話、効果音、背景音を同期させた動画を生成します。標準プロファイルは映像表現の探索やコンセプト映像に対応し、再利用可能な人間以外のキャラクター、延長、対象を絞った動画編集には、それぞれ開発元の専用ワークフローがあります。
- 対応する入力
- テキスト
- 結果
- json · sse
Ailootで利用可能 · 入力とメソッド
Ailoot Ultra · Chat Completions POST /v1/chat/completions
- 入力の種類
text- 出力の種類
json,sse- 出力形式
- JSONまたはtext/event-stream
| フィールド | 種類 | 要件 | 値と制限 | デフォルト |
|---|---|---|---|---|
フィールドmodel | 種類string | 要件必須 | 値と制限 sora-2 | デフォルト— |
フィールドmessages | 種類message[] | 要件必須 | 値と制限 | デフォルト— |
フィールドmessages[].role | 種類string | 要件必須 | 値と制限 | デフォルト— |
フィールドmessages[].content | 種類string | 要件必須 | 値と制限 | デフォルト— |
フィールドstream | 種類boolean | 要件任意 | 値と制限 | デフォルトfalse |
入力素材の組み合わせ
owned_text_messages
メソッドのパラメータとライフサイクル
| パラメータ | 仕様 |
|---|---|
パラメータcontent_type | 仕様application/json |
パラメータrequired | 仕様model, messages |
パラメータmaterial_types | 仕様text |
パラメータmessages | 仕様roleとリテラル文字列のcontentを含むメッセージ配列 |
パラメータfile_material | 仕様実際のUTF-8素材は、リテラル文字列のcontentとして挿入できます。ファイル参照を意味するものではありません。 |
パラメータoptional_controls | 仕様stream |
ライフサイクル: synchronous_json_or_sse
料金
料金情報はリクエストの機能を追加しません。対応するパラメーターは選択したメソッドに記載されています。
- 高速モード
- 未指定 高速モードが選択されている場合
- Flex モード
- 未指定 flex モードが選択されている場合
- 最大推論量
- 未指定 推論量が最大で、調整に既定値(default)を使用する場合
Ailootの料金
設定別の価格
| 設定 | 料金表 | 料金 |
|---|---|---|
| 設定トークンの基本単価 | 料金表基本料金 | 料金 入力 · 入力トークン $0 / 1K トークン 出力 · 出力トークン $0.2 / 1K トークン 入力 · キャッシュ読み取り $0 / 1K トークン 入力 · キャッシュ書き込み $0 / 1K トークン 入力 · キャッシュ書き込み、1時間 — / 1K トークン |
Ailootはリクエスト前に見積額を確保します。結果の取得後、実測使用量に基づいて最終料金を精算します。ストリーミング時の精算には最終の使用量記録を使用します。金額の確保と精算の仕組み →
リクエスト例
Ailoot Ultra · Chat Completions
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model":"sora-2","messages":[{"role":"user","content":"hello"}],"stream":false}')
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
-H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
from pathlib import Path
print(Path("result.json").read_text(encoding="utf-8"))
PY_RESULT
from openai import OpenAI
import os
if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.chat.completions.create(model="sora-2", messages=[{"role":"user","content":"hello"}], stream=False)
import json
from pathlib import Path
data = result.to_dict(mode="json")
Path("result.json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
print(json.dumps(data, ensure_ascii=False, indent=2))
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model":"sora-2","messages":[{"role":"user","content":"hello"}],"stream":true}')
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
-H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.sse
結果を受け取って保存
Ailoot Ultra · Chat Completions
JSONまたはtext/event-stream
完了した結果をすべて保存
返された完全なレスポンス、ファイル、コンテンツ部分をすべて保存してください。
JSONまたはSSEの完全なバイト列、レスポンスヘッダー、返された使用量、提供されたすべての結果フィールドを保持してください。モデル固有の出力種別は断定しません。
元のレスポンスを確認する場合
元のレスポンスと試行の識別情報を保持してください。新しいジョブのポーリングや再送信ができるとは判断しないでください。
レスポンスのフィールド
| フィールド | 種類 | 意味 |
|---|---|---|
フィールドcomplete response JSON | 種類object | 意味モデル固有の結果種別を想定せず、返されたすべてのフィールドを保持してください。 |
フィールドSSE data events | 種類stream | 意味返されたイベントと終端マーカーをすべて保持してください。テキストフィールドだけを抜き出さないでください。 |
エイリアス
モデルのエイリアス
Ailoot Ultra sora-2
メソッドパスのエイリアス
上記に表示されたメソッドパスを使用してください。
関連する呼び出し用ID
Ailoot Ultra · Anthropic メッセージ POST /v1/messages sora-2
sora-2はじめに
Sora 2 は、テキストや参照画像から、会話、効果音、背景音を同期させた動画を生成します。標準プロファイルは映像表現の探索やコンセプト映像に対応し、再利用可能な人間以外のキャラクター、延長、対象を絞った動画編集には、それぞれ開発元の専用ワークフローがあります。
- 対応する入力
- テキスト
- 結果
- json · sse
Ailootで利用可能 · 入力とメソッド
Ailoot Ultra · Anthropic メッセージ POST /v1/messages
- 入力の種類
text- 出力の種類
json,sse- 出力形式
- JSONまたはSSE
| フィールド | 種類 | 要件 | 値と制限 | デフォルト |
|---|---|---|---|---|
フィールドmodel | 種類string | 要件必須 | 値と制限 sora-2 | デフォルト— |
フィールドmessages | 種類message[] | 要件必須 | 値と制限 | デフォルト— |
フィールドmessages[].role | 種類string | 要件必須 | 値と制限 user, assistant | デフォルト— |
フィールドmessages[].content | 種類string | 要件必須 | 値と制限 | デフォルト— |
フィールドmax_tokens | 種類integer | 要件必須 | 値と制限 | デフォルト— |
フィールドstream | 種類boolean | 要件任意 | 値と制限 | デフォルトfalse |
入力素材の組み合わせ
テキスト · UTF-8テキスト
messages[].contentの文字列
メソッドのパラメータとライフサイクル
| パラメータ | 仕様 |
|---|---|
パラメータcontent_type | 仕様application/json |
パラメータrequired | 仕様model, messages, max_tokens |
パラメータoptional_controls | 仕様stream |
パラメータmaterial_types | 仕様text |
パラメータtext_file_material | 仕様実際のUTF-8文書を読み、その本文を指定された入力またはメッセージ内容の文字列に入れてください。 |
ライフサイクル: synchronous_or_streamed
料金
料金情報はリクエストの機能を追加しません。対応するパラメーターは選択したメソッドに記載されています。
- 高速モード
- 未指定 高速モードが選択されている場合
- Flex モード
- 未指定 flex モードが選択されている場合
- 最大推論量
- 未指定 推論量が最大で、調整に既定値(default)を使用する場合
Ailootの料金
設定別の価格
| 設定 | 料金表 | 料金 |
|---|---|---|
| 設定トークンの基本単価 | 料金表基本料金 | 料金 入力 · 入力トークン $0 / 1K トークン 出力 · 出力トークン $0.2 / 1K トークン 入力 · キャッシュ読み取り $0 / 1K トークン 入力 · キャッシュ書き込み $0 / 1K トークン 入力 · キャッシュ書き込み、1時間 — / 1K トークン |
Ailootはリクエスト前に見積額を確保します。結果の取得後、実測使用量に基づいて最終料金を精算します。ストリーミング時の精算には最終の使用量記録を使用します。金額の確保と精算の仕組み →
リクエスト例
Ailoot Ultra · Anthropic メッセージ
{
"model": "sora-2",
"max_tokens": 128,
"messages": [
{
"role": "user",
"content": "Summarize the incident report."
}
],
"stream": false
}set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 document}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json, os
from pathlib import Path
source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
raise SystemExit('Choose a document containing text')
payload = {'model': 'sora-2', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
Path('request.json').write_text(json.dumps(payload, ensure_ascii=False), encoding='utf-8')
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
-H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
PY_RESULT
import json, os
from pathlib import Path
source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
raise SystemExit('Choose a document containing text')
payload = {'model': 'sora-2', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
from urllib.request import Request, urlopen
from urllib.error import HTTPError
api_key = os.environ['AILOOT_API_KEY']
if not api_key.strip():
raise SystemExit('Set AILOOT_API_KEY before making a request')
headers = {'x-api-key': 'PLACEHOLDER_KEY', 'anthropic-version': '2023-06-01', 'Content-Type': 'application/json'}
headers['x-api-key'] = api_key
request = Request('https://api.ailoot.ai/v1/messages', data=json.dumps(payload, ensure_ascii=False).encode('utf-8'), headers=headers, method='POST')
try:
with urlopen(request, timeout=120) as response:
raw = response.read()
Path('response-headers.txt').write_text(str(response.headers), encoding='utf-8')
except HTTPError as error:
Path('result.json').write_bytes(error.read())
Path('response-headers.txt').write_text(str(error.headers), encoding='utf-8')
raise
Path('result.json').write_bytes(raw)
import json
from pathlib import Path
result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
結果を受け取って保存
Ailoot Ultra · Anthropic メッセージ
JSONまたはSSE
完了した結果をすべて保存
返された完全なレスポンス、ファイル、コンテンツ部分をすべて保存してください。
すべてのコンテンツブロック、思考署名、実際のツール利用IDを保持してください。SSEのすべてのブロック差分を組み立てます。最初のテキストブロックだけでは完全な出力になりません。
元のレスポンスを確認する場合
リクエスト/応答IDとヘッダーを保持してください。テキストジョブを取得する汎用URLは提供されません。
レスポンスのフィールド
| フィールド | 種類 |
|---|---|
フィールドid | 種類string |
フィールドmodel | 種類string |
フィールドcontent[] | 種類text|thinking|tool_use|other content block |
フィールドstop_reason | 種類string|null |
フィールドusage | 種類object |
エラーと次の手順
| レスポンス | 条件 | 次の手順 |
|---|---|---|
レスポンス400 · invalid_request_error | 条件必須フィールド、素材の表現形式、またはパラメーター値が不正です | 次の手順新しい生成リクエストを送る前に、指定されたフィールドを修正してください。 |
エイリアス
モデルのエイリアス
Ailoot Ultra sora-2
メソッドパスのエイリアス
上記に表示されたメソッドパスを使用してください。
関連する呼び出し用ID
FAQ · sora-2
- 利用できる入力と結果は何ですか?
POST /v1/chat/completions·sora-2:text→json,ssePOST /v1/messages·sora-2:text→json,sse- リクエストはどの項目を使用しますか?
POST /v1/chat/completions·sora-2:model,messages,streamPOST /v1/messages·sora-2:model,messages,max_tokens,stream