Pro API: サウンド付き動画の生成
プロンプトからクリップを生成するか、指定した静止画をアニメーション化します。ファイルはMP4形式で、リクエスト時にサウンドを付けることができます。
動画の送信
POST /videos
{ "prompt": "a woman in a white linen dress walks along a beach at sunset, wind in her hair, she turns and smiles at the camera",
"width": 1080, "height": 1920, "audio": true }| フィールド | 型 | デフォルト | 内容 |
|---|---|---|---|
prompt | string | required | アクション、雰囲気、光の演出。動きを具体的に説明してください。 |
width, height | int | 720 x 1280 | デフォルトは縦向き。下記の料金表を参照。 |
quality | string | max: Ultra モード(最も精細なレンダリング)。Ultraモードを参照。 | |
consistency | string | standard | enhanced: enhanced consistency(動き、顔、背景の時間的安定性が向上し、1ショットあたり最大721フレーム、24fpsで30秒・30fpsで24秒、延長分を含む)。Qualityモード専用。Enhanced consistencyを参照。 |
mode | string | ltx25 | ltx25: エンジン2.5(サウンド、自動尺、1080p、終了フレーム対応)。turbo: 2026年10月11日に廃止。turboのリクエストはQuality 480pでレンダリングされます(同じ向き、同じ長さ、最大241フレーム、固定長)。料金はQuality 480p料金が適用されます。 |
duration_auto | bool | true | エンジンがプロンプトから尺を決定します(24fpsで最大20秒、30fpsで16秒、60fpsで8秒。上限はフレーム数で計算されます。fpsを参照)。その場合、lengthは無視されます。固定長にする場合はfalseを設定し、lengthで指定してください。consistency enhancedかつ30fps超の場合、尺は常に固定になります(そうでなければfps_requires_fixed_duration)。 |
length | int | 121 | fpsレートでのフレーム数。常に8n+1の形式。尺は(length - 1) / fps。最大481フレーム(consistency enhancedでは721)。24fps時: 73(3秒)、121(5秒)、241(10秒)、361(15秒)、481(20秒、enhancedでは721、つまり30秒)。30fps時: 241(8秒)、481(16秒、enhancedでは721、24秒)。60fps時: 241(4秒)、481(8秒、enhancedでは721、12秒)。固定長(duration_autoをfalseに設定)の場合に使用。自動尺では無視されます。 |
fps | int | 30 | フレームレート(fps): 24、30、60。デフォルトは30(動きがクリアでおすすめ)。60は最もなめらか、24はシネマレート。consistency enhanced専用の50は軽いスローモーションになります(エンジンが60として動きを設定し50で再生するため、約0.83x)。lengthはこのレートのフレーム数で計算されます。料金は変わりません(クリップあたり定額)。ただし最大フレーム数はフレーム数で計算されるため、実際の最大尺は変わります。延長は前のクリップのフレームレートを引き継ぎ、シーケンスは最初のショットのレートに従います。そのモードが対応していないレートを指定した場合: invalid_fps(対応レートの一覧が返されます)。 |
audio | bool | false | 映像と一緒にサウンドを生成します(環境音、音声など)。クリップの料金が2倍になります(フォーマットと料金を参照)。 |
image | string | base64形式の開始フレーム。動画はこの画像をアニメーション化します。 | |
end_image | string | imageと組み合わせるbase64形式の終了フレーム。クリップは一方から他方へトランジションします(エンジン2.5専用)。トランジションは指定サイズ(480pから1080p)で出力され、そのフォーマットのクリップとして課金されます。 | |
keyframes | array | キーフレーム(Qualityモード): 1〜4個のオブジェクト { "image": base64, "at": 秒数, "strength": 0.1〜1(デフォルト1) }。クリップ内の指定した時点でそれぞれの画像を表示します(例: 最初と最後は空の場所で、中間にキャラクターが登場するショット)。尺は固定になります(lengthが使用され、duration_autoは強制的にfalse)。0 < at < length、キーフレーム間は最低0.5秒、精度は約3分の1秒。image・end_imageと組み合わせて使用できます。Ultraとマルチリファレンスでは使用不可。延長ではconsistency enhancedの場合のみ使用可能(Enhanced consistencyを参照)。同じフォーマットのクリップと同じ料金です。 | |
lora, lora_strength | string, number | アカウントのトレーニング済みキャラクター(GET /lorasのname)とその強度(0〜1)。 | |
lora2, lora2_strength | string, number | 2人目のキャラクター。 | |
multiref | object | GET /charactersから1〜4人のキャラクター(Ultraでは12人)をキャスト。GET /subjectsから保存済みのオブジェクト、動物、ロケーションも使用可能。プロンプト内で@Nameで呼び出します。Multi-Ref Videoを参照。 | |
seed | int | ランダム | レンダリングのシード値(0〜4294967295)。同じseed、同じプロンプト、同じ画像、同じ設定(フォーマット、長さ、サウンド、モード)であれば同じクリップが生成されます(グラフィックカードが変わると若干異なる場合があります)。自動尺では尺が変わるとクリップも変わります。厳密に再現したい場合はduration_autoをfalseにしてlengthを指定してください。 |
steps | int | エンジン任せ | 空欄のままにしてください。 |
デフォルトのフレームレート: 30fps。 クリップは以前24fpsでレンダリングされていました。fpsを省略した場合、同じlengthのクリップは以前より短くなります(241フレーム: 10秒ではなく8秒)。従来の動作を維持するには"fps": 24を送信してください。
レスポンス:
{ "jobId": "...", "seed": 908172, "cost": 30 }コストは送信時に計算・通知されます(課金前)。seedも返されます(指定した場合もランダムに決定された場合も同様)。
フォーマットと料金
動画はフォーマットごとに定額料金が設定されており、尺に関わらず一定です。基本料金: 5クレジット。
定額料金は720pで×2、1080pで×3となり、サウンドを追加するとさらに×2になります。各係数は基本料金に対して適用されます(係数同士は掛け合わせません)。1080pのサウンドあり: 5 × 3 × 2 = 30クレジット。481フレームまで(24fpsで20秒)は尺にかかわらず同じ料金(5秒でも20秒でも同じ)。481フレーム超(最大721フレーム、consistency enhancedかつ固定長の場合のみ)は、フォーマットの料金が2倍になります。フレームレート(fps)は料金に影響しませんが、各ティアはフレーム数で計算されます。30fpsでは通常料金は最大16秒、60fpsでは最大8秒(enhancedでは2倍料金で最大12秒)。
例外として、Qualityの480pサウンドなしは尺にかかわらず2クレジットです(2026年10月11日以降)。Multi-Refとenhanced consistencyはフォーマットの定額料金5クレジットが適用されます。
| フォーマット | 短辺 | サイズ例 | サウンドなし | サウンドあり |
|---|---|---|---|---|
| 480p | 480 | 480 x 832, 832 x 480 | 2(Multi-RefおよびEnhanced consistencyでは5) | 10 |
| 720p | 720 | 720 x 1280, 1280 x 720 | 10 | 20 |
| 1080p | 1080 | 1080 x 1920, 1920 x 1080 | 15 | 30 |
実際に返されるサイズ。 エンジンは32の倍数で2段階処理を行うため、720pでは768 x 1280(または1280 x 768)、1080pでは1088 x 1920(または1920 x 1088)で出力されます。480pは480 x 832(または832 x 480)のままです(enhanced consistencyを除く)。レンダリング結果をつなぎ合わせたり重ねたりする場合に知っておくと便利です。
turboレーンは2026年10月11日に廃止されました。turboのリクエストはQuality 480pでレンダリングされ、同じ料金が適用されます(サウンドなし2クレジット、サウンドあり10クレジット)。
送信前に料金を確認する
POST /videos/quoteはPOST /videosと同じリクエストボディを受け取り、同じ計算を実行しますが、何も作成されません。レンダリングもクレジットの保留もクォータの消費も発生しません。コミットする前、特に予算に対して動作するエージェントから呼び出す際に使用してください。
{ "cost": 30, "mode": "ltx25", "format": "1080p", "audio": true, "fps": 30, "duration_auto": true,
"seconds_max": 16, "detail": "flat 5 x 3 (1080p) x 2 (sound) = 30" }detailは計算式を説明します。fpsは使用されたフレームレート、seconds_maxはそのレートでの最大尺(秒)です。"consistency": "enhanced"の場合、クォートは最大721フレームの固定長を受け付け、481フレーム超の料金を適用します(24fpsのdetailではx 2 (over 20 s)、他のレートではx 2 (over 481 frames))。画像用の同様のルートPOST /images/quoteも存在し、常に{ "cost": 1, ... }を返します(画像は常に1クレジット)。
秒単位で課金されるUltraクリップでは、見積もりの seconds に課金される長さが入り、detail に1秒あたりの価格の内訳が示されます。
ポーリング、ダウンロード、キャンセル
/videos配下の画像と同じルートを使用します。
GET /videos/{jobId}:pending/completed/failed、同じフィールド。enhanced延長は"error": "extension_not_applied"でfailedになる場合があります(エンジンが前のクリップの末尾を引き継がなかった場合)。この場合は課金されません。再送信してください。GET /videos/{jobId}/file: MP4ファイル(Content-Type: video/mp4)。POST /videos/{jobId}/cancel: キャンセルします。課金されません。
秒単位課金のUltraでは、すでに計算中のレンダリングは止まりません。キャンセルは 409 render_in_progress を返し、クリップは納品され課金されます。エンジンが出力時に拒否したクリップは failed で終わり、detail に説明の一文、reason にエンジンのコードが入ります。課金はありません。
動画のレンダリングには1〜5分かかります(エンジンのコールドスタート時はより長くかかる場合があります)。3秒ごとにポーリングし、ステータスがcompletedになったらすぐにダウンロードしてください。ファイルはアーカイブされません。
1クリップに複数ショット
1つのプロンプトで、ハードカットによる複数ショットを含むクリップを生成できます(24fpsで合計最大20秒、デフォルトの30fpsでは16秒)。順番に説明してください: Shot 1: <フレーミング>, <アクション>. Cut to Shot 2: ...。変わらない要素(キャラクター、衣装、場所、光)は各ショットで繰り返し記述し、最後に共通する雰囲気を1行で締めくくってください。
タイムコードは不要です。duration_autoをオンのままにすれば、エンジンが尺(24fpsで最大20秒、30fpsで16秒)とカットのタイミングを決めます。1クリップあたり2〜4ショットが最も効果的です。
A cinematic sequence of three shots, same woman, same place, same lighting throughout.
Shot 1: Wide shot, night, light rain on a narrow Paris street with glowing café windows. A woman in a long beige trench coat walks toward the camera under a transparent umbrella, wet cobblestones reflecting warm yellow streetlights.
Cut to Shot 2: Close-up on her face under the umbrella, raindrops on the plastic, warm café light on her cheek, she smiles softly.
Cut to Shot 3: Medium shot from inside the café through the rainy window, she pushes the door open and steps in, warm light spilling onto the wet pavement.
Calm, melancholic, romantic mood.1クリップに複数ショットを入れる方法と、シーケンス(延長)は目的が異なります。
| 1クリップに複数ショット | シーケンス(延長) | |
|---|---|---|
| ショット間のつなぎ | ハードカット | カットなし: 各ショットが動きを引き継ぐ |
| 尺 | 24fpsで最大20秒(30fpsで16秒) | より長い尺に対応 |
| レンダリング | 1回 | ショットごとに1回 |
| 料金 | クリップ1本分 | ショットごとにクリップ1本分 |
クリップを延長する
クリップは延長できます。次のショットが前のショットの動きを途切れなく引き継ぎます。前のクリップの最後の約1秒を参照します(単一のスチルフレームではありません)。POST /videosに以下を追加してください。
| フィールド | 型 | デフォルト | 内容 |
|---|---|---|---|
extend_job_id | string | 延長するクリップ: ライセンスのレンダリング結果で、完了直後に取得したもの。 | |
extend_frames | int | 25 | 次のショットを誘導するために使用するクリップ末尾のフレーム数: 9、17、25、33、41、49(25は24fpsで約1秒)。 |
extend_video | string | extend_job_idの代わりに使用: 手持ちのクリップ末尾をbase64エンコードしたMP4(ちょうどextend_framesフレーム分、最大8MB)。 |
延長されたショットは前のクリップの解像度を引き継ぎます。extend_job_id使用時はwidthとheightが無視され、extend_video使用時はサイズが送信ファイルから読み取られます。新しいフレームのみを保持するため、ショットを繋げると1本の連続した動画になります。前のクリップのフレームレートを引き継ぎます。fpsは省略するか(引き継がれます)、同じ値を指定してください。異なる値は拒否されます(extend_fps_mismatch)。lengthはショットの新しい尺です(121 = 24fpsで5秒追加)。自動尺は延長には適用されないため、正確な値が必要です。延長はクリップ1本分の料金がかかります。
制限: 終了フレームやキーフレームとの同時使用は不可です(enhanced consistencyの場合を除く)。
サウンドはつなぎ目で引き継がれます。 audio: trueの場合、前のクリップの末尾にサウンドトラックがあれば、新しいショットはそのサウンドを引き継ぎます(新たに生成しません)。extend_job_id使用時はカットされた末尾がクリップのサウンドを保持します。extend_video使用時は末尾をサウンドごと送信してください。末尾にサウンドトラックがない場合、enhanced consistencyやUltraでは、サウンドはそのショットで新たに始まります。つなぎ目が目立たないよう、各プロンプトで同じ雰囲気を維持してください。
クリップの完了直後に延長を行ってください。時間が経つと利用できなくなります(clip_unavailable)。その場合は末尾をextend_videoで送信してください。
Ultraショットを前方または後方へ延長する
Ultraで秒単位でレンダリングされたショットは、Ultraでも前方または後方へ延長できます。それ以外のクリップは上記のとおり延長します。POST /videosに"quality": "max"と以下を指定します。
| フィールド | 型 | デフォルト | 内容 |
|---|---|---|---|
extend_job_id | string | 延長するUltraショット。あなたのライセンスで24時間以内にレンダリングされたもの。 | |
extend_upload_id | string | 代わりに、それより古いショットの場合:元のファイルをアップロードした後にPOST /extensions(下記)が返すID。 | |
extend_direction | string | forward | forwardは続きを、backwardはショットの直前の瞬間をレンダリングします(ショットの前につなげます)。 |
- レンダリング結果には新しい部分のみが含まれ、長さはUltraクリップと同じです(
length/fps、自動尺では5秒)。ショットの解像度を引き継ぎ(widthとheightは無視されます)、最後のフレーム(forward)または最初のフレーム(backward)につながります。 - 開始画像、リファレンス(
multiref)、モーション、enhanced consistencyは使えません。backwardは、ショットを順に並べるシーケンスには入れられません。 - 料金:新しい部分はUltraの秒単位料金、それに加えて延長するショットの1秒ごとに、480pで2クレジット、720pで5、1080pで13(
GET /pricingのultra.extend_per_second)。この秒数は秒単位で切り上げ(0.1秒の精度)、24fps換算で数え、フレームレートが高いショットは比例して数えます(60fpsの2秒は5秒として計算)。同じフィールドを付けたPOST /videos/quoteでextend_secondsと正確な料金がわかります。 - 24時間を超えたショット:
GET /videos/{jobId}/fileで受け取ったままの元のファイルをアップロードします。POST /extensionsに{ "size": <バイト数> }を送るとupload_id、upload_url、headers、expires_in(900秒)が返ります。PUT upload_urlでこれらのheadersをそのまま付けてファイルを送り、2時間以内にextend_upload_idを渡します。1回のアップロードは1回のレンダリングにのみ使えます(4〜30秒、最大60MB、1080pまでのMP4)。レンダリングの前に、Ultraモードに送る動画(モーション、または延長する動画)はすべて検査され、拒否された場合は何も請求されません(400 input_video_out_of_limits)。条件は毎秒24〜60フレーム、幅と高さの比率0.4〜2.5、1回のレンダリングにつき動画と参照音声を合わせて最大30秒・10ファイルです。リアルな顔の場合、再エンコードや編集をしたファイルは拒否されます(400 engine_refused)。元のファイルのみ受け付けます。Ultraモードでレンダリングされていない動画(たとえば別のモードのレンダリング)は、リアルな顔が映っている場合Ultraでは延長できません(400 extension_real_face、課金はありません)。Qualityモードで延長するか、Ultraでショットを作り直してください。
Enhanced consistency
"consistency": "enhanced"を指定すると、クリップは動き、顔、背景の時間的安定性が向上したレーンでレンダリングされます。1ショットあたり最大721フレーム(24fpsで30秒、30fpsで24秒)まで対応しており、主に長尺動画向けです。
- 最初のショット: 通常のクリップ(プロンプト、開始フレーム、
keyframes、end_image)で最大721フレーム。 - 延長: クリップを延長すると同様に
extend_job_id(またはextend_video)を使用し、同じconsistencyを指定。lengthは引き続き新しい尺です(最大721、24fpsで30秒追加)。enhanced延長ではkeyframesも使用できます(atは最初の新しいフレームからカウント)。またend_imageで終了フレームを設定できます(ショットの最後のフレームに設定。例: 最初のショットの開始フレームを設定すれば長尺動画がループします)。
Qualityモード専用(mode ltx25、quality: "max"なし)、1080pまで対応、Multi-Refでは使用不可(400 consistency_mode)。料金: フォーマットの定額料金(480pサウンドなし: 5クレジット)。新規フレームが481フレームまで(24fpsで20秒)は通常料金、それを超えると2倍(上記の料金表を参照)。フレームレート: 24、30、50、60。30fps超の場合、尺は固定になります(そうでなければfps_requires_fixed_duration)。50fpsは軽いスローモーションになります(fpsを参照)。標準クリップよりレンダリングに時間がかかり、長いショットでは大きなグラフィックカードを待つ場合があります。シーケンスでは全ショットで**同じconsistency**を使用します。出力サイズ: Qualityの720pおよび1080pと同じ。480pではこのレーンが64の倍数で処理するため、短辺が448になります(448 x 832、832 x 448、448 x 448)。
一部のプロンプトはまだ対応していません。 その場合、20秒以下(end_image使用時は15秒、固定長)の単一ショットがstandard consistencyで同じ料金でレンダリングされます。それを超える場合(duration_auto: falseでlengthが481超、またはend_imageありで361超)、延長またはシーケンスでは400 consistency_explicitで拒否されます。ショットを短くするかconsistency: "standard"を指定してください。
長尺動画(シーケンス)
クリップは最大481フレーム(24fpsで20秒)です(enhanced consistencyでは721フレーム、30秒)。それ以上の尺には、シーケンスを使用します。各ショットがレンダリング完了次第ファイルに登録され、最終的に再エンコードなしで1本のMP4に結合されます。例えば1分の動画なら、24fpsで20秒×3ショット、またはenhanced consistencyで30秒×2ショットです。
POST /sequencesでシーケンスを開きます。レスポンス:{ "sequence_id": "seq_...", ... }。- 各ショットに
"sequence_id": "seq_..."を付けてPOST /videos。最初のショットは通常通り、以降のショットは前のショットのIDをextend_job_idに設定。GET /videos/{jobId}で完了が確認されたショットは送信順にシーケンスへ登録されます。 - 最後のショットの完了後に
POST /sequences/{id}/export。レスポンスにseconds、resolution、file_urlが返されます。 GET /sequences/{id}/file: 結合済み動画(MP4)を取得。
補足: GET /sequences/{id}でシーケンスの状態(登録済みショットや未完了ショット)を確認できます。POST /sequences/{id}/clipsに{ "job_id": "..." }を送信すると手動でレンダリングを登録できます。DELETE /sequences/{id}でシーケンスを即時削除できます。
ルール。 全ショットは同じ解像度(延長により引き継がれます)、同じサウンド設定(全てサウンドあり、または全てサウンドなし)、同じconsistency、同じフレームレート(fps)を使用してください。最初のショットがこれらを設定し、異なるショットは拒否されます(409 consistency_mismatch、409 sequence_fps_mismatch、手動登録ショットの場合は422 encoding_mismatch)。fpsなしのショットはシーケンスのレートを引き継ぎます。1シーケンスあたり最大30ショット、1ライセンスあたり最大5シーケンスを同時進行できます。
データの保持期間。 進行中シーケンスのショットは最後のショット追加から30分後に削除され、結合済み動画はエクスポートから24時間後に削除されます。それ以降はすべて消去されます。
プロジェクトフォルダーのエクスポート
プロジェクトフォルダーは、動画を別の場所で引き継いだり自動化したりするのに必要なものを1つのZIPにまとめたものです。ショット、その参照、編集、そして各ショットを再レンダリングできるマニフェストが含まれます。無料です(レンダリングは行いません)。
POST /videos/{jobId}/export:POST /videosのレンダー1件(単独ショット、Multi-Ref、延長)。POST /sequences/{id}/project:シーケンスの全ショットを順に。- 任意のボディ(アプリのエクスポート画面と同じ選択肢):
include_media(既定はtrue):ショットの動画と署名付きオリジナル。false:動画を一切含めません(クリップ、オリジナル、映像のいずれも)。ショットはテキスト、設定、リファレンスを保持し("state": "expired")、マニフェストにはvideos_included: falseが入ります。include_references(既定はtrue):キャラクターのビューとエレメントの画像(references/内)。false:何もコピーしません。名前、@メンション、id、フィンガープリントはマニフェストに残ります(references_included: false)。exclude_references:コピーしないリファレンスを1つずつ、id(character_id、subject_id)、名前、または@メンションで指定します。例:["@Parc", "chr_..."](最大200)。マニフェストにはreferences_included: "partial"が入り、除外した各リファレンスに"included": falseが付きます(すべて除外した場合はfalse)。エクスポートのどのリファレンスも指さない項目は400 unknown_reference。include_film(シーケンスのみ、既定はfalse):結合済みシーケンスの映像。include_mediaが必要です(ない場合は400 invalid_export_options。真偽値でないオプションや、テキストのリストでないexclude_referencesも同じ)。manifest_only: true:ZIPなしでマニフェストのみ。
レスポンスは{ "manifest": { ... }, "file_url": "...", "export_id": "exp_...", "expires_at": "...", "bytes": n }で、GET /exports/{id}/fileでZIPをダウンロードします。エクスポートは1ライセンスにつき同時に1件まで(409 export_in_progress)、最大2 GB(413 export_too_large:ショットを1つずつエクスポートしてください)。
| ファイル | 内容 |
|---|---|
tendre-project.json | マニフェスト(スキーマtendre.project/1、キーは英語)。各ショットについて:状態、入力したプロンプト(prompt)とエンジンに送られたプロンプト(prompt_sent)、設定、シード、コスト、延長(extends、direction)、ファイルに紐づいた参照、そしてショットを再レンダリングするPOST /videosのボディapi_request(画像をbase64でのみ送った場合はnull)。先頭のreferences_included:ZIPではtrue(リファレンスのファイルはreferences/内)、manifest_onlyではfalse(ファイルなしのリファレンス:filesは空、sha256の指紋のみ)。このフィールドのないマニフェスト(以前の書き出し)はtrueとして読む。アプリが書き出したフォルダでは、クライアントがリファレンスを1つずつ選べるため、true、false、"partial"のいずれかになり、各リファレンスにincludedが付くことがある(ない場合は先頭と同じ:先頭がfalseならfalse、それ以外はtrue)。含まれないリファレンスは名前、@メンション、id、説明を保ち、filesは空。project.settingsには最初のショットの設定(quality, width, height, fps, audio, output_format "mp4")と、そのショットのidであるsettings_from_shotが入る。アプリが書き出したフォルダには、アプリ専用のappブロックが含まれることがあるが、無視すること |
shots/NN/clip.mp4 | サーバーに残っている間の各ショットのレンダー。shots/NN/original.mp4または.mov:エンジンの署名付きファイル(バイト単位で同一、まだ存在する場合) |
references/ | キャラクターのビューと、使用したロケーション、オブジェクト、動物、スタイル、衣装の画像 |
timeline.otio、timeline.fcpxml | 編集(OpenTimelineIO、Final Cut ProとDaVinci Resolve用のFCPXML)。メディアはフォルダーからの相対パス |
film.mp4 | シーケンスの結合済み動画(include_film: trueの場合のみ、かつすでに結合済みのとき、POST /sequences/{id}/export)。それ以外はマニフェストのassembledがnull |
データの保持期間。 受理されたPOST /videosごとに、サーバーは画像も動画も一切含まないレンダーの記録(テキスト、設定、識別子。base64で送った画像はそのフィンガープリントのみ)を保持し、送信から24時間後に削除します。それ以降、エクスポートは404 unknown_exportを返します。ZIPは最初のダウンロードから45分後、遅くとも作成から2時間後に削除されます。サーバーにもう残っていないショットは、ファイルなしでテキスト、設定、参照とともに"state": "expired"として出力され、エージェントはapi_requestで再レンダリングできます。
シーケンス。 結合するとショットは1つずつ削除されます。ショットと映像の両方を得るには、結合の前にプロジェクトをエクスポートし、その後結合して{ "include_film": true }で再度エクスポートしてください。映像が追加され、ショットはexpiredとして出力されます。
Ultraモード
Ultra モードは最も精細な動画レンダリングです。POST /videos に "quality": "max" を追加します(mode は既定値の ltx25)。料金は秒単位、またはLoRA使用時や秒単位でレンダリングされていないクリップの延長では固定料金です。Ultraショットの前方・後方への延長は秒単位で課金されます。POST /videos/quote でリクエストの正確な価格がわかります。
秒単位
クリップは解像度に応じて秒単位で課金されます(音声込み):
| 解像度 | 価格 |
|---|---|
| 480p | 4 クレジット/秒 |
| 720p | 8 クレジット/秒 |
| 1080p | 20 クレジット/秒 |
- 長さ:24fpsで4〜30秒。レンダリング前に決まります。自動の長さ(
duration_auto、既定)では5秒、それ以外はlength/fps(fpsがない場合は24)を秒単位に丸めた値です。 - フォーマット:リクエストされたもので、最も近いアスペクト比になります。480pは480pでレンダリングされます。1080pを超える場合:
resolution_outside_ultra。 - 開始画像(
image):使用可能。エンジンは送信時にテキストや画像を拒否することがあります:400 engine_refused、理由はdetail、コードはcodeに入ります。課金はありません。 - シードなし:
seedは無視され、レスポンスにも含まれません。 - キャンセル:順番待ちの間は自由。計算が始まると
409 render_in_progressとなり、クリップは納品され課金されます。 - Ultraでは終了画像、キーフレーム、Enhanced consistencyは使えません。
固定料金
LoRA使用時や秒単位でレンダリングされていないクリップの延長では、Ultraはフルの動画モデルで固定料金でレンダリングされます:
| リクエストフォーマット | 出力サイズ | クリップあたり固定料金 |
|---|---|---|
| 480pまたは720p | 上記の表の720p(1280 x 768)と同じ(480pリクエストは720pでレンダリング) | 40クレジット |
| 1080p | 上記の表と同じ(1920 x 1088) | 60クレジット |
料金はフォーマットごとの固定料金です。サウンドや尺は関係ありません。Ultraは720pから始まります。480pリクエストは720pでレンダリング・課金されます。POST /videos/quoteで正確な料金を確認できます。**上限は1080p(1920 x 1088)**で、どのモードでも同じです。4Kの提供は終了しました。これより大きいサイズは拒否されます(quality: "max"ありはultra_4k_unavailable、なしはresolution_above_quality)。
- 尺: 最大481フレーム(24fpsで20秒、30fpsで16秒、60fpsで8秒)。延長と長尺動画もUltraで使用可能です。延長は前のクリップのサイズを引き継ぎ、720p未満の場合は720p料金で課金されます。
- 時間: 5秒のクリップで数分、20秒のクリップではさらに長くかかります。大型グラフィックカードの空き待ちが発生する場合があります。
- トランジション(
end_image)はUltraでは使用不可(ultra_incompatible)。 - キーフレーム(
keyframes)はUltraでは使用不可(keyframes_mode)。 - アカウントのキャラクターLoRAは通常モードと同様にUltraでも適用されます。
Multi-Ref Video
1〜4人のキャラクター(Ultraでは最大12人)が登場するクリップで、各キャラクターが識別可能な状態でレンダリングされます。オプションのロケーション、保存済みオブジェクト、動物、保存済みロケーションも使用できます。キャラクターはGET /charactersから取得します(APIで写真1枚から作成するか、アプリで作成)。オブジェクト、動物、ロケーションはGET /subjectsから取得します。multirefオブジェクトをPOST /videosに追加し(権限videosが必要)、プロンプト内で各キャラクターを@Nameで呼び出してください。
{
"prompt": "@Lea walks toward @Tom in a sunny kitchen and hands him a cup. Sound: footsteps, soft music.",
"multiref": {
"characters": [
{ "character_id": "chr_8f3a...", "name": "Lea", "description": "a 28 year old woman with long red hair" },
{ "character_id": "chr_21bc...", "name": "Tom", "description": "a 30 year old man", "strength": 1.2 }
],
"background_b64": "<optional: an image of the location>",
"background_description": "a sunny kitchen"
},
"width": 1088, "height": 1920,
"audio": true
}multirefのフィールド | 内容 |
|---|---|
characters[].character_id | GET /charactersのキャラクター |
characters[].name | 1単語(文字、数字、_)。プロンプトの@の後に記述する名前 |
characters[].description | 英語での短い説明。デフォルトはそのkind |
characters[].strength | 顔の一致度の強さ(0〜2、デフォルト1) |
characters[].sheet_id | オプション: 複数のシートを持つキャラクターで使用するシートを指定(デフォルトは最新のもの) |
characters[].voice | "audio": trueの場合、characters[0]とcharacters[1]: character(デフォルト)はオンラインにあるプロフィールのボイス(キャラクターのhas_voice)、ない場合はモデルが作るボイスです。generatedはモデルが作るボイスを指定します。レスポンスに使用されたボイスが示されます(voices)。 |
characters[].voice_b64 | オプション、characters[0]とcharacters[1]のみ、"audio": trueの場合: キャラクター用の別のボイスの音声ファイル(WAV、MP3、OGG、FLAC)をbase64エンコード、最大4MB(短い抜粋で十分)。プロフィールのボイスより優先されます |
background_b64, background_description | オプションのロケーション: 画像と英語での説明 |
- プロンプトは英語で。現在形の1段落。サウンドは
Sound:、セリフは引用符で囲む。必要に応じてexactly 2 peopleと各人の立ち位置を記述。否定表現は使わない。生き物はその種類で説明。マッチするキャラクターがない@Nameは拒否されます(unknown_mention)。 - フォーマット(
widthxheight): 縦向き 480 x 832、720 x 1280、1088 x 1920、横向き 832 x 480、1280 x 720、1920 x 1088、正方形 480 x 480、720 x 720、1088 x 1088。4K不可、480pはQualityのみ。 - モード: Quality(デフォルト)またはUltra(
quality: "max")。延長とトランジションは使用不可。 - 尺: 自動(
duration_auto、デフォルト)、またはduration_auto: falseとlength(24fpsで121 = 5秒、241 = 10秒、481 = 20秒)で固定。他のレートの場合も同じ尺をフレーム数で換算、最大481フレーム(30fpsで: 145、297、481、60fpsで: 297、481)。 - フレームレート:
fps24、30(デフォルト)または60。通常クリップと同様。lengthはこのレートのフレーム数(最大481、30fpsで16秒、60fpsで8秒)。 - 料金: クリップ1本分の料金。Qualityでは上記料金表のフォーマット定額料金、サウンドありは2倍。480pサウンドなしは5クレジット(Qualityの低価格はMulti-Refには適用されません)。
"multiref": trueを付けたPOST /videos/quoteで正確な料金を確認できます。 - サーバーはビューを動画の正確なフォーマットに合わせます。キャラクターはそのまま送信してください。ビューが1つだけのキャラクターはレンダリングされますが、レスポンスの
warningsにlimited_likenessが返されます(顔の一致度が制限されます)。 - プロフィールのボイス: サウンドありの場合、
characters[0]とcharacters[1]はデフォルトで、オンラインにあるプロフィールのボイスで話します(has_voice)。voiceをgeneratedにするとモデルがボイスを作ります。レスポンスのvoicesに各キャラクターのボイスが示されます(character_id、voice:character、custom、generated)。 - キャラクターボイス(
voice_b64): モデルはその音声でキャラクターを喋らせます(口の動きも含む)。サーバーは最初の5秒を使用します。最大2つの音声で、characters[0]とcharacters[1]のみ対応(エンジンは2音声まで対応)。charactersはセリフ順に並べてください(characters[0]が先に話し、characters[1]が答える)。サウンドが必要です("audio": true)。そうでなければvoice_requires_audio。他のキャラクターへの音声指定:voice_slot、読み取れないファイル:unsupported_audio_format、4MB超:audio_too_large。最初の5秒のみ使用されます。短い抜粋を送信してください。リクエストボディ全体は30MB以内にしてください(超過した場合は413が返され、JSONボディなし)。追加料金なし。 - ポーリング、ダウンロード、キャンセルは通常の動画と同様です(上記「ポーリング、ダウンロード、キャンセル」を参照)。
保存済みオブジェクト、動物、ロケーション。 multirefの2つの追加フィールドで、自身の画像から保存したsubjectsをキャストできます。
multirefのフィールド | 内容 |
|---|---|
subjects[] | オブジェクトと動物(subject_id、オプションでname、description、strength)。キャラクターとスロットを共有します(合計4参照まで。Ultraでは合計30枚の画像まで(下記参照))。 |
location | 背景として使用する保存済みロケーション(subject_id、オプションでname、description、strength)。画像を独自の強度で使用。background_b64を置き換えます(両方同時指定はmultiref_incompatible)。少なくとも1つのキャラクター、オブジェクト、または動物が必要です。 |
nameはデフォルトでsubjectの名前の最初の単語になり、各@Nameはキャラクターと同様にマッチングされます。subjectsにロケーションを渡した場合、またはlocationにオブジェクトを渡した場合は拒否されます(invalid_subject_type)。料金は変わりません(クリップ1本分)。サブジェクトは最初の5枚の画像で使われます(Ultraではすべての画像、最大6枚)。
"multiref": {
"characters": [{ "character_id": "chr_8f3a...", "name": "Lea" }],
"subjects": [{ "subject_id": "sub_1c2d...", "name": "Rex" }],
"location": { "subject_id": "sub_9e8f...", "name": "Loft" }
},
"prompt": "@Lea throws a ball to @Rex across @Loft. Sound: barking, laughter."Ultraの場合、Multi-Refクリップは秒単位課金のUltraのルールに従います:同じ秒単価、音声込み、24fpsで4〜30秒(自動の長さでは5秒)、480p〜1080p、シードなし。
- 各キャラクターは、character sheet(ない場合はすべての画像)をサーバーが1枚の画像にまとめて送られます。各オブジェクト、動物、ロケーションはすべての画像(最大6枚)とともに送られます。
- キャラクターの最初のレンダリングではこの画像を準備するため、数十秒長くかかります。その場合
jobIdはsdp-で始まり、他と同じように追跡できます。 - 音声なし:
voice_b64とプロフィールの声は無視され(warningsvoice_ignored)、strengthは効果がありません。 - エンジンは参照画像(実在の顔など)を拒否することがあります。その場合レンダリングは理由とともに
failedで終わり、課金はありません。
スタイル、衣装、モーション。 Ultra(quality: "max")でのみ使えるmultirefの3つの追加フィールドです。それ以外ではリクエストは拒否され(multiref_ultra_only)、これらを外してレンダリングされることはありません。
multirefのフィールド | 内容 |
|---|---|
styles[] | 保存済みのスタイル(subject_id、オプションでname、description)。クリップ全体がそのルック(技法、光、色、質感)を取り入れ、内容は取り入れません。 |
outfits[] | 保存済みの衣装(同じフィールドに加えてworn_by)。画像のとおりに着用されます。worn_by(オプション)はキャラクターのいずれかのnameで、シーンの冒頭に「<Name> wears <Outfit>.」を追加します。指定しない場合はプロンプトに書きます:@Lea wears @RedGown。 |
motion | 4〜30秒の1本のモーション動画:{ "motion_id": ... }(POST /motionsでアップロード)または{ "video_b64": ... }(MP4、MOV、WebM、MKV、最大20MB)、およびオプションで英語の動きのdescription。modeでクリップが取り入れる内容を選びます:camera(デフォルト)はカメラワーク、構図、リズム、choreographyは体の動き、ジェスチャー、そのリズムです。動画の人物や場所は取り入れません。どちらのモードも料金は同じです。サーバーは約41万ピクセル(16:9で856×482)、毎秒24フレーム、音声なしに変換します。幅と高さの比率は0.4〜2.5です。 |
- Ultraでは最大30枚の画像(キャラクター、サブジェクト、スタイル、衣装、ロケーションの合計、
multiref_too_many_images)。そのうちキャラクターは12体までです(超えるとmultiref_characters_required)。推奨は8体で、9〜12体では一部が欠けたり混ざったりする可能性があるため、レンダーはwarningsのmany_characters付きで実行されます。styles以外に渡したスタイルやoutfits以外に渡した衣装は拒否されます(invalid_subject_type)。 -
モーションの料金:モーション動画1秒ごとに3 クレジット(秒単位で切り上げ)がレンダリング料金に加算されます。
GET /pricing(ultra.motion_per_second)で確認できます。同じmultiref.motionを付けたPOST /videos/quoteでmotion_secondsと正確な料金がわかります。 - 大きなモーション動画の直接アップロード:
POST /motionsに{ "size": <バイト数> }(最大20MB)を送るとmotion_id、upload_url、headers、expires_in(900秒)が返ります。PUT upload_urlでこれらのheadersをそのまま付けてファイルを送り、2時間以内にmultiref.motion.motion_idをPOST /videosに渡します。1つのmotion_idは1回のレンダリングにのみ使えます。
"quality": "max",
"multiref": {
"characters": [{ "character_id": "chr_8f3a...", "name": "Lea" }],
"styles": [{ "subject_id": "sub_a1b2..." }],
"outfits": [{ "subject_id": "sub_c3d4...", "name": "RedGown", "worn_by": "Lea" }],
"motion": { "motion_id": "4f0c2a9b1d7e6a35", "description": "a low tracking shot from the side" }
},
"prompt": "@Lea walks along a seaside promenade at sunset."スタイル、衣装、モーションのエラーコードは制限とエラーにあります。
MCPサーバーでは、エージェントがtendre_multiref_videoを使ってこれらの操作をすべて実行できます。シーン、キャラクター、オブジェクト、動物、ロケーションを指定してください(subjects、location_id)。
フェイススワップ
自分のビデオに映っている人物を、キャラクターの1人に変えます。顔、髪、体、衣装(partで頭部のみも可)が変わりますが、ジェスチャー、口の動き、背景はそのまま保持されます。音声も保持されますが、キャラクターに専用のボイスがある場合はそのボイスに変換されます(voiceを参照)。アプリのフェイススワップ機能で、最大20秒の1パッセージに対応しています(1キャラクター、チェーンとトランジションなし)。リクエストはPOST /faceswap(権限videosが必要)です。
{
"video_b64": "<the video in base64: MP4, MOV, WebM or MKV, 20 MB at most>",
"character_id": "chr_8f3a...",
"start": 2,
"duration": 6,
"scene": "@Lea wears a long red coat.",
"zone": "normal",
"likeness": 1
}| フィールド | 内容 |
|---|---|
video_b64 | ビデオ(最大20MB、人物がはっきり映っていること)。超過する場合はトリムまたは圧縮するか、最大95MBまで対応するMCPツールtendre_face_swapを使用してください。 |
character_id, sheet_id | GET /charactersのキャラクター。複数のシートがある場合は使用するシートを指定(デフォルトは最新のもの)。 |
name | オプション、最大60文字: キャラクターの名前。デフォルトはGET /charactersのもの。アプリで作成したキャラクターの名前は、アプリが送信した後にのみオンラインに反映されます(アプリ0.9.1以降。それ以外はGET /charactersのnameがnull)。sceneで@Nameとして呼び出す場合は名前を指定、そうでない場合はImage 1で呼び出します。 |
start, duration | パッセージの秒数: startから(デフォルト0)、duration秒間(デフォルトはビデオの終わりまで、最大20秒)。 |
scene | オプション、英語、最大400文字: 変更または明示したい内容。キャラクターは@Name(名前の最初の単語、nameを参照)またはImage 1で呼び出します。シーンなしの場合、カメラの人物と全く同じ動きをします。シーンでキャラクターを話させたり、口・視線・頭の動きを書いたりしないでください(「says」「looks at the camera」「smiles」など)。キャラクターはそれらを動画からコピーしますが、指示があると自分で作り出してしまい、口の動きがずれたり頭の向きが変わったりします。周囲で変わるもの(衣装、小物、照明)を書いてください。 |
description | オプション、英語、最大360文字: キャラクターの説明(例: "a 28 year old woman with long red hair, wearing a black leather jacket")。デフォルトはそのkindと衣装。 |
part | full(デフォルト): キャラクター全体。head: 頭部のみ(顔と髪)。撮影された体、服装、背景はそのまま残ります。この場合、キャラクターはcharacter sheetの3つのポートレートを頭部にクロップしてレンダリングされます(レスポンスのheads_only)。ビューが1つまたは2つのキャラクターでは、ビューはクロップされずそのまま使われます。デフォルトの説明は衣装を含まずkindのみとなり、zoneのデフォルトはtightになります。 |
zone | 撮影されたシルエット周辺でキャラクターを描画できるスペース: tight、normal(デフォルト)、wide(大きな耳、翼、大柄な体型向け)。partがheadの場合は頭部周辺のスペースで、デフォルトはtightです。 |
likeness | キャラクターがそのビューにどれだけ忠実に従うか(0.5〜2、デフォルト1)。 |
audio | デフォルトはtrue: ビデオのサウンドが保持され、口の動きに合わせます。false: サウンドなし。 |
voice | character(デフォルト): キャラクターのプロフィールのボイスがオンラインにある場合(GET /charactersのhas_voice)、ビデオのサウンドがそのボイスに変換されます。同じレンダリング内でテンポを変えずに変換されるため、口の動きは合ったままです。プロフィールのボイスがない場合は撮影された声のままです。original: 撮影された声を保持します。レスポンスに使用されたボイスが示されます(voice: character、custom、original、サウンドなしの場合はnone)。 |
voice_b64 | オプション、サウンドありの場合: キャラクター用の別のボイス(WAV、MP3、OGG、FLAC、最大2MB、最初の20秒を使用)。プロフィールのボイスより優先されます。ビデオのサウンドがこのボイスに変換されます(テンポは変わらない)。 |
seed | レンダリングのシード値(0〜4294967295)。再レンダリングやバリエーション生成に使用。 |
ビデオと音声の合計: 最大22MB(リクエストボディを30MB未満に収めるため。超過した場合は413が返され、JSONボディなし)。
- サーバーがすべてを準備します。 パッセージを切り出し、作業フレームレート(ソースが29fps以上の場合は30fps、50・60を含む。29fps未満は24fps)と作業フォーマット(128の倍数、短辺768、ビデオに最も近いアスペクト比)に設定し、キャラクターのビューをそのフォーマットに合わせます。
- 返されるものは、作業フォーマットでのパッセージ動画です(約100万ピクセル。例: 縦向きなら768 x 1408)。元の動画のプロポーションが5%以内で保持されます。フル解像度と複数キャラクターの連続処理はtendre.AIデスクトップアプリ専用です(元の動画にフル解像度でキャラクターを貼り付け、複数キャラクターを連続処理)。
- 料金: 準備済みパッセージの1秒あたり6クレジット(レスポンスの
seconds)、次のクレジットへ切り上げ。レスポンスにはjobId、seed、cost、準備済みパッセージの情報(width、height、length、fps、seconds、audio、voice、views、part)が含まれます。ビューが1つだけのキャラクターはレンダリングされますが、warningsにlimited_likenessが返されます。 - クォートなし:
POST /videos/quoteもMCPのtendre_quoteもフェイススワップには対応していません。送信前に料金を計算するには、GET /pricingのgrid.body_swapを参照してください(パッセージの秒数 ×per_block_720p(ブロックの料金) /block_seconds(ブロックの長さ)、次のクレジットへ切り上げ)。 - 一部のシーンはキャラクターの3つのポートレートを頭部にクロップしてレンダリングされます(レスポンスの
heads_only)。その場合、ビューの衣装は強制されず、シーンが決定します。 - フェイススワップはキャラクターの1使用分としてカウントされ、削除タイマーがリセットされます(Multi-Refと同様)。
- ポーリング、ダウンロード、キャンセルは通常の動画と同様です(上記「ポーリング、ダウンロード、キャンセル」を参照):
GET /videos/{jobId}、GET /videos/{jobId}/file、POST /videos/{jobId}/cancel。 - 固有のエラー:
video_required、video_too_large、unreadable_video、invalid_start、passage_too_short、invalid_duration、invalid_zone、invalid_likeness、invalid_scene、invalid_description、invalid_character_name、invalid_part、invalid_voice_choice、character_required、unknown_character、audio_too_large(音声が2MB超)、face_swap_too_large(準備後もパッセージが重すぎる場合:durationを短くしてください)、server_busy(既に2本の動画が準備中:Retry-Afterの20秒後に再試行)、face_swap_unavailable、face_swap_price_missing(フェイススワップが利用不可または料金が設定されていない: 後で再試行)。各エラーの意味: 制限とエラー。 - ビデオは準備中に一時的にサーバーを経由し、レンダリングするグラフィックカードに送られます(他のソース画像と同様)。
同意を得た人物のビデオのみ使用してください。これは利用規約のルールです。
MCPサーバーでは、エージェントがtendre_face_swapを使ってこれらの操作をすべて実行できます。