模型

sora-2

Markdown · JSON

sora-2

Sora 2 可依據文字或參考影像,製作包含同步對白、音效與背景音的影片。標準設定檔適合視覺探索與概念短片;原廠另有可重複使用的非人類角色、續接及聚焦影片編輯工作流程。

關於模型

此說明介紹模型的能力。Ailoot 可用的輸入、輸出與選項,依所選方法列於下方。

Sora 2 是 OpenAI 的影音生成模型,可依據書面的場景描述或參考影像製作動態短片。它會同時產生視覺畫面與同步語音、音效及背景聲音。標準 Sora 2 設定檔的定位是視覺探索、概念開發、原型與粗剪。Sora 2 Pro 則是獨立版本,著重更高的視覺保真度與高解析度後製成果。

描述看得見、聽得到的鏡頭

原廠的提示指南建議以取景、主體、動作、場景與光線來組織實用的鏡頭需求說明。先為場景建立一致的視覺風格,再以清楚的節拍描述動作。例如原創產品概念可以呈現小型機械物件在工作檯上轉動一圈,攝影機緩慢靠近,搭配柔和窗光與細微馬達聲。說明觀眾應注意什麼,以及動作如何結束。

讓每個鏡頭的攝影機運動與主體動作都容易理解。複雜段落可以拆成不同鏡頭區塊,各自指定取景、動作與光線。若多個短片預計串成一段,請保留相同的主體細節與色彩配置。指南強調,較短的鏡頭通常更能可靠地遵循指示,而重複生成同一提示會得到不同版本。

模型發布說明提及改善物理行為與跨鏡頭連貫性,涵蓋寫實、電影與日式動畫風格。這些是需要引導與檢查的預期能力。請檢查動作、物件接觸、比例與連貫性,不要因為第一個畫面看似合理,就假定整段影片一致。如果動作不清楚,請簡化它,並安排可見的起點與終點。

分別指導對白與聲音

將台詞與視覺描述分開指定,並一致標示說話者。讓對白長度適合動作與預定短片長度。雙角色動畫可以輪流說一句簡短問答,避免要求短鏡頭容納長篇發言。指南提醒,複雜冗長的對白可能破壞節奏與同步。

描述屬於場景的聲音:小動作的聲響、室內環境音,或環境效果的節奏。說明哪個聲音應與動作同時發生。將產生的語音、音效與畫面一起檢聽,核對說話者分配、用詞與時間。同步音訊是生成短片的一部分,並非獨立文字回答。

尺寸、時長與影像引導的開場

標準模型的文件列出直式 720×1280 與橫式 1280×720 輸出尺寸。Pro 設定檔中的更高解析度尺寸不應套用到標準 Sora 2。尺寸與時長是明確的請求設定;在提示中寫入不同尺寸,或要求更長的影片,都不會改變這些設定。建立作業的參考文件列出 4、8 與 12 秒短片設定,因此準備鏡頭時,請選擇簡短、明確的動作節拍。擴充版原廠工作流程另有 16 與 20 秒短片設定的文件。

參考影像會固定第一個畫面的依據,文字則描述接下來發生的事。原廠支援 JPEG、PNG 與 WebP 參考影像,且要求影像符合目標影片尺寸。在開場影像中準備好主體、環境與構圖,再要求特定動作。這是開場畫面的參考,並不保證整段短片的每個細節都會相符。

可重複使用的非人類角色

擴充版原廠工作流程可從動物、吉祥物或物件的簡短參考影片,建立可重複使用的角色素材。準備指南要求約二至四秒的 MP4 短片、720p 至 1080p 解析度,以及 16:9 或 9:16 比例。讓來源與輸出的長寬比一致,有助於避免畫面被拉伸。一次生成最多可以參考兩個角色。

保留角色識別碼,並在提示中提到其名稱;只傳入識別碼並不符合指南要求的完整準備。角色素材可搭配影像引導生成,但影片延伸模式不接受角色素材。原廠預設封鎖人類外貌角色的上傳,且在文件所述 API 流程中拒絕包含人臉的參考影像。Sora app 的個人角色功能屬於另一項產品工作流程。

續接或編輯已完成的短片

延伸作業接收已完成的來源影片與續接提示,將整段來源短片作為動作、攝影機方向與場景連貫性的上下文。指南描述每次延伸最多新增 20 秒。文件列出的延伸輸入是來源影片與文字;該模式不包含額外角色或影像參考。請描述既有動作如何繼續,避免未經轉場就引入無關場景。

影片編輯針對既有短片進行明確修改。聚焦的修訂可以改變物件顏色或場景色彩配置,同時保留鏡頭其他部分。原廠指南建議每次只做一項定義清楚的修改,並區分編輯生成影片與上傳任意素材;後者有獨立的使用資格條件。進行下一次編輯前,保留已完成的來源,並指出確切需要的修訂。

算圖作業與完成的影片

文件所述的原廠影片流程採非同步方式:送出的作業在完成或失敗前,可能處於排隊或執行中狀態。完成的作業會產生 MP4 影片;縮圖與精靈圖素材支援預覽與瀏覽。將作業識別資訊與提示、參考資料及回傳素材維持關聯。初始作業回應並非最終可播放影片。

一般下載流程說明下載 URL 的有效期為一小時。擴充版批次流程會準備獨立的 JSON 算圖請求,附上穩定的項目識別碼、已上傳參考資料,並將結果對應回各個鏡頭;其完成素材另有最多 24 小時的下載期限。請及時保存完成的短片,並在將其選為採用版本前,檢查實際畫面與聲音。

原廠 API 文件的內容限制要求素材適合 18 歲以下觀眾,且拒絕受著作權保護的角色或音樂,以及真實人物生成。請依此準備場景與參考資料。模型的直接結果是附帶音訊的影片,並非生成的靜態影像、對話工具回應或無限長度影片。延續視覺概念時,保留確切的標準模型身分與已採用的來源短片。

Ailoot Ultra · Chat Completions POST /v1/chat/completions sora-2

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 費率

各設定的價格

設定費率表費用
設定詞元基本費率費率表基本費率費用
輸入 · 輸入 Token $0 / 1K Token
輸出 · 輸出 Token $0.2 / 1K Token
輸入 · 讀取快取 $0 / 1K Token
輸入 · 寫入快取 $0 / 1K Token
輸入 · 寫入快取,1 小時 — / 1K Token

Ailoot 會在請求前預留估算金額。取得結果後,依實測用量結算最終費用。串流結算採用最終用量紀錄。預留金額與結算的運作方式 →

請求範例

Ailoot Ultra · Chat Completions

curl · 完整 JSON 回應Python SDK · 完整 JSON 回應curl · 保留 SSE 串流
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

方法路徑別名

請使用上方列出的 API 方法路徑。

相關呼叫用 ID

sora-2

Ailoot Ultra · Anthropic Messages POST /v1/messages sora-2

sora-2

其他 /sora-2

入門

Sora 2 可依據文字或參考影像,製作包含同步對白、音效與背景音的影片。標準設定檔適合視覺探索與概念短片;原廠另有可重複使用的非人類角色、續接及聚焦影片編輯工作流程。

接受的輸入
文字
結果
json · sse

Ailoot 可用 · 輸入與方法

Ailoot Ultra · Anthropic Messages 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 文件,將文字放入指定的 input 或訊息內容字串。

生命週期: synchronous_or_streamed

方案

費率資訊不會增加請求選項。支援的參數列於所選方法中。

快速模式
未指定 選取快速模式時
flex 模式
未指定 選取 flex 模式時
最高推理強度
未指定 最高推理強度採用 default 調整值時

Ailoot 費率

各設定的價格

設定費率表費用
設定詞元基本費率費率表基本費率費用
輸入 · 輸入 Token $0 / 1K Token
輸出 · 輸出 Token $0.2 / 1K Token
輸入 · 讀取快取 $0 / 1K Token
輸入 · 寫入快取 $0 / 1K Token
輸入 · 寫入快取,1 小時 — / 1K Token

Ailoot 會在請求前預留估算金額。取得結果後,依實測用量結算最終費用。串流結算採用最終用量紀錄。預留金額與結算的運作方式 →

請求範例

Ailoot Ultra · Anthropic Messages

完整的最小 JSON 請求主體curl · 使用您的 UTF-8 文件Python · 儲存完整結果
{
  "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 Messages

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

方法路徑別名

請使用上方列出的 API 方法路徑。

相關呼叫用 ID

sora-2

FAQ · sora-2
可以使用哪些輸入與結果?

POST /v1/chat/completions · sora-2: text → json, sse

POST /v1/messages · sora-2: text → json, sse

請求使用哪些欄位?

POST /v1/chat/completions · sora-2: model, messages, stream

POST /v1/messages · sora-2: model, messages, max_tokens, stream

更多詳情

將 Ailoot 串接 Claude Code、OpenCode、Hermes 或自己的應用程式。

公司及其專案組合

公司及其專案組合:數百萬客戶,每月銷售額達數十億。

優惠購買 token。

訂閱優惠適合持續工作,折扣碼購買 token 最高可折 50%。

訂閱
為定期請求選擇優惠方案。
最高 50% 折扣碼
購買時輸入代碼,價格依活動重算。
歷史中的費用
每次請求保存模型、token 與金額。

選擇訂閱 · 查看模型價格

將 API 加入 你銷售的產品。

依 Ailoot 正式服務條款與授權合約串接 SaaS、應用程式與機器人;轉售請申請經銷授權。

商用應用程式
在付費功能加入文字、圖片、影片與聲音生成。
經銷授權
提供專案說明與存取方式,要求書面使用和轉售條件。
網站文件
串接前可閱讀正式服務條款、授權合約與資料處理政策。

申請經銷授權 · 正式服務條款與授權合約