Seedance 2.5 is live — 30-second cinematic video with native audio & real-person references
一貫したキャラクター3D画像API $0.143で実現
2026/09/03

一貫したキャラクター3D画像API $0.143で実現

一貫性のある3D風キャラクター画像生成API。Wan 2.7でマスター画像と5つのシーン候補を$0.143で実現。APIワークフロー完全ガイド。

可能です。一貫性のある3D風キャラクター画像を生成するAPIワークフローは、1つのマスター画像と5つのシーン候補を15セント未満で制作できます。 9月3日のテストでは、マスター画像が24クレジットで32.1秒で完成しました。2回目のWan 2.7画像リクエストで5つのシーンファイルが119クレジットで59.0秒で返却されました。合計143クレジット、つまり**$0.143**です。[1]

この結果には重要な制限があります。このテストではタスクステータス、出力数、タイミング、クレジットを記録しましたが、ビジュアルレビューは含まれていません。したがってこれは生成とコストの測定テストであり、5つの画像がキャラクターレビューに合格したという主張ではありません。以下のチュートリアルでは、同じワークフローを実行し、ユーザーが結果を確認した後の受理画像あたりのコストを計算する方法を示します。

TL;DR

  • ワークフローはwan2.7-imageを2回使用します。1回はマスターキャラクター候補用、承認後にもう1回5画像シリーズ用です。
  • Wan 2.7イメージグループモードはenable_sequential: trueで有効になります。nの上限は4から12画像に引き上がります。[3]
  • 測定されたAPI料金はマスター24クレジット+5シーン119クレジット=143クレジット($0.143)[1]
  • 日付付きテスト記録をダウンロードします。両方のタスクID、設定、完成時間、確定クレジットが一覧表示されており、一時的な出力URLに依存していません。
  • 5シーンバッチのコストは完成した候補あたり$0.0238です。マスターを含めると、マスターが承認され5つすべてのシーンがレビューに合格した場合のみ、有効コストはシーンあたり$0.0286です。
  • 「3D風」は次元感のあるマンガ風で描画されたフラット画像ファイルを意味します。このワークフローはメッシュ、スケルトン、リグ、または編集可能な3Dモデルを作成しません。
  • 一貫性は保証されません。リファレンス画像、固定されたアイデンティティ契約、グループ生成、およびレビューゲートはドリフトを減らします。どれもが永久的なキャラクターロックではありません。

一貫キャラクターAPIテストが答えるもの

API で同じ 3D 風カートゥーンキャラクターを複数のシーンにわたって維持できるのか。画像 1 枚、あるいはバッチごとにいくらかかるのか。参照画像ですでにキャラクターが決まっているなら、残る課題は人の確認を挟んだまま処理を自動化することです。タスクが完了しても、その画像がそのまま採用できるとは限りません。

そこで、このテストでは API タスクの完了、返された候補 1 枚あたりの費用、採用されたシーン 1 枚あたりの費用を分けて記録します。最初の 2 つはタスクと請求の記録から分かりますが、最後の 1 つは実際に画像を確認しなければ算出できません。

5シーンキャラクターセットにWan 2.7イメージが適している理由

Wanの公式プロダクトページでは、最大12個の画像と主体/スタイル継続性を持つシーケンシャルストーリーテリングについて説明しています。[2] reAPIルートはその機能を直接公開します。enable_sequentialtrueに設定し、nを画像数に設定して、順序付きURLアレイのためのタスクを1つポーリングします。[3]

そのリクエスト形状は1つのタスクにキャラクター参照、アイデンティティ契約、および完全なシーンリストを与えます。5つの無関連なテキストから画像への呼び出しは、5回のキャラクターから散文を再発見する必要があります。

これはワークフロー選択であり、普遍的な品質主張ではありません。Wanはこのテストに必要なグループシリーズ制御を提供します。

最初のAPIリクエストを作成する前に

4つのことが必要です。

  • REAPI_API_KEYに保存されたreAPIキー。
  • 使用する権利がある元のフィクショナルキャラクター。
  • すべてのシーンで生き残る必要があるビジュアルトレイトの短いリスト。
  • 生成されたURLは一時的であるため、承認されたファイルを保持する場所。

有名なキャラクターやスタジオのハウススタイルではなく、再現する権利を持つ元のキャラクターを使用してください。評価も簡単です。

このテストでは、キャラクター契約は意図的に具体的です。

CHARACTER: an original adult anthropomorphic warm orange fox explorer
FACE: cream muzzle, small notch in the left ear
CLOTHING: teal scarf with exactly two white stripes
ACCESSORIES: round brass goggles on forehead, navy cross-body satchel
ANCHORS: yellow triangle patch on satchel, two dark tail rings, cream tail tip
DO NOT CHANGE: warm orange fur, cream muzzle, ear-notch side, scarf pattern,
goggles, satchel patch, tail markings, compact athletic body proportions

「かわいい」、「映画的」、「プレミアム」などの説明は監査するには広すぎます。耳のノッチまたは2本のストライプのスカーフはレビューアに何か観察可能なものを与えます。

ステップ1:中立的なキャラクターマスターを生成

マスターは物語を伝えるのではなく、キャラクターを説明すべきです。均等な照明、平らな背景、顔、服、バッグ、尾を明らかにする角度を使用してください。シーンセット用に計画されたのと同じアスペクト比で保ってください。参照駆動モード、Wanは最後の入力画像の比率に従います。[5]

curl https://reapi.ai/api/v1/images/generations \
  -H "Authorization: Bearer $REAPI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "wan2.7-image",
    "prompt": "Original stylized 3D cartoon character reference sheet for an adult anthropomorphic fox explorer. The same character shown in a clean front view and two three-quarter views. Identity anchors: a small notch in the left ear, teal scarf with exactly two white stripes, round brass goggles resting on the forehead, navy cross-body satchel with one yellow triangle patch, two dark rings on the tail and a cream tail tip. Warm orange fur, cream muzzle, compact athletic proportions, friendly alert expression. Neutral warm-gray studio background, soft even product lighting, full body visible, no text, no labels, no logo, no second character, no collage borders.",
    "size": "16:9",
    "resolution": "1K",
    "n": 1,
    "watermark": false
  }'

POSTはイメージそのものではなくタスクIDを返します。GET /api/v1/tasks/{id}をステータスがcompletedまたはfailedになるまでポーリングします。ポーリングはクレジットを消費しません。[5]

本番ワークフローでは、ここで停止してシリーズを生成する前にマスターを検査します。3つの見方が一致しない、アンカーが欠けている、または機能が別のポーズで認識するのが難しい場合は拒否します。測定テストはビジュアル承認ゲートなしで続行されたため、そのマスターは完成した候補のままです。

ステップ2:5つの接続されたシーンをリクエスト

完成したマスターのoutput.image_urlsアレイから最初のURLを取得し、MASTER_IMAGE_URLに配置します。WanはパブリックなHTTPSリファレンス画像を受け入れます。base64とdata: URLはこのルートによって受け入れられていません。[3]

export MASTER_IMAGE_URL="https://your-temporary-or-hosted-url.example/master.png"

curl https://reapi.ai/api/v1/images/generations \
  -H "Authorization: Bearer $REAPI_API_KEY" \
  -H "Content-Type: application/json" \
  -d @- <<JSON
{
  "model": "wan2.7-image",
  "prompt": "Use the reference image only to preserve the identity of the original adult fox explorer. Create a connected five-image story sequence, one separate scene per output, in the same polished stylized 3D cartoon rendering language. Preserve all identity anchors exactly: left-ear notch, teal scarf with exactly two white stripes, round brass forehead goggles, navy cross-body satchel with one yellow triangle patch, two dark tail rings, cream tail tip, muzzle shape and body proportions. Scene 1: dawn railway platform, medium-wide view, holding one red paper ticket. Scene 2: sunlit workshop, medium view, repairing a small wooden toy airplane. Scene 3: rainy night market, full-body view, carrying one yellow umbrella. Scene 4: snowy wooden footbridge at dusk, three-quarter view, holding a small warm lantern. Scene 5: rooftop at blue hour, rear three-quarter view with face still visible, looking across the city. One fox only in every image. No text, no logo, no wardrobe change, no extra limbs, no duplicate character, and do not combine scenes into a collage.",
  "image_urls": ["$MASTER_IMAGE_URL"],
  "size": "16:9",
  "resolution": "1K",
  "n": 5,
  "enable_sequential": true,
  "watermark": false
}
JSON

グループと編集モードは最大2K出力をサポートしています。Proモデルの4Kオプションはテキストから画像のみなので、このリファレンス駆動リクエストを4Kに上げることは無効な構成です。[3]

ステップ3:Node.jsで安全に承認ゲートを実行

以下の完全な例をcharacter-series.mjsとして保存し、Node.js 18以降を使用します。最初の実行はマスターのみを生成し、そのタスクIDを出力して記録してから停止します。その画像をレビューしてから、APPROVED_MASTER_URLを設定し、5シーングループのスクリプトを再度実行します。

スクリプトは一時的なGET障害を再試行しますが、POSTを再試行することはありません。送信中に接続がドロップした場合、プロバイダーはまだリクエストを受け取った可能性があります。盲目的に別の請求可能なタスクを作成する代わりに、タスクログまたはダッシュボードで確認します。

import { appendFile } from 'node:fs/promises';

const baseUrl = 'https://reapi.ai';
const apiKey = process.env.REAPI_API_KEY;
const approvedMasterUrl = process.env.APPROVED_MASTER_URL?.trim();
const taskLogUrl = new URL(
  './character-series-task-ids.jsonl',
  import.meta.url,
);

const masterPrompt = process.env.MASTER_PROMPT ??
  'Original stylized 3D cartoon character reference sheet for an adult anthropomorphic fox explorer. The same character shown in a clean front view and two three-quarter views. Identity anchors: a small notch in the left ear, teal scarf with exactly two white stripes, round brass goggles resting on the forehead, navy cross-body satchel with one yellow triangle patch, two dark rings on the tail and a cream tail tip. Warm orange fur, cream muzzle, compact athletic proportions, friendly alert expression. Neutral warm-gray studio background, soft even product lighting, full body visible, no text, no labels, no logo, no second character, no collage borders.';

const groupPrompt = process.env.GROUP_PROMPT ??
  "Use the reference image only to preserve the identity of the original adult fox explorer. Create a connected five-image story sequence, one separate scene per output, in the same polished stylized 3D cartoon rendering language. Preserve all identity anchors exactly: left-ear notch, teal scarf with exactly two white stripes, round brass forehead goggles, navy cross-body satchel with one yellow triangle patch, two dark tail rings, cream tail tip, muzzle shape and body proportions. Scene 1: dawn railway platform, medium-wide view, holding one red paper ticket. Scene 2: sunlit workshop, medium view, repairing a small wooden toy airplane. Scene 3: rainy night market, full-body view, carrying one yellow umbrella. Scene 4: snowy wooden footbridge at dusk, three-quarter view, holding a small warm lantern. Scene 5: rooftop at blue hour, rear three-quarter view with face still visible, looking across the city. One fox only in every image. No text, no logo, no wardrobe change, no extra limbs, no duplicate character, and do not combine scenes into a collage.";

if (!apiKey) {
  throw new Error('Set REAPI_API_KEY before running this script.');
}

for (const [name, value] of [
  ['MASTER_PROMPT', masterPrompt],
  ['GROUP_PROMPT', groupPrompt],
]) {
  if (!value.trim()) throw new Error(`${name} cannot be empty.`);
}

const headers = {
  Authorization: `Bearer ${apiKey}`,
  'Content-Type': 'application/json',
};

const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));

async function readJson(response) {
  const text = await response.text();
  if (!text) return {};
  try {
    return JSON.parse(text);
  } catch {
    return { raw: text };
  }
}

async function submitGeneration(body) {
  let response;

  try {
    response = await fetch(`${baseUrl}/api/v1/images/generations`, {
      method: 'POST',
      headers,
      body: JSON.stringify(body),
    });
  } catch (error) {
    const detail = error instanceof Error ? error.message : String(error);
    throw new Error(
      `POST outcome is uncertain; do not submit it again automatically. ${detail}`,
    );
  }

  const result = await readJson(response);
  if (!response.ok) {
    throw new Error(`${response.status}: ${JSON.stringify(result)}`);
  }
  if (!result.id) {
    throw new Error(
      'POST returned no task ID; do not resubmit automatically until checked.',
    );
  }
  return result;
}

function retryDelayMs(response, attempt) {
  const retryAfter = response?.headers.get('retry-after');
  if (retryAfter) {
    const seconds = Number(retryAfter);
    if (Number.isFinite(seconds)) return Math.max(0, seconds * 1000);

    const retryAt = Date.parse(retryAfter);
    if (Number.isFinite(retryAt)) return Math.max(0, retryAt - Date.now());
  }
  return Math.min(1000 * (2 ** Math.min(attempt, 5)), 30000);
}

async function getTaskWithRetry(id, attempt) {
  let response;

  try {
    response = await fetch(`${baseUrl}/api/v1/tasks/${id}`, { headers });
  } catch (error) {
    const delay = retryDelayMs(null, attempt);
    console.warn(`Task GET failed; retrying in ${delay}ms.`);
    await sleep(delay);
    return null;
  }

  if (response.status === 429 || response.status >= 500) {
    const delay = retryDelayMs(response, attempt);
    await response.text();
    console.warn(`Task GET returned ${response.status}; retrying in ${delay}ms.`);
    await sleep(delay);
    return null;
  }

  const task = await readJson(response);
  if (!response.ok) {
    throw new Error(`${response.status}: ${JSON.stringify(task)}`);
  }
  return task;
}

async function waitForTask(id, timeoutMs = 10 * 60 * 1000) {
  const deadline = Date.now() + timeoutMs;
  let transientAttempt = 0;

  while (Date.now() < deadline) {
    const task = await getTaskWithRetry(id, transientAttempt);
    if (!task) {
      transientAttempt += 1;
      continue;
    }
    transientAttempt = 0;

    if (task.status === 'completed') return task;
    if (task.status === 'failed') {
      console.error(JSON.stringify({
        taskId: id,
        status: task.status,
        usageCredits: task.usage?.credits ?? null,
        error: task.error ?? null,
      }, null, 2));
      throw new Error(`Task ${id} failed; see the record above.`);
    }

    await sleep(5000);
  }

  throw new Error(
    `Polling timed out for ${id}. The task was not cancelled; resume GET polling instead of submitting another POST.`,
  );
}

async function recordSubmission(stage, taskId) {
  const record = {
    stage,
    taskId,
    submittedAt: new Date().toISOString(),
  };
  console.log(`Submitted ${stage}: ${taskId}`);

  try {
    await appendFile(taskLogUrl, `${JSON.stringify(record)}\n`, 'utf8');
  } catch (error) {
    console.warn(`Could not write ${taskLogUrl.pathname}; keep task ID ${taskId}.`);
  }
}

function requirePublicHttpsUrl(value) {
  let parsed;
  try {
    parsed = new URL(value);
  } catch {
    throw new Error('APPROVED_MASTER_URL must be a valid public HTTPS URL.');
  }
  if (parsed.protocol !== 'https:') {
    throw new Error('APPROVED_MASTER_URL must use HTTPS.');
  }
}

async function main() {
  if (!approvedMasterUrl) {
    const submission = await submitGeneration({
      model: 'wan2.7-image',
      prompt: masterPrompt,
      size: '16:9',
      resolution: '1K',
      n: 1,
      watermark: false,
    });
    await recordSubmission('character_master', submission.id);

    const task = await waitForTask(submission.id);
    const masterUrl = task.output?.image_urls?.[0];
    if (!masterUrl) throw new Error('Master task returned no image URL.');

    console.log(JSON.stringify({
      nextStep: 'Review this master. Rerun only after setting APPROVED_MASTER_URL.',
      masterTaskId: task.id,
      usageCredits: task.usage?.credits ?? null,
      masterUrl,
    }, null, 2));
    return;
  }

  requirePublicHttpsUrl(approvedMasterUrl);
  const submission = await submitGeneration({
    model: 'wan2.7-image',
    prompt: groupPrompt,
    image_urls: [approvedMasterUrl],
    size: '16:9',
    resolution: '1K',
    n: 5,
    enable_sequential: true,
    watermark: false,
  });
  await recordSubmission('five_scene_group', submission.id);

  const task = await waitForTask(submission.id);
  const sceneUrls = task.output?.image_urls ?? [];

  console.log(JSON.stringify({
    groupTaskId: task.id,
    usageCredits: task.usage?.credits ?? null,
    returnedSceneCount: sceneUrls.length,
    sceneUrls,
  }, null, 2));
}

main().catch((error) => {
  console.error(error instanceof Error ? error.message : error);
  process.exitCode = 1;
});

最初にnode character-series.mjsを実行します。返却されたマスターをレビューした後、APPROVED_MASTER_URL="https://..." node character-series.mjsで再実行します。スクリプトはタスクIDをcharacter-series-task-ids.jsonlに書き込みます。そのステージ結果には確定したusageCreditsが含まれます。組み込みプロンプトをMASTER_PROMPTまたはGROUP_PROMPTでオーバーライドできますが、空のオーバーライドは拒否されます。

n8nでは、同じ承認境界を保つ:マスターブランチは人間のレビューステップで終了し、承認されたURLのみがグループ生成ブランチに入るべきです。

測定されたAPI実行が返却したもの

2つのリクエストは以下のように完成しました。[1]

ステージタスクID時間クレジットファイル返却数
Character mastertask_01a065451919736985878cfcbd2eb8a832.1s241
Five-scene grouptask_01a06545f23474bca896f6b98ee252bc59.0s1195
Total1436 including master

これらは2つの観測されたタスク時間であり、レイテンシベンチマークではありません。p95パフォーマンス、別の地域、別のプロンプト、または将来の容量については何も言いません。出力URLも一時的であるため省略されます。

最も重要なことに、「files returned: 5」は5つの完成した候補を意味します。すべての出力がキツネを正しく描いているか、意図されたシーンにマップされているか、またはビジュアル欠陥を回避しているかを証明していません。

シーンごとにキャラクター一貫性をレビューする方法

マスターを各シーンの横に開きます。小さなサムネイルから判断しないでください。顔、衣装、アクセサリー、シルエット、および要求されたアクションを有用なズームで検査します。

レビュー領域合格条件典型的な失敗
Fur, face, and speciesWarm orange fur, cream muzzle, and fox proportions matchFur color drifts or the face becomes another species
Left-ear anchorNotch remains on the left ear when that ear is visibleNotch disappears or swaps sides
ScarfTeal color and two white stripes remainColor shifts, stripe count changes, scarf vanishes
Goggles and proportionsBrass goggles stay on the forehead; body proportions matchGoggles move to the eyes or the body is redesigned
SatchelNavy cross-body satchel and yellow triangle patch remainPatch changes shape or the satchel changes sides without cause
TailTwo dark rings and cream tip remain when visibleMarkings change between full-body scenes
Scene instructionSetting, prop, action, and framing match the assigned sceneTwo scenes merge or an output becomes a collage
Structural qualityNo duplicate limbs, fused props, or extra main characterUmbrella, hands, or tail merge into the body

アンカーが本当に視野を隠している場合、N/Aとマークします。非表示の特性に対して合格を与えないでください。ただしそれを矛盾とも呼ばないでください。画像は、すべての目に見える同一性アンカーが正しく、要求されたシーンが存在し、主要な構造的欠陥がない場合にのみ受け入れられます。

このルーブリックは意図的にシンプルです。自動化されたビジョンスコアリングは大きなバッチを並べるのに役立つかもしれませんが、新しいキャラクターのリリース決定を黙って置き換えるべきではありません。

完成および受理された画像あたりのコストを計算

現在のWan 2.7イメージレートはreAPIの生成された標準画像あたり$0.0238です。クレジットはタスク合計で1回確定し、クレジット全体に切り上げられます。 ceil($0.0238 × 1 × 1,000) = 24マスター用、ceil($0.0238 × 5 × 1,000) = 119グループ用。[3][4]

このラン用に:

group candidate cost = $0.119 / 5 = $0.0238
project cost          = $0.024 + $0.119 = $0.143
accepted-image cost   = $0.143 / accepted scene count
5つの候補から受け入れられたシーン受け入れられたシーンあたりの有効コスト
5$0.0286
4$0.0358
3$0.0477
2$0.0715
1$0.1430

何も合格しない場合、プロジェクトは受け入れられた画像を生成しなかったため、受け入れられた画像あたりの数値は未定義です。$0.143は生成のみをカバーしています。ストレージ、オーケストレーション、人間のレビュー、および後のアニメーションは完全な本番予算に属しています。

レートは変わります。上記の数字は9月3日2026年にチェックされテストされました。このリンク先のWan 2.7イメージモデルページで、独自のプロダクトに価格を配置する前にライブデータを使用してください。

最も小さい失敗したパーツを修正

マスターが間違っている場合は、停止して再生成します。弱いリファレンスに基づいて5画像シリーズに支払うことは、問題を複数にするだけです。

1つのシーンがそのプロップを逃すがキャラクターが安定している場合、より短いシーンプロンプトで単一のn: 1参照駆動置換を試してください。テストされたレートで、それは約24クレジットを追加します。複数のフレームがキャラクターを再設計する場合、マスターを修正するか競合する命令を削除してから、接続されたグループを再実行します。

Wanの現在のモデルドキュメントでは、失敗した要求と拒否された要求は請求されません。それでも、すべてのターミナルタスクでusage.creditsを読んでください。canonical Tasks APIは、モデル固有のポリシーが生成後の料金を保つ場合、失敗したタスクで正の値を許可します。[3][5] あなたのチームがクリエイティブに却下した完成した画像は請求可能なままです。これが受け入れられた画像コストが有用な本番指標である理由です。

シーンが合格したら、そのタスクID、プロンプトバージョン、参照バージョン、およびレビュー結果と共に保持します。生成されたURLは期限切れになるため、承認されたアセットを制御できるストレージにできるだけ早く移動します。[3]

初心者の一般的な間違い

すべてのシーンをテキストから生成します。 詳細な説明を繰り返すことは、5つの独立したサンプルが同一性を共有することを意味しません。承認されたピクセルを再利用します。

シーンプロンプト内でキャラクター契約を変更します。 「冬のコートを追加」は合理的なストーリー変更かもしれませんが、簡単な連続性アンカーを削除します。安定したアイデンティティをテストしてから、後の意図的な衣装の変更を導入します。

参照を多すぎます。 顔、尾、衣装についての見解が一致する参照は、モデルに複数の有効な回答を与えます。1つの承認されたマスターで始めます。

完成したファイルすべてが使用可能です。 完成は システム状態です。クリエイティブな承認はレビュー決定です。

ヘッドライン価格のみを発行します。 図がマスター、再試行、クリエイティブに却下された完成した出力、ストレージ、および人間のレビューをカバーするかどうかを述べます。

FAQ

このAPIは本物の3Dキャラクターモデルを生成しますか?

いいえ。スタイル化された3D外観を持つ画像ファイルを返します。メッシュ、リグ、テクスチャパッケージ、スケルトン、または編集可能なシーンを返しません。

Wan 2.7はすべての画像で同じキャラクターを保証しますか?

いいえ。グループモードとリファレンス画像はモデルにより強い連続性シグナルを与えますが、永続的なキャラクターIDを作成しません。すべてのシーンをレビューする必要があります。

5シーンバッチのコストはいくらでしたか?

グループタスクは119クレジット、つまり$0.119を使用し、5つの完成した候補を返却しました。別途生成されたマスターは24クレジットを使用し、テスト合計を$0.143に引き上げました。[1]

有効なコストが単純に画像あたり$0.0238でないのはなぜですか?

$0.0238はグループコストあたりの完成した候補です。プロジェクトはマスターも必要であり、一部の候補はビジュアルレビューに失敗する可能性があります。総プロジェクト支出を受け入れられたシーン数で割ると、有用な図が得られます。

独自のキャラクターリファレンス画像を使用できますか?

はい、それを所有しているか使用する許可があり、パブリックなHTTPS URLを通じて利用可能な場合です。Wan 2.7イメージは最大9つのリファレンス画像を受け入れますが、1つのクリアマスターは合理的な出発点です。[3]

すべてのシーンに同じシードを使用すべきですか?

Wanはシードを公開していますが、それはアイデンティティロックではありません。接続されたシリーズでは、承認されたリファレンスとグループリクエストがより重要です。変更されたインプットで繰り返されたシードは、同じ顔またはアクセサリーを保証しません。

1つのリクエストで5シーン以上生成できますか?

はい。enable_sequential: trueで、nは12と同じくらい高い可能性があります。シーケンスの長さが増加するにつれて、レビューとプロンプトの複雑さの両方が増加するため、小さなセットで開始します。

受け入れられた画像をビデオに変換するにはどうすればよいですか?

別の制御開始フレームとして各承認されたシーンを使用して画像からビデオへのモデル。GPT Image 2 + Seedance 2.0キャラクターワークフローは別のアニメーションステージを説明します。別のままにしておくことで、モーション障害がキャラクターの再設計を強制するのを防ぎます。

実際に出荷するものを記録

APIレコードには1つのマスター、1つの5画像グループ、6つの返却されたファイル、合計$0.143の料金が含まれています。ビジュアルスコアリングがこのテストの外にあったため、クリエイティブな受け入れレートは含まれていません。

完成、コスト、人間の受け入れを別々のフィールドとして保ってください。ルーブリックを適用した後、フルプロジェクトコストを実際に出荷するシーン数で割ります。

完全なリクエストスキーマ、制限、および現在の請求動作については、Wan 2.7イメージAPIドキュメントを使用してください。

参照

  1. reAPI. Wan 2.7 Image character-series test record. September 3, 2026. Master task task_01a065451919736985878cfcbd2eb8a8; group task task_01a06545f23474bca896f6b98ee252bc.
  2. Alibaba Wan. Wan official product page — Multi-Image Editing and Sequential Storytelling. Retrieved September 3, 2026. wan.video
  3. reAPI. Wan 2.7 Image API — group mode, reference inputs, resolution limits, task response, and errors. Retrieved September 3, 2026. reapi.ai/docs/wan-2-7-image
  4. reAPI. Wan 2.7 Image live model page and price estimator. Retrieved September 3, 2026. reapi.ai/models/wan-2-7-image
  5. reAPI. Tasks API — asynchronous status and polling behavior. Retrieved September 3, 2026. reapi.ai/docs/api/tasks

さらに読む