[{"data":1,"prerenderedAt":41277},["ShallowReactive",2],{"blog-list-ja":3},[4,11140,13333,17207,22904,30186,31942,38350],{"id":5,"title":6,"body":7,"description":11129,"extension":11130,"meta":11131,"navigation":58,"path":11136,"seo":11137,"stem":11138,"__hash__":11139},"content/ja/blog/seedance-2-api-tutorial-python.md","Seedance 2.0 API チュートリアル：Python でゼロから初めての AI 動画を生成",{"type":8,"value":9,"toc":11071},"minimark",[10,14,17,32,44,47,52,55,66,69,91,95,124,127,200,202,206,215,218,246,249,270,289,298,306,308,312,315,329,335,469,472,508,511,1027,1030,1066,1240,1250,1253,1262,1264,1268,1271,1737,1740,1829,1832,1844,1848,1855,2033,2036,2158,2172,2176,2181,2189,2192,2200,2207,2214,2216,2220,2227,2263,2266,2269,2275,2345,2349,2355,2361,2422,2434,2437,2440,2566,2580,2587,2598,2600,2604,2616,2622,2885,2888,2939,2943,2969,2972,3054,3057,3209,3215,3218,3272,3282,3290,3294,3297,3376,3383,3385,3388,3391,3610,3639,3642,3647,3651,3742,3750,3755,3850,3857,3862,3950,3955,4030,4047,4050,4053,4124,4137,4156,4158,4161,4164,4167,4170,4228,4250,4253,4258,4301,4307,4312,4366,4371,4376,4428,4437,4442,4485,4492,4497,4551,4557,4562,4605,4608,4613,4667,4673,4676,4887,4890,4893,4897,5644,5647,5679,5686,5690,5693,6273,6284,6286,6290,6297,6300,6306,6311,6469,6475,6479,6541,6545,6548,7740,7743,7766,7769,7796,7800,7809,7857,7860,7866,7872,7919,7934,7938,7941,8113,8117,8196,8203,8205,8209,8212,8217,8765,8768,8790,8792,8795,8798,8801,8840,8843,8865,8868,8871,8905,8915,8917,8920,8924,8930,8934,8940,8944,8950,8954,8965,8969,8982,8986,8996,9000,9015,9019,9026,9030,9046,9050,9057,9059,9062,9065,11045,11059,11067],[11,12,13],"p",{},"Seedance 2.0 は ByteDance の最先端 AI 動画生成モデルです — マルチモーダル参照、ネイティブオーディオ生成、シネマティックなカメラ制御、最大 1080p で 4〜15 秒の動画生成に対応しています。このチュートリアルでは、API Key の取得から最初の動画ダウンロードまで、Python で API ワークフロー全体を解説します。",[11,15,16],{},"このチュートリアルを終えると、テキストから動画、画像から動画、非同期 polling、webhook 処理、エラーリカバリーの完全な実行可能コードが手に入ります。すべてのコード例は実際の API でテスト済みです。",[18,19,20],"blockquote",{},[11,21,22,26,27,31],{},[23,24,25],"strong",{},"Seedance 2.0 と 1.5 について："," Seedance 2.0 は段階的にリリース中です。今すぐ ",[28,29,30],"code",{},"seedance-1.5-pro"," で完全なワークフローをテストできます — 2.0 が完全に利用可能になったら、モデル名を変更するだけです。すべてのエンドポイント、パラメータ、レスポンス形式は同一です。2.0 の主な違い：マルチモーダル参照（画像・動画・音声の混合入力）、ネイティブオーディオ生成、物理シミュレーションの改善、動画編集機能。このチュートリアルの内容はどちらのバージョンでも動作します。",[11,33,34],{},[23,35,36,43],{},[37,38,42],"a",{"href":39,"rel":40},"https://evolink.ai/early-access",[41],"nofollow","無料 API Key を取得","して、一緒に手を動かしましょう。",[45,46],"hr",{},[48,49,51],"h2",{"id":50},"何を作るかそして何が必要か","何を作るか（そして何が必要か）",[11,53,54],{},"まず Seedance で生成した動画を見てみましょう — たった 1 回の API コールで作成されました：",[56,57,60,61],"video",{"autoPlay":58,"loop":58,"muted":58,"playsInline":58,"style":59},true,"width:100%;border-radius:12px;margin:1.5em 0","\n  ",[62,63],"source",{"src":64,"type":65},"https://cdn.evolink.ai/seedance2api/%E5%B0%8F%E5%A5%B3%E5%AD%A9%E5%9B%BE%E4%B9%A6%E9%A6%86%E5%A5%87%E9%81%87.mp4","video/mp4",[11,67,68],{},"このチュートリアルで書く Python コード：",[70,71,72,76,79,82,85,88],"ol",{},[73,74,75],"li",{},"テキストプロンプトを送信 → 生成された動画を取得",[73,77,78],{},"画像を送信 → アニメーション動画に変換",[73,80,81],{},"非同期で結果を polling",[73,83,84],{},"プロダクションコードのようにエラーとリトライを処理",[73,86,87],{},"webhook で結果を受信（polling 不要）",[73,89,90],{},"進行中のタスクを必要に応じてキャンセル",[92,93,94],"h3",{"id":94},"前提条件",[96,97,98,108,118],"ul",{},[73,99,100,103,104,107],{},[23,101,102],{},"Python 3.8+","（",[28,105,106],{},"python3 --version"," で確認）",[73,109,110,113,114,117],{},[23,111,112],{},"requests"," ライブラリ（",[28,115,116],{},"pip install requests","）",[73,119,120,123],{},[23,121,122],{},"EvoLink API Key","（無料登録 — 次のセクションで取得方法を説明します）",[11,125,126],{},"GPU も Docker も複雑なセットアップも不要です。Python と API Key だけで OK。",[18,128,129,135],{},[11,130,131,134],{},[23,132,133],{},"ヒント："," プロダクションアプリを開発中なら、仮想環境で依存関係を分離することをお勧めします：",[136,137,142],"pre",{"className":138,"code":139,"language":140,"meta":141,"style":141},"language-bash shiki shiki-themes github-dark","python3 -m venv seedance-env\nsource seedance-env/bin/activate  # macOS/Linux\nseedance-env\\Scripts\\activate     # Windows\npip install requests flask\n","bash","",[28,143,144,164,176,185],{"__ignoreMap":141},[145,146,149,153,157,161],"span",{"class":147,"line":148},"line",1,[145,150,152],{"class":151},"svObZ","python3",[145,154,156],{"class":155},"sDLfK"," -m",[145,158,160],{"class":159},"sU2Wk"," venv",[145,162,163],{"class":159}," seedance-env\n",[145,165,167,169,172],{"class":147,"line":166},2,[145,168,62],{"class":155},[145,170,171],{"class":159}," seedance-env/bin/activate",[145,173,175],{"class":174},"sAwPA","  # macOS/Linux\n",[145,177,179,182],{"class":147,"line":178},3,[145,180,181],{"class":151},"seedance-env\\Scripts\\activate",[145,183,184],{"class":174},"     # Windows\n",[145,186,188,191,194,197],{"class":147,"line":187},4,[145,189,190],{"class":151},"pip",[145,192,193],{"class":159}," install",[145,195,196],{"class":159}," requests",[145,198,199],{"class":159}," flask\n",[45,201],{},[48,203,205],{"id":204},"api-key-を取得する","API Key を取得する",[11,207,208,209,214],{},"Seedance 2.0 は ",[37,210,213],{"href":211,"rel":212},"https://evolink.ai",[41],"EvoLink"," を通じて提供されています。EvoLink は 1 つの API Key で Seedance 2.0、Kling など複数の AI 動画モデルに統合アクセスできる API ゲートウェイです。",[11,216,217],{},"取得手順：",[70,219,220,227,233,239],{},[73,221,222,226],{},[37,223,225],{"href":39,"rel":224},[41],"evolink.ai/early-access"," でアカウントを作成",[73,228,229,232],{},[23,230,231],{},"Dashboard → API Keys"," に移動",[73,234,235,238],{},[23,236,237],{},"Create New Key"," をクリック",[73,240,241,242,245],{},"Key をコピー — ",[28,243,244],{},"sk-"," で始まります",[11,247,248],{},"Key は安全に保管してください。バージョン管理にコミットしないでください。環境変数を使います：",[136,250,252],{"className":138,"code":251,"language":140,"meta":141,"style":141},"export EVOLINK_API_KEY=\"sk-your-api-key-here\"\n",[28,253,254],{"__ignoreMap":141},[145,255,256,260,264,267],{"class":147,"line":148},[145,257,259],{"class":258},"snl16","export",[145,261,263],{"class":262},"s95oV"," EVOLINK_API_KEY",[145,265,266],{"class":258},"=",[145,268,269],{"class":159},"\"sk-your-api-key-here\"\n",[11,271,272,273,276,277,280,281,284,285,288],{},"このコマンドは現在のターミナルセッションで ",[28,274,275],{},"EVOLINK_API_KEY"," 環境変数を設定します。macOS/Linux では ",[28,278,279],{},"~/.bashrc"," や ",[28,282,283],{},"~/.zshrc"," に追加して永続化できます。Windows ではコマンドプロンプトで ",[28,286,287],{},"set EVOLINK_API_KEY=sk-your-api-key-here"," を使うか、システムのプロパティ → 環境変数で設定してください。",[11,290,291,292,297],{},"アカウントにはお試し用の初期クレジットが含まれています。現在の料金詳細は",[37,293,296],{"href":294,"rel":295},"https://seedance2api.app/docs/getting-started",[41],"スタートガイド","をご確認ください。",[18,299,300],{},[11,301,302,305],{},[23,303,304],{},"よくある間違い："," API Key をソースファイルにハードコードしないでください。GitHub にプッシュすると、自動化されたクローラーが数分以内に見つけます。必ず環境変数や AWS Secrets Manager、HashiCorp Vault などのシークレット管理サービスを使用してください。",[45,307],{},[48,309,311],{"id":310},"python-環境のセットアップ","Python 環境のセットアップ",[11,313,314],{},"必要なライブラリをインストールします：",[136,316,318],{"className":138,"code":317,"language":140,"meta":141,"style":141},"pip install requests\n",[28,319,320],{"__ignoreMap":141},[145,321,322,324,326],{"class":147,"line":148},[145,323,190],{"class":151},[145,325,193],{"class":159},[145,327,328],{"class":159}," requests\n",[11,330,331,334],{},[28,332,333],{},"seedance_tutorial.py"," というファイルを作成し、以下の基本コードを追加してください。このチュートリアルのすべての例はこのコードをベースにしています：",[136,336,340],{"className":337,"code":338,"language":339,"meta":141,"style":141},"language-python shiki shiki-themes github-dark","import requests\nimport time\nimport os\nimport json\n\n# ── 設定 ─────────────────────────────────────────────────────\nAPI_KEY = os.getenv(\"EVOLINK_API_KEY\", \"sk-your-api-key-here\")\nBASE_URL = \"https://api.evolink.ai/v1\"\nHEADERS = {\n    \"Authorization\": f\"Bearer {API_KEY}\",\n    \"Content-Type\": \"application/json\"\n}\n","python",[28,341,342,349,356,363,370,376,382,406,417,428,452,463],{"__ignoreMap":141},[145,343,344,347],{"class":147,"line":148},[145,345,346],{"class":258},"import",[145,348,328],{"class":262},[145,350,351,353],{"class":147,"line":166},[145,352,346],{"class":258},[145,354,355],{"class":262}," time\n",[145,357,358,360],{"class":147,"line":178},[145,359,346],{"class":258},[145,361,362],{"class":262}," os\n",[145,364,365,367],{"class":147,"line":187},[145,366,346],{"class":258},[145,368,369],{"class":262}," json\n",[145,371,373],{"class":147,"line":372},5,[145,374,375],{"emptyLinePlaceholder":58},"\n",[145,377,379],{"class":147,"line":378},6,[145,380,381],{"class":174},"# ── 設定 ─────────────────────────────────────────────────────\n",[145,383,385,388,391,394,397,400,403],{"class":147,"line":384},7,[145,386,387],{"class":155},"API_KEY",[145,389,390],{"class":258}," =",[145,392,393],{"class":262}," os.getenv(",[145,395,396],{"class":159},"\"EVOLINK_API_KEY\"",[145,398,399],{"class":262},", ",[145,401,402],{"class":159},"\"sk-your-api-key-here\"",[145,404,405],{"class":262},")\n",[145,407,409,412,414],{"class":147,"line":408},8,[145,410,411],{"class":155},"BASE_URL",[145,413,390],{"class":258},[145,415,416],{"class":159}," \"https://api.evolink.ai/v1\"\n",[145,418,420,423,425],{"class":147,"line":419},9,[145,421,422],{"class":155},"HEADERS",[145,424,390],{"class":258},[145,426,427],{"class":262}," {\n",[145,429,431,434,437,440,443,446,449],{"class":147,"line":430},10,[145,432,433],{"class":159},"    \"Authorization\"",[145,435,436],{"class":262},": ",[145,438,439],{"class":258},"f",[145,441,442],{"class":159},"\"Bearer ",[145,444,445],{"class":155},"{API_KEY}",[145,447,448],{"class":159},"\"",[145,450,451],{"class":262},",\n",[145,453,455,458,460],{"class":147,"line":454},11,[145,456,457],{"class":159},"    \"Content-Type\"",[145,459,436],{"class":262},[145,461,462],{"class":159},"\"application/json\"\n",[145,464,466],{"class":147,"line":465},12,[145,467,468],{"class":262},"}\n",[11,470,471],{},"1 行ずつ解説します：",[96,473,474,482,493],{},[73,475,476,481],{},[23,477,478],{},[28,479,480],{},"os.getenv(\"EVOLINK_API_KEY\", \"sk-your-api-key-here\")"," — 環境変数から API Key を読み取ります。第 2 引数はデフォルト値です（ローカルテスト時のみ実際の Key に置き換えてください）。",[73,483,484,488,489,492],{},[23,485,486],{},[28,487,411],{}," — すべての EvoLink API エンドポイントのルート URL です。すべてのリクエストは ",[28,490,491],{},"https://api.evolink.ai/v1/..."," に送信されます。",[73,494,495,499,500,503,504,507],{},[23,496,497],{},[28,498,422],{}," — すべてのリクエストに含まれる 2 つのヘッダー：",[28,501,502],{},"Authorization"," は Bearer Token 方式で API Key を送信し、",[28,505,506],{},"Content-Type"," はサーバーに JSON を送信していることを伝えます。",[11,509,510],{},"次に再利用可能なヘルパー関数を追加します：",[136,512,514],{"className":337,"code":513,"language":339,"meta":141,"style":141},"# ── 再利用可能な Polling ヘルパー ──────────────────────────────\ndef wait_for_video(task_id, poll_interval=10, timeout=600):\n    \"\"\"\n    動画生成タスクを完了または失敗するまで polling します。\n    \n    Args:\n        task_id: 生成エンドポイントが返したタスク ID。\n        poll_interval: polling 間隔（秒、デフォルト 10）。\n        timeout: 最大待機時間（秒、デフォルト 600）。\n    \n    Returns:\n        dict: 動画 URL を含む完了したタスクレスポンス。\n    \n    Raises:\n        TimeoutError: タスクがタイムアウト内に完了しなかった場合。\n        RuntimeError: タスクが失敗した場合。\n    \"\"\"\n    elapsed = 0\n    while elapsed \u003C timeout:\n        # GET リクエストでタスクの現在のステータスを確認\n        response = requests.get(\n            f\"{BASE_URL}/tasks/{task_id}\",\n            headers=HEADERS\n        )\n        # HTTP ステータスコードがエラーを示す場合、例外を発生\n        response.raise_for_status()\n        task = response.json()\n\n        # レスポンスからステータスと進捗を抽出\n        status = task[\"status\"]\n        progress = task.get(\"progress\", 0)\n        print(f\"  [{elapsed}s] Status: {status} | Progress: {progress}%\")\n\n        # 終了状態を確認\n        if status == \"completed\":\n            return task\n        elif status == \"failed\":\n            error_info = task.get(\"error\", {})\n            raise RuntimeError(\n                f\"Task {task_id} failed: {error_info.get('message', 'Unknown error')}\"\n            )\n\n        # 次の polling まで待機\n        time.sleep(poll_interval)\n        elapsed += poll_interval\n\n    raise TimeoutError(f\"Task {task_id} timed out after {timeout}s\")\n",[28,515,516,521,548,553,558,563,568,573,578,583,587,592,597,602,608,614,620,625,636,651,657,668,695,707,713,719,725,736,741,747,764,785,831,836,842,860,869,884,900,912,951,957,962,968,974,986,991],{"__ignoreMap":141},[145,517,518],{"class":147,"line":148},[145,519,520],{"class":174},"# ── 再利用可能な Polling ヘルパー ──────────────────────────────\n",[145,522,523,526,529,532,534,537,540,542,545],{"class":147,"line":166},[145,524,525],{"class":258},"def",[145,527,528],{"class":151}," wait_for_video",[145,530,531],{"class":262},"(task_id, poll_interval",[145,533,266],{"class":258},[145,535,536],{"class":155},"10",[145,538,539],{"class":262},", timeout",[145,541,266],{"class":258},[145,543,544],{"class":155},"600",[145,546,547],{"class":262},"):\n",[145,549,550],{"class":147,"line":178},[145,551,552],{"class":159},"    \"\"\"\n",[145,554,555],{"class":147,"line":187},[145,556,557],{"class":159},"    動画生成タスクを完了または失敗するまで polling します。\n",[145,559,560],{"class":147,"line":372},[145,561,562],{"class":159},"    \n",[145,564,565],{"class":147,"line":378},[145,566,567],{"class":159},"    Args:\n",[145,569,570],{"class":147,"line":384},[145,571,572],{"class":159},"        task_id: 生成エンドポイントが返したタスク ID。\n",[145,574,575],{"class":147,"line":408},[145,576,577],{"class":159},"        poll_interval: polling 間隔（秒、デフォルト 10）。\n",[145,579,580],{"class":147,"line":419},[145,581,582],{"class":159},"        timeout: 最大待機時間（秒、デフォルト 600）。\n",[145,584,585],{"class":147,"line":430},[145,586,562],{"class":159},[145,588,589],{"class":147,"line":454},[145,590,591],{"class":159},"    Returns:\n",[145,593,594],{"class":147,"line":465},[145,595,596],{"class":159},"        dict: 動画 URL を含む完了したタスクレスポンス。\n",[145,598,600],{"class":147,"line":599},13,[145,601,562],{"class":159},[145,603,605],{"class":147,"line":604},14,[145,606,607],{"class":159},"    Raises:\n",[145,609,611],{"class":147,"line":610},15,[145,612,613],{"class":159},"        TimeoutError: タスクがタイムアウト内に完了しなかった場合。\n",[145,615,617],{"class":147,"line":616},16,[145,618,619],{"class":159},"        RuntimeError: タスクが失敗した場合。\n",[145,621,623],{"class":147,"line":622},17,[145,624,552],{"class":159},[145,626,628,631,633],{"class":147,"line":627},18,[145,629,630],{"class":262},"    elapsed ",[145,632,266],{"class":258},[145,634,635],{"class":155}," 0\n",[145,637,639,642,645,648],{"class":147,"line":638},19,[145,640,641],{"class":258},"    while",[145,643,644],{"class":262}," elapsed ",[145,646,647],{"class":258},"\u003C",[145,649,650],{"class":262}," timeout:\n",[145,652,654],{"class":147,"line":653},20,[145,655,656],{"class":174},"        # GET リクエストでタスクの現在のステータスを確認\n",[145,658,660,663,665],{"class":147,"line":659},21,[145,661,662],{"class":262},"        response ",[145,664,266],{"class":258},[145,666,667],{"class":262}," requests.get(\n",[145,669,671,674,676,679,682,685,688,691,693],{"class":147,"line":670},22,[145,672,673],{"class":258},"            f",[145,675,448],{"class":159},[145,677,678],{"class":155},"{BASE_URL}",[145,680,681],{"class":159},"/tasks/",[145,683,684],{"class":155},"{",[145,686,687],{"class":262},"task_id",[145,689,690],{"class":155},"}",[145,692,448],{"class":159},[145,694,451],{"class":262},[145,696,698,702,704],{"class":147,"line":697},23,[145,699,701],{"class":700},"s9osk","            headers",[145,703,266],{"class":258},[145,705,706],{"class":155},"HEADERS\n",[145,708,710],{"class":147,"line":709},24,[145,711,712],{"class":262},"        )\n",[145,714,716],{"class":147,"line":715},25,[145,717,718],{"class":174},"        # HTTP ステータスコードがエラーを示す場合、例外を発生\n",[145,720,722],{"class":147,"line":721},26,[145,723,724],{"class":262},"        response.raise_for_status()\n",[145,726,728,731,733],{"class":147,"line":727},27,[145,729,730],{"class":262},"        task ",[145,732,266],{"class":258},[145,734,735],{"class":262}," response.json()\n",[145,737,739],{"class":147,"line":738},28,[145,740,375],{"emptyLinePlaceholder":58},[145,742,744],{"class":147,"line":743},29,[145,745,746],{"class":174},"        # レスポンスからステータスと進捗を抽出\n",[145,748,750,753,755,758,761],{"class":147,"line":749},30,[145,751,752],{"class":262},"        status ",[145,754,266],{"class":258},[145,756,757],{"class":262}," task[",[145,759,760],{"class":159},"\"status\"",[145,762,763],{"class":262},"]\n",[145,765,767,770,772,775,778,780,783],{"class":147,"line":766},31,[145,768,769],{"class":262},"        progress ",[145,771,266],{"class":258},[145,773,774],{"class":262}," task.get(",[145,776,777],{"class":159},"\"progress\"",[145,779,399],{"class":262},[145,781,782],{"class":155},"0",[145,784,405],{"class":262},[145,786,788,791,794,796,799,801,804,806,809,811,814,816,819,821,824,826,829],{"class":147,"line":787},32,[145,789,790],{"class":155},"        print",[145,792,793],{"class":262},"(",[145,795,439],{"class":258},[145,797,798],{"class":159},"\"  [",[145,800,684],{"class":155},[145,802,803],{"class":262},"elapsed",[145,805,690],{"class":155},[145,807,808],{"class":159},"s] Status: ",[145,810,684],{"class":155},[145,812,813],{"class":262},"status",[145,815,690],{"class":155},[145,817,818],{"class":159}," | Progress: ",[145,820,684],{"class":155},[145,822,823],{"class":262},"progress",[145,825,690],{"class":155},[145,827,828],{"class":159},"%\"",[145,830,405],{"class":262},[145,832,834],{"class":147,"line":833},33,[145,835,375],{"emptyLinePlaceholder":58},[145,837,839],{"class":147,"line":838},34,[145,840,841],{"class":174},"        # 終了状態を確認\n",[145,843,845,848,851,854,857],{"class":147,"line":844},35,[145,846,847],{"class":258},"        if",[145,849,850],{"class":262}," status ",[145,852,853],{"class":258},"==",[145,855,856],{"class":159}," \"completed\"",[145,858,859],{"class":262},":\n",[145,861,863,866],{"class":147,"line":862},36,[145,864,865],{"class":258},"            return",[145,867,868],{"class":262}," task\n",[145,870,872,875,877,879,882],{"class":147,"line":871},37,[145,873,874],{"class":258},"        elif",[145,876,850],{"class":262},[145,878,853],{"class":258},[145,880,881],{"class":159}," \"failed\"",[145,883,859],{"class":262},[145,885,887,890,892,894,897],{"class":147,"line":886},38,[145,888,889],{"class":262},"            error_info ",[145,891,266],{"class":258},[145,893,774],{"class":262},[145,895,896],{"class":159},"\"error\"",[145,898,899],{"class":262},", {})\n",[145,901,903,906,909],{"class":147,"line":902},39,[145,904,905],{"class":258},"            raise",[145,907,908],{"class":155}," RuntimeError",[145,910,911],{"class":262},"(\n",[145,913,915,918,921,923,925,927,930,932,935,938,940,943,946,948],{"class":147,"line":914},40,[145,916,917],{"class":258},"                f",[145,919,920],{"class":159},"\"Task ",[145,922,684],{"class":155},[145,924,687],{"class":262},[145,926,690],{"class":155},[145,928,929],{"class":159}," failed: ",[145,931,684],{"class":155},[145,933,934],{"class":262},"error_info.get(",[145,936,937],{"class":159},"'message'",[145,939,399],{"class":262},[145,941,942],{"class":159},"'Unknown error'",[145,944,945],{"class":262},")",[145,947,690],{"class":155},[145,949,950],{"class":159},"\"\n",[145,952,954],{"class":147,"line":953},41,[145,955,956],{"class":262},"            )\n",[145,958,960],{"class":147,"line":959},42,[145,961,375],{"emptyLinePlaceholder":58},[145,963,965],{"class":147,"line":964},43,[145,966,967],{"class":174},"        # 次の polling まで待機\n",[145,969,971],{"class":147,"line":970},44,[145,972,973],{"class":262},"        time.sleep(poll_interval)\n",[145,975,977,980,983],{"class":147,"line":976},45,[145,978,979],{"class":262},"        elapsed ",[145,981,982],{"class":258},"+=",[145,984,985],{"class":262}," poll_interval\n",[145,987,989],{"class":147,"line":988},46,[145,990,375],{"emptyLinePlaceholder":58},[145,992,994,997,1000,1002,1004,1006,1008,1010,1012,1015,1017,1020,1022,1025],{"class":147,"line":993},47,[145,995,996],{"class":258},"    raise",[145,998,999],{"class":155}," TimeoutError",[145,1001,793],{"class":262},[145,1003,439],{"class":258},[145,1005,920],{"class":159},[145,1007,684],{"class":155},[145,1009,687],{"class":262},[145,1011,690],{"class":155},[145,1013,1014],{"class":159}," timed out after ",[145,1016,684],{"class":155},[145,1018,1019],{"class":262},"timeout",[145,1021,690],{"class":155},[145,1023,1024],{"class":159},"s\"",[145,1026,405],{"class":262},[11,1028,1029],{},"この関数の主な設計判断：",[96,1031,1032,1040,1048,1056],{},[73,1033,1034,1039],{},[23,1035,1036],{},[28,1037,1038],{},"poll_interval=10"," — 10 秒が最適です。速すぎると API クォータを浪費し、遅すぎるとワークフローが遅延します。",[73,1041,1042,1047],{},[23,1043,1044],{},[28,1045,1046],{},"timeout=600"," — 10 分は十分な余裕があります。ほとんどの動画は 30〜120 秒で完了しますが、キュー混雑などのエッジケースをカバーします。",[73,1049,1050,1055],{},[23,1051,1052],{},[28,1053,1054],{},"response.raise_for_status()"," — HTTP エラー（4xx/5xx）を Python 例外に変換し、サイレントに通過するのを防ぎます。",[73,1057,1058,1061,1062,1065],{},[23,1059,1060],{},"進捗表示"," — ",[28,1063,1064],{},"[elapsed]s"," プレフィックスでタイミングを把握できます。遅い生成のデバッグに便利です。",[136,1067,1069],{"className":337,"code":1068,"language":339,"meta":141,"style":141},"# ── ヘルパー：動画ダウンロード ─────────────────────────────────\ndef download_video(url, filename=\"output.mp4\"):\n    \"\"\"URL から動画ファイルをダウンロードします。\"\"\"\n    print(f\"Downloading video to {filename}...\")\n    resp = requests.get(url, stream=True)\n    resp.raise_for_status()\n    with open(filename, \"wb\") as f:\n        for chunk in resp.iter_content(chunk_size=8192):\n            f.write(chunk)\n    print(f\"Saved: {filename} ({os.path.getsize(filename) / 1024:.0f} KB)\")\n",[28,1070,1071,1076,1093,1098,1122,1142,1147,1170,1194,1199],{"__ignoreMap":141},[145,1072,1073],{"class":147,"line":148},[145,1074,1075],{"class":174},"# ── ヘルパー：動画ダウンロード ─────────────────────────────────\n",[145,1077,1078,1080,1083,1086,1088,1091],{"class":147,"line":166},[145,1079,525],{"class":258},[145,1081,1082],{"class":151}," download_video",[145,1084,1085],{"class":262},"(url, filename",[145,1087,266],{"class":258},[145,1089,1090],{"class":159},"\"output.mp4\"",[145,1092,547],{"class":262},[145,1094,1095],{"class":147,"line":178},[145,1096,1097],{"class":159},"    \"\"\"URL から動画ファイルをダウンロードします。\"\"\"\n",[145,1099,1100,1103,1105,1107,1110,1112,1115,1117,1120],{"class":147,"line":187},[145,1101,1102],{"class":155},"    print",[145,1104,793],{"class":262},[145,1106,439],{"class":258},[145,1108,1109],{"class":159},"\"Downloading video to ",[145,1111,684],{"class":155},[145,1113,1114],{"class":262},"filename",[145,1116,690],{"class":155},[145,1118,1119],{"class":159},"...\"",[145,1121,405],{"class":262},[145,1123,1124,1127,1129,1132,1135,1137,1140],{"class":147,"line":372},[145,1125,1126],{"class":262},"    resp ",[145,1128,266],{"class":258},[145,1130,1131],{"class":262}," requests.get(url, ",[145,1133,1134],{"class":700},"stream",[145,1136,266],{"class":258},[145,1138,1139],{"class":155},"True",[145,1141,405],{"class":262},[145,1143,1144],{"class":147,"line":378},[145,1145,1146],{"class":262},"    resp.raise_for_status()\n",[145,1148,1149,1152,1155,1158,1161,1164,1167],{"class":147,"line":384},[145,1150,1151],{"class":258},"    with",[145,1153,1154],{"class":155}," open",[145,1156,1157],{"class":262},"(filename, ",[145,1159,1160],{"class":159},"\"wb\"",[145,1162,1163],{"class":262},") ",[145,1165,1166],{"class":258},"as",[145,1168,1169],{"class":262}," f:\n",[145,1171,1172,1175,1178,1181,1184,1187,1189,1192],{"class":147,"line":408},[145,1173,1174],{"class":258},"        for",[145,1176,1177],{"class":262}," chunk ",[145,1179,1180],{"class":258},"in",[145,1182,1183],{"class":262}," resp.iter_content(",[145,1185,1186],{"class":700},"chunk_size",[145,1188,266],{"class":258},[145,1190,1191],{"class":155},"8192",[145,1193,547],{"class":262},[145,1195,1196],{"class":147,"line":419},[145,1197,1198],{"class":262},"            f.write(chunk)\n",[145,1200,1201,1203,1205,1207,1210,1212,1214,1216,1219,1221,1224,1227,1230,1233,1235,1238],{"class":147,"line":430},[145,1202,1102],{"class":155},[145,1204,793],{"class":262},[145,1206,439],{"class":258},[145,1208,1209],{"class":159},"\"Saved: ",[145,1211,684],{"class":155},[145,1213,1114],{"class":262},[145,1215,690],{"class":155},[145,1217,1218],{"class":159}," (",[145,1220,684],{"class":155},[145,1222,1223],{"class":262},"os.path.getsize(filename) ",[145,1225,1226],{"class":258},"/",[145,1228,1229],{"class":155}," 1024",[145,1231,1232],{"class":258},":.0f",[145,1234,690],{"class":155},[145,1236,1237],{"class":159}," KB)\"",[145,1239,405],{"class":262},[11,1241,1242,1243,1246,1247,1249],{},"この関数は 8 KB 単位でストリーミングダウンロードし、動画全体をメモリに読み込みません。これは重要です — 生成された動画は 10〜50 MB になることがあります。",[28,1244,1245],{},"stream=True"," パラメータは ",[28,1248,112],{}," に段階的にダウンロードするよう指示します。",[11,1251,1252],{},"以上の 3 つ — 設定、polling、ダウンロード — が基盤です。以降のすべてのコード例でこれらを使用します。繰り返しません — 新しい payload だけを示します。",[11,1254,1255,1256,1261],{},"完全な API リファレンスは",[37,1257,1260],{"href":1258,"rel":1259},"https://seedance2api.app/docs/video-generation",[41],"動画生成ドキュメント","をご覧ください。",[45,1263],{},[48,1265,1267],{"id":1266},"最初の動画を生成するテキストから動画","最初の動画を生成する（テキストから動画）",[11,1269,1270],{},"動画を生成しましょう。スクリプトに以下のコードを追加してください：",[136,1272,1274],{"className":337,"code":1273,"language":339,"meta":141,"style":141},"# ── テキストから動画 ──────────────────────────────────────────\ndef text_to_video():\n    payload = {\n        \"model\": \"seedance-2.0\",          # 使用する AI モデル\n        \"prompt\": (\n            \"A golden retriever puppy chases a butterfly through \"\n            \"a sunlit meadow. The camera follows the puppy with a \"\n            \"smooth tracking shot as wildflowers sway in the breeze.\"\n        ),\n        \"duration\": 5,                     # 動画の長さ：4-15 秒\n        \"quality\": \"720p\",                 # 解像度：480p、720p、1080p\n        \"aspect_ratio\": \"16:9\",            # 標準ワイドスクリーン\n        \"generate_audio\": True             # AI がマッチするオーディオを生成\n    }\n\n    print(\"Submitting text-to-video request...\")\n    response = requests.post(\n        f\"{BASE_URL}/videos/generations\",  # 動画生成エンドポイント\n        headers=HEADERS,                   # 認証 + content-type ヘッダー\n        json=payload                       # 自動的に JSON にシリアライズ\n    )\n    response.raise_for_status()            # 200 以外なら例外を発生\n    task = response.json()                 # JSON レスポンスをパース\n\n    # レスポンスの主要情報を出力\n    print(f\"Task created: {task['id']}\")\n    print(f\"Estimated time: {task['task_info']['estimated_time']}s\")\n    print(f\"Credits reserved: {task['usage']['credits_reserved']}\")\n\n    # 動画が準備できるまで polling\n    result = wait_for_video(task[\"id\"])\n\n    # results 配列に 1 つ以上の動画 URL が含まれる\n    video_url = result[\"results\"][0]\n    print(f\"\\nVideo URL: {video_url}\")\n    download_video(video_url, \"my_first_video.mp4\")\n\n    return result\n\n\nif __name__ == \"__main__\":\n    text_to_video()\n",[28,1275,1276,1281,1291,1300,1316,1324,1329,1334,1339,1344,1360,1376,1392,1404,1409,1413,1424,1434,1452,1467,1480,1485,1493,1506,1510,1515,1543,1575,1606,1610,1615,1631,1635,1640,1659,1686,1696,1700,1708,1712,1716,1732],{"__ignoreMap":141},[145,1277,1278],{"class":147,"line":148},[145,1279,1280],{"class":174},"# ── テキストから動画 ──────────────────────────────────────────\n",[145,1282,1283,1285,1288],{"class":147,"line":166},[145,1284,525],{"class":258},[145,1286,1287],{"class":151}," text_to_video",[145,1289,1290],{"class":262},"():\n",[145,1292,1293,1296,1298],{"class":147,"line":178},[145,1294,1295],{"class":262},"    payload ",[145,1297,266],{"class":258},[145,1299,427],{"class":262},[145,1301,1302,1305,1307,1310,1313],{"class":147,"line":187},[145,1303,1304],{"class":159},"        \"model\"",[145,1306,436],{"class":262},[145,1308,1309],{"class":159},"\"seedance-2.0\"",[145,1311,1312],{"class":262},",          ",[145,1314,1315],{"class":174},"# 使用する AI モデル\n",[145,1317,1318,1321],{"class":147,"line":372},[145,1319,1320],{"class":159},"        \"prompt\"",[145,1322,1323],{"class":262},": (\n",[145,1325,1326],{"class":147,"line":378},[145,1327,1328],{"class":159},"            \"A golden retriever puppy chases a butterfly through \"\n",[145,1330,1331],{"class":147,"line":384},[145,1332,1333],{"class":159},"            \"a sunlit meadow. The camera follows the puppy with a \"\n",[145,1335,1336],{"class":147,"line":408},[145,1337,1338],{"class":159},"            \"smooth tracking shot as wildflowers sway in the breeze.\"\n",[145,1340,1341],{"class":147,"line":419},[145,1342,1343],{"class":262},"        ),\n",[145,1345,1346,1349,1351,1354,1357],{"class":147,"line":430},[145,1347,1348],{"class":159},"        \"duration\"",[145,1350,436],{"class":262},[145,1352,1353],{"class":155},"5",[145,1355,1356],{"class":262},",                     ",[145,1358,1359],{"class":174},"# 動画の長さ：4-15 秒\n",[145,1361,1362,1365,1367,1370,1373],{"class":147,"line":454},[145,1363,1364],{"class":159},"        \"quality\"",[145,1366,436],{"class":262},[145,1368,1369],{"class":159},"\"720p\"",[145,1371,1372],{"class":262},",                 ",[145,1374,1375],{"class":174},"# 解像度：480p、720p、1080p\n",[145,1377,1378,1381,1383,1386,1389],{"class":147,"line":465},[145,1379,1380],{"class":159},"        \"aspect_ratio\"",[145,1382,436],{"class":262},[145,1384,1385],{"class":159},"\"16:9\"",[145,1387,1388],{"class":262},",            ",[145,1390,1391],{"class":174},"# 標準ワイドスクリーン\n",[145,1393,1394,1397,1399,1401],{"class":147,"line":599},[145,1395,1396],{"class":159},"        \"generate_audio\"",[145,1398,436],{"class":262},[145,1400,1139],{"class":155},[145,1402,1403],{"class":174},"             # AI がマッチするオーディオを生成\n",[145,1405,1406],{"class":147,"line":604},[145,1407,1408],{"class":262},"    }\n",[145,1410,1411],{"class":147,"line":610},[145,1412,375],{"emptyLinePlaceholder":58},[145,1414,1415,1417,1419,1422],{"class":147,"line":616},[145,1416,1102],{"class":155},[145,1418,793],{"class":262},[145,1420,1421],{"class":159},"\"Submitting text-to-video request...\"",[145,1423,405],{"class":262},[145,1425,1426,1429,1431],{"class":147,"line":622},[145,1427,1428],{"class":262},"    response ",[145,1430,266],{"class":258},[145,1432,1433],{"class":262}," requests.post(\n",[145,1435,1436,1439,1441,1443,1446,1449],{"class":147,"line":627},[145,1437,1438],{"class":258},"        f",[145,1440,448],{"class":159},[145,1442,678],{"class":155},[145,1444,1445],{"class":159},"/videos/generations\"",[145,1447,1448],{"class":262},",  ",[145,1450,1451],{"class":174},"# 動画生成エンドポイント\n",[145,1453,1454,1457,1459,1461,1464],{"class":147,"line":638},[145,1455,1456],{"class":700},"        headers",[145,1458,266],{"class":258},[145,1460,422],{"class":155},[145,1462,1463],{"class":262},",                   ",[145,1465,1466],{"class":174},"# 認証 + content-type ヘッダー\n",[145,1468,1469,1472,1474,1477],{"class":147,"line":653},[145,1470,1471],{"class":700},"        json",[145,1473,266],{"class":258},[145,1475,1476],{"class":262},"payload                       ",[145,1478,1479],{"class":174},"# 自動的に JSON にシリアライズ\n",[145,1481,1482],{"class":147,"line":659},[145,1483,1484],{"class":262},"    )\n",[145,1486,1487,1490],{"class":147,"line":670},[145,1488,1489],{"class":262},"    response.raise_for_status()            ",[145,1491,1492],{"class":174},"# 200 以外なら例外を発生\n",[145,1494,1495,1498,1500,1503],{"class":147,"line":697},[145,1496,1497],{"class":262},"    task ",[145,1499,266],{"class":258},[145,1501,1502],{"class":262}," response.json()                 ",[145,1504,1505],{"class":174},"# JSON レスポンスをパース\n",[145,1507,1508],{"class":147,"line":709},[145,1509,375],{"emptyLinePlaceholder":58},[145,1511,1512],{"class":147,"line":715},[145,1513,1514],{"class":174},"    # レスポンスの主要情報を出力\n",[145,1516,1517,1519,1521,1523,1526,1528,1531,1534,1537,1539,1541],{"class":147,"line":721},[145,1518,1102],{"class":155},[145,1520,793],{"class":262},[145,1522,439],{"class":258},[145,1524,1525],{"class":159},"\"Task created: ",[145,1527,684],{"class":155},[145,1529,1530],{"class":262},"task[",[145,1532,1533],{"class":159},"'id'",[145,1535,1536],{"class":262},"]",[145,1538,690],{"class":155},[145,1540,448],{"class":159},[145,1542,405],{"class":262},[145,1544,1545,1547,1549,1551,1554,1556,1558,1561,1564,1567,1569,1571,1573],{"class":147,"line":727},[145,1546,1102],{"class":155},[145,1548,793],{"class":262},[145,1550,439],{"class":258},[145,1552,1553],{"class":159},"\"Estimated time: ",[145,1555,684],{"class":155},[145,1557,1530],{"class":262},[145,1559,1560],{"class":159},"'task_info'",[145,1562,1563],{"class":262},"][",[145,1565,1566],{"class":159},"'estimated_time'",[145,1568,1536],{"class":262},[145,1570,690],{"class":155},[145,1572,1024],{"class":159},[145,1574,405],{"class":262},[145,1576,1577,1579,1581,1583,1586,1588,1590,1593,1595,1598,1600,1602,1604],{"class":147,"line":738},[145,1578,1102],{"class":155},[145,1580,793],{"class":262},[145,1582,439],{"class":258},[145,1584,1585],{"class":159},"\"Credits reserved: ",[145,1587,684],{"class":155},[145,1589,1530],{"class":262},[145,1591,1592],{"class":159},"'usage'",[145,1594,1563],{"class":262},[145,1596,1597],{"class":159},"'credits_reserved'",[145,1599,1536],{"class":262},[145,1601,690],{"class":155},[145,1603,448],{"class":159},[145,1605,405],{"class":262},[145,1607,1608],{"class":147,"line":743},[145,1609,375],{"emptyLinePlaceholder":58},[145,1611,1612],{"class":147,"line":749},[145,1613,1614],{"class":174},"    # 動画が準備できるまで polling\n",[145,1616,1617,1620,1622,1625,1628],{"class":147,"line":766},[145,1618,1619],{"class":262},"    result ",[145,1621,266],{"class":258},[145,1623,1624],{"class":262}," wait_for_video(task[",[145,1626,1627],{"class":159},"\"id\"",[145,1629,1630],{"class":262},"])\n",[145,1632,1633],{"class":147,"line":787},[145,1634,375],{"emptyLinePlaceholder":58},[145,1636,1637],{"class":147,"line":833},[145,1638,1639],{"class":174},"    # results 配列に 1 つ以上の動画 URL が含まれる\n",[145,1641,1642,1645,1647,1650,1653,1655,1657],{"class":147,"line":838},[145,1643,1644],{"class":262},"    video_url ",[145,1646,266],{"class":258},[145,1648,1649],{"class":262}," result[",[145,1651,1652],{"class":159},"\"results\"",[145,1654,1563],{"class":262},[145,1656,782],{"class":155},[145,1658,763],{"class":262},[145,1660,1661,1663,1665,1667,1669,1672,1675,1677,1680,1682,1684],{"class":147,"line":844},[145,1662,1102],{"class":155},[145,1664,793],{"class":262},[145,1666,439],{"class":258},[145,1668,448],{"class":159},[145,1670,1671],{"class":155},"\\n",[145,1673,1674],{"class":159},"Video URL: ",[145,1676,684],{"class":155},[145,1678,1679],{"class":262},"video_url",[145,1681,690],{"class":155},[145,1683,448],{"class":159},[145,1685,405],{"class":262},[145,1687,1688,1691,1694],{"class":147,"line":862},[145,1689,1690],{"class":262},"    download_video(video_url, ",[145,1692,1693],{"class":159},"\"my_first_video.mp4\"",[145,1695,405],{"class":262},[145,1697,1698],{"class":147,"line":871},[145,1699,375],{"emptyLinePlaceholder":58},[145,1701,1702,1705],{"class":147,"line":886},[145,1703,1704],{"class":258},"    return",[145,1706,1707],{"class":262}," result\n",[145,1709,1710],{"class":147,"line":902},[145,1711,375],{"emptyLinePlaceholder":58},[145,1713,1714],{"class":147,"line":914},[145,1715,375],{"emptyLinePlaceholder":58},[145,1717,1718,1721,1724,1727,1730],{"class":147,"line":953},[145,1719,1720],{"class":258},"if",[145,1722,1723],{"class":155}," __name__",[145,1725,1726],{"class":258}," ==",[145,1728,1729],{"class":159}," \"__main__\"",[145,1731,859],{"class":262},[145,1733,1734],{"class":147,"line":959},[145,1735,1736],{"class":262},"    text_to_video()\n",[11,1738,1739],{},"payload の各パラメータを解説します：",[96,1741,1742,1757,1770,1778,1798,1818],{},[73,1743,1744,1749,1750,1753,1754,1756],{},[23,1745,1746],{},[28,1747,1748],{},"model"," — 使用する Seedance モデル。最新版は ",[28,1751,1752],{},"seedance-2.0"," に設定。お住まいの地域で 2.0 がまだ利用できない場合は ",[28,1755,30],{}," を使用してください。",[73,1758,1759,1764,1765,1769],{},[23,1760,1761],{},[28,1762,1763],{},"prompt"," — 動画の説明。主体、アクション、カメラの動き、雰囲気を具体的に記述してください。上記のプロンプトは 3 部構成：主体（\"golden retriever puppy\"）、アクション（\"chases a butterfly\"）、カメラ（\"smooth tracking shot\"）。高度なプロンプト技法は",[37,1766,1768],{"href":1767},"/blog/seedance-2-prompt-guide","プロンプトエンジニアリングガイド","を参照してください。",[73,1771,1772,1777],{},[23,1773,1774],{},[28,1775,1776],{},"duration"," — 動画の長さ（秒、4〜15）。短い動画ほど生成が速く、クレジット消費も少なくなります。テストには 5 秒がおすすめです。",[73,1779,1780,1785,1786,1789,1790,1793,1794,1797],{},[23,1781,1782],{},[28,1783,1784],{},"quality"," — 解像度ティア。",[28,1787,1788],{},"720p"," は開発段階での品質と速度の最適なバランスです。",[28,1791,1792],{},"480p"," は高速イテレーション向け、",[28,1795,1796],{},"1080p"," は最終レンダリング向け。",[73,1799,1800,1805,1806,1809,1810,1813,1814,1817],{},[23,1801,1802],{},[28,1803,1804],{},"aspect_ratio"," — 出力アスペクト比。",[28,1807,1808],{},"16:9"," は YouTube/横向き、",[28,1811,1812],{},"9:16"," は TikTok/Reels/Shorts、",[28,1815,1816],{},"1:1"," は Instagram フィード向け。",[73,1819,1820,1061,1825,1828],{},[23,1821,1822],{},[28,1823,1824],{},"generate_audio",[28,1826,1827],{},"true"," にすると、Seedance がビジュアルコンテンツにマッチする環境音と音楽を生成します。生成時間が約 2 秒追加されます。",[11,1830,1831],{},"実行：",[136,1833,1835],{"className":138,"code":1834,"language":140,"meta":141,"style":141},"python seedance_tutorial.py\n",[28,1836,1837],{"__ignoreMap":141},[145,1838,1839,1841],{"class":147,"line":148},[145,1840,339],{"class":151},[145,1842,1843],{"class":159}," seedance_tutorial.py\n",[92,1845,1847],{"id":1846},"api-のレスポンス内容","API のレスポンス内容",[11,1849,1850,1851,1854],{},"生成リクエストを送信すると、即座に ",[23,1852,1853],{},"task オブジェクト","が返されます — 動画はまだ準備できていません。実際のレスポンスは以下の通りです：",[136,1856,1860],{"className":1857,"code":1858,"language":1859,"meta":141,"style":141},"language-json shiki shiki-themes github-dark","{\n  \"created\": 1772203771,\n  \"id\": \"task-unified-1772203771-yf1dxogh\",\n  \"model\": \"seedance-2.0\",\n  \"object\": \"video.generation.task\",\n  \"progress\": 0,\n  \"status\": \"pending\",\n  \"task_info\": {\n    \"can_cancel\": true,\n    \"estimated_time\": 132\n  },\n  \"type\": \"video\",\n  \"usage\": {\n    \"billing_rule\": \"per_second\",\n    \"credits_reserved\": 17.784,\n    \"user_group\": \"default\"\n  }\n}\n","json",[28,1861,1862,1867,1879,1891,1902,1914,1925,1937,1945,1956,1966,1971,1983,1990,2002,2014,2024,2029],{"__ignoreMap":141},[145,1863,1864],{"class":147,"line":148},[145,1865,1866],{"class":262},"{\n",[145,1868,1869,1872,1874,1877],{"class":147,"line":166},[145,1870,1871],{"class":155},"  \"created\"",[145,1873,436],{"class":262},[145,1875,1876],{"class":155},"1772203771",[145,1878,451],{"class":262},[145,1880,1881,1884,1886,1889],{"class":147,"line":178},[145,1882,1883],{"class":155},"  \"id\"",[145,1885,436],{"class":262},[145,1887,1888],{"class":159},"\"task-unified-1772203771-yf1dxogh\"",[145,1890,451],{"class":262},[145,1892,1893,1896,1898,1900],{"class":147,"line":187},[145,1894,1895],{"class":155},"  \"model\"",[145,1897,436],{"class":262},[145,1899,1309],{"class":159},[145,1901,451],{"class":262},[145,1903,1904,1907,1909,1912],{"class":147,"line":372},[145,1905,1906],{"class":155},"  \"object\"",[145,1908,436],{"class":262},[145,1910,1911],{"class":159},"\"video.generation.task\"",[145,1913,451],{"class":262},[145,1915,1916,1919,1921,1923],{"class":147,"line":378},[145,1917,1918],{"class":155},"  \"progress\"",[145,1920,436],{"class":262},[145,1922,782],{"class":155},[145,1924,451],{"class":262},[145,1926,1927,1930,1932,1935],{"class":147,"line":384},[145,1928,1929],{"class":155},"  \"status\"",[145,1931,436],{"class":262},[145,1933,1934],{"class":159},"\"pending\"",[145,1936,451],{"class":262},[145,1938,1939,1942],{"class":147,"line":408},[145,1940,1941],{"class":155},"  \"task_info\"",[145,1943,1944],{"class":262},": {\n",[145,1946,1947,1950,1952,1954],{"class":147,"line":419},[145,1948,1949],{"class":155},"    \"can_cancel\"",[145,1951,436],{"class":262},[145,1953,1827],{"class":155},[145,1955,451],{"class":262},[145,1957,1958,1961,1963],{"class":147,"line":430},[145,1959,1960],{"class":155},"    \"estimated_time\"",[145,1962,436],{"class":262},[145,1964,1965],{"class":155},"132\n",[145,1967,1968],{"class":147,"line":454},[145,1969,1970],{"class":262},"  },\n",[145,1972,1973,1976,1978,1981],{"class":147,"line":465},[145,1974,1975],{"class":155},"  \"type\"",[145,1977,436],{"class":262},[145,1979,1980],{"class":159},"\"video\"",[145,1982,451],{"class":262},[145,1984,1985,1988],{"class":147,"line":599},[145,1986,1987],{"class":155},"  \"usage\"",[145,1989,1944],{"class":262},[145,1991,1992,1995,1997,2000],{"class":147,"line":604},[145,1993,1994],{"class":155},"    \"billing_rule\"",[145,1996,436],{"class":262},[145,1998,1999],{"class":159},"\"per_second\"",[145,2001,451],{"class":262},[145,2003,2004,2007,2009,2012],{"class":147,"line":610},[145,2005,2006],{"class":155},"    \"credits_reserved\"",[145,2008,436],{"class":262},[145,2010,2011],{"class":155},"17.784",[145,2013,451],{"class":262},[145,2015,2016,2019,2021],{"class":147,"line":616},[145,2017,2018],{"class":155},"    \"user_group\"",[145,2020,436],{"class":262},[145,2022,2023],{"class":159},"\"default\"\n",[145,2025,2026],{"class":147,"line":622},[145,2027,2028],{"class":262},"  }\n",[145,2030,2031],{"class":147,"line":627},[145,2032,468],{"class":262},[11,2034,2035],{},"主要フィールドの説明：",[2037,2038,2039,2052],"table",{},[2040,2041,2042],"thead",{},[2043,2044,2045,2049],"tr",{},[2046,2047,2048],"th",{},"フィールド",[2046,2050,2051],{},"意味",[2053,2054,2055,2066,2090,2102,2112,2122,2134,2144],"tbody",{},[2043,2056,2057,2063],{},[2058,2059,2060],"td",{},[28,2061,2062],{},"id",[2058,2064,2065],{},"タスク ID — ステータス確認と結果取得に使用",[2043,2067,2068,2072],{},[2058,2069,2070],{},[28,2071,813],{},[2058,2073,2074,2077,2078,2081,2082,2085,2086,2089],{},[28,2075,2076],{},"pending"," で開始、",[28,2079,2080],{},"processing"," を経て ",[28,2083,2084],{},"completed"," または ",[28,2087,2088],{},"failed"," に変化",[2043,2091,2092,2096],{},[2058,2093,2094],{},[28,2095,823],{},[2058,2097,2098,2099,2101],{},"0〜100 のパーセンテージ。",[28,2100,2080],{}," フェーズでリアルタイム更新",[2043,2103,2104,2109],{},[2058,2105,2106],{},[28,2107,2108],{},"estimated_time",[2058,2110,2111],{},"推定完了時間（秒）、サーバー側の見積もり",[2043,2113,2114,2119],{},[2058,2115,2116],{},[28,2117,2118],{},"credits_reserved",[2058,2120,2121],{},"このジョブに予約されたクレジット。タスク失敗時は自動返金",[2043,2123,2124,2129],{},[2058,2125,2126],{},[28,2127,2128],{},"task_info.can_cancel",[2058,2130,2131,2132,117],{},"タスクをキャンセルできるか（完了前は常に ",[28,2133,1827],{},[2043,2135,2136,2141],{},[2058,2137,2138],{},[28,2139,2140],{},"created",[2058,2142,2143],{},"タスク送信時の Unix タイムスタンプ",[2043,2145,2146,2151],{},[2058,2147,2148],{},[28,2149,2150],{},"usage.billing_rule",[2058,2152,2153,2154,2157],{},"課金方式 — ",[28,2155,2156],{},"per_second"," は動画の長さに応じた従量課金",[18,2159,2160],{},[11,2161,2162,2164,2165,2167,2168,2171],{},[23,2163,133],{}," 送信後すぐに ",[28,2166,2062],{}," をファイルやデータベースに保存してください。polling 中にスクリプトがクラッシュした場合、保存したタスク ID で ",[28,2169,2170],{},"wait_for_video()"," を呼び出して復旧できます。タスクはサーバーに 24 時間保持されます。",[92,2173,2175],{"id":2174},"polling-の流れ","Polling の流れ",[11,2177,2178,2180],{},[28,2179,2170],{}," 関数は 10 秒ごとに polling します。実際の出力は以下の通りです：",[136,2182,2187],{"className":2183,"code":2185,"language":2186},[2184],"language-text","Submitting text-to-video request...\nTask created: task-unified-1772203771-yf1dxogh\nEstimated time: 132s\nCredits reserved: 17.784\n  [0s] Status: pending | Progress: 0%\n  [10s] Status: processing | Progress: 7%\n  [20s] Status: processing | Progress: 13%\n  [30s] Status: processing | Progress: 20%\n  [40s] Status: processing | Progress: 27%\n  [50s] Status: completed | Progress: 100%\n\nVideo URL: https://files.evolink.ai/.../cgt-20260227224931-8vl7s.mp4\nDownloading video to my_first_video.mp4...\nSaved: my_first_video.mp4 (2847 KB)\n","text",[28,2188,2185],{"__ignoreMap":141},[11,2190,2191],{},"これだけです — API コールから動画ファイルの保存まで約 50 秒。",[18,2193,2194],{},[11,2195,2196,2199],{},[23,2197,2198],{},"重要："," 動画 URL は 24 時間後に期限切れになります。必ず速やかにファイルをダウンロードするか、自前のストレージ（S3、GCS、Cloudflare R2 など）に保存してください。",[18,2201,2202],{},[11,2203,2204,2206],{},[23,2205,304],{}," 動画 URL を長期保存に使わないでください。パイプラインは生成完了後すぐにダウンロードするように構築してください。非同期で動画を処理する場合は、webhook（後述）を使って準備完了の瞬間にダウンロードをトリガーしてください。",[11,2208,2209,2210,2213],{},"効果的なプロンプトの書き方は ",[37,2211,2212],{"href":1767},"Seedance 2.0 プロンプトガイド","を参照してください — ショットスクリプト形式、スタイルキーワード、タイミング構文を解説しています。",[45,2215],{},[48,2217,2219],{"id":2218},"結果の-polling非同期ワークフローを理解する","結果の Polling：非同期ワークフローを理解する",[11,2221,2222,2223,2226],{},"動画生成は長さと品質設定に応じて 30〜120 秒以上かかります。API は",[23,2224,2225],{},"非同期タスクパターン","を使用します — OpenAI、Stability AI など、ほとんどの生成 AI API と同じパターンです：",[70,2228,2229,2239,2249],{},[73,2230,2231,2234,2235,2238],{},[23,2232,2233],{},"送信"," → POST ",[28,2236,2237],{},"/v1/videos/generations"," → 即座にタスク ID を取得",[73,2240,2241,2244,2245,2248],{},[23,2242,2243],{},"Polling"," → GET ",[28,2246,2247],{},"/v1/tasks/{task_id}"," → 定期的にステータスを確認",[73,2250,2251,2254,2255,2258,2259,2262],{},[23,2252,2253],{},"取得"," → ",[28,2256,2257],{},"status: \"completed\""," のとき、",[28,2260,2261],{},"results"," 配列に動画 URL が含まれる",[11,2264,2265],{},"このパターンが存在する理由は、動画生成には膨大な計算リソースが必要だからです。同期 HTTP リクエストでは、動画の生成完了よりはるか前にタイムアウトしてしまいます。",[92,2267,2268],{"id":2268},"タスクステータスのライフサイクル",[136,2270,2273],{"className":2271,"code":2272,"language":2186},[2184],"pending → processing → completed\n                    ↘ failed\n",[28,2274,2272],{"__ignoreMap":141},[2037,2276,2277,2290],{},[2040,2278,2279],{},[2043,2280,2281,2284,2287],{},[2046,2282,2283],{},"ステータス",[2046,2285,2286],{},"何が起きているか",[2046,2288,2289],{},"一般的な所要時間",[2053,2291,2292,2304,2319,2334],{},[2043,2293,2294,2298,2301],{},[2058,2295,2296],{},[28,2297,2076],{},[2058,2299,2300],{},"タスクがキューで待機中、GPU リソース待ち",[2058,2302,2303],{},"0〜30 秒",[2043,2305,2306,2310,2316],{},[2058,2307,2308],{},[28,2309,2080],{},[2058,2311,2312,2313,2315],{},"動画を生成中 — ",[28,2314,823],{}," がリアルタイム更新",[2058,2317,2318],{},"30〜120 秒",[2043,2320,2321,2325,2331],{},[2058,2322,2323],{},[28,2324,2084],{},[2058,2326,2327,2328,2330],{},"完了！",[28,2329,2261],{}," 配列に動画 URL あり",[2058,2332,2333],{},"終了状態",[2043,2335,2336,2340,2343],{},[2058,2337,2338],{},[28,2339,2088],{},[2058,2341,2342],{},"エラー発生 — エラー詳細を確認",[2058,2344,2333],{},[92,2346,2348],{"id":2347},"polling-のベストプラクティス","Polling のベストプラクティス",[11,2350,2351,2354],{},[23,2352,2353],{},"Polling 間隔："," 10 秒が適切なデフォルトです。速すぎるとリクエストを浪費してレート制限をトリガーする可能性があり、遅すぎるとパイプラインが遅延します。リアルタイム性が求められるアプリケーションでは 5 秒ごとに polling できますが、それ以上速くする必要はありません。",[11,2356,2357,2360],{},[23,2358,2359],{},"タイムアウト："," パラメータに応じて合理的な上限を設定してください：",[2037,2362,2363,2376],{},[2040,2364,2365],{},[2043,2366,2367,2370,2373],{},[2046,2368,2369],{},"設定",[2046,2371,2372],{},"予想所要時間",[2046,2374,2375],{},"推奨タイムアウト",[2053,2377,2378,2389,2400,2411],{},[2043,2379,2380,2383,2386],{},[2058,2381,2382],{},"4s, 480p",[2058,2384,2385],{},"20〜40 秒",[2058,2387,2388],{},"120 秒",[2043,2390,2391,2394,2397],{},[2058,2392,2393],{},"5s, 720p",[2058,2395,2396],{},"30〜60 秒",[2058,2398,2399],{},"180 秒",[2043,2401,2402,2405,2408],{},[2058,2403,2404],{},"10s, 720p",[2058,2406,2407],{},"60〜90 秒",[2058,2409,2410],{},"300 秒",[2043,2412,2413,2416,2419],{},[2058,2414,2415],{},"15s, 1080p",[2058,2417,2418],{},"90〜180 秒",[2058,2420,2421],{},"600 秒",[11,2423,2424,2427,2428,2430,2431,2433],{},[23,2425,2426],{},"進捗トラッキング："," ",[28,2429,823],{}," フィールド（0〜100）は細かいフィードバックを提供します — UI でプログレスバーを構築するのに便利です。",[28,2432,2080],{}," フェーズ中、約 5〜7 秒ごとに更新されます。",[92,2435,2436],{"id":2436},"タスクのキャンセル",[11,2438,2439],{},"進行中の生成を停止する必要がある場合（プロンプトを間違えた、気が変わった）、キャンセルできます：",[136,2441,2443],{"className":337,"code":2442,"language":339,"meta":141,"style":141},"def cancel_task(task_id):\n    \"\"\"pending または processing 状態のタスクをキャンセルします。クレジットは返金されます。\"\"\"\n    response = requests.post(\n        f\"{BASE_URL}/tasks/{task_id}/cancel\",\n        headers=HEADERS\n    )\n    if response.status_code == 200:\n        print(f\"Task {task_id} cancelled. Credits refunded.\")\n    else:\n        print(f\"Cancel failed: {response.json()}\")\n",[28,2444,2445,2455,2460,2468,2489,2497,2501,2516,2537,2544],{"__ignoreMap":141},[145,2446,2447,2449,2452],{"class":147,"line":148},[145,2448,525],{"class":258},[145,2450,2451],{"class":151}," cancel_task",[145,2453,2454],{"class":262},"(task_id):\n",[145,2456,2457],{"class":147,"line":166},[145,2458,2459],{"class":159},"    \"\"\"pending または processing 状態のタスクをキャンセルします。クレジットは返金されます。\"\"\"\n",[145,2461,2462,2464,2466],{"class":147,"line":178},[145,2463,1428],{"class":262},[145,2465,266],{"class":258},[145,2467,1433],{"class":262},[145,2469,2470,2472,2474,2476,2478,2480,2482,2484,2487],{"class":147,"line":187},[145,2471,1438],{"class":258},[145,2473,448],{"class":159},[145,2475,678],{"class":155},[145,2477,681],{"class":159},[145,2479,684],{"class":155},[145,2481,687],{"class":262},[145,2483,690],{"class":155},[145,2485,2486],{"class":159},"/cancel\"",[145,2488,451],{"class":262},[145,2490,2491,2493,2495],{"class":147,"line":372},[145,2492,1456],{"class":700},[145,2494,266],{"class":258},[145,2496,706],{"class":155},[145,2498,2499],{"class":147,"line":378},[145,2500,1484],{"class":262},[145,2502,2503,2506,2509,2511,2514],{"class":147,"line":384},[145,2504,2505],{"class":258},"    if",[145,2507,2508],{"class":262}," response.status_code ",[145,2510,853],{"class":258},[145,2512,2513],{"class":155}," 200",[145,2515,859],{"class":262},[145,2517,2518,2520,2522,2524,2526,2528,2530,2532,2535],{"class":147,"line":408},[145,2519,790],{"class":155},[145,2521,793],{"class":262},[145,2523,439],{"class":258},[145,2525,920],{"class":159},[145,2527,684],{"class":155},[145,2529,687],{"class":262},[145,2531,690],{"class":155},[145,2533,2534],{"class":159}," cancelled. Credits refunded.\"",[145,2536,405],{"class":262},[145,2538,2539,2542],{"class":147,"line":419},[145,2540,2541],{"class":258},"    else",[145,2543,859],{"class":262},[145,2545,2546,2548,2550,2552,2555,2557,2560,2562,2564],{"class":147,"line":430},[145,2547,790],{"class":155},[145,2549,793],{"class":262},[145,2551,439],{"class":258},[145,2553,2554],{"class":159},"\"Cancel failed: ",[145,2556,684],{"class":155},[145,2558,2559],{"class":262},"response.json()",[145,2561,690],{"class":155},[145,2563,448],{"class":159},[145,2565,405],{"class":262},[11,2567,2568,2569,2571,2572,2574,2575,2085,2577,2579],{},"キャンセルは ",[28,2570,2128],{}," が ",[28,2573,1827],{}," のときに有効です。タスクが ",[28,2576,2084],{},[28,2578,2088],{}," に達した後はキャンセルできません。キャンセル時に予約されたクレジットは自動的に返金されます。",[18,2581,2582],{},[11,2583,2584,2586],{},[23,2585,133],{}," UI にキャンセル機能を早めに組み込んでください。ユーザーは必ず間違ったプロンプトを送信します。不要な動画を 2 分待つのは時間とクレジットの無駄です。",[11,2588,2589,2590,2592,2593,2597],{},"前述の ",[28,2591,2170],{}," 関数が標準的な polling フローを処理します。polling を完全にスキップしたい場合は、下の ",[37,2594,2596],{"href":2595},"#webhook-%E3%81%AE%E8%A8%AD%E5%AE%9Apolling-%E3%82%92%E3%82%B9%E3%82%AD%E3%83%83%E3%83%97","Webhook セクション","に進んでください。",[45,2599],{},[48,2601,2603],{"id":2602},"画像をアニメーション化する画像から動画","画像をアニメーション化する（画像から動画）",[11,2605,2606,2607,2610,2611,2615],{},"商品写真やキャラクターイラスト、風景写真に動きをつけたいですか？",[28,2608,2609],{},"image_url"," として渡せば、Seedance がアニメーション化します。",[37,2612,2614],{"href":2613},"/blog/seedance-2-ecommerce-product-videos","EC 商品動画","で最も強力な機能の 1 つです — 静的な商品写真を魅力的な動画広告に変換します。",[11,2617,2618],{},[2619,2620,2621],"em",{},"上記の最初の例と同じセットアップと polling 関数を使用します。",[136,2623,2625],{"className":337,"code":2624,"language":339,"meta":141,"style":141},"# ── 画像から動画 ──────────────────────────────────────────────\ndef image_to_video():\n    payload = {\n        \"model\": \"seedance-2.0\",\n        \"prompt\": (\n            \"@Image1 as the first frame. The scene slowly comes \"\n            \"to life — leaves rustle gently, soft light shifts \"\n            \"across the frame, and the subject blinks naturally.\"\n        ),\n        \"image_urls\": [\n            \"https://example.com/your-image.jpg\"\n        ],\n        \"duration\": 5,\n        \"quality\": \"720p\",\n        \"aspect_ratio\": \"16:9\"\n    }\n\n    print(\"Submitting image-to-video request...\")\n    response = requests.post(\n        f\"{BASE_URL}/videos/generations\",\n        headers=HEADERS,\n        json=payload\n    )\n    response.raise_for_status()\n    task = response.json()\n\n    print(f\"Task created: {task['id']}\")\n    result = wait_for_video(task[\"id\"])\n\n    video_url = result[\"results\"][0]\n    download_video(video_url, \"animated_image.mp4\")\n\n    return result\n",[28,2626,2627,2632,2641,2649,2659,2665,2670,2675,2680,2684,2692,2697,2702,2712,2722,2731,2735,2739,2750,2758,2770,2780,2789,2793,2798,2806,2810,2834,2846,2850,2866,2875,2879],{"__ignoreMap":141},[145,2628,2629],{"class":147,"line":148},[145,2630,2631],{"class":174},"# ── 画像から動画 ──────────────────────────────────────────────\n",[145,2633,2634,2636,2639],{"class":147,"line":166},[145,2635,525],{"class":258},[145,2637,2638],{"class":151}," image_to_video",[145,2640,1290],{"class":262},[145,2642,2643,2645,2647],{"class":147,"line":178},[145,2644,1295],{"class":262},[145,2646,266],{"class":258},[145,2648,427],{"class":262},[145,2650,2651,2653,2655,2657],{"class":147,"line":187},[145,2652,1304],{"class":159},[145,2654,436],{"class":262},[145,2656,1309],{"class":159},[145,2658,451],{"class":262},[145,2660,2661,2663],{"class":147,"line":372},[145,2662,1320],{"class":159},[145,2664,1323],{"class":262},[145,2666,2667],{"class":147,"line":378},[145,2668,2669],{"class":159},"            \"@Image1 as the first frame. The scene slowly comes \"\n",[145,2671,2672],{"class":147,"line":384},[145,2673,2674],{"class":159},"            \"to life — leaves rustle gently, soft light shifts \"\n",[145,2676,2677],{"class":147,"line":408},[145,2678,2679],{"class":159},"            \"across the frame, and the subject blinks naturally.\"\n",[145,2681,2682],{"class":147,"line":419},[145,2683,1343],{"class":262},[145,2685,2686,2689],{"class":147,"line":430},[145,2687,2688],{"class":159},"        \"image_urls\"",[145,2690,2691],{"class":262},": [\n",[145,2693,2694],{"class":147,"line":454},[145,2695,2696],{"class":159},"            \"https://example.com/your-image.jpg\"\n",[145,2698,2699],{"class":147,"line":465},[145,2700,2701],{"class":262},"        ],\n",[145,2703,2704,2706,2708,2710],{"class":147,"line":599},[145,2705,1348],{"class":159},[145,2707,436],{"class":262},[145,2709,1353],{"class":155},[145,2711,451],{"class":262},[145,2713,2714,2716,2718,2720],{"class":147,"line":604},[145,2715,1364],{"class":159},[145,2717,436],{"class":262},[145,2719,1369],{"class":159},[145,2721,451],{"class":262},[145,2723,2724,2726,2728],{"class":147,"line":610},[145,2725,1380],{"class":159},[145,2727,436],{"class":262},[145,2729,2730],{"class":159},"\"16:9\"\n",[145,2732,2733],{"class":147,"line":616},[145,2734,1408],{"class":262},[145,2736,2737],{"class":147,"line":622},[145,2738,375],{"emptyLinePlaceholder":58},[145,2740,2741,2743,2745,2748],{"class":147,"line":627},[145,2742,1102],{"class":155},[145,2744,793],{"class":262},[145,2746,2747],{"class":159},"\"Submitting image-to-video request...\"",[145,2749,405],{"class":262},[145,2751,2752,2754,2756],{"class":147,"line":638},[145,2753,1428],{"class":262},[145,2755,266],{"class":258},[145,2757,1433],{"class":262},[145,2759,2760,2762,2764,2766,2768],{"class":147,"line":653},[145,2761,1438],{"class":258},[145,2763,448],{"class":159},[145,2765,678],{"class":155},[145,2767,1445],{"class":159},[145,2769,451],{"class":262},[145,2771,2772,2774,2776,2778],{"class":147,"line":659},[145,2773,1456],{"class":700},[145,2775,266],{"class":258},[145,2777,422],{"class":155},[145,2779,451],{"class":262},[145,2781,2782,2784,2786],{"class":147,"line":670},[145,2783,1471],{"class":700},[145,2785,266],{"class":258},[145,2787,2788],{"class":262},"payload\n",[145,2790,2791],{"class":147,"line":697},[145,2792,1484],{"class":262},[145,2794,2795],{"class":147,"line":709},[145,2796,2797],{"class":262},"    response.raise_for_status()\n",[145,2799,2800,2802,2804],{"class":147,"line":715},[145,2801,1497],{"class":262},[145,2803,266],{"class":258},[145,2805,735],{"class":262},[145,2807,2808],{"class":147,"line":721},[145,2809,375],{"emptyLinePlaceholder":58},[145,2811,2812,2814,2816,2818,2820,2822,2824,2826,2828,2830,2832],{"class":147,"line":727},[145,2813,1102],{"class":155},[145,2815,793],{"class":262},[145,2817,439],{"class":258},[145,2819,1525],{"class":159},[145,2821,684],{"class":155},[145,2823,1530],{"class":262},[145,2825,1533],{"class":159},[145,2827,1536],{"class":262},[145,2829,690],{"class":155},[145,2831,448],{"class":159},[145,2833,405],{"class":262},[145,2835,2836,2838,2840,2842,2844],{"class":147,"line":738},[145,2837,1619],{"class":262},[145,2839,266],{"class":258},[145,2841,1624],{"class":262},[145,2843,1627],{"class":159},[145,2845,1630],{"class":262},[145,2847,2848],{"class":147,"line":743},[145,2849,375],{"emptyLinePlaceholder":58},[145,2851,2852,2854,2856,2858,2860,2862,2864],{"class":147,"line":749},[145,2853,1644],{"class":262},[145,2855,266],{"class":258},[145,2857,1649],{"class":262},[145,2859,1652],{"class":159},[145,2861,1563],{"class":262},[145,2863,782],{"class":155},[145,2865,763],{"class":262},[145,2867,2868,2870,2873],{"class":147,"line":766},[145,2869,1690],{"class":262},[145,2871,2872],{"class":159},"\"animated_image.mp4\"",[145,2874,405],{"class":262},[145,2876,2877],{"class":147,"line":787},[145,2878,375],{"emptyLinePlaceholder":58},[145,2880,2881,2883],{"class":147,"line":833},[145,2882,1704],{"class":258},[145,2884,1707],{"class":262},[11,2886,2887],{},"テキストから動画との違いを見てみましょう：",[96,2889,2890,2902,2924],{},[73,2891,2892,2897,2898,2901],{},[23,2893,2894],{},[28,2895,2896],{},"image_urls"," — 公開アクセス可能な画像 URL の配列です。API が直接取得するため、インターネットからアクセスできる必要があります（",[28,2899,2900],{},"localhost"," やプライベートネットワーク URL は不可）。",[73,2903,2904,2910,2911,2913,2914,2916,2917,2916,2920,2923],{},[23,2905,2906,2907],{},"プロンプト内の ",[28,2908,2909],{},"@Image1"," — このタグは Seedance にどの画像をどう参照するかを伝えます。",[28,2912,2896],{}," の最初の URL に対応します。3 枚の画像を渡す場合は ",[28,2915,2909],{},"、",[28,2918,2919],{},"@Image2",[28,2921,2922],{},"@Image3"," を使います。",[73,2925,2926,2931,2932,2934,2935,2938],{},[23,2927,2928,2930],{},[28,2929,1824],{}," なし"," — ここでは省略しており、デフォルトは ",[28,2933,1827],{}," です。無音アニメーションにするには ",[28,2936,2937],{},"false"," に設定してください。",[92,2940,2942],{"id":2941},"image-タグの仕組み","@Image タグの仕組み",[11,2944,2906,2945,2947,2948,2950,2951,2953,2954,2957,2958,280,2961,2964,2965,1769],{},[28,2946,2909],{}," タグは、Seedance に画像の使い方を伝えます。",[28,2949,2896],{}," 配列の最初の URL を参照します。最大 9 枚の画像を渡せます（",[28,2952,2909],{}," から ",[28,2955,2956],{},"@Image9"," まで）。",[28,2959,2960],{},"@Video",[28,2962,2963],{},"@Audio"," を含むマルチモーダルタグの完全ガイドは",[37,2966,2968],{"href":2967},"/blog/seedance-2-multimodal-tags-guide","マルチモーダル @Tags ガイド",[11,2970,2971],{},"よく使うパターン：",[2037,2973,2974,2987],{},[2040,2975,2976],{},[2043,2977,2978,2981,2984],{},[2046,2979,2980],{},"プロンプトパターン",[2046,2982,2983],{},"効果",[2046,2985,2986],{},"適した用途",[2053,2988,2989,3002,3015,3028,3041],{},[2043,2990,2991,2996,2999],{},[2058,2992,2993],{},[28,2994,2995],{},"@Image1 as first frame",[2058,2997,2998],{},"画像を開始フレームとして使用",[2058,3000,3001],{},"商品ショーケース、シーン設定",[2043,3003,3004,3009,3012],{},[2058,3005,3006],{},[28,3007,3008],{},"@Image1 as last frame",[2058,3010,3011],{},"画像を最終フレームとして使用",[2058,3013,3014],{},"ロゴ公開、トランジション",[2043,3016,3017,3022,3025],{},[2058,3018,3019],{},[28,3020,3021],{},"@Image1 as character reference",[2058,3023,3024],{},"キャラクターの外見を維持",[2058,3026,3027],{},"クリップ間のキャラクター一貫性",[2043,3029,3030,3035,3038],{},[2058,3031,3032],{},[28,3033,3034],{},"@Image1 as style reference",[2058,3036,3037],{},"画像のビジュアルスタイルを適用",[2058,3039,3040],{},"ブランド一貫性、アートディレクション",[2043,3042,3043,3048,3051],{},[2058,3044,3045],{},[28,3046,3047],{},"@Image1 as first frame, @Image2 as last frame",[2058,3049,3050],{},"2 枚の画像間のトランジションを作成",[2058,3052,3053],{},"ビフォーアフター、変形",[11,3055,3056],{},"テストで得た実際のレスポンス：",[136,3058,3060],{"className":1857,"code":3059,"language":1859,"meta":141,"style":141},"{\n  \"created\": 1772204037,\n  \"id\": \"task-unified-1772204036-lify8u5p\",\n  \"model\": \"seedance-2.0\",\n  \"object\": \"video.generation.task\",\n  \"progress\": 0,\n  \"status\": \"pending\",\n  \"task_info\": {\n    \"can_cancel\": true,\n    \"estimated_time\": 145\n  },\n  \"type\": \"video\",\n  \"usage\": {\n    \"billing_rule\": \"per_second\",\n    \"credits_reserved\": 17.784,\n    \"user_group\": \"default\"\n  }\n}\n",[28,3061,3062,3066,3077,3088,3098,3108,3118,3128,3134,3144,3153,3157,3167,3173,3183,3193,3201,3205],{"__ignoreMap":141},[145,3063,3064],{"class":147,"line":148},[145,3065,1866],{"class":262},[145,3067,3068,3070,3072,3075],{"class":147,"line":166},[145,3069,1871],{"class":155},[145,3071,436],{"class":262},[145,3073,3074],{"class":155},"1772204037",[145,3076,451],{"class":262},[145,3078,3079,3081,3083,3086],{"class":147,"line":178},[145,3080,1883],{"class":155},[145,3082,436],{"class":262},[145,3084,3085],{"class":159},"\"task-unified-1772204036-lify8u5p\"",[145,3087,451],{"class":262},[145,3089,3090,3092,3094,3096],{"class":147,"line":187},[145,3091,1895],{"class":155},[145,3093,436],{"class":262},[145,3095,1309],{"class":159},[145,3097,451],{"class":262},[145,3099,3100,3102,3104,3106],{"class":147,"line":372},[145,3101,1906],{"class":155},[145,3103,436],{"class":262},[145,3105,1911],{"class":159},[145,3107,451],{"class":262},[145,3109,3110,3112,3114,3116],{"class":147,"line":378},[145,3111,1918],{"class":155},[145,3113,436],{"class":262},[145,3115,782],{"class":155},[145,3117,451],{"class":262},[145,3119,3120,3122,3124,3126],{"class":147,"line":384},[145,3121,1929],{"class":155},[145,3123,436],{"class":262},[145,3125,1934],{"class":159},[145,3127,451],{"class":262},[145,3129,3130,3132],{"class":147,"line":408},[145,3131,1941],{"class":155},[145,3133,1944],{"class":262},[145,3135,3136,3138,3140,3142],{"class":147,"line":419},[145,3137,1949],{"class":155},[145,3139,436],{"class":262},[145,3141,1827],{"class":155},[145,3143,451],{"class":262},[145,3145,3146,3148,3150],{"class":147,"line":430},[145,3147,1960],{"class":155},[145,3149,436],{"class":262},[145,3151,3152],{"class":155},"145\n",[145,3154,3155],{"class":147,"line":454},[145,3156,1970],{"class":262},[145,3158,3159,3161,3163,3165],{"class":147,"line":465},[145,3160,1975],{"class":155},[145,3162,436],{"class":262},[145,3164,1980],{"class":159},[145,3166,451],{"class":262},[145,3168,3169,3171],{"class":147,"line":599},[145,3170,1987],{"class":155},[145,3172,1944],{"class":262},[145,3174,3175,3177,3179,3181],{"class":147,"line":604},[145,3176,1994],{"class":155},[145,3178,436],{"class":262},[145,3180,1999],{"class":159},[145,3182,451],{"class":262},[145,3184,3185,3187,3189,3191],{"class":147,"line":610},[145,3186,2006],{"class":155},[145,3188,436],{"class":262},[145,3190,2011],{"class":155},[145,3192,451],{"class":262},[145,3194,3195,3197,3199],{"class":147,"line":616},[145,3196,2018],{"class":155},[145,3198,436],{"class":262},[145,3200,2023],{"class":159},[145,3202,3203],{"class":147,"line":622},[145,3204,2028],{"class":262},[145,3206,3207],{"class":147,"line":627},[145,3208,468],{"class":262},[11,3210,3211,3212,3214],{},"画像から動画はテキストから動画とまったく同じ非同期パターンに従います — 送信、polling、ダウンロード。モデルが入力画像を分析する必要があるため、",[28,3213,2108],{}," はやや長くなります。",[92,3216,3217],{"id":3217},"画像の要件",[2037,3219,3220,3230],{},[2040,3221,3222],{},[2043,3223,3224,3227],{},[2046,3225,3226],{},"制約",[2046,3228,3229],{},"値",[2053,3231,3232,3240,3248,3256,3264],{},[2043,3233,3234,3237],{},[2058,3235,3236],{},"最大画像数",[2058,3238,3239],{},"リクエストあたり 9 枚",[2043,3241,3242,3245],{},[2058,3243,3244],{},"最大ファイルサイズ",[2058,3246,3247],{},"画像あたり 30 MB",[2043,3249,3250,3253],{},[2058,3251,3252],{},"対応フォーマット",[2058,3254,3255],{},"JPEG、PNG、WebP、BMP、TIFF、GIF",[2043,3257,3258,3261],{},[2058,3259,3260],{},"URL 要件",[2058,3262,3263],{},"公開アクセス可能であること",[2043,3265,3266,3269],{},[2058,3267,3268],{},"推奨解像度",[2058,3270,3271],{},"短辺 720px 以上",[18,3273,3274],{},[11,3275,3276,3278,3279,3281],{},[23,3277,304],{}," URL ではなくローカルファイルパスを渡すこと。",[28,3280,2896],{}," フィールドには公開アクセス可能な HTTP/HTTPS URL が必要です。画像がローカルにある場合は、まず S3、Cloudflare R2、または一時ファイルホスティングサービスにアップロードしてください。",[18,3283,3284],{},[11,3285,3286,3289],{},[23,3287,3288],{},"制限事項："," Seedance はリアルな人物の顔画像のアップロードをサポートしていません。システムが自動的に拒否します。イラストやスタイライズされたキャラクターを使用してください。",[92,3291,3293],{"id":3292},"api-用の画像ホスティング","API 用の画像ホスティング",[11,3295,3296],{},"CDN がない場合、公開 URL を素早く取得する方法：",[136,3298,3300],{"className":337,"code":3299,"language":339,"meta":141,"style":141},"# 方法 1：S3 にアップロード（AWS がある場合）\nimport boto3\ns3 = boto3.client('s3')\ns3.upload_file('local_image.jpg', 'my-bucket', 'seedance/input.jpg')\nimage_url = f\"https://my-bucket.s3.amazonaws.com/seedance/input.jpg\"\n\n# 方法 2：一時ファイルホスティング API を使用\n# 多くのサービスがテスト用の無料一時ホスティングを提供しています\n",[28,3301,3302,3307,3314,3329,3349,3362,3366,3371],{"__ignoreMap":141},[145,3303,3304],{"class":147,"line":148},[145,3305,3306],{"class":174},"# 方法 1：S3 にアップロード（AWS がある場合）\n",[145,3308,3309,3311],{"class":147,"line":166},[145,3310,346],{"class":258},[145,3312,3313],{"class":262}," boto3\n",[145,3315,3316,3319,3321,3324,3327],{"class":147,"line":178},[145,3317,3318],{"class":262},"s3 ",[145,3320,266],{"class":258},[145,3322,3323],{"class":262}," boto3.client(",[145,3325,3326],{"class":159},"'s3'",[145,3328,405],{"class":262},[145,3330,3331,3334,3337,3339,3342,3344,3347],{"class":147,"line":187},[145,3332,3333],{"class":262},"s3.upload_file(",[145,3335,3336],{"class":159},"'local_image.jpg'",[145,3338,399],{"class":262},[145,3340,3341],{"class":159},"'my-bucket'",[145,3343,399],{"class":262},[145,3345,3346],{"class":159},"'seedance/input.jpg'",[145,3348,405],{"class":262},[145,3350,3351,3354,3356,3359],{"class":147,"line":372},[145,3352,3353],{"class":262},"image_url ",[145,3355,266],{"class":258},[145,3357,3358],{"class":258}," f",[145,3360,3361],{"class":159},"\"https://my-bucket.s3.amazonaws.com/seedance/input.jpg\"\n",[145,3363,3364],{"class":147,"line":378},[145,3365,375],{"emptyLinePlaceholder":58},[145,3367,3368],{"class":147,"line":384},[145,3369,3370],{"class":174},"# 方法 2：一時ファイルホスティング API を使用\n",[145,3372,3373],{"class":147,"line":408},[145,3374,3375],{"class":174},"# 多くのサービスがテスト用の無料一時ホスティングを提供しています\n",[11,3377,3378,3379,1769],{},"高度な画像から動画テクニック — 最初/最後のフレーム制御、マルチ画像合成、EC 商品アニメーション — は",[37,3380,3382],{"href":3381},"/blog/seedance-2-image-to-video-api","画像から動画の詳細ガイド",[45,3384],{},[48,3386,3387],{"id":3387},"動画をカスタマイズする",[11,3389,3390],{},"生成リクエストで調整できるすべてのパラメータ：",[2037,3392,3393,3412],{},[2040,3394,3395],{},[2043,3396,3397,3400,3403,3406,3409],{},[2046,3398,3399],{},"パラメータ",[2046,3401,3402],{},"型",[2046,3404,3405],{},"デフォルト",[2046,3407,3408],{},"オプション",[2046,3410,3411],{},"説明",[2053,3413,3414,3433,3449,3466,3489,3521,3543,3560,3577,3593],{},[2043,3415,3416,3420,3423,3426,3430],{},[2058,3417,3418],{},[28,3419,1748],{},[2058,3421,3422],{},"string",[2058,3424,3425],{},"—",[2058,3427,3428],{},[28,3429,1752],{},[2058,3431,3432],{},"必須。使用するモデル。",[2043,3434,3435,3439,3441,3443,3446],{},[2058,3436,3437],{},[28,3438,1763],{},[2058,3440,3422],{},[2058,3442,3425],{},[2058,3444,3445],{},"≤2000 tokens",[2058,3447,3448],{},"必須。@tags を含む動画の説明。",[2043,3450,3451,3455,3458,3460,3463],{},[2058,3452,3453],{},[28,3454,1776],{},[2058,3456,3457],{},"integer",[2058,3459,1353],{},[2058,3461,3462],{},"4–15",[2058,3464,3465],{},"動画の長さ（秒）。",[2043,3467,3468,3472,3474,3478,3486],{},[2058,3469,3470],{},[28,3471,1784],{},[2058,3473,3422],{},[2058,3475,3476],{},[28,3477,1788],{},[2058,3479,3480,2916,3482,2916,3484],{},[28,3481,1792],{},[28,3483,1788],{},[28,3485,1796],{},[2058,3487,3488],{},"解像度ティア。高いほどクレジット消費増。",[2043,3490,3491,3495,3497,3501,3518],{},[2058,3492,3493],{},[28,3494,1804],{},[2058,3496,3422],{},[2058,3498,3499],{},[28,3500,1808],{},[2058,3502,3503,2916,3505,2916,3507,2916,3509,2916,3512,2916,3515],{},[28,3504,1808],{},[28,3506,1812],{},[28,3508,1816],{},[28,3510,3511],{},"4:3",[28,3513,3514],{},"3:4",[28,3516,3517],{},"21:9",[2058,3519,3520],{},"出力アスペクト比。",[2043,3522,3523,3527,3530,3534,3540],{},[2058,3524,3525],{},[28,3526,1824],{},[2058,3528,3529],{},"boolean",[2058,3531,3532],{},[28,3533,1827],{},[2058,3535,3536,2916,3538],{},[28,3537,1827],{},[28,3539,2937],{},[2058,3541,3542],{},"AI 生成オーディオ/音楽を有効化。",[2043,3544,3545,3549,3552,3554,3557],{},[2058,3546,3547],{},[28,3548,2896],{},[2058,3550,3551],{},"array",[2058,3553,3425],{},[2058,3555,3556],{},"≤9 枚",[2058,3558,3559],{},"参照画像。プロンプトで @Image1、@Image2... で参照。",[2043,3561,3562,3567,3569,3571,3574],{},[2058,3563,3564],{},[28,3565,3566],{},"video_urls",[2058,3568,3551],{},[2058,3570,3425],{},[2058,3572,3573],{},"≤3 本",[2058,3575,3576],{},"参照動画。プロンプトで @Video1、@Video2... で参照。",[2043,3578,3579,3584,3586,3588,3590],{},[2058,3580,3581],{},[28,3582,3583],{},"audio_urls",[2058,3585,3551],{},[2058,3587,3425],{},[2058,3589,3573],{},[2058,3591,3592],{},"参照オーディオ。プロンプトで @Audio1、@Audio2... で参照。",[2043,3594,3595,3600,3602,3604,3607],{},[2058,3596,3597],{},[28,3598,3599],{},"callback_url",[2058,3601,3422],{},[2058,3603,3425],{},[2058,3605,3606],{},"HTTPS URL",[2058,3608,3609],{},"完了時の webhook コールバック URL。",[18,3611,3612],{},[11,3613,3614,3617,3618,3620,3621,3623,3624,2916,3626,3628,3629,3631,3632,3634,3635,3638],{},[23,3615,3616],{},"Seedance 2.0 と 1.5 の違い："," 上記のすべてのパラメータは ",[28,3619,1752],{}," と ",[28,3622,30],{}," の両方で動作します。主な違い：",[28,3625,3566],{},[28,3627,3583],{},"、マルチ画像参照（",[28,3630,2919],{},"〜",[28,3633,2956],{},"）は 2.0 専用機能です。1.5 で使用すると、API はその機能がサポートされていないことを明示するメッセージとともに ",[28,3636,3637],{},"400"," エラーを返します。",[92,3640,3641],{"id":3641},"クイック例",[11,3643,3644],{},[23,3645,3646],{},"縦型ソーシャルメディア動画（TikTok/Reels）：",[11,3648,3649],{},[2619,3650,2621],{},[136,3652,3654],{"className":337,"code":3653,"language":339,"meta":141,"style":141},"payload = {\n    \"model\": \"seedance-2.0\",\n    \"prompt\": \"A barista pours latte art in slow motion. Close-up overhead shot.\",\n    \"duration\": 8,\n    \"quality\": \"1080p\",\n    \"aspect_ratio\": \"9:16\",       # モバイル向け縦型\n    \"generate_audio\": True\n}\n",[28,3655,3656,3665,3676,3688,3700,3712,3728,3738],{"__ignoreMap":141},[145,3657,3658,3661,3663],{"class":147,"line":148},[145,3659,3660],{"class":262},"payload ",[145,3662,266],{"class":258},[145,3664,427],{"class":262},[145,3666,3667,3670,3672,3674],{"class":147,"line":166},[145,3668,3669],{"class":159},"    \"model\"",[145,3671,436],{"class":262},[145,3673,1309],{"class":159},[145,3675,451],{"class":262},[145,3677,3678,3681,3683,3686],{"class":147,"line":178},[145,3679,3680],{"class":159},"    \"prompt\"",[145,3682,436],{"class":262},[145,3684,3685],{"class":159},"\"A barista pours latte art in slow motion. Close-up overhead shot.\"",[145,3687,451],{"class":262},[145,3689,3690,3693,3695,3698],{"class":147,"line":187},[145,3691,3692],{"class":159},"    \"duration\"",[145,3694,436],{"class":262},[145,3696,3697],{"class":155},"8",[145,3699,451],{"class":262},[145,3701,3702,3705,3707,3710],{"class":147,"line":372},[145,3703,3704],{"class":159},"    \"quality\"",[145,3706,436],{"class":262},[145,3708,3709],{"class":159},"\"1080p\"",[145,3711,451],{"class":262},[145,3713,3714,3717,3719,3722,3725],{"class":147,"line":378},[145,3715,3716],{"class":159},"    \"aspect_ratio\"",[145,3718,436],{"class":262},[145,3720,3721],{"class":159},"\"9:16\"",[145,3723,3724],{"class":262},",       ",[145,3726,3727],{"class":174},"# モバイル向け縦型\n",[145,3729,3730,3733,3735],{"class":147,"line":384},[145,3731,3732],{"class":159},"    \"generate_audio\"",[145,3734,436],{"class":262},[145,3736,3737],{"class":155},"True\n",[145,3739,3740],{"class":147,"line":408},[145,3741,468],{"class":262},[11,3743,3744,3746,3747,3749],{},[28,3745,1812],{}," アスペクト比は 1080×1920 の動画を生成します — TikTok、Instagram Reels、YouTube Shorts のネイティブ解像度です。",[28,3748,1796],{}," 品質ティアはモバイル画面でも鮮明な映像を実現します。",[11,3751,3752],{},[23,3753,3754],{},"シネマティックワイドスクリーン + カメラムーブメント：",[136,3756,3758],{"className":337,"code":3757,"language":339,"meta":141,"style":141},"payload = {\n    \"model\": \"seedance-2.0\",\n    \"prompt\": (\n        \"Aerial drone shot over a misty mountain range at sunrise. \"\n        \"Camera slowly pushes forward, revealing a hidden valley. \"\n        \"Cinematic color grading, volumetric lighting.\"\n    ),\n    \"duration\": 10,\n    \"quality\": \"1080p\",\n    \"aspect_ratio\": \"21:9\",       # ウルトラワイドスクリーン シネマティック\n    \"generate_audio\": True\n}\n",[28,3759,3760,3768,3778,3784,3789,3794,3799,3804,3814,3824,3838,3846],{"__ignoreMap":141},[145,3761,3762,3764,3766],{"class":147,"line":148},[145,3763,3660],{"class":262},[145,3765,266],{"class":258},[145,3767,427],{"class":262},[145,3769,3770,3772,3774,3776],{"class":147,"line":166},[145,3771,3669],{"class":159},[145,3773,436],{"class":262},[145,3775,1309],{"class":159},[145,3777,451],{"class":262},[145,3779,3780,3782],{"class":147,"line":178},[145,3781,3680],{"class":159},[145,3783,1323],{"class":262},[145,3785,3786],{"class":147,"line":187},[145,3787,3788],{"class":159},"        \"Aerial drone shot over a misty mountain range at sunrise. \"\n",[145,3790,3791],{"class":147,"line":372},[145,3792,3793],{"class":159},"        \"Camera slowly pushes forward, revealing a hidden valley. \"\n",[145,3795,3796],{"class":147,"line":378},[145,3797,3798],{"class":159},"        \"Cinematic color grading, volumetric lighting.\"\n",[145,3800,3801],{"class":147,"line":384},[145,3802,3803],{"class":262},"    ),\n",[145,3805,3806,3808,3810,3812],{"class":147,"line":408},[145,3807,3692],{"class":159},[145,3809,436],{"class":262},[145,3811,536],{"class":155},[145,3813,451],{"class":262},[145,3815,3816,3818,3820,3822],{"class":147,"line":419},[145,3817,3704],{"class":159},[145,3819,436],{"class":262},[145,3821,3709],{"class":159},[145,3823,451],{"class":262},[145,3825,3826,3828,3830,3833,3835],{"class":147,"line":430},[145,3827,3716],{"class":159},[145,3829,436],{"class":262},[145,3831,3832],{"class":159},"\"21:9\"",[145,3834,3724],{"class":262},[145,3836,3837],{"class":174},"# ウルトラワイドスクリーン シネマティック\n",[145,3839,3840,3842,3844],{"class":147,"line":454},[145,3841,3732],{"class":159},[145,3843,436],{"class":262},[145,3845,3737],{"class":155},[145,3847,3848],{"class":147,"line":465},[145,3849,468],{"class":262},[11,3851,3852,3853,1769],{},"プログラムによるカメラ制御 — ドリーズーム、オービタルショット、ヒッチコックスタイルの動き — は",[37,3854,3856],{"href":3855},"/blog/seedance-2-camera-movement-api","カメラムーブメント API ガイド",[11,3858,3859],{},[23,3860,3861],{},"無音ウェブサイト背景動画：",[136,3863,3865],{"className":337,"code":3864,"language":339,"meta":141,"style":141},"payload = {\n    \"model\": \"seedance-2.0\",\n    \"prompt\": \"Abstract flowing particles in deep blue and gold. Slow, meditative movement.\",\n    \"duration\": 15,               # 最大長 — シームレスループ向け\n    \"quality\": \"720p\",\n    \"aspect_ratio\": \"21:9\",       # ワイド背景\n    \"generate_audio\": False       # 自動再生背景にはオーディオ不要\n}\n",[28,3866,3867,3875,3885,3896,3911,3921,3934,3946],{"__ignoreMap":141},[145,3868,3869,3871,3873],{"class":147,"line":148},[145,3870,3660],{"class":262},[145,3872,266],{"class":258},[145,3874,427],{"class":262},[145,3876,3877,3879,3881,3883],{"class":147,"line":166},[145,3878,3669],{"class":159},[145,3880,436],{"class":262},[145,3882,1309],{"class":159},[145,3884,451],{"class":262},[145,3886,3887,3889,3891,3894],{"class":147,"line":178},[145,3888,3680],{"class":159},[145,3890,436],{"class":262},[145,3892,3893],{"class":159},"\"Abstract flowing particles in deep blue and gold. Slow, meditative movement.\"",[145,3895,451],{"class":262},[145,3897,3898,3900,3902,3905,3908],{"class":147,"line":187},[145,3899,3692],{"class":159},[145,3901,436],{"class":262},[145,3903,3904],{"class":155},"15",[145,3906,3907],{"class":262},",               ",[145,3909,3910],{"class":174},"# 最大長 — シームレスループ向け\n",[145,3912,3913,3915,3917,3919],{"class":147,"line":372},[145,3914,3704],{"class":159},[145,3916,436],{"class":262},[145,3918,1369],{"class":159},[145,3920,451],{"class":262},[145,3922,3923,3925,3927,3929,3931],{"class":147,"line":378},[145,3924,3716],{"class":159},[145,3926,436],{"class":262},[145,3928,3832],{"class":159},[145,3930,3724],{"class":262},[145,3932,3933],{"class":174},"# ワイド背景\n",[145,3935,3936,3938,3940,3943],{"class":147,"line":384},[145,3937,3732],{"class":159},[145,3939,436],{"class":262},[145,3941,3942],{"class":155},"False",[145,3944,3945],{"class":174},"       # 自動再生背景にはオーディオ不要\n",[145,3947,3948],{"class":147,"line":408},[145,3949,468],{"class":262},[11,3951,3952],{},[23,3953,3954],{},"低コストドラフト（高速イテレーション）：",[136,3956,3958],{"className":337,"code":3957,"language":339,"meta":141,"style":141},"payload = {\n    \"model\": \"seedance-2.0\",\n    \"prompt\": \"A cat wearing sunglasses sits at a DJ booth. Neon club lighting.\",\n    \"duration\": 4,                # 最短 = 最速生成\n    \"quality\": \"480p\",            # 最低品質 = 最安クレジット\n    \"aspect_ratio\": \"16:9\"\n}\n",[28,3959,3960,3968,3978,3989,4004,4018,4026],{"__ignoreMap":141},[145,3961,3962,3964,3966],{"class":147,"line":148},[145,3963,3660],{"class":262},[145,3965,266],{"class":258},[145,3967,427],{"class":262},[145,3969,3970,3972,3974,3976],{"class":147,"line":166},[145,3971,3669],{"class":159},[145,3973,436],{"class":262},[145,3975,1309],{"class":159},[145,3977,451],{"class":262},[145,3979,3980,3982,3984,3987],{"class":147,"line":178},[145,3981,3680],{"class":159},[145,3983,436],{"class":262},[145,3985,3986],{"class":159},"\"A cat wearing sunglasses sits at a DJ booth. Neon club lighting.\"",[145,3988,451],{"class":262},[145,3990,3991,3993,3995,3998,4001],{"class":147,"line":187},[145,3992,3692],{"class":159},[145,3994,436],{"class":262},[145,3996,3997],{"class":155},"4",[145,3999,4000],{"class":262},",                ",[145,4002,4003],{"class":174},"# 最短 = 最速生成\n",[145,4005,4006,4008,4010,4013,4015],{"class":147,"line":372},[145,4007,3704],{"class":159},[145,4009,436],{"class":262},[145,4011,4012],{"class":159},"\"480p\"",[145,4014,1388],{"class":262},[145,4016,4017],{"class":174},"# 最低品質 = 最安クレジット\n",[145,4019,4020,4022,4024],{"class":147,"line":378},[145,4021,3716],{"class":159},[145,4023,436],{"class":262},[145,4025,2730],{"class":159},[145,4027,4028],{"class":147,"line":384},[145,4029,468],{"class":262},[18,4031,4032],{},[11,4033,4034,4036,4037,3620,4040,4043,4044,4046],{},[23,4035,133],{}," 開発中は常に ",[28,4038,4039],{},"duration: 4",[28,4041,4042],{},"quality: \"480p\""," を使ってください。最も安く最も速い組み合わせで、プロンプトのイテレーションに最適です。内容に満足したら、",[28,4045,1796],{}," と希望の長さで最終版をレンダリングしてください。",[92,4048,4049],{"id":4049},"クレジット消費の目安",[11,4051,4052],{},"クレジットは長さと品質に比例して増加します。大まかな目安：",[2037,4054,4055,4074],{},[2040,4056,4057],{},[2043,4058,4059,4062,4065,4068,4071],{},[2046,4060,4061],{},"品質",[2046,4063,4064],{},"4s",[2046,4066,4067],{},"5s",[2046,4069,4070],{},"10s",[2046,4072,4073],{},"15s",[2053,4075,4076,4092,4108],{},[2043,4077,4078,4080,4083,4086,4089],{},[2058,4079,1792],{},[2058,4081,4082],{},"~8",[2058,4084,4085],{},"~10",[2058,4087,4088],{},"~20",[2058,4090,4091],{},"~30",[2043,4093,4094,4096,4099,4102,4105],{},[2058,4095,1788],{},[2058,4097,4098],{},"~14",[2058,4100,4101],{},"~18",[2058,4103,4104],{},"~36",[2058,4106,4107],{},"~53",[2043,4109,4110,4112,4115,4118,4121],{},[2058,4111,1796],{},[2058,4113,4114],{},"~22",[2058,4116,4117],{},"~28",[2058,4119,4120],{},"~55",[2058,4122,4123],{},"~83",[11,4125,4126],{},[2619,4127,4128,4129,4131,4132,4136],{},"概算クレジット。実際のコストは ",[28,4130,2118],{}," フィールドに表示されます。現在のレートは ",[37,4133,4135],{"href":211,"rel":4134},[41],"EvoLink ダッシュボード","で確認してください。",[11,4138,4139,4140,2916,4143,2916,4145,4147,4148,4151,4152,4155],{},"マルチモーダル参照システム — ",[28,4141,4142],{},"@Image",[28,4144,2960],{},[28,4146,2963],{}," タグ — は Seedance 2.0 の真骨頂です。参照動画から",[37,4149,4150],{"href":3855},"カメラムーブメント","を複製したり、ショット間でキャラクターの一貫性を維持したり、オーディオのビートに同期させたりできます。完全ガイドは ",[37,4153,4154],{"href":2967},"@Tags 究極ガイド","をお読みください。",[45,4157],{},[48,4159,4160],{"id":4160},"エラーを適切に処理する",[11,4162,4163],{},"API コールは失敗します。ネットワークは切断されます。レート制限に引っかかります。実際に起こりうるあらゆるエラーに対応できる堅牢なコードの書き方を解説します。",[92,4165,4166],{"id":4166},"一般的なエラーレスポンス",[11,4168,4169],{},"すべてのエラーは同じフォーマットに従います：",[136,4171,4173],{"className":1857,"code":4172,"language":1859,"meta":141,"style":141},"{\n  \"error\": {\n    \"message\": \"description of what went wrong\",\n    \"type\": \"error_category\",\n    \"code\": \"specific_error_code\"\n  }\n}\n",[28,4174,4175,4179,4186,4198,4210,4220,4224],{"__ignoreMap":141},[145,4176,4177],{"class":147,"line":148},[145,4178,1866],{"class":262},[145,4180,4181,4184],{"class":147,"line":166},[145,4182,4183],{"class":155},"  \"error\"",[145,4185,1944],{"class":262},[145,4187,4188,4191,4193,4196],{"class":147,"line":178},[145,4189,4190],{"class":155},"    \"message\"",[145,4192,436],{"class":262},[145,4194,4195],{"class":159},"\"description of what went wrong\"",[145,4197,451],{"class":262},[145,4199,4200,4203,4205,4208],{"class":147,"line":187},[145,4201,4202],{"class":155},"    \"type\"",[145,4204,436],{"class":262},[145,4206,4207],{"class":159},"\"error_category\"",[145,4209,451],{"class":262},[145,4211,4212,4215,4217],{"class":147,"line":372},[145,4213,4214],{"class":155},"    \"code\"",[145,4216,436],{"class":262},[145,4218,4219],{"class":159},"\"specific_error_code\"\n",[145,4221,4222],{"class":147,"line":378},[145,4223,2028],{"class":262},[145,4225,4226],{"class":147,"line":384},[145,4227,468],{"class":262},[11,4229,4230,4233,4234,3620,4237,4240,4241,4243,4244,4246,4247,4249],{},[28,4231,4232],{},"error"," オブジェクトには常に ",[28,4235,4236],{},"message",[28,4238,4239],{},"type"," が含まれます。",[28,4242,28],{}," フィールドはほとんどのエラーに存在しますが、すべてではありません。まず ",[28,4245,4239],{}," を確認し、詳細は ",[28,4248,28],{}," を確認してください。",[11,4251,4252],{},"API から返される実際のエラーレスポンス：",[11,4254,4255],{},[23,4256,4257],{},"401 — 無効な API Key：",[136,4259,4261],{"className":1857,"code":4260,"language":1859,"meta":141,"style":141},"{\n  \"error\": {\n    \"message\": \"Invalid token (request id: 20260227225245660301729AApJNAhJ)\",\n    \"type\": \"evo_api_error\"\n  }\n}\n",[28,4262,4263,4267,4273,4284,4293,4297],{"__ignoreMap":141},[145,4264,4265],{"class":147,"line":148},[145,4266,1866],{"class":262},[145,4268,4269,4271],{"class":147,"line":166},[145,4270,4183],{"class":155},[145,4272,1944],{"class":262},[145,4274,4275,4277,4279,4282],{"class":147,"line":178},[145,4276,4190],{"class":155},[145,4278,436],{"class":262},[145,4280,4281],{"class":159},"\"Invalid token (request id: 20260227225245660301729AApJNAhJ)\"",[145,4283,451],{"class":262},[145,4285,4286,4288,4290],{"class":147,"line":187},[145,4287,4202],{"class":155},[145,4289,436],{"class":262},[145,4291,4292],{"class":159},"\"evo_api_error\"\n",[145,4294,4295],{"class":147,"line":372},[145,4296,2028],{"class":262},[145,4298,4299],{"class":147,"line":378},[145,4300,468],{"class":262},[11,4302,4303,4304,4306],{},"API Key が間違っている、期限切れ、または取り消されています。",[28,4305,275],{}," 環境変数を再確認してください。よくある原因：Key をコピーする際に末尾の空白が含まれている。",[11,4308,4309],{},[23,4310,4311],{},"400 — 必須フィールドの欠落：",[136,4313,4315],{"className":1857,"code":4314,"language":1859,"meta":141,"style":141},"{\n  \"error\": {\n    \"code\": \"invalid_parameter\",\n    \"message\": \"prompt cannot be empty\",\n    \"type\": \"invalid_request_error\"\n  }\n}\n",[28,4316,4317,4321,4327,4338,4349,4358,4362],{"__ignoreMap":141},[145,4318,4319],{"class":147,"line":148},[145,4320,1866],{"class":262},[145,4322,4323,4325],{"class":147,"line":166},[145,4324,4183],{"class":155},[145,4326,1944],{"class":262},[145,4328,4329,4331,4333,4336],{"class":147,"line":178},[145,4330,4214],{"class":155},[145,4332,436],{"class":262},[145,4334,4335],{"class":159},"\"invalid_parameter\"",[145,4337,451],{"class":262},[145,4339,4340,4342,4344,4347],{"class":147,"line":187},[145,4341,4190],{"class":155},[145,4343,436],{"class":262},[145,4345,4346],{"class":159},"\"prompt cannot be empty\"",[145,4348,451],{"class":262},[145,4350,4351,4353,4355],{"class":147,"line":372},[145,4352,4202],{"class":155},[145,4354,436],{"class":262},[145,4356,4357],{"class":159},"\"invalid_request_error\"\n",[145,4359,4360],{"class":147,"line":378},[145,4361,2028],{"class":262},[145,4363,4364],{"class":147,"line":384},[145,4365,468],{"class":262},[11,4367,4368,4370],{},[28,4369,1763],{}," フィールドはすべての生成リクエストで必須です。空文字列やスペースのみのプロンプトでもこのエラーがトリガーされます。",[11,4372,4373],{},[23,4374,4375],{},"400 — 無効なパラメータ値：",[136,4377,4379],{"className":1857,"code":4378,"language":1859,"meta":141,"style":141},"{\n  \"error\": {\n    \"code\": \"invalid_parameter\",\n    \"message\": \"duration must be between 4 and 15\",\n    \"type\": \"invalid_request_error\"\n  }\n}\n",[28,4380,4381,4385,4391,4401,4412,4420,4424],{"__ignoreMap":141},[145,4382,4383],{"class":147,"line":148},[145,4384,1866],{"class":262},[145,4386,4387,4389],{"class":147,"line":166},[145,4388,4183],{"class":155},[145,4390,1944],{"class":262},[145,4392,4393,4395,4397,4399],{"class":147,"line":178},[145,4394,4214],{"class":155},[145,4396,436],{"class":262},[145,4398,4335],{"class":159},[145,4400,451],{"class":262},[145,4402,4403,4405,4407,4410],{"class":147,"line":187},[145,4404,4190],{"class":155},[145,4406,436],{"class":262},[145,4408,4409],{"class":159},"\"duration must be between 4 and 15\"",[145,4411,451],{"class":262},[145,4413,4414,4416,4418],{"class":147,"line":372},[145,4415,4202],{"class":155},[145,4417,436],{"class":262},[145,4419,4357],{"class":159},[145,4421,4422],{"class":147,"line":378},[145,4423,2028],{"class":262},[145,4425,4426],{"class":147,"line":384},[145,4427,468],{"class":262},[11,4429,4430,280,4433,4436],{},[28,4431,4432],{},"duration: 3",[28,4434,4435],{},"duration: 20"," を渡した場合に発生します。有効範囲は 4〜15 秒（両端含む）です。",[11,4438,4439],{},[23,4440,4441],{},"402 — クレジット不足：",[136,4443,4445],{"className":1857,"code":4444,"language":1859,"meta":141,"style":141},"{\n  \"error\": {\n    \"message\": \"Insufficient credits. Required: 17.784, Available: 2.100\",\n    \"type\": \"insufficient_quota_error\"\n  }\n}\n",[28,4446,4447,4451,4457,4468,4477,4481],{"__ignoreMap":141},[145,4448,4449],{"class":147,"line":148},[145,4450,1866],{"class":262},[145,4452,4453,4455],{"class":147,"line":166},[145,4454,4183],{"class":155},[145,4456,1944],{"class":262},[145,4458,4459,4461,4463,4466],{"class":147,"line":178},[145,4460,4190],{"class":155},[145,4462,436],{"class":262},[145,4464,4465],{"class":159},"\"Insufficient credits. Required: 17.784, Available: 2.100\"",[145,4467,451],{"class":262},[145,4469,4470,4472,4474],{"class":147,"line":187},[145,4471,4202],{"class":155},[145,4473,436],{"class":262},[145,4475,4476],{"class":159},"\"insufficient_quota_error\"\n",[145,4478,4479],{"class":147,"line":372},[145,4480,2028],{"class":262},[145,4482,4483],{"class":147,"line":378},[145,4484,468],{"class":262},[11,4486,4487,4488,4491],{},"アカウントのクレジットが不足しています。メッセージに必要量と残量が正確に表示されます。",[37,4489,4135],{"href":211,"rel":4490},[41],"でチャージしてください。",[11,4493,4494],{},[23,4495,4496],{},"404 — タスクが見つからない：",[136,4498,4500],{"className":1857,"code":4499,"language":1859,"meta":141,"style":141},"{\n  \"error\": {\n    \"message\": \"Task not found\",\n    \"type\": \"invalid_request_error\",\n    \"code\": \"task_not_found\"\n  }\n}\n",[28,4501,4502,4506,4512,4523,4534,4543,4547],{"__ignoreMap":141},[145,4503,4504],{"class":147,"line":148},[145,4505,1866],{"class":262},[145,4507,4508,4510],{"class":147,"line":166},[145,4509,4183],{"class":155},[145,4511,1944],{"class":262},[145,4513,4514,4516,4518,4521],{"class":147,"line":178},[145,4515,4190],{"class":155},[145,4517,436],{"class":262},[145,4519,4520],{"class":159},"\"Task not found\"",[145,4522,451],{"class":262},[145,4524,4525,4527,4529,4532],{"class":147,"line":187},[145,4526,4202],{"class":155},[145,4528,436],{"class":262},[145,4530,4531],{"class":159},"\"invalid_request_error\"",[145,4533,451],{"class":262},[145,4535,4536,4538,4540],{"class":147,"line":372},[145,4537,4214],{"class":155},[145,4539,436],{"class":262},[145,4541,4542],{"class":159},"\"task_not_found\"\n",[145,4544,4545],{"class":147,"line":378},[145,4546,2028],{"class":262},[145,4548,4549],{"class":147,"line":384},[145,4550,468],{"class":262},[11,4552,4553,4554,4556],{},"通常、タスク ID が間違っているか、タスクが作成から 24 時間以上経過して期限切れになっています。作成レスポンスの ",[28,4555,2062],{}," フィールドを使用しているか確認してください。",[11,4558,4559],{},[23,4560,4561],{},"429 — レート制限：",[136,4563,4565],{"className":1857,"code":4564,"language":1859,"meta":141,"style":141},"{\n  \"error\": {\n    \"message\": \"Rate limit exceeded. Please retry after 60 seconds.\",\n    \"type\": \"rate_limit_error\"\n  }\n}\n",[28,4566,4567,4571,4577,4588,4597,4601],{"__ignoreMap":141},[145,4568,4569],{"class":147,"line":148},[145,4570,1866],{"class":262},[145,4572,4573,4575],{"class":147,"line":166},[145,4574,4183],{"class":155},[145,4576,1944],{"class":262},[145,4578,4579,4581,4583,4586],{"class":147,"line":178},[145,4580,4190],{"class":155},[145,4582,436],{"class":262},[145,4584,4585],{"class":159},"\"Rate limit exceeded. Please retry after 60 seconds.\"",[145,4587,451],{"class":262},[145,4589,4590,4592,4594],{"class":147,"line":187},[145,4591,4202],{"class":155},[145,4593,436],{"class":262},[145,4595,4596],{"class":159},"\"rate_limit_error\"\n",[145,4598,4599],{"class":147,"line":372},[145,4600,2028],{"class":262},[145,4602,4603],{"class":147,"line":378},[145,4604,468],{"class":262},[11,4606,4607],{},"リクエストの送信が頻繁すぎます。デフォルトの制限は開発には十分余裕がありますが、バッチスクリプトでは引っかかる可能性があります。指数バックオフを実装してください（下記参照）。",[11,4609,4610],{},[23,4611,4612],{},"422 — コンテンツ審査による拒否：",[136,4614,4616],{"className":1857,"code":4615,"language":1859,"meta":141,"style":141},"{\n  \"error\": {\n    \"message\": \"Content rejected by safety filter\",\n    \"type\": \"content_policy_violation\",\n    \"code\": \"content_filtered\"\n  }\n}\n",[28,4617,4618,4622,4628,4639,4650,4659,4663],{"__ignoreMap":141},[145,4619,4620],{"class":147,"line":148},[145,4621,1866],{"class":262},[145,4623,4624,4626],{"class":147,"line":166},[145,4625,4183],{"class":155},[145,4627,1944],{"class":262},[145,4629,4630,4632,4634,4637],{"class":147,"line":178},[145,4631,4190],{"class":155},[145,4633,436],{"class":262},[145,4635,4636],{"class":159},"\"Content rejected by safety filter\"",[145,4638,451],{"class":262},[145,4640,4641,4643,4645,4648],{"class":147,"line":187},[145,4642,4202],{"class":155},[145,4644,436],{"class":262},[145,4646,4647],{"class":159},"\"content_policy_violation\"",[145,4649,451],{"class":262},[145,4651,4652,4654,4656],{"class":147,"line":372},[145,4653,4214],{"class":155},[145,4655,436],{"class":262},[145,4657,4658],{"class":159},"\"content_filtered\"\n",[145,4660,4661],{"class":147,"line":378},[145,4662,2028],{"class":262},[145,4664,4665],{"class":147,"line":384},[145,4666,468],{"class":262},[11,4668,4669,4670,4672],{},"プロンプトまたは入力画像がコンテンツ審査システムをトリガーしました。制限されたコンテンツを避けるようプロンプトを修正してください。",[28,4671,2896],{}," のリアルな人物の顔画像は自動的に拒否されます。",[92,4674,4675],{"id":4675},"エラー早見表",[2037,4677,4678,4696],{},[2040,4679,4680],{},[2043,4681,4682,4685,4688,4690,4693],{},[2046,4683,4684],{},"HTTP コード",[2046,4686,4687],{},"タイプ",[2046,4689,2051],{},[2046,4691,4692],{},"リトライ可能？",[2046,4694,4695],{},"対処",[2053,4697,4698,4716,4734,4752,4770,4788,4806,4827,4847,4867],{},[2043,4699,4700,4702,4707,4710,4713],{},[2058,4701,3637],{},[2058,4703,4704],{},[28,4705,4706],{},"invalid_request_error",[2058,4708,4709],{},"パラメータ不正",[2058,4711,4712],{},"いいえ",[2058,4714,4715],{},"payload を修正",[2043,4717,4718,4721,4726,4729,4731],{},[2058,4719,4720],{},"401",[2058,4722,4723],{},[28,4724,4725],{},"authentication_error",[2058,4727,4728],{},"無効な API Key",[2058,4730,4712],{},[2058,4732,4733],{},"Key を確認",[2043,4735,4736,4739,4744,4747,4749],{},[2058,4737,4738],{},"402",[2058,4740,4741],{},[28,4742,4743],{},"insufficient_quota_error",[2058,4745,4746],{},"クレジット不足",[2058,4748,4712],{},[2058,4750,4751],{},"チャージ",[2043,4753,4754,4757,4762,4765,4767],{},[2058,4755,4756],{},"404",[2058,4758,4759],{},[28,4760,4761],{},"not_found_error",[2058,4763,4764],{},"タスクまたはモデルが見つからない",[2058,4766,4712],{},[2058,4768,4769],{},"task_id / モデル名を確認",[2043,4771,4772,4775,4780,4783,4785],{},[2058,4773,4774],{},"413",[2058,4776,4777],{},[28,4778,4779],{},"request_too_large_error",[2058,4781,4782],{},"リクエストが大きすぎる",[2058,4784,4712],{},[2058,4786,4787],{},"ファイルサイズを削減",[2043,4789,4790,4793,4798,4801,4803],{},[2058,4791,4792],{},"422",[2058,4794,4795],{},[28,4796,4797],{},"content_policy_violation",[2058,4799,4800],{},"コンテンツがフィルタリングされた",[2058,4802,4712],{},[2058,4804,4805],{},"プロンプトを修正",[2043,4807,4808,4811,4816,4819,4824],{},[2058,4809,4810],{},"429",[2058,4812,4813],{},[28,4814,4815],{},"rate_limit_error",[2058,4817,4818],{},"リクエストが頻繁すぎる",[2058,4820,4821],{},[23,4822,4823],{},"はい",[2058,4825,4826],{},"60 秒後にリトライ",[2043,4828,4829,4832,4837,4840,4844],{},[2058,4830,4831],{},"500",[2058,4833,4834],{},[28,4835,4836],{},"internal_server_error",[2058,4838,4839],{},"サーバー問題",[2058,4841,4842],{},[23,4843,4823],{},[2058,4845,4846],{},"数秒後にリトライ",[2043,4848,4849,4852,4857,4860,4864],{},[2058,4850,4851],{},"502",[2058,4853,4854],{},[28,4855,4856],{},"bad_gateway",[2058,4858,4859],{},"アップストリームエラー",[2058,4861,4862],{},[23,4863,4823],{},[2058,4865,4866],{},"5 秒後にリトライ",[2043,4868,4869,4872,4877,4880,4884],{},[2058,4870,4871],{},"503",[2058,4873,4874],{},[28,4875,4876],{},"service_unavailable_error",[2058,4878,4879],{},"サービス利用不可",[2058,4881,4882],{},[23,4883,4823],{},[2058,4885,4886],{},"30 秒後にリトライ",[92,4888,4889],{"id":4889},"プロダクション品質のエラー処理",[11,4891,4892],{},"一時的なエラーに対するリトライロジックで API コールをラップします：",[11,4894,4895],{},[2619,4896,2621],{},[136,4898,4900],{"className":337,"code":4899,"language":339,"meta":141,"style":141},"import random\n\ndef generate_video_with_retry(payload, max_retries=3):\n    \"\"\"\n    一時的なエラー（429、500、502、503）に対して自動リトライする\n    動画生成リクエストの送信。\n    \n    Thundering Herd 問題を避けるため指数バックオフ + ジッターを使用：\n    - 試行 1：〜1 秒待機\n    - 試行 2：〜2 秒待機\n    - 試行 3：〜4 秒待機\n    \n    リトライ不可能なエラー（400、401、402、404、413、422）は\n    根本的な問題をリトライで解決できないため即座に失敗します。\n    \"\"\"\n    for attempt in range(max_retries):\n        try:\n            response = requests.post(\n                f\"{BASE_URL}/videos/generations\",\n                headers=HEADERS,\n                json=payload,\n                timeout=30       # 30 秒接続タイムアウト\n            )\n\n            # 成功 — task オブジェクトを返す\n            if response.status_code == 200:\n                return response.json()\n\n            # エラーレスポンスをパース\n            error = response.json().get(\"error\", {})\n            error_type = error.get(\"type\", \"\")\n            error_msg = error.get(\"message\", \"Unknown error\")\n\n            # リトライ不可能なエラー — 即座に失敗\n            if response.status_code in (400, 401, 402, 404, 413, 422):\n                raise ValueError(\n                    f\"API error {response.status_code}: {error_msg}\"\n                )\n\n            # リトライ可能なエラー — 指数バックオフ + ジッター\n            if response.status_code in (429, 500, 502, 503):\n                wait = (2 ** attempt) + random.uniform(0, 1)\n                print(f\"  Retry {attempt + 1}/{max_retries} \"\n                      f\"after {wait:.1f}s ({error_type}: {error_msg})\")\n                time.sleep(wait)\n                continue\n\n        except requests.exceptions.Timeout:\n            wait = (2 ** attempt) + random.uniform(0, 1)\n            print(f\"  Timeout. Retry {attempt + 1}/{max_retries} \"\n                  f\"after {wait:.1f}s\")\n            time.sleep(wait)\n            continue\n\n        except requests.exceptions.ConnectionError as e:\n            wait = (2 ** attempt) + random.uniform(0, 1)\n            print(f\"  Connection error: {e}. Retry {attempt + 1}/{max_retries} \"\n                  f\"after {wait:.1f}s\")\n            time.sleep(wait)\n            continue\n\n    raise RuntimeError(f\"Failed after {max_retries} retries\")\n",[28,4901,4902,4909,4913,4930,4934,4939,4944,4948,4953,4958,4963,4968,4972,4977,4982,4986,5002,5009,5018,5030,5041,5051,5064,5068,5072,5077,5090,5097,5101,5106,5120,5140,5159,5163,5168,5202,5212,5238,5243,5247,5252,5278,5311,5345,5386,5391,5396,5400,5409,5437,5468,5488,5494,5500,5505,5518,5545,5585,5604,5609,5614,5619],{"__ignoreMap":141},[145,4903,4904,4906],{"class":147,"line":148},[145,4905,346],{"class":258},[145,4907,4908],{"class":262}," random\n",[145,4910,4911],{"class":147,"line":166},[145,4912,375],{"emptyLinePlaceholder":58},[145,4914,4915,4917,4920,4923,4925,4928],{"class":147,"line":178},[145,4916,525],{"class":258},[145,4918,4919],{"class":151}," generate_video_with_retry",[145,4921,4922],{"class":262},"(payload, max_retries",[145,4924,266],{"class":258},[145,4926,4927],{"class":155},"3",[145,4929,547],{"class":262},[145,4931,4932],{"class":147,"line":187},[145,4933,552],{"class":159},[145,4935,4936],{"class":147,"line":372},[145,4937,4938],{"class":159},"    一時的なエラー（429、500、502、503）に対して自動リトライする\n",[145,4940,4941],{"class":147,"line":378},[145,4942,4943],{"class":159},"    動画生成リクエストの送信。\n",[145,4945,4946],{"class":147,"line":384},[145,4947,562],{"class":159},[145,4949,4950],{"class":147,"line":408},[145,4951,4952],{"class":159},"    Thundering Herd 問題を避けるため指数バックオフ + ジッターを使用：\n",[145,4954,4955],{"class":147,"line":419},[145,4956,4957],{"class":159},"    - 試行 1：〜1 秒待機\n",[145,4959,4960],{"class":147,"line":430},[145,4961,4962],{"class":159},"    - 試行 2：〜2 秒待機\n",[145,4964,4965],{"class":147,"line":454},[145,4966,4967],{"class":159},"    - 試行 3：〜4 秒待機\n",[145,4969,4970],{"class":147,"line":465},[145,4971,562],{"class":159},[145,4973,4974],{"class":147,"line":599},[145,4975,4976],{"class":159},"    リトライ不可能なエラー（400、401、402、404、413、422）は\n",[145,4978,4979],{"class":147,"line":604},[145,4980,4981],{"class":159},"    根本的な問題をリトライで解決できないため即座に失敗します。\n",[145,4983,4984],{"class":147,"line":610},[145,4985,552],{"class":159},[145,4987,4988,4991,4994,4996,4999],{"class":147,"line":616},[145,4989,4990],{"class":258},"    for",[145,4992,4993],{"class":262}," attempt ",[145,4995,1180],{"class":258},[145,4997,4998],{"class":155}," range",[145,5000,5001],{"class":262},"(max_retries):\n",[145,5003,5004,5007],{"class":147,"line":622},[145,5005,5006],{"class":258},"        try",[145,5008,859],{"class":262},[145,5010,5011,5014,5016],{"class":147,"line":627},[145,5012,5013],{"class":262},"            response ",[145,5015,266],{"class":258},[145,5017,1433],{"class":262},[145,5019,5020,5022,5024,5026,5028],{"class":147,"line":638},[145,5021,917],{"class":258},[145,5023,448],{"class":159},[145,5025,678],{"class":155},[145,5027,1445],{"class":159},[145,5029,451],{"class":262},[145,5031,5032,5035,5037,5039],{"class":147,"line":653},[145,5033,5034],{"class":700},"                headers",[145,5036,266],{"class":258},[145,5038,422],{"class":155},[145,5040,451],{"class":262},[145,5042,5043,5046,5048],{"class":147,"line":659},[145,5044,5045],{"class":700},"                json",[145,5047,266],{"class":258},[145,5049,5050],{"class":262},"payload,\n",[145,5052,5053,5056,5058,5061],{"class":147,"line":670},[145,5054,5055],{"class":700},"                timeout",[145,5057,266],{"class":258},[145,5059,5060],{"class":155},"30",[145,5062,5063],{"class":174},"       # 30 秒接続タイムアウト\n",[145,5065,5066],{"class":147,"line":697},[145,5067,956],{"class":262},[145,5069,5070],{"class":147,"line":709},[145,5071,375],{"emptyLinePlaceholder":58},[145,5073,5074],{"class":147,"line":715},[145,5075,5076],{"class":174},"            # 成功 — task オブジェクトを返す\n",[145,5078,5079,5082,5084,5086,5088],{"class":147,"line":721},[145,5080,5081],{"class":258},"            if",[145,5083,2508],{"class":262},[145,5085,853],{"class":258},[145,5087,2513],{"class":155},[145,5089,859],{"class":262},[145,5091,5092,5095],{"class":147,"line":727},[145,5093,5094],{"class":258},"                return",[145,5096,735],{"class":262},[145,5098,5099],{"class":147,"line":738},[145,5100,375],{"emptyLinePlaceholder":58},[145,5102,5103],{"class":147,"line":743},[145,5104,5105],{"class":174},"            # エラーレスポンスをパース\n",[145,5107,5108,5111,5113,5116,5118],{"class":147,"line":749},[145,5109,5110],{"class":262},"            error ",[145,5112,266],{"class":258},[145,5114,5115],{"class":262}," response.json().get(",[145,5117,896],{"class":159},[145,5119,899],{"class":262},[145,5121,5122,5125,5127,5130,5133,5135,5138],{"class":147,"line":766},[145,5123,5124],{"class":262},"            error_type ",[145,5126,266],{"class":258},[145,5128,5129],{"class":262}," error.get(",[145,5131,5132],{"class":159},"\"type\"",[145,5134,399],{"class":262},[145,5136,5137],{"class":159},"\"\"",[145,5139,405],{"class":262},[145,5141,5142,5145,5147,5149,5152,5154,5157],{"class":147,"line":787},[145,5143,5144],{"class":262},"            error_msg ",[145,5146,266],{"class":258},[145,5148,5129],{"class":262},[145,5150,5151],{"class":159},"\"message\"",[145,5153,399],{"class":262},[145,5155,5156],{"class":159},"\"Unknown error\"",[145,5158,405],{"class":262},[145,5160,5161],{"class":147,"line":833},[145,5162,375],{"emptyLinePlaceholder":58},[145,5164,5165],{"class":147,"line":838},[145,5166,5167],{"class":174},"            # リトライ不可能なエラー — 即座に失敗\n",[145,5169,5170,5172,5174,5176,5178,5180,5182,5184,5186,5188,5190,5192,5194,5196,5198,5200],{"class":147,"line":844},[145,5171,5081],{"class":258},[145,5173,2508],{"class":262},[145,5175,1180],{"class":258},[145,5177,1218],{"class":262},[145,5179,3637],{"class":155},[145,5181,399],{"class":262},[145,5183,4720],{"class":155},[145,5185,399],{"class":262},[145,5187,4738],{"class":155},[145,5189,399],{"class":262},[145,5191,4756],{"class":155},[145,5193,399],{"class":262},[145,5195,4774],{"class":155},[145,5197,399],{"class":262},[145,5199,4792],{"class":155},[145,5201,547],{"class":262},[145,5203,5204,5207,5210],{"class":147,"line":862},[145,5205,5206],{"class":258},"                raise",[145,5208,5209],{"class":155}," ValueError",[145,5211,911],{"class":262},[145,5213,5214,5217,5220,5222,5225,5227,5229,5231,5234,5236],{"class":147,"line":871},[145,5215,5216],{"class":258},"                    f",[145,5218,5219],{"class":159},"\"API error ",[145,5221,684],{"class":155},[145,5223,5224],{"class":262},"response.status_code",[145,5226,690],{"class":155},[145,5228,436],{"class":159},[145,5230,684],{"class":155},[145,5232,5233],{"class":262},"error_msg",[145,5235,690],{"class":155},[145,5237,950],{"class":159},[145,5239,5240],{"class":147,"line":886},[145,5241,5242],{"class":262},"                )\n",[145,5244,5245],{"class":147,"line":902},[145,5246,375],{"emptyLinePlaceholder":58},[145,5248,5249],{"class":147,"line":914},[145,5250,5251],{"class":174},"            # リトライ可能なエラー — 指数バックオフ + ジッター\n",[145,5253,5254,5256,5258,5260,5262,5264,5266,5268,5270,5272,5274,5276],{"class":147,"line":953},[145,5255,5081],{"class":258},[145,5257,2508],{"class":262},[145,5259,1180],{"class":258},[145,5261,1218],{"class":262},[145,5263,4810],{"class":155},[145,5265,399],{"class":262},[145,5267,4831],{"class":155},[145,5269,399],{"class":262},[145,5271,4851],{"class":155},[145,5273,399],{"class":262},[145,5275,4871],{"class":155},[145,5277,547],{"class":262},[145,5279,5280,5283,5285,5287,5290,5293,5296,5299,5302,5304,5306,5309],{"class":147,"line":959},[145,5281,5282],{"class":262},"                wait ",[145,5284,266],{"class":258},[145,5286,1218],{"class":262},[145,5288,5289],{"class":155},"2",[145,5291,5292],{"class":258}," **",[145,5294,5295],{"class":262}," attempt) ",[145,5297,5298],{"class":258},"+",[145,5300,5301],{"class":262}," random.uniform(",[145,5303,782],{"class":155},[145,5305,399],{"class":262},[145,5307,5308],{"class":155},"1",[145,5310,405],{"class":262},[145,5312,5313,5316,5318,5320,5323,5325,5328,5330,5333,5335,5337,5340,5342],{"class":147,"line":964},[145,5314,5315],{"class":155},"                print",[145,5317,793],{"class":262},[145,5319,439],{"class":258},[145,5321,5322],{"class":159},"\"  Retry ",[145,5324,684],{"class":155},[145,5326,5327],{"class":262},"attempt ",[145,5329,5298],{"class":258},[145,5331,5332],{"class":155}," 1}",[145,5334,1226],{"class":159},[145,5336,684],{"class":155},[145,5338,5339],{"class":262},"max_retries",[145,5341,690],{"class":155},[145,5343,5344],{"class":159}," \"\n",[145,5346,5347,5350,5353,5355,5358,5361,5363,5366,5368,5371,5373,5375,5377,5379,5381,5384],{"class":147,"line":970},[145,5348,5349],{"class":258},"                      f",[145,5351,5352],{"class":159},"\"after ",[145,5354,684],{"class":155},[145,5356,5357],{"class":262},"wait",[145,5359,5360],{"class":258},":.1f",[145,5362,690],{"class":155},[145,5364,5365],{"class":159},"s (",[145,5367,684],{"class":155},[145,5369,5370],{"class":262},"error_type",[145,5372,690],{"class":155},[145,5374,436],{"class":159},[145,5376,684],{"class":155},[145,5378,5233],{"class":262},[145,5380,690],{"class":155},[145,5382,5383],{"class":159},")\"",[145,5385,405],{"class":262},[145,5387,5388],{"class":147,"line":976},[145,5389,5390],{"class":262},"                time.sleep(wait)\n",[145,5392,5393],{"class":147,"line":988},[145,5394,5395],{"class":258},"                continue\n",[145,5397,5398],{"class":147,"line":993},[145,5399,375],{"emptyLinePlaceholder":58},[145,5401,5403,5406],{"class":147,"line":5402},48,[145,5404,5405],{"class":258},"        except",[145,5407,5408],{"class":262}," requests.exceptions.Timeout:\n",[145,5410,5412,5415,5417,5419,5421,5423,5425,5427,5429,5431,5433,5435],{"class":147,"line":5411},49,[145,5413,5414],{"class":262},"            wait ",[145,5416,266],{"class":258},[145,5418,1218],{"class":262},[145,5420,5289],{"class":155},[145,5422,5292],{"class":258},[145,5424,5295],{"class":262},[145,5426,5298],{"class":258},[145,5428,5301],{"class":262},[145,5430,782],{"class":155},[145,5432,399],{"class":262},[145,5434,5308],{"class":155},[145,5436,405],{"class":262},[145,5438,5440,5443,5445,5447,5450,5452,5454,5456,5458,5460,5462,5464,5466],{"class":147,"line":5439},50,[145,5441,5442],{"class":155},"            print",[145,5444,793],{"class":262},[145,5446,439],{"class":258},[145,5448,5449],{"class":159},"\"  Timeout. Retry ",[145,5451,684],{"class":155},[145,5453,5327],{"class":262},[145,5455,5298],{"class":258},[145,5457,5332],{"class":155},[145,5459,1226],{"class":159},[145,5461,684],{"class":155},[145,5463,5339],{"class":262},[145,5465,690],{"class":155},[145,5467,5344],{"class":159},[145,5469,5471,5474,5476,5478,5480,5482,5484,5486],{"class":147,"line":5470},51,[145,5472,5473],{"class":258},"                  f",[145,5475,5352],{"class":159},[145,5477,684],{"class":155},[145,5479,5357],{"class":262},[145,5481,5360],{"class":258},[145,5483,690],{"class":155},[145,5485,1024],{"class":159},[145,5487,405],{"class":262},[145,5489,5491],{"class":147,"line":5490},52,[145,5492,5493],{"class":262},"            time.sleep(wait)\n",[145,5495,5497],{"class":147,"line":5496},53,[145,5498,5499],{"class":258},"            continue\n",[145,5501,5503],{"class":147,"line":5502},54,[145,5504,375],{"emptyLinePlaceholder":58},[145,5506,5508,5510,5513,5515],{"class":147,"line":5507},55,[145,5509,5405],{"class":258},[145,5511,5512],{"class":262}," requests.exceptions.ConnectionError ",[145,5514,1166],{"class":258},[145,5516,5517],{"class":262}," e:\n",[145,5519,5521,5523,5525,5527,5529,5531,5533,5535,5537,5539,5541,5543],{"class":147,"line":5520},56,[145,5522,5414],{"class":262},[145,5524,266],{"class":258},[145,5526,1218],{"class":262},[145,5528,5289],{"class":155},[145,5530,5292],{"class":258},[145,5532,5295],{"class":262},[145,5534,5298],{"class":258},[145,5536,5301],{"class":262},[145,5538,782],{"class":155},[145,5540,399],{"class":262},[145,5542,5308],{"class":155},[145,5544,405],{"class":262},[145,5546,5548,5550,5552,5554,5557,5559,5562,5564,5567,5569,5571,5573,5575,5577,5579,5581,5583],{"class":147,"line":5547},57,[145,5549,5442],{"class":155},[145,5551,793],{"class":262},[145,5553,439],{"class":258},[145,5555,5556],{"class":159},"\"  Connection error: ",[145,5558,684],{"class":155},[145,5560,5561],{"class":262},"e",[145,5563,690],{"class":155},[145,5565,5566],{"class":159},". Retry ",[145,5568,684],{"class":155},[145,5570,5327],{"class":262},[145,5572,5298],{"class":258},[145,5574,5332],{"class":155},[145,5576,1226],{"class":159},[145,5578,684],{"class":155},[145,5580,5339],{"class":262},[145,5582,690],{"class":155},[145,5584,5344],{"class":159},[145,5586,5588,5590,5592,5594,5596,5598,5600,5602],{"class":147,"line":5587},58,[145,5589,5473],{"class":258},[145,5591,5352],{"class":159},[145,5593,684],{"class":155},[145,5595,5357],{"class":262},[145,5597,5360],{"class":258},[145,5599,690],{"class":155},[145,5601,1024],{"class":159},[145,5603,405],{"class":262},[145,5605,5607],{"class":147,"line":5606},59,[145,5608,5493],{"class":262},[145,5610,5612],{"class":147,"line":5611},60,[145,5613,5499],{"class":258},[145,5615,5617],{"class":147,"line":5616},61,[145,5618,375],{"emptyLinePlaceholder":58},[145,5620,5622,5624,5626,5628,5630,5633,5635,5637,5639,5642],{"class":147,"line":5621},62,[145,5623,996],{"class":258},[145,5625,908],{"class":155},[145,5627,793],{"class":262},[145,5629,439],{"class":258},[145,5631,5632],{"class":159},"\"Failed after ",[145,5634,684],{"class":155},[145,5636,5339],{"class":262},[145,5638,690],{"class":155},[145,5640,5641],{"class":159}," retries\"",[145,5643,405],{"class":262},[11,5645,5646],{},"このコードが処理するもの：",[96,5648,5649,5655,5661,5667,5673],{},[73,5650,5651,5654],{},[23,5652,5653],{},"レート制限（429）"," — 指数バックオフ + ジッターで複数クライアントの同期リトライを防止",[73,5656,5657,5660],{},[23,5658,5659],{},"サーバーエラー（500/502/503）"," — 増加する遅延で自動リトライ",[73,5662,5663,5666],{},[23,5664,5665],{},"タイムアウト"," — 30 秒タイムアウトで応答のないサーバーでのハングを防止",[73,5668,5669,5672],{},[23,5670,5671],{},"接続切断"," — DNS 解決失敗、接続拒否、ネットワークの瞬断",[73,5674,5675,5678],{},[23,5676,5677],{},"クライアントエラー（400/401/402/404/413/422）"," — 即座に失敗（リトライしても不正な入力は修正されない）",[18,5680,5681],{},[11,5682,5683,5685],{},[23,5684,133],{}," プロダクションシステムでは、失敗したリクエストの完全な payload とエラーレスポンスをログに記録することをお勧めします。深夜 3 時に問題が発生したとき、デバッグがはるかに楽になります。",[92,5687,5689],{"id":5688},"api-コール前の入力バリデーション","API コール前の入力バリデーション",[11,5691,5692],{},"API リクエストを送信する前にローカルで明らかなエラーをキャッチし、クレジットと時間を節約します：",[136,5694,5696],{"className":337,"code":5695,"language":339,"meta":141,"style":141},"def validate_payload(payload):\n    \"\"\"\n    API に送信する前に生成 payload をバリデーションします。\n    400 エラーになるよくある間違いをキャッチします。\n    \"\"\"\n    errors = []\n    \n    # 必須フィールド\n    if not payload.get(\"model\"):\n        errors.append(\"'model' is required\")\n    if not payload.get(\"prompt\") or not payload[\"prompt\"].strip():\n        errors.append(\"'prompt' is required and cannot be empty\")\n    \n    # duration の範囲\n    duration = payload.get(\"duration\", 5)\n    if duration \u003C 4 or duration > 15:\n        errors.append(f\"'duration' must be 4-15, got {duration}\")\n    \n    # quality の値\n    valid_qualities = {\"480p\", \"720p\", \"1080p\"}\n    quality = payload.get(\"quality\", \"720p\")\n    if quality not in valid_qualities:\n        errors.append(f\"'quality' must be one of {valid_qualities}, got '{quality}'\")\n    \n    # aspect_ratio の値\n    valid_ratios = {\"16:9\", \"9:16\", \"1:1\", \"4:3\", \"3:4\", \"21:9\"}\n    ratio = payload.get(\"aspect_ratio\", \"16:9\")\n    if ratio not in valid_ratios:\n        errors.append(f\"'aspect_ratio' must be one of {valid_ratios}, got '{ratio}'\")\n    \n    # 画像 URL のバリデーション\n    image_urls = payload.get(\"image_urls\", [])\n    if len(image_urls) > 9:\n        errors.append(f\"Maximum 9 images allowed, got {len(image_urls)}\")\n    for i, url in enumerate(image_urls):\n        if not url.startswith((\"http://\", \"https://\")):\n            errors.append(f\"image_urls[{i}] must be an HTTP(S) URL\")\n    \n    if errors:\n        raise ValueError(f\"Payload validation failed:\\n\" + \"\\n\".join(f\"  - {e}\" for e in errors))\n    \n    return True\n",[28,5697,5698,5708,5712,5717,5722,5726,5736,5740,5745,5760,5770,5796,5805,5809,5814,5832,5857,5876,5880,5885,5907,5925,5941,5971,5975,5980,6016,6034,6048,6077,6081,6086,6101,6118,6139,6154,6174,6196,6200,6207,6262,6266],{"__ignoreMap":141},[145,5699,5700,5702,5705],{"class":147,"line":148},[145,5701,525],{"class":258},[145,5703,5704],{"class":151}," validate_payload",[145,5706,5707],{"class":262},"(payload):\n",[145,5709,5710],{"class":147,"line":166},[145,5711,552],{"class":159},[145,5713,5714],{"class":147,"line":178},[145,5715,5716],{"class":159},"    API に送信する前に生成 payload をバリデーションします。\n",[145,5718,5719],{"class":147,"line":187},[145,5720,5721],{"class":159},"    400 エラーになるよくある間違いをキャッチします。\n",[145,5723,5724],{"class":147,"line":372},[145,5725,552],{"class":159},[145,5727,5728,5731,5733],{"class":147,"line":378},[145,5729,5730],{"class":262},"    errors ",[145,5732,266],{"class":258},[145,5734,5735],{"class":262}," []\n",[145,5737,5738],{"class":147,"line":384},[145,5739,562],{"class":262},[145,5741,5742],{"class":147,"line":408},[145,5743,5744],{"class":174},"    # 必須フィールド\n",[145,5746,5747,5749,5752,5755,5758],{"class":147,"line":419},[145,5748,2505],{"class":258},[145,5750,5751],{"class":258}," not",[145,5753,5754],{"class":262}," payload.get(",[145,5756,5757],{"class":159},"\"model\"",[145,5759,547],{"class":262},[145,5761,5762,5765,5768],{"class":147,"line":430},[145,5763,5764],{"class":262},"        errors.append(",[145,5766,5767],{"class":159},"\"'model' is required\"",[145,5769,405],{"class":262},[145,5771,5772,5774,5776,5778,5781,5783,5786,5788,5791,5793],{"class":147,"line":454},[145,5773,2505],{"class":258},[145,5775,5751],{"class":258},[145,5777,5754],{"class":262},[145,5779,5780],{"class":159},"\"prompt\"",[145,5782,1163],{"class":262},[145,5784,5785],{"class":258},"or",[145,5787,5751],{"class":258},[145,5789,5790],{"class":262}," payload[",[145,5792,5780],{"class":159},[145,5794,5795],{"class":262},"].strip():\n",[145,5797,5798,5800,5803],{"class":147,"line":465},[145,5799,5764],{"class":262},[145,5801,5802],{"class":159},"\"'prompt' is required and cannot be empty\"",[145,5804,405],{"class":262},[145,5806,5807],{"class":147,"line":599},[145,5808,562],{"class":262},[145,5810,5811],{"class":147,"line":604},[145,5812,5813],{"class":174},"    # duration の範囲\n",[145,5815,5816,5819,5821,5823,5826,5828,5830],{"class":147,"line":610},[145,5817,5818],{"class":262},"    duration ",[145,5820,266],{"class":258},[145,5822,5754],{"class":262},[145,5824,5825],{"class":159},"\"duration\"",[145,5827,399],{"class":262},[145,5829,1353],{"class":155},[145,5831,405],{"class":262},[145,5833,5834,5836,5839,5841,5844,5847,5849,5852,5855],{"class":147,"line":616},[145,5835,2505],{"class":258},[145,5837,5838],{"class":262}," duration ",[145,5840,647],{"class":258},[145,5842,5843],{"class":155}," 4",[145,5845,5846],{"class":258}," or",[145,5848,5838],{"class":262},[145,5850,5851],{"class":258},">",[145,5853,5854],{"class":155}," 15",[145,5856,859],{"class":262},[145,5858,5859,5861,5863,5866,5868,5870,5872,5874],{"class":147,"line":622},[145,5860,5764],{"class":262},[145,5862,439],{"class":258},[145,5864,5865],{"class":159},"\"'duration' must be 4-15, got ",[145,5867,684],{"class":155},[145,5869,1776],{"class":262},[145,5871,690],{"class":155},[145,5873,448],{"class":159},[145,5875,405],{"class":262},[145,5877,5878],{"class":147,"line":627},[145,5879,562],{"class":262},[145,5881,5882],{"class":147,"line":638},[145,5883,5884],{"class":174},"    # quality の値\n",[145,5886,5887,5890,5892,5895,5897,5899,5901,5903,5905],{"class":147,"line":653},[145,5888,5889],{"class":262},"    valid_qualities ",[145,5891,266],{"class":258},[145,5893,5894],{"class":262}," {",[145,5896,4012],{"class":159},[145,5898,399],{"class":262},[145,5900,1369],{"class":159},[145,5902,399],{"class":262},[145,5904,3709],{"class":159},[145,5906,468],{"class":262},[145,5908,5909,5912,5914,5916,5919,5921,5923],{"class":147,"line":659},[145,5910,5911],{"class":262},"    quality ",[145,5913,266],{"class":258},[145,5915,5754],{"class":262},[145,5917,5918],{"class":159},"\"quality\"",[145,5920,399],{"class":262},[145,5922,1369],{"class":159},[145,5924,405],{"class":262},[145,5926,5927,5929,5932,5935,5938],{"class":147,"line":670},[145,5928,2505],{"class":258},[145,5930,5931],{"class":262}," quality ",[145,5933,5934],{"class":258},"not",[145,5936,5937],{"class":258}," in",[145,5939,5940],{"class":262}," valid_qualities:\n",[145,5942,5943,5945,5947,5950,5952,5955,5957,5960,5962,5964,5966,5969],{"class":147,"line":697},[145,5944,5764],{"class":262},[145,5946,439],{"class":258},[145,5948,5949],{"class":159},"\"'quality' must be one of ",[145,5951,684],{"class":155},[145,5953,5954],{"class":262},"valid_qualities",[145,5956,690],{"class":155},[145,5958,5959],{"class":159},", got '",[145,5961,684],{"class":155},[145,5963,1784],{"class":262},[145,5965,690],{"class":155},[145,5967,5968],{"class":159},"'\"",[145,5970,405],{"class":262},[145,5972,5973],{"class":147,"line":709},[145,5974,562],{"class":262},[145,5976,5977],{"class":147,"line":715},[145,5978,5979],{"class":174},"    # aspect_ratio の値\n",[145,5981,5982,5985,5987,5989,5991,5993,5995,5997,6000,6002,6005,6007,6010,6012,6014],{"class":147,"line":721},[145,5983,5984],{"class":262},"    valid_ratios ",[145,5986,266],{"class":258},[145,5988,5894],{"class":262},[145,5990,1385],{"class":159},[145,5992,399],{"class":262},[145,5994,3721],{"class":159},[145,5996,399],{"class":262},[145,5998,5999],{"class":159},"\"1:1\"",[145,6001,399],{"class":262},[145,6003,6004],{"class":159},"\"4:3\"",[145,6006,399],{"class":262},[145,6008,6009],{"class":159},"\"3:4\"",[145,6011,399],{"class":262},[145,6013,3832],{"class":159},[145,6015,468],{"class":262},[145,6017,6018,6021,6023,6025,6028,6030,6032],{"class":147,"line":727},[145,6019,6020],{"class":262},"    ratio ",[145,6022,266],{"class":258},[145,6024,5754],{"class":262},[145,6026,6027],{"class":159},"\"aspect_ratio\"",[145,6029,399],{"class":262},[145,6031,1385],{"class":159},[145,6033,405],{"class":262},[145,6035,6036,6038,6041,6043,6045],{"class":147,"line":738},[145,6037,2505],{"class":258},[145,6039,6040],{"class":262}," ratio ",[145,6042,5934],{"class":258},[145,6044,5937],{"class":258},[145,6046,6047],{"class":262}," valid_ratios:\n",[145,6049,6050,6052,6054,6057,6059,6062,6064,6066,6068,6071,6073,6075],{"class":147,"line":743},[145,6051,5764],{"class":262},[145,6053,439],{"class":258},[145,6055,6056],{"class":159},"\"'aspect_ratio' must be one of ",[145,6058,684],{"class":155},[145,6060,6061],{"class":262},"valid_ratios",[145,6063,690],{"class":155},[145,6065,5959],{"class":159},[145,6067,684],{"class":155},[145,6069,6070],{"class":262},"ratio",[145,6072,690],{"class":155},[145,6074,5968],{"class":159},[145,6076,405],{"class":262},[145,6078,6079],{"class":147,"line":749},[145,6080,562],{"class":262},[145,6082,6083],{"class":147,"line":766},[145,6084,6085],{"class":174},"    # 画像 URL のバリデーション\n",[145,6087,6088,6091,6093,6095,6098],{"class":147,"line":787},[145,6089,6090],{"class":262},"    image_urls ",[145,6092,266],{"class":258},[145,6094,5754],{"class":262},[145,6096,6097],{"class":159},"\"image_urls\"",[145,6099,6100],{"class":262},", [])\n",[145,6102,6103,6105,6108,6111,6113,6116],{"class":147,"line":833},[145,6104,2505],{"class":258},[145,6106,6107],{"class":155}," len",[145,6109,6110],{"class":262},"(image_urls) ",[145,6112,5851],{"class":258},[145,6114,6115],{"class":155}," 9",[145,6117,859],{"class":262},[145,6119,6120,6122,6124,6127,6130,6133,6135,6137],{"class":147,"line":838},[145,6121,5764],{"class":262},[145,6123,439],{"class":258},[145,6125,6126],{"class":159},"\"Maximum 9 images allowed, got ",[145,6128,6129],{"class":155},"{len",[145,6131,6132],{"class":262},"(image_urls)",[145,6134,690],{"class":155},[145,6136,448],{"class":159},[145,6138,405],{"class":262},[145,6140,6141,6143,6146,6148,6151],{"class":147,"line":844},[145,6142,4990],{"class":258},[145,6144,6145],{"class":262}," i, url ",[145,6147,1180],{"class":258},[145,6149,6150],{"class":155}," enumerate",[145,6152,6153],{"class":262},"(image_urls):\n",[145,6155,6156,6158,6160,6163,6166,6168,6171],{"class":147,"line":862},[145,6157,847],{"class":258},[145,6159,5751],{"class":258},[145,6161,6162],{"class":262}," url.startswith((",[145,6164,6165],{"class":159},"\"http://\"",[145,6167,399],{"class":262},[145,6169,6170],{"class":159},"\"https://\"",[145,6172,6173],{"class":262},")):\n",[145,6175,6176,6179,6181,6184,6186,6189,6191,6194],{"class":147,"line":871},[145,6177,6178],{"class":262},"            errors.append(",[145,6180,439],{"class":258},[145,6182,6183],{"class":159},"\"image_urls[",[145,6185,684],{"class":155},[145,6187,6188],{"class":262},"i",[145,6190,690],{"class":155},[145,6192,6193],{"class":159},"] must be an HTTP(S) URL\"",[145,6195,405],{"class":262},[145,6197,6198],{"class":147,"line":886},[145,6199,562],{"class":262},[145,6201,6202,6204],{"class":147,"line":902},[145,6203,2505],{"class":258},[145,6205,6206],{"class":262}," errors:\n",[145,6208,6209,6212,6214,6216,6218,6221,6223,6225,6228,6231,6233,6235,6238,6240,6243,6245,6247,6249,6251,6254,6257,6259],{"class":147,"line":914},[145,6210,6211],{"class":258},"        raise",[145,6213,5209],{"class":155},[145,6215,793],{"class":262},[145,6217,439],{"class":258},[145,6219,6220],{"class":159},"\"Payload validation failed:",[145,6222,1671],{"class":155},[145,6224,448],{"class":159},[145,6226,6227],{"class":258}," +",[145,6229,6230],{"class":159}," \"",[145,6232,1671],{"class":155},[145,6234,448],{"class":159},[145,6236,6237],{"class":262},".join(",[145,6239,439],{"class":258},[145,6241,6242],{"class":159},"\"  - ",[145,6244,684],{"class":155},[145,6246,5561],{"class":262},[145,6248,690],{"class":155},[145,6250,448],{"class":159},[145,6252,6253],{"class":258}," for",[145,6255,6256],{"class":262}," e ",[145,6258,1180],{"class":258},[145,6260,6261],{"class":262}," errors))\n",[145,6263,6264],{"class":147,"line":953},[145,6265,562],{"class":262},[145,6267,6268,6270],{"class":147,"line":959},[145,6269,1704],{"class":258},[145,6271,6272],{"class":155}," True\n",[18,6274,6275],{},[11,6276,6277,6279,6280,6283],{},[23,6278,304],{}," 画像 URL の特殊文字を URL エンコードし忘れること。画像パスにスペースや非 ASCII 文字が含まれる場合は、",[28,6281,6282],{},"urllib.parse.quote()"," でエンコードしてください。",[45,6285],{},[48,6287,6289],{"id":6288},"webhook-の設定polling-をスキップ","Webhook の設定（Polling をスキップ）",[11,6291,6292,6293,6296],{},"Polling はスクリプトやプロトタイピングには十分です。プロダクションシステムでは ",[23,6294,6295],{},"webhook"," がより効率的です — 動画が準備できたら API がサーバーに結果をプッシュします。無駄なリクエストなし、完了と通知の間の遅延もなし。",[92,6298,6299],{"id":6299},"仕組み",[11,6301,6302,6303,6305],{},"生成リクエストに ",[28,6304,3599],{}," を追加します：",[11,6307,6308],{},[2619,6309,6310],{},"上記の最初の例と同じセットアップを使用します。",[136,6312,6314],{"className":337,"code":6313,"language":339,"meta":141,"style":141},"payload = {\n    \"model\": \"seedance-2.0\",\n    \"prompt\": \"A spaceship launches from a desert landscape at sunset.\",\n    \"duration\": 8,\n    \"quality\": \"720p\",\n    \"callback_url\": \"https://your-server.com/api/webhook/seedance\"\n}\n\nresponse = requests.post(\n    f\"{BASE_URL}/videos/generations\",\n    headers=HEADERS,\n    json=payload\n)\ntask = response.json()\nprint(f\"Task submitted: {task['id']}\")\n# Polling 不要 — webhook が結果を受信します\n",[28,6315,6316,6324,6334,6345,6355,6365,6375,6379,6383,6392,6405,6416,6425,6429,6438,6464],{"__ignoreMap":141},[145,6317,6318,6320,6322],{"class":147,"line":148},[145,6319,3660],{"class":262},[145,6321,266],{"class":258},[145,6323,427],{"class":262},[145,6325,6326,6328,6330,6332],{"class":147,"line":166},[145,6327,3669],{"class":159},[145,6329,436],{"class":262},[145,6331,1309],{"class":159},[145,6333,451],{"class":262},[145,6335,6336,6338,6340,6343],{"class":147,"line":178},[145,6337,3680],{"class":159},[145,6339,436],{"class":262},[145,6341,6342],{"class":159},"\"A spaceship launches from a desert landscape at sunset.\"",[145,6344,451],{"class":262},[145,6346,6347,6349,6351,6353],{"class":147,"line":187},[145,6348,3692],{"class":159},[145,6350,436],{"class":262},[145,6352,3697],{"class":155},[145,6354,451],{"class":262},[145,6356,6357,6359,6361,6363],{"class":147,"line":372},[145,6358,3704],{"class":159},[145,6360,436],{"class":262},[145,6362,1369],{"class":159},[145,6364,451],{"class":262},[145,6366,6367,6370,6372],{"class":147,"line":378},[145,6368,6369],{"class":159},"    \"callback_url\"",[145,6371,436],{"class":262},[145,6373,6374],{"class":159},"\"https://your-server.com/api/webhook/seedance\"\n",[145,6376,6377],{"class":147,"line":384},[145,6378,468],{"class":262},[145,6380,6381],{"class":147,"line":408},[145,6382,375],{"emptyLinePlaceholder":58},[145,6384,6385,6388,6390],{"class":147,"line":419},[145,6386,6387],{"class":262},"response ",[145,6389,266],{"class":258},[145,6391,1433],{"class":262},[145,6393,6394,6397,6399,6401,6403],{"class":147,"line":430},[145,6395,6396],{"class":258},"    f",[145,6398,448],{"class":159},[145,6400,678],{"class":155},[145,6402,1445],{"class":159},[145,6404,451],{"class":262},[145,6406,6407,6410,6412,6414],{"class":147,"line":454},[145,6408,6409],{"class":700},"    headers",[145,6411,266],{"class":258},[145,6413,422],{"class":155},[145,6415,451],{"class":262},[145,6417,6418,6421,6423],{"class":147,"line":465},[145,6419,6420],{"class":700},"    json",[145,6422,266],{"class":258},[145,6424,2788],{"class":262},[145,6426,6427],{"class":147,"line":599},[145,6428,405],{"class":262},[145,6430,6431,6434,6436],{"class":147,"line":604},[145,6432,6433],{"class":262},"task ",[145,6435,266],{"class":258},[145,6437,735],{"class":262},[145,6439,6440,6443,6445,6447,6450,6452,6454,6456,6458,6460,6462],{"class":147,"line":610},[145,6441,6442],{"class":155},"print",[145,6444,793],{"class":262},[145,6446,439],{"class":258},[145,6448,6449],{"class":159},"\"Task submitted: ",[145,6451,684],{"class":155},[145,6453,1530],{"class":262},[145,6455,1533],{"class":159},[145,6457,1536],{"class":262},[145,6459,690],{"class":155},[145,6461,448],{"class":159},[145,6463,405],{"class":262},[145,6465,6466],{"class":147,"line":616},[145,6467,6468],{"class":174},"# Polling 不要 — webhook が結果を受信します\n",[11,6470,6471,6472,6474],{},"動画が準備できると、API が ",[28,6473,3599],{}," に完了した task オブジェクトを含む POST リクエストを送信します — polling で取得するものとまったく同じ内容です。",[92,6476,6478],{"id":6477},"webhook-の要件","Webhook の要件",[2037,6480,6481,6491],{},[2040,6482,6483],{},[2043,6484,6485,6488],{},[2046,6486,6487],{},"要件",[2046,6489,6490],{},"詳細",[2053,6492,6493,6501,6509,6517,6525,6533],{},[2043,6494,6495,6498],{},[2058,6496,6497],{},"プロトコル",[2058,6499,6500],{},"HTTPS のみ（HTTP 不可）— セキュリティ要件",[2043,6502,6503,6506],{},[2058,6504,6505],{},"レスポンス",[2058,6507,6508],{},"10 秒以内に 2xx を返す",[2043,6510,6511,6514],{},[2058,6512,6513],{},"リトライ",[2058,6515,6516],{},"失敗時 3 回リトライ（1 秒、2 秒、4 秒間隔）",[2043,6518,6519,6522],{},[2058,6520,6521],{},"URL 長",[2058,6523,6524],{},"≤ 2048 文字",[2043,6526,6527,6530],{},[2058,6528,6529],{},"ネットワーク",[2058,6531,6532],{},"内部/プライベート IP 不可（localhost、10.x.x.x、192.168.x.x）",[2043,6534,6535,6538],{},[2058,6536,6537],{},"ボディ",[2058,6539,6540],{},"完全な task オブジェクトを含む JSON POST",[92,6542,6544],{"id":6543},"プロダクション-flask-webhook-レシーバー","プロダクション Flask Webhook レシーバー",[11,6546,6547],{},"適切なバリデーション、エラー処理、非同期動画ダウンロードを備えた完全な webhook サーバー：",[136,6549,6551],{"className":337,"code":6550,"language":339,"meta":141,"style":141},"# webhook_server.py\n\"\"\"\nSeedance webhook レシーバー — 動画生成完了コールバックを処理します。\n実行：pip install flask requests\n      python webhook_server.py\n\"\"\"\nfrom flask import Flask, request, jsonify\nimport json\nimport os\nimport threading\nimport requests as req  # flask.request との競合を避けるためリネーム\n\napp = Flask(__name__)\n\n# 完了した動画を保存するディレクトリ\nOUTPUT_DIR = os.getenv(\"VIDEO_OUTPUT_DIR\", \"./videos\")\nos.makedirs(OUTPUT_DIR, exist_ok=True)\n\n\ndef download_video_async(video_url, task_id):\n    \"\"\"バックグラウンドスレッドで動画をダウンロードし、webhook のレスポンスをブロックしないようにします。\"\"\"\n    try:\n        filename = os.path.join(OUTPUT_DIR, f\"{task_id}.mp4\")\n        print(f\"  Downloading {task_id} to {filename}...\")\n        resp = req.get(video_url, stream=True, timeout=120)\n        resp.raise_for_status()\n        with open(filename, \"wb\") as f:\n            for chunk in resp.iter_content(chunk_size=8192):\n                f.write(chunk)\n        size_mb = os.path.getsize(filename) / (1024 * 1024)\n        print(f\"  Saved: {filename} ({size_mb:.1f} MB)\")\n    except Exception as e:\n        print(f\"  Download failed for {task_id}: {e}\")\n\n\n@app.route(\"/api/webhook/seedance\", methods=[\"POST\"])\ndef handle_webhook():\n    \"\"\"\n    Seedance 動画生成完了の webhook を処理します。\n    \n    動画生成が完了（成功または失敗）すると、\n    API が完全な task オブジェクトを含む POST を送信します。\n    \"\"\"\n    # 受信した task オブジェクトをパース\n    task = request.json\n    if not task:\n        return jsonify({\"error\": \"Empty body\"}), 400\n    \n    task_id = task.get(\"id\", \"unknown\")\n    status = task.get(\"status\", \"unknown\")\n    model = task.get(\"model\", \"unknown\")\n\n    print(f\"\\n{'='*50}\")\n    print(f\"Webhook received: task={task_id}\")\n    print(f\"  Status: {status}\")\n    print(f\"  Model: {model}\")\n\n    if status == \"completed\":\n        # results から動画 URL を抽出\n        results = task.get(\"results\", [])\n        if results:\n            video_url = results[0]\n            print(f\"  Video URL: {video_url}\")\n            \n            # バックグラウンドスレッドでダウンロードし、素早くレスポンス\n            thread = threading.Thread(\n                target=download_video_async,\n                args=(video_url, task_id)\n            )\n            thread.start()\n        else:\n            print(f\"  WARNING: Completed but no results array!\")\n\n    elif status == \"failed\":\n        error_info = task.get(\"error\", {})\n        print(f\"  FAILED: {json.dumps(error_info, indent=2)}\")\n        # TODO: エラートラッキングシステムに記録（Sentry など）\n        # TODO: オプションでパラメータを修正して再生成\n\n    else:\n        print(f\"  Unexpected status: {status}\")\n        print(f\"  Full payload: {json.dumps(task, indent=2)}\")\n\n    # 常に素早く 200 を返す — API は 10 秒以内のレスポンスを期待\n    return jsonify({\"received\": True, \"task_id\": task_id}), 200\n\n\n@app.route(\"/health\", methods=[\"GET\"])\ndef health_check():\n    \"\"\"ロードバランサー用ヘルスチェックエンドポイント。\"\"\"\n    return jsonify({\"status\": \"ok\"}), 200\n\n\nif __name__ == \"__main__\":\n    print(f\"Starting webhook server...\")\n    print(f\"Videos will be saved to: {os.path.abspath(OUTPUT_DIR)}\")\n    print(f\"Webhook URL: http://localhost:5000/api/webhook/seedance\")\n    app.run(host=\"0.0.0.0\", port=5000, debug=True)\n",[28,6552,6553,6558,6563,6568,6573,6578,6582,6595,6601,6607,6614,6629,6633,6648,6652,6657,6676,6694,6698,6702,6712,6717,6724,6753,6783,6810,6815,6832,6851,6856,6880,6913,6926,6955,6959,6963,6988,6997,7001,7006,7010,7015,7020,7024,7029,7038,7047,7068,7072,7090,7107,7124,7128,7154,7175,7196,7217,7221,7233,7238,7251,7258,7272,7294,7300,7306,7317,7328,7339,7344,7350,7358,7372,7377,7391,7405,7437,7449,7459,7464,7471,7493,7524,7529,7535,7560,7565,7570,7593,7603,7609,7627,7632,7637,7650,7664,7691,7705],{"__ignoreMap":141},[145,6554,6555],{"class":147,"line":148},[145,6556,6557],{"class":174},"# webhook_server.py\n",[145,6559,6560],{"class":147,"line":166},[145,6561,6562],{"class":159},"\"\"\"\n",[145,6564,6565],{"class":147,"line":178},[145,6566,6567],{"class":159},"Seedance webhook レシーバー — 動画生成完了コールバックを処理します。\n",[145,6569,6570],{"class":147,"line":187},[145,6571,6572],{"class":159},"実行：pip install flask requests\n",[145,6574,6575],{"class":147,"line":372},[145,6576,6577],{"class":159},"      python webhook_server.py\n",[145,6579,6580],{"class":147,"line":378},[145,6581,6562],{"class":159},[145,6583,6584,6587,6590,6592],{"class":147,"line":384},[145,6585,6586],{"class":258},"from",[145,6588,6589],{"class":262}," flask ",[145,6591,346],{"class":258},[145,6593,6594],{"class":262}," Flask, request, jsonify\n",[145,6596,6597,6599],{"class":147,"line":408},[145,6598,346],{"class":258},[145,6600,369],{"class":262},[145,6602,6603,6605],{"class":147,"line":419},[145,6604,346],{"class":258},[145,6606,362],{"class":262},[145,6608,6609,6611],{"class":147,"line":430},[145,6610,346],{"class":258},[145,6612,6613],{"class":262}," threading\n",[145,6615,6616,6618,6621,6623,6626],{"class":147,"line":454},[145,6617,346],{"class":258},[145,6619,6620],{"class":262}," requests ",[145,6622,1166],{"class":258},[145,6624,6625],{"class":262}," req  ",[145,6627,6628],{"class":174},"# flask.request との競合を避けるためリネーム\n",[145,6630,6631],{"class":147,"line":465},[145,6632,375],{"emptyLinePlaceholder":58},[145,6634,6635,6638,6640,6643,6646],{"class":147,"line":599},[145,6636,6637],{"class":262},"app ",[145,6639,266],{"class":258},[145,6641,6642],{"class":262}," Flask(",[145,6644,6645],{"class":155},"__name__",[145,6647,405],{"class":262},[145,6649,6650],{"class":147,"line":604},[145,6651,375],{"emptyLinePlaceholder":58},[145,6653,6654],{"class":147,"line":610},[145,6655,6656],{"class":174},"# 完了した動画を保存するディレクトリ\n",[145,6658,6659,6662,6664,6666,6669,6671,6674],{"class":147,"line":616},[145,6660,6661],{"class":155},"OUTPUT_DIR",[145,6663,390],{"class":258},[145,6665,393],{"class":262},[145,6667,6668],{"class":159},"\"VIDEO_OUTPUT_DIR\"",[145,6670,399],{"class":262},[145,6672,6673],{"class":159},"\"./videos\"",[145,6675,405],{"class":262},[145,6677,6678,6681,6683,6685,6688,6690,6692],{"class":147,"line":622},[145,6679,6680],{"class":262},"os.makedirs(",[145,6682,6661],{"class":155},[145,6684,399],{"class":262},[145,6686,6687],{"class":700},"exist_ok",[145,6689,266],{"class":258},[145,6691,1139],{"class":155},[145,6693,405],{"class":262},[145,6695,6696],{"class":147,"line":627},[145,6697,375],{"emptyLinePlaceholder":58},[145,6699,6700],{"class":147,"line":638},[145,6701,375],{"emptyLinePlaceholder":58},[145,6703,6704,6706,6709],{"class":147,"line":653},[145,6705,525],{"class":258},[145,6707,6708],{"class":151}," download_video_async",[145,6710,6711],{"class":262},"(video_url, task_id):\n",[145,6713,6714],{"class":147,"line":659},[145,6715,6716],{"class":159},"    \"\"\"バックグラウンドスレッドで動画をダウンロードし、webhook のレスポンスをブロックしないようにします。\"\"\"\n",[145,6718,6719,6722],{"class":147,"line":670},[145,6720,6721],{"class":258},"    try",[145,6723,859],{"class":262},[145,6725,6726,6729,6731,6734,6736,6738,6740,6742,6744,6746,6748,6751],{"class":147,"line":697},[145,6727,6728],{"class":262},"        filename ",[145,6730,266],{"class":258},[145,6732,6733],{"class":262}," os.path.join(",[145,6735,6661],{"class":155},[145,6737,399],{"class":262},[145,6739,439],{"class":258},[145,6741,448],{"class":159},[145,6743,684],{"class":155},[145,6745,687],{"class":262},[145,6747,690],{"class":155},[145,6749,6750],{"class":159},".mp4\"",[145,6752,405],{"class":262},[145,6754,6755,6757,6759,6761,6764,6766,6768,6770,6773,6775,6777,6779,6781],{"class":147,"line":709},[145,6756,790],{"class":155},[145,6758,793],{"class":262},[145,6760,439],{"class":258},[145,6762,6763],{"class":159},"\"  Downloading ",[145,6765,684],{"class":155},[145,6767,687],{"class":262},[145,6769,690],{"class":155},[145,6771,6772],{"class":159}," to ",[145,6774,684],{"class":155},[145,6776,1114],{"class":262},[145,6778,690],{"class":155},[145,6780,1119],{"class":159},[145,6782,405],{"class":262},[145,6784,6785,6788,6790,6793,6795,6797,6799,6801,6803,6805,6808],{"class":147,"line":715},[145,6786,6787],{"class":262},"        resp ",[145,6789,266],{"class":258},[145,6791,6792],{"class":262}," req.get(video_url, ",[145,6794,1134],{"class":700},[145,6796,266],{"class":258},[145,6798,1139],{"class":155},[145,6800,399],{"class":262},[145,6802,1019],{"class":700},[145,6804,266],{"class":258},[145,6806,6807],{"class":155},"120",[145,6809,405],{"class":262},[145,6811,6812],{"class":147,"line":721},[145,6813,6814],{"class":262},"        resp.raise_for_status()\n",[145,6816,6817,6820,6822,6824,6826,6828,6830],{"class":147,"line":727},[145,6818,6819],{"class":258},"        with",[145,6821,1154],{"class":155},[145,6823,1157],{"class":262},[145,6825,1160],{"class":159},[145,6827,1163],{"class":262},[145,6829,1166],{"class":258},[145,6831,1169],{"class":262},[145,6833,6834,6837,6839,6841,6843,6845,6847,6849],{"class":147,"line":738},[145,6835,6836],{"class":258},"            for",[145,6838,1177],{"class":262},[145,6840,1180],{"class":258},[145,6842,1183],{"class":262},[145,6844,1186],{"class":700},[145,6846,266],{"class":258},[145,6848,1191],{"class":155},[145,6850,547],{"class":262},[145,6852,6853],{"class":147,"line":743},[145,6854,6855],{"class":262},"                f.write(chunk)\n",[145,6857,6858,6861,6863,6866,6868,6870,6873,6876,6878],{"class":147,"line":749},[145,6859,6860],{"class":262},"        size_mb ",[145,6862,266],{"class":258},[145,6864,6865],{"class":262}," os.path.getsize(filename) ",[145,6867,1226],{"class":258},[145,6869,1218],{"class":262},[145,6871,6872],{"class":155},"1024",[145,6874,6875],{"class":258}," *",[145,6877,1229],{"class":155},[145,6879,405],{"class":262},[145,6881,6882,6884,6886,6888,6891,6893,6895,6897,6899,6901,6904,6906,6908,6911],{"class":147,"line":766},[145,6883,790],{"class":155},[145,6885,793],{"class":262},[145,6887,439],{"class":258},[145,6889,6890],{"class":159},"\"  Saved: ",[145,6892,684],{"class":155},[145,6894,1114],{"class":262},[145,6896,690],{"class":155},[145,6898,1218],{"class":159},[145,6900,684],{"class":155},[145,6902,6903],{"class":262},"size_mb",[145,6905,5360],{"class":258},[145,6907,690],{"class":155},[145,6909,6910],{"class":159}," MB)\"",[145,6912,405],{"class":262},[145,6914,6915,6918,6921,6924],{"class":147,"line":787},[145,6916,6917],{"class":258},"    except",[145,6919,6920],{"class":155}," Exception",[145,6922,6923],{"class":258}," as",[145,6925,5517],{"class":262},[145,6927,6928,6930,6932,6934,6937,6939,6941,6943,6945,6947,6949,6951,6953],{"class":147,"line":833},[145,6929,790],{"class":155},[145,6931,793],{"class":262},[145,6933,439],{"class":258},[145,6935,6936],{"class":159},"\"  Download failed for ",[145,6938,684],{"class":155},[145,6940,687],{"class":262},[145,6942,690],{"class":155},[145,6944,436],{"class":159},[145,6946,684],{"class":155},[145,6948,5561],{"class":262},[145,6950,690],{"class":155},[145,6952,448],{"class":159},[145,6954,405],{"class":262},[145,6956,6957],{"class":147,"line":838},[145,6958,375],{"emptyLinePlaceholder":58},[145,6960,6961],{"class":147,"line":844},[145,6962,375],{"emptyLinePlaceholder":58},[145,6964,6965,6968,6970,6973,6975,6978,6980,6983,6986],{"class":147,"line":862},[145,6966,6967],{"class":151},"@app.route",[145,6969,793],{"class":262},[145,6971,6972],{"class":159},"\"/api/webhook/seedance\"",[145,6974,399],{"class":262},[145,6976,6977],{"class":700},"methods",[145,6979,266],{"class":258},[145,6981,6982],{"class":262},"[",[145,6984,6985],{"class":159},"\"POST\"",[145,6987,1630],{"class":262},[145,6989,6990,6992,6995],{"class":147,"line":871},[145,6991,525],{"class":258},[145,6993,6994],{"class":151}," handle_webhook",[145,6996,1290],{"class":262},[145,6998,6999],{"class":147,"line":886},[145,7000,552],{"class":159},[145,7002,7003],{"class":147,"line":902},[145,7004,7005],{"class":159},"    Seedance 動画生成完了の webhook を処理します。\n",[145,7007,7008],{"class":147,"line":914},[145,7009,562],{"class":159},[145,7011,7012],{"class":147,"line":953},[145,7013,7014],{"class":159},"    動画生成が完了（成功または失敗）すると、\n",[145,7016,7017],{"class":147,"line":959},[145,7018,7019],{"class":159},"    API が完全な task オブジェクトを含む POST を送信します。\n",[145,7021,7022],{"class":147,"line":964},[145,7023,552],{"class":159},[145,7025,7026],{"class":147,"line":970},[145,7027,7028],{"class":174},"    # 受信した task オブジェクトをパース\n",[145,7030,7031,7033,7035],{"class":147,"line":976},[145,7032,1497],{"class":262},[145,7034,266],{"class":258},[145,7036,7037],{"class":262}," request.json\n",[145,7039,7040,7042,7044],{"class":147,"line":988},[145,7041,2505],{"class":258},[145,7043,5751],{"class":258},[145,7045,7046],{"class":262}," task:\n",[145,7048,7049,7052,7055,7057,7059,7062,7065],{"class":147,"line":993},[145,7050,7051],{"class":258},"        return",[145,7053,7054],{"class":262}," jsonify({",[145,7056,896],{"class":159},[145,7058,436],{"class":262},[145,7060,7061],{"class":159},"\"Empty body\"",[145,7063,7064],{"class":262},"}), ",[145,7066,7067],{"class":155},"400\n",[145,7069,7070],{"class":147,"line":5402},[145,7071,562],{"class":262},[145,7073,7074,7077,7079,7081,7083,7085,7088],{"class":147,"line":5411},[145,7075,7076],{"class":262},"    task_id ",[145,7078,266],{"class":258},[145,7080,774],{"class":262},[145,7082,1627],{"class":159},[145,7084,399],{"class":262},[145,7086,7087],{"class":159},"\"unknown\"",[145,7089,405],{"class":262},[145,7091,7092,7095,7097,7099,7101,7103,7105],{"class":147,"line":5439},[145,7093,7094],{"class":262},"    status ",[145,7096,266],{"class":258},[145,7098,774],{"class":262},[145,7100,760],{"class":159},[145,7102,399],{"class":262},[145,7104,7087],{"class":159},[145,7106,405],{"class":262},[145,7108,7109,7112,7114,7116,7118,7120,7122],{"class":147,"line":5470},[145,7110,7111],{"class":262},"    model ",[145,7113,266],{"class":258},[145,7115,774],{"class":262},[145,7117,5757],{"class":159},[145,7119,399],{"class":262},[145,7121,7087],{"class":159},[145,7123,405],{"class":262},[145,7125,7126],{"class":147,"line":5490},[145,7127,375],{"emptyLinePlaceholder":58},[145,7129,7130,7132,7134,7136,7138,7141,7144,7147,7150,7152],{"class":147,"line":5496},[145,7131,1102],{"class":155},[145,7133,793],{"class":262},[145,7135,439],{"class":258},[145,7137,448],{"class":159},[145,7139,7140],{"class":155},"\\n{",[145,7142,7143],{"class":159},"'='",[145,7145,7146],{"class":258},"*",[145,7148,7149],{"class":155},"50}",[145,7151,448],{"class":159},[145,7153,405],{"class":262},[145,7155,7156,7158,7160,7162,7165,7167,7169,7171,7173],{"class":147,"line":5502},[145,7157,1102],{"class":155},[145,7159,793],{"class":262},[145,7161,439],{"class":258},[145,7163,7164],{"class":159},"\"Webhook received: task=",[145,7166,684],{"class":155},[145,7168,687],{"class":262},[145,7170,690],{"class":155},[145,7172,448],{"class":159},[145,7174,405],{"class":262},[145,7176,7177,7179,7181,7183,7186,7188,7190,7192,7194],{"class":147,"line":5507},[145,7178,1102],{"class":155},[145,7180,793],{"class":262},[145,7182,439],{"class":258},[145,7184,7185],{"class":159},"\"  Status: ",[145,7187,684],{"class":155},[145,7189,813],{"class":262},[145,7191,690],{"class":155},[145,7193,448],{"class":159},[145,7195,405],{"class":262},[145,7197,7198,7200,7202,7204,7207,7209,7211,7213,7215],{"class":147,"line":5520},[145,7199,1102],{"class":155},[145,7201,793],{"class":262},[145,7203,439],{"class":258},[145,7205,7206],{"class":159},"\"  Model: ",[145,7208,684],{"class":155},[145,7210,1748],{"class":262},[145,7212,690],{"class":155},[145,7214,448],{"class":159},[145,7216,405],{"class":262},[145,7218,7219],{"class":147,"line":5547},[145,7220,375],{"emptyLinePlaceholder":58},[145,7222,7223,7225,7227,7229,7231],{"class":147,"line":5587},[145,7224,2505],{"class":258},[145,7226,850],{"class":262},[145,7228,853],{"class":258},[145,7230,856],{"class":159},[145,7232,859],{"class":262},[145,7234,7235],{"class":147,"line":5606},[145,7236,7237],{"class":174},"        # results から動画 URL を抽出\n",[145,7239,7240,7243,7245,7247,7249],{"class":147,"line":5611},[145,7241,7242],{"class":262},"        results ",[145,7244,266],{"class":258},[145,7246,774],{"class":262},[145,7248,1652],{"class":159},[145,7250,6100],{"class":262},[145,7252,7253,7255],{"class":147,"line":5616},[145,7254,847],{"class":258},[145,7256,7257],{"class":262}," results:\n",[145,7259,7260,7263,7265,7268,7270],{"class":147,"line":5621},[145,7261,7262],{"class":262},"            video_url ",[145,7264,266],{"class":258},[145,7266,7267],{"class":262}," results[",[145,7269,782],{"class":155},[145,7271,763],{"class":262},[145,7273,7275,7277,7279,7281,7284,7286,7288,7290,7292],{"class":147,"line":7274},63,[145,7276,5442],{"class":155},[145,7278,793],{"class":262},[145,7280,439],{"class":258},[145,7282,7283],{"class":159},"\"  Video URL: ",[145,7285,684],{"class":155},[145,7287,1679],{"class":262},[145,7289,690],{"class":155},[145,7291,448],{"class":159},[145,7293,405],{"class":262},[145,7295,7297],{"class":147,"line":7296},64,[145,7298,7299],{"class":262},"            \n",[145,7301,7303],{"class":147,"line":7302},65,[145,7304,7305],{"class":174},"            # バックグラウンドスレッドでダウンロードし、素早くレスポンス\n",[145,7307,7309,7312,7314],{"class":147,"line":7308},66,[145,7310,7311],{"class":262},"            thread ",[145,7313,266],{"class":258},[145,7315,7316],{"class":262}," threading.Thread(\n",[145,7318,7320,7323,7325],{"class":147,"line":7319},67,[145,7321,7322],{"class":700},"                target",[145,7324,266],{"class":258},[145,7326,7327],{"class":262},"download_video_async,\n",[145,7329,7331,7334,7336],{"class":147,"line":7330},68,[145,7332,7333],{"class":700},"                args",[145,7335,266],{"class":258},[145,7337,7338],{"class":262},"(video_url, task_id)\n",[145,7340,7342],{"class":147,"line":7341},69,[145,7343,956],{"class":262},[145,7345,7347],{"class":147,"line":7346},70,[145,7348,7349],{"class":262},"            thread.start()\n",[145,7351,7353,7356],{"class":147,"line":7352},71,[145,7354,7355],{"class":258},"        else",[145,7357,859],{"class":262},[145,7359,7361,7363,7365,7367,7370],{"class":147,"line":7360},72,[145,7362,5442],{"class":155},[145,7364,793],{"class":262},[145,7366,439],{"class":258},[145,7368,7369],{"class":159},"\"  WARNING: Completed but no results array!\"",[145,7371,405],{"class":262},[145,7373,7375],{"class":147,"line":7374},73,[145,7376,375],{"emptyLinePlaceholder":58},[145,7378,7380,7383,7385,7387,7389],{"class":147,"line":7379},74,[145,7381,7382],{"class":258},"    elif",[145,7384,850],{"class":262},[145,7386,853],{"class":258},[145,7388,881],{"class":159},[145,7390,859],{"class":262},[145,7392,7394,7397,7399,7401,7403],{"class":147,"line":7393},75,[145,7395,7396],{"class":262},"        error_info ",[145,7398,266],{"class":258},[145,7400,774],{"class":262},[145,7402,896],{"class":159},[145,7404,899],{"class":262},[145,7406,7408,7410,7412,7414,7417,7419,7422,7425,7427,7429,7431,7433,7435],{"class":147,"line":7407},76,[145,7409,790],{"class":155},[145,7411,793],{"class":262},[145,7413,439],{"class":258},[145,7415,7416],{"class":159},"\"  FAILED: ",[145,7418,684],{"class":155},[145,7420,7421],{"class":262},"json.dumps(error_info, ",[145,7423,7424],{"class":700},"indent",[145,7426,266],{"class":258},[145,7428,5289],{"class":155},[145,7430,945],{"class":262},[145,7432,690],{"class":155},[145,7434,448],{"class":159},[145,7436,405],{"class":262},[145,7438,7440,7443,7446],{"class":147,"line":7439},77,[145,7441,7442],{"class":174},"        # ",[145,7444,7445],{"class":258},"TODO",[145,7447,7448],{"class":174},": エラートラッキングシステムに記録（Sentry など）\n",[145,7450,7452,7454,7456],{"class":147,"line":7451},78,[145,7453,7442],{"class":174},[145,7455,7445],{"class":258},[145,7457,7458],{"class":174},": オプションでパラメータを修正して再生成\n",[145,7460,7462],{"class":147,"line":7461},79,[145,7463,375],{"emptyLinePlaceholder":58},[145,7465,7467,7469],{"class":147,"line":7466},80,[145,7468,2541],{"class":258},[145,7470,859],{"class":262},[145,7472,7474,7476,7478,7480,7483,7485,7487,7489,7491],{"class":147,"line":7473},81,[145,7475,790],{"class":155},[145,7477,793],{"class":262},[145,7479,439],{"class":258},[145,7481,7482],{"class":159},"\"  Unexpected status: ",[145,7484,684],{"class":155},[145,7486,813],{"class":262},[145,7488,690],{"class":155},[145,7490,448],{"class":159},[145,7492,405],{"class":262},[145,7494,7496,7498,7500,7502,7505,7507,7510,7512,7514,7516,7518,7520,7522],{"class":147,"line":7495},82,[145,7497,790],{"class":155},[145,7499,793],{"class":262},[145,7501,439],{"class":258},[145,7503,7504],{"class":159},"\"  Full payload: ",[145,7506,684],{"class":155},[145,7508,7509],{"class":262},"json.dumps(task, ",[145,7511,7424],{"class":700},[145,7513,266],{"class":258},[145,7515,5289],{"class":155},[145,7517,945],{"class":262},[145,7519,690],{"class":155},[145,7521,448],{"class":159},[145,7523,405],{"class":262},[145,7525,7527],{"class":147,"line":7526},83,[145,7528,375],{"emptyLinePlaceholder":58},[145,7530,7532],{"class":147,"line":7531},84,[145,7533,7534],{"class":174},"    # 常に素早く 200 を返す — API は 10 秒以内のレスポンスを期待\n",[145,7536,7538,7540,7542,7545,7547,7549,7551,7554,7557],{"class":147,"line":7537},85,[145,7539,1704],{"class":258},[145,7541,7054],{"class":262},[145,7543,7544],{"class":159},"\"received\"",[145,7546,436],{"class":262},[145,7548,1139],{"class":155},[145,7550,399],{"class":262},[145,7552,7553],{"class":159},"\"task_id\"",[145,7555,7556],{"class":262},": task_id}), ",[145,7558,7559],{"class":155},"200\n",[145,7561,7563],{"class":147,"line":7562},86,[145,7564,375],{"emptyLinePlaceholder":58},[145,7566,7568],{"class":147,"line":7567},87,[145,7569,375],{"emptyLinePlaceholder":58},[145,7571,7573,7575,7577,7580,7582,7584,7586,7588,7591],{"class":147,"line":7572},88,[145,7574,6967],{"class":151},[145,7576,793],{"class":262},[145,7578,7579],{"class":159},"\"/health\"",[145,7581,399],{"class":262},[145,7583,6977],{"class":700},[145,7585,266],{"class":258},[145,7587,6982],{"class":262},[145,7589,7590],{"class":159},"\"GET\"",[145,7592,1630],{"class":262},[145,7594,7596,7598,7601],{"class":147,"line":7595},89,[145,7597,525],{"class":258},[145,7599,7600],{"class":151}," health_check",[145,7602,1290],{"class":262},[145,7604,7606],{"class":147,"line":7605},90,[145,7607,7608],{"class":159},"    \"\"\"ロードバランサー用ヘルスチェックエンドポイント。\"\"\"\n",[145,7610,7612,7614,7616,7618,7620,7623,7625],{"class":147,"line":7611},91,[145,7613,1704],{"class":258},[145,7615,7054],{"class":262},[145,7617,760],{"class":159},[145,7619,436],{"class":262},[145,7621,7622],{"class":159},"\"ok\"",[145,7624,7064],{"class":262},[145,7626,7559],{"class":155},[145,7628,7630],{"class":147,"line":7629},92,[145,7631,375],{"emptyLinePlaceholder":58},[145,7633,7635],{"class":147,"line":7634},93,[145,7636,375],{"emptyLinePlaceholder":58},[145,7638,7640,7642,7644,7646,7648],{"class":147,"line":7639},94,[145,7641,1720],{"class":258},[145,7643,1723],{"class":155},[145,7645,1726],{"class":258},[145,7647,1729],{"class":159},[145,7649,859],{"class":262},[145,7651,7653,7655,7657,7659,7662],{"class":147,"line":7652},95,[145,7654,1102],{"class":155},[145,7656,793],{"class":262},[145,7658,439],{"class":258},[145,7660,7661],{"class":159},"\"Starting webhook server...\"",[145,7663,405],{"class":262},[145,7665,7667,7669,7671,7673,7676,7678,7681,7683,7685,7687,7689],{"class":147,"line":7666},96,[145,7668,1102],{"class":155},[145,7670,793],{"class":262},[145,7672,439],{"class":258},[145,7674,7675],{"class":159},"\"Videos will be saved to: ",[145,7677,684],{"class":155},[145,7679,7680],{"class":262},"os.path.abspath(",[145,7682,6661],{"class":155},[145,7684,945],{"class":262},[145,7686,690],{"class":155},[145,7688,448],{"class":159},[145,7690,405],{"class":262},[145,7692,7694,7696,7698,7700,7703],{"class":147,"line":7693},97,[145,7695,1102],{"class":155},[145,7697,793],{"class":262},[145,7699,439],{"class":258},[145,7701,7702],{"class":159},"\"Webhook URL: http://localhost:5000/api/webhook/seedance\"",[145,7704,405],{"class":262},[145,7706,7708,7711,7714,7716,7719,7721,7724,7726,7729,7731,7734,7736,7738],{"class":147,"line":7707},98,[145,7709,7710],{"class":262},"    app.run(",[145,7712,7713],{"class":700},"host",[145,7715,266],{"class":258},[145,7717,7718],{"class":159},"\"0.0.0.0\"",[145,7720,399],{"class":262},[145,7722,7723],{"class":700},"port",[145,7725,266],{"class":258},[145,7727,7728],{"class":155},"5000",[145,7730,399],{"class":262},[145,7732,7733],{"class":700},"debug",[145,7735,266],{"class":258},[145,7737,1139],{"class":155},[145,7739,405],{"class":262},[11,7741,7742],{},"依存関係のインストールと実行：",[136,7744,7746],{"className":138,"code":7745,"language":140,"meta":141,"style":141},"pip install flask requests\npython webhook_server.py\n",[28,7747,7748,7759],{"__ignoreMap":141},[145,7749,7750,7752,7754,7757],{"class":147,"line":148},[145,7751,190],{"class":151},[145,7753,193],{"class":159},[145,7755,7756],{"class":159}," flask",[145,7758,328],{"class":159},[145,7760,7761,7763],{"class":147,"line":166},[145,7762,339],{"class":151},[145,7764,7765],{"class":159}," webhook_server.py\n",[11,7767,7768],{},"このサーバーの主な設計判断：",[96,7770,7771,7781,7790],{},[73,7772,7773,7776,7777,7780],{},[23,7774,7775],{},"バックグラウンドダウンロード"," — スレッドを生成して動画をダウンロードするため、webhook ハンドラーは即座に ",[28,7778,7779],{},"200"," を返します。API は 10 秒以内のレスポンスを期待しますが、動画のダウンロードはそれ以上かかる場合があります。",[73,7782,7783,1061,7786,7789],{},[23,7784,7785],{},"ヘルスチェックエンドポイント",[28,7787,7788],{},"/health"," はロードバランサー（ALB、nginx など）の背後にデプロイする際に便利です。",[73,7791,7792,7795],{},[23,7793,7794],{},"エラーログ"," — 失敗したタスクは完全なエラー payload とともに出力されます。プロダクションでは Sentry、Datadog、またはログスタックに接続してください。",[92,7797,7799],{"id":7798},"ngrok-でローカルホストを公開","ngrok でローカルホストを公開",[11,7801,7802,7803,7808],{},"ローカル開発時、",[37,7804,7807],{"href":7805,"rel":7806},"https://ngrok.com",[41],"ngrok"," を使ってローカルサーバーへのトンネルとなる公開 HTTPS URL を作成します：",[136,7810,7812],{"className":138,"code":7811,"language":140,"meta":141,"style":141},"# ngrok のインストール（macOS）\nbrew install ngrok\n\n# または https://ngrok.com/download からダウンロード\n\n# トンネルを開始\nngrok http 5000\n",[28,7813,7814,7819,7829,7833,7838,7842,7847],{"__ignoreMap":141},[145,7815,7816],{"class":147,"line":148},[145,7817,7818],{"class":174},"# ngrok のインストール（macOS）\n",[145,7820,7821,7824,7826],{"class":147,"line":166},[145,7822,7823],{"class":151},"brew",[145,7825,193],{"class":159},[145,7827,7828],{"class":159}," ngrok\n",[145,7830,7831],{"class":147,"line":178},[145,7832,375],{"emptyLinePlaceholder":58},[145,7834,7835],{"class":147,"line":187},[145,7836,7837],{"class":174},"# または https://ngrok.com/download からダウンロード\n",[145,7839,7840],{"class":147,"line":372},[145,7841,375],{"emptyLinePlaceholder":58},[145,7843,7844],{"class":147,"line":378},[145,7845,7846],{"class":174},"# トンネルを開始\n",[145,7848,7849,7851,7854],{"class":147,"line":384},[145,7850,7807],{"class":151},[145,7852,7853],{"class":159}," http",[145,7855,7856],{"class":155}," 5000\n",[11,7858,7859],{},"ngrok の出力例：",[136,7861,7864],{"className":7862,"code":7863,"language":2186},[2184],"Forwarding  https://a1b2c3d4.ngrok-free.app → http://localhost:5000\n",[28,7865,7863],{"__ignoreMap":141},[11,7867,7868,7869,7871],{},"この HTTPS URL を ",[28,7870,3599],{}," として使用します：",[136,7873,7875],{"className":337,"code":7874,"language":339,"meta":141,"style":141},"payload = {\n    \"model\": \"seedance-2.0\",\n    \"prompt\": \"Your prompt here\",\n    \"callback_url\": \"https://a1b2c3d4.ngrok-free.app/api/webhook/seedance\"\n}\n",[28,7876,7877,7885,7895,7906,7915],{"__ignoreMap":141},[145,7878,7879,7881,7883],{"class":147,"line":148},[145,7880,3660],{"class":262},[145,7882,266],{"class":258},[145,7884,427],{"class":262},[145,7886,7887,7889,7891,7893],{"class":147,"line":166},[145,7888,3669],{"class":159},[145,7890,436],{"class":262},[145,7892,1309],{"class":159},[145,7894,451],{"class":262},[145,7896,7897,7899,7901,7904],{"class":147,"line":178},[145,7898,3680],{"class":159},[145,7900,436],{"class":262},[145,7902,7903],{"class":159},"\"Your prompt here\"",[145,7905,451],{"class":262},[145,7907,7908,7910,7912],{"class":147,"line":187},[145,7909,6369],{"class":159},[145,7911,436],{"class":262},[145,7913,7914],{"class":159},"\"https://a1b2c3d4.ngrok-free.app/api/webhook/seedance\"\n",[145,7916,7917],{"class":147,"line":372},[145,7918,468],{"class":262},[18,7920,7921],{},[11,7922,7923,7925,7926,7929,7930,7933],{},[23,7924,304],{}," ngrok の ",[28,7927,7928],{},"https://"," URL ではなく ",[28,7931,7932],{},"http://"," URL を使用すること。Seedance API は webhook に HTTPS を要求します — プレーン HTTP のコールバック URL は 400 エラーを返します。",[92,7935,7937],{"id":7936},"webhook-のセキュリティ","Webhook のセキュリティ",[11,7939,7940],{},"プロダクションでは、webhook リクエストが実際に EvoLink API から来ていることを検証してください：",[136,7942,7944],{"className":337,"code":7943,"language":339,"meta":141,"style":141},"import hmac\nimport hashlib\n\ndef verify_webhook(request):\n    \"\"\"タスク ID パターンで webhook の真正性を検証します。\"\"\"\n    task = request.json\n    task_id = task.get(\"id\", \"\")\n    \n    # EvoLink のタスク ID は特定のフォーマットに従います\n    if not task_id.startswith(\"task-unified-\"):\n        return False\n    \n    # 追加バリデーション：必須フィールドの存在を確認\n    required_fields = [\"id\", \"status\", \"model\", \"created\"]\n    if not all(field in task for field in required_fields):\n        return False\n    \n    return True\n",[28,7945,7946,7953,7960,7964,7974,7979,7987,8003,8007,8012,8026,8033,8037,8042,8069,8097,8103,8107],{"__ignoreMap":141},[145,7947,7948,7950],{"class":147,"line":148},[145,7949,346],{"class":258},[145,7951,7952],{"class":262}," hmac\n",[145,7954,7955,7957],{"class":147,"line":166},[145,7956,346],{"class":258},[145,7958,7959],{"class":262}," hashlib\n",[145,7961,7962],{"class":147,"line":178},[145,7963,375],{"emptyLinePlaceholder":58},[145,7965,7966,7968,7971],{"class":147,"line":187},[145,7967,525],{"class":258},[145,7969,7970],{"class":151}," verify_webhook",[145,7972,7973],{"class":262},"(request):\n",[145,7975,7976],{"class":147,"line":372},[145,7977,7978],{"class":159},"    \"\"\"タスク ID パターンで webhook の真正性を検証します。\"\"\"\n",[145,7980,7981,7983,7985],{"class":147,"line":378},[145,7982,1497],{"class":262},[145,7984,266],{"class":258},[145,7986,7037],{"class":262},[145,7988,7989,7991,7993,7995,7997,7999,8001],{"class":147,"line":384},[145,7990,7076],{"class":262},[145,7992,266],{"class":258},[145,7994,774],{"class":262},[145,7996,1627],{"class":159},[145,7998,399],{"class":262},[145,8000,5137],{"class":159},[145,8002,405],{"class":262},[145,8004,8005],{"class":147,"line":408},[145,8006,562],{"class":262},[145,8008,8009],{"class":147,"line":419},[145,8010,8011],{"class":174},"    # EvoLink のタスク ID は特定のフォーマットに従います\n",[145,8013,8014,8016,8018,8021,8024],{"class":147,"line":430},[145,8015,2505],{"class":258},[145,8017,5751],{"class":258},[145,8019,8020],{"class":262}," task_id.startswith(",[145,8022,8023],{"class":159},"\"task-unified-\"",[145,8025,547],{"class":262},[145,8027,8028,8030],{"class":147,"line":454},[145,8029,7051],{"class":258},[145,8031,8032],{"class":155}," False\n",[145,8034,8035],{"class":147,"line":465},[145,8036,562],{"class":262},[145,8038,8039],{"class":147,"line":599},[145,8040,8041],{"class":174},"    # 追加バリデーション：必須フィールドの存在を確認\n",[145,8043,8044,8047,8049,8052,8054,8056,8058,8060,8062,8064,8067],{"class":147,"line":604},[145,8045,8046],{"class":262},"    required_fields ",[145,8048,266],{"class":258},[145,8050,8051],{"class":262}," [",[145,8053,1627],{"class":159},[145,8055,399],{"class":262},[145,8057,760],{"class":159},[145,8059,399],{"class":262},[145,8061,5757],{"class":159},[145,8063,399],{"class":262},[145,8065,8066],{"class":159},"\"created\"",[145,8068,763],{"class":262},[145,8070,8071,8073,8075,8078,8081,8083,8086,8089,8092,8094],{"class":147,"line":610},[145,8072,2505],{"class":258},[145,8074,5751],{"class":258},[145,8076,8077],{"class":155}," all",[145,8079,8080],{"class":262},"(field ",[145,8082,1180],{"class":258},[145,8084,8085],{"class":262}," task ",[145,8087,8088],{"class":258},"for",[145,8090,8091],{"class":262}," field ",[145,8093,1180],{"class":258},[145,8095,8096],{"class":262}," required_fields):\n",[145,8098,8099,8101],{"class":147,"line":616},[145,8100,7051],{"class":258},[145,8102,8032],{"class":155},[145,8104,8105],{"class":147,"line":622},[145,8106,562],{"class":262},[145,8108,8109,8111],{"class":147,"line":627},[145,8110,1704],{"class":258},[145,8112,6272],{"class":155},[92,8114,8116],{"id":8115},"webhook-vs-pollingどちらを選ぶか","Webhook vs Polling：どちらを選ぶか？",[2037,8118,8119,8132],{},[2040,8120,8121],{},[2043,8122,8123,8126,8129],{},[2046,8124,8125],{},"シナリオ",[2046,8127,8128],{},"推奨",[2046,8130,8131],{},"理由",[2053,8133,8134,8144,8155,8166,8176,8186],{},[2043,8135,8136,8139,8141],{},[2058,8137,8138],{},"クイックプロトタイピング / スクリプト",[2058,8140,2243],{},[2058,8142,8143],{},"シンプル、サーバー不要",[2043,8145,8146,8149,8152],{},[2058,8147,8148],{},"プロダクション Web アプリ",[2058,8150,8151],{},"Webhook",[2058,8153,8154],{},"スケーラブル、リクエストの無駄なし",[2043,8156,8157,8160,8163],{},[2058,8158,8159],{},"バッチ処理（100+ 動画）",[2058,8161,8162],{},"Webhook + キュー",[2058,8164,8165],{},"すべて送信、完了順に処理",[2043,8167,8168,8171,8173],{},[2058,8169,8170],{},"CLI ツール",[2058,8172,2243],{},[2058,8174,8175],{},"サーバーインフラ不要",[2043,8177,8178,8181,8183],{},[2058,8179,8180],{},"モバイルアプリバックエンド",[2058,8182,8151],{},[2058,8184,8185],{},"完了時にユーザーにプッシュ通知",[2043,8187,8188,8191,8193],{},[2058,8189,8190],{},"サーバーレス（Lambda/Cloud Functions）",[2058,8192,8151],{},[2058,8194,8195],{},"完璧にマッチ — 完了ごとに関数がトリガー",[18,8197,8198],{},[11,8199,8200,8202],{},[23,8201,133],{}," バッチ処理では、webhook とメッセージキュー（Redis、RabbitMQ、SQS）を組み合わせてください。すべての生成リクエストを送信し、キューに到着した順に処理します。これにより送信と処理が分離され、リトライも適切に処理できます。",[45,8204],{},[48,8206,8208],{"id":8207},"バッチ処理複数の動画を生成する","バッチ処理：複数の動画を生成する",[11,8210,8211],{},"実際のユースケースでは多数の動画を生成することがよくあります。レート制限を考慮したバッチ処理パターンを紹介します：",[11,8213,8214],{},[2619,8215,8216],{},"上記の最初の例と同じセットアップとヘルパー関数を使用します。",[136,8218,8220],{"className":337,"code":8219,"language":339,"meta":141,"style":141},"import concurrent.futures\n\ndef batch_generate(prompts, max_concurrent=3):\n    \"\"\"\n    並行性を制御して複数の動画を生成します。\n    \n    Args:\n        prompts: プロンプト文字列のリスト。\n        max_concurrent: 最大同時生成数。\n    \n    Returns:\n        (prompt, result_or_error) タプルのリスト。\n    \"\"\"\n    results = []\n    \n    def generate_one(prompt, index):\n        \"\"\"1 つの動画を生成して結果を返します。\"\"\"\n        payload = {\n            \"model\": \"seedance-2.0\",\n            \"prompt\": prompt,\n            \"duration\": 5,\n            \"quality\": \"720p\"\n        }\n        try:\n            task = generate_video_with_retry(payload)\n            print(f\"[{index}] Submitted: {task['id']}\")\n            result = wait_for_video(task[\"id\"])\n            video_url = result[\"results\"][0]\n            download_video(video_url, f\"batch_{index}.mp4\")\n            return (prompt, result)\n        except Exception as e:\n            print(f\"[{index}] Failed: {e}\")\n            return (prompt, str(e))\n    \n    # レート制限を尊重してバッチで処理\n    with concurrent.futures.ThreadPoolExecutor(max_workers=max_concurrent) as executor:\n        futures = {\n            executor.submit(generate_one, prompt, i): i\n            for i, prompt in enumerate(prompts)\n        }\n        for future in concurrent.futures.as_completed(futures):\n            results.append(future.result())\n    \n    # サマリー\n    succeeded = sum(1 for _, r in results if isinstance(r, dict))\n    print(f\"\\nBatch complete: {succeeded}/{len(prompts)} succeeded\")\n    return results\n\n\n# 使用例\nprompts = [\n    \"A hummingbird hovering near a red flower. Macro lens, shallow depth of field.\",\n    \"Ocean waves crashing on volcanic rocks at sunset. Slow motion.\",\n    \"A street musician playing violin in the rain. Cinematic lighting.\",\n]\nbatch_generate(prompts, max_concurrent=2)\n",[28,8221,8222,8229,8233,8249,8253,8258,8262,8266,8271,8276,8280,8284,8289,8293,8302,8306,8317,8322,8331,8342,8350,8361,8371,8376,8382,8392,8427,8440,8456,8476,8483,8493,8522,8535,8539,8544,8564,8573,8578,8592,8596,8608,8613,8617,8622,8660,8696,8703,8707,8711,8716,8726,8733,8740,8747,8751],{"__ignoreMap":141},[145,8223,8224,8226],{"class":147,"line":148},[145,8225,346],{"class":258},[145,8227,8228],{"class":262}," concurrent.futures\n",[145,8230,8231],{"class":147,"line":166},[145,8232,375],{"emptyLinePlaceholder":58},[145,8234,8235,8237,8240,8243,8245,8247],{"class":147,"line":178},[145,8236,525],{"class":258},[145,8238,8239],{"class":151}," batch_generate",[145,8241,8242],{"class":262},"(prompts, max_concurrent",[145,8244,266],{"class":258},[145,8246,4927],{"class":155},[145,8248,547],{"class":262},[145,8250,8251],{"class":147,"line":187},[145,8252,552],{"class":159},[145,8254,8255],{"class":147,"line":372},[145,8256,8257],{"class":159},"    並行性を制御して複数の動画を生成します。\n",[145,8259,8260],{"class":147,"line":378},[145,8261,562],{"class":159},[145,8263,8264],{"class":147,"line":384},[145,8265,567],{"class":159},[145,8267,8268],{"class":147,"line":408},[145,8269,8270],{"class":159},"        prompts: プロンプト文字列のリスト。\n",[145,8272,8273],{"class":147,"line":419},[145,8274,8275],{"class":159},"        max_concurrent: 最大同時生成数。\n",[145,8277,8278],{"class":147,"line":430},[145,8279,562],{"class":159},[145,8281,8282],{"class":147,"line":454},[145,8283,591],{"class":159},[145,8285,8286],{"class":147,"line":465},[145,8287,8288],{"class":159},"        (prompt, result_or_error) タプルのリスト。\n",[145,8290,8291],{"class":147,"line":599},[145,8292,552],{"class":159},[145,8294,8295,8298,8300],{"class":147,"line":604},[145,8296,8297],{"class":262},"    results ",[145,8299,266],{"class":258},[145,8301,5735],{"class":262},[145,8303,8304],{"class":147,"line":610},[145,8305,562],{"class":262},[145,8307,8308,8311,8314],{"class":147,"line":616},[145,8309,8310],{"class":258},"    def",[145,8312,8313],{"class":151}," generate_one",[145,8315,8316],{"class":262},"(prompt, index):\n",[145,8318,8319],{"class":147,"line":622},[145,8320,8321],{"class":159},"        \"\"\"1 つの動画を生成して結果を返します。\"\"\"\n",[145,8323,8324,8327,8329],{"class":147,"line":627},[145,8325,8326],{"class":262},"        payload ",[145,8328,266],{"class":258},[145,8330,427],{"class":262},[145,8332,8333,8336,8338,8340],{"class":147,"line":638},[145,8334,8335],{"class":159},"            \"model\"",[145,8337,436],{"class":262},[145,8339,1309],{"class":159},[145,8341,451],{"class":262},[145,8343,8344,8347],{"class":147,"line":653},[145,8345,8346],{"class":159},"            \"prompt\"",[145,8348,8349],{"class":262},": prompt,\n",[145,8351,8352,8355,8357,8359],{"class":147,"line":659},[145,8353,8354],{"class":159},"            \"duration\"",[145,8356,436],{"class":262},[145,8358,1353],{"class":155},[145,8360,451],{"class":262},[145,8362,8363,8366,8368],{"class":147,"line":670},[145,8364,8365],{"class":159},"            \"quality\"",[145,8367,436],{"class":262},[145,8369,8370],{"class":159},"\"720p\"\n",[145,8372,8373],{"class":147,"line":697},[145,8374,8375],{"class":262},"        }\n",[145,8377,8378,8380],{"class":147,"line":709},[145,8379,5006],{"class":258},[145,8381,859],{"class":262},[145,8383,8384,8387,8389],{"class":147,"line":715},[145,8385,8386],{"class":262},"            task ",[145,8388,266],{"class":258},[145,8390,8391],{"class":262}," generate_video_with_retry(payload)\n",[145,8393,8394,8396,8398,8400,8403,8405,8408,8410,8413,8415,8417,8419,8421,8423,8425],{"class":147,"line":721},[145,8395,5442],{"class":155},[145,8397,793],{"class":262},[145,8399,439],{"class":258},[145,8401,8402],{"class":159},"\"[",[145,8404,684],{"class":155},[145,8406,8407],{"class":262},"index",[145,8409,690],{"class":155},[145,8411,8412],{"class":159},"] Submitted: ",[145,8414,684],{"class":155},[145,8416,1530],{"class":262},[145,8418,1533],{"class":159},[145,8420,1536],{"class":262},[145,8422,690],{"class":155},[145,8424,448],{"class":159},[145,8426,405],{"class":262},[145,8428,8429,8432,8434,8436,8438],{"class":147,"line":727},[145,8430,8431],{"class":262},"            result ",[145,8433,266],{"class":258},[145,8435,1624],{"class":262},[145,8437,1627],{"class":159},[145,8439,1630],{"class":262},[145,8441,8442,8444,8446,8448,8450,8452,8454],{"class":147,"line":738},[145,8443,7262],{"class":262},[145,8445,266],{"class":258},[145,8447,1649],{"class":262},[145,8449,1652],{"class":159},[145,8451,1563],{"class":262},[145,8453,782],{"class":155},[145,8455,763],{"class":262},[145,8457,8458,8461,8463,8466,8468,8470,8472,8474],{"class":147,"line":743},[145,8459,8460],{"class":262},"            download_video(video_url, ",[145,8462,439],{"class":258},[145,8464,8465],{"class":159},"\"batch_",[145,8467,684],{"class":155},[145,8469,8407],{"class":262},[145,8471,690],{"class":155},[145,8473,6750],{"class":159},[145,8475,405],{"class":262},[145,8477,8478,8480],{"class":147,"line":749},[145,8479,865],{"class":258},[145,8481,8482],{"class":262}," (prompt, result)\n",[145,8484,8485,8487,8489,8491],{"class":147,"line":766},[145,8486,5405],{"class":258},[145,8488,6920],{"class":155},[145,8490,6923],{"class":258},[145,8492,5517],{"class":262},[145,8494,8495,8497,8499,8501,8503,8505,8507,8509,8512,8514,8516,8518,8520],{"class":147,"line":787},[145,8496,5442],{"class":155},[145,8498,793],{"class":262},[145,8500,439],{"class":258},[145,8502,8402],{"class":159},[145,8504,684],{"class":155},[145,8506,8407],{"class":262},[145,8508,690],{"class":155},[145,8510,8511],{"class":159},"] Failed: ",[145,8513,684],{"class":155},[145,8515,5561],{"class":262},[145,8517,690],{"class":155},[145,8519,448],{"class":159},[145,8521,405],{"class":262},[145,8523,8524,8526,8529,8532],{"class":147,"line":833},[145,8525,865],{"class":258},[145,8527,8528],{"class":262}," (prompt, ",[145,8530,8531],{"class":155},"str",[145,8533,8534],{"class":262},"(e))\n",[145,8536,8537],{"class":147,"line":838},[145,8538,562],{"class":262},[145,8540,8541],{"class":147,"line":844},[145,8542,8543],{"class":174},"    # レート制限を尊重してバッチで処理\n",[145,8545,8546,8548,8551,8554,8556,8559,8561],{"class":147,"line":862},[145,8547,1151],{"class":258},[145,8549,8550],{"class":262}," concurrent.futures.ThreadPoolExecutor(",[145,8552,8553],{"class":700},"max_workers",[145,8555,266],{"class":258},[145,8557,8558],{"class":262},"max_concurrent) ",[145,8560,1166],{"class":258},[145,8562,8563],{"class":262}," executor:\n",[145,8565,8566,8569,8571],{"class":147,"line":871},[145,8567,8568],{"class":262},"        futures ",[145,8570,266],{"class":258},[145,8572,427],{"class":262},[145,8574,8575],{"class":147,"line":886},[145,8576,8577],{"class":262},"            executor.submit(generate_one, prompt, i): i\n",[145,8579,8580,8582,8585,8587,8589],{"class":147,"line":902},[145,8581,6836],{"class":258},[145,8583,8584],{"class":262}," i, prompt ",[145,8586,1180],{"class":258},[145,8588,6150],{"class":155},[145,8590,8591],{"class":262},"(prompts)\n",[145,8593,8594],{"class":147,"line":914},[145,8595,8375],{"class":262},[145,8597,8598,8600,8603,8605],{"class":147,"line":953},[145,8599,1174],{"class":258},[145,8601,8602],{"class":262}," future ",[145,8604,1180],{"class":258},[145,8606,8607],{"class":262}," concurrent.futures.as_completed(futures):\n",[145,8609,8610],{"class":147,"line":959},[145,8611,8612],{"class":262},"            results.append(future.result())\n",[145,8614,8615],{"class":147,"line":964},[145,8616,562],{"class":262},[145,8618,8619],{"class":147,"line":970},[145,8620,8621],{"class":174},"    # サマリー\n",[145,8623,8624,8627,8629,8632,8634,8636,8638,8641,8643,8646,8648,8651,8654,8657],{"class":147,"line":976},[145,8625,8626],{"class":262},"    succeeded ",[145,8628,266],{"class":258},[145,8630,8631],{"class":155}," sum",[145,8633,793],{"class":262},[145,8635,5308],{"class":155},[145,8637,6253],{"class":258},[145,8639,8640],{"class":262}," _, r ",[145,8642,1180],{"class":258},[145,8644,8645],{"class":262}," results ",[145,8647,1720],{"class":258},[145,8649,8650],{"class":155}," isinstance",[145,8652,8653],{"class":262},"(r, ",[145,8655,8656],{"class":155},"dict",[145,8658,8659],{"class":262},"))\n",[145,8661,8662,8664,8666,8668,8670,8672,8675,8677,8680,8682,8684,8686,8689,8691,8694],{"class":147,"line":988},[145,8663,1102],{"class":155},[145,8665,793],{"class":262},[145,8667,439],{"class":258},[145,8669,448],{"class":159},[145,8671,1671],{"class":155},[145,8673,8674],{"class":159},"Batch complete: ",[145,8676,684],{"class":155},[145,8678,8679],{"class":262},"succeeded",[145,8681,690],{"class":155},[145,8683,1226],{"class":159},[145,8685,6129],{"class":155},[145,8687,8688],{"class":262},"(prompts)",[145,8690,690],{"class":155},[145,8692,8693],{"class":159}," succeeded\"",[145,8695,405],{"class":262},[145,8697,8698,8700],{"class":147,"line":993},[145,8699,1704],{"class":258},[145,8701,8702],{"class":262}," results\n",[145,8704,8705],{"class":147,"line":5402},[145,8706,375],{"emptyLinePlaceholder":58},[145,8708,8709],{"class":147,"line":5411},[145,8710,375],{"emptyLinePlaceholder":58},[145,8712,8713],{"class":147,"line":5439},[145,8714,8715],{"class":174},"# 使用例\n",[145,8717,8718,8721,8723],{"class":147,"line":5470},[145,8719,8720],{"class":262},"prompts ",[145,8722,266],{"class":258},[145,8724,8725],{"class":262}," [\n",[145,8727,8728,8731],{"class":147,"line":5490},[145,8729,8730],{"class":159},"    \"A hummingbird hovering near a red flower. Macro lens, shallow depth of field.\"",[145,8732,451],{"class":262},[145,8734,8735,8738],{"class":147,"line":5496},[145,8736,8737],{"class":159},"    \"Ocean waves crashing on volcanic rocks at sunset. Slow motion.\"",[145,8739,451],{"class":262},[145,8741,8742,8745],{"class":147,"line":5502},[145,8743,8744],{"class":159},"    \"A street musician playing violin in the rain. Cinematic lighting.\"",[145,8746,451],{"class":262},[145,8748,8749],{"class":147,"line":5507},[145,8750,763],{"class":262},[145,8752,8753,8756,8759,8761,8763],{"class":147,"line":5520},[145,8754,8755],{"class":262},"batch_generate(prompts, ",[145,8757,8758],{"class":700},"max_concurrent",[145,8760,266],{"class":258},[145,8762,5289],{"class":155},[145,8764,405],{"class":262},[11,8766,8767],{},"バッチ処理の主な考慮事項：",[96,8769,8770,8778,8784],{},[73,8771,8772,8777],{},[23,8773,8774],{},[28,8775,8776],{},"max_concurrent=3"," — 同時に送信するリクエストが多すぎないようにしてください。2〜3 から始めて、レート制限に応じて増やしてください。",[73,8779,8780,8783],{},[23,8781,8782],{},"ThreadPoolExecutor"," — I/O バウンド（API レスポンス待ち）であり CPU バウンドではないため、プロセスではなくスレッドを使用します。",[73,8785,8786,8789],{},[23,8787,8788],{},"エラー分離"," — 各動画生成は独立しています。1 つの失敗がバッチ全体を止めることはありません。",[45,8791],{},[48,8793,8794],{"id":8794},"次のステップ",[11,8796,8797],{},"基本をすべてカバーしました — テキストから動画、画像から動画、非同期 polling、webhook、エラー処理、バッチ処理。さらに深掘りするためのリソースを紹介します：",[92,8799,8800],{"id":8800},"高度な機能を探索",[96,8802,8803,8811,8818,8825,8833],{},[73,8804,8805,8810],{},[23,8806,8807],{},[37,8808,8809],{"href":2967},"@Tags マルチモーダル参照ガイド"," — @Image、@Video、@Audio 参照システムをマスターしてマルチモーダル生成",[73,8812,8813,8817],{},[23,8814,8815],{},[37,8816,3856],{"href":3855}," — ヒッチコックズーム、ワンテイクトラッキングショット、オービタルカメラをプログラムで実装",[73,8819,8820,8824],{},[23,8821,8822],{},[37,8823,3382],{"href":3381}," — 最初/最後のフレーム制御、マルチ画像合成、EC 商品動画",[73,8826,8827,8832],{},[23,8828,8829],{},[37,8830,8831],{"href":2613},"EC 商品動画ガイド"," — 商品写真を大規模にマーケティング動画に変換",[73,8834,8835,8839],{},[23,8836,8837],{},[37,8838,1768],{"href":1767}," — ショットスクリプト形式、タイミング構文、デモ動画のプロンプト",[92,8841,8842],{"id":8842},"リファレンスドキュメント",[96,8844,8845,8851,8858],{},[73,8846,8847],{},[37,8848,8850],{"href":1258,"rel":8849},[41],"動画生成 API リファレンス",[73,8852,8853],{},[37,8854,8857],{"href":8855,"rel":8856},"https://seedance2api.app/docs/multimodal-reference",[41],"マルチモーダル参照仕様",[73,8859,8860],{},[37,8861,8864],{"href":8862,"rel":8863},"https://seedance2api.app/docs/sdks",[41],"Python & Node.js SDK",[92,8866,8867],{"id":8867},"何か作ってみよう",[11,8869,8870],{},"学んだことを組み合わせてみましょう。プロジェクトのアイデア：",[96,8872,8873,8883,8889,8899],{},[73,8874,8875,8878,8879,8882],{},[23,8876,8877],{},"自動化された商品動画パイプライン"," — 商品写真をアップロードし、マーケティング動画を大量生成（",[37,8880,8881],{"href":2613},"EC 動画ガイド","参照）",[73,8884,8885,8888],{},[23,8886,8887],{},"ソーシャルメディアコンテンツエンジン"," — テキストブリーフから縦型ショート動画を生成し、TikTok/Reels に直接投稿",[73,8890,8891,8894,8895,8898],{},[23,8892,8893],{},"ストーリーボードから動画ツール"," — 連続画像を",[37,8896,8897],{"href":3855},"カメラムーブメント制御","付きのアニメーションシーンに変換",[73,8900,8901,8904],{},[23,8902,8903],{},"AI 動画編集パイプライン"," — Seedance 2.0 の動画拡張機能を活用して、短いクリップからより長いストーリーを構成",[11,8906,8907],{},[23,8908,8909,8910,8914],{},"準備はできましたか？",[37,8911,8913],{"href":39,"rel":8912},[41],"無料 EvoLink API Key を取得","して、今日から動画を生成しましょう。",[45,8916],{},[48,8918,8919],{"id":8919},"よくある質問",[92,8921,8923],{"id":8922},"seedance-20-の動画生成にはどのくらい時間がかかりますか","Seedance 2.0 の動画生成にはどのくらい時間がかかりますか？",[11,8925,8926,8927,8929],{},"通常、長さと品質設定に応じて 30〜120 秒です。5 秒 720p の動画は約 50 秒で完了します。15 秒 1080p の動画は 2〜3 分かかることがあります。API は各タスクに ",[28,8928,2108],{}," フィールドを返すので、適切なタイムアウトを設定できます。ピーク時にはキュー待ち時間が 10〜30 秒追加される場合があります。",[92,8931,8933],{"id":8932},"seedance-20-api-はどの画像フォーマットに対応していますか","Seedance 2.0 API はどの画像フォーマットに対応していますか？",[11,8935,8936,8937,8939],{},"JPEG、PNG、WebP、BMP、TIFF、GIF。各画像は 30 MB 以下である必要があります。",[28,8938,2896],{}," パラメータでリクエストあたり最大 9 枚の画像を渡せます。画像は公開アクセス可能な URL である必要があります — API が直接取得します。最良の結果を得るには、短辺が 720px 以上の画像を使用してください。非常に低解像度の画像（256px 未満）はぼやけたアニメーションになる可能性があります。",[92,8941,8943],{"id":8942},"_15-秒より長い動画を生成できますか","15 秒より長い動画を生成できますか？",[11,8945,8946,8947,8949],{},"単一生成の最大は 15 秒です。より長いコンテンツを作るには、複数のクリップを生成して FFmpeg や動画エディタで結合してください。Seedance 2.0 は動画拡張をサポートしています — 生成した動画の最後のフレームを次の生成の最初のフレームとして使用し、シームレスな連続性を実現できます。基本的なアプローチ：クリップ 1 を生成し、最後のフレームを抽出して、クリップ 2 に ",[28,8948,2995],{}," として渡します。",[92,8951,8953],{"id":8952},"evolink-経由の-seedance-20-api-の料金はいくらですか","EvoLink 経由の Seedance 2.0 API の料金はいくらですか？",[11,8955,8956,8957,8961,8962,8964],{},"料金は動画の長さと品質ティアに基づきます。5 秒 720p の動画は約 18 クレジットです。EvoLink は直接 API アクセスと比較してコストを削減できる",[37,8958,8960],{"href":211,"rel":8959},[41],"スマートルーティング","を提供しています。現在の秒単位の料金はダッシュボードで確認してください。API レスポンスの ",[28,8963,2118],{}," フィールドが生成前に正確なコストを表示します — この金額以上に課金されることはありません。",[92,8966,8968],{"id":8967},"seedance-15-pro-と-seedance-20-の違いは何ですか","seedance-1.5-pro と seedance-2.0 の違いは何ですか？",[11,8970,8971,8972,8974,8975,8977,8978,1769],{},"Seedance 2.0 はマルチモーダル参照（画像・動画・音声の混合入力）、ネイティブオーディオ生成、物理的一貫性の向上、動画編集機能を追加しています。API インターフェースは同一です — 同じエンドポイント、同じパラメータ、同じレスポンス形式。今 ",[28,8973,30],{}," でテストし、モデル名を変更するだけで ",[28,8976,1752],{}," に切り替えられます。1.5 の主な制限：単一画像入力のみ（@Image2〜9 不可）、動画/音声参照不可、ネイティブオーディオ生成不可。詳細な比較は ",[37,8979,8981],{"href":8980},"/blog/seedance-2-vs-sora-2-api-comparison","Seedance 2.0 vs Sora 2 比較",[92,8983,8985],{"id":8984},"content-rejected-by-safety-filterエラーはどう対処しますか","「content rejected by safety filter」エラーはどう対処しますか？",[11,8987,8988,8989,8991,8992,8995],{},"コンテンツ審査システムはリアルな暴力、露骨なコンテンツ、実在の公人を含むプロンプトを拒否します。",[28,8990,2896],{}," 経由でアップロードされたリアルな人物の顔画像も拒否されます。顔の制限を回避するには、イラスト、スタイライズされた、またはアニメスタイルのキャラクター画像を使用してください。プロンプト拒否の場合は、制限されたトピックを避けるよう文言を修正してください。エラーレスポンスに ",[28,8993,8994],{},"type: \"content_policy_violation\""," が含まれます — エラー処理コードでこれをチェックし、ユーザーに明確なメッセージを提供してください。",[92,8997,8999],{"id":8998},"nodejs-javascript-プロジェクトで-seedance-api-を使えますか","Node.js / JavaScript プロジェクトで Seedance API を使えますか？",[11,9001,9002,9003,280,9006,9009,9010,9014],{},"はい。REST API は言語に依存しません — どの HTTP クライアントでも使えます。このチュートリアルの概念（非同期 polling、webhook、エラー処理）は Node.js の ",[28,9004,9005],{},"fetch",[28,9007,9008],{},"axios"," で直接適用できます。EvoLink は polling とリトライを自動処理する公式 ",[37,9011,9013],{"href":8862,"rel":9012},[41],"Node.js および Python SDK"," も提供しています。",[92,9016,9018],{"id":9017},"動画完了時に-webhook-サーバーがダウンしていたらどうなりますか","動画完了時に webhook サーバーがダウンしていたらどうなりますか？",[11,9020,9021,9022,9025],{},"API は増加する間隔（1 秒、2 秒、4 秒）で webhook 配信を 3 回リトライします。3 回すべて失敗すると webhook は放棄されます — ただし動画は引き続き利用可能です。",[28,9023,9024],{},"GET /v1/tasks/{task_id}"," で polling して結果を取得できます。そのため、送信時にタスク ID を保存し、完了したが webhook で受信されなかったタスクを定期的にチェックするバックグラウンドジョブを設定するのがベストプラクティスです。",[92,9027,9029],{"id":9028},"api-リクエストにレート制限はありますか","API リクエストにレート制限はありますか？",[11,9031,9032,9033,9035,9036,9040,9041,9045],{},"はい。デフォルトのレート制限は開発と中規模のプロダクション使用には十分余裕があります。",[28,9034,4810],{}," エラーが発生した場合は、",[37,9037,9039],{"href":9038},"#%E3%82%A8%E3%83%A9%E3%83%BC%E3%82%92%E9%81%A9%E5%88%87%E3%81%AB%E5%87%A6%E7%90%86%E3%81%99%E3%82%8B","エラー処理セクション","で示した指数バックオフを実装してください。大規模な使用ケース（1 日数千本の動画）の場合は、",[37,9042,9044],{"href":211,"rel":9043},[41],"EvoLink サポート","に連絡してカスタムレート制限と専用キャパシティについて相談してください。",[92,9047,9049],{"id":9048},"seedance-20-を商用プロジェクトに使えますか","Seedance 2.0 を商用プロジェクトに使えますか？",[11,9051,9052,9053,1769],{},"はい。EvoLink API を通じて生成された動画は商用利用が許可されています。出力の所有権はユーザーにあり、製品、マーケティング資料、クライアント納品物、公開コンテンツに使用できます。詳細なライセンス条件と商用利用のベストプラクティスは ",[37,9054,9056],{"href":9055},"/blog/seedance-2-copyright-api-guide","Seedance 2.0 著作権ガイド",[45,9058],{},[48,9060,9061],{"id":9061},"完全なスクリプト",[11,9063,9064],{},"このチュートリアルの全コードを 1 つのファイルにまとめました — コピー、ペースト、API Key を入力して、すぐに実行できます：",[136,9066,9068],{"className":337,"code":9067,"language":339,"meta":141,"style":141},"\"\"\"\nSeedance 2.0 API チュートリアル — 完全スクリプト\nドキュメント：https://seedance2api.app/docs/video-generation\nAPI Key：https://evolink.ai/early-access\n\"\"\"\nimport requests\nimport time\nimport os\nimport json\nimport random\n\n# ── 設定 ─────────────────────────────────────────────────────\nAPI_KEY = os.getenv(\"EVOLINK_API_KEY\", \"sk-your-api-key-here\")\nBASE_URL = \"https://api.evolink.ai/v1\"\nHEADERS = {\n    \"Authorization\": f\"Bearer {API_KEY}\",\n    \"Content-Type\": \"application/json\"\n}\n\n\n# ── 再利用可能なヘルパー ──────────────────────────────────────\ndef wait_for_video(task_id, poll_interval=10, timeout=600):\n    \"\"\"動画生成タスクを完了まで polling します。\"\"\"\n    elapsed = 0\n    while elapsed \u003C timeout:\n        response = requests.get(\n            f\"{BASE_URL}/tasks/{task_id}\",\n            headers=HEADERS\n        )\n        response.raise_for_status()\n        task = response.json()\n        status = task[\"status\"]\n        progress = task.get(\"progress\", 0)\n        print(f\"  [{elapsed}s] Status: {status} | Progress: {progress}%\")\n        if status == \"completed\":\n            return task\n        elif status == \"failed\":\n            raise RuntimeError(f\"Task {task_id} failed: {task}\")\n        time.sleep(poll_interval)\n        elapsed += poll_interval\n    raise TimeoutError(f\"Task {task_id} timed out after {timeout}s\")\n\n\ndef download_video(url, filename=\"output.mp4\"):\n    \"\"\"URL から動画ファイルをダウンロードします。\"\"\"\n    print(f\"Downloading to {filename}...\")\n    resp = requests.get(url, stream=True)\n    resp.raise_for_status()\n    with open(filename, \"wb\") as f:\n        for chunk in resp.iter_content(chunk_size=8192):\n            f.write(chunk)\n    print(f\"Saved: {filename} ({os.path.getsize(filename) / 1024:.0f} KB)\")\n\n\ndef generate_video_with_retry(payload, max_retries=3):\n    \"\"\"一時的なエラーに対して自動リトライする生成リクエスト送信。\"\"\"\n    for attempt in range(max_retries):\n        try:\n            response = requests.post(\n                f\"{BASE_URL}/videos/generations\",\n                headers=HEADERS,\n                json=payload,\n                timeout=30\n            )\n            if response.status_code == 200:\n                return response.json()\n            error = response.json().get(\"error\", {})\n            if response.status_code in (400, 401, 402, 404, 413, 422):\n                raise ValueError(\n                    f\"API error {response.status_code}: \"\n                    f\"{error.get('message', 'Unknown')}\"\n                )\n            if response.status_code in (429, 500, 502, 503):\n                wait = (2 ** attempt) + random.uniform(0, 1)\n                print(f\"  Retry {attempt+1}/{max_retries} after {wait:.1f}s\")\n                time.sleep(wait)\n                continue\n        except requests.exceptions.RequestException:\n            wait = (2 ** attempt) + random.uniform(0, 1)\n            print(f\"  Retry {attempt+1}/{max_retries} after {wait:.1f}s\")\n            time.sleep(wait)\n            continue\n    raise RuntimeError(f\"Failed after {max_retries} retries\")\n\n\ndef validate_payload(payload):\n    \"\"\"API コール前に生成 payload をバリデーションします。\"\"\"\n    errors = []\n    if not payload.get(\"model\"):\n        errors.append(\"'model' is required\")\n    if not payload.get(\"prompt\") or not payload[\"prompt\"].strip():\n        errors.append(\"'prompt' is required\")\n    duration = payload.get(\"duration\", 5)\n    if duration \u003C 4 or duration > 15:\n        errors.append(f\"'duration' must be 4-15, got {duration}\")\n    quality = payload.get(\"quality\", \"720p\")\n    if quality not in {\"480p\", \"720p\", \"1080p\"}:\n        errors.append(f\"Invalid quality: {quality}\")\n    if errors:\n        raise ValueError(\"Validation failed:\\n\" + \"\\n\".join(f\"  - {e}\" for e in errors))\n\n\ndef cancel_task(task_id):\n    \"\"\"pending または processing 状態のタスクをキャンセルします。\"\"\"\n    response = requests.post(\n        f\"{BASE_URL}/tasks/{task_id}/cancel\",\n        headers=HEADERS\n    )\n    if response.status_code == 200:\n        print(f\"Task {task_id} cancelled.\")\n    else:\n        print(f\"Cancel failed: {response.json()}\")\n\n\n# ── 例 1：テキストから動画 ────────────────────────────────────\ndef text_to_video():\n    payload = {\n        \"model\": \"seedance-2.0\",\n        \"prompt\": (\n            \"A golden retriever puppy chases a butterfly through \"\n            \"a sunlit meadow. The camera follows the puppy with a \"\n            \"smooth tracking shot as wildflowers sway in the breeze.\"\n        ),\n        \"duration\": 5,\n        \"quality\": \"720p\",\n        \"aspect_ratio\": \"16:9\",\n        \"generate_audio\": True\n    }\n    validate_payload(payload)\n    task = generate_video_with_retry(payload)\n    print(f\"Task: {task['id']} (ETA: {task['task_info']['estimated_time']}s)\")\n    result = wait_for_video(task[\"id\"])\n    download_video(result[\"results\"][0], \"text_to_video.mp4\")\n\n\n# ── 例 2：画像から動画 ────────────────────────────────────────\ndef image_to_video():\n    payload = {\n        \"model\": \"seedance-2.0\",\n        \"prompt\": (\n            \"@Image1 as the first frame. The scene slowly comes \"\n            \"to life — leaves rustle gently, soft light shifts \"\n            \"across the frame.\"\n        ),\n        \"image_urls\": [\"https://example.com/your-image.jpg\"],\n        \"duration\": 5,\n        \"quality\": \"720p\"\n    }\n    validate_payload(payload)\n    task = generate_video_with_retry(payload)\n    print(f\"Task: {task['id']}\")\n    result = wait_for_video(task[\"id\"])\n    download_video(result[\"results\"][0], \"image_to_video.mp4\")\n\n\n# ── 例 3：縦型ソーシャルメディア動画 ──────────────────────────\ndef social_media_video():\n    payload = {\n        \"model\": \"seedance-2.0\",\n        \"prompt\": (\n            \"A barista pours latte art in slow motion. \"\n            \"Close-up overhead shot, warm cafe lighting.\"\n        ),\n        \"duration\": 8,\n        \"quality\": \"1080p\",\n        \"aspect_ratio\": \"9:16\",\n        \"generate_audio\": True\n    }\n    validate_payload(payload)\n    task = generate_video_with_retry(payload)\n    print(f\"Task: {task['id']}\")\n    result = wait_for_video(task[\"id\"])\n    download_video(result[\"results\"][0], \"social_video.mp4\")\n\n\nif __name__ == \"__main__\":\n    print(\"=== テキストから動画 ===\")\n    text_to_video()\n    # print(\"\\n=== 画像から動画 ===\")\n    # image_to_video()  # コメントを外して画像 URL を設定\n    # print(\"\\n=== ソーシャルメディア動画 ===\")\n    # social_media_video()\n",[28,9069,9070,9074,9079,9084,9089,9093,9099,9105,9111,9117,9123,9127,9131,9147,9155,9163,9179,9187,9191,9195,9199,9204,9224,9229,9237,9247,9255,9275,9283,9287,9291,9299,9311,9327,9363,9375,9381,9393,9424,9428,9436,9466,9470,9474,9488,9492,9513,9529,9533,9549,9567,9571,9605,9609,9613,9627,9632,9644,9650,9658,9670,9680,9688,9697,9701,9713,9719,9731,9765,9773,9788,9812,9816,9842,9868,9911,9915,9919,9926,9952,9992,9996,10000,10022,10026,10030,10038,10043,10051,10063,10071,10093,10102,10118,10138,10156,10172,10197,10216,10223,10269,10274,10279,10288,10294,10303,10324,10333,10338,10351,10373,10380,10401,10406,10411,10417,10426,10435,10446,10453,10458,10463,10468,10473,10484,10495,10506,10515,10520,10526,10535,10579,10592,10612,10617,10622,10628,10637,10646,10657,10664,10669,10674,10680,10685,10699,10710,10719,10724,10729,10738,10763,10776,10794,10799,10804,10810,10820,10829,10840,10847,10853,10859,10864,10875,10886,10897,10906,10911,10916,10925,10950,10963,10981,10986,10991,11004,11016,11021,11027,11033,11039],{"__ignoreMap":141},[145,9071,9072],{"class":147,"line":148},[145,9073,6562],{"class":159},[145,9075,9076],{"class":147,"line":166},[145,9077,9078],{"class":159},"Seedance 2.0 API チュートリアル — 完全スクリプト\n",[145,9080,9081],{"class":147,"line":178},[145,9082,9083],{"class":159},"ドキュメント：https://seedance2api.app/docs/video-generation\n",[145,9085,9086],{"class":147,"line":187},[145,9087,9088],{"class":159},"API Key：https://evolink.ai/early-access\n",[145,9090,9091],{"class":147,"line":372},[145,9092,6562],{"class":159},[145,9094,9095,9097],{"class":147,"line":378},[145,9096,346],{"class":258},[145,9098,328],{"class":262},[145,9100,9101,9103],{"class":147,"line":384},[145,9102,346],{"class":258},[145,9104,355],{"class":262},[145,9106,9107,9109],{"class":147,"line":408},[145,9108,346],{"class":258},[145,9110,362],{"class":262},[145,9112,9113,9115],{"class":147,"line":419},[145,9114,346],{"class":258},[145,9116,369],{"class":262},[145,9118,9119,9121],{"class":147,"line":430},[145,9120,346],{"class":258},[145,9122,4908],{"class":262},[145,9124,9125],{"class":147,"line":454},[145,9126,375],{"emptyLinePlaceholder":58},[145,9128,9129],{"class":147,"line":465},[145,9130,381],{"class":174},[145,9132,9133,9135,9137,9139,9141,9143,9145],{"class":147,"line":599},[145,9134,387],{"class":155},[145,9136,390],{"class":258},[145,9138,393],{"class":262},[145,9140,396],{"class":159},[145,9142,399],{"class":262},[145,9144,402],{"class":159},[145,9146,405],{"class":262},[145,9148,9149,9151,9153],{"class":147,"line":604},[145,9150,411],{"class":155},[145,9152,390],{"class":258},[145,9154,416],{"class":159},[145,9156,9157,9159,9161],{"class":147,"line":610},[145,9158,422],{"class":155},[145,9160,390],{"class":258},[145,9162,427],{"class":262},[145,9164,9165,9167,9169,9171,9173,9175,9177],{"class":147,"line":616},[145,9166,433],{"class":159},[145,9168,436],{"class":262},[145,9170,439],{"class":258},[145,9172,442],{"class":159},[145,9174,445],{"class":155},[145,9176,448],{"class":159},[145,9178,451],{"class":262},[145,9180,9181,9183,9185],{"class":147,"line":622},[145,9182,457],{"class":159},[145,9184,436],{"class":262},[145,9186,462],{"class":159},[145,9188,9189],{"class":147,"line":627},[145,9190,468],{"class":262},[145,9192,9193],{"class":147,"line":638},[145,9194,375],{"emptyLinePlaceholder":58},[145,9196,9197],{"class":147,"line":653},[145,9198,375],{"emptyLinePlaceholder":58},[145,9200,9201],{"class":147,"line":659},[145,9202,9203],{"class":174},"# ── 再利用可能なヘルパー ──────────────────────────────────────\n",[145,9205,9206,9208,9210,9212,9214,9216,9218,9220,9222],{"class":147,"line":670},[145,9207,525],{"class":258},[145,9209,528],{"class":151},[145,9211,531],{"class":262},[145,9213,266],{"class":258},[145,9215,536],{"class":155},[145,9217,539],{"class":262},[145,9219,266],{"class":258},[145,9221,544],{"class":155},[145,9223,547],{"class":262},[145,9225,9226],{"class":147,"line":697},[145,9227,9228],{"class":159},"    \"\"\"動画生成タスクを完了まで polling します。\"\"\"\n",[145,9230,9231,9233,9235],{"class":147,"line":709},[145,9232,630],{"class":262},[145,9234,266],{"class":258},[145,9236,635],{"class":155},[145,9238,9239,9241,9243,9245],{"class":147,"line":715},[145,9240,641],{"class":258},[145,9242,644],{"class":262},[145,9244,647],{"class":258},[145,9246,650],{"class":262},[145,9248,9249,9251,9253],{"class":147,"line":721},[145,9250,662],{"class":262},[145,9252,266],{"class":258},[145,9254,667],{"class":262},[145,9256,9257,9259,9261,9263,9265,9267,9269,9271,9273],{"class":147,"line":727},[145,9258,673],{"class":258},[145,9260,448],{"class":159},[145,9262,678],{"class":155},[145,9264,681],{"class":159},[145,9266,684],{"class":155},[145,9268,687],{"class":262},[145,9270,690],{"class":155},[145,9272,448],{"class":159},[145,9274,451],{"class":262},[145,9276,9277,9279,9281],{"class":147,"line":738},[145,9278,701],{"class":700},[145,9280,266],{"class":258},[145,9282,706],{"class":155},[145,9284,9285],{"class":147,"line":743},[145,9286,712],{"class":262},[145,9288,9289],{"class":147,"line":749},[145,9290,724],{"class":262},[145,9292,9293,9295,9297],{"class":147,"line":766},[145,9294,730],{"class":262},[145,9296,266],{"class":258},[145,9298,735],{"class":262},[145,9300,9301,9303,9305,9307,9309],{"class":147,"line":787},[145,9302,752],{"class":262},[145,9304,266],{"class":258},[145,9306,757],{"class":262},[145,9308,760],{"class":159},[145,9310,763],{"class":262},[145,9312,9313,9315,9317,9319,9321,9323,9325],{"class":147,"line":833},[145,9314,769],{"class":262},[145,9316,266],{"class":258},[145,9318,774],{"class":262},[145,9320,777],{"class":159},[145,9322,399],{"class":262},[145,9324,782],{"class":155},[145,9326,405],{"class":262},[145,9328,9329,9331,9333,9335,9337,9339,9341,9343,9345,9347,9349,9351,9353,9355,9357,9359,9361],{"class":147,"line":838},[145,9330,790],{"class":155},[145,9332,793],{"class":262},[145,9334,439],{"class":258},[145,9336,798],{"class":159},[145,9338,684],{"class":155},[145,9340,803],{"class":262},[145,9342,690],{"class":155},[145,9344,808],{"class":159},[145,9346,684],{"class":155},[145,9348,813],{"class":262},[145,9350,690],{"class":155},[145,9352,818],{"class":159},[145,9354,684],{"class":155},[145,9356,823],{"class":262},[145,9358,690],{"class":155},[145,9360,828],{"class":159},[145,9362,405],{"class":262},[145,9364,9365,9367,9369,9371,9373],{"class":147,"line":844},[145,9366,847],{"class":258},[145,9368,850],{"class":262},[145,9370,853],{"class":258},[145,9372,856],{"class":159},[145,9374,859],{"class":262},[145,9376,9377,9379],{"class":147,"line":862},[145,9378,865],{"class":258},[145,9380,868],{"class":262},[145,9382,9383,9385,9387,9389,9391],{"class":147,"line":871},[145,9384,874],{"class":258},[145,9386,850],{"class":262},[145,9388,853],{"class":258},[145,9390,881],{"class":159},[145,9392,859],{"class":262},[145,9394,9395,9397,9399,9401,9403,9405,9407,9409,9411,9413,9415,9418,9420,9422],{"class":147,"line":886},[145,9396,905],{"class":258},[145,9398,908],{"class":155},[145,9400,793],{"class":262},[145,9402,439],{"class":258},[145,9404,920],{"class":159},[145,9406,684],{"class":155},[145,9408,687],{"class":262},[145,9410,690],{"class":155},[145,9412,929],{"class":159},[145,9414,684],{"class":155},[145,9416,9417],{"class":262},"task",[145,9419,690],{"class":155},[145,9421,448],{"class":159},[145,9423,405],{"class":262},[145,9425,9426],{"class":147,"line":902},[145,9427,973],{"class":262},[145,9429,9430,9432,9434],{"class":147,"line":914},[145,9431,979],{"class":262},[145,9433,982],{"class":258},[145,9435,985],{"class":262},[145,9437,9438,9440,9442,9444,9446,9448,9450,9452,9454,9456,9458,9460,9462,9464],{"class":147,"line":953},[145,9439,996],{"class":258},[145,9441,999],{"class":155},[145,9443,793],{"class":262},[145,9445,439],{"class":258},[145,9447,920],{"class":159},[145,9449,684],{"class":155},[145,9451,687],{"class":262},[145,9453,690],{"class":155},[145,9455,1014],{"class":159},[145,9457,684],{"class":155},[145,9459,1019],{"class":262},[145,9461,690],{"class":155},[145,9463,1024],{"class":159},[145,9465,405],{"class":262},[145,9467,9468],{"class":147,"line":959},[145,9469,375],{"emptyLinePlaceholder":58},[145,9471,9472],{"class":147,"line":964},[145,9473,375],{"emptyLinePlaceholder":58},[145,9475,9476,9478,9480,9482,9484,9486],{"class":147,"line":970},[145,9477,525],{"class":258},[145,9479,1082],{"class":151},[145,9481,1085],{"class":262},[145,9483,266],{"class":258},[145,9485,1090],{"class":159},[145,9487,547],{"class":262},[145,9489,9490],{"class":147,"line":976},[145,9491,1097],{"class":159},[145,9493,9494,9496,9498,9500,9503,9505,9507,9509,9511],{"class":147,"line":988},[145,9495,1102],{"class":155},[145,9497,793],{"class":262},[145,9499,439],{"class":258},[145,9501,9502],{"class":159},"\"Downloading to ",[145,9504,684],{"class":155},[145,9506,1114],{"class":262},[145,9508,690],{"class":155},[145,9510,1119],{"class":159},[145,9512,405],{"class":262},[145,9514,9515,9517,9519,9521,9523,9525,9527],{"class":147,"line":993},[145,9516,1126],{"class":262},[145,9518,266],{"class":258},[145,9520,1131],{"class":262},[145,9522,1134],{"class":700},[145,9524,266],{"class":258},[145,9526,1139],{"class":155},[145,9528,405],{"class":262},[145,9530,9531],{"class":147,"line":5402},[145,9532,1146],{"class":262},[145,9534,9535,9537,9539,9541,9543,9545,9547],{"class":147,"line":5411},[145,9536,1151],{"class":258},[145,9538,1154],{"class":155},[145,9540,1157],{"class":262},[145,9542,1160],{"class":159},[145,9544,1163],{"class":262},[145,9546,1166],{"class":258},[145,9548,1169],{"class":262},[145,9550,9551,9553,9555,9557,9559,9561,9563,9565],{"class":147,"line":5439},[145,9552,1174],{"class":258},[145,9554,1177],{"class":262},[145,9556,1180],{"class":258},[145,9558,1183],{"class":262},[145,9560,1186],{"class":700},[145,9562,266],{"class":258},[145,9564,1191],{"class":155},[145,9566,547],{"class":262},[145,9568,9569],{"class":147,"line":5470},[145,9570,1198],{"class":262},[145,9572,9573,9575,9577,9579,9581,9583,9585,9587,9589,9591,9593,9595,9597,9599,9601,9603],{"class":147,"line":5490},[145,9574,1102],{"class":155},[145,9576,793],{"class":262},[145,9578,439],{"class":258},[145,9580,1209],{"class":159},[145,9582,684],{"class":155},[145,9584,1114],{"class":262},[145,9586,690],{"class":155},[145,9588,1218],{"class":159},[145,9590,684],{"class":155},[145,9592,1223],{"class":262},[145,9594,1226],{"class":258},[145,9596,1229],{"class":155},[145,9598,1232],{"class":258},[145,9600,690],{"class":155},[145,9602,1237],{"class":159},[145,9604,405],{"class":262},[145,9606,9607],{"class":147,"line":5496},[145,9608,375],{"emptyLinePlaceholder":58},[145,9610,9611],{"class":147,"line":5502},[145,9612,375],{"emptyLinePlaceholder":58},[145,9614,9615,9617,9619,9621,9623,9625],{"class":147,"line":5507},[145,9616,525],{"class":258},[145,9618,4919],{"class":151},[145,9620,4922],{"class":262},[145,9622,266],{"class":258},[145,9624,4927],{"class":155},[145,9626,547],{"class":262},[145,9628,9629],{"class":147,"line":5520},[145,9630,9631],{"class":159},"    \"\"\"一時的なエラーに対して自動リトライする生成リクエスト送信。\"\"\"\n",[145,9633,9634,9636,9638,9640,9642],{"class":147,"line":5547},[145,9635,4990],{"class":258},[145,9637,4993],{"class":262},[145,9639,1180],{"class":258},[145,9641,4998],{"class":155},[145,9643,5001],{"class":262},[145,9645,9646,9648],{"class":147,"line":5587},[145,9647,5006],{"class":258},[145,9649,859],{"class":262},[145,9651,9652,9654,9656],{"class":147,"line":5606},[145,9653,5013],{"class":262},[145,9655,266],{"class":258},[145,9657,1433],{"class":262},[145,9659,9660,9662,9664,9666,9668],{"class":147,"line":5611},[145,9661,917],{"class":258},[145,9663,448],{"class":159},[145,9665,678],{"class":155},[145,9667,1445],{"class":159},[145,9669,451],{"class":262},[145,9671,9672,9674,9676,9678],{"class":147,"line":5616},[145,9673,5034],{"class":700},[145,9675,266],{"class":258},[145,9677,422],{"class":155},[145,9679,451],{"class":262},[145,9681,9682,9684,9686],{"class":147,"line":5621},[145,9683,5045],{"class":700},[145,9685,266],{"class":258},[145,9687,5050],{"class":262},[145,9689,9690,9692,9694],{"class":147,"line":7274},[145,9691,5055],{"class":700},[145,9693,266],{"class":258},[145,9695,9696],{"class":155},"30\n",[145,9698,9699],{"class":147,"line":7296},[145,9700,956],{"class":262},[145,9702,9703,9705,9707,9709,9711],{"class":147,"line":7302},[145,9704,5081],{"class":258},[145,9706,2508],{"class":262},[145,9708,853],{"class":258},[145,9710,2513],{"class":155},[145,9712,859],{"class":262},[145,9714,9715,9717],{"class":147,"line":7308},[145,9716,5094],{"class":258},[145,9718,735],{"class":262},[145,9720,9721,9723,9725,9727,9729],{"class":147,"line":7319},[145,9722,5110],{"class":262},[145,9724,266],{"class":258},[145,9726,5115],{"class":262},[145,9728,896],{"class":159},[145,9730,899],{"class":262},[145,9732,9733,9735,9737,9739,9741,9743,9745,9747,9749,9751,9753,9755,9757,9759,9761,9763],{"class":147,"line":7330},[145,9734,5081],{"class":258},[145,9736,2508],{"class":262},[145,9738,1180],{"class":258},[145,9740,1218],{"class":262},[145,9742,3637],{"class":155},[145,9744,399],{"class":262},[145,9746,4720],{"class":155},[145,9748,399],{"class":262},[145,9750,4738],{"class":155},[145,9752,399],{"class":262},[145,9754,4756],{"class":155},[145,9756,399],{"class":262},[145,9758,4774],{"class":155},[145,9760,399],{"class":262},[145,9762,4792],{"class":155},[145,9764,547],{"class":262},[145,9766,9767,9769,9771],{"class":147,"line":7341},[145,9768,5206],{"class":258},[145,9770,5209],{"class":155},[145,9772,911],{"class":262},[145,9774,9775,9777,9779,9781,9783,9785],{"class":147,"line":7346},[145,9776,5216],{"class":258},[145,9778,5219],{"class":159},[145,9780,684],{"class":155},[145,9782,5224],{"class":262},[145,9784,690],{"class":155},[145,9786,9787],{"class":159},": \"\n",[145,9789,9790,9792,9794,9796,9799,9801,9803,9806,9808,9810],{"class":147,"line":7352},[145,9791,5216],{"class":258},[145,9793,448],{"class":159},[145,9795,684],{"class":155},[145,9797,9798],{"class":262},"error.get(",[145,9800,937],{"class":159},[145,9802,399],{"class":262},[145,9804,9805],{"class":159},"'Unknown'",[145,9807,945],{"class":262},[145,9809,690],{"class":155},[145,9811,950],{"class":159},[145,9813,9814],{"class":147,"line":7360},[145,9815,5242],{"class":262},[145,9817,9818,9820,9822,9824,9826,9828,9830,9832,9834,9836,9838,9840],{"class":147,"line":7374},[145,9819,5081],{"class":258},[145,9821,2508],{"class":262},[145,9823,1180],{"class":258},[145,9825,1218],{"class":262},[145,9827,4810],{"class":155},[145,9829,399],{"class":262},[145,9831,4831],{"class":155},[145,9833,399],{"class":262},[145,9835,4851],{"class":155},[145,9837,399],{"class":262},[145,9839,4871],{"class":155},[145,9841,547],{"class":262},[145,9843,9844,9846,9848,9850,9852,9854,9856,9858,9860,9862,9864,9866],{"class":147,"line":7379},[145,9845,5282],{"class":262},[145,9847,266],{"class":258},[145,9849,1218],{"class":262},[145,9851,5289],{"class":155},[145,9853,5292],{"class":258},[145,9855,5295],{"class":262},[145,9857,5298],{"class":258},[145,9859,5301],{"class":262},[145,9861,782],{"class":155},[145,9863,399],{"class":262},[145,9865,5308],{"class":155},[145,9867,405],{"class":262},[145,9869,9870,9872,9874,9876,9878,9880,9883,9885,9888,9890,9892,9894,9896,9899,9901,9903,9905,9907,9909],{"class":147,"line":7393},[145,9871,5315],{"class":155},[145,9873,793],{"class":262},[145,9875,439],{"class":258},[145,9877,5322],{"class":159},[145,9879,684],{"class":155},[145,9881,9882],{"class":262},"attempt",[145,9884,5298],{"class":258},[145,9886,9887],{"class":155},"1}",[145,9889,1226],{"class":159},[145,9891,684],{"class":155},[145,9893,5339],{"class":262},[145,9895,690],{"class":155},[145,9897,9898],{"class":159}," after ",[145,9900,684],{"class":155},[145,9902,5357],{"class":262},[145,9904,5360],{"class":258},[145,9906,690],{"class":155},[145,9908,1024],{"class":159},[145,9910,405],{"class":262},[145,9912,9913],{"class":147,"line":7407},[145,9914,5390],{"class":262},[145,9916,9917],{"class":147,"line":7439},[145,9918,5395],{"class":258},[145,9920,9921,9923],{"class":147,"line":7451},[145,9922,5405],{"class":258},[145,9924,9925],{"class":262}," requests.exceptions.RequestException:\n",[145,9927,9928,9930,9932,9934,9936,9938,9940,9942,9944,9946,9948,9950],{"class":147,"line":7461},[145,9929,5414],{"class":262},[145,9931,266],{"class":258},[145,9933,1218],{"class":262},[145,9935,5289],{"class":155},[145,9937,5292],{"class":258},[145,9939,5295],{"class":262},[145,9941,5298],{"class":258},[145,9943,5301],{"class":262},[145,9945,782],{"class":155},[145,9947,399],{"class":262},[145,9949,5308],{"class":155},[145,9951,405],{"class":262},[145,9953,9954,9956,9958,9960,9962,9964,9966,9968,9970,9972,9974,9976,9978,9980,9982,9984,9986,9988,9990],{"class":147,"line":7466},[145,9955,5442],{"class":155},[145,9957,793],{"class":262},[145,9959,439],{"class":258},[145,9961,5322],{"class":159},[145,9963,684],{"class":155},[145,9965,9882],{"class":262},[145,9967,5298],{"class":258},[145,9969,9887],{"class":155},[145,9971,1226],{"class":159},[145,9973,684],{"class":155},[145,9975,5339],{"class":262},[145,9977,690],{"class":155},[145,9979,9898],{"class":159},[145,9981,684],{"class":155},[145,9983,5357],{"class":262},[145,9985,5360],{"class":258},[145,9987,690],{"class":155},[145,9989,1024],{"class":159},[145,9991,405],{"class":262},[145,9993,9994],{"class":147,"line":7473},[145,9995,5493],{"class":262},[145,9997,9998],{"class":147,"line":7495},[145,9999,5499],{"class":258},[145,10001,10002,10004,10006,10008,10010,10012,10014,10016,10018,10020],{"class":147,"line":7526},[145,10003,996],{"class":258},[145,10005,908],{"class":155},[145,10007,793],{"class":262},[145,10009,439],{"class":258},[145,10011,5632],{"class":159},[145,10013,684],{"class":155},[145,10015,5339],{"class":262},[145,10017,690],{"class":155},[145,10019,5641],{"class":159},[145,10021,405],{"class":262},[145,10023,10024],{"class":147,"line":7531},[145,10025,375],{"emptyLinePlaceholder":58},[145,10027,10028],{"class":147,"line":7537},[145,10029,375],{"emptyLinePlaceholder":58},[145,10031,10032,10034,10036],{"class":147,"line":7562},[145,10033,525],{"class":258},[145,10035,5704],{"class":151},[145,10037,5707],{"class":262},[145,10039,10040],{"class":147,"line":7567},[145,10041,10042],{"class":159},"    \"\"\"API コール前に生成 payload をバリデーションします。\"\"\"\n",[145,10044,10045,10047,10049],{"class":147,"line":7572},[145,10046,5730],{"class":262},[145,10048,266],{"class":258},[145,10050,5735],{"class":262},[145,10052,10053,10055,10057,10059,10061],{"class":147,"line":7595},[145,10054,2505],{"class":258},[145,10056,5751],{"class":258},[145,10058,5754],{"class":262},[145,10060,5757],{"class":159},[145,10062,547],{"class":262},[145,10064,10065,10067,10069],{"class":147,"line":7605},[145,10066,5764],{"class":262},[145,10068,5767],{"class":159},[145,10070,405],{"class":262},[145,10072,10073,10075,10077,10079,10081,10083,10085,10087,10089,10091],{"class":147,"line":7611},[145,10074,2505],{"class":258},[145,10076,5751],{"class":258},[145,10078,5754],{"class":262},[145,10080,5780],{"class":159},[145,10082,1163],{"class":262},[145,10084,5785],{"class":258},[145,10086,5751],{"class":258},[145,10088,5790],{"class":262},[145,10090,5780],{"class":159},[145,10092,5795],{"class":262},[145,10094,10095,10097,10100],{"class":147,"line":7629},[145,10096,5764],{"class":262},[145,10098,10099],{"class":159},"\"'prompt' is required\"",[145,10101,405],{"class":262},[145,10103,10104,10106,10108,10110,10112,10114,10116],{"class":147,"line":7634},[145,10105,5818],{"class":262},[145,10107,266],{"class":258},[145,10109,5754],{"class":262},[145,10111,5825],{"class":159},[145,10113,399],{"class":262},[145,10115,1353],{"class":155},[145,10117,405],{"class":262},[145,10119,10120,10122,10124,10126,10128,10130,10132,10134,10136],{"class":147,"line":7639},[145,10121,2505],{"class":258},[145,10123,5838],{"class":262},[145,10125,647],{"class":258},[145,10127,5843],{"class":155},[145,10129,5846],{"class":258},[145,10131,5838],{"class":262},[145,10133,5851],{"class":258},[145,10135,5854],{"class":155},[145,10137,859],{"class":262},[145,10139,10140,10142,10144,10146,10148,10150,10152,10154],{"class":147,"line":7652},[145,10141,5764],{"class":262},[145,10143,439],{"class":258},[145,10145,5865],{"class":159},[145,10147,684],{"class":155},[145,10149,1776],{"class":262},[145,10151,690],{"class":155},[145,10153,448],{"class":159},[145,10155,405],{"class":262},[145,10157,10158,10160,10162,10164,10166,10168,10170],{"class":147,"line":7666},[145,10159,5911],{"class":262},[145,10161,266],{"class":258},[145,10163,5754],{"class":262},[145,10165,5918],{"class":159},[145,10167,399],{"class":262},[145,10169,1369],{"class":159},[145,10171,405],{"class":262},[145,10173,10174,10176,10178,10180,10182,10184,10186,10188,10190,10192,10194],{"class":147,"line":7693},[145,10175,2505],{"class":258},[145,10177,5931],{"class":262},[145,10179,5934],{"class":258},[145,10181,5937],{"class":258},[145,10183,5894],{"class":262},[145,10185,4012],{"class":159},[145,10187,399],{"class":262},[145,10189,1369],{"class":159},[145,10191,399],{"class":262},[145,10193,3709],{"class":159},[145,10195,10196],{"class":262},"}:\n",[145,10198,10199,10201,10203,10206,10208,10210,10212,10214],{"class":147,"line":7707},[145,10200,5764],{"class":262},[145,10202,439],{"class":258},[145,10204,10205],{"class":159},"\"Invalid quality: ",[145,10207,684],{"class":155},[145,10209,1784],{"class":262},[145,10211,690],{"class":155},[145,10213,448],{"class":159},[145,10215,405],{"class":262},[145,10217,10219,10221],{"class":147,"line":10218},99,[145,10220,2505],{"class":258},[145,10222,6206],{"class":262},[145,10224,10226,10228,10230,10232,10235,10237,10239,10241,10243,10245,10247,10249,10251,10253,10255,10257,10259,10261,10263,10265,10267],{"class":147,"line":10225},100,[145,10227,6211],{"class":258},[145,10229,5209],{"class":155},[145,10231,793],{"class":262},[145,10233,10234],{"class":159},"\"Validation failed:",[145,10236,1671],{"class":155},[145,10238,448],{"class":159},[145,10240,6227],{"class":258},[145,10242,6230],{"class":159},[145,10244,1671],{"class":155},[145,10246,448],{"class":159},[145,10248,6237],{"class":262},[145,10250,439],{"class":258},[145,10252,6242],{"class":159},[145,10254,684],{"class":155},[145,10256,5561],{"class":262},[145,10258,690],{"class":155},[145,10260,448],{"class":159},[145,10262,6253],{"class":258},[145,10264,6256],{"class":262},[145,10266,1180],{"class":258},[145,10268,6261],{"class":262},[145,10270,10272],{"class":147,"line":10271},101,[145,10273,375],{"emptyLinePlaceholder":58},[145,10275,10277],{"class":147,"line":10276},102,[145,10278,375],{"emptyLinePlaceholder":58},[145,10280,10282,10284,10286],{"class":147,"line":10281},103,[145,10283,525],{"class":258},[145,10285,2451],{"class":151},[145,10287,2454],{"class":262},[145,10289,10291],{"class":147,"line":10290},104,[145,10292,10293],{"class":159},"    \"\"\"pending または processing 状態のタスクをキャンセルします。\"\"\"\n",[145,10295,10297,10299,10301],{"class":147,"line":10296},105,[145,10298,1428],{"class":262},[145,10300,266],{"class":258},[145,10302,1433],{"class":262},[145,10304,10306,10308,10310,10312,10314,10316,10318,10320,10322],{"class":147,"line":10305},106,[145,10307,1438],{"class":258},[145,10309,448],{"class":159},[145,10311,678],{"class":155},[145,10313,681],{"class":159},[145,10315,684],{"class":155},[145,10317,687],{"class":262},[145,10319,690],{"class":155},[145,10321,2486],{"class":159},[145,10323,451],{"class":262},[145,10325,10327,10329,10331],{"class":147,"line":10326},107,[145,10328,1456],{"class":700},[145,10330,266],{"class":258},[145,10332,706],{"class":155},[145,10334,10336],{"class":147,"line":10335},108,[145,10337,1484],{"class":262},[145,10339,10341,10343,10345,10347,10349],{"class":147,"line":10340},109,[145,10342,2505],{"class":258},[145,10344,2508],{"class":262},[145,10346,853],{"class":258},[145,10348,2513],{"class":155},[145,10350,859],{"class":262},[145,10352,10354,10356,10358,10360,10362,10364,10366,10368,10371],{"class":147,"line":10353},110,[145,10355,790],{"class":155},[145,10357,793],{"class":262},[145,10359,439],{"class":258},[145,10361,920],{"class":159},[145,10363,684],{"class":155},[145,10365,687],{"class":262},[145,10367,690],{"class":155},[145,10369,10370],{"class":159}," cancelled.\"",[145,10372,405],{"class":262},[145,10374,10376,10378],{"class":147,"line":10375},111,[145,10377,2541],{"class":258},[145,10379,859],{"class":262},[145,10381,10383,10385,10387,10389,10391,10393,10395,10397,10399],{"class":147,"line":10382},112,[145,10384,790],{"class":155},[145,10386,793],{"class":262},[145,10388,439],{"class":258},[145,10390,2554],{"class":159},[145,10392,684],{"class":155},[145,10394,2559],{"class":262},[145,10396,690],{"class":155},[145,10398,448],{"class":159},[145,10400,405],{"class":262},[145,10402,10404],{"class":147,"line":10403},113,[145,10405,375],{"emptyLinePlaceholder":58},[145,10407,10409],{"class":147,"line":10408},114,[145,10410,375],{"emptyLinePlaceholder":58},[145,10412,10414],{"class":147,"line":10413},115,[145,10415,10416],{"class":174},"# ── 例 1：テキストから動画 ────────────────────────────────────\n",[145,10418,10420,10422,10424],{"class":147,"line":10419},116,[145,10421,525],{"class":258},[145,10423,1287],{"class":151},[145,10425,1290],{"class":262},[145,10427,10429,10431,10433],{"class":147,"line":10428},117,[145,10430,1295],{"class":262},[145,10432,266],{"class":258},[145,10434,427],{"class":262},[145,10436,10438,10440,10442,10444],{"class":147,"line":10437},118,[145,10439,1304],{"class":159},[145,10441,436],{"class":262},[145,10443,1309],{"class":159},[145,10445,451],{"class":262},[145,10447,10449,10451],{"class":147,"line":10448},119,[145,10450,1320],{"class":159},[145,10452,1323],{"class":262},[145,10454,10456],{"class":147,"line":10455},120,[145,10457,1328],{"class":159},[145,10459,10461],{"class":147,"line":10460},121,[145,10462,1333],{"class":159},[145,10464,10466],{"class":147,"line":10465},122,[145,10467,1338],{"class":159},[145,10469,10471],{"class":147,"line":10470},123,[145,10472,1343],{"class":262},[145,10474,10476,10478,10480,10482],{"class":147,"line":10475},124,[145,10477,1348],{"class":159},[145,10479,436],{"class":262},[145,10481,1353],{"class":155},[145,10483,451],{"class":262},[145,10485,10487,10489,10491,10493],{"class":147,"line":10486},125,[145,10488,1364],{"class":159},[145,10490,436],{"class":262},[145,10492,1369],{"class":159},[145,10494,451],{"class":262},[145,10496,10498,10500,10502,10504],{"class":147,"line":10497},126,[145,10499,1380],{"class":159},[145,10501,436],{"class":262},[145,10503,1385],{"class":159},[145,10505,451],{"class":262},[145,10507,10509,10511,10513],{"class":147,"line":10508},127,[145,10510,1396],{"class":159},[145,10512,436],{"class":262},[145,10514,3737],{"class":155},[145,10516,10518],{"class":147,"line":10517},128,[145,10519,1408],{"class":262},[145,10521,10523],{"class":147,"line":10522},129,[145,10524,10525],{"class":262},"    validate_payload(payload)\n",[145,10527,10529,10531,10533],{"class":147,"line":10528},130,[145,10530,1497],{"class":262},[145,10532,266],{"class":258},[145,10534,8391],{"class":262},[145,10536,10538,10540,10542,10544,10547,10549,10551,10553,10555,10557,10560,10562,10564,10566,10568,10570,10572,10574,10577],{"class":147,"line":10537},131,[145,10539,1102],{"class":155},[145,10541,793],{"class":262},[145,10543,439],{"class":258},[145,10545,10546],{"class":159},"\"Task: ",[145,10548,684],{"class":155},[145,10550,1530],{"class":262},[145,10552,1533],{"class":159},[145,10554,1536],{"class":262},[145,10556,690],{"class":155},[145,10558,10559],{"class":159}," (ETA: ",[145,10561,684],{"class":155},[145,10563,1530],{"class":262},[145,10565,1560],{"class":159},[145,10567,1563],{"class":262},[145,10569,1566],{"class":159},[145,10571,1536],{"class":262},[145,10573,690],{"class":155},[145,10575,10576],{"class":159},"s)\"",[145,10578,405],{"class":262},[145,10580,10582,10584,10586,10588,10590],{"class":147,"line":10581},132,[145,10583,1619],{"class":262},[145,10585,266],{"class":258},[145,10587,1624],{"class":262},[145,10589,1627],{"class":159},[145,10591,1630],{"class":262},[145,10593,10595,10598,10600,10602,10604,10607,10610],{"class":147,"line":10594},133,[145,10596,10597],{"class":262},"    download_video(result[",[145,10599,1652],{"class":159},[145,10601,1563],{"class":262},[145,10603,782],{"class":155},[145,10605,10606],{"class":262},"], ",[145,10608,10609],{"class":159},"\"text_to_video.mp4\"",[145,10611,405],{"class":262},[145,10613,10615],{"class":147,"line":10614},134,[145,10616,375],{"emptyLinePlaceholder":58},[145,10618,10620],{"class":147,"line":10619},135,[145,10621,375],{"emptyLinePlaceholder":58},[145,10623,10625],{"class":147,"line":10624},136,[145,10626,10627],{"class":174},"# ── 例 2：画像から動画 ────────────────────────────────────────\n",[145,10629,10631,10633,10635],{"class":147,"line":10630},137,[145,10632,525],{"class":258},[145,10634,2638],{"class":151},[145,10636,1290],{"class":262},[145,10638,10640,10642,10644],{"class":147,"line":10639},138,[145,10641,1295],{"class":262},[145,10643,266],{"class":258},[145,10645,427],{"class":262},[145,10647,10649,10651,10653,10655],{"class":147,"line":10648},139,[145,10650,1304],{"class":159},[145,10652,436],{"class":262},[145,10654,1309],{"class":159},[145,10656,451],{"class":262},[145,10658,10660,10662],{"class":147,"line":10659},140,[145,10661,1320],{"class":159},[145,10663,1323],{"class":262},[145,10665,10667],{"class":147,"line":10666},141,[145,10668,2669],{"class":159},[145,10670,10672],{"class":147,"line":10671},142,[145,10673,2674],{"class":159},[145,10675,10677],{"class":147,"line":10676},143,[145,10678,10679],{"class":159},"            \"across the frame.\"\n",[145,10681,10683],{"class":147,"line":10682},144,[145,10684,1343],{"class":262},[145,10686,10688,10690,10693,10696],{"class":147,"line":10687},145,[145,10689,2688],{"class":159},[145,10691,10692],{"class":262},": [",[145,10694,10695],{"class":159},"\"https://example.com/your-image.jpg\"",[145,10697,10698],{"class":262},"],\n",[145,10700,10702,10704,10706,10708],{"class":147,"line":10701},146,[145,10703,1348],{"class":159},[145,10705,436],{"class":262},[145,10707,1353],{"class":155},[145,10709,451],{"class":262},[145,10711,10713,10715,10717],{"class":147,"line":10712},147,[145,10714,1364],{"class":159},[145,10716,436],{"class":262},[145,10718,8370],{"class":159},[145,10720,10722],{"class":147,"line":10721},148,[145,10723,1408],{"class":262},[145,10725,10727],{"class":147,"line":10726},149,[145,10728,10525],{"class":262},[145,10730,10732,10734,10736],{"class":147,"line":10731},150,[145,10733,1497],{"class":262},[145,10735,266],{"class":258},[145,10737,8391],{"class":262},[145,10739,10741,10743,10745,10747,10749,10751,10753,10755,10757,10759,10761],{"class":147,"line":10740},151,[145,10742,1102],{"class":155},[145,10744,793],{"class":262},[145,10746,439],{"class":258},[145,10748,10546],{"class":159},[145,10750,684],{"class":155},[145,10752,1530],{"class":262},[145,10754,1533],{"class":159},[145,10756,1536],{"class":262},[145,10758,690],{"class":155},[145,10760,448],{"class":159},[145,10762,405],{"class":262},[145,10764,10766,10768,10770,10772,10774],{"class":147,"line":10765},152,[145,10767,1619],{"class":262},[145,10769,266],{"class":258},[145,10771,1624],{"class":262},[145,10773,1627],{"class":159},[145,10775,1630],{"class":262},[145,10777,10779,10781,10783,10785,10787,10789,10792],{"class":147,"line":10778},153,[145,10780,10597],{"class":262},[145,10782,1652],{"class":159},[145,10784,1563],{"class":262},[145,10786,782],{"class":155},[145,10788,10606],{"class":262},[145,10790,10791],{"class":159},"\"image_to_video.mp4\"",[145,10793,405],{"class":262},[145,10795,10797],{"class":147,"line":10796},154,[145,10798,375],{"emptyLinePlaceholder":58},[145,10800,10802],{"class":147,"line":10801},155,[145,10803,375],{"emptyLinePlaceholder":58},[145,10805,10807],{"class":147,"line":10806},156,[145,10808,10809],{"class":174},"# ── 例 3：縦型ソーシャルメディア動画 ──────────────────────────\n",[145,10811,10813,10815,10818],{"class":147,"line":10812},157,[145,10814,525],{"class":258},[145,10816,10817],{"class":151}," social_media_video",[145,10819,1290],{"class":262},[145,10821,10823,10825,10827],{"class":147,"line":10822},158,[145,10824,1295],{"class":262},[145,10826,266],{"class":258},[145,10828,427],{"class":262},[145,10830,10832,10834,10836,10838],{"class":147,"line":10831},159,[145,10833,1304],{"class":159},[145,10835,436],{"class":262},[145,10837,1309],{"class":159},[145,10839,451],{"class":262},[145,10841,10843,10845],{"class":147,"line":10842},160,[145,10844,1320],{"class":159},[145,10846,1323],{"class":262},[145,10848,10850],{"class":147,"line":10849},161,[145,10851,10852],{"class":159},"            \"A barista pours latte art in slow motion. \"\n",[145,10854,10856],{"class":147,"line":10855},162,[145,10857,10858],{"class":159},"            \"Close-up overhead shot, warm cafe lighting.\"\n",[145,10860,10862],{"class":147,"line":10861},163,[145,10863,1343],{"class":262},[145,10865,10867,10869,10871,10873],{"class":147,"line":10866},164,[145,10868,1348],{"class":159},[145,10870,436],{"class":262},[145,10872,3697],{"class":155},[145,10874,451],{"class":262},[145,10876,10878,10880,10882,10884],{"class":147,"line":10877},165,[145,10879,1364],{"class":159},[145,10881,436],{"class":262},[145,10883,3709],{"class":159},[145,10885,451],{"class":262},[145,10887,10889,10891,10893,10895],{"class":147,"line":10888},166,[145,10890,1380],{"class":159},[145,10892,436],{"class":262},[145,10894,3721],{"class":159},[145,10896,451],{"class":262},[145,10898,10900,10902,10904],{"class":147,"line":10899},167,[145,10901,1396],{"class":159},[145,10903,436],{"class":262},[145,10905,3737],{"class":155},[145,10907,10909],{"class":147,"line":10908},168,[145,10910,1408],{"class":262},[145,10912,10914],{"class":147,"line":10913},169,[145,10915,10525],{"class":262},[145,10917,10919,10921,10923],{"class":147,"line":10918},170,[145,10920,1497],{"class":262},[145,10922,266],{"class":258},[145,10924,8391],{"class":262},[145,10926,10928,10930,10932,10934,10936,10938,10940,10942,10944,10946,10948],{"class":147,"line":10927},171,[145,10929,1102],{"class":155},[145,10931,793],{"class":262},[145,10933,439],{"class":258},[145,10935,10546],{"class":159},[145,10937,684],{"class":155},[145,10939,1530],{"class":262},[145,10941,1533],{"class":159},[145,10943,1536],{"class":262},[145,10945,690],{"class":155},[145,10947,448],{"class":159},[145,10949,405],{"class":262},[145,10951,10953,10955,10957,10959,10961],{"class":147,"line":10952},172,[145,10954,1619],{"class":262},[145,10956,266],{"class":258},[145,10958,1624],{"class":262},[145,10960,1627],{"class":159},[145,10962,1630],{"class":262},[145,10964,10966,10968,10970,10972,10974,10976,10979],{"class":147,"line":10965},173,[145,10967,10597],{"class":262},[145,10969,1652],{"class":159},[145,10971,1563],{"class":262},[145,10973,782],{"class":155},[145,10975,10606],{"class":262},[145,10977,10978],{"class":159},"\"social_video.mp4\"",[145,10980,405],{"class":262},[145,10982,10984],{"class":147,"line":10983},174,[145,10985,375],{"emptyLinePlaceholder":58},[145,10987,10989],{"class":147,"line":10988},175,[145,10990,375],{"emptyLinePlaceholder":58},[145,10992,10994,10996,10998,11000,11002],{"class":147,"line":10993},176,[145,10995,1720],{"class":258},[145,10997,1723],{"class":155},[145,10999,1726],{"class":258},[145,11001,1729],{"class":159},[145,11003,859],{"class":262},[145,11005,11007,11009,11011,11014],{"class":147,"line":11006},177,[145,11008,1102],{"class":155},[145,11010,793],{"class":262},[145,11012,11013],{"class":159},"\"=== テキストから動画 ===\"",[145,11015,405],{"class":262},[145,11017,11019],{"class":147,"line":11018},178,[145,11020,1736],{"class":262},[145,11022,11024],{"class":147,"line":11023},179,[145,11025,11026],{"class":174},"    # print(\"\\n=== 画像から動画 ===\")\n",[145,11028,11030],{"class":147,"line":11029},180,[145,11031,11032],{"class":174},"    # image_to_video()  # コメントを外して画像 URL を設定\n",[145,11034,11036],{"class":147,"line":11035},181,[145,11037,11038],{"class":174},"    # print(\"\\n=== ソーシャルメディア動画 ===\")\n",[145,11040,11042],{"class":147,"line":11041},182,[145,11043,11044],{"class":174},"    # social_media_video()\n",[18,11046,11047],{},[11,11048,11049,11051,11052,11054,11055,11058],{},[23,11050,133],{}," 現在利用可能なモデルでテストするには、",[28,11053,1309],{}," を ",[28,11056,11057],{},"\"seedance-1.5-pro\""," に変更してください。API インターフェースは同一です — 同じエンドポイント、同じパラメータ、同じレスポンス形式。Seedance 2.0 が完全にリリースされたら、モデル名を戻すだけです。",[11,11060,11061],{},[23,11062,11063],{},[37,11064,11066],{"href":39,"rel":11065},[41],"構築を始めよう → EvoLink で無料 API Key を取得",[11068,11069,11070],"style",{},"html pre.shiki code .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .snl16, html code.shiki .snl16{--shiki-default:#F97583}html pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}html pre.shiki code .s9osk, html code.shiki .s9osk{--shiki-default:#FFAB70}",{"title":141,"searchDepth":166,"depth":166,"links":11072},[11073,11076,11077,11078,11082,11087,11092,11096,11102,11110,11111,11116,11128],{"id":50,"depth":166,"text":51,"children":11074},[11075],{"id":94,"depth":178,"text":94},{"id":204,"depth":166,"text":205},{"id":310,"depth":166,"text":311},{"id":1266,"depth":166,"text":1267,"children":11079},[11080,11081],{"id":1846,"depth":178,"text":1847},{"id":2174,"depth":178,"text":2175},{"id":2218,"depth":166,"text":2219,"children":11083},[11084,11085,11086],{"id":2268,"depth":178,"text":2268},{"id":2347,"depth":178,"text":2348},{"id":2436,"depth":178,"text":2436},{"id":2602,"depth":166,"text":2603,"children":11088},[11089,11090,11091],{"id":2941,"depth":178,"text":2942},{"id":3217,"depth":178,"text":3217},{"id":3292,"depth":178,"text":3293},{"id":3387,"depth":166,"text":3387,"children":11093},[11094,11095],{"id":3641,"depth":178,"text":3641},{"id":4049,"depth":178,"text":4049},{"id":4160,"depth":166,"text":4160,"children":11097},[11098,11099,11100,11101],{"id":4166,"depth":178,"text":4166},{"id":4675,"depth":178,"text":4675},{"id":4889,"depth":178,"text":4889},{"id":5688,"depth":178,"text":5689},{"id":6288,"depth":166,"text":6289,"children":11103},[11104,11105,11106,11107,11108,11109],{"id":6299,"depth":178,"text":6299},{"id":6477,"depth":178,"text":6478},{"id":6543,"depth":178,"text":6544},{"id":7798,"depth":178,"text":7799},{"id":7936,"depth":178,"text":7937},{"id":8115,"depth":178,"text":8116},{"id":8207,"depth":166,"text":8208},{"id":8794,"depth":166,"text":8794,"children":11112},[11113,11114,11115],{"id":8800,"depth":178,"text":8800},{"id":8842,"depth":178,"text":8842},{"id":8867,"depth":178,"text":8867},{"id":8919,"depth":166,"text":8919,"children":11117},[11118,11119,11120,11121,11122,11123,11124,11125,11126,11127],{"id":8922,"depth":178,"text":8923},{"id":8932,"depth":178,"text":8933},{"id":8942,"depth":178,"text":8943},{"id":8952,"depth":178,"text":8953},{"id":8967,"depth":178,"text":8968},{"id":8984,"depth":178,"text":8985},{"id":8998,"depth":178,"text":8999},{"id":9017,"depth":178,"text":9018},{"id":9028,"depth":178,"text":9029},{"id":9048,"depth":178,"text":9049},{"id":9061,"depth":166,"text":9061},"Python で Seedance 2.0 API を使って AI 動画を生成するステップバイステップチュートリアル。テキストから動画、画像から動画、非同期 polling、webhook、エラー処理を網羅。","md",{"date":11132,"image":11133,"seoTitle":11134,"author":11135},"2026-02-27","/s2-hero-api-tutorial.webp","Seedance 2.0 API チュートリアル：Python で初めての AI 動画生成（2026）","J @ EvoLink","/ja/blog/seedance-2-api-tutorial-python",{"title":6,"description":11129},"ja/blog/seedance-2-api-tutorial-python","HRth4VTeCZCpDjNa2cFf68BCbP8r4B0gr4--ncMhzrQ",{"id":11141,"title":11142,"body":11143,"description":13325,"extension":11130,"meta":13326,"navigation":58,"path":13329,"seo":13330,"stem":13331,"__hash__":13332},"content/ja/blog/seedance-2-camera-movement-api.md","Seedance 2.0 API でカメラムーブメントを再現する方法",{"type":8,"value":11144,"toc":13276},[11145,11148,11154,11161,11168,11188,11191,11202,11204,11208,11211,11218,11244,11247,11250,11252,11256,11265,11269,11275,11278,11283,11289,11294,11300,11307,11310,11382,11391,11400,11402,11405,11408,11427,11430,11442,11446,11797,11800,11812,11814,11818,11821,11824,11827,11833,11843,11846,11852,11855,11877,11881,12084,12087,12094,12099,12104,12110,12112,12116,12119,12122,12125,12130,12135,12138,12144,12147,12349,12352,12359,12364,12366,12370,12373,12376,12381,12386,12389,12395,12398,12595,12598,12601,12647,12650,12652,12656,12659,12663,12666,12683,12924,12927,12930,13009,13015,13020,13022,13025,13029,13034,13040,13046,13051,13057,13061,13064,13070,13074,13085,13091,13095,13098,13111,13115,13118,13132,13134,13138,13142,13155,13159,13162,13166,13172,13176,13179,13183,13192,13194,13197,13203,13206,13226,13229,13237,13239,13244,13266,13268,13273],[11,11146,11147],{},"カメラムーブメントこそが、平坦で静的な動画とシネマティックな映像を分ける要素です。ドリーズームは緊張感を生み出し、オービタルショットは壮大さを演出し、ワンテイクトラッキングショットは没入感を構築します。従来、これらを実現するにはジンバル、クレーン、ドローン、ステディカムなど高価な機材と、それを操作できるオペレーターが必要でした。",[11,11149,11150,11151,11153],{},"Seedance 2.0 はハードウェアを不要にします。再現したいカメラムーブメントが含まれるリファレンス動画をアップロードし、",[28,11152,2960],{}," タグでモデルに指示するだけで、API が正確なカメラ言語 — スピード、軌道、リズム、加速カーブ — を再現した新しいコンテンツを生成します。",[11,11155,11156],{},[11157,11158],"img",{"alt":11159,"src":11160},"Seedance 2.0 API によるシネマティックカメラムーブメントの再現 — ドリートラック可視化","/s4-hero-camera-movement.webp",[11,11162,11163,11164,11167],{},"本チュートリアルでは、",[37,11165,213],{"href":211,"rel":11166},[41]," 経由の Seedance 2.0 API を使った3つのカメラ再現ケースを解説します：",[70,11169,11170,11176,11182],{},[73,11171,11172,11175],{},[23,11173,11174],{},"ワンテイクトラッキングショット"," — 複数の環境を通して被写体を追い続ける連続カメラワーク",[73,11177,11178,11181],{},[23,11179,11180],{},"ヒッチコックズーム（ドリーズーム）"," — 古典的なめまいエフェクト",[73,11183,11184,11187],{},[23,11185,11186],{},"オービタルカメラ"," — 被写体の周囲を360°回転するショット",[11,11189,11190],{},"各ケースにはコピー＆ペーストですぐに実行できる Python スクリプトを完全収録しています。",[11,11192,11193,11196,11197,11201],{},[23,11194,11195],{},"前提条件："," Python 3.8+、",[37,11198,11200],{"href":211,"rel":11199},[41],"EvoLink API キー","（無料枠あり）、各カメラムーブメントタイプのリファレンス動画。",[45,11203],{},[48,11205,11207],{"id":11206},"カメラムーブメントの再現がai動画を変える理由","カメラムーブメントの再現がAI動画を変える理由",[11,11209,11210],{},"ほとんどのAI動画生成ツールは、テキストベースの基本的なカメラコントロールしか提供しません。「dolly in」や「pan left」と入力して、モデルが正しく解釈されることを祈るだけです。結果は不安定で、スムーズなプッシュインになることもあれば、ぎこちないパンになったり、何も変化しないこともあります。",[11,11212,11213,11214,11217],{},"Seedance 2.0 は根本的に異なるアプローチを取ります：",[23,11215,11216],{},"言葉で伝えるのではなく、見せる","。カメラムーブメントを言葉で記述する代わりに、再現したい正確な動きを示す動画をアップロードします。モデルはリファレンスを分析し、以下を再現します：",[96,11219,11220,11226,11232,11238],{},[73,11221,11222,11225],{},[23,11223,11224],{},"カメラの軌道"," — トラッキングパス、オービタルアーク、クレーンムーブメント",[73,11227,11228,11231],{},[23,11229,11230],{},"スピードと加速"," — イーズイン、イーズアウト、急停止、スムーズなグライド",[73,11233,11234,11237],{},[23,11235,11236],{},"焦点の挙動"," — ラックフォーカスのタイミング、被写界深度の変化",[73,11239,11240,11243],{},[23,11241,11242],{},"構図のリズム"," — カメラが動き出す前に各フレーミングがどれだけ維持されるか",[11,11245,11246],{},"つまり、ハリウッド映画のカメラムーブメント、YouTubeのドローンショット、自分で撮影したジンバルクリップを取り込み、その正確な動きをまったく新しいコンテンツに適用できるのです。",[11,11248,11249],{},"このレベルのカメラコントロールを提供するAI動画APIは他にありません。Sora 2 と Kling 3.0 はカメラ指示にテキストプロンプトを使用し、Veo 3.1 は基本的なカメラキーワードに対応するのみです。リファレンス動画入力によるカメラ言語の抽出に対応しているのは Seedance 2.0 だけです。",[45,11251],{},[48,11253,11255],{"id":11254},"seedance-20-がカメラ言語を読み取る仕組み","Seedance 2.0 がカメラ言語を読み取る仕組み",[11,11257,11258,11260,11261,11264],{},[28,11259,2960],{}," タグがそのメカニズムです。リファレンス動画をアップロードしてプロンプト内でタグ付けする際、モデルがそこから",[2619,11262,11263],{},"何を","抽出すべきかを指定します。これは非常に重要です — 1本のリファレンス動画には、カメラムーブメント、被写体の動き、ビジュアルエフェクト、ライティング、ペーシングが含まれています。モデルにどの要素を使うか伝える必要があります。",[92,11266,11268],{"id":11267},"video-タグの構文","@Video タグの構文",[11,11270,11271,11274],{},[28,11272,11273],{},"@Video1"," — カメラムーブメントとトラッキング軌道のリファレンス",[11,11276,11277],{},"プロンプトで参照する内容を明示的に記述します。以下の2つのアプローチを比較してみましょう：",[11,11279,11280],{},[23,11281,11282],{},"曖昧（不安定）：",[136,11284,11287],{"className":11285,"code":11286,"language":2186},[2184],"Use @Video1 as reference. Generate a city scene.\n",[28,11288,11286],{"__ignoreMap":141},[11,11290,11291],{},[23,11292,11293],{},"具体的（安定）：",[136,11295,11298],{"className":11296,"code":11297,"language":2186},[2184],"Replicate @Video1's camera movement exactly — the tracking speed,\ntrajectory, and push-in timing. Apply this camera work to a new scene:\na samurai walking through a bamboo forest at dawn.\n",[28,11299,11297],{"__ignoreMap":141},[11,11301,11302,11303,11306],{},"2つ目の書き方はモデルに次のように伝えています：リファレンスからカメラ言語",[2619,11304,11305],{},"のみ","を抽出せよ。新しいコンテンツ（侍、竹林）を生成するが、仮想カメラはリファレンス動画のカメラの動きを正確に再現せよ。",[92,11308,11309],{"id":11309},"抽出可能な要素",[2037,11311,11312,11325],{},[2040,11313,11314],{},[2043,11315,11316,11319,11322],{},[2046,11317,11318],{},"リファレンス要素",[2046,11320,11321],{},"プロンプトの記述",[2046,11323,11324],{},"例",[2053,11326,11327,11338,11349,11360,11371],{},[2043,11328,11329,11332,11335],{},[2058,11330,11331],{},"カメラパス/軌道",[2058,11333,11334],{},"\"replicate camera movement\"",[2058,11336,11337],{},"トラッキング、ドリー、オービット、クレーン",[2043,11339,11340,11343,11346],{},[2058,11341,11342],{},"カメラスピード",[2058,11344,11345],{},"\"match camera pacing\"",[2058,11347,11348],{},"スロークリープ、高速ウィップパン",[2043,11350,11351,11354,11357],{},[2058,11352,11353],{},"カメラ + 被写体の動き",[2058,11355,11356],{},"\"replicate camera and choreography\"",[2058,11358,11359],{},"ダンス + カメラのコンビネーション",[2043,11361,11362,11365,11368],{},[2058,11363,11364],{},"被写体の動きのみ",[2058,11366,11367],{},"\"replicate movement/action from @Video1\"",[2058,11369,11370],{},"キャラクターの歩行パターン",[2043,11372,11373,11376,11379],{},[2058,11374,11375],{},"ビジュアルエフェクト",[2058,11377,11378],{},"\"replicate transition effects\"",[2058,11380,11381],{},"ウィップパントランジション、モーフ",[11,11383,11384,11387,11388,11390],{},[23,11385,11386],{},"重要なルール："," 何を参照するか明示的に記述してください。カメラムーブメント",[2619,11389,11305],{},"が必要なら「camera movement」と書きます。アクションの振り付けも必要なら、両方を記述します。曖昧さは混在した結果につながります。",[11,11392,11393,11396,11397,1261],{},[28,11394,11395],{},"@"," タグリファレンスシステムの完全ガイドについては、",[37,11398,11399],{"href":2967},"マルチモーダルリファレンス：@Tags 完全ガイド",[45,11401],{},[48,11403,11404],{"id":11404},"環境のセットアップ",[92,11406,11407],{"id":11407},"必要なもの",[96,11409,11410,11412,11417,11424],{},[73,11411,102],{},[73,11413,11414,11416],{},[28,11415,112],{}," ライブラリ",[73,11418,11419,11420,117],{},"EvoLink API キー（",[37,11421,11423],{"href":211,"rel":11422},[41],"無料サインアップ",[73,11425,11426],{},"リファレンス動画ファイル（MP4、2〜15秒、50MB以下、480p〜720p）",[92,11428,11429],{"id":11429},"依存関係のインストール",[136,11431,11432],{"className":138,"code":317,"language":140,"meta":141,"style":141},[28,11433,11434],{"__ignoreMap":141},[145,11435,11436,11438,11440],{"class":147,"line":148},[145,11437,190],{"class":151},[145,11439,193],{"class":159},[145,11441,328],{"class":159},[92,11443,11445],{"id":11444},"ベースapi設定","ベースAPI設定",[136,11447,11449],{"className":337,"code":11448,"language":339,"meta":141,"style":141},"import requests\nimport time\n\nEVOLINK_API_KEY = \"your-evolink-api-key\"\nBASE_URL = \"https://api.evolink.ai/v1\"\nHEADERS = {\n    \"Authorization\": f\"Bearer {EVOLINK_API_KEY}\",\n    \"Content-Type\": \"application/json\"\n}\n\ndef poll_task(task_id, interval=5, timeout=300):\n    elapsed = 0\n    while elapsed \u003C timeout:\n        resp = requests.get(\n            f\"{BASE_URL}/tasks/{task_id}\",\n            headers=HEADERS\n        )\n        result = resp.json()\n        status = result.get(\"status\")\n\n        if status == \"completed\":\n            print(f\"Video ready: {result['results'][0]}\")\n            return result\n        elif status == \"failed\":\n            print(f\"Generation failed: {result.get('error')}\")\n            return result\n\n        print(f\"Status: {status} ({elapsed}s elapsed)\")\n        time.sleep(interval)\n        elapsed += interval\n\n    print(\"Timeout reached\")\n    return None\n",[28,11450,11451,11457,11463,11467,11476,11484,11492,11509,11517,11521,11525,11548,11556,11566,11574,11594,11602,11606,11616,11629,11633,11645,11676,11682,11694,11721,11727,11731,11761,11766,11775,11779,11790],{"__ignoreMap":141},[145,11452,11453,11455],{"class":147,"line":148},[145,11454,346],{"class":258},[145,11456,328],{"class":262},[145,11458,11459,11461],{"class":147,"line":166},[145,11460,346],{"class":258},[145,11462,355],{"class":262},[145,11464,11465],{"class":147,"line":178},[145,11466,375],{"emptyLinePlaceholder":58},[145,11468,11469,11471,11473],{"class":147,"line":187},[145,11470,275],{"class":155},[145,11472,390],{"class":258},[145,11474,11475],{"class":159}," \"your-evolink-api-key\"\n",[145,11477,11478,11480,11482],{"class":147,"line":372},[145,11479,411],{"class":155},[145,11481,390],{"class":258},[145,11483,416],{"class":159},[145,11485,11486,11488,11490],{"class":147,"line":378},[145,11487,422],{"class":155},[145,11489,390],{"class":258},[145,11491,427],{"class":262},[145,11493,11494,11496,11498,11500,11502,11505,11507],{"class":147,"line":384},[145,11495,433],{"class":159},[145,11497,436],{"class":262},[145,11499,439],{"class":258},[145,11501,442],{"class":159},[145,11503,11504],{"class":155},"{EVOLINK_API_KEY}",[145,11506,448],{"class":159},[145,11508,451],{"class":262},[145,11510,11511,11513,11515],{"class":147,"line":408},[145,11512,457],{"class":159},[145,11514,436],{"class":262},[145,11516,462],{"class":159},[145,11518,11519],{"class":147,"line":419},[145,11520,468],{"class":262},[145,11522,11523],{"class":147,"line":430},[145,11524,375],{"emptyLinePlaceholder":58},[145,11526,11527,11529,11532,11535,11537,11539,11541,11543,11546],{"class":147,"line":454},[145,11528,525],{"class":258},[145,11530,11531],{"class":151}," poll_task",[145,11533,11534],{"class":262},"(task_id, interval",[145,11536,266],{"class":258},[145,11538,1353],{"class":155},[145,11540,539],{"class":262},[145,11542,266],{"class":258},[145,11544,11545],{"class":155},"300",[145,11547,547],{"class":262},[145,11549,11550,11552,11554],{"class":147,"line":465},[145,11551,630],{"class":262},[145,11553,266],{"class":258},[145,11555,635],{"class":155},[145,11557,11558,11560,11562,11564],{"class":147,"line":599},[145,11559,641],{"class":258},[145,11561,644],{"class":262},[145,11563,647],{"class":258},[145,11565,650],{"class":262},[145,11567,11568,11570,11572],{"class":147,"line":604},[145,11569,6787],{"class":262},[145,11571,266],{"class":258},[145,11573,667],{"class":262},[145,11575,11576,11578,11580,11582,11584,11586,11588,11590,11592],{"class":147,"line":610},[145,11577,673],{"class":258},[145,11579,448],{"class":159},[145,11581,678],{"class":155},[145,11583,681],{"class":159},[145,11585,684],{"class":155},[145,11587,687],{"class":262},[145,11589,690],{"class":155},[145,11591,448],{"class":159},[145,11593,451],{"class":262},[145,11595,11596,11598,11600],{"class":147,"line":616},[145,11597,701],{"class":700},[145,11599,266],{"class":258},[145,11601,706],{"class":155},[145,11603,11604],{"class":147,"line":622},[145,11605,712],{"class":262},[145,11607,11608,11611,11613],{"class":147,"line":627},[145,11609,11610],{"class":262},"        result ",[145,11612,266],{"class":258},[145,11614,11615],{"class":262}," resp.json()\n",[145,11617,11618,11620,11622,11625,11627],{"class":147,"line":638},[145,11619,752],{"class":262},[145,11621,266],{"class":258},[145,11623,11624],{"class":262}," result.get(",[145,11626,760],{"class":159},[145,11628,405],{"class":262},[145,11630,11631],{"class":147,"line":653},[145,11632,375],{"emptyLinePlaceholder":58},[145,11634,11635,11637,11639,11641,11643],{"class":147,"line":659},[145,11636,847],{"class":258},[145,11638,850],{"class":262},[145,11640,853],{"class":258},[145,11642,856],{"class":159},[145,11644,859],{"class":262},[145,11646,11647,11649,11651,11653,11656,11658,11661,11664,11666,11668,11670,11672,11674],{"class":147,"line":670},[145,11648,5442],{"class":155},[145,11650,793],{"class":262},[145,11652,439],{"class":258},[145,11654,11655],{"class":159},"\"Video ready: ",[145,11657,684],{"class":155},[145,11659,11660],{"class":262},"result[",[145,11662,11663],{"class":159},"'results'",[145,11665,1563],{"class":262},[145,11667,782],{"class":155},[145,11669,1536],{"class":262},[145,11671,690],{"class":155},[145,11673,448],{"class":159},[145,11675,405],{"class":262},[145,11677,11678,11680],{"class":147,"line":697},[145,11679,865],{"class":258},[145,11681,1707],{"class":262},[145,11683,11684,11686,11688,11690,11692],{"class":147,"line":709},[145,11685,874],{"class":258},[145,11687,850],{"class":262},[145,11689,853],{"class":258},[145,11691,881],{"class":159},[145,11693,859],{"class":262},[145,11695,11696,11698,11700,11702,11705,11707,11710,11713,11715,11717,11719],{"class":147,"line":715},[145,11697,5442],{"class":155},[145,11699,793],{"class":262},[145,11701,439],{"class":258},[145,11703,11704],{"class":159},"\"Generation failed: ",[145,11706,684],{"class":155},[145,11708,11709],{"class":262},"result.get(",[145,11711,11712],{"class":159},"'error'",[145,11714,945],{"class":262},[145,11716,690],{"class":155},[145,11718,448],{"class":159},[145,11720,405],{"class":262},[145,11722,11723,11725],{"class":147,"line":721},[145,11724,865],{"class":258},[145,11726,1707],{"class":262},[145,11728,11729],{"class":147,"line":727},[145,11730,375],{"emptyLinePlaceholder":58},[145,11732,11733,11735,11737,11739,11742,11744,11746,11748,11750,11752,11754,11756,11759],{"class":147,"line":738},[145,11734,790],{"class":155},[145,11736,793],{"class":262},[145,11738,439],{"class":258},[145,11740,11741],{"class":159},"\"Status: ",[145,11743,684],{"class":155},[145,11745,813],{"class":262},[145,11747,690],{"class":155},[145,11749,1218],{"class":159},[145,11751,684],{"class":155},[145,11753,803],{"class":262},[145,11755,690],{"class":155},[145,11757,11758],{"class":159},"s elapsed)\"",[145,11760,405],{"class":262},[145,11762,11763],{"class":147,"line":743},[145,11764,11765],{"class":262},"        time.sleep(interval)\n",[145,11767,11768,11770,11772],{"class":147,"line":749},[145,11769,979],{"class":262},[145,11771,982],{"class":258},[145,11773,11774],{"class":262}," interval\n",[145,11776,11777],{"class":147,"line":766},[145,11778,375],{"emptyLinePlaceholder":58},[145,11780,11781,11783,11785,11788],{"class":147,"line":787},[145,11782,1102],{"class":155},[145,11784,793],{"class":262},[145,11786,11787],{"class":159},"\"Timeout reached\"",[145,11789,405],{"class":262},[145,11791,11792,11794],{"class":147,"line":833},[145,11793,1704],{"class":258},[145,11795,11796],{"class":155}," None\n",[11,11798,11799],{},"このベースコードは、認証とタスクポーリングを処理します。以下のすべてのケースはこのコードの上に構築されます。",[11,11801,11802,11803,11807,11808,11811],{},"以下の例を試すには、",[37,11804,11806],{"href":211,"rel":11805},[41],"evolink.ai"," で",[23,11809,11810],{},"無料の EvoLink API キーを取得","してください。",[45,11813],{},[48,11815,11817],{"id":11816},"ケース-1ワンテイクトラッキングショット","ケース 1：ワンテイクトラッキングショット",[11,11819,11820],{},"ワンテイクトラッキングショットは、映画制作における最も迫力のあるカメラテクニックの1つです。カメラが被写体を複数の環境にわたって1回の連続テイクで追い続けます — カットなし。『グッドフェローズ』の有名なコパカバーナのシーンや、『オールド・ボーイ』の廊下の格闘シーンを思い浮かべてください。",[11,11822,11823],{},"Seedance 2.0 では、連続的なトラッキングムーブメントを示すリファレンス動画をアップロードし、同じカメラパスに沿った新しいコンテンツを生成することで、これを再現します。",[92,11825,11407],{"id":11826},"必要なもの-1",[11,11828,11829,11832],{},[23,11830,11831],{},"リファレンス動画："," 連続的なトラッキングカメラムーブメントを示すクリップ（2〜15秒）。ジンバルウォーキングショット、ドローンフォローショット、またはステディカムクリップが適しています。",[11,11834,11835,11838,11839,11842],{},[23,11836,11837],{},"プロンプト："," リファレンス動画のカメラムーブメントを参照しながら、",[2619,11840,11841],{},"新しいコンテンツ","を記述します。",[92,11844,11845],{"id":11845},"プロンプト",[136,11847,11850],{"className":11848,"code":11849,"language":2186},[2184],"Replicate @Video1's camera movement exactly — continuous one-take\ntracking shot, maintaining the same speed, trajectory, and smooth\nforward motion throughout.\n\nApply this camera work to a new scene: a parkour runner sprinting\nthrough narrow city alleyways, leaping over obstacles, vaulting up\na staircase, and reaching a rooftop overlooking the city skyline.\nGolden sunset lighting. Dynamic and energetic. No cuts.\n",[28,11851,11849],{"__ignoreMap":141},[11,11853,11854],{},"このプロンプトの重要な要素：",[96,11856,11857,11865,11871],{},[73,11858,11859,2427,11862,11864],{},[23,11860,11861],{},"1〜3行目：",[28,11863,11273],{}," からカメラムーブメントを抽出するよう明示的に指示",[73,11866,11867,11870],{},[23,11868,11869],{},"5〜8行目："," まったく新しいコンテンツを記述 — モデルがこの被写体を生成",[73,11872,11873,11876],{},[23,11874,11875],{},"「No cuts」："," ワンテイクの要件を強調",[92,11878,11880],{"id":11879},"完全な-python-コード","完全な Python コード",[136,11882,11884],{"className":337,"code":11883,"language":339,"meta":141,"style":141},"# Case 1: One-Take Tracking Shot\n\nresponse = requests.post(\n    f\"{BASE_URL}/videos/generations\",\n    headers=HEADERS,\n    json={\n        \"model\": \"seedance-2.0\",\n        \"prompt\": (\n            \"Replicate @Video1's camera movement exactly — continuous \"\n            \"one-take tracking shot, maintaining the same speed, \"\n            \"trajectory, and smooth forward motion throughout.\\n\\n\"\n            \"Apply this camera work to a new scene: a parkour runner \"\n            \"sprinting through narrow city alleyways, leaping over \"\n            \"obstacles, vaulting up a staircase, and reaching a rooftop \"\n            \"overlooking the city skyline. Golden sunset lighting. \"\n            \"Dynamic and energetic. No cuts.\"\n        ),\n        \"video_urls\": [\"https://your-cdn.com/tracking_reference.mp4\"],\n        \"duration\": 10,\n        \"quality\": \"720p\"\n    }\n)\n\ntask_id = response.json()[\"id\"]\nprint(f\"Task created: {task_id}\")\nresult = poll_task(task_id)\n",[28,11885,11886,11891,11895,11903,11915,11925,11933,11943,11949,11954,11959,11969,11974,11979,11984,11989,11994,11998,12010,12020,12028,12032,12036,12040,12054,12074],{"__ignoreMap":141},[145,11887,11888],{"class":147,"line":148},[145,11889,11890],{"class":174},"# Case 1: One-Take Tracking Shot\n",[145,11892,11893],{"class":147,"line":166},[145,11894,375],{"emptyLinePlaceholder":58},[145,11896,11897,11899,11901],{"class":147,"line":178},[145,11898,6387],{"class":262},[145,11900,266],{"class":258},[145,11902,1433],{"class":262},[145,11904,11905,11907,11909,11911,11913],{"class":147,"line":187},[145,11906,6396],{"class":258},[145,11908,448],{"class":159},[145,11910,678],{"class":155},[145,11912,1445],{"class":159},[145,11914,451],{"class":262},[145,11916,11917,11919,11921,11923],{"class":147,"line":372},[145,11918,6409],{"class":700},[145,11920,266],{"class":258},[145,11922,422],{"class":155},[145,11924,451],{"class":262},[145,11926,11927,11929,11931],{"class":147,"line":378},[145,11928,6420],{"class":700},[145,11930,266],{"class":258},[145,11932,1866],{"class":262},[145,11934,11935,11937,11939,11941],{"class":147,"line":384},[145,11936,1304],{"class":159},[145,11938,436],{"class":262},[145,11940,1309],{"class":159},[145,11942,451],{"class":262},[145,11944,11945,11947],{"class":147,"line":408},[145,11946,1320],{"class":159},[145,11948,1323],{"class":262},[145,11950,11951],{"class":147,"line":419},[145,11952,11953],{"class":159},"            \"Replicate @Video1's camera movement exactly — continuous \"\n",[145,11955,11956],{"class":147,"line":430},[145,11957,11958],{"class":159},"            \"one-take tracking shot, maintaining the same speed, \"\n",[145,11960,11961,11964,11967],{"class":147,"line":454},[145,11962,11963],{"class":159},"            \"trajectory, and smooth forward motion throughout.",[145,11965,11966],{"class":155},"\\n\\n",[145,11968,950],{"class":159},[145,11970,11971],{"class":147,"line":465},[145,11972,11973],{"class":159},"            \"Apply this camera work to a new scene: a parkour runner \"\n",[145,11975,11976],{"class":147,"line":599},[145,11977,11978],{"class":159},"            \"sprinting through narrow city alleyways, leaping over \"\n",[145,11980,11981],{"class":147,"line":604},[145,11982,11983],{"class":159},"            \"obstacles, vaulting up a staircase, and reaching a rooftop \"\n",[145,11985,11986],{"class":147,"line":610},[145,11987,11988],{"class":159},"            \"overlooking the city skyline. Golden sunset lighting. \"\n",[145,11990,11991],{"class":147,"line":616},[145,11992,11993],{"class":159},"            \"Dynamic and energetic. No cuts.\"\n",[145,11995,11996],{"class":147,"line":622},[145,11997,1343],{"class":262},[145,11999,12000,12003,12005,12008],{"class":147,"line":627},[145,12001,12002],{"class":159},"        \"video_urls\"",[145,12004,10692],{"class":262},[145,12006,12007],{"class":159},"\"https://your-cdn.com/tracking_reference.mp4\"",[145,12009,10698],{"class":262},[145,12011,12012,12014,12016,12018],{"class":147,"line":638},[145,12013,1348],{"class":159},[145,12015,436],{"class":262},[145,12017,536],{"class":155},[145,12019,451],{"class":262},[145,12021,12022,12024,12026],{"class":147,"line":653},[145,12023,1364],{"class":159},[145,12025,436],{"class":262},[145,12027,8370],{"class":159},[145,12029,12030],{"class":147,"line":659},[145,12031,1408],{"class":262},[145,12033,12034],{"class":147,"line":670},[145,12035,405],{"class":262},[145,12037,12038],{"class":147,"line":697},[145,12039,375],{"emptyLinePlaceholder":58},[145,12041,12042,12045,12047,12050,12052],{"class":147,"line":709},[145,12043,12044],{"class":262},"task_id ",[145,12046,266],{"class":258},[145,12048,12049],{"class":262}," response.json()[",[145,12051,1627],{"class":159},[145,12053,763],{"class":262},[145,12055,12056,12058,12060,12062,12064,12066,12068,12070,12072],{"class":147,"line":715},[145,12057,6442],{"class":155},[145,12059,793],{"class":262},[145,12061,439],{"class":258},[145,12063,1525],{"class":159},[145,12065,684],{"class":155},[145,12067,687],{"class":262},[145,12069,690],{"class":155},[145,12071,448],{"class":159},[145,12073,405],{"class":262},[145,12075,12076,12079,12081],{"class":147,"line":721},[145,12077,12078],{"class":262},"result ",[145,12080,266],{"class":258},[145,12082,12083],{"class":262}," poll_task(task_id)\n",[92,12085,12086],{"id":12086},"期待される結果",[11,12088,12089,12090,12093],{},"生成された動画には、都市環境を走るパルクールランナーが映ります — ただし、カメラムーブメント（トラッキングスピード、前進の勢い、スムーズな連続動作）はリファレンス動画から来ています。モデルはリファレンスの被写体や背景をコピーしません。",[2619,12091,12092],{},"カメラの動き方","をコピーするのです。",[56,12095,60,12096],{"controls":58,"playsInline":58,"style":59},[62,12097],{"src":12098,"type":65},"https://cdn.evolink.ai/seedance2api/%E5%9F%8E%E5%B8%82%E8%B7%91%E9%85%B7.mp4",[11,12100,12101],{},[2619,12102,12103],{},"出力例：都市環境を駆け抜けるパルクールランナーを追うワンテイクトラッキングショット。カメラはジンバルのような安定性でスムーズな前進運動を維持。",[11,12105,12106,12109],{},[23,12107,12108],{},"自分で試してみましょう："," 自分のリファレンス動画 — ドローンフォローショット、車のドライブレコーダー映像、ウォーキングジンバル動画 — に差し替え、プロンプトを希望するシーンに合わせて変更してください。カメラムーブメントが転送されます。",[45,12111],{},[48,12113,12115],{"id":12114},"ケース-2ヒッチコックズームドリーズーム","ケース 2：ヒッチコックズーム（ドリーズーム）",[11,12117,12118],{},"ドリーズームは、アルフレッド・ヒッチコックの『めまい』（1958年）で発明された、映画史上最も不安感を与える強力なカメラテクニックの1つです。カメラが被写体に向かって（または離れて）物理的に移動しながら、レンズが逆方向にズームします。被写体はフレーム内で同じサイズを維持しますが、背景が劇的に歪みます。不安感、覚醒感、感情の転換を本能的に感じさせるエフェクトです。",[11,12120,12121],{},"実際の映画制作では、ドリートラックと精密なズームタイミングが必要です。Seedance 2.0 では、リファレンスクリップがあれば十分です。",[92,12123,11407],{"id":12124},"必要なもの-2",[11,12126,12127,12129],{},[23,12128,11831],{}," ドリーズームエフェクトを示すクリップ。YouTubeで「dolly zoom effect」や「vertigo effect tutorial」と検索すると例が見つかります。被写体が静止した状態で背景が圧縮/拡張する3〜8秒のクリップが理想的です。",[11,12131,12132,12134],{},[23,12133,11837],{}," ドリーズームの明示的なリファレンスを含む新しい被写体の記述。",[92,12136,11845],{"id":12137},"プロンプト-1",[136,12139,12142],{"className":12140,"code":12141,"language":2186},[2184],"Replicate @Video1's camera technique exactly — the dolly zoom\n(Hitchcock zoom) effect where the camera moves forward while\nzooming out, keeping the subject the same size while the\nbackground dramatically stretches.\n\nApply this effect to: a detective standing in a dim corridor.\nAs the dolly zoom activates, the corridor behind him stretches\nimpossibly long, creating a sense of dawning horror.\nDramatic side lighting with deep shadows. Film noir atmosphere.\n",[28,12143,12141],{"__ignoreMap":141},[92,12145,11880],{"id":12146},"完全な-python-コード-1",[136,12148,12150],{"className":337,"code":12149,"language":339,"meta":141,"style":141},"# Case 2: Hitchcock Zoom (Dolly Zoom)\n\nresponse = requests.post(\n    f\"{BASE_URL}/videos/generations\",\n    headers=HEADERS,\n    json={\n        \"model\": \"seedance-2.0\",\n        \"prompt\": (\n            \"Replicate @Video1's camera technique exactly — the dolly \"\n            \"zoom (Hitchcock zoom) effect where the camera moves forward \"\n            \"while zooming out, keeping the subject the same size while \"\n            \"the background dramatically stretches.\\n\\n\"\n            \"Apply this effect to: a detective standing in a dim \"\n            \"corridor. As the dolly zoom activates, the corridor behind \"\n            \"him stretches impossibly long, creating a sense of dawning \"\n            \"horror. Dramatic side lighting with deep shadows. \"\n            \"Film noir atmosphere.\"\n        ),\n        \"video_urls\": [\"https://your-cdn.com/dolly_zoom_reference.mp4\"],\n        \"duration\": 8,\n        \"quality\": \"720p\"\n    }\n)\n\ntask_id = response.json()[\"id\"]\nprint(f\"Task created: {task_id}\")\nresult = poll_task(task_id)\n",[28,12151,12152,12157,12161,12169,12181,12191,12199,12209,12215,12220,12225,12230,12239,12244,12249,12254,12259,12264,12268,12279,12289,12297,12301,12305,12309,12321,12341],{"__ignoreMap":141},[145,12153,12154],{"class":147,"line":148},[145,12155,12156],{"class":174},"# Case 2: Hitchcock Zoom (Dolly Zoom)\n",[145,12158,12159],{"class":147,"line":166},[145,12160,375],{"emptyLinePlaceholder":58},[145,12162,12163,12165,12167],{"class":147,"line":178},[145,12164,6387],{"class":262},[145,12166,266],{"class":258},[145,12168,1433],{"class":262},[145,12170,12171,12173,12175,12177,12179],{"class":147,"line":187},[145,12172,6396],{"class":258},[145,12174,448],{"class":159},[145,12176,678],{"class":155},[145,12178,1445],{"class":159},[145,12180,451],{"class":262},[145,12182,12183,12185,12187,12189],{"class":147,"line":372},[145,12184,6409],{"class":700},[145,12186,266],{"class":258},[145,12188,422],{"class":155},[145,12190,451],{"class":262},[145,12192,12193,12195,12197],{"class":147,"line":378},[145,12194,6420],{"class":700},[145,12196,266],{"class":258},[145,12198,1866],{"class":262},[145,12200,12201,12203,12205,12207],{"class":147,"line":384},[145,12202,1304],{"class":159},[145,12204,436],{"class":262},[145,12206,1309],{"class":159},[145,12208,451],{"class":262},[145,12210,12211,12213],{"class":147,"line":408},[145,12212,1320],{"class":159},[145,12214,1323],{"class":262},[145,12216,12217],{"class":147,"line":419},[145,12218,12219],{"class":159},"            \"Replicate @Video1's camera technique exactly — the dolly \"\n",[145,12221,12222],{"class":147,"line":430},[145,12223,12224],{"class":159},"            \"zoom (Hitchcock zoom) effect where the camera moves forward \"\n",[145,12226,12227],{"class":147,"line":454},[145,12228,12229],{"class":159},"            \"while zooming out, keeping the subject the same size while \"\n",[145,12231,12232,12235,12237],{"class":147,"line":465},[145,12233,12234],{"class":159},"            \"the background dramatically stretches.",[145,12236,11966],{"class":155},[145,12238,950],{"class":159},[145,12240,12241],{"class":147,"line":599},[145,12242,12243],{"class":159},"            \"Apply this effect to: a detective standing in a dim \"\n",[145,12245,12246],{"class":147,"line":604},[145,12247,12248],{"class":159},"            \"corridor. As the dolly zoom activates, the corridor behind \"\n",[145,12250,12251],{"class":147,"line":610},[145,12252,12253],{"class":159},"            \"him stretches impossibly long, creating a sense of dawning \"\n",[145,12255,12256],{"class":147,"line":616},[145,12257,12258],{"class":159},"            \"horror. Dramatic side lighting with deep shadows. \"\n",[145,12260,12261],{"class":147,"line":622},[145,12262,12263],{"class":159},"            \"Film noir atmosphere.\"\n",[145,12265,12266],{"class":147,"line":627},[145,12267,1343],{"class":262},[145,12269,12270,12272,12274,12277],{"class":147,"line":638},[145,12271,12002],{"class":159},[145,12273,10692],{"class":262},[145,12275,12276],{"class":159},"\"https://your-cdn.com/dolly_zoom_reference.mp4\"",[145,12278,10698],{"class":262},[145,12280,12281,12283,12285,12287],{"class":147,"line":653},[145,12282,1348],{"class":159},[145,12284,436],{"class":262},[145,12286,3697],{"class":155},[145,12288,451],{"class":262},[145,12290,12291,12293,12295],{"class":147,"line":659},[145,12292,1364],{"class":159},[145,12294,436],{"class":262},[145,12296,8370],{"class":159},[145,12298,12299],{"class":147,"line":670},[145,12300,1408],{"class":262},[145,12302,12303],{"class":147,"line":697},[145,12304,405],{"class":262},[145,12306,12307],{"class":147,"line":709},[145,12308,375],{"emptyLinePlaceholder":58},[145,12310,12311,12313,12315,12317,12319],{"class":147,"line":715},[145,12312,12044],{"class":262},[145,12314,266],{"class":258},[145,12316,12049],{"class":262},[145,12318,1627],{"class":159},[145,12320,763],{"class":262},[145,12322,12323,12325,12327,12329,12331,12333,12335,12337,12339],{"class":147,"line":721},[145,12324,6442],{"class":155},[145,12326,793],{"class":262},[145,12328,439],{"class":258},[145,12330,1525],{"class":159},[145,12332,684],{"class":155},[145,12334,687],{"class":262},[145,12336,690],{"class":155},[145,12338,448],{"class":159},[145,12340,405],{"class":262},[145,12342,12343,12345,12347],{"class":147,"line":727},[145,12344,12078],{"class":262},[145,12346,266],{"class":258},[145,12348,12083],{"class":262},[92,12350,12351],{"id":12351},"この手法が効果的な理由",[11,12353,12354,12355,12358],{},"ドリーズームはテキストで記述するのが非常に難しいことで知られています。「zoom in while moving backward」というプロンプトは、他のAI動画ツールでは混乱した結果を生みがちです。テクニックを",[2619,12356,12357],{},"実演する","リファレンス動画を提供することで、Seedance 2.0 は空間関係の変化 — 背景が前景に対してどのように圧縮/拡張するか — を分析し、正確に再現できます。",[11,12360,12361,12363],{},[23,12362,133],{}," リファレンス動画内のドリーズームがクリーンで独立しているほど、結果が良くなります。被写体の動きやシーンチェンジが多いリファレンスクリップは避けましょう — モデルがカメラの動きと被写体の動きを混同する可能性があります。",[45,12365],{},[48,12367,12369],{"id":12368},"ケース-3オービタルカメラ360回転","ケース 3：オービタルカメラ（360°回転）",[11,12371,12372],{},"オービタルショットは、被写体の周囲をカメラが回転し、ドラマチックなリビールやキャラクターの存在感を演出します。ミュージックビデオ、ヒーロー登場シーン、商品紹介の定番テクニックです。",[92,12374,11407],{"id":12375},"必要なもの-3",[11,12377,12378,12380],{},[23,12379,11831],{}," 被写体の周囲をカメラが回転するクリップ。スムーズな180°または360°の回転が最適です。ターンテーブルの商品ショットやキャラクターリビールショットが理想的なリファレンスです。",[11,12382,12383,12385],{},[23,12384,11837],{}," 新しい被写体 + 明示的なオービタルリファレンス。",[92,12387,11845],{"id":12388},"プロンプト-2",[136,12390,12393],{"className":12391,"code":12392,"language":2186},[2184],"Replicate @Video1's orbital camera movement — the smooth 360°\nrotation around the subject, maintaining consistent distance\nand speed throughout the arc.\n\nApply this camera movement to: a lone astronaut standing on\nthe surface of Mars. Red desert landscape stretches to the\nhorizon. The orbital camera reveals the astronaut from all\nangles as dust particles float in the thin atmosphere.\nEpic cinematic scale. Golden hour Martian lighting.\n",[28,12394,12392],{"__ignoreMap":141},[92,12396,11880],{"id":12397},"完全な-python-コード-2",[136,12399,12401],{"className":337,"code":12400,"language":339,"meta":141,"style":141},"# Case 3: Orbital Camera (360 Rotation)\n\nresponse = requests.post(\n    f\"{BASE_URL}/videos/generations\",\n    headers=HEADERS,\n    json={\n        \"model\": \"seedance-2.0\",\n        \"prompt\": (\n            \"Replicate @Video1's orbital camera movement — the smooth \"\n            \"360 degree rotation around the subject, maintaining consistent \"\n            \"distance and speed throughout the arc.\\n\\n\"\n            \"Apply this camera movement to: a lone astronaut standing \"\n            \"on the surface of Mars. Red desert landscape stretches to \"\n            \"the horizon. The orbital camera reveals the astronaut from \"\n            \"all angles as dust particles float in the thin atmosphere. \"\n            \"Epic cinematic scale. Golden hour Martian lighting.\"\n        ),\n        \"video_urls\": [\"https://your-cdn.com/orbital_reference.mp4\"],\n        \"duration\": 10,\n        \"quality\": \"720p\"\n    }\n)\n\ntask_id = response.json()[\"id\"]\nprint(f\"Task created: {task_id}\")\nresult = poll_task(task_id)\n",[28,12402,12403,12408,12412,12420,12432,12442,12450,12460,12466,12471,12476,12485,12490,12495,12500,12505,12510,12514,12525,12535,12543,12547,12551,12555,12567,12587],{"__ignoreMap":141},[145,12404,12405],{"class":147,"line":148},[145,12406,12407],{"class":174},"# Case 3: Orbital Camera (360 Rotation)\n",[145,12409,12410],{"class":147,"line":166},[145,12411,375],{"emptyLinePlaceholder":58},[145,12413,12414,12416,12418],{"class":147,"line":178},[145,12415,6387],{"class":262},[145,12417,266],{"class":258},[145,12419,1433],{"class":262},[145,12421,12422,12424,12426,12428,12430],{"class":147,"line":187},[145,12423,6396],{"class":258},[145,12425,448],{"class":159},[145,12427,678],{"class":155},[145,12429,1445],{"class":159},[145,12431,451],{"class":262},[145,12433,12434,12436,12438,12440],{"class":147,"line":372},[145,12435,6409],{"class":700},[145,12437,266],{"class":258},[145,12439,422],{"class":155},[145,12441,451],{"class":262},[145,12443,12444,12446,12448],{"class":147,"line":378},[145,12445,6420],{"class":700},[145,12447,266],{"class":258},[145,12449,1866],{"class":262},[145,12451,12452,12454,12456,12458],{"class":147,"line":384},[145,12453,1304],{"class":159},[145,12455,436],{"class":262},[145,12457,1309],{"class":159},[145,12459,451],{"class":262},[145,12461,12462,12464],{"class":147,"line":408},[145,12463,1320],{"class":159},[145,12465,1323],{"class":262},[145,12467,12468],{"class":147,"line":419},[145,12469,12470],{"class":159},"            \"Replicate @Video1's orbital camera movement — the smooth \"\n",[145,12472,12473],{"class":147,"line":430},[145,12474,12475],{"class":159},"            \"360 degree rotation around the subject, maintaining consistent \"\n",[145,12477,12478,12481,12483],{"class":147,"line":454},[145,12479,12480],{"class":159},"            \"distance and speed throughout the arc.",[145,12482,11966],{"class":155},[145,12484,950],{"class":159},[145,12486,12487],{"class":147,"line":465},[145,12488,12489],{"class":159},"            \"Apply this camera movement to: a lone astronaut standing \"\n",[145,12491,12492],{"class":147,"line":599},[145,12493,12494],{"class":159},"            \"on the surface of Mars. Red desert landscape stretches to \"\n",[145,12496,12497],{"class":147,"line":604},[145,12498,12499],{"class":159},"            \"the horizon. The orbital camera reveals the astronaut from \"\n",[145,12501,12502],{"class":147,"line":610},[145,12503,12504],{"class":159},"            \"all angles as dust particles float in the thin atmosphere. \"\n",[145,12506,12507],{"class":147,"line":616},[145,12508,12509],{"class":159},"            \"Epic cinematic scale. Golden hour Martian lighting.\"\n",[145,12511,12512],{"class":147,"line":622},[145,12513,1343],{"class":262},[145,12515,12516,12518,12520,12523],{"class":147,"line":627},[145,12517,12002],{"class":159},[145,12519,10692],{"class":262},[145,12521,12522],{"class":159},"\"https://your-cdn.com/orbital_reference.mp4\"",[145,12524,10698],{"class":262},[145,12526,12527,12529,12531,12533],{"class":147,"line":638},[145,12528,1348],{"class":159},[145,12530,436],{"class":262},[145,12532,536],{"class":155},[145,12534,451],{"class":262},[145,12536,12537,12539,12541],{"class":147,"line":653},[145,12538,1364],{"class":159},[145,12540,436],{"class":262},[145,12542,8370],{"class":159},[145,12544,12545],{"class":147,"line":659},[145,12546,1408],{"class":262},[145,12548,12549],{"class":147,"line":670},[145,12550,405],{"class":262},[145,12552,12553],{"class":147,"line":697},[145,12554,375],{"emptyLinePlaceholder":58},[145,12556,12557,12559,12561,12563,12565],{"class":147,"line":709},[145,12558,12044],{"class":262},[145,12560,266],{"class":258},[145,12562,12049],{"class":262},[145,12564,1627],{"class":159},[145,12566,763],{"class":262},[145,12568,12569,12571,12573,12575,12577,12579,12581,12583,12585],{"class":147,"line":715},[145,12570,6442],{"class":155},[145,12572,793],{"class":262},[145,12574,439],{"class":258},[145,12576,1525],{"class":159},[145,12578,684],{"class":155},[145,12580,687],{"class":262},[145,12582,690],{"class":155},[145,12584,448],{"class":159},[145,12586,405],{"class":262},[145,12588,12589,12591,12593],{"class":147,"line":721},[145,12590,12078],{"class":262},[145,12592,266],{"class":258},[145,12594,12083],{"class":262},[92,12596,12597],{"id":12597},"適切なオービタルリファレンスの選び方",[11,12599,12600],{},"すべてのオービタルショットが同じではありません。リファレンス動画が結果を決定します：",[2037,12602,12603,12613],{},[2040,12604,12605],{},[2043,12606,12607,12610],{},[2046,12608,12609],{},"リファレンスの品質",[2046,12611,12612],{},"結果の品質",[2053,12614,12615,12623,12631,12639],{},[2043,12616,12617,12620],{},[2058,12618,12619],{},"一定速度でのスムーズで安定した回転",[2058,12621,12622],{},"クリーンでプロフェッショナルなオービタル",[2043,12624,12625,12628],{},[2058,12626,12627],{},"手持ちの揺れる回転",[2058,12629,12630],{},"オーガニックなドキュメンタリー風オービット",[2043,12632,12633,12636],{},[2058,12634,12635],{},"高速ウィップアラウンド",[2058,12637,12638],{},"ダイナミックで高エネルギーなリビール",[2043,12640,12641,12644],{},[2058,12642,12643],{},"ゆっくりとした90°パーシャルオービット",[2058,12645,12646],{},"控えめでドラマチックなアングルシフト",[11,12648,12649],{},"求めるエネルギーに合ったリファレンスを選びましょう。ターンテーブルの商品動画はマシンのようにスムーズな回転を、手持ちウォークアラウンドはオーガニックな動きを提供します。",[45,12651],{},[48,12653,12655],{"id":12654},"応用編カメラムーブメントと他のリファレンスの組み合わせ","応用編：カメラムーブメントと他のリファレンスの組み合わせ",[11,12657,12658],{},"Seedance 2.0 のリファレンスシステムの真の力は、カメラムーブメントを他の入力タイプと組み合わせた時に発揮されます。単一のリファレンスに限定されず、最大3本の動画リファレンスと9枚の画像リファレンス（合計12ファイル）を使用できます。",[92,12660,12662],{"id":12661},"カメラ-キャラクター-スタイル","カメラ + キャラクター + スタイル",[11,12664,12665],{},"3つの入力を組み合わせた例：",[96,12667,12668,12673,12678],{},[73,12669,12670,12672],{},[28,12671,11273],{}," — カメラムーブメント（オービタルショット）",[73,12674,12675,12677],{},[28,12676,2909],{}," — キャラクターの外見（特定のキャラクターデザイン）",[73,12679,12680,12682],{},[28,12681,2919],{}," — スタイルリファレンス（特定のアートスタイルまたはカラーパレット）",[136,12684,12686],{"className":337,"code":12685,"language":339,"meta":141,"style":141},"# Advanced: Camera + Character + Style combination\n\nresponse = requests.post(\n    f\"{BASE_URL}/videos/generations\",\n    headers=HEADERS,\n    json={\n        \"model\": \"seedance-2.0\",\n        \"prompt\": (\n            \"Replicate @Video1's orbital camera movement — smooth \"\n            \"rotation around the subject.\\n\\n\"\n            \"@Image1 is the character — maintain this character's \"\n            \"appearance exactly.\\n\\n\"\n            \"@Image2 is the visual style reference — match its color \"\n            \"palette, lighting mood, and artistic treatment.\\n\\n\"\n            \"Scene: The character from @Image1 stands in the center \"\n            \"of a grand cathedral. The orbital camera from @Video1 \"\n            \"slowly reveals the architecture. Visual style matches \"\n            \"@Image2 throughout.\"\n        ),\n        \"image_urls\": [\n            \"https://your-cdn.com/character_design.png\",\n            \"https://your-cdn.com/art_style_reference.jpg\"\n        ],\n        \"video_urls\": [\n            \"https://your-cdn.com/orbital_reference.mp4\"\n        ],\n        \"duration\": 10,\n        \"quality\": \"720p\"\n    }\n)\n\ntask_id = response.json()[\"id\"]\nprint(f\"Task created: {task_id}\")\nresult = poll_task(task_id)\n",[28,12687,12688,12693,12697,12705,12717,12727,12735,12745,12751,12756,12765,12770,12779,12784,12793,12798,12803,12808,12813,12817,12823,12830,12835,12839,12845,12850,12854,12864,12872,12876,12880,12884,12896,12916],{"__ignoreMap":141},[145,12689,12690],{"class":147,"line":148},[145,12691,12692],{"class":174},"# Advanced: Camera + Character + Style combination\n",[145,12694,12695],{"class":147,"line":166},[145,12696,375],{"emptyLinePlaceholder":58},[145,12698,12699,12701,12703],{"class":147,"line":178},[145,12700,6387],{"class":262},[145,12702,266],{"class":258},[145,12704,1433],{"class":262},[145,12706,12707,12709,12711,12713,12715],{"class":147,"line":187},[145,12708,6396],{"class":258},[145,12710,448],{"class":159},[145,12712,678],{"class":155},[145,12714,1445],{"class":159},[145,12716,451],{"class":262},[145,12718,12719,12721,12723,12725],{"class":147,"line":372},[145,12720,6409],{"class":700},[145,12722,266],{"class":258},[145,12724,422],{"class":155},[145,12726,451],{"class":262},[145,12728,12729,12731,12733],{"class":147,"line":378},[145,12730,6420],{"class":700},[145,12732,266],{"class":258},[145,12734,1866],{"class":262},[145,12736,12737,12739,12741,12743],{"class":147,"line":384},[145,12738,1304],{"class":159},[145,12740,436],{"class":262},[145,12742,1309],{"class":159},[145,12744,451],{"class":262},[145,12746,12747,12749],{"class":147,"line":408},[145,12748,1320],{"class":159},[145,12750,1323],{"class":262},[145,12752,12753],{"class":147,"line":419},[145,12754,12755],{"class":159},"            \"Replicate @Video1's orbital camera movement — smooth \"\n",[145,12757,12758,12761,12763],{"class":147,"line":430},[145,12759,12760],{"class":159},"            \"rotation around the subject.",[145,12762,11966],{"class":155},[145,12764,950],{"class":159},[145,12766,12767],{"class":147,"line":454},[145,12768,12769],{"class":159},"            \"@Image1 is the character — maintain this character's \"\n",[145,12771,12772,12775,12777],{"class":147,"line":465},[145,12773,12774],{"class":159},"            \"appearance exactly.",[145,12776,11966],{"class":155},[145,12778,950],{"class":159},[145,12780,12781],{"class":147,"line":599},[145,12782,12783],{"class":159},"            \"@Image2 is the visual style reference — match its color \"\n",[145,12785,12786,12789,12791],{"class":147,"line":604},[145,12787,12788],{"class":159},"            \"palette, lighting mood, and artistic treatment.",[145,12790,11966],{"class":155},[145,12792,950],{"class":159},[145,12794,12795],{"class":147,"line":610},[145,12796,12797],{"class":159},"            \"Scene: The character from @Image1 stands in the center \"\n",[145,12799,12800],{"class":147,"line":616},[145,12801,12802],{"class":159},"            \"of a grand cathedral. The orbital camera from @Video1 \"\n",[145,12804,12805],{"class":147,"line":622},[145,12806,12807],{"class":159},"            \"slowly reveals the architecture. Visual style matches \"\n",[145,12809,12810],{"class":147,"line":627},[145,12811,12812],{"class":159},"            \"@Image2 throughout.\"\n",[145,12814,12815],{"class":147,"line":638},[145,12816,1343],{"class":262},[145,12818,12819,12821],{"class":147,"line":653},[145,12820,2688],{"class":159},[145,12822,2691],{"class":262},[145,12824,12825,12828],{"class":147,"line":659},[145,12826,12827],{"class":159},"            \"https://your-cdn.com/character_design.png\"",[145,12829,451],{"class":262},[145,12831,12832],{"class":147,"line":670},[145,12833,12834],{"class":159},"            \"https://your-cdn.com/art_style_reference.jpg\"\n",[145,12836,12837],{"class":147,"line":697},[145,12838,2701],{"class":262},[145,12840,12841,12843],{"class":147,"line":709},[145,12842,12002],{"class":159},[145,12844,2691],{"class":262},[145,12846,12847],{"class":147,"line":715},[145,12848,12849],{"class":159},"            \"https://your-cdn.com/orbital_reference.mp4\"\n",[145,12851,12852],{"class":147,"line":721},[145,12853,2701],{"class":262},[145,12855,12856,12858,12860,12862],{"class":147,"line":727},[145,12857,1348],{"class":159},[145,12859,436],{"class":262},[145,12861,536],{"class":155},[145,12863,451],{"class":262},[145,12865,12866,12868,12870],{"class":147,"line":738},[145,12867,1364],{"class":159},[145,12869,436],{"class":262},[145,12871,8370],{"class":159},[145,12873,12874],{"class":147,"line":743},[145,12875,1408],{"class":262},[145,12877,12878],{"class":147,"line":749},[145,12879,405],{"class":262},[145,12881,12882],{"class":147,"line":766},[145,12883,375],{"emptyLinePlaceholder":58},[145,12885,12886,12888,12890,12892,12894],{"class":147,"line":787},[145,12887,12044],{"class":262},[145,12889,266],{"class":258},[145,12891,12049],{"class":262},[145,12893,1627],{"class":159},[145,12895,763],{"class":262},[145,12897,12898,12900,12902,12904,12906,12908,12910,12912,12914],{"class":147,"line":833},[145,12899,6442],{"class":155},[145,12901,793],{"class":262},[145,12903,439],{"class":258},[145,12905,1525],{"class":159},[145,12907,684],{"class":155},[145,12909,687],{"class":262},[145,12911,690],{"class":155},[145,12913,448],{"class":159},[145,12915,405],{"class":262},[145,12917,12918,12920,12922],{"class":147,"line":838},[145,12919,12078],{"class":262},[145,12921,266],{"class":258},[145,12923,12083],{"class":262},[92,12925,12926],{"id":12926},"リファレンス配分戦略",[11,12928,12929],{},"複数のリファレンスタイプを組み合わせる際は、12ファイル枠を戦略的に使いましょう：",[2037,12931,12932,12947],{},[2040,12933,12934],{},[2043,12935,12936,12938,12941,12944],{},[2046,12937,8125],{},[2046,12939,12940],{},"動画リファレンス",[2046,12942,12943],{},"画像リファレンス",[2046,12945,12946],{},"音声リファレンス",[2053,12948,12949,12961,12973,12984,12996],{},[2043,12950,12951,12954,12957,12959],{},[2058,12952,12953],{},"カメラ再現のみ",[2058,12955,12956],{},"1（カメラ）",[2058,12958,782],{},[2058,12960,782],{},[2043,12962,12963,12966,12968,12971],{},[2058,12964,12965],{},"カメラ + キャラクター",[2058,12967,12956],{},[2058,12969,12970],{},"1（キャラクター）",[2058,12972,782],{},[2043,12974,12975,12977,12979,12982],{},[2058,12976,12662],{},[2058,12978,12956],{},[2058,12980,12981],{},"2（キャラクター + スタイル）",[2058,12983,782],{},[2043,12985,12986,12989,12992,12994],{},[2058,12987,12988],{},"カメラ + 振り付け + キャラクター",[2058,12990,12991],{},"2（カメラ + ダンス）",[2058,12993,12970],{},[2058,12995,782],{},[2043,12997,12998,13001,13003,13006],{},[2058,12999,13000],{},"フルプロダクション",[2058,13002,12956],{},[2058,13004,13005],{},"3（キャラクター + シーン + スタイル）",[2058,13007,13008],{},"1（音楽）",[11,13010,13011,13014],{},[23,13012,13013],{},"経験則："," 2〜3つのリファレンスから始めましょう。リファレンスを増やしても必ずしも結果が改善するわけではなく、矛盾するシグナルを与えてしまう可能性があります。意図を伝えるために必要な最小限のリファレンス数を使用してください。",[11,13016,13017,13018,1261],{},"マルチリファレンス戦略の詳細については、",[37,13019,11399],{"href":2967},[45,13021],{},[48,13023,13024],{"id":13024},"よくあるミスとその修正方法",[92,13026,13028],{"id":13027},"ミス-1リファレンスの対象を指定しない","ミス 1：リファレンスの対象を指定しない",[11,13030,13031],{},[23,13032,13033],{},"悪い例：",[136,13035,13038],{"className":13036,"code":13037,"language":2186},[2184],"Use @Video1. A knight rides a horse through a valley.\n",[28,13039,13037],{"__ignoreMap":141},[11,13041,13042,13043,13045],{},"モデルは ",[28,13044,11273],{}," からカメラムーブメント、被写体の動き、ビジュアルスタイル、またはすべてのどれを参照すべきか分かりません。",[11,13047,13048],{},[23,13049,13050],{},"良い例：",[136,13052,13055],{"className":13053,"code":13054,"language":2186},[2184],"Replicate @Video1's camera movement and tracking trajectory.\nA knight rides a horse through a green valley at sunrise.\n",[28,13056,13054],{"__ignoreMap":141},[92,13058,13060],{"id":13059},"ミス-2リファレンス動画が長すぎるまたは複雑すぎる","ミス 2：リファレンス動画が長すぎるまたは複雑すぎる",[11,13062,13063],{},"リファレンス動画は2〜15秒で、クリーンで識別可能なカメラムーブメントを示す必要があります。3つの異なるカメラテクニック（パン、ズーム、オービット）が含まれる15秒のクリップは、混乱したシグナルを与えます。",[11,13065,13066,13069],{},[23,13067,13068],{},"修正方法："," 必要な特定のカメラムーブメントを分離するようにリファレンスをトリミングしてください。そのテクニックの最もシンプルでクリーンな例を使いましょう。",[92,13071,13073],{"id":13072},"ミス-3カメラの動きと被写体の動きを混同する","ミス 3：カメラの動きと被写体の動きを混同する",[11,13075,13076,13077,13080,13081,13084],{},"誰かが踊っているリファレンス動画には、",[2619,13078,13079],{},"カメラ","の動きと",[2619,13082,13083],{},"被写体","の動きの2つが含まれています。カメラワークだけが必要な場合は、明示的にそう記述してください：",[136,13086,13089],{"className":13087,"code":13088,"language":2186},[2184],"Replicate ONLY @Video1's camera movement — the pan speed, tracking\ntrajectory, and framing rhythm. Ignore the subject's actions.\n\nNew subject: a robot assembling car parts on a factory floor.\n",[28,13090,13088],{"__ignoreMap":141},[92,13092,13094],{"id":13093},"ミス-4プロンプトとリファレンスの矛盾","ミス 4：プロンプトとリファレンスの矛盾",[11,13096,13097],{},"リファレンスがゆっくりスムーズなドリープッシュインを示しているのに、プロンプトが「fast-paced action with rapid cuts」と言っている場合、モデルは矛盾したシグナルを受け取ります。",[11,13099,13100,13102,13103,13106,13107,13110],{},[23,13101,13068],{}," テキストプロンプトをリファレンス動画のエネルギーに合わせましょう。プロンプトは",[2619,13104,13105],{},"コンテンツ","を記述し、リファレンスは",[2619,13108,13109],{},"テクニック","を示すものです。",[92,13112,13114],{"id":13113},"ミス-5最初から完璧な結果を期待する","ミス 5：最初から完璧な結果を期待する",[11,13116,13117],{},"カメラの再現は高度な技術です。最初の試みがリファレンスと完全に一致しない場合があります。繰り返し改善しましょう：",[70,13119,13120,13123,13126,13129],{},[73,13121,13122],{},"シンプルなプロンプト + クリーンなリファレンスから始める",[73,13124,13125],{},"出力を確認 — カメラムーブメントは近いか？",[73,13127,13128],{},"ずれている部分についてプロンプトの記述をより具体的に調整する",[73,13130,13131],{},"テクニックが転送されない場合は、別のリファレンス動画を試す",[45,13133],{},[48,13135,13137],{"id":13136},"faq","FAQ",[92,13139,13141],{"id":13140},"あるビデオのカメラムーブメントと別のビデオの振り付けを組み合わせることはできますか","あるビデオのカメラムーブメントと別のビデオの振り付けを組み合わせることはできますか？",[11,13143,13144,13145,13147,13148,13150,13151,13154],{},"はい。2つの ",[28,13146,2960],{}," リファレンスを使用します：",[28,13149,11273],{}," をカメラムーブメント用、",[28,13152,13153],{},"@Video2"," を振り付け/アクション用に設定します。プロンプトで「Replicate @Video1's camera movement and @Video2's dance choreography.」と指定してください。Seedance 2.0 は最大3本の動画リファレンスを同時に使用できます。",[92,13156,13158],{"id":13157},"カメラリファレンスに最適な動画フォーマットと長さは","カメラリファレンスに最適な動画フォーマットと長さは？",[11,13160,13161],{},"MP4フォーマット、480p〜720p解像度、2〜15秒の長さ、50MB以下のファイルサイズ。カメラムーブメントリファレンスの場合、短い方が良いことが多く、単一のカメラテクニックのクリーンな3〜5秒のクリップの方が、複数のテクニックが含まれる長いクリップよりも確実に転送されます。",[92,13163,13165],{"id":13164},"sora-や-kling-のカメラコントロールとどう違いますか","Sora や Kling のカメラコントロールとどう違いますか？",[11,13167,13168,13169,13171],{},"Sora 2 と Kling 3.0 はテキストベースのカメラ指示を使用します — 動きを言葉で記述します（「dolly in」「pan left」）。結果はモデルがテキストをどれだけ正確に解釈するかに依存します。Seedance 2.0 はリファレンスベースのカメラコントロールを使用します — ",[28,13170,2960],{}," タグでモデルに求めるものを見せます。これにより、特にヒッチコックズームやワンテイクトラッキングショットなど、テキストで記述するのが難しい複雑なムーブメントに対して、より正確で一貫したカメラ再現が可能になります。",[92,13173,13175],{"id":13174},"スクリーン録画やスマホ動画をカメラリファレンスとして使えますか","スクリーン録画やスマホ動画をカメラリファレンスとして使えますか？",[11,13177,13178],{},"はい。再現したいカメラムーブメントを示す動画であれば、何でもリファレンスとして使えます。歩きながら撮影したスマホ動画は手持ちトラッキングショットを生成し、映画クリップのスクリーン録画はその映画のカメラ言語を転送します。モデルは制作品質に関係なく、カメラの挙動を抽出します。",[92,13180,13182],{"id":13181},"カメラ再現は画像から動画への生成でも使えますか","カメラ再現は画像から動画への生成でも使えますか？",[11,13184,13185,13186,13188,13189,13191],{},"はい。",[28,13187,11273],{},"（カメラムーブメントリファレンス）と ",[28,13190,2909],{},"（最初のフレーム / キャラクター）を組み合わせて、画像から開始し、動画リファレンスに従ってカメラを動かす動画を生成できます。商品動画やキャラクターショーケースに強力な手法です。",[45,13193],{},[48,13195,13196],{"id":13196},"あらゆるカメラムーブメントの再現を始めよう",[11,13198,13199,13200,13202],{},"カメラムーブメントは、もはや機材や専門知識によって制限されるものではありません。リファレンス動画と Seedance 2.0 の ",[28,13201,2960],{}," タグシステムがあれば、繊細なラックフォーカスプルからフルのヒッチコックズームまで、あらゆるカメラテクニックを再現し、記述可能なあらゆるコンテンツに適用できます。",[11,13204,13205],{},"本チュートリアルの3つのケースは、最も需要の高いカメラテクニックをカバーしています：",[96,13207,13208,13214,13220],{},[73,13209,13210,13213],{},[23,13211,13212],{},"ワンテイクトラッキング"," — 没入感のある連続的な動き",[73,13215,13216,13219],{},[23,13217,13218],{},"ドリーズーム"," — ドラマチックな緊張感と心理的インパクト",[73,13221,13222,13225],{},[23,13223,13224],{},"オービタルショット"," — キャラクターリビールと商品ショーケース",[11,13227,13228],{},"いずれも同じ手順です：リファレンスをアップロードし、タグ付けし、シーンを記述し、カメラはモデルに任せる。",[11,13230,13231,13232,13236],{},"試してみませんか？ ",[37,13233,13235],{"href":211,"rel":13234},[41],"EvoLink の無料 API キーを取得","して、精密なカメラコントロールによるシネマティックなAI動画の生成を始めましょう。",[45,13238],{},[11,13240,13241],{},[2619,13242,13243],{},"関連記事：",[96,13245,13246,13256],{},[73,13247,13248,13251,13252,13255],{},[37,13249,13250],{"href":1767},"Seedance 2.0 プロンプトガイド：マルチモーダル動画生成完全ガイド"," — 複雑なシーンのための",[37,13253,13254],{"href":1767},"ショットスクリプトプロンプティング形式","をマスター",[73,13257,13258,13261,13262,13265],{},[37,13259,13260],{"href":2967},"Seedance 2.0 マルチモーダルリファレンス：@Tags 完全ガイド"," — 完全な",[37,13263,13264],{"href":2967},"@tag リファレンスシステム","の詳細解説",[45,13267],{},[11,13269,13270],{},[2619,13271,13272],{},"最終更新：2026年2月20日 | 執筆：J, Growth Lead at EvoLink",[11068,13274,13275],{},"html pre.shiki code .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .snl16, html code.shiki .snl16{--shiki-default:#F97583}html pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}html pre.shiki code .s9osk, html code.shiki .s9osk{--shiki-default:#FFAB70}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}",{"title":141,"searchDepth":166,"depth":166,"links":13277},[13278,13279,13283,13288,13294,13300,13306,13310,13317,13324],{"id":11206,"depth":166,"text":11207},{"id":11254,"depth":166,"text":11255,"children":13280},[13281,13282],{"id":11267,"depth":178,"text":11268},{"id":11309,"depth":178,"text":11309},{"id":11404,"depth":166,"text":11404,"children":13284},[13285,13286,13287],{"id":11407,"depth":178,"text":11407},{"id":11429,"depth":178,"text":11429},{"id":11444,"depth":178,"text":11445},{"id":11816,"depth":166,"text":11817,"children":13289},[13290,13291,13292,13293],{"id":11826,"depth":178,"text":11407},{"id":11845,"depth":178,"text":11845},{"id":11879,"depth":178,"text":11880},{"id":12086,"depth":178,"text":12086},{"id":12114,"depth":166,"text":12115,"children":13295},[13296,13297,13298,13299],{"id":12124,"depth":178,"text":11407},{"id":12137,"depth":178,"text":11845},{"id":12146,"depth":178,"text":11880},{"id":12351,"depth":178,"text":12351},{"id":12368,"depth":166,"text":12369,"children":13301},[13302,13303,13304,13305],{"id":12375,"depth":178,"text":11407},{"id":12388,"depth":178,"text":11845},{"id":12397,"depth":178,"text":11880},{"id":12597,"depth":178,"text":12597},{"id":12654,"depth":166,"text":12655,"children":13307},[13308,13309],{"id":12661,"depth":178,"text":12662},{"id":12926,"depth":178,"text":12926},{"id":13024,"depth":166,"text":13024,"children":13311},[13312,13313,13314,13315,13316],{"id":13027,"depth":178,"text":13028},{"id":13059,"depth":178,"text":13060},{"id":13072,"depth":178,"text":13073},{"id":13093,"depth":178,"text":13094},{"id":13113,"depth":178,"text":13114},{"id":13136,"depth":166,"text":13137,"children":13318},[13319,13320,13321,13322,13323],{"id":13140,"depth":178,"text":13141},{"id":13157,"depth":178,"text":13158},{"id":13164,"depth":178,"text":13165},{"id":13174,"depth":178,"text":13175},{"id":13181,"depth":178,"text":13182},{"id":13196,"depth":166,"text":13196},"Seedance 2.0 API でヒッチコックズーム、ワンテイクトラッキングショット、オービタルカメラを再現する方法を解説。@Video タグを使った Python コード3例を完全収録。",{"date":13327,"image":11160,"seoTitle":13328},"2026-02-20","Seedance 2.0 API でカメラムーブメントを再現 | チュートリアル","/ja/blog/seedance-2-camera-movement-api",{"title":11142,"description":13325},"ja/blog/seedance-2-camera-movement-api","lBj9TCITl6Ga0fKEVvVV-kx86uz1d5rhGJkoN5TGNIs",{"id":13334,"title":13335,"body":13336,"description":17197,"extension":11130,"meta":17198,"navigation":58,"path":17203,"seo":17204,"stem":17205,"__hash__":17206},"content/ja/blog/seedance-2-copyright-api-guide.md","Seedance 2.0 著作権問題：API開発者が知っておくべきこと",{"type":8,"value":13337,"toc":17152},[13338,13341,13344,13348,13351,13354,13358,13369,13372,13384,13399,13402,13406,13422,13430,13450,13458,13476,13484,13503,13511,13515,13518,13550,13558,13562,13565,13568,13571,13579,13582,13585,13588,13594,13600,13606,13612,13624,13627,13630,13753,13756,13759,13763,13766,13769,13772,13775,13779,13782,13786,13802,13828,13831,13834,13840,13846,13852,13858,13861,13864,13867,13873,13879,13885,13891,13908,13914,13920,13928,13931,13937,13940,13943,13946,13951,13954,13957,13960,13965,13968,13985,13988,13991,14091,14094,14097,14185,14193,14211,14215,14221,14224,14227,14230,14331,14334,14337,14340,14410,14413,14416,14436,14439,14459,14462,14466,14469,14893,14896,15122,15125,15129,15137,15257,15262,15270,15273,15276,15933,15938,15942,15959,15962,15966,15969,15978,16093,16098,16102,16108,16277,16281,16297,16301,16304,16486,16492,16507,16511,16514,16929,16933,16936,16939,16945,16947,16951,16963,16967,16974,16978,16981,16985,16992,16996,16999,17078,17084,17086,17089,17092,17095,17127,17130,17144,17149],[11,13339,13340],{},"Seedance 2.0 APIのリリースは保留となりました。当初は2026年2月24日にローンチが予定されていましたが、ハリウッドの大手映画スタジオ5社がByteDanceに差止通知書を送付し、米国映画協会（MPA）はSeedance 2.0を「組織的な著作権侵害のために作られたマシン」と呼んでいます。このモデルを使って開発を進めている開発者にとって、タイムライン、法的リスク、商用利用の可否について切実な疑問が生じています。",[11,13342,13343],{},"Seedance 2.0を動画生成パイプラインに統合している方に向けて、このガイドでは知っておくべきすべてを網羅します。著作権問題の全タイムライン、なぜハリウッドがこのモデルを特に問題視しているのか、APIリリース延期が実務にどう影響するか、商用プロジェクトを守る方法、コード例を交えた安全なプロンプト設計戦略、そして問題が解決するまでマルチモデル統合APIでパイプラインを維持する方法まで解説します。",[48,13345,13347],{"id":13346},"何が起きたのかseedance-20-著作権問題のタイムライン","何が起きたのか：Seedance 2.0 著作権問題のタイムライン",[11,13349,13350],{},"Seedance 2.0の著作権問題は一朝一夕に起きたわけではありませんが、いったん始まると驚くほどの速さでエスカレートしました。2026年2月のわずか1週間で、ByteDanceは非公式な苦情を受ける段階から、ハリウッドの全大手スタジオによる協調的な法的措置に直面するまでに至りました。",[11,13352,13353],{},"以下は、主要メディアの報道に基づく検証済みタイムラインです。",[92,13355,13357],{"id":13356},"第1週反発の拡大2月14日16日","第1週：反発の拡大（2月14日〜16日）",[11,13359,13360,1061,13363,13368],{},[23,13361,13362],{},"2026年2月15日",[37,13364,13367],{"href":13365,"rel":13366},"https://techcrunch.com",[41],"TechCrunchが報道","。ハリウッドのスタジオ各社がSeedance 2.0の性能に「不満を抱いている」とのこと。記事では、このモデルが著作権で保護された映画やテレビ番組に酷似した動画コンテンツを生成できることが詳しく取り上げられています。この時点ではまだ非公式な苦情にとどまり、法的措置は取られていませんでしたが、トーンはかなり厳しいものでした。",[11,13370,13371],{},"きっかけとなったのは、Seedance 2.0がDisneyの有名キャラクター、Marvelのスーパーヒーロー、特定の映画を明らかに模倣したシーンを生成している様子を映したSNS投稿の波でした。これらのデモンストレーションはバイラルに拡散し、ハリウッドの注目を集めました。",[11,13373,13374,13377,13378,13383],{},[23,13375,13376],{},"2026年2月16日"," — この話題が複数のメディアでメインストリームに広がりました。",[37,13379,13382],{"href":13380,"rel":13381},"https://www.cnbc.com",[41],"CNBCが報道","、ByteDanceが懸念を認め、Seedance 2.0にセーフガードを追加すると約束したと伝えました。最も注目すべきコメントはMPA CEOのCharles Rivkin氏によるもので、状況を「大規模な無許諾使用」と表現しました。",[11,13385,13386,13387,13392,13393,13398],{},"同日、",[37,13388,13391],{"href":13389,"rel":13390},"https://www.aljazeera.com",[41],"Al Jazeeraが報道","、ByteDanceが修正を実施するという公式声明を伝えました。",[37,13394,13397],{"href":13395,"rel":13396},"https://www.nbcnews.com",[41],"NBC News","もByteDanceの対応を報じています。同社の声明は慎重に練られたもので、過失を認めることなく懸念を認識し、具体的な内容や時期を明示しないまま「コンテンツ保護の強化」を約束するものでした。",[11,13400,13401],{},"この段階では、多くの開発者がこの問題を典型的なテック業界の騒動であり、PR対応と軽微な製品調整で沈静化するだろうと考えていました���しかし、そうはなりませんでした。",[92,13403,13405],{"id":13404},"第2週協調的な法的措置2月20日22日","第2週：協調的な法的措置（2月20日〜22日）",[11,13407,13408,13411,13412,13417,13418,13421],{},[23,13409,13410],{},"2026年2月20日"," — 事態はPR上の問題から法的危機へとエスカレートしました。",[37,13413,13416],{"href":13414,"rel":13415},"https://www.axios.com",[41],"Axiosが報道","、Disney、Warner Bros. Discovery、Paramount、Netflix、Sonyの5社がそれぞれ",[23,13419,13420],{},"個別に","差止通知書をByteDanceに送付したとのことです。これは重要なポイントです。MPAを通じた共同書簡ではなく（それは後に実施されます）、各スタジオの法務チームがそれぞれ独自に、Seedance 2.0が直接的な法的措置を講じるに値するほどの脅威であると判断したのです。",[11,13423,13424,13429],{},[37,13425,13428],{"href":13426,"rel":13427},"https://copyrightlately.com",[41],"Copyright Lately","が報じたこれらの書簡の文言は、初回の差止通知としては異例なほど攻撃的でした。",[96,13431,13432,13438,13444],{},[73,13433,13434,13437],{},[23,13435,13436],{},"Disney","はSeedance 2.0を著作権コンテンツの「仮想的な窃盗行為（virtual smash-and-grab）」と呼びました。これは問題を事故ではなく意図的な窃取として捉える表現です",[73,13439,13440,13443],{},[23,13441,13442],{},"Paramount","は、Seedance 2.0の出力が自社の著作物と「区別がつかない」と述べました。これは著作権侵害訴訟を支える上で法的に重要な主張です",[73,13445,13446,13449],{},[23,13447,13448],{},"Warner Bros. Discovery、Netflix、Sony","もそれぞれ同様に厳しい文言の書簡を提出しました",[11,13451,13452,13457],{},[37,13453,13456],{"href":13454,"rel":13455},"https://reddit.com/r/comfyui",[41],"Redditのr/comfyui（2/20）","のコミュニティ上では、ディープフェイクと著作権に関する懸念からAPIのローンチが延期されたという報告が浮上し始めました。開発者フォーラムではタイムラインと影響についての議論が活発化しました。",[11,13459,13460,13463,13464,13469,13470,13475],{},[23,13461,13462],{},"2026年2月21日"," — MPAが業界の立場を公式に表明しました。",[37,13465,13468],{"href":13466,"rel":13467},"https://www.hollywoodreporter.com",[41],"The Hollywood Reporter","と",[37,13471,13474],{"href":13472,"rel":13473},"https://variety.com",[41],"Variety","の両紙が、MPAがByteDanceに独自の差止通知書を送付し、Seedance 2.0を「組織的な著作権侵害」のためのツールと呼んだと報じました。これは5つのスタジオとその他の企業を代表する業界団体が、個々のスタジオによる措置に組織的な重みを加えたことを意味します。",[11,13477,13478,13483],{},[37,13479,13482],{"href":13480,"rel":13481},"https://news.ycombinator.com",[41],"Hacker Newsの議論（2/21）","で、APIのローンチが公式に延期され、ByteDanceが「リリース前のセーフガード」を追加中であることが確認されました。",[11,13485,13486,1061,13489,13494,13495,13498,13499,13502],{},[23,13487,13488],{},"2026年2月22日",[37,13490,13493],{"href":13491,"rel":13492},"https://the-decoder.com",[41],"The Decoderが報道","、MPAによるSeedance 2.0の全面的な特性評価を伝えました。「組織的な著作権侵害のために作られたマシン」という表現です。MPAの弁護士が慎重に選んだこのフレーズは、単にツールが著作権侵害に",[2619,13496,13497],{},"使える","と主張するにとどまりません。著作権侵害のために",[2619,13500,13501],{},"設計された","と断言しており、裁判に発展した場合に重大な法的意味を持ちます。",[11,13504,13386,13505,13510],{},[37,13506,13509],{"href":13507,"rel":13508},"https://www.chosun.com",[41],"朝鮮日報（韓国）","が、ByteDanceが著作権紛争を理由にSeedance 2.0 APIのリリースを正式に延期したと報じました。これは、通常の開発遅延ではなく法的措置が原因でAPIのスケジュールが変更されたことを、ByteDance内部の情報筋を持つメディアが初めて直接確認した報道です。",[92,13512,13514],{"id":13513},"現在の状況2026年2月23日","現在の状況（2026年2月23日）",[11,13516,13517],{},"本日時点の状況は以下の通りです。",[96,13519,13520,13526,13532,13538,13544],{},[73,13521,13522,13525],{},[23,13523,13524],{},"5通の個別の差止通知書"," — Disney、WBD、Paramount、Netflix、Sonyから",[73,13527,13528,13531],{},[23,13529,13530],{},"1通の業界団体からの差止通知書"," — MPAから",[73,13533,13534,13537],{},[23,13535,13536],{},"APIリリース延期"," — 2月24日から未定の将来の日付へ",[73,13539,13540,13543],{},[23,13541,13542],{},"ByteDanceはセーフガードの実装を約束"," — ただし、実装の詳細やタイムラインは未公表",[73,13545,13546,13549],{},[23,13547,13548],{},"訴訟はまだ提起されていない"," — ただし、差止通知書は通常、要求が満たされない場合の訴訟の前段階にあたる",[18,13551,13552],{},[11,13553,13554,13557],{},[23,13555,13556],{},"開発者への重要ポイント："," これはすぐに解決するような軽微なPR上の問題ではありません。法的対応の協調的な性質（5つのスタジオとMPA）は、ByteDanceがAPIをリリースする前に実質的な変更を行うよう莫大な圧力に直面していることを意味します。それに応じた計画を立ててください。",[48,13559,13561],{"id":13560},"なぜハリウッドはseedance-20を特に標的にしているのか","なぜハリウッドはSeedance 2.0を特に標的にしているのか",[11,13563,13564],{},"他のAI動画生成ツールも存在します — Kling、Sora、Veo、Runway Gen-3、Pikaなど。では、なぜSeedance 2.0がこれほどの法的攻撃を受けているのでしょうか。その答えは、ハリウッドのコンテンツにとって独自の脅威となった、特定の機能、出力品質、そしてセーフガードの欠如の組み合わせにあります。",[92,13566,13567],{"id":13567},"トレーニングデータの問題",[11,13569,13570],{},"すべての差止通知書の根底にある中心的な主張は、Seedance 2.0が著作権で保護された映画・テレビコンテンツを無許諾で学習に使用したというものです。これはSeedanceに限った問題ではなく、ほぼすべての大規模生成モデルが同様の疑問に直面しています。しかし、MPAの文言からは、ByteDanceのトレーニングデータセットがハリウッドのコンテンツを特に多く含んでいたと考えていることがうかがえます。",[11,13572,13573,13574,13578],{},"MPA CEOのRivkin氏による「大規模な無許諾使用」という表現（",[37,13575,13577],{"href":13380,"rel":13576},[41],"CNBC、2/16","）は、スタジオ側がトレーニングデータの構成について証拠（あるいは少なくとも強い疑い）を持っていることを示唆しています。Disneyの「窃盗行為（smash-and-grab）」という表現は、これが偶発的なものではなく意図的であると考えていることを示しています。",[11,13580,13581],{},"トレーニングデータの問題がSeedance 2.0にとって特に鋭い指摘となるのは、ByteDanceが中国のテクノロジー企業であるという立場によるものです。ByteDanceはTikTokを運営しており、そこには数十億のクリップがホストされています。その多くはユーザーがアップロードした著作権コンテンツを含んでいます。スタジオ側は（公式には確認されていませんが）、Seedance 2.0のトレーニングデータにTikTokの膨大なユーザーアップロード映画クリップ、テレビ番組、ミュージックビデオのライブラリが含まれていた可能性を疑っているかもしれません。",[92,13583,13584],{"id":13584},"出力忠実度の問題",[11,13586,13587],{},"Seedance 2.0を以前のAI動画ツールと一線を画すのは、特にハリウッドにとって最も重要な分野における出力品質です。このモデルは、著作権侵害をより容易にするまさにその能力に優れています。",[11,13589,13590,13593],{},[23,13591,13592],{},"ショット間でのキャラクターの一貫性。"," Seedance 2.0は、動画全体を通じてキャラクターの外観を一貫して維持します。同じ顔、同じ服装、同じプロポーション。以前のモデルでは、フレーム間でキャラクターの外観が変化してしまうことがよくありました。この一貫性は、著作権キャラクターを特徴とするコンテンツを生成した場合、そのキャラクターが1フレームだけでなく動画全体を通じてそのキャラクターに見えることを意味します。",[11,13595,13596,13599],{},[23,13597,13598],{},"精密な表情と感情のコントロール。"," このモデルは繊細な感情表現を生成できます。驚きから喜びへ、冷静からパニックへの遷移などです。これにより、著作権キャラクターの確立されたパーソナリティに忠実に感じられる新たな「演技」を作り出すことが可能になります。",[11,13601,13602,13605],{},[23,13603,13604],{},"映画的なカメラワーク。"," Seedance 2.0は特定の撮影技法を再現します。ヒッチコックズーム、トラッキングショット、クレーンムーブメント、ワンテイクシーケンスなどです。これらはハリウッド映画制作の視覚的なシグネチャーであり、このモデルはそれらを高い忠実度で再現できます。",[11,13607,13608,13611],{},[23,13609,13610],{},"ネイティブ音声生成。"," 競合他社の多くとは異なり、Seedance 2.0は映像とともにセリフ、効果音、音楽といった同期された音声を生成します。つまり、生成されたコンテンツは単なる視覚的なコピーではなく、キャラクターの声を含む完全な視聴覚作品となりうるのです。",[11,13613,13614,2427,13617,13620,13621,1261],{},[23,13615,13616],{},"マルチモーダル参照。",[28,13618,13619],{},"@-reference","システムにより、ユーザーは画像、動画、音声をクリエイティブな参照素材としてアップロードできます。著作権キャラクターの静止画と特定のカメラワークのクリップをアップロードすれば、モデルは両方を組み合わせて新しいコンテンツを生成できます。このシステムの詳細については、",[37,13622,13623],{"href":2967},"@タグ マルチモーダルガイド",[92,13625,13626],{"id":13626},"欠如していたセーフガード",[11,13628,13629],{},"リリース時、Seedance 2.0にはコンテンツフィルタリングがほとんどなかったと報じられています。ユーザーは、システムレベルの介入なしに、認識可能なDisneyキャラクター、Marvelヒーロー、Star Warsのシーン、その他の保護されたIPを特徴とする動画を生成できました。これは競合他社とは対照的でした。",[2037,13631,13632,13655],{},[2040,13633,13634],{},[2043,13635,13636,13639,13643,13646,13649,13652],{},[2046,13637,13638],{},"プラットフォーム",[2046,13640,13642],{"align":13641},"center","著作権フィルター",[2046,13644,13645],{"align":13641},"キャラクターブロック",[2046,13647,13648],{"align":13641},"有名人検出",[2046,13650,13651],{"align":13641},"ウォーターマーク",[2046,13653,13654],{"align":13641},"コンテンツポリシー",[2053,13656,13657,13674,13691,13706,13723,13738],{},[2043,13658,13659,13662,13665,13667,13669,13671],{},[2058,13660,13661],{},"Seedance 2.0（リリース時��",[2058,13663,13664],{"align":13641},"❌",[2058,13666,13664],{"align":13641},[2058,13668,13664],{"align":13641},[2058,13670,13664],{"align":13641},[2058,13672,13673],{"align":13641},"最低限",[2043,13675,13676,13679,13682,13684,13686,13688],{},[2058,13677,13678],{},"OpenAI Sora",[2058,13680,13681],{"align":13641},"✅",[2058,13683,13681],{"align":13641},[2058,13685,13681],{"align":13641},[2058,13687,13681],{"align":13641},[2058,13689,13690],{"align":13641},"厳格",[2043,13692,13693,13696,13698,13700,13702,13704],{},[2058,13694,13695],{},"Google Veo 2",[2058,13697,13681],{"align":13641},[2058,13699,13681],{"align":13641},[2058,13701,13681],{"align":13641},[2058,13703,13681],{"align":13641},[2058,13705,13690],{"align":13641},[2043,13707,13708,13711,13714,13716,13718,13720],{},[2058,13709,13710],{},"Runway Gen-3",[2058,13712,13713],{"align":13641},"部分的",[2058,13715,13713],{"align":13641},[2058,13717,13664],{"align":13641},[2058,13719,13681],{"align":13641},[2058,13721,13722],{"align":13641},"中程度",[2043,13724,13725,13728,13730,13732,13734,13736],{},[2058,13726,13727],{},"Kling",[2058,13729,13713],{"align":13641},[2058,13731,13664],{"align":13641},[2058,13733,13713],{"align":13641},[2058,13735,13681],{"align":13641},[2058,13737,13722],{"align":13641},[2043,13739,13740,13743,13745,13747,13749,13751],{},[2058,13741,13742],{},"Pika",[2058,13744,13713],{"align":13641},[2058,13746,13664],{"align":13641},[2058,13748,13664],{"align":13641},[2058,13750,13681],{"align":13641},[2058,13752,13722],{"align":13641},[11,13754,13755],{},"OpenAIとGoogleは、動画モデルをリリースする前にコンテンツセーフティシステムに多大な投資を行いました。Soraは複数のフィルタリング層を備えています。著作権キャラクター名を参照するプロンプトをブロックし、実在の公人に似た生成顔を検出し、可視・不可視のウォーターマークを適用し、エッジケースに対する人間によるレビュープロセスも用意しています。",[11,13757,13758],{},"ByteDanceは明らかに、Seedance 2.0の初回リリースにおいて安全性よりも性能を優先しました。その結果、ハリウッドのIPからハリウッド品質のコンテンツを生成できるモデルが、それを止める手段なしにリリースされてしまいました。",[92,13760,13762],{"id":13761},"なぜ他のai動画ツールは同様の措置を受けていないのか","なぜ他のAI動画ツールは同様の措置を受けていないのか",[11,13764,13765],{},"端的に言えば、出力品質が低い、安全フィルターが強い、そして米国に法的拠点があるため交渉しやすい、という要因の組み合わせです。",[11,13767,13768],{},"SoraとVeoはどちらも、確立された法務チームとコンテンツ権利者との既存の関係を持つ米国企業（OpenAIとGoogle）が開発しています。これらの企業は権利者と積極的に関わり、堅牢なコンテンツフィルタリングを実装し、場合によってはライセンス契約を模索しています。",[11,13770,13771],{},"RunwayとKlingは一部批判を受けていますが、ハリウッドの弁護士が存続上の脅威と見なす出力忠実度の閾値にはまだ達していません。Seedance 2.0はその閾値を超えました。",[11,13773,13774],{},"クラス最高の出力忠実度、セーフガードの欠如、米国の法的管轄権外に拠点を置く親会社という組み合わせが、法的措置のための最悪の条件を作り出しました。",[48,13776,13778],{"id":13777},"apiリリース延期現時点で分かっていること","APIリリース延期：現時点で分かっていること",[11,13780,13781],{},"Seedance 2.0 APIは、元々2026年2月24日に一般公開される予定でした。その日程は、代替日が確定しないまま延期されています。",[92,13783,13785],{"id":13784},"bytedanceが約束した内容","ByteDanceが約束した内容",[11,13787,13788,13789,2916,13793,2916,13797,13801],{},"法的圧力を受けて、ByteDanceはAPIリリース前にいくつかのセーフガードを実装すると約束しています。",[37,13790,13792],{"href":13380,"rel":13791},[41],"CNBC（2/16）",[37,13794,13796],{"href":13480,"rel":13795},[41],"Hacker News（2/21）",[37,13798,13800],{"href":13389,"rel":13799},[41],"Al Jazeera（2/16）","の報道に基づくと、以下の対策が含まれます。",[96,13803,13804,13810,13816,13822],{},[73,13805,13806,13809],{},[23,13807,13808],{},"顔検出とブロック"," — 認識可能な実在の人物の生成を防止します。これには俳優、公人、そしてトレーニングデータに顔が含まれている可能性のあるすべての実在の個人が含まれます。システムは既知の人物のデータベースに対して生成された顔を比較する必要があります。",[73,13811,13812,13815],{},[23,13813,13814],{},"著作権キャラクターの遮断"," — 既知のIPを参照するプロンプトをブロックします。これはテキストレベルのフィルタリング（「Spider-Man」や「Elsa」をキャッチ）に加え、ビジュアルレベルの検出（アップロードされた著作権キャラクターの参照画像をキャッチ）を意味します。両方ともスケールで実装するのは技術的に複雑です。",[73,13817,13818,13821],{},[23,13819,13820],{},"ウォーターマーキング"," — 生成されたすべてのコンテンツに不可視のウォーターマークを追加して出所を追跡します。これにより、権利者はAI生成コンテンツを識別し、プラットフォームおよび場合によっては生成したユーザーまで遡って追跡できます。",[73,13823,13824,13827],{},[23,13825,13826],{},"コンテンツ類似性検出"," — 特定の著作物に酷似したコンテンツの生成を防止する、より広範なフィルタリングです。生成されたフレームを著作権コンテンツのデータベースと比較する必要があり、計算コストは高いですが法的には必要な措置です。",[92,13829,13830],{"id":13830},"実装の課題",[11,13832,13833],{},"これらのセーフガードの構築は簡単ではありません。それぞれに重大なエンジニアリングが伴います。",[11,13835,13836,13839],{},[23,13837,13838],{},"テキストレベルのフィルタリング","は最も簡単です。キャラクター名、フランチャイズ名、商標用語のブロックリストを維持するだけです。しかし、最も回避しやすいものでもあります（「丸い耳を持つ赤い短パンを履いたネズミ」など）。",[11,13841,13842,13845],{},[23,13843,13844],{},"ビジュアルレベルの検出","はより困難です。間接的に記述された著作権キャラクターも認識し、生成された出力が特定の著作物に似ている場合を検出する必要があります。これには著作権コンテンツそのものを使って別の検出モデルをトレーニングする必要があり、それ自体がライセンスの問題を提起します。",[11,13847,13848,13851],{},[23,13849,13850],{},"顔認識","による有名人・俳優のブロックには、包括的な顔データベースと生成時のリアルタイム比較が必要です。複数のアングル、照明条件、アーティスティックなスタイルに対応する必要があります。",[11,13853,13854,13855,13857],{},"圧縮、トリミング、フォーマット変換に耐える",[23,13856,13820],{},"は、現在も活発に研究されている分野です。ByteDanceは、視聴者には感知できないが、典型的なソーシャルメディア配信で行われる処理に耐えられるほど堅牢なウォーターマークを実装する必要があります。",[11,13859,13860],{},"MPAは形式的なチェックボックス対応を受け入れるつもりはありません。これらのセーフガードは実際に機能する必要があり、その検証には時間がかかります。",[92,13862,13863],{"id":13863},"開発者への現時点での影響",[11,13865,13866],{},"Seedance 2.0 APIを前提に開発を進めてきた場合、この延期はいくつかの即座に実務的な問題を引き起こします。",[11,13868,13869,13872],{},[23,13870,13871],{},"1. リリース日が未確定。"," ByteDanceは新しいタイムラインを発表していません。セーフガードは5つの大手スタジオとMPAの法務チームを納得させる必要があり、それは短期間で済むプロセスではありません。セーフガード要件の厳しさによりますが、現実的な見積もりは数週間から数か月です。",[11,13874,13875,13878],{},[23,13876,13877],{},"2. APIの動作が変わる。"," コンテンツフィルタリングの追加は、新しいエラーコード、変更されたプロンプト処理、そしてWebインターフェースでは以前動作していた入力の拒否を意味します。著作物に近すぎる特定のビジュアルスタイルを参照するプロンプトは、おそらく失敗するでしょう。コード上でこれらの拒否を適切に処理する必要があります。",[11,13880,13881,13884],{},[23,13882,13883],{},"3. 価格の不確実性。"," コンテンツフィルタリングのインフラにはコストがかかります。リアルタイム検出のための計算リソースと、構築・メンテナンスのエンジニアリングの両方です。追加のオーバーヘッドをカバーするために生成あたりのコストが増加する可能性は十分にあります。ByteDanceは適用されるコンテンツフィルタリングのレベルに応じた段階的な価格設定を導入するかもしれません。",[11,13886,13887,13890],{},[23,13888,13889],{},"4. 利用規約が厳格化する。"," 特に以下の分野でより厳しい利用ポリシーが予想されます。",[96,13892,13893,13896,13899,13902,13905],{},[73,13894,13895],{},"生成コンテンツの商用利用",[73,13897,13898],{},"著作権侵害出力に対する責任",[73,13900,13901],{},"プロンプトの文書化要件",[73,13903,13904],{},"特定カテゴリのコンテンツ生成に対する制限",[73,13906,13907],{},"免責条項（またはその欠如）",[11,13909,13910,13913],{},[23,13911,13912],{},"5. レート制限と審査プロセス。"," エンタープライズAPIユーザー向けに、ByteDanceは大量利用アカウントや特定カテゴリのコンテンツに対して追加の審査プロセスを導入する可能性があります。",[11,13915,13916,13919],{},[23,13917,13918],{},"6. 下流プラットフォームのリスク。"," Seedance 2.0 APIの上にプロダクトを構築し、自社ユーザーに動画生成を提供している場合、存在する責任のギャップをすべて引き継ぐことになります。ユーザーがあなたのプラットフォームを通じて著作権侵害コンテンツを生成する可能性があり、権利者からのクレームに直面するかもしれません。",[11,13921,13922,13923,13927],{},"今すぐ動画生成機能が必要で、Seedanceの延期が解決するまで待てない開発者にとって、マルチモデルフェイルオーバーの実装が現実的なソリューションです。詳細は以下の",[37,13924,13926],{"href":13925},"#evolink%E3%82%92%E9%80%9A%E3%81%98%E3%81%9Fseedance-20-api%E3%81%B8%E3%81%AE%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E6%96%B9%E6%B3%95","EvoLink統合セクション","で解説しています。",[48,13929,13930],{"id":13930},"商用プロジェクトへの影響",[11,13932,13933,13934],{},"AI動画生成を使って開発しているすべての開発者が問いかけている核心的な質問：",[23,13935,13936],{},"Seedance 2.0 APIで生成されたコンテンツを商用製品で安全に使用できるのか？",[11,13938,13939],{},"正直な答え：何を生成するか、どのように生成するかに完全に依存します。リスクは二項対立ではなく、スペクトラム上に存在しており、自身のユースケースがそのスペクトラムのどこに位置するかを理解すること��不可欠です。",[92,13941,13942],{"id":13942},"著作権リスクの2つの層",[11,13944,13945],{},"AI生成コンテンツにおける著作権リスクは、2つの独立した法的側面に存在します。これらを混同すると、過度な慎重さ（技術を完全に回避する）か、危険な油断（すべて問題ないと思い込む）のどちらかに陥ります。どちらもあなたの利益にはなりません。",[11,13947,13948],{},[23,13949,13950],{},"レイヤー1：トレーニングデータの責任（モデルレベルのリスク）",[11,13952,13953],{},"これはMPAの主要な懸念事項であり、差止通知書の根拠です。Seedance 2.0がライセンスなしに著作権コンテンツで学習された場合、ByteDanceは法定損害賠償に直面する可能性があります。しかし、開発者にとって重要な問題は、その責任がAPIユーザーである下流にまで及ぶかどうかです。",[11,13955,13956],{},"2026年2月時点で、AIモデルの下流ユーザーがモデルのトレーニングデータの構成に対して責任を負うという判決を下した米国の裁判所はありません。最も近い判例はStability AI、Midjournyなどに対する進行中の訴訟に由来しますが、これらはモデルの作成者を対象としており、エンドユーザーを対象としていません。",[11,13958,13959],{},"しかし、法的環境は急速に変化しています。将来、裁判所が著作権侵害のトレーニングデータに由来するAI生成コンテンツはそれ自体が二次的著作物であると認定した場合、そのコンテンツを商用利用した開発者は遡及的なクレームに直面する可能性があります。その確率については議論の余地がありますが、潜在的な影響は無視できません。",[11,13961,13962],{},[23,13963,13964],{},"レイヤー2：出力コンテンツの責任（ユーザーレベルのリスク）",[11,13966,13967],{},"これは開発者にとってより即座に、かつ対処可能なリスクです。トレーニングデータの問題に関係なく、Seedanceで生成された動画が以下に該当する場合：",[96,13969,13970,13973,13976,13979,13982],{},[73,13971,13972],{},"認識可能な著作権キャラクターを含む（Mickey Mouse、Spider-Man、Darth Vaderなど）",[73,13974,13975],{},"特定の著作権シーンやシーケンスを忠実に再現している",[73,13977,13978],{},"同意なく認識可能な実在の人物を描写している",[73,13980,13981],{},"商標登録されたロゴ、ブランド要素、または特徴的なビジュアルアイデンティティを再現している",[73,13983,13984],{},"特定のアーティストやスタジオの保護されたビジュアルスタイルを混同を生じるほど模倣している",[11,13986,13987],{},"…であれば、著作権侵害、商標侵害、またはパブリシティ権侵害の直接的な責任に直面します。このリスクはトレーニングデータの問題に関係なく、どのAIモデルを使用するかに関係なく存在します。",[92,13989,13990],{"id":13990},"一般的なユースケースのリスクスペクトラム",[2037,13992,13993,14006],{},[2040,13994,13995],{},[2043,13996,13997,14000,14003],{},[2046,13998,13999],{},"ユースケース",[2046,14001,14002],{},"リスクレベル",[2046,14004,14005],{},"主な要因",[2053,14007,14008,14019,14029,14039,14050,14060,14071,14081],{},[2043,14009,14010,14013,14016],{},[2058,14011,14012],{},"自社製品画像を使用したオリジナル製品紹介動画",[2058,14014,14015],{},"🟢 低",[2058,14017,14018],{},"自社のアセット、一般的な説明、IP参照なし",[2043,14020,14021,14024,14026],{},[2058,14022,14023],{},"オリジナルキャラクターとシーンによるマーケティング動画",[2058,14025,14015],{},[2058,14027,14028],{},"オリジナルのクリエイティブ方向性、既存IPなし",[2043,14030,14031,14034,14036],{},[2058,14032,14033],{},"汎用的なストックフッテージ風映像（自然、都市景観、抽象）",[2058,14035,14015],{},[2058,14037,14038],{},"キャラクターやIPの関与なし",[2043,14040,14041,14044,14047],{},[2058,14042,14043],{},"特定の映画のビジュアルスタイルを模倣した動画",[2058,14045,14046],{},"🟡 中",[2058,14048,14049],{},"スタイル単体は著作権保護されないが、過度な再現はリスクあり",[2043,14051,14052,14055,14057],{},[2058,14053,14054],{},"著作権キャラクターに似たオリジナルキャラクターを含むコンテンツ",[2058,14056,14046],{},[2058,14058,14059],{},"「インスパイア」vs「実質的に類似」 — グレーゾーン",[2043,14061,14062,14065,14068],{},[2058,14063,14064],{},"認識可能な著作権キャラクターを含む動画",[2058,14066,14067],{},"🔴 高",[2058,14069,14070],{},"使用ツールに関係なく直接的な著作権侵害",[2043,14072,14073,14076,14078],{},[2058,14074,14075],{},"実在の有名人の肖像を含むコンテンツ",[2058,14077,14067],{},[2058,14079,14080],{},"パブリシティ権の侵害",[2043,14082,14083,14086,14088],{},[2058,14084,14085],{},"特定の著作権シーンの再現",[2058,14087,14067],{},[2058,14089,14090],{},"保護された表現の直接的なコピー",[92,14092,14093],{"id":14093},"エンタープライズ向けコンプライアンスチェックリスト",[11,14095,14096],{},"商用コンテンツにAI動画生成ツールを使用する前に、このチェックリストを確認してください。",[96,14098,14101,14113,14122,14131,14140,14149,14158,14167,14176],{"className":14099},[14100],"contains-task-list",[73,14102,14105,2427,14109,14112],{"className":14103},[14104],"task-list-item",[14106,14107],"input",{"disabled":58,"type":14108},"checkbox",[23,14110,14111],{},"プラットフォームの利用規約を確認する"," — 具体的に：出力の所有者は誰か？どのような商用権利が付与されるか？どのような利用制限があるか？プラットフォームは著作権侵害の申し立てに対して補償するか？",[73,14114,14116,2427,14118,14121],{"className":14115},[14104],[14106,14117],{"disabled":58,"type":14108},[23,14119,14120],{},"社内AI利用ポリシーを策定する"," — AI生成が承認されるコンテンツの種類と、人間による作成が必要な種類を文書化します。チームにポリシーを周知してください。",[73,14123,14125,2427,14127,14130],{"className":14124},[14104],[14106,14126],{"disabled":58,"type":14108},[23,14128,14129],{},"送信前にすべてのプロンプトを監査する"," — 特定の著作権キャラクター、実在の人物、商標登録された属性への参照がないか確認します。商用プロジェクトではプロンプトレビューを実施してください。",[73,14132,14134,2427,14136,14139],{"className":14133},[14104],[14106,14135],{"disabled":58,"type":14108},[23,14137,14138],{},"公開前に出力の類似性を確認する"," — 生成されたコンテンツが特定の著作物に酷似していないか確認します。逆画像・動画検索と人間によるレビューを活用してください。",[73,14141,14143,2427,14145,14148],{"className":14142},[14104],[14106,14144],{"disabled":58,"type":14108},[23,14146,14147],{},"プロセス全体を文書化する"," — プロンプト、パラメータ、クリエイティブの意図、実施したレビュー手順の記録を保持します。これは異議を受けた場合に善意を証明します。",[73,14150,14152,2427,14154,14157],{"className":14151},[14104],[14106,14153],{"disabled":58,"type":14108},[23,14155,14156],{},"ハイステークスなコンテンツには法的レビューを受ける"," — 広告キャンペーン、ブランドエンターテインメント、または広範な配信を伴うコンテンツについては、知財弁護士にプラットフォームの利用規約と個別の出力の両方をレビューしてもらってください。",[73,14159,14161,2427,14163,14166],{"className":14160},[14104],[14106,14162],{"disabled":58,"type":14108},[23,14164,14165],{},"E&O保険を検討する"," — AI生成コンテンツを明示的にカバーするE&O（過失・欠落）保険は利用可能性が高まっており、商用動画制作においてますます必要になっています。",[73,14168,14170,2427,14172,14175],{"className":14169},[14104],[14106,14171],{"disabled":58,"type":14108},[23,14173,14174],{},"法的動向をモニタリングする"," — AI著作権に関する法的アップデートを購読してください。状況は月単位で変化しています。今日の許容される慣行が明日には訴訟の対象になるかもしれません。",[73,14177,14179,2427,14181,14184],{"className":14178},[14104],[14106,14180],{"disabled":58,"type":14108},[23,14182,14183],{},"コンテンツの回収計画を立てる"," — 法的判決が既に公開したコンテンツのリスク評価を変更した場合に、影響を受けるアセットを特定し対処するプロセスを準備してください。",[18,14186,14187],{},[11,14188,14189,14192],{},[23,14190,14191],{},"結論："," 一般的で独自のプロンプトから生成されたコンテンツ — キャラクター名なし、ブランド参照なし、俳優の肖像なし、特定の作品の意図的な再現なし — が最もリスクが低くなります。既存のIPを意図的にまたは過失で再現するコンテンツは最もリスクが高く、APIを使用することでそのリスクから遮断されるわけではありません。",[14194,14195,14197,14202,14205],"div",{"style":14196},"background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); border-radius: 12px; padding: 2em; margin: 2em 0; color: white;",[11,14198,14199],{},[23,14200,14201],{},"特定のモデルが遅延しても止まらない動画生成が必要ですか？",[11,14203,14204],{},"EvoLinkは、Seedance 2.0、Kling、Veo、Soraなどの統合APIを提供しています。Seedanceが利用できなくても、プロダクションパイプラインは停止しません。自動的にモデルが切り替わります。",[11,14206,14207],{},[37,14208,14210],{"href":14209},"/docs/video-generation","Video Generation APIを見る →",[48,14212,14214],{"id":14213},"安全なプロンプト設計著作権トリガーの回避","安全なプロンプト設計：著作権トリガーの回避",[11,14216,14217,14218],{},"Seedance 2.0、Sora、Veo、その他どのAI動画生成モデルを使用していても、安全なプロンプト設計はプロジェクトを著作権リスクから守ります。基本原則：",[23,14219,14220],{},"コピーしたいものではなく、作りたいものを記述する。",[11,14222,14223],{},"このセクションでは、Seedance 2.0 API統合で直接使用できるコード例を交えた、具体的で実践的なガイドラインを提供します。",[92,14225,14226],{"id":14226},"避けるべきプロンプトパターン",[11,14228,14229],{},"これらのパターンは、著作権フィルター（実装された場合）をトリガーする可能性が高く、フィルタリングの有無に関���なく法的リスクを生み出します。",[2037,14231,14232,14245],{},[2040,14233,14234],{},[2043,14235,14236,14239,14242],{},[2046,14237,14238],{},"❌ 危険なプロンプトパターン",[2046,14240,14241],{},"リスクの理由",[2046,14243,14244],{},"法的リスク",[2053,14246,14247,14258,14268,14278,14288,14298,14309,14320],{},[2043,14248,14249,14252,14255],{},[2058,14250,14251],{},"\"Generate a video of Spider-Man swinging through New York\"",[2058,14253,14254],{},"著作権キャラクターの直接参照",[2058,14256,14257],{},"著作権侵害",[2043,14259,14260,14263,14266],{},[2058,14261,14262],{},"\"Create a scene that looks like it's from Frozen\"",[2058,14264,14265],{},"著作物の意図的な再現",[2058,14267,14257],{},[2043,14269,14270,14273,14275],{},[2058,14271,14272],{},"\"Make a video featuring someone who looks like Scarlett Johansson\"",[2058,14274,14080],{},[2058,14276,14277],{},"パブリシティ権侵害",[2043,14279,14280,14283,14286],{},[2058,14281,14282],{},"\"Replicate the opening sequence of Blade Runner 2049\"",[2058,14284,14285],{},"シーンの直接コピー",[2058,14287,14257],{},[2043,14289,14290,14293,14296],{},[2058,14291,14292],{},"\"A character that looks like Elsa with ice powers\"",[2058,14294,14295],{},"著作権キャラクターの間接的な参照",[2058,14297,14257],{},[2043,14299,14300,14303,14306],{},[2058,14301,14302],{},"\"Generate a video with the Nike swoosh logo\"",[2058,14304,14305],{},"商標の使用",[2058,14307,14308],{},"商標侵害",[2043,14310,14311,14314,14317],{},[2058,14312,14313],{},"\"A wizard school that looks like Hogwarts\"",[2058,14315,14316],{},"商標登録された設定の再現",[2058,14318,14319],{},"商標の希釈化",[2043,14321,14322,14325,14328],{},[2058,14323,14324],{},"\"An anime girl in the exact style of Studio Ghibli\"",[2058,14326,14327],{},"スタジオスタイルの再現",[2058,14329,14330],{},"グレーゾーン、潜在的にリスクあり",[11,14332,14333],{},"間接的な参照は特に危険です。テキストレベルのフィルターを通過しながら、それでも著作権侵害の出力を生成する可能性があるからです。「プラチナブロンドの髪で氷の力を持つ青いドレスのプリンセス」は「Elsa」とは言っていませんが、出力はほぼ確実にElsaに見えます。",[92,14335,14336],{"id":14336},"安全に機能するプロンプトパターン",[11,14338,14339],{},"これらのパターンは、著作権の問題なく魅力的なオリジナルコンテンツを生成します。",[2037,14341,14342,14352],{},[2040,14343,14344],{},[2043,14345,14346,14349],{},[2046,14347,14348],{},"✅ 安全なプロンプトパターン",[2046,14350,14351],{},"安全な理由",[2053,14353,14354,14362,14370,14378,14386,14394,14402],{},[2043,14355,14356,14359],{},[2058,14357,14358],{},"\"A superhero in an original red and gold suit flies over a futuristic city at sunset\"",[2058,14360,14361],{},"オリジナルキャラクター、オリジナル設定",[2043,14363,14364,14367],{},[2058,14365,14366],{},"\"Cinematic drone shot over a coastal city at golden hour, warm color palette, anamorphic lens\"",[2058,14368,14369],{},"映画技法の記述による一般的なシーン",[2043,14371,14372,14375],{},[2058,14373,14374],{},"\"A young woman in a flowing blue dress walks through a sunlit Mediterranean village\"",[2058,14376,14377],{},"オリジナルキャラクター、一般的な設定",[2043,14379,14380,14383],{},[2058,14381,14382],{},"\"Product showcase: silver smartwatch rotating on marble surface, studio lighting\"",[2058,14384,14385],{},"自社製品、一般的な演出",[2043,14387,14388,14391],{},[2058,14389,14390],{},"\"@Image1 as first frame, tracking shot following the subject through a forest\"",[2058,14392,14393],{},"自社の参照アセット",[2043,14395,14396,14399],{},[2058,14397,14398],{},"\"Anime-style warrior in ornate jade armor standing on a cliff overlooking a stormy sea\"",[2058,14400,14401],{},"一般的なスタイルカテゴリのオリジナルキャラクター",[2043,14403,14404,14407],{},[2058,14405,14406],{},"\"Pixar-quality 3D animation: a wise old cat in spectacles sits at a cafe table\"",[2058,14408,14409],{},"スタイル品質の参照（特定のPixar作品ではない）",[92,14411,14412],{"id":14412},"スタイルとキャラクターの区別",[11,14414,14415],{},"これは法的に重要なニュアンスです。一般的に参照できるもの：",[96,14417,14418,14424,14430],{},[73,14419,14420,14423],{},[23,14421,14422],{},"広義のアーティスティックスタイル"," — 「アニメスタイル」「Pixar品質の3D」「油絵風」「フィルム・ノワールの撮影」",[73,14425,14426,14429],{},[23,14427,14428],{},"撮影技法"," — 「ヒッチコックズーム」「ステディカムトラッキングショット」「ダッチアングル」",[73,14431,14432,14435],{},[23,14433,14434],{},"ジャンルの慣習"," — 「サイバーパンクの都市景観」「ファンタジー中世の村」「スペースオペラ」",[11,14437,14438],{},"参照すべきでないもの：",[96,14440,14441,14447,14453],{},[73,14442,14443,14446],{},[23,14444,14445],{},"特定の作品"," — 「ダークナイトのチェイスシーンのような」",[73,14448,14449,14452],{},[23,14450,14451],{},"特定のキャラクター"," — 間接的に記述したものも含む",[73,14454,14455,14458],{},[23,14456,14457],{},"特定のスタジオの独自スタイル"," — ソースを特定できるほど具体的な記述の場合",[11,14460,14461],{},"境界線は曖昧です。迷ったときは、より一般的な表現にしてください。",[92,14463,14465],{"id":14464},"コード例安全なプロンプトと危険なプロンプトの実践比較","コード例：安全なプロンプトと危険なプロンプトの実践比較",[11,14467,14468],{},"このガイドのすべてのコード例に使用する完全なセットアップです。EvoLinkを通じてSeedance 2.0 APIを使用します。",[136,14470,14472],{"className":337,"code":14471,"language":339,"meta":141,"style":141},"import requests\nimport time\n\nAPI_KEY = \"your-evolink-api-key\"  # Get yours at evolink.ai/early-access\nBASE_URL = \"https://api.evolink.ai/v1\"\nHEADERS = {\n    \"Authorization\": f\"Bearer {API_KEY}\",\n    \"Content-Type\": \"application/json\"\n}\n\ndef generate_video(payload):\n    \"\"\"Submit a video generation task and poll until complete.\"\"\"\n    response = requests.post(\n        f\"{BASE_URL}/videos/generations\",\n        headers=HEADERS,\n        json=payload\n    )\n    response.raise_for_status()\n    task = response.json()\n    task_id = task[\"id\"]\n    print(f\"Task created: {task_id} (model: {task['model']})\")\n\n    # Poll for completion\n    while True:\n        status_resp = requests.get(\n            f\"{BASE_URL}/tasks/{task_id}\",\n            headers=HEADERS\n        )\n        status_resp.raise_for_status()\n        result = status_resp.json()\n\n        if result[\"status\"] == \"completed\":\n            video_url = result[\"task_info\"][\"video_url\"]\n            print(f\"✅ Video ready: {video_url}\")\n            return result\n        elif result[\"status\"] == \"failed\":\n            raise Exception(f\"Task failed: {result.get('error', 'Unknown')}\")\n\n        print(f\"⏳ Progress: {result.get('progress', 0)}%\")\n        time.sleep(10)\n",[28,14473,14474,14480,14486,14490,14502,14510,14518,14534,14542,14546,14550,14559,14564,14572,14584,14594,14602,14606,14610,14618,14630,14664,14668,14673,14682,14691,14711,14719,14723,14728,14737,14741,14758,14776,14797,14803,14819,14850,14854,14884],{"__ignoreMap":141},[145,14475,14476,14478],{"class":147,"line":148},[145,14477,346],{"class":258},[145,14479,328],{"class":262},[145,14481,14482,14484],{"class":147,"line":166},[145,14483,346],{"class":258},[145,14485,355],{"class":262},[145,14487,14488],{"class":147,"line":178},[145,14489,375],{"emptyLinePlaceholder":58},[145,14491,14492,14494,14496,14499],{"class":147,"line":187},[145,14493,387],{"class":155},[145,14495,390],{"class":258},[145,14497,14498],{"class":159}," \"your-evolink-api-key\"",[145,14500,14501],{"class":174},"  # Get yours at evolink.ai/early-access\n",[145,14503,14504,14506,14508],{"class":147,"line":372},[145,14505,411],{"class":155},[145,14507,390],{"class":258},[145,14509,416],{"class":159},[145,14511,14512,14514,14516],{"class":147,"line":378},[145,14513,422],{"class":155},[145,14515,390],{"class":258},[145,14517,427],{"class":262},[145,14519,14520,14522,14524,14526,14528,14530,14532],{"class":147,"line":384},[145,14521,433],{"class":159},[145,14523,436],{"class":262},[145,14525,439],{"class":258},[145,14527,442],{"class":159},[145,14529,445],{"class":155},[145,14531,448],{"class":159},[145,14533,451],{"class":262},[145,14535,14536,14538,14540],{"class":147,"line":408},[145,14537,457],{"class":159},[145,14539,436],{"class":262},[145,14541,462],{"class":159},[145,14543,14544],{"class":147,"line":419},[145,14545,468],{"class":262},[145,14547,14548],{"class":147,"line":430},[145,14549,375],{"emptyLinePlaceholder":58},[145,14551,14552,14554,14557],{"class":147,"line":454},[145,14553,525],{"class":258},[145,14555,14556],{"class":151}," generate_video",[145,14558,5707],{"class":262},[145,14560,14561],{"class":147,"line":465},[145,14562,14563],{"class":159},"    \"\"\"Submit a video generation task and poll until complete.\"\"\"\n",[145,14565,14566,14568,14570],{"class":147,"line":599},[145,14567,1428],{"class":262},[145,14569,266],{"class":258},[145,14571,1433],{"class":262},[145,14573,14574,14576,14578,14580,14582],{"class":147,"line":604},[145,14575,1438],{"class":258},[145,14577,448],{"class":159},[145,14579,678],{"class":155},[145,14581,1445],{"class":159},[145,14583,451],{"class":262},[145,14585,14586,14588,14590,14592],{"class":147,"line":610},[145,14587,1456],{"class":700},[145,14589,266],{"class":258},[145,14591,422],{"class":155},[145,14593,451],{"class":262},[145,14595,14596,14598,14600],{"class":147,"line":616},[145,14597,1471],{"class":700},[145,14599,266],{"class":258},[145,14601,2788],{"class":262},[145,14603,14604],{"class":147,"line":622},[145,14605,1484],{"class":262},[145,14607,14608],{"class":147,"line":627},[145,14609,2797],{"class":262},[145,14611,14612,14614,14616],{"class":147,"line":638},[145,14613,1497],{"class":262},[145,14615,266],{"class":258},[145,14617,735],{"class":262},[145,14619,14620,14622,14624,14626,14628],{"class":147,"line":653},[145,14621,7076],{"class":262},[145,14623,266],{"class":258},[145,14625,757],{"class":262},[145,14627,1627],{"class":159},[145,14629,763],{"class":262},[145,14631,14632,14634,14636,14638,14640,14642,14644,14646,14649,14651,14653,14656,14658,14660,14662],{"class":147,"line":659},[145,14633,1102],{"class":155},[145,14635,793],{"class":262},[145,14637,439],{"class":258},[145,14639,1525],{"class":159},[145,14641,684],{"class":155},[145,14643,687],{"class":262},[145,14645,690],{"class":155},[145,14647,14648],{"class":159}," (model: ",[145,14650,684],{"class":155},[145,14652,1530],{"class":262},[145,14654,14655],{"class":159},"'model'",[145,14657,1536],{"class":262},[145,14659,690],{"class":155},[145,14661,5383],{"class":159},[145,14663,405],{"class":262},[145,14665,14666],{"class":147,"line":670},[145,14667,375],{"emptyLinePlaceholder":58},[145,14669,14670],{"class":147,"line":697},[145,14671,14672],{"class":174},"    # Poll for completion\n",[145,14674,14675,14677,14680],{"class":147,"line":709},[145,14676,641],{"class":258},[145,14678,14679],{"class":155}," True",[145,14681,859],{"class":262},[145,14683,14684,14687,14689],{"class":147,"line":715},[145,14685,14686],{"class":262},"        status_resp ",[145,14688,266],{"class":258},[145,14690,667],{"class":262},[145,14692,14693,14695,14697,14699,14701,14703,14705,14707,14709],{"class":147,"line":721},[145,14694,673],{"class":258},[145,14696,448],{"class":159},[145,14698,678],{"class":155},[145,14700,681],{"class":159},[145,14702,684],{"class":155},[145,14704,687],{"class":262},[145,14706,690],{"class":155},[145,14708,448],{"class":159},[145,14710,451],{"class":262},[145,14712,14713,14715,14717],{"class":147,"line":727},[145,14714,701],{"class":700},[145,14716,266],{"class":258},[145,14718,706],{"class":155},[145,14720,14721],{"class":147,"line":738},[145,14722,712],{"class":262},[145,14724,14725],{"class":147,"line":743},[145,14726,14727],{"class":262},"        status_resp.raise_for_status()\n",[145,14729,14730,14732,14734],{"class":147,"line":749},[145,14731,11610],{"class":262},[145,14733,266],{"class":258},[145,14735,14736],{"class":262}," status_resp.json()\n",[145,14738,14739],{"class":147,"line":766},[145,14740,375],{"emptyLinePlaceholder":58},[145,14742,14743,14745,14747,14749,14752,14754,14756],{"class":147,"line":787},[145,14744,847],{"class":258},[145,14746,1649],{"class":262},[145,14748,760],{"class":159},[145,14750,14751],{"class":262},"] ",[145,14753,853],{"class":258},[145,14755,856],{"class":159},[145,14757,859],{"class":262},[145,14759,14760,14762,14764,14766,14769,14771,14774],{"class":147,"line":833},[145,14761,7262],{"class":262},[145,14763,266],{"class":258},[145,14765,1649],{"class":262},[145,14767,14768],{"class":159},"\"task_info\"",[145,14770,1563],{"class":262},[145,14772,14773],{"class":159},"\"video_url\"",[145,14775,763],{"class":262},[145,14777,14778,14780,14782,14784,14787,14789,14791,14793,14795],{"class":147,"line":838},[145,14779,5442],{"class":155},[145,14781,793],{"class":262},[145,14783,439],{"class":258},[145,14785,14786],{"class":159},"\"✅ Video ready: ",[145,14788,684],{"class":155},[145,14790,1679],{"class":262},[145,14792,690],{"class":155},[145,14794,448],{"class":159},[145,14796,405],{"class":262},[145,14798,14799,14801],{"class":147,"line":844},[145,14800,865],{"class":258},[145,14802,1707],{"class":262},[145,14804,14805,14807,14809,14811,14813,14815,14817],{"class":147,"line":862},[145,14806,874],{"class":258},[145,14808,1649],{"class":262},[145,14810,760],{"class":159},[145,14812,14751],{"class":262},[145,14814,853],{"class":258},[145,14816,881],{"class":159},[145,14818,859],{"class":262},[145,14820,14821,14823,14825,14827,14829,14832,14834,14836,14838,14840,14842,14844,14846,14848],{"class":147,"line":871},[145,14822,905],{"class":258},[145,14824,6920],{"class":155},[145,14826,793],{"class":262},[145,14828,439],{"class":258},[145,14830,14831],{"class":159},"\"Task failed: ",[145,14833,684],{"class":155},[145,14835,11709],{"class":262},[145,14837,11712],{"class":159},[145,14839,399],{"class":262},[145,14841,9805],{"class":159},[145,14843,945],{"class":262},[145,14845,690],{"class":155},[145,14847,448],{"class":159},[145,14849,405],{"class":262},[145,14851,14852],{"class":147,"line":886},[145,14853,375],{"emptyLinePlaceholder":58},[145,14855,14856,14858,14860,14862,14865,14867,14869,14872,14874,14876,14878,14880,14882],{"class":147,"line":902},[145,14857,790],{"class":155},[145,14859,793],{"class":262},[145,14861,439],{"class":258},[145,14863,14864],{"class":159},"\"⏳ Progress: ",[145,14866,684],{"class":155},[145,14868,11709],{"class":262},[145,14870,14871],{"class":159},"'progress'",[145,14873,399],{"class":262},[145,14875,782],{"class":155},[145,14877,945],{"class":262},[145,14879,690],{"class":155},[145,14881,828],{"class":159},[145,14883,405],{"class":262},[145,14885,14886,14889,14891],{"class":147,"line":914},[145,14887,14888],{"class":262},"        time.sleep(",[145,14890,536],{"class":155},[145,14892,405],{"class":262},[11,14894,14895],{},"次に、危険なプロンプトと安全な代替案を比較します。どちらも同様のクリエイティブな結果を達成します。",[136,14897,14899],{"className":337,"code":14898,"language":339,"meta":141,"style":141},"# ❌ DANGEROUS — references copyrighted character and specific film\ndangerous_payload = {\n    \"model\": \"seedance-2.0\",\n    \"prompt\": \"Spider-Man swings between skyscrapers in New York City, \"\n              \"wearing his classic red and blue suit. He shoots a web \"\n              \"line and does a backflip, landing on a rooftop. \"\n              \"Marvel cinematic style, dramatic lighting.\",\n    \"duration\": 10,\n    \"quality\": \"720p\",\n    \"aspect_ratio\": \"16:9\",\n    \"generate_audio\": True\n}\n# This will likely be rejected by copyright filters AND exposes you legally\n\n# ✅ SAFE — original character, similar visual impact\nsafe_payload = {\n    \"model\": \"seedance-2.0\",\n    \"prompt\": \"A masked vigilante in a sleek crimson and silver suit \"\n              \"swings between futuristic skyscrapers using retractable \"\n              \"grappling cables. Dynamic tracking shot follows the arc \"\n              \"of movement as the figure performs an acrobatic flip \"\n              \"mid-air and lands on a glass rooftop. Cinematic action \"\n              \"sequence, golden hour lighting, anamorphic lens flare. \"\n              \"The city below is a mix of neon signs and steam vents.\",\n    \"duration\": 10,\n    \"quality\": \"720p\",\n    \"aspect_ratio\": \"16:9\",\n    \"generate_audio\": True\n}\n\nresult = generate_video(safe_payload)\n",[28,14900,14901,14906,14915,14925,14934,14939,14944,14951,14961,14971,14981,14989,14993,14998,15002,15007,15016,15026,15035,15040,15045,15050,15055,15060,15067,15077,15087,15097,15105,15109,15113],{"__ignoreMap":141},[145,14902,14903],{"class":147,"line":148},[145,14904,14905],{"class":174},"# ❌ DANGEROUS — references copyrighted character and specific film\n",[145,14907,14908,14911,14913],{"class":147,"line":166},[145,14909,14910],{"class":262},"dangerous_payload ",[145,14912,266],{"class":258},[145,14914,427],{"class":262},[145,14916,14917,14919,14921,14923],{"class":147,"line":178},[145,14918,3669],{"class":159},[145,14920,436],{"class":262},[145,14922,1309],{"class":159},[145,14924,451],{"class":262},[145,14926,14927,14929,14931],{"class":147,"line":187},[145,14928,3680],{"class":159},[145,14930,436],{"class":262},[145,14932,14933],{"class":159},"\"Spider-Man swings between skyscrapers in New York City, \"\n",[145,14935,14936],{"class":147,"line":372},[145,14937,14938],{"class":159},"              \"wearing his classic red and blue suit. He shoots a web \"\n",[145,14940,14941],{"class":147,"line":378},[145,14942,14943],{"class":159},"              \"line and does a backflip, landing on a rooftop. \"\n",[145,14945,14946,14949],{"class":147,"line":384},[145,14947,14948],{"class":159},"              \"Marvel cinematic style, dramatic lighting.\"",[145,14950,451],{"class":262},[145,14952,14953,14955,14957,14959],{"class":147,"line":408},[145,14954,3692],{"class":159},[145,14956,436],{"class":262},[145,14958,536],{"class":155},[145,14960,451],{"class":262},[145,14962,14963,14965,14967,14969],{"class":147,"line":419},[145,14964,3704],{"class":159},[145,14966,436],{"class":262},[145,14968,1369],{"class":159},[145,14970,451],{"class":262},[145,14972,14973,14975,14977,14979],{"class":147,"line":430},[145,14974,3716],{"class":159},[145,14976,436],{"class":262},[145,14978,1385],{"class":159},[145,14980,451],{"class":262},[145,14982,14983,14985,14987],{"class":147,"line":454},[145,14984,3732],{"class":159},[145,14986,436],{"class":262},[145,14988,3737],{"class":155},[145,14990,14991],{"class":147,"line":465},[145,14992,468],{"class":262},[145,14994,14995],{"class":147,"line":599},[145,14996,14997],{"class":174},"# This will likely be rejected by copyright filters AND exposes you legally\n",[145,14999,15000],{"class":147,"line":604},[145,15001,375],{"emptyLinePlaceholder":58},[145,15003,15004],{"class":147,"line":610},[145,15005,15006],{"class":174},"# ✅ SAFE — original character, similar visual impact\n",[145,15008,15009,15012,15014],{"class":147,"line":616},[145,15010,15011],{"class":262},"safe_payload ",[145,15013,266],{"class":258},[145,15015,427],{"class":262},[145,15017,15018,15020,15022,15024],{"class":147,"line":622},[145,15019,3669],{"class":159},[145,15021,436],{"class":262},[145,15023,1309],{"class":159},[145,15025,451],{"class":262},[145,15027,15028,15030,15032],{"class":147,"line":627},[145,15029,3680],{"class":159},[145,15031,436],{"class":262},[145,15033,15034],{"class":159},"\"A masked vigilante in a sleek crimson and silver suit \"\n",[145,15036,15037],{"class":147,"line":638},[145,15038,15039],{"class":159},"              \"swings between futuristic skyscrapers using retractable \"\n",[145,15041,15042],{"class":147,"line":653},[145,15043,15044],{"class":159},"              \"grappling cables. Dynamic tracking shot follows the arc \"\n",[145,15046,15047],{"class":147,"line":659},[145,15048,15049],{"class":159},"              \"of movement as the figure performs an acrobatic flip \"\n",[145,15051,15052],{"class":147,"line":670},[145,15053,15054],{"class":159},"              \"mid-air and lands on a glass rooftop. Cinematic action \"\n",[145,15056,15057],{"class":147,"line":697},[145,15058,15059],{"class":159},"              \"sequence, golden hour lighting, anamorphic lens flare. \"\n",[145,15061,15062,15065],{"class":147,"line":709},[145,15063,15064],{"class":159},"              \"The city below is a mix of neon signs and steam vents.\"",[145,15066,451],{"class":262},[145,15068,15069,15071,15073,15075],{"class":147,"line":715},[145,15070,3692],{"class":159},[145,15072,436],{"class":262},[145,15074,536],{"class":155},[145,15076,451],{"class":262},[145,15078,15079,15081,15083,15085],{"class":147,"line":721},[145,15080,3704],{"class":159},[145,15082,436],{"class":262},[145,15084,1369],{"class":159},[145,15086,451],{"class":262},[145,15088,15089,15091,15093,15095],{"class":147,"line":727},[145,15090,3716],{"class":159},[145,15092,436],{"class":262},[145,15094,1385],{"class":159},[145,15096,451],{"class":262},[145,15098,15099,15101,15103],{"class":147,"line":738},[145,15100,3732],{"class":159},[145,15102,436],{"class":262},[145,15104,3737],{"class":155},[145,15106,15107],{"class":147,"line":743},[145,15108,468],{"class":262},[145,15110,15111],{"class":147,"line":749},[145,15112,375],{"emptyLinePlaceholder":58},[145,15114,15115,15117,15119],{"class":147,"line":766},[145,15116,12078],{"class":262},[145,15118,266],{"class":258},[145,15120,15121],{"class":262}," generate_video(safe_payload)\n",[11,15123,15124],{},"安全なプロンプトは同様に魅力的な動画を生成します。オリジナルのキャラクターデザイン、ダイナミックなアクション、シネマティックな品質を持ちながら、著作権で保護された作品を一切参照していません。出力はオリジナルのクリエイティブ表現であるため、商用利用可能です。",[92,15126,15128],{"id":15127},"製品ブランドコンテンツ自社アセットの安全な活用","製品・ブランドコンテンツ：自社アセットの安全な活用",[11,15130,15131,15132,13469,15134,15136],{},"商用製品動画の場合、最も安全かつ効果的なアプローチは、",[28,15133,4142],{},[28,15135,2960],{},"の参照タグを通じて自社アセットを参照することです。設計上、著作権的に安全なコンテンツが生成されます。",[136,15138,15140],{"className":337,"code":15139,"language":339,"meta":141,"style":141},"# ✅ Product showcase using your own brand assets\nproduct_payload = {\n    \"model\": \"seedance-2.0\",\n    \"prompt\": \"@Image1 as the hero product. Cinematic product reveal: \"\n              \"camera orbits slowly around the product on a clean white \"\n              \"marble surface. Soft studio lighting with a single dramatic \"\n              \"key light creating elegant shadows. Shallow depth of field. \"\n              \"Premium commercial photography aesthetic. Camera movement: \"\n              \"smooth 180-degree orbit, then slow push-in to detail shot.\",\n    \"image_urls\": [\"https://your-cdn.com/your-product-photo.jpg\"],\n    \"duration\": 8,\n    \"quality\": \"1080p\",\n    \"aspect_ratio\": \"16:9\",\n    \"generate_audio\": False\n}\n",[28,15141,15142,15147,15156,15166,15175,15180,15185,15190,15195,15202,15214,15224,15234,15244,15253],{"__ignoreMap":141},[145,15143,15144],{"class":147,"line":148},[145,15145,15146],{"class":174},"# ✅ Product showcase using your own brand assets\n",[145,15148,15149,15152,15154],{"class":147,"line":166},[145,15150,15151],{"class":262},"product_payload ",[145,15153,266],{"class":258},[145,15155,427],{"class":262},[145,15157,15158,15160,15162,15164],{"class":147,"line":178},[145,15159,3669],{"class":159},[145,15161,436],{"class":262},[145,15163,1309],{"class":159},[145,15165,451],{"class":262},[145,15167,15168,15170,15172],{"class":147,"line":187},[145,15169,3680],{"class":159},[145,15171,436],{"class":262},[145,15173,15174],{"class":159},"\"@Image1 as the hero product. Cinematic product reveal: \"\n",[145,15176,15177],{"class":147,"line":372},[145,15178,15179],{"class":159},"              \"camera orbits slowly around the product on a clean white \"\n",[145,15181,15182],{"class":147,"line":378},[145,15183,15184],{"class":159},"              \"marble surface. Soft studio lighting with a single dramatic \"\n",[145,15186,15187],{"class":147,"line":384},[145,15188,15189],{"class":159},"              \"key light creating elegant shadows. Shallow depth of field. \"\n",[145,15191,15192],{"class":147,"line":408},[145,15193,15194],{"class":159},"              \"Premium commercial photography aesthetic. Camera movement: \"\n",[145,15196,15197,15200],{"class":147,"line":419},[145,15198,15199],{"class":159},"              \"smooth 180-degree orbit, then slow push-in to detail shot.\"",[145,15201,451],{"class":262},[145,15203,15204,15207,15209,15212],{"class":147,"line":430},[145,15205,15206],{"class":159},"    \"image_urls\"",[145,15208,10692],{"class":262},[145,15210,15211],{"class":159},"\"https://your-cdn.com/your-product-photo.jpg\"",[145,15213,10698],{"class":262},[145,15215,15216,15218,15220,15222],{"class":147,"line":454},[145,15217,3692],{"class":159},[145,15219,436],{"class":262},[145,15221,3697],{"class":155},[145,15223,451],{"class":262},[145,15225,15226,15228,15230,15232],{"class":147,"line":465},[145,15227,3704],{"class":159},[145,15229,436],{"class":262},[145,15231,3709],{"class":159},[145,15233,451],{"class":262},[145,15235,15236,15238,15240,15242],{"class":147,"line":599},[145,15237,3716],{"class":159},[145,15239,436],{"class":262},[145,15241,1385],{"class":159},[145,15243,451],{"class":262},[145,15245,15246,15248,15250],{"class":147,"line":604},[145,15247,3732],{"class":159},[145,15249,436],{"class":262},[145,15251,15252],{"class":155},"False\n",[145,15254,15255],{"class":147,"line":610},[145,15256,468],{"class":262},[11,15258,15259],{},[2619,15260,15261],{},"上記の最初の例と同じセットアップとポーリング関数を使用します。",[11,15263,15264,15265,15267,15268,1261],{},"ショットスクリプト形式の時間ベース記述や高度な",[28,15266,13619],{},"の組み合わせなど、さらに多くのプロンプトエンジニアリング技法については、包括的な",[37,15269,2212],{"href":1767},[92,15271,15272],{"id":15272},"アプリケーションへのプロンプトセーフティレイヤーの構築",[11,15274,15275],{},"ユーザーが動画コンテンツを生成できるプロダクトを構築している場合、APIにリクエストを送信する前にクライアント側のプロンプト安全性チェックの実装を検討してください。",[136,15277,15279],{"className":337,"code":15278,"language":339,"meta":141,"style":141},"import re\n\n# Basic copyright safety check — extend as needed\nBLOCKED_TERMS = {\n    # Characters\n    \"spider-man\", \"spiderman\", \"batman\", \"superman\", \"iron man\",\n    \"mickey mouse\", \"elsa\", \"buzz lightyear\", \"pikachu\", \"mario\",\n    \"harry potter\", \"darth vader\", \"baby yoda\", \"grogu\",\n    # Franchises\n    \"marvel\", \"disney\", \"pixar movie\", \"star wars\", \"pokemon\",\n    \"lord of the rings\", \"game of thrones\", \"hogwarts\",\n    # Studios (when used to replicate their specific works)\n    \"studio ghibli film\", \"dreamworks movie\",\n    # Brands\n    \"nike swoosh\", \"coca-cola\", \"apple logo\",\n}\n\nBLOCKED_PATTERNS = [\n    r\"looks?\\s+like\\s+\\w+\\s+(from|in)\\s+\",  # \"looks like X from Y\"\n    r\"(scene|sequence)\\s+(from|in)\\s+[A-Z]\",  # \"scene from [Movie]\"\n    r\"in\\s+the\\s+style\\s+of\\s+[A-Z]\\w+\\s+[A-Z]\",  # \"in the style of [Studio Name]\"\n]\n\ndef check_prompt_safety(prompt: str) -> dict:\n    \"\"\"Check a prompt for potential copyright issues.\"\"\"\n    prompt_lower = prompt.lower()\n    issues = []\n\n    for term in BLOCKED_TERMS:\n        if term in prompt_lower:\n            issues.append(f\"Blocked term found: '{term}'\")\n\n    for pattern in BLOCKED_PATTERNS:\n        if re.search(pattern, prompt, re.IGNORECASE):\n            issues.append(f\"Risky pattern detected: {pattern}\")\n\n    return {\n        \"safe\": len(issues) == 0,\n        \"issues\": issues,\n        \"recommendation\": \"Revise prompt to use original descriptions\"\n                          if issues else \"Prompt appears safe\"\n    }\n\n# Usage\nresult = check_prompt_safety(\n    \"A Spider-Man style hero swinging through New York\"\n)\nprint(result)\n# {'safe': False, 'issues': ['Blocked term found: \\'spider-man\\''],\n#  'recommendation': 'Revise prompt to use original descriptions'}\n\nresult = check_prompt_safety(\n    \"A masked hero in crimson armor swings between futuristic towers\"\n)\nprint(result)\n# {'safe': True, 'issues': [], 'recommendation': 'Prompt appears safe'}\n",[28,15280,15281,15288,15292,15297,15306,15311,15338,15365,15387,15392,15419,15436,15441,15453,15458,15475,15479,15483,15492,15548,15590,15640,15644,15648,15667,15672,15682,15691,15695,15709,15720,15741,15745,15759,15771,15791,15795,15801,15821,15829,15839,15853,15857,15861,15866,15875,15880,15884,15891,15896,15901,15905,15913,15918,15922,15928],{"__ignoreMap":141},[145,15282,15283,15285],{"class":147,"line":148},[145,15284,346],{"class":258},[145,15286,15287],{"class":262}," re\n",[145,15289,15290],{"class":147,"line":166},[145,15291,375],{"emptyLinePlaceholder":58},[145,15293,15294],{"class":147,"line":178},[145,15295,15296],{"class":174},"# Basic copyright safety check — extend as needed\n",[145,15298,15299,15302,15304],{"class":147,"line":187},[145,15300,15301],{"class":155},"BLOCKED_TERMS",[145,15303,390],{"class":258},[145,15305,427],{"class":262},[145,15307,15308],{"class":147,"line":372},[145,15309,15310],{"class":174},"    # Characters\n",[145,15312,15313,15316,15318,15321,15323,15326,15328,15331,15333,15336],{"class":147,"line":378},[145,15314,15315],{"class":159},"    \"spider-man\"",[145,15317,399],{"class":262},[145,15319,15320],{"class":159},"\"spiderman\"",[145,15322,399],{"class":262},[145,15324,15325],{"class":159},"\"batman\"",[145,15327,399],{"class":262},[145,15329,15330],{"class":159},"\"superman\"",[145,15332,399],{"class":262},[145,15334,15335],{"class":159},"\"iron man\"",[145,15337,451],{"class":262},[145,15339,15340,15343,15345,15348,15350,15353,15355,15358,15360,15363],{"class":147,"line":384},[145,15341,15342],{"class":159},"    \"mickey mouse\"",[145,15344,399],{"class":262},[145,15346,15347],{"class":159},"\"elsa\"",[145,15349,399],{"class":262},[145,15351,15352],{"class":159},"\"buzz lightyear\"",[145,15354,399],{"class":262},[145,15356,15357],{"class":159},"\"pikachu\"",[145,15359,399],{"class":262},[145,15361,15362],{"class":159},"\"mario\"",[145,15364,451],{"class":262},[145,15366,15367,15370,15372,15375,15377,15380,15382,15385],{"class":147,"line":408},[145,15368,15369],{"class":159},"    \"harry potter\"",[145,15371,399],{"class":262},[145,15373,15374],{"class":159},"\"darth vader\"",[145,15376,399],{"class":262},[145,15378,15379],{"class":159},"\"baby yoda\"",[145,15381,399],{"class":262},[145,15383,15384],{"class":159},"\"grogu\"",[145,15386,451],{"class":262},[145,15388,15389],{"class":147,"line":419},[145,15390,15391],{"class":174},"    # Franchises\n",[145,15393,15394,15397,15399,15402,15404,15407,15409,15412,15414,15417],{"class":147,"line":430},[145,15395,15396],{"class":159},"    \"marvel\"",[145,15398,399],{"class":262},[145,15400,15401],{"class":159},"\"disney\"",[145,15403,399],{"class":262},[145,15405,15406],{"class":159},"\"pixar movie\"",[145,15408,399],{"class":262},[145,15410,15411],{"class":159},"\"star wars\"",[145,15413,399],{"class":262},[145,15415,15416],{"class":159},"\"pokemon\"",[145,15418,451],{"class":262},[145,15420,15421,15424,15426,15429,15431,15434],{"class":147,"line":454},[145,15422,15423],{"class":159},"    \"lord of the rings\"",[145,15425,399],{"class":262},[145,15427,15428],{"class":159},"\"game of thrones\"",[145,15430,399],{"class":262},[145,15432,15433],{"class":159},"\"hogwarts\"",[145,15435,451],{"class":262},[145,15437,15438],{"class":147,"line":465},[145,15439,15440],{"class":174},"    # Studios (when used to replicate their specific works)\n",[145,15442,15443,15446,15448,15451],{"class":147,"line":599},[145,15444,15445],{"class":159},"    \"studio ghibli film\"",[145,15447,399],{"class":262},[145,15449,15450],{"class":159},"\"dreamworks movie\"",[145,15452,451],{"class":262},[145,15454,15455],{"class":147,"line":604},[145,15456,15457],{"class":174},"    # Brands\n",[145,15459,15460,15463,15465,15468,15470,15473],{"class":147,"line":610},[145,15461,15462],{"class":159},"    \"nike swoosh\"",[145,15464,399],{"class":262},[145,15466,15467],{"class":159},"\"coca-cola\"",[145,15469,399],{"class":262},[145,15471,15472],{"class":159},"\"apple logo\"",[145,15474,451],{"class":262},[145,15476,15477],{"class":147,"line":616},[145,15478,468],{"class":262},[145,15480,15481],{"class":147,"line":622},[145,15482,375],{"emptyLinePlaceholder":58},[145,15484,15485,15488,15490],{"class":147,"line":627},[145,15486,15487],{"class":155},"BLOCKED_PATTERNS",[145,15489,390],{"class":258},[145,15491,8725],{"class":262},[145,15493,15494,15497,15499,15503,15506,15509,15511,15514,15516,15518,15521,15523,15525,15527,15529,15531,15534,15536,15539,15541,15543,15545],{"class":147,"line":638},[145,15495,15496],{"class":258},"    r",[145,15498,448],{"class":159},[145,15500,15502],{"class":15501},"sns5M","looks",[145,15504,15505],{"class":258},"?",[145,15507,15508],{"class":155},"\\s",[145,15510,5298],{"class":258},[145,15512,15513],{"class":15501},"like",[145,15515,15508],{"class":155},[145,15517,5298],{"class":258},[145,15519,15520],{"class":155},"\\w",[145,15522,5298],{"class":258},[145,15524,15508],{"class":155},[145,15526,5298],{"class":258},[145,15528,793],{"class":155},[145,15530,6586],{"class":15501},[145,15532,15533],{"class":258},"|",[145,15535,1180],{"class":15501},[145,15537,15538],{"class":155},")\\s",[145,15540,5298],{"class":258},[145,15542,448],{"class":159},[145,15544,1448],{"class":262},[145,15546,15547],{"class":174},"# \"looks like X from Y\"\n",[145,15549,15550,15552,15554,15556,15559,15561,15564,15566,15568,15570,15572,15574,15576,15578,15580,15583,15585,15587],{"class":147,"line":653},[145,15551,15496],{"class":258},[145,15553,448],{"class":159},[145,15555,793],{"class":155},[145,15557,15558],{"class":15501},"scene",[145,15560,15533],{"class":258},[145,15562,15563],{"class":15501},"sequence",[145,15565,15538],{"class":155},[145,15567,5298],{"class":258},[145,15569,793],{"class":155},[145,15571,6586],{"class":15501},[145,15573,15533],{"class":258},[145,15575,1180],{"class":15501},[145,15577,15538],{"class":155},[145,15579,5298],{"class":258},[145,15581,15582],{"class":155},"[A-Z]",[145,15584,448],{"class":159},[145,15586,1448],{"class":262},[145,15588,15589],{"class":174},"# \"scene from [Movie]\"\n",[145,15591,15592,15594,15596,15598,15600,15602,15605,15607,15609,15611,15613,15615,15618,15620,15622,15625,15627,15629,15631,15633,15635,15637],{"class":147,"line":659},[145,15593,15496],{"class":258},[145,15595,448],{"class":159},[145,15597,1180],{"class":15501},[145,15599,15508],{"class":155},[145,15601,5298],{"class":258},[145,15603,15604],{"class":15501},"the",[145,15606,15508],{"class":155},[145,15608,5298],{"class":258},[145,15610,11068],{"class":15501},[145,15612,15508],{"class":155},[145,15614,5298],{"class":258},[145,15616,15617],{"class":15501},"of",[145,15619,15508],{"class":155},[145,15621,5298],{"class":258},[145,15623,15624],{"class":155},"[A-Z]\\w",[145,15626,5298],{"class":258},[145,15628,15508],{"class":155},[145,15630,5298],{"class":258},[145,15632,15582],{"class":155},[145,15634,448],{"class":159},[145,15636,1448],{"class":262},[145,15638,15639],{"class":174},"# \"in the style of [Studio Name]\"\n",[145,15641,15642],{"class":147,"line":670},[145,15643,763],{"class":262},[145,15645,15646],{"class":147,"line":697},[145,15647,375],{"emptyLinePlaceholder":58},[145,15649,15650,15652,15655,15658,15660,15663,15665],{"class":147,"line":709},[145,15651,525],{"class":258},[145,15653,15654],{"class":151}," check_prompt_safety",[145,15656,15657],{"class":262},"(prompt: ",[145,15659,8531],{"class":155},[145,15661,15662],{"class":262},") -> ",[145,15664,8656],{"class":155},[145,15666,859],{"class":262},[145,15668,15669],{"class":147,"line":715},[145,15670,15671],{"class":159},"    \"\"\"Check a prompt for potential copyright issues.\"\"\"\n",[145,15673,15674,15677,15679],{"class":147,"line":721},[145,15675,15676],{"class":262},"    prompt_lower ",[145,15678,266],{"class":258},[145,15680,15681],{"class":262}," prompt.lower()\n",[145,15683,15684,15687,15689],{"class":147,"line":727},[145,15685,15686],{"class":262},"    issues ",[145,15688,266],{"class":258},[145,15690,5735],{"class":262},[145,15692,15693],{"class":147,"line":738},[145,15694,375],{"emptyLinePlaceholder":58},[145,15696,15697,15699,15702,15704,15707],{"class":147,"line":743},[145,15698,4990],{"class":258},[145,15700,15701],{"class":262}," term ",[145,15703,1180],{"class":258},[145,15705,15706],{"class":155}," BLOCKED_TERMS",[145,15708,859],{"class":262},[145,15710,15711,15713,15715,15717],{"class":147,"line":749},[145,15712,847],{"class":258},[145,15714,15701],{"class":262},[145,15716,1180],{"class":258},[145,15718,15719],{"class":262}," prompt_lower:\n",[145,15721,15722,15725,15727,15730,15732,15735,15737,15739],{"class":147,"line":766},[145,15723,15724],{"class":262},"            issues.append(",[145,15726,439],{"class":258},[145,15728,15729],{"class":159},"\"Blocked term found: '",[145,15731,684],{"class":155},[145,15733,15734],{"class":262},"term",[145,15736,690],{"class":155},[145,15738,5968],{"class":159},[145,15740,405],{"class":262},[145,15742,15743],{"class":147,"line":787},[145,15744,375],{"emptyLinePlaceholder":58},[145,15746,15747,15749,15752,15754,15757],{"class":147,"line":833},[145,15748,4990],{"class":258},[145,15750,15751],{"class":262}," pattern ",[145,15753,1180],{"class":258},[145,15755,15756],{"class":155}," BLOCKED_PATTERNS",[145,15758,859],{"class":262},[145,15760,15761,15763,15766,15769],{"class":147,"line":838},[145,15762,847],{"class":258},[145,15764,15765],{"class":262}," re.search(pattern, prompt, re.",[145,15767,15768],{"class":155},"IGNORECASE",[145,15770,547],{"class":262},[145,15772,15773,15775,15777,15780,15782,15785,15787,15789],{"class":147,"line":844},[145,15774,15724],{"class":262},[145,15776,439],{"class":258},[145,15778,15779],{"class":159},"\"Risky pattern detected: ",[145,15781,684],{"class":155},[145,15783,15784],{"class":262},"pattern",[145,15786,690],{"class":155},[145,15788,448],{"class":159},[145,15790,405],{"class":262},[145,15792,15793],{"class":147,"line":862},[145,15794,375],{"emptyLinePlaceholder":58},[145,15796,15797,15799],{"class":147,"line":871},[145,15798,1704],{"class":258},[145,15800,427],{"class":262},[145,15802,15803,15806,15808,15811,15814,15816,15819],{"class":147,"line":886},[145,15804,15805],{"class":159},"        \"safe\"",[145,15807,436],{"class":262},[145,15809,15810],{"class":155},"len",[145,15812,15813],{"class":262},"(issues) ",[145,15815,853],{"class":258},[145,15817,15818],{"class":155}," 0",[145,15820,451],{"class":262},[145,15822,15823,15826],{"class":147,"line":902},[145,15824,15825],{"class":159},"        \"issues\"",[145,15827,15828],{"class":262},": issues,\n",[145,15830,15831,15834,15836],{"class":147,"line":914},[145,15832,15833],{"class":159},"        \"recommendation\"",[145,15835,436],{"class":262},[145,15837,15838],{"class":159},"\"Revise prompt to use original descriptions\"\n",[145,15840,15841,15844,15847,15850],{"class":147,"line":953},[145,15842,15843],{"class":258},"                          if",[145,15845,15846],{"class":262}," issues ",[145,15848,15849],{"class":258},"else",[145,15851,15852],{"class":159}," \"Prompt appears safe\"\n",[145,15854,15855],{"class":147,"line":959},[145,15856,1408],{"class":262},[145,15858,15859],{"class":147,"line":964},[145,15860,375],{"emptyLinePlaceholder":58},[145,15862,15863],{"class":147,"line":970},[145,15864,15865],{"class":174},"# Usage\n",[145,15867,15868,15870,15872],{"class":147,"line":976},[145,15869,12078],{"class":262},[145,15871,266],{"class":258},[145,15873,15874],{"class":262}," check_prompt_safety(\n",[145,15876,15877],{"class":147,"line":988},[145,15878,15879],{"class":159},"    \"A Spider-Man style hero swinging through New York\"\n",[145,15881,15882],{"class":147,"line":993},[145,15883,405],{"class":262},[145,15885,15886,15888],{"class":147,"line":5402},[145,15887,6442],{"class":155},[145,15889,15890],{"class":262},"(result)\n",[145,15892,15893],{"class":147,"line":5411},[145,15894,15895],{"class":174},"# {'safe': False, 'issues': ['Blocked term found: \\'spider-man\\''],\n",[145,15897,15898],{"class":147,"line":5439},[145,15899,15900],{"class":174},"#  'recommendation': 'Revise prompt to use original descriptions'}\n",[145,15902,15903],{"class":147,"line":5470},[145,15904,375],{"emptyLinePlaceholder":58},[145,15906,15907,15909,15911],{"class":147,"line":5490},[145,15908,12078],{"class":262},[145,15910,266],{"class":258},[145,15912,15874],{"class":262},[145,15914,15915],{"class":147,"line":5496},[145,15916,15917],{"class":159},"    \"A masked hero in crimson armor swings between futuristic towers\"\n",[145,15919,15920],{"class":147,"line":5502},[145,15921,405],{"class":262},[145,15923,15924,15926],{"class":147,"line":5507},[145,15925,6442],{"class":155},[145,15927,15890],{"class":262},[145,15929,15930],{"class":147,"line":5520},[145,15931,15932],{"class":174},"# {'safe': True, 'issues': [], 'recommendation': 'Prompt appears safe'}\n",[11,15934,15935],{},[2619,15936,15937],{},"これは基本的な出発点です。本番環境のシステムでは、より高度なNLPベースの検出、定期的に更新されるブロックリスト、ボーダーラインケースに対する人間によるレビューが必要です。",[48,15939,15941],{"id":15940},"evolinkを通じたseedance-20-apiへのアクセス方法","EvoLinkを通じたSeedance 2.0 APIへのアクセス方法",[18,15943,15944],{},[11,15945,15946,15947,15950,15951,15954,15955,15958],{},"⚠️ ",[23,15948,15949],{},"重要な免責事項："," EvoLinkは複数の動画生成モデル向けの統合APIゲートウェイです。EvoLinkはコンプライアンスの仲介者としては機能",[23,15952,15953],{},"しません","。また、いかなるモデルの出力の著作権ステータスについても",[23,15956,15957],{},"保証を行いません","。著作権コンプライアンスは開発者の責任です。EvoLinkはアクセスとインフラストラクチャを提供します — 法的保護は提供しません。",[11,15960,15961],{},"上記を明確にした上で、EvoLinkがSeedance 2.0を使う開発者に提供するものを説明します。",[92,15963,15965],{"id":15964},"api統合今すぐ準備完了bytedanceが公開したら即座に稼働","API統合：今すぐ準備完了、ByteDanceが公開したら即座に稼働",[11,15967,15968],{},"EvoLinkはSeedance 2.0 APIアダプターの開発を完了しています。エンドポイント、パラメータ、レスポンスフォーマットは確定し、ドキュメント化されています。ByteDanceが著作権セーフガードの実装後にAPIを公式に有効化した時点で、EvoLinkとの統合はすぐに稼働します。コード変更は一切不要です。",[11,15970,15971,15972,15977],{},"統合は",[37,15973,15976],{"href":15974,"rel":15975},"https://docs.evolink.ai/en/api-manual/video-series/seedance2.0/seedance-2.0-video-generate",[41],"EvoLink Seedance 2.0 Video Generation API","仕様に準拠しています。",[136,15979,15981],{"className":337,"code":15980,"language":339,"meta":141,"style":141},"# Text-to-video: Seedance 2.0 via EvoLink\ntext_to_video = {\n    \"model\": \"seedance-2.0\",\n    \"prompt\": \"A wise old cat in round spectacles sits at a cozy cafe \"\n              \"table, paws wrapped around a tiny porcelain cup. Steam \"\n              \"curls upward. The cat speaks in a calm, measured tone. \"\n              \"Warm afternoon light through the cafe window, Pixar-quality \"\n              \"3D animation, warm color palette, expressive character acting.\",\n    \"duration\": 10,\n    \"quality\": \"720p\",\n    \"aspect_ratio\": \"16:9\",\n    \"generate_audio\": True\n}\n\nresult = generate_video(text_to_video)\n",[28,15982,15983,15988,15997,16007,16016,16021,16026,16031,16038,16048,16058,16068,16076,16080,16084],{"__ignoreMap":141},[145,15984,15985],{"class":147,"line":148},[145,15986,15987],{"class":174},"# Text-to-video: Seedance 2.0 via EvoLink\n",[145,15989,15990,15993,15995],{"class":147,"line":166},[145,15991,15992],{"class":262},"text_to_video ",[145,15994,266],{"class":258},[145,15996,427],{"class":262},[145,15998,15999,16001,16003,16005],{"class":147,"line":178},[145,16000,3669],{"class":159},[145,16002,436],{"class":262},[145,16004,1309],{"class":159},[145,16006,451],{"class":262},[145,16008,16009,16011,16013],{"class":147,"line":187},[145,16010,3680],{"class":159},[145,16012,436],{"class":262},[145,16014,16015],{"class":159},"\"A wise old cat in round spectacles sits at a cozy cafe \"\n",[145,16017,16018],{"class":147,"line":372},[145,16019,16020],{"class":159},"              \"table, paws wrapped around a tiny porcelain cup. Steam \"\n",[145,16022,16023],{"class":147,"line":378},[145,16024,16025],{"class":159},"              \"curls upward. The cat speaks in a calm, measured tone. \"\n",[145,16027,16028],{"class":147,"line":384},[145,16029,16030],{"class":159},"              \"Warm afternoon light through the cafe window, Pixar-quality \"\n",[145,16032,16033,16036],{"class":147,"line":408},[145,16034,16035],{"class":159},"              \"3D animation, warm color palette, expressive character acting.\"",[145,16037,451],{"class":262},[145,16039,16040,16042,16044,16046],{"class":147,"line":419},[145,16041,3692],{"class":159},[145,16043,436],{"class":262},[145,16045,536],{"class":155},[145,16047,451],{"class":262},[145,16049,16050,16052,16054,16056],{"class":147,"line":430},[145,16051,3704],{"class":159},[145,16053,436],{"class":262},[145,16055,1369],{"class":159},[145,16057,451],{"class":262},[145,16059,16060,16062,16064,16066],{"class":147,"line":454},[145,16061,3716],{"class":159},[145,16063,436],{"class":262},[145,16065,1385],{"class":159},[145,16067,451],{"class":262},[145,16069,16070,16072,16074],{"class":147,"line":465},[145,16071,3732],{"class":159},[145,16073,436],{"class":262},[145,16075,3737],{"class":155},[145,16077,16078],{"class":147,"line":599},[145,16079,468],{"class":262},[145,16081,16082],{"class":147,"line":604},[145,16083,375],{"emptyLinePlaceholder":58},[145,16085,16086,16088,16090],{"class":147,"line":610},[145,16087,12078],{"class":262},[145,16089,266],{"class":258},[145,16091,16092],{"class":262}," generate_video(text_to_video)\n",[11,16094,16095],{},[2619,16096,16097],{},"最初のコード例と同じセットアップとポーリング関数を使用します。",[92,16099,16101],{"id":16100},"フルマルチモーダル生成画像-動画-音声","フルマルチモーダル生成：画像 + 動画 + 音声",[11,16103,16104,16105,16107],{},"Seedance 2.0の際立った特徴は、マルチモーダルな",[28,16106,13619],{},"システムです。画像、動画、音声の入力を単一の生成リクエスト内でクリエイティブな参照素材として組み合わせる機能です。EvoLinkでは、すべての入力モダリティが完全にサポートされています。",[136,16109,16111],{"className":337,"code":16110,"language":339,"meta":141,"style":141},"# Multimodal generation — character ref + camera ref + audio sync\nmultimodal_payload = {\n    \"model\": \"seedance-2.0\",\n    \"prompt\": \"@Image1 as character reference — dancer in athletic wear. \"\n              \"Reference @Video1 camera movement style: rhythmic push-pull \"\n              \"pan and tilt movements. @Audio1 for BGM rhythm — align cuts \"\n              \"and motion energy to the beat. The dancer performs energetically \"\n              \"on a colorful LED-lit stage. Spotlights shift colors in sync \"\n              \"with the rhythm. Smoke effects catch the colored lighting.\",\n    \"image_urls\": [\n        \"https://your-cdn.com/character-design.png\"\n    ],\n    \"video_urls\": [\n        \"https://your-cdn.com/camera-reference.mp4\"\n    ],\n    \"audio_urls\": [\n        \"https://your-cdn.com/background-track.mp3\"\n    ],\n    \"duration\": 12,\n    \"quality\": \"720p\",\n    \"aspect_ratio\": \"16:9\",\n    \"generate_audio\": True\n}\n\nresult = generate_video(multimodal_payload)\n",[28,16112,16113,16118,16127,16137,16146,16151,16156,16161,16166,16173,16179,16184,16189,16196,16201,16205,16212,16217,16221,16232,16242,16252,16260,16264,16268],{"__ignoreMap":141},[145,16114,16115],{"class":147,"line":148},[145,16116,16117],{"class":174},"# Multimodal generation — character ref + camera ref + audio sync\n",[145,16119,16120,16123,16125],{"class":147,"line":166},[145,16121,16122],{"class":262},"multimodal_payload ",[145,16124,266],{"class":258},[145,16126,427],{"class":262},[145,16128,16129,16131,16133,16135],{"class":147,"line":178},[145,16130,3669],{"class":159},[145,16132,436],{"class":262},[145,16134,1309],{"class":159},[145,16136,451],{"class":262},[145,16138,16139,16141,16143],{"class":147,"line":187},[145,16140,3680],{"class":159},[145,16142,436],{"class":262},[145,16144,16145],{"class":159},"\"@Image1 as character reference — dancer in athletic wear. \"\n",[145,16147,16148],{"class":147,"line":372},[145,16149,16150],{"class":159},"              \"Reference @Video1 camera movement style: rhythmic push-pull \"\n",[145,16152,16153],{"class":147,"line":378},[145,16154,16155],{"class":159},"              \"pan and tilt movements. @Audio1 for BGM rhythm — align cuts \"\n",[145,16157,16158],{"class":147,"line":384},[145,16159,16160],{"class":159},"              \"and motion energy to the beat. The dancer performs energetically \"\n",[145,16162,16163],{"class":147,"line":408},[145,16164,16165],{"class":159},"              \"on a colorful LED-lit stage. Spotlights shift colors in sync \"\n",[145,16167,16168,16171],{"class":147,"line":419},[145,16169,16170],{"class":159},"              \"with the rhythm. Smoke effects catch the colored lighting.\"",[145,16172,451],{"class":262},[145,16174,16175,16177],{"class":147,"line":430},[145,16176,15206],{"class":159},[145,16178,2691],{"class":262},[145,16180,16181],{"class":147,"line":454},[145,16182,16183],{"class":159},"        \"https://your-cdn.com/character-design.png\"\n",[145,16185,16186],{"class":147,"line":465},[145,16187,16188],{"class":262},"    ],\n",[145,16190,16191,16194],{"class":147,"line":599},[145,16192,16193],{"class":159},"    \"video_urls\"",[145,16195,2691],{"class":262},[145,16197,16198],{"class":147,"line":604},[145,16199,16200],{"class":159},"        \"https://your-cdn.com/camera-reference.mp4\"\n",[145,16202,16203],{"class":147,"line":610},[145,16204,16188],{"class":262},[145,16206,16207,16210],{"class":147,"line":616},[145,16208,16209],{"class":159},"    \"audio_urls\"",[145,16211,2691],{"class":262},[145,16213,16214],{"class":147,"line":622},[145,16215,16216],{"class":159},"        \"https://your-cdn.com/background-track.mp3\"\n",[145,16218,16219],{"class":147,"line":627},[145,16220,16188],{"class":262},[145,16222,16223,16225,16227,16230],{"class":147,"line":638},[145,16224,3692],{"class":159},[145,16226,436],{"class":262},[145,16228,16229],{"class":155},"12",[145,16231,451],{"class":262},[145,16233,16234,16236,16238,16240],{"class":147,"line":653},[145,16235,3704],{"class":159},[145,16237,436],{"class":262},[145,16239,1369],{"class":159},[145,16241,451],{"class":262},[145,16243,16244,16246,16248,16250],{"class":147,"line":659},[145,16245,3716],{"class":159},[145,16247,436],{"class":262},[145,16249,1385],{"class":159},[145,16251,451],{"class":262},[145,16253,16254,16256,16258],{"class":147,"line":670},[145,16255,3732],{"class":159},[145,16257,436],{"class":262},[145,16259,3737],{"class":155},[145,16261,16262],{"class":147,"line":697},[145,16263,468],{"class":262},[145,16265,16266],{"class":147,"line":709},[145,16267,375],{"emptyLinePlaceholder":58},[145,16269,16270,16272,16274],{"class":147,"line":715},[145,16271,12078],{"class":262},[145,16273,266],{"class":258},[145,16275,16276],{"class":262}," generate_video(multimodal_payload)\n",[11,16278,16279],{},[2619,16280,16097],{},[14194,16282,16283,16288,16291],{"style":14196},[11,16284,16285],{},[23,16286,16287],{},"EvoLinkのVideo Generation APIを始めましょう",[11,16289,16290],{},"無料プランあり。1つのAPIキーで複数のモデル。Seedance 2.0統合は準備完了 — ByteDanceがアクセスを開放した瞬間に稼働します。",[11,16292,16293],{},[37,16294,16296],{"href":16295},"/early-access","無料APIキーを取得する →",[92,16298,16300],{"id":16299},"完全なapiパラメータリファレンス","完全なAPIパラメータリファレンス",[11,16302,16303],{},"EvoLinkを通じてSeedance 2.0でサポートされている全パラメータセットです。",[2037,16305,16306,16319],{},[2040,16307,16308],{},[2043,16309,16310,16312,16314,16317],{},[2046,16311,3399],{},[2046,16313,3402],{},[2046,16315,16316],{"align":13641},"必須",[2046,16318,3411],{},[2053,16320,16321,16335,16356,16371,16386,16401,16414,16433,16460,16473],{},[2043,16322,16323,16327,16329,16331],{},[2058,16324,16325],{},[28,16326,1748],{},[2058,16328,3422],{},[2058,16330,13681],{"align":13641},[2058,16332,16333],{},[28,16334,1309],{},[2043,16336,16337,16341,16343,16345],{},[2058,16338,16339],{},[28,16340,1763],{},[2058,16342,3422],{},[2058,16344,13681],{"align":13641},[2058,16346,16347,16348,2916,16350,2916,16352,16355],{},"最大2000トークン。",[28,16349,2909],{},[28,16351,11273],{},[28,16353,16354],{},"@Audio1","の参照をサポート",[2043,16357,16358,16362,16366,16368],{},[2058,16359,16360],{},[28,16361,2896],{},[2058,16363,3422,16364],{},[145,16365],{},[2058,16367,3425],{"align":13641},[2058,16369,16370],{},"最大9枚、各30MBまで。形式: jpeg, png, webp, bmp, tiff, gif",[2043,16372,16373,16377,16381,16383],{},[2058,16374,16375],{},[28,16376,3566],{},[2058,16378,3422,16379],{},[145,16380],{},[2058,16382,3425],{"align":13641},[2058,16384,16385],{},"最大3本、合計2-15秒、各50MBまで。形式: mp4, mov",[2043,16387,16388,16392,16396,16398],{},[2058,16389,16390],{},[28,16391,3583],{},[2058,16393,3422,16394],{},[145,16395],{},[2058,16397,3425],{"align":13641},[2058,16399,16400],{},"最大3トラック、合計15秒以内、各15MBまで。形式: mp3, wav",[2043,16402,16403,16407,16409,16411],{},[2058,16404,16405],{},[28,16406,1776],{},[2058,16408,3457],{},[2058,16410,3425],{"align":13641},[2058,16412,16413],{},"4-15秒（デフォルト: 5）",[2043,16415,16416,16420,16422,16424],{},[2058,16417,16418],{},[28,16419,1784],{},[2058,16421,3422],{},[2058,16423,3425],{"align":13641},[2058,16425,16426,2916,16428,16430,16431],{},[28,16427,4012],{},[28,16429,1369],{},"（デフォルト）、",[28,16432,3709],{},[2043,16434,16435,16439,16441,16443],{},[2058,16436,16437],{},[28,16438,1804],{},[2058,16440,3422],{},[2058,16442,3425],{"align":13641},[2058,16444,16445,16430,16447,2916,16449,2916,16451,2916,16453,2916,16455,2916,16457],{},[28,16446,1385],{},[28,16448,3721],{},[28,16450,5999],{},[28,16452,6004],{},[28,16454,6009],{},[28,16456,3832],{},[28,16458,16459],{},"\"adaptive\"",[2043,16461,16462,16466,16468,16470],{},[2058,16463,16464],{},[28,16465,1824],{},[2058,16467,3529],{},[2058,16469,3425],{"align":13641},[2058,16471,16472],{},"同期音声生成を有効にする（デフォルト: true）",[2043,16474,16475,16479,16481,16483],{},[2058,16476,16477],{},[28,16478,3599],{},[2058,16480,3422],{},[2058,16482,3425],{"align":13641},[2058,16484,16485],{},"タスク完了通知用のHTTPS Webhook URL",[11,16487,16488,16491],{},[23,16489,16490],{},"入力制限："," すべてのモダリティ合計で最大12ファイル。リアルな人間の顔のアップロードは自動的に拒否されます。すべてのURLはサーバーから直接アクセス可能である必要があります。",[11,16493,16494,16497,16498,16503,16504,16506],{},[23,16495,16496],{},"タスクフロー："," APIはタスクIDを即座に返します。",[37,16499,16502],{"href":16500,"rel":16501},"https://docs.evolink.ai/en/api-manual/task-management/get-task-detail",[41],"タスクステータスエンドポイント","をポーリングするか、",[28,16505,3599],{}," Webhookを使用して完了通知を受け取ってください。生成された動画URLは24時間有効です。速やかにダウンロードして保存してください。",[92,16508,16510],{"id":16509},"マルチモデルフェイルオーバー遅延期間中もパイプラインを稼働させ続ける","マルチモデルフェイルオーバー：遅延期間中もパイプラインを稼働させ続ける",[11,16512,16513],{},"ここでEvoLinkの統合APIアーキテクチャが、Seedance 2.0の著作権遅延期間中に具体的な価値を発揮します。各モデルに個別のインテグレーションを構築・メンテナンスする代わりに、単一のコードパスで自動フェイルオーバーを実装できます。",[136,16515,16517],{"className":337,"code":16516,"language":339,"meta":141,"style":141},"# Multi-model failover — your pipeline never stops\nMODEL_PRIORITY = [\n    \"seedance-2.0\",  # Preferred: best multimodal capabilities\n    \"kling\",          # Fallback 1: strong motion quality\n    \"veo-2\",          # Fallback 2: high visual fidelity\n    \"sora\",           # Fallback 3: robust safety, good adherence\n]\n\ndef generate_with_failover(prompt, duration=10, quality=\"720p\",\n                           aspect_ratio=\"16:9\", **kwargs):\n    \"\"\"Try models in priority order. First success wins.\"\"\"\n    errors = {}\n    for model in MODEL_PRIORITY:\n        try:\n            payload = {\n                \"model\": model,\n                \"prompt\": prompt,\n                \"duration\": duration,\n                \"quality\": quality,\n                \"aspect_ratio\": aspect_ratio,\n                **kwargs\n            }\n            result = generate_video(payload)\n            print(f\"✅ Generated with: {model}\")\n            return result\n        except Exception as e:\n            errors[model] = str(e)\n            print(f\"⚠️ {model} unavailable: {e}\")\n            continue\n\n    raise Exception(f\"All models failed: {errors}\")\n\n# Your application code stays the same regardless of model availability\nresult = generate_with_failover(\n    prompt=\"Cinematic drone shot over a mountain lake at sunrise. \"\n           \"Mist rises from the water surface. Golden light breaks \"\n           \"through clouds and reflects off the still water. \"\n           \"Slow, majestic camera movement.\",\n    duration=10,\n    quality=\"720p\",\n    aspect_ratio=\"16:9\",\n    generate_audio=True\n)\n",[28,16518,16519,16524,16533,16543,16553,16563,16574,16578,16582,16605,16622,16627,16636,16650,16656,16665,16673,16680,16688,16696,16704,16712,16717,16726,16747,16753,16763,16776,16806,16810,16814,16838,16842,16847,16856,16866,16871,16876,16883,16894,16905,16916,16925],{"__ignoreMap":141},[145,16520,16521],{"class":147,"line":148},[145,16522,16523],{"class":174},"# Multi-model failover — your pipeline never stops\n",[145,16525,16526,16529,16531],{"class":147,"line":166},[145,16527,16528],{"class":155},"MODEL_PRIORITY",[145,16530,390],{"class":258},[145,16532,8725],{"class":262},[145,16534,16535,16538,16540],{"class":147,"line":178},[145,16536,16537],{"class":159},"    \"seedance-2.0\"",[145,16539,1448],{"class":262},[145,16541,16542],{"class":174},"# Preferred: best multimodal capabilities\n",[145,16544,16545,16548,16550],{"class":147,"line":187},[145,16546,16547],{"class":159},"    \"kling\"",[145,16549,1312],{"class":262},[145,16551,16552],{"class":174},"# Fallback 1: strong motion quality\n",[145,16554,16555,16558,16560],{"class":147,"line":372},[145,16556,16557],{"class":159},"    \"veo-2\"",[145,16559,1312],{"class":262},[145,16561,16562],{"class":174},"# Fallback 2: high visual fidelity\n",[145,16564,16565,16568,16571],{"class":147,"line":378},[145,16566,16567],{"class":159},"    \"sora\"",[145,16569,16570],{"class":262},",           ",[145,16572,16573],{"class":174},"# Fallback 3: robust safety, good adherence\n",[145,16575,16576],{"class":147,"line":384},[145,16577,763],{"class":262},[145,16579,16580],{"class":147,"line":408},[145,16581,375],{"emptyLinePlaceholder":58},[145,16583,16584,16586,16589,16592,16594,16596,16599,16601,16603],{"class":147,"line":419},[145,16585,525],{"class":258},[145,16587,16588],{"class":151}," generate_with_failover",[145,16590,16591],{"class":262},"(prompt, duration",[145,16593,266],{"class":258},[145,16595,536],{"class":155},[145,16597,16598],{"class":262},", quality",[145,16600,266],{"class":258},[145,16602,1369],{"class":159},[145,16604,451],{"class":262},[145,16606,16607,16610,16612,16614,16616,16619],{"class":147,"line":430},[145,16608,16609],{"class":262},"                           aspect_ratio",[145,16611,266],{"class":258},[145,16613,1385],{"class":159},[145,16615,399],{"class":262},[145,16617,16618],{"class":258},"**",[145,16620,16621],{"class":262},"kwargs):\n",[145,16623,16624],{"class":147,"line":454},[145,16625,16626],{"class":159},"    \"\"\"Try models in priority order. First success wins.\"\"\"\n",[145,16628,16629,16631,16633],{"class":147,"line":465},[145,16630,5730],{"class":262},[145,16632,266],{"class":258},[145,16634,16635],{"class":262}," {}\n",[145,16637,16638,16640,16643,16645,16648],{"class":147,"line":599},[145,16639,4990],{"class":258},[145,16641,16642],{"class":262}," model ",[145,16644,1180],{"class":258},[145,16646,16647],{"class":155}," MODEL_PRIORITY",[145,16649,859],{"class":262},[145,16651,16652,16654],{"class":147,"line":604},[145,16653,5006],{"class":258},[145,16655,859],{"class":262},[145,16657,16658,16661,16663],{"class":147,"line":610},[145,16659,16660],{"class":262},"            payload ",[145,16662,266],{"class":258},[145,16664,427],{"class":262},[145,16666,16667,16670],{"class":147,"line":616},[145,16668,16669],{"class":159},"                \"model\"",[145,16671,16672],{"class":262},": model,\n",[145,16674,16675,16678],{"class":147,"line":622},[145,16676,16677],{"class":159},"                \"prompt\"",[145,16679,8349],{"class":262},[145,16681,16682,16685],{"class":147,"line":627},[145,16683,16684],{"class":159},"                \"duration\"",[145,16686,16687],{"class":262},": duration,\n",[145,16689,16690,16693],{"class":147,"line":638},[145,16691,16692],{"class":159},"                \"quality\"",[145,16694,16695],{"class":262},": quality,\n",[145,16697,16698,16701],{"class":147,"line":653},[145,16699,16700],{"class":159},"                \"aspect_ratio\"",[145,16702,16703],{"class":262},": aspect_ratio,\n",[145,16705,16706,16709],{"class":147,"line":659},[145,16707,16708],{"class":258},"                **",[145,16710,16711],{"class":262},"kwargs\n",[145,16713,16714],{"class":147,"line":670},[145,16715,16716],{"class":262},"            }\n",[145,16718,16719,16721,16723],{"class":147,"line":697},[145,16720,8431],{"class":262},[145,16722,266],{"class":258},[145,16724,16725],{"class":262}," generate_video(payload)\n",[145,16727,16728,16730,16732,16734,16737,16739,16741,16743,16745],{"class":147,"line":709},[145,16729,5442],{"class":155},[145,16731,793],{"class":262},[145,16733,439],{"class":258},[145,16735,16736],{"class":159},"\"✅ Generated with: ",[145,16738,684],{"class":155},[145,16740,1748],{"class":262},[145,16742,690],{"class":155},[145,16744,448],{"class":159},[145,16746,405],{"class":262},[145,16748,16749,16751],{"class":147,"line":715},[145,16750,865],{"class":258},[145,16752,1707],{"class":262},[145,16754,16755,16757,16759,16761],{"class":147,"line":721},[145,16756,5405],{"class":258},[145,16758,6920],{"class":155},[145,16760,6923],{"class":258},[145,16762,5517],{"class":262},[145,16764,16765,16768,16770,16773],{"class":147,"line":727},[145,16766,16767],{"class":262},"            errors[model] ",[145,16769,266],{"class":258},[145,16771,16772],{"class":155}," str",[145,16774,16775],{"class":262},"(e)\n",[145,16777,16778,16780,16782,16784,16787,16789,16791,16793,16796,16798,16800,16802,16804],{"class":147,"line":738},[145,16779,5442],{"class":155},[145,16781,793],{"class":262},[145,16783,439],{"class":258},[145,16785,16786],{"class":159},"\"⚠️ ",[145,16788,684],{"class":155},[145,16790,1748],{"class":262},[145,16792,690],{"class":155},[145,16794,16795],{"class":159}," unavailable: ",[145,16797,684],{"class":155},[145,16799,5561],{"class":262},[145,16801,690],{"class":155},[145,16803,448],{"class":159},[145,16805,405],{"class":262},[145,16807,16808],{"class":147,"line":743},[145,16809,5499],{"class":258},[145,16811,16812],{"class":147,"line":749},[145,16813,375],{"emptyLinePlaceholder":58},[145,16815,16816,16818,16820,16822,16824,16827,16829,16832,16834,16836],{"class":147,"line":766},[145,16817,996],{"class":258},[145,16819,6920],{"class":155},[145,16821,793],{"class":262},[145,16823,439],{"class":258},[145,16825,16826],{"class":159},"\"All models failed: ",[145,16828,684],{"class":155},[145,16830,16831],{"class":262},"errors",[145,16833,690],{"class":155},[145,16835,448],{"class":159},[145,16837,405],{"class":262},[145,16839,16840],{"class":147,"line":787},[145,16841,375],{"emptyLinePlaceholder":58},[145,16843,16844],{"class":147,"line":833},[145,16845,16846],{"class":174},"# Your application code stays the same regardless of model availability\n",[145,16848,16849,16851,16853],{"class":147,"line":838},[145,16850,12078],{"class":262},[145,16852,266],{"class":258},[145,16854,16855],{"class":262}," generate_with_failover(\n",[145,16857,16858,16861,16863],{"class":147,"line":844},[145,16859,16860],{"class":700},"    prompt",[145,16862,266],{"class":258},[145,16864,16865],{"class":159},"\"Cinematic drone shot over a mountain lake at sunrise. \"\n",[145,16867,16868],{"class":147,"line":862},[145,16869,16870],{"class":159},"           \"Mist rises from the water surface. Golden light breaks \"\n",[145,16872,16873],{"class":147,"line":871},[145,16874,16875],{"class":159},"           \"through clouds and reflects off the still water. \"\n",[145,16877,16878,16881],{"class":147,"line":886},[145,16879,16880],{"class":159},"           \"Slow, majestic camera movement.\"",[145,16882,451],{"class":262},[145,16884,16885,16888,16890,16892],{"class":147,"line":902},[145,16886,16887],{"class":700},"    duration",[145,16889,266],{"class":258},[145,16891,536],{"class":155},[145,16893,451],{"class":262},[145,16895,16896,16899,16901,16903],{"class":147,"line":914},[145,16897,16898],{"class":700},"    quality",[145,16900,266],{"class":258},[145,16902,1369],{"class":159},[145,16904,451],{"class":262},[145,16906,16907,16910,16912,16914],{"class":147,"line":953},[145,16908,16909],{"class":700},"    aspect_ratio",[145,16911,266],{"class":258},[145,16913,1385],{"class":159},[145,16915,451],{"class":262},[145,16917,16918,16921,16923],{"class":147,"line":959},[145,16919,16920],{"class":700},"    generate_audio",[145,16922,266],{"class":258},[145,16924,3737],{"class":155},[145,16926,16927],{"class":147,"line":964},[145,16928,405],{"class":262},[11,16930,16931],{},[2619,16932,16097],{},[11,16934,16935],{},"Seedance 2.0が遅延している間、パイプラインは同じEvoLinkエンドポイントを通じてKling、Veo、またはSoraで動画を生成します。Seedanceがオンラインに復帰した瞬間に優先リストに組み込まれます。移行もコード変更もダウンタイムも不要です。",[11,16937,16938],{},"これは現在の遅延に限った話ではありません。モデルの可用性は本質的に予測不可能です。レート制限、メンテナンスウィンドウ、ポリシー変更、そして法的措置によって、どのモデルもいつでもオフラインになる可能性があります。初日からモデルに依存しない設計にすることは、状況が変わるたびにリターンを生む戦略的な決定です。",[11,16940,16941,16942,1261],{},"タスク管理、Webhook、エラーハンドリング、Python・Node.js・cURLでのSDK例を含む完全なAPIドキュメントについては、",[37,16943,16944],{"href":14209},"EvoLink Video Generation Docs",[48,16946,8919],{"id":8919},[92,16948,16950],{"id":16949},"seedance-20-apiはまだリリースされるのですか","Seedance 2.0 APIはまだリリースされるのですか？",[11,16952,16953,16954,2916,16958,16962],{},"はい、ただしタイムラインは不確定です。ByteDanceは、顔検出、著作権キャラクターのブロック、ウォーターマーキングなどの著作権セーフガードを実装するため、当初予定されていた2026年2月24日のローンチを延期しました（",[37,16955,16957],{"href":13507,"rel":16956},[41],"朝鮮日報、2/22",[37,16959,16961],{"href":13480,"rel":16960},[41],"Hacker News、2/21","）。代替のリリース日は公表されていません。遅延は、ByteDanceのセーフガード実装が自社の法務チームを納得させ、おそらくMPAの差止通知書で提起された中核的な懸念に対処するまで続くでしょう。現実的な見積もりは数週間から数か月です。",[92,16964,16966],{"id":16965},"seedance-20を商用プロジェクトに使用できますか","Seedance 2.0を商用プロジェクトに使用できますか？",[11,16968,16969,16970,1261],{},"何を生成するかに完全に依存します。著作権で保護されたプロパティ、実在の人物、商標登録されたブランドを参照せずに、オリジナルのキャラクターやシーンを記述するオリジナルプロンプトから作成されたコンテンツは、法的リスクが最も低くなります。既存のIPを意図的にまたは過失で再現するコンテンツは重大なリスクを伴い、これはどのAIモデルで生成するかに関係なく当てはまります。APIがリリースされたら、Seedance 2.0の利用規約で商用利用に関する具体的な規定を慎重に確認し、ハイステークスまたは広範な配信を伴う商用プロジェクトについては知的財産弁護士に相談してください。実践的なフレームワークについては、上記の",[37,16971,16973],{"href":16972},"#%E3%82%A8%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%97%E3%83%A9%E3%82%A4%E3%82%BA%E5%90%91%E3%81%91%E3%82%B3%E3%83%B3%E3%83%97%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%82%B9%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF%E3%83%AA%E3%82%B9%E3%83%88","コンプライアンスチェックリスト",[92,16975,16977],{"id":16976},"既存のseedance動画は削除されますか","既存のSeedance動画は削除されますか？",[11,16979,16980],{},"ByteDanceがSeedance 2.0のWebインターフェースで既に生成されたコンテンツを遡及的に削除する計画があるという兆候はありません。MPAの差止通知書は、プラットフォームとしてのByteDanceの慣行を対象としており、個々のユーザーやその出力を対象としていません。ただし、認識可能な著作権キャラクターや実在の人物を含むコンテンツを生成して公開している場合、権利者から直接、別途のテイクダウン要求（DMCA通知またはそれに相当するもの）を受ける可能性があります。そのリスクは使用する生成ツールに関係なく存在します。",[92,16982,16984],{"id":16983},"evolinkは著作権コンプライアンスをどのように扱いますか","EvoLinkは著作権コンプライアンスをどのように扱いますか？",[11,16986,16987,16988,16991],{},"EvoLinkは統合APIゲートウェイです。単一の統合ポイントを通じて複数の動画生成モデルへのアクセスを提供します。EvoLinkはプロンプトや生成された出力の著作権ステータスのフィルタリング、モデレーション、検証は行い",[23,16989,16990],{},"ません","。著作権コンプライアンスは完全に開発者の責任です。EvoLinkが提供するのはインフラの柔軟性です。あるモデルのコンテンツポリシー、可用性、法的状況がニーズに合わない場合、コードを変更せずに同じAPIで別のモデルに切り替えることができます。このモデルの多様性自体が実践的なリスク軽減戦略です。単一のモデルの可用性やポリシー判断に依存することがなくなります。",[92,16993,16995],{"id":16994},"seedance-apiが遅延し続けた場合どのような代替手段がありますか","Seedance APIが遅延し続けた場合、どのような代替手段がありますか？",[11,16997,16998],{},"EvoLinkの統合APIを通じて、Seedanceと同じ統合コードを使用していくつかの本番環境対応の代替モデルにアクセスできます。",[2037,17000,17001,17016],{},[2040,17002,17003],{},[2043,17004,17005,17008,17011,17013],{},[2046,17006,17007],{},"モデル",[2046,17009,17010],{},"強み",[2046,17012,13654],{},[2046,17014,17015],{},"最適な用途",[2053,17017,17018,17033,17049,17064],{},[2043,17019,17020,17024,17027,17030],{},[2058,17021,17022],{},[23,17023,13727],{},[2058,17025,17026],{},"優れたモーション品質、キャラクターの一貫性",[2058,17028,17029],{},"中程度のフィルタリング",[2058,17031,17032],{},"アクション、キャラクターアニメーション",[2043,17034,17035,17040,17043,17046],{},[2058,17036,17037],{},[23,17038,17039],{},"Veo 2",[2058,17041,17042],{},"高いビジュアル忠実度、Googleのセーフティインフラ",[2058,17044,17045],{},"厳格なフィルタリング",[2058,17047,17048],{},"プレミアム品質、ブランドセーフなコンテンツ",[2043,17050,17051,17056,17059,17061],{},[2058,17052,17053],{},[23,17054,17055],{},"Sora",[2058,17057,17058],{},"優れたプロンプト遵守、OpenAIのセーフティスタック",[2058,17060,17045],{},[2058,17062,17063],{},"ナラティブコンテンツ、精密な演出",[2043,17065,17066,17070,17073,17075],{},[2058,17067,17068],{},[23,17069,13710],{},[2058,17071,17072],{},"確立されたエコシステム、良好なモーション",[2058,17074,17029],{},[2058,17076,17077],{},"汎用、高速イテレーション",[11,17079,17080,17081,1261],{},"各モデルは異なる強み、コンテンツポリシー、価格、可用性を持っています。EvoLinkのマルチモデルアーキテクチャにより、個別のインテグレーションを構築せずにすべてを評価できます。上記のフェイルオーバーコード例は、可用性に応じてモデルを自動的に切り替える方法を示しています。モデル固有のパラメータと機能比較については、",[37,17082,17083],{"href":14209},"Video Generation API docs",[45,17085],{},[48,17087,17088],{"id":17088},"今後の展望",[11,17090,17091],{},"Seedance 2.0の著作権問題は現在も進行中です。ByteDanceが実装するセーフガードは、APIで生成できるものとできないものを再定義するでしょう。AI動画生成に対する法的な先例は、Seedanceだけでなく、この分野のすべてのプラットフォームに影響を与えます。",[11,17093,17094],{},"開発者にとって、実践的な進むべき道は明確です。",[70,17096,17097,17103,17109,17115,17121],{},[73,17098,17099,17102],{},[23,17100,17101],{},"モデル非依存で構築する。"," プロダクションパイプラインを単一のモデルの可用性や法的状況に賭けないでください。コード変更なしにモデルを切り替えられる統合APIを使用しましょう。",[73,17104,17105,17108],{},[23,17106,17107],{},"安全にプロンプトを設計する。"," オリジナルの説明、オリジナルのキャラクター、自社の参照アセット。法的に最も安全なコンテンツは、商業的にも最も価値がある���ンテンツです。なぜなら、それはあなた自身のものだからです。",[73,17110,17111,17114],{},[23,17112,17113],{},"情報を常に把握する。"," AI生成コンテンツを取り巻く法的環境は月単位で変化しています。MPA対ByteDanceの状況と、裁判所で進行中のより広範なAI著作権訴訟の動向をフォローしてください。",[73,17116,17117,17120],{},[23,17118,17119],{},"すべてを文書化する。"," プロンプト、パラメータ、クリエイティブの意図、レビュープロセスの記録を保持してください。善意のコンプライアンス努力は、疑問が生じた場合に重要です。",[73,17122,17123,17126],{},[23,17124,17125],{},"慌てない。"," 世界が終わるわけではありません。AI動画生成は変革的な技術であり、法的フレームワークはそれに対応するために進化していきます。今、責任を持って開発している開発者は、ルールが確立されたときに有利な立場に立てるでしょう。",[11,17128,17129],{},"状況の進展に応じてこのガイドを更新します。ブックマークして、新しい動きがあった際に再訪してください。",[14194,17131,17132,17137,17140],{"style":14196},[11,17133,17134],{},[23,17135,17136],{},"複数のAI動画モデルを使って自信を持って開発しましょう",[11,17138,17139],{},"EvoLinkは、Seedance 2.0、Kling、Veo、Soraなどに対応する1つのAPIを提供します。無料で始められます。いつでもモデルを切り替え可能、ロックインなし。",[11,17141,17142],{},[37,17143,16296],{"href":16295},[11,17145,17146],{},[2619,17147,17148],{},"最終更新：2026年2月23日。この記事はSeedance 2.0の著作権問題の進展に応じて更新されます。",[11068,17150,17151],{},"html pre.shiki code .snl16, html code.shiki .snl16{--shiki-default:#F97583}html pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}html pre.shiki code .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}html pre.shiki code .s9osk, html code.shiki .s9osk{--shiki-default:#FFAB70}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sns5M, html code.shiki .sns5M{--shiki-default:#DBEDFF}",{"title":141,"searchDepth":166,"depth":166,"links":17153},[17154,17159,17165,17170,17175,17183,17189,17196],{"id":13346,"depth":166,"text":13347,"children":17155},[17156,17157,17158],{"id":13356,"depth":178,"text":13357},{"id":13404,"depth":178,"text":13405},{"id":13513,"depth":178,"text":13514},{"id":13560,"depth":166,"text":13561,"children":17160},[17161,17162,17163,17164],{"id":13567,"depth":178,"text":13567},{"id":13584,"depth":178,"text":13584},{"id":13626,"depth":178,"text":13626},{"id":13761,"depth":178,"text":13762},{"id":13777,"depth":166,"text":13778,"children":17166},[17167,17168,17169],{"id":13784,"depth":178,"text":13785},{"id":13830,"depth":178,"text":13830},{"id":13863,"depth":178,"text":13863},{"id":13930,"depth":166,"text":13930,"children":17171},[17172,17173,17174],{"id":13942,"depth":178,"text":13942},{"id":13990,"depth":178,"text":13990},{"id":14093,"depth":178,"text":14093},{"id":14213,"depth":166,"text":14214,"children":17176},[17177,17178,17179,17180,17181,17182],{"id":14226,"depth":178,"text":14226},{"id":14336,"depth":178,"text":14336},{"id":14412,"depth":178,"text":14412},{"id":14464,"depth":178,"text":14465},{"id":15127,"depth":178,"text":15128},{"id":15272,"depth":178,"text":15272},{"id":15940,"depth":166,"text":15941,"children":17184},[17185,17186,17187,17188],{"id":15964,"depth":178,"text":15965},{"id":16100,"depth":178,"text":16101},{"id":16299,"depth":178,"text":16300},{"id":16509,"depth":178,"text":16510},{"id":8919,"depth":166,"text":8919,"children":17190},[17191,17192,17193,17194,17195],{"id":16949,"depth":178,"text":16950},{"id":16965,"depth":178,"text":16966},{"id":16976,"depth":178,"text":16977},{"id":16983,"depth":178,"text":16984},{"id":16994,"depth":178,"text":16995},{"id":17088,"depth":166,"text":17088},"MPAの差止通知書、APIリリース延期、そしてあなたのプロジェクトへの影響。Seedance 2.0 APIを商用動画生成で安全に使うための完全ガイド。",{"date":17199,"image":17200,"seoTitle":17201,"author":17202},"2026-02-23","/copyright-guide-hero.webp","Seedance 2.0 著作権ガイド：API開発者向け（2026年版）","EvoLink Team","/ja/blog/seedance-2-copyright-api-guide",{"title":13335,"description":17197},"ja/blog/seedance-2-copyright-api-guide","STHCKSlxUumUnC2XORMUvYIPlzFAQjqp9pnG7TtA_E4",{"id":17208,"title":17209,"body":17210,"description":22895,"extension":11130,"meta":22896,"navigation":58,"path":22900,"seo":22901,"stem":22902,"__hash__":22903},"content/ja/blog/seedance-2-ecommerce-product-videos.md","Seedance 2.0 API で EC 向け AI 商品動画を作成する方法",{"type":8,"value":17211,"toc":22844},[17212,17221,17225,17240,17243,17337,17340,17343,17346,17349,17352,17355,17359,17369,17372,17384,17387,17390,17931,17939,17945,17956,17963,17969,17973,17976,17981,17984,18097,18100,18112,18118,18124,18130,18133,18191,18194,18197,18200,18206,18212,18218,18224,18230,18233,18237,18240,18245,18362,18365,18368,18374,18380,18386,18392,18398,18404,18407,18410,18413,18439,18442,18449,18453,18456,18465,18595,18598,18603,18611,18620,18623,18706,18709,18713,18722,18725,18739,18748,18758,18762,18765,18892,18895,18898,18930,18933,18939,18945,18951,18957,18963,18969,18975,18981,18987,18991,18994,19121,19124,19127,19130,19136,19142,19148,19151,19157,19160,19163,19166,19169,19172,19198,19201,19204,19208,19211,19344,19347,19350,19794,19797,19800,19803,19806,19809,19812,19815,19847,19853,19857,19860,19863,19900,19905,21719,21722,21725,21734,21822,21825,21828,21874,21877,21880,21890,21899,21905,21911,21915,21921,22671,22678,22681,22684,22687,22713,22716,22718,22722,22731,22735,22738,22742,22748,22752,22755,22759,22762,22766,22769,22773,22785,22789,22798,22802,22805,22808,22811,22814,22817,22824,22826,22841],[11,17213,17214,17215,17220],{},"カタログの全商品に動画が必要です。1枚の商品写真が、わずか3分以内で洗練された動画広告に変わります。撮影クルーも、スタジオレンタルも、ポストプロダクションの工程も不要です。",[37,17216,17219],{"href":17217,"rel":17218},"https://seed.bytedance.com/en/seedance2_0",[41],"Seedance 2.0"," — ByteDance の最新動画生成モデル — は、シンプルな API コールで静止画の商品画像を放送品質のクリップに変換します。このガイドでは、EC 向けの5種類の動画タイプ、カタログ全体のバッチパイプライン、マルチプラットフォーム書き出し戦略を解説します。すべてのコードサンプルは本番環境対応の Python です。",[48,17222,17224],{"id":17223},"商品動画が重要な理由そしてスタジオが時代遅れになる理由","商品動画が重要な理由（そしてスタジオが時代遅れになる理由）",[11,17226,17227,17228,17233,17234,17239],{},"動画付きの商品ページは、動画なしのページを常に上回ります。",[37,17229,17232],{"href":17230,"rel":17231},"https://www.shopify.com/blog/product-photography-tips",[41],"Shopify の商品メディアベストプラクティス","によると、商品ページに動画を追加したマーチャントは、エンゲージメントとコンバージョン率が明らかに向上しています。Amazon 自身の",[37,17235,17238],{"href":17236,"rel":17237},"https://sellercentral.amazon.com/help/hub/reference/G202124160",[41],"セラーガイドライン","も、すべてのリスティングに動画を積極的に推奨しており、A+ コンテンツプログラムでは動画付きページが検索結果で優先されます。",[11,17241,17242],{},"「動画が効果的であること」と「実際に動画を制作すること」のギャップは、歴史的に非常に大きなものでした。スタジオ時間、照明、機材、撮影者、基本的な編集を含む1本の商品動画撮影は、通常 SKU あたり $500〜$2,000 かかります。200商品のカタログなら、1つのファイルもアップロードする前に6桁の費用が発生します。",[2037,17244,17245,17257],{},[2040,17246,17247],{},[2043,17248,17249,17251,17254],{},[2046,17250],{},[2046,17252,17253],{},"従来のスタジオ",[2046,17255,17256],{},"Seedance 2.0 API",[2053,17258,17259,17272,17285,17298,17311,17324],{},[2043,17260,17261,17266,17269],{},[2058,17262,17263],{},[23,17264,17265],{},"動画1本あたりのコスト",[2058,17267,17268],{},"$500〜$2,000",[2058,17270,17271],{},"$0.02〜$0.15",[2043,17273,17274,17279,17282],{},[2058,17275,17276],{},[23,17277,17278],{},"納期",[2058,17280,17281],{},"3〜10営業日",[2058,17283,17284],{},"60〜180秒",[2043,17286,17287,17292,17295],{},[2058,17288,17289],{},[23,17290,17291],{},"必要な準備",[2058,17293,17294],{},"スタジオ、クルー、機材",[2058,17296,17297],{},"商品写真1枚",[2043,17299,17300,17305,17308],{},[2058,17301,17302],{},[23,17303,17304],{},"500 SKU への拡張",[2058,17306,17307],{},"$250K〜$1M以上",[2058,17309,17310],{},"$75未満",[2043,17312,17313,17318,17321],{},[2058,17314,17315],{},[23,17316,17317],{},"反復速度",[2058,17319,17320],{},"再撮影が必要",[2058,17322,17323],{},"プロンプトを変更して再生成",[2043,17325,17326,17331,17334],{},[2058,17327,17328],{},[23,17329,17330],{},"アスペクト比バリエーション",[2058,17332,17333],{},"フォーマットごとに個別編集",[2058,17335,17336],{},"パラメータ1つの変更",[11,17338,17339],{},"経済性は比較になりません。AI 商品動画生成は $50,000 のブランドフィルムを置き換えるものではありません。ほとんどの EC チームが完全にスキップするか、厳しいマージンで外注している、SKU ごとの繰り返し動画作業を置き換えるものです。",[11,17341,17342],{},"300 SKU を持つ中規模 Shopify ストアの計算を考えてみましょう。カタログ全体の従来のスタジオ動画：$150K〜$600K、さらに数か月のスケジュール調整と制作期間。同じカタログに対する Seedance 2.0 API：合計 $50 未満、午後の数時間で完了。パイプライン構築の開発者工数を加味しても、投資収益率は桁違いに高くなります。",[11,17344,17345],{},"この変化は、10年前に商品写真で起きたことと同じパターンです。スタジオは消えませんでしたが、定型作業は自動化ソリューションに移行しました。動画も同じ軌道をたどっていますが、より速いペースで進んでいます。",[92,17347,17348],{"id":17348},"動画によるコンバージョンの根拠",[11,17350,17351],{},"業界レポートは一貫して、動画付きの商品ページが動画なしのページを上回ることを示しています。Shopify 自身の調査では、動画がページ滞在時間を増加させ、顧客が購入する商品をよりよく理解できるようにすることで返品率を低下させることが強調されています。Amazon は、動画付きリスティングが検索結果でより高いクリックスルー率を達成していると報告しています。",[11,17353,17354],{},"具体的な数値はカテゴリーや市場によって異なりますが、方向性は明確です：動画はより多くの商品を販売します。問題は動画が効果的かどうかではありませんでした。問題は ROI が制作コストを正当化するかどうかでした。API 価格では、その計算は決着がついています。",[48,17356,17358],{"id":17357},"セットアップapi-キーとベースコード","セットアップ：API キーとベースコード",[11,17360,17361,17364,17365,17368],{},[37,17362,213],{"href":211,"rel":17363},[41]," アカウントと API キーが必要です。EvoLink は、わかりやすい REST API で Seedance 2.0 へのアクセスを提供します。まだアカウントを設定していない場合は、",[37,17366,296],{"href":17367},"/docs/getting-started","で手順を確認してください。",[11,17370,17371],{},"唯一の依存パッケージをインストールします：",[136,17373,17374],{"className":138,"code":317,"language":140,"meta":141,"style":141},[28,17375,17376],{"__ignoreMap":141},[145,17377,17378,17380,17382],{"class":147,"line":148},[145,17379,190],{"class":151},[145,17381,193],{"class":159},[145,17383,328],{"class":159},[11,17385,17386],{},"GPU 不要。モデルのダウンロード不要。管理するインフラ不要。API がすべての計算をサーバーサイドで処理します。ローカルマシンは HTTP リクエストを送信し、動画 URL を受信するだけです。",[11,17388,17389],{},"以下が完全なベースコードです。このガイドのすべてのサンプルは、この基盤の上に構築されています：",[136,17391,17393],{"className":337,"code":17392,"language":339,"meta":141,"style":141},"import requests\nimport time\n\nAPI_KEY = \"YOUR_API_KEY\"\nBASE_URL = \"https://api.evolink.ai/v1\"\n\nheaders = {\n    \"Authorization\": f\"Bearer {API_KEY}\",\n    \"Content-Type\": \"application/json\"\n}\n\n\ndef generate_video(payload: dict) -> dict:\n    \"\"\"Submit a video generation request and return the task response.\"\"\"\n    response = requests.post(\n        f\"{BASE_URL}/videos/generations\",\n        headers=headers,\n        json=payload\n    )\n    response.raise_for_status()\n    return response.json()\n\n\ndef wait_for_video(task_id: str, poll_interval: int = 5, timeout: int = 300) -> dict:\n    \"\"\"Poll a task until it completes or fails. Returns the final task object.\"\"\"\n    elapsed = 0\n    while elapsed \u003C timeout:\n        resp = requests.get(f\"{BASE_URL}/tasks/{task_id}\", headers=headers)\n        resp.raise_for_status()\n        task = resp.json()\n        status = task.get(\"status\")\n\n        if status == \"completed\":\n            print(f\"✅ Video ready: {task['output']['video_url']}\")\n            return task\n        elif status == \"failed\":\n            raise RuntimeError(f\"Task failed: {task.get('error', 'Unknown error')}\")\n\n        print(f\"⏳ Status: {status} ({elapsed}s elapsed)\")\n        time.sleep(poll_interval)\n        elapsed += poll_interval\n\n    raise TimeoutError(f\"Task {task_id} did not complete within {timeout}s\")\n\n\ndef create_and_wait(payload: dict) -> dict:\n    \"\"\"Generate a video and wait for the result. Returns the completed task.\"\"\"\n    task = generate_video(payload)\n    task_id = task[\"task_id\"]\n    print(f\"🎬 Task created: {task_id}\")\n    return wait_for_video(task_id)\n",[28,17394,17395,17401,17407,17411,17420,17428,17432,17441,17457,17465,17469,17473,17477,17494,17499,17507,17519,17528,17536,17540,17544,17550,17554,17558,17596,17601,17609,17619,17654,17658,17666,17678,17682,17694,17724,17730,17742,17773,17777,17806,17810,17818,17822,17853,17857,17861,17878,17883,17891,17903,17924],{"__ignoreMap":141},[145,17396,17397,17399],{"class":147,"line":148},[145,17398,346],{"class":258},[145,17400,328],{"class":262},[145,17402,17403,17405],{"class":147,"line":166},[145,17404,346],{"class":258},[145,17406,355],{"class":262},[145,17408,17409],{"class":147,"line":178},[145,17410,375],{"emptyLinePlaceholder":58},[145,17412,17413,17415,17417],{"class":147,"line":187},[145,17414,387],{"class":155},[145,17416,390],{"class":258},[145,17418,17419],{"class":159}," \"YOUR_API_KEY\"\n",[145,17421,17422,17424,17426],{"class":147,"line":372},[145,17423,411],{"class":155},[145,17425,390],{"class":258},[145,17427,416],{"class":159},[145,17429,17430],{"class":147,"line":378},[145,17431,375],{"emptyLinePlaceholder":58},[145,17433,17434,17437,17439],{"class":147,"line":384},[145,17435,17436],{"class":262},"headers ",[145,17438,266],{"class":258},[145,17440,427],{"class":262},[145,17442,17443,17445,17447,17449,17451,17453,17455],{"class":147,"line":408},[145,17444,433],{"class":159},[145,17446,436],{"class":262},[145,17448,439],{"class":258},[145,17450,442],{"class":159},[145,17452,445],{"class":155},[145,17454,448],{"class":159},[145,17456,451],{"class":262},[145,17458,17459,17461,17463],{"class":147,"line":419},[145,17460,457],{"class":159},[145,17462,436],{"class":262},[145,17464,462],{"class":159},[145,17466,17467],{"class":147,"line":430},[145,17468,468],{"class":262},[145,17470,17471],{"class":147,"line":454},[145,17472,375],{"emptyLinePlaceholder":58},[145,17474,17475],{"class":147,"line":465},[145,17476,375],{"emptyLinePlaceholder":58},[145,17478,17479,17481,17483,17486,17488,17490,17492],{"class":147,"line":599},[145,17480,525],{"class":258},[145,17482,14556],{"class":151},[145,17484,17485],{"class":262},"(payload: ",[145,17487,8656],{"class":155},[145,17489,15662],{"class":262},[145,17491,8656],{"class":155},[145,17493,859],{"class":262},[145,17495,17496],{"class":147,"line":604},[145,17497,17498],{"class":159},"    \"\"\"Submit a video generation request and return the task response.\"\"\"\n",[145,17500,17501,17503,17505],{"class":147,"line":610},[145,17502,1428],{"class":262},[145,17504,266],{"class":258},[145,17506,1433],{"class":262},[145,17508,17509,17511,17513,17515,17517],{"class":147,"line":616},[145,17510,1438],{"class":258},[145,17512,448],{"class":159},[145,17514,678],{"class":155},[145,17516,1445],{"class":159},[145,17518,451],{"class":262},[145,17520,17521,17523,17525],{"class":147,"line":622},[145,17522,1456],{"class":700},[145,17524,266],{"class":258},[145,17526,17527],{"class":262},"headers,\n",[145,17529,17530,17532,17534],{"class":147,"line":627},[145,17531,1471],{"class":700},[145,17533,266],{"class":258},[145,17535,2788],{"class":262},[145,17537,17538],{"class":147,"line":638},[145,17539,1484],{"class":262},[145,17541,17542],{"class":147,"line":653},[145,17543,2797],{"class":262},[145,17545,17546,17548],{"class":147,"line":659},[145,17547,1704],{"class":258},[145,17549,735],{"class":262},[145,17551,17552],{"class":147,"line":670},[145,17553,375],{"emptyLinePlaceholder":58},[145,17555,17556],{"class":147,"line":697},[145,17557,375],{"emptyLinePlaceholder":58},[145,17559,17560,17562,17564,17567,17569,17572,17575,17577,17580,17583,17585,17587,17590,17592,17594],{"class":147,"line":709},[145,17561,525],{"class":258},[145,17563,528],{"class":151},[145,17565,17566],{"class":262},"(task_id: ",[145,17568,8531],{"class":155},[145,17570,17571],{"class":262},", poll_interval: ",[145,17573,17574],{"class":155},"int",[145,17576,390],{"class":258},[145,17578,17579],{"class":155}," 5",[145,17581,17582],{"class":262},", timeout: ",[145,17584,17574],{"class":155},[145,17586,390],{"class":258},[145,17588,17589],{"class":155}," 300",[145,17591,15662],{"class":262},[145,17593,8656],{"class":155},[145,17595,859],{"class":262},[145,17597,17598],{"class":147,"line":715},[145,17599,17600],{"class":159},"    \"\"\"Poll a task until it completes or fails. Returns the final task object.\"\"\"\n",[145,17602,17603,17605,17607],{"class":147,"line":721},[145,17604,630],{"class":262},[145,17606,266],{"class":258},[145,17608,635],{"class":155},[145,17610,17611,17613,17615,17617],{"class":147,"line":727},[145,17612,641],{"class":258},[145,17614,644],{"class":262},[145,17616,647],{"class":258},[145,17618,650],{"class":262},[145,17620,17621,17623,17625,17628,17630,17632,17634,17636,17638,17640,17642,17644,17646,17649,17651],{"class":147,"line":738},[145,17622,6787],{"class":262},[145,17624,266],{"class":258},[145,17626,17627],{"class":262}," requests.get(",[145,17629,439],{"class":258},[145,17631,448],{"class":159},[145,17633,678],{"class":155},[145,17635,681],{"class":159},[145,17637,684],{"class":155},[145,17639,687],{"class":262},[145,17641,690],{"class":155},[145,17643,448],{"class":159},[145,17645,399],{"class":262},[145,17647,17648],{"class":700},"headers",[145,17650,266],{"class":258},[145,17652,17653],{"class":262},"headers)\n",[145,17655,17656],{"class":147,"line":743},[145,17657,6814],{"class":262},[145,17659,17660,17662,17664],{"class":147,"line":749},[145,17661,730],{"class":262},[145,17663,266],{"class":258},[145,17665,11615],{"class":262},[145,17667,17668,17670,17672,17674,17676],{"class":147,"line":766},[145,17669,752],{"class":262},[145,17671,266],{"class":258},[145,17673,774],{"class":262},[145,17675,760],{"class":159},[145,17677,405],{"class":262},[145,17679,17680],{"class":147,"line":787},[145,17681,375],{"emptyLinePlaceholder":58},[145,17683,17684,17686,17688,17690,17692],{"class":147,"line":833},[145,17685,847],{"class":258},[145,17687,850],{"class":262},[145,17689,853],{"class":258},[145,17691,856],{"class":159},[145,17693,859],{"class":262},[145,17695,17696,17698,17700,17702,17704,17706,17708,17711,17713,17716,17718,17720,17722],{"class":147,"line":838},[145,17697,5442],{"class":155},[145,17699,793],{"class":262},[145,17701,439],{"class":258},[145,17703,14786],{"class":159},[145,17705,684],{"class":155},[145,17707,1530],{"class":262},[145,17709,17710],{"class":159},"'output'",[145,17712,1563],{"class":262},[145,17714,17715],{"class":159},"'video_url'",[145,17717,1536],{"class":262},[145,17719,690],{"class":155},[145,17721,448],{"class":159},[145,17723,405],{"class":262},[145,17725,17726,17728],{"class":147,"line":844},[145,17727,865],{"class":258},[145,17729,868],{"class":262},[145,17731,17732,17734,17736,17738,17740],{"class":147,"line":862},[145,17733,874],{"class":258},[145,17735,850],{"class":262},[145,17737,853],{"class":258},[145,17739,881],{"class":159},[145,17741,859],{"class":262},[145,17743,17744,17746,17748,17750,17752,17754,17756,17759,17761,17763,17765,17767,17769,17771],{"class":147,"line":871},[145,17745,905],{"class":258},[145,17747,908],{"class":155},[145,17749,793],{"class":262},[145,17751,439],{"class":258},[145,17753,14831],{"class":159},[145,17755,684],{"class":155},[145,17757,17758],{"class":262},"task.get(",[145,17760,11712],{"class":159},[145,17762,399],{"class":262},[145,17764,942],{"class":159},[145,17766,945],{"class":262},[145,17768,690],{"class":155},[145,17770,448],{"class":159},[145,17772,405],{"class":262},[145,17774,17775],{"class":147,"line":886},[145,17776,375],{"emptyLinePlaceholder":58},[145,17778,17779,17781,17783,17785,17788,17790,17792,17794,17796,17798,17800,17802,17804],{"class":147,"line":902},[145,17780,790],{"class":155},[145,17782,793],{"class":262},[145,17784,439],{"class":258},[145,17786,17787],{"class":159},"\"⏳ Status: ",[145,17789,684],{"class":155},[145,17791,813],{"class":262},[145,17793,690],{"class":155},[145,17795,1218],{"class":159},[145,17797,684],{"class":155},[145,17799,803],{"class":262},[145,17801,690],{"class":155},[145,17803,11758],{"class":159},[145,17805,405],{"class":262},[145,17807,17808],{"class":147,"line":914},[145,17809,973],{"class":262},[145,17811,17812,17814,17816],{"class":147,"line":953},[145,17813,979],{"class":262},[145,17815,982],{"class":258},[145,17817,985],{"class":262},[145,17819,17820],{"class":147,"line":959},[145,17821,375],{"emptyLinePlaceholder":58},[145,17823,17824,17826,17828,17830,17832,17834,17836,17838,17840,17843,17845,17847,17849,17851],{"class":147,"line":964},[145,17825,996],{"class":258},[145,17827,999],{"class":155},[145,17829,793],{"class":262},[145,17831,439],{"class":258},[145,17833,920],{"class":159},[145,17835,684],{"class":155},[145,17837,687],{"class":262},[145,17839,690],{"class":155},[145,17841,17842],{"class":159}," did not complete within ",[145,17844,684],{"class":155},[145,17846,1019],{"class":262},[145,17848,690],{"class":155},[145,17850,1024],{"class":159},[145,17852,405],{"class":262},[145,17854,17855],{"class":147,"line":970},[145,17856,375],{"emptyLinePlaceholder":58},[145,17858,17859],{"class":147,"line":976},[145,17860,375],{"emptyLinePlaceholder":58},[145,17862,17863,17865,17868,17870,17872,17874,17876],{"class":147,"line":988},[145,17864,525],{"class":258},[145,17866,17867],{"class":151}," create_and_wait",[145,17869,17485],{"class":262},[145,17871,8656],{"class":155},[145,17873,15662],{"class":262},[145,17875,8656],{"class":155},[145,17877,859],{"class":262},[145,17879,17880],{"class":147,"line":993},[145,17881,17882],{"class":159},"    \"\"\"Generate a video and wait for the result. Returns the completed task.\"\"\"\n",[145,17884,17885,17887,17889],{"class":147,"line":5402},[145,17886,1497],{"class":262},[145,17888,266],{"class":258},[145,17890,16725],{"class":262},[145,17892,17893,17895,17897,17899,17901],{"class":147,"line":5411},[145,17894,7076],{"class":262},[145,17896,266],{"class":258},[145,17898,757],{"class":262},[145,17900,7553],{"class":159},[145,17902,763],{"class":262},[145,17904,17905,17907,17909,17911,17914,17916,17918,17920,17922],{"class":147,"line":5439},[145,17906,1102],{"class":155},[145,17908,793],{"class":262},[145,17910,439],{"class":258},[145,17912,17913],{"class":159},"\"🎬 Task created: ",[145,17915,684],{"class":155},[145,17917,687],{"class":262},[145,17919,690],{"class":155},[145,17921,448],{"class":159},[145,17923,405],{"class":262},[145,17925,17926,17928],{"class":147,"line":5470},[145,17927,1704],{"class":258},[145,17929,17930],{"class":262}," wait_for_video(task_id)\n",[18,17932,17933],{},[11,17934,17935,17938],{},[23,17936,17937],{},"以下のすべてのコード例はこの共通セットアップを使用します。"," 各動画タイプ固有のペイロードのみを示します。",[11,17940,17941,17944],{},[28,17942,17943],{},"create_and_wait"," 関数はフルライフサイクルを処理します：ジョブを送信し、完了するまでポーリングし、動画 URL を返します。動画 URL は24時間で期限切れになるため、速やかにダウンロードするか、アセット管理システムに直接パイプしてください。",[11,17946,17947,17948,17950,17951,17955],{},"ポーリングアプローチは、インタラクティブなスクリプトや小規模バッチに適しています。数百の商品を処理する本番パイプラインでは、",[28,17949,3599],{}," パラメータ（",[37,17952,17954],{"href":17953},"#%E3%83%90%E3%83%83%E3%83%81%E3%83%91%E3%82%A4%E3%83%97%E3%83%A9%E3%82%A4%E3%83%B3csv-%E3%82%AB%E3%82%BF%E3%83%AD%E3%82%B0%E3%81%8B%E3%82%89%E5%8B%95%E7%94%BB%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%81%B8","バッチパイプラインセクション","で解説）がポーリングのオーバーヘッドを完全に排除します。",[11,17957,17958,17959,17962],{},"以下のすべてのコード例は、異なるペイロード辞書で ",[28,17960,17961],{},"create_and_wait(payload)"," を呼び出します。上記のセットアップコードが唯一のボイラープレートです。",[11,17964,17965],{},[37,17966,17968],{"href":211,"rel":17967},[41],"無料の EvoLink API キーを取得 →",[48,17970,17972],{"id":17971},"動画タイプ-1360-商品回転","動画タイプ 1：360° 商品回転",[11,17974,17975],{},"ターンテーブル回転は EC 動画の主力です。白背景の商品写真1枚が、なめらかに回転するショーケースに変わります。かつてはモーター付きターンテーブルと入念なライティングが必要だった種類のクリップです。このフォーマットはどこでも機能します：Amazon リスティング、Shopify 商品ページ、ソーシャル広告。",[56,17977,60,17978],{"controls":58,"playsInline":58,"style":59},[62,17979],{"src":17980,"type":65},"https://cdn.evolink.ai/seedance2api/%E6%89%8B%E8%A1%A8%E5%B9%BF%E5%91%8A.mp4",[11,17982,17983],{},"高級腕時計の回転用ペイロードは以下の通りです：",[136,17985,17987],{"className":337,"code":17986,"language":339,"meta":141,"style":141},"payload = {\n    \"model\": \"seedance-2.0\",\n    \"image_urls\": [\n        \"https://your-cdn.com/products/watch-front.jpg\"\n    ],\n    \"prompt\": (\n        \"@Image1 is a luxury wristwatch. The watch rotates slowly under \"\n        \"dramatic studio lighting on a dark reflective surface. Light catches \"\n        \"the polished metal case and sapphire crystal. Slow cinematic rotation. \"\n        \"Premium advertisement quality.\"\n    ),\n    \"duration\": 8,\n    \"quality\": \"1080p\",\n    \"aspect_ratio\": \"16:9\"\n}\n\nresult = create_and_wait(payload)\n",[28,17988,17989,17997,18007,18013,18018,18022,18028,18033,18038,18043,18048,18052,18062,18072,18080,18084,18088],{"__ignoreMap":141},[145,17990,17991,17993,17995],{"class":147,"line":148},[145,17992,3660],{"class":262},[145,17994,266],{"class":258},[145,17996,427],{"class":262},[145,17998,17999,18001,18003,18005],{"class":147,"line":166},[145,18000,3669],{"class":159},[145,18002,436],{"class":262},[145,18004,1309],{"class":159},[145,18006,451],{"class":262},[145,18008,18009,18011],{"class":147,"line":178},[145,18010,15206],{"class":159},[145,18012,2691],{"class":262},[145,18014,18015],{"class":147,"line":187},[145,18016,18017],{"class":159},"        \"https://your-cdn.com/products/watch-front.jpg\"\n",[145,18019,18020],{"class":147,"line":372},[145,18021,16188],{"class":262},[145,18023,18024,18026],{"class":147,"line":378},[145,18025,3680],{"class":159},[145,18027,1323],{"class":262},[145,18029,18030],{"class":147,"line":384},[145,18031,18032],{"class":159},"        \"@Image1 is a luxury wristwatch. The watch rotates slowly under \"\n",[145,18034,18035],{"class":147,"line":408},[145,18036,18037],{"class":159},"        \"dramatic studio lighting on a dark reflective surface. Light catches \"\n",[145,18039,18040],{"class":147,"line":419},[145,18041,18042],{"class":159},"        \"the polished metal case and sapphire crystal. Slow cinematic rotation. \"\n",[145,18044,18045],{"class":147,"line":430},[145,18046,18047],{"class":159},"        \"Premium advertisement quality.\"\n",[145,18049,18050],{"class":147,"line":454},[145,18051,3803],{"class":262},[145,18053,18054,18056,18058,18060],{"class":147,"line":465},[145,18055,3692],{"class":159},[145,18057,436],{"class":262},[145,18059,3697],{"class":155},[145,18061,451],{"class":262},[145,18063,18064,18066,18068,18070],{"class":147,"line":599},[145,18065,3704],{"class":159},[145,18067,436],{"class":262},[145,18069,3709],{"class":159},[145,18071,451],{"class":262},[145,18073,18074,18076,18078],{"class":147,"line":604},[145,18075,3716],{"class":159},[145,18077,436],{"class":262},[145,18079,2730],{"class":159},[145,18081,18082],{"class":147,"line":610},[145,18083,468],{"class":262},[145,18085,18086],{"class":147,"line":616},[145,18087,375],{"emptyLinePlaceholder":58},[145,18089,18090,18092,18094],{"class":147,"line":622},[145,18091,12078],{"class":262},[145,18093,266],{"class":258},[145,18095,18096],{"class":262}," create_and_wait(payload)\n",[11,18098,18099],{},"プロンプトの構造は重要です。どの商品でも一貫した結果を得るために、レイヤーに分解します：",[11,18101,18102,2427,18105,18108,18109,1769],{},[23,18103,18104],{},"レイヤー 1 — 被写体の特定。",[28,18106,18107],{},"@Image1 is a [product]."," で始めます。これによりモデルがソース画像に固定されます。Seedance 2.0 が画像参照をどのように解釈するかの詳細は、",[37,18110,18111],{"href":2967},"@tags ガイド",[11,18113,18114,18117],{},[23,18115,18116],{},"レイヤー 2 — モーションの記述。"," \"Rotates slowly\" は \"spins\" よりも効果的です。一定速度を暗示するためです。\"smooth turntable rotation\" や \"360-degree rotation\" を追加して動きのパターンを強化します。",[11,18119,18120,18123],{},[23,18121,18122],{},"レイヤー 3 — ライティングと環境。"," モデルがよく反応するスタジオライティング用語：\"dramatic studio lighting\"、\"soft diffused light\"、\"rim lighting\"、\"three-point lighting setup\"。背景の選択 — ダークな反射面、白いサイクロラマ、グラデーション背景 — がトーン全体を決定します。",[11,18125,18126,18129],{},[23,18127,18128],{},"レイヤー 4 — 品質修飾子。"," 品質のキューで締めくくります：\"premium advertisement quality\"、\"commercial-grade\"、\"4K product showcase\"。これらの用語により、モデルはよりクリーンで洗練された出力を生成します。",[92,18131,18132],{"id":18132},"回転動画のヒント",[2037,18134,18135,18146],{},[2040,18136,18137],{},[2043,18138,18139,18141,18144],{},[2046,18140,3399],{},[2046,18142,18143],{},"推奨値",[2046,18145,8131],{},[2053,18147,18148,18159,18170,18180],{},[2043,18149,18150,18153,18156],{},[2058,18151,18152],{},"Duration",[2058,18154,18155],{},"6〜10秒",[2058,18157,18158],{},"完全な回転には、急いで見えないよう最低6秒が必要",[2043,18160,18161,18164,18167],{},[2058,18162,18163],{},"Aspect ratio",[2058,18165,18166],{},"16:9 または 1:1",[2058,18168,18169],{},"Web/Amazon には 16:9、ソーシャルフィードには 1:1",[2043,18171,18172,18175,18177],{},[2058,18173,18174],{},"Quality",[2058,18176,1796],{},[2058,18178,18179],{},"商品コンテンツには常に 1080p",[2043,18181,18182,18185,18188],{},[2058,18183,18184],{},"プロンプト内の背景",[2058,18186,18187],{},"ダーク反射面または白",[2058,18189,18190],{},"ブランドの商品ページの美観に合わせる",[11,18192,18193],{},"細かいディテールのある商品 — ジュエリー、腕時計、電子機器 — の場合は、duration を10秒に延長します。追加のフレームにより、モーションブラーのアーティファクトなく回転中の表面ディテールをモデルがレンダリングできます。",[92,18195,18196],{"id":18196},"回転動画の背景戦略",[11,18198,18199],{},"ソース画像の背景は出力に大きく影響します。一般的なシナリオの対処法は以下の通りです：",[11,18201,18202,18205],{},[23,18203,18204],{},"白背景（理想的）。"," 白背景の標準的な EC 商品写真は完璧に機能します。モデルは商品を保持し、クリーンな回転モーションを生成します。白背景をそのまま維持するか、プロンプトで別の背景を記述できます。",[11,18207,18208,18211],{},[23,18209,18210],{},"透明背景（PNG）。"," これも優れています。モデルはプロンプトの記述に基づいて背景を埋めるため、最終的な見た目を完全にコントロールできます。",[11,18213,18214,18217],{},[23,18215,18216],{},"雑多な背景やライフスタイル背景。"," 使用可能ですが予測性は低くなります。モデルが不要な背景要素を回転に取り込む場合があります。最良の結果を得るには、希望する背景を明示的に記述します：\"on a clean white surface\" または \"on a dark gradient background\"。",[11,18219,18220,18223],{},[23,18221,18222],{},"制御された背景のスタジオショット。"," 優れた出発点です。既存の写真にプロフェッショナルなライティングがある場合、モデルはそのライティング品質を動画に拡張します。",[11,18225,18226,18227,1769],{},"ソース写真の背景が雑多な場合は、プロンプトで希望する背景を明示的に記述してください。Seedance 2.0 は商品をクリーンな面に再配置できます。最良の結果を得るには、白背景または透明背景の商品写真から始めてください。ソース画像のベストプラクティスについては、",[37,18228,18229],{"href":3381},"画像から動画の基礎",[11,18231,18232],{},"ご自身の商品写真で試してみてください — 3分以内で結果が得られます。",[48,18234,18236],{"id":18235},"動画タイプ-2ヒーローショット商品ローンチトレーラー","動画タイプ 2：ヒーローショット（商品ローンチトレーラー）",[11,18238,18239],{},"ローンチトレーラーは期待感を生み出します。スモーク、光線、ドラマチックなアングル — 数秒に凝縮されたシネマティックなお披露目の瞬間です。このフォーマットは、第一印象がクリックスルー率を左右するソーシャル広告やランディングページのヒーローセクションで主流です。",[56,18241,60,18242],{"controls":58,"playsInline":58,"style":59},[62,18243],{"src":18244,"type":65},"https://cdn.evolink.ai/seedance2api/%E8%80%B3%E6%9C%BA%E5%B9%BF%E5%91%8A%E5%9B%9B%E4%B8%AA%E9%A2%9C%E8%89%B2.mp4",[136,18246,18248],{"className":337,"code":18247,"language":339,"meta":141,"style":141},"payload = {\n    \"model\": \"seedance-2.0\",\n    \"image_urls\": [\n        \"https://your-cdn.com/products/headphones-lineup.jpg\"\n    ],\n    \"prompt\": (\n        \"@Image1 shows premium over-ear headphones in four colors. \"\n        \"Rapid four-frame flash cuts, each color freeze-framed. \"\n        \"Extreme close-up of hinge mechanism unfolding in slow motion. \"\n        \"Quick-cut lifestyle montage. Final lineup on white pedestal. \"\n        \"Brand text fades in. Commercial-grade lighting.\"\n    ),\n    \"duration\": 10,\n    \"quality\": \"1080p\",\n    \"aspect_ratio\": \"16:9\"\n}\n\nresult = create_and_wait(payload)\n",[28,18249,18250,18258,18268,18274,18279,18283,18289,18294,18299,18304,18309,18314,18318,18328,18338,18346,18350,18354],{"__ignoreMap":141},[145,18251,18252,18254,18256],{"class":147,"line":148},[145,18253,3660],{"class":262},[145,18255,266],{"class":258},[145,18257,427],{"class":262},[145,18259,18260,18262,18264,18266],{"class":147,"line":166},[145,18261,3669],{"class":159},[145,18263,436],{"class":262},[145,18265,1309],{"class":159},[145,18267,451],{"class":262},[145,18269,18270,18272],{"class":147,"line":178},[145,18271,15206],{"class":159},[145,18273,2691],{"class":262},[145,18275,18276],{"class":147,"line":187},[145,18277,18278],{"class":159},"        \"https://your-cdn.com/products/headphones-lineup.jpg\"\n",[145,18280,18281],{"class":147,"line":372},[145,18282,16188],{"class":262},[145,18284,18285,18287],{"class":147,"line":378},[145,18286,3680],{"class":159},[145,18288,1323],{"class":262},[145,18290,18291],{"class":147,"line":384},[145,18292,18293],{"class":159},"        \"@Image1 shows premium over-ear headphones in four colors. \"\n",[145,18295,18296],{"class":147,"line":408},[145,18297,18298],{"class":159},"        \"Rapid four-frame flash cuts, each color freeze-framed. \"\n",[145,18300,18301],{"class":147,"line":419},[145,18302,18303],{"class":159},"        \"Extreme close-up of hinge mechanism unfolding in slow motion. \"\n",[145,18305,18306],{"class":147,"line":430},[145,18307,18308],{"class":159},"        \"Quick-cut lifestyle montage. Final lineup on white pedestal. \"\n",[145,18310,18311],{"class":147,"line":454},[145,18312,18313],{"class":159},"        \"Brand text fades in. Commercial-grade lighting.\"\n",[145,18315,18316],{"class":147,"line":465},[145,18317,3803],{"class":262},[145,18319,18320,18322,18324,18326],{"class":147,"line":599},[145,18321,3692],{"class":159},[145,18323,436],{"class":262},[145,18325,536],{"class":155},[145,18327,451],{"class":262},[145,18329,18330,18332,18334,18336],{"class":147,"line":604},[145,18331,3704],{"class":159},[145,18333,436],{"class":262},[145,18335,3709],{"class":159},[145,18337,451],{"class":262},[145,18339,18340,18342,18344],{"class":147,"line":610},[145,18341,3716],{"class":159},[145,18343,436],{"class":262},[145,18345,2730],{"class":159},[145,18347,18348],{"class":147,"line":616},[145,18349,468],{"class":262},[145,18351,18352],{"class":147,"line":622},[145,18353,375],{"emptyLinePlaceholder":58},[145,18355,18356,18358,18360],{"class":147,"line":627},[145,18357,12078],{"class":262},[145,18359,266],{"class":258},[145,18361,18096],{"class":262},[11,18363,18364],{},"ヒーローショットのプロンプトは、回転とは異なるボキャブラリーを使用します。ここでは単一の連続動作ではなく、シーケンスを演出しています。各文をストーリーボードの1シーンとして考えてください。",[92,18366,18367],{"id":18367},"ヒーローショットのプロンプトパターン",[11,18369,18370,18373],{},[23,18371,18372],{},"エマージェンス（出現）："," 商品がスモーク、フォグ、パーティクルから浮かび上がります。テック製品、フレグランス、プレミアム商品に効果的です。",[136,18375,18378],{"className":18376,"code":18377,"language":2186},[2184],"@Image1 is [product]. It emerges from dense volumetric fog,\nbacklit by a single golden spotlight. Particles drift upward.\nSlow reveal. Cinematic depth of field. Premium commercial aesthetic.\n",[28,18379,18377],{"__ignoreMap":141},[11,18381,18382,18385],{},[23,18383,18384],{},"インパクトランディング（衝撃着地）："," 商品がエネルギーとともにフレームに落下します — スプラッシュ、シャッター、バースト。",[136,18387,18390],{"className":18388,"code":18389,"language":2186},[2184],"@Image1 is [product]. It lands on a glossy black surface with a\nsubtle shockwave ripple. Dust particles scatter on impact.\nCamera pushes in slowly. Dramatic rim lighting. High-end advertisement.\n",[28,18391,18389],{"__ignoreMap":141},[11,18393,18394,18397],{},[23,18395,18396],{},"アセンブリ（組み立て）："," パーツが飛び集まって完成品を形成します。テック製品やモジュラー商品に最適です。",[136,18399,18402],{"className":18400,"code":18401,"language":2186},[2184],"@Image1 is [product]. Individual components float in space, then\nsmoothly assemble into the final product. Each piece locks into\nplace with a satisfying precision. Clean white environment.\nStudio lighting. Commercial quality.\n",[28,18403,18401],{"__ignoreMap":141},[11,18405,18406],{},"ヒーローショットフォーマットは、より長い duration が効果的です。8〜12秒あれば、モデルがテンションを構築しリビールを完結させる余裕が生まれます。短いクリップは唐突に感じられ、長すぎるクリップは視聴者の注意を失うリスクがあります。",[92,18408,18409],{"id":18409},"ヒーローショットの適切な使用場面",[11,18411,18412],{},"ヒーローショットが最適なのは以下のケースです：",[96,18414,18415,18421,18427,18433],{},[73,18416,18417,18420],{},[23,18418,18419],{},"商品ローンチ。"," ソーシャルメディアやランディングページでの新商品発表。ドラマチックなリビールが期待感を醸成し、プレミアムなポジショニングを示します。",[73,18422,18423,18426],{},[23,18424,18425],{},"季節キャンペーン。"," ホリデーセール、ブラックフライデー、新コレクションのドロップ。シネマティックな品質が、キャンペーンを標準的なプロモーションコンテンツの上に引き上げます。",[73,18428,18429,18432],{},[23,18430,18431],{},"広告クリエイティブ。"," Facebook、Instagram、TikTok の広告は、ドラマチックな商品リビールの訴求力から恩恵を受けます。これらのクリップは、スクロール中心のフィードで注目を集めます。",[73,18434,18435,18438],{},[23,18436,18437],{},"Web サイトヒーローセクション。"," ファーストビューでの自動再生ヒーローショットは、ブランド品質を即座に伝えます。パフォーマンス上の問題を避けるため、ヒーローバナーの duration は6秒以内に抑えてください。",[11,18440,18441],{},"ヒーローショットは、顧客が情報的なコンテンツを求める商品詳細ページにはあまり適していません。ドラマはトップオブファネルのマーケティングに取っておき、商品ページ自体には回転動画やマクロ動画を使用してください。",[11,18443,18444,18445,18448],{},"EC 以外も含む",[37,18446,18447],{"href":1767},"プロンプトエンジニアリングのヒント","や、Seedance 2.0 がシネマティックな用語をどのように解釈するかについては、専用のプロンプトガイドをご確認ください。",[48,18450,18452],{"id":18451},"動画タイプ-3ライフスタイルコンテキスト","動画タイプ 3：ライフスタイルコンテキスト",[11,18454,18455],{},"白背景の静止商品写真はコンバージョンを生みます。しかしライフスタイル画像 — 文脈の中で、使用されている、実際の環境にある商品 — は感情的なつながりを構築します。ライフスタイル動画は、顧客に「あの商品が欲しい」ではなく「あの生活が欲しい」と思わせるフォーマットです。",[11,18457,18458,18459,18461,18462,18464],{},"Seedance 2.0 はマルチ画像入力をサポートしています。商品には ",[28,18460,2909],{}," を、配置したい環境やシーンには ",[28,18463,2919],{}," を使用します。モデルは自然なライティングとパースペクティブで商品をシーンに合成します。",[136,18466,18468],{"className":337,"code":18467,"language":339,"meta":141,"style":141},"payload = {\n    \"model\": \"seedance-2.0\",\n    \"image_urls\": [\n        \"https://your-cdn.com/products/ceramic-mug.jpg\",\n        \"https://your-cdn.com/scenes/cafe-table-morning.jpg\"\n    ],\n    \"prompt\": (\n        \"@Image1 is a handmade ceramic coffee mug. @Image2 is a cozy \"\n        \"café table by a window on a rainy morning. The mug sits on the \"\n        \"table, steam rising gently from fresh coffee. Soft natural light \"\n        \"from the window. Shallow depth of field. A hand reaches in and \"\n        \"wraps around the mug. Warm, inviting atmosphere. Lifestyle \"\n        \"advertisement quality.\"\n    ),\n    \"duration\": 8,\n    \"quality\": \"1080p\",\n    \"aspect_ratio\": \"9:16\"\n}\n\nresult = create_and_wait(payload)\n",[28,18469,18470,18478,18488,18494,18501,18506,18510,18516,18521,18526,18531,18536,18541,18546,18550,18560,18570,18579,18583,18587],{"__ignoreMap":141},[145,18471,18472,18474,18476],{"class":147,"line":148},[145,18473,3660],{"class":262},[145,18475,266],{"class":258},[145,18477,427],{"class":262},[145,18479,18480,18482,18484,18486],{"class":147,"line":166},[145,18481,3669],{"class":159},[145,18483,436],{"class":262},[145,18485,1309],{"class":159},[145,18487,451],{"class":262},[145,18489,18490,18492],{"class":147,"line":178},[145,18491,15206],{"class":159},[145,18493,2691],{"class":262},[145,18495,18496,18499],{"class":147,"line":187},[145,18497,18498],{"class":159},"        \"https://your-cdn.com/products/ceramic-mug.jpg\"",[145,18500,451],{"class":262},[145,18502,18503],{"class":147,"line":372},[145,18504,18505],{"class":159},"        \"https://your-cdn.com/scenes/cafe-table-morning.jpg\"\n",[145,18507,18508],{"class":147,"line":378},[145,18509,16188],{"class":262},[145,18511,18512,18514],{"class":147,"line":384},[145,18513,3680],{"class":159},[145,18515,1323],{"class":262},[145,18517,18518],{"class":147,"line":408},[145,18519,18520],{"class":159},"        \"@Image1 is a handmade ceramic coffee mug. @Image2 is a cozy \"\n",[145,18522,18523],{"class":147,"line":419},[145,18524,18525],{"class":159},"        \"café table by a window on a rainy morning. The mug sits on the \"\n",[145,18527,18528],{"class":147,"line":430},[145,18529,18530],{"class":159},"        \"table, steam rising gently from fresh coffee. Soft natural light \"\n",[145,18532,18533],{"class":147,"line":454},[145,18534,18535],{"class":159},"        \"from the window. Shallow depth of field. A hand reaches in and \"\n",[145,18537,18538],{"class":147,"line":465},[145,18539,18540],{"class":159},"        \"wraps around the mug. Warm, inviting atmosphere. Lifestyle \"\n",[145,18542,18543],{"class":147,"line":599},[145,18544,18545],{"class":159},"        \"advertisement quality.\"\n",[145,18547,18548],{"class":147,"line":604},[145,18549,3803],{"class":262},[145,18551,18552,18554,18556,18558],{"class":147,"line":610},[145,18553,3692],{"class":159},[145,18555,436],{"class":262},[145,18557,3697],{"class":155},[145,18559,451],{"class":262},[145,18561,18562,18564,18566,18568],{"class":147,"line":616},[145,18563,3704],{"class":159},[145,18565,436],{"class":262},[145,18567,3709],{"class":159},[145,18569,451],{"class":262},[145,18571,18572,18574,18576],{"class":147,"line":622},[145,18573,3716],{"class":159},[145,18575,436],{"class":262},[145,18577,18578],{"class":159},"\"9:16\"\n",[145,18580,18581],{"class":147,"line":627},[145,18582,468],{"class":262},[145,18584,18585],{"class":147,"line":638},[145,18586,375],{"emptyLinePlaceholder":58},[145,18588,18589,18591,18593],{"class":147,"line":653},[145,18590,12078],{"class":262},[145,18592,266],{"class":258},[145,18594,18096],{"class":262},[11,18596,18597],{},"実際にどのように見えるかをご紹介します — 絵の中のキャラクターが、フレームの前に置かれた商品（コーヒーカップ）に手を伸ばしています：",[56,18599,60,18600],{"controls":58,"playsInline":58,"style":59},[62,18601],{"src":18602,"type":65},"https://cdn.evolink.ai/seedance2api/%E7%94%BB%E4%B8%AD%E5%A5%B3%E4%BA%BA%E5%81%B7%E5%96%9D%E5%92%96%E5%95%A1.mp4",[11,18604,18605],{},[2619,18606,18607,18608,18610],{},"このデモは、",[28,18609,2909],{},"（キャラクター/商品の参照）が視覚的に一貫性を保ちながら、モデルが小道具や環境との自然なインタラクションを生成する様子を示しています。同じ原則は、あらゆる商品イン・コンテキスト動画に適用されます。",[11,18612,18613,18615,18616,18619],{},[28,18614,2919],{}," の参照は、テキスト記述だけから環境をハルシネーションするのではなく、モデルに作業するための具体的な環境を与えます。これにより、より現実的で一貫性のある結果が得られます。",[37,18617,18618],{"href":2967},"@tags システム","は最大9枚の画像をサポートしているため、複雑なシーン用に複数の参照画像をレイヤーできます。",[92,18621,18622],{"id":18622},"カテゴリー別ライフスタイルシーンの提案",[2037,18624,18625,18638],{},[2040,18626,18627],{},[2043,18628,18629,18632,18635],{},[2046,18630,18631],{},"商品カテゴリー",[2046,18633,18634],{},"シーン",[2046,18636,18637],{},"プロンプトキーワード",[2053,18639,18640,18651,18662,18673,18684,18695],{},[2043,18641,18642,18645,18648],{},[2058,18643,18644],{},"ドリンクウェア",[2058,18646,18647],{},"カフェテーブル、キッチンカウンター、屋外パティオ",[2058,18649,18650],{},"steam rising, morning light, cozy atmosphere",[2043,18652,18653,18656,18659],{},[2058,18654,18655],{},"腕時計",[2058,18657,18658],{},"ハンドルを握る手首、ラップトップのあるデスク、アウトドアアドベンチャー",[2058,18660,18661],{},"natural wrist movement, lifestyle context, candid feel",[2043,18663,18664,18667,18670],{},[2058,18665,18666],{},"ヘッドホン",[2058,18668,18669],{},"電車の通勤者、公園のランナー、デスクの学生",[2058,18671,18672],{},"wearing naturally, ambient environment, in-use",[2043,18674,18675,18678,18681],{},[2058,18676,18677],{},"スキンケア",[2058,18679,18680],{},"洗面台、スパ、ベッドサイドテーブル",[2058,18682,18683],{},"soft lighting, clean aesthetic, self-care moment",[2043,18685,18686,18689,18692],{},[2058,18687,18688],{},"家具",[2058,18690,18691],{},"日光の入るリビングルーム、スタイリングされたアパートメント",[2058,18693,18694],{},"room context, natural scale, interior design",[2043,18696,18697,18700,18703],{},[2058,18698,18699],{},"バッグ",[2058,18701,18702],{},"ストリートスタイル、空港ターミナル、オフィスエントランス",[2058,18704,18705],{},"walking motion, casual carry, urban setting",[11,18707,18708],{},"ライフスタイル動画の鍵は具体性です。\"A person using the product\" では汎用的な結果になります。\"A hand reaches in and wraps around the mug\" は意図のある瞬間を作り出します。マクロなコンセプトではなく、ミクロなアクションを記述してください。",[92,18710,18712],{"id":18711},"単一画像-vs-デュアル画像のライフスタイル","単一画像 vs. デュアル画像のライフスタイル",[11,18714,18715,18716,18718,18719,18721],{},"1枚の商品画像だけでもライフスタイル動画を生成できます — シーンはプロンプトで完全に記述します。デュアル画像モード（",[28,18717,2909],{}," + ",[28,18720,2919],{},"）は、モデルがテキスト記述だけでなくシーンの視覚的参照を持つため、より一貫した環境を生成します。",[11,18723,18724],{},"各アプローチの使い分け：",[96,18726,18727,18733],{},[73,18728,18729,18732],{},[23,18730,18731],{},"単一画像 + 記述的プロンプト："," 手軽で簡単。シーンが汎用的な場合（例：\"on a desk\"、\"in a kitchen\"）に適しています。2枚目の参照画像を用意する必要がありません。",[73,18734,18735,18738],{},[23,18736,18737],{},"デュアル画像（商品 + シーン参照）："," より高品質な合成。特定の環境が重要な場合に使用します — 特定のカフェの雰囲気、ブランドの小売スペース、ブランドガイドラインに合わせたキュレーションされたライフスタイルセッティング。",[11,18740,18741,18742,18744,18745,18747],{},"デュアル画像モードでは、シーン参照は自分の写真である必要はありません。ストックフォトも環境参照として十分に機能します。モデルは ",[28,18743,2919],{}," からライティング、カラーパレット、空間レイアウトを抽出し、",[28,18746,2909],{}," のコンテキスト化に使用します。",[11,18749,18750,18751,18753,18754,1261],{},"アスペクト比の変更に注意：Instagram Reels や TikTok 向けのライフスタイルコンテンツは ",[28,18752,1812],{}," を使用します。動画を配信するプラットフォームにアスペクト比を合わせてください。詳細は下記の",[37,18755,18757],{"href":18756},"#%E3%83%9E%E3%83%AB%E3%83%81%E3%83%97%E3%83%A9%E3%83%83%E3%83%88%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E6%9B%B8%E3%81%8D%E5%87%BA%E3%81%97%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AE%E3%83%81%E3%83%A3%E3%83%8D%E3%83%AB%E3%81%AB%E5%AF%BE%E5%BF%9C%E3%81%99%E3%82%8B%E3%82%A2%E3%82%B9%E3%83%9A%E3%82%AF%E3%83%88%E6%AF%94","マルチプラットフォーム書き出しセクション",[48,18759,18761],{"id":18760},"動画タイプ-4素材クローズアップマクロディテール","動画タイプ 4：素材クローズアップ（マクロディテール）",[11,18763,18764],{},"テクスチャはプレミアム商品を売ります。レザーの質感、アルミニウムのブラッシュ仕上げ、カシミアセーターの織り — これらのディテールは、ワイドショットでは伝えられない方法で品質を訴求します。表面ディテールをゆっくりと明らかにするマクロクローズアップ動画は、高級品やハンドメイド商品で最もコンバージョンの高いフォーマットの一つです。",[136,18766,18768],{"className":337,"code":18767,"language":339,"meta":141,"style":141},"payload = {\n    \"model\": \"seedance-2.0\",\n    \"image_urls\": [\n        \"https://your-cdn.com/products/leather-wallet.jpg\"\n    ],\n    \"prompt\": (\n        \"@Image1 is a full-grain leather bifold wallet. Extreme macro \"\n        \"close-up. The camera slowly glides across the leather surface, \"\n        \"revealing grain texture and hand-stitched seams. Shallow depth \"\n        \"of field with creamy bokeh. Warm directional lighting rakes \"\n        \"across the surface, emphasizing every pore and fiber. The camera \"\n        \"pulls back gradually to reveal the full wallet. Luxury product \"\n        \"photography in motion.\"\n    ),\n    \"duration\": 8,\n    \"quality\": \"1080p\",\n    \"aspect_ratio\": \"16:9\"\n}\n\nresult = create_and_wait(payload)\n",[28,18769,18770,18778,18788,18794,18799,18803,18809,18814,18819,18824,18829,18834,18839,18844,18848,18858,18868,18876,18880,18884],{"__ignoreMap":141},[145,18771,18772,18774,18776],{"class":147,"line":148},[145,18773,3660],{"class":262},[145,18775,266],{"class":258},[145,18777,427],{"class":262},[145,18779,18780,18782,18784,18786],{"class":147,"line":166},[145,18781,3669],{"class":159},[145,18783,436],{"class":262},[145,18785,1309],{"class":159},[145,18787,451],{"class":262},[145,18789,18790,18792],{"class":147,"line":178},[145,18791,15206],{"class":159},[145,18793,2691],{"class":262},[145,18795,18796],{"class":147,"line":187},[145,18797,18798],{"class":159},"        \"https://your-cdn.com/products/leather-wallet.jpg\"\n",[145,18800,18801],{"class":147,"line":372},[145,18802,16188],{"class":262},[145,18804,18805,18807],{"class":147,"line":378},[145,18806,3680],{"class":159},[145,18808,1323],{"class":262},[145,18810,18811],{"class":147,"line":384},[145,18812,18813],{"class":159},"        \"@Image1 is a full-grain leather bifold wallet. Extreme macro \"\n",[145,18815,18816],{"class":147,"line":408},[145,18817,18818],{"class":159},"        \"close-up. The camera slowly glides across the leather surface, \"\n",[145,18820,18821],{"class":147,"line":419},[145,18822,18823],{"class":159},"        \"revealing grain texture and hand-stitched seams. Shallow depth \"\n",[145,18825,18826],{"class":147,"line":430},[145,18827,18828],{"class":159},"        \"of field with creamy bokeh. Warm directional lighting rakes \"\n",[145,18830,18831],{"class":147,"line":454},[145,18832,18833],{"class":159},"        \"across the surface, emphasizing every pore and fiber. The camera \"\n",[145,18835,18836],{"class":147,"line":465},[145,18837,18838],{"class":159},"        \"pulls back gradually to reveal the full wallet. Luxury product \"\n",[145,18840,18841],{"class":147,"line":599},[145,18842,18843],{"class":159},"        \"photography in motion.\"\n",[145,18845,18846],{"class":147,"line":604},[145,18847,3803],{"class":262},[145,18849,18850,18852,18854,18856],{"class":147,"line":610},[145,18851,3692],{"class":159},[145,18853,436],{"class":262},[145,18855,3697],{"class":155},[145,18857,451],{"class":262},[145,18859,18860,18862,18864,18866],{"class":147,"line":616},[145,18861,3704],{"class":159},[145,18863,436],{"class":262},[145,18865,3709],{"class":159},[145,18867,451],{"class":262},[145,18869,18870,18872,18874],{"class":147,"line":622},[145,18871,3716],{"class":159},[145,18873,436],{"class":262},[145,18875,2730],{"class":159},[145,18877,18878],{"class":147,"line":627},[145,18879,468],{"class":262},[145,18881,18882],{"class":147,"line":638},[145,18883,375],{"emptyLinePlaceholder":58},[145,18885,18886,18888,18890],{"class":147,"line":653},[145,18887,12078],{"class":262},[145,18889,266],{"class":258},[145,18891,18096],{"class":262},[92,18893,18894],{"id":18894},"マクロプロンプトのボキャブラリー",[11,18896,18897],{},"モデルは特定の撮影技法用語に強く反応します。マクロ効果を制御するためにこれらを使用してください：",[96,18899,18900,18906,18912,18918,18924],{},[73,18901,18902,18905],{},[23,18903,18904],{},"\"Extreme macro close-up\""," — 表面ディテールへのタイトなフレーミングをトリガー",[73,18907,18908,18911],{},[23,18909,18910],{},"\"Shallow depth of field\" / \"creamy bokeh\""," — 背景をぼかし、ディテールを際立たせる",[73,18913,18914,18917],{},[23,18915,18916],{},"\"Raking light\" / \"directional lighting\""," — 影を通じて表面テクスチャを強調",[73,18919,18920,18923],{},[23,18921,18922],{},"\"Camera glides across\""," — なめらかな横方向の動き、テクスチャを段階的に明らかにする",[73,18925,18926,18929],{},[23,18927,18928],{},"\"Surface texture reveal\""," — 素材の品質にフォーカスする明示的な指示",[92,18931,18932],{"id":18932},"素材別プロンプト",[11,18934,18935,18938],{},[23,18936,18937],{},"レザー："," 質感、ステッチ、パティーナにフォーカス。暖色系ライティングを使用。",[136,18940,18943],{"className":18941,"code":18942,"language":2186},[2184],"Extreme macro on full-grain leather surface. Raking warm light reveals\nnatural grain variation and hand-stitched seam detail. Camera drifts\nslowly across the material. Shallow depth of field.\n",[28,18944,18942],{"__ignoreMap":141},[11,18946,18947,18950],{},[23,18948,18949],{},"メタル（ブラッシュ/ポリッシュ）："," 反射、加工痕、精度にフォーカス。",[136,18952,18955],{"className":18953,"code":18954,"language":2186},[2184],"Extreme close-up of brushed stainless steel surface. Cool directional\nlight creates long specular highlights across machined grooves. Camera\ntracks along the edge. Mirror-like reflections shift with the angle.\n",[28,18956,18954],{"__ignoreMap":141},[11,18958,18959,18962],{},[23,18960,18961],{},"ファブリック/テキスタイル："," 織りパターン、繊維ディテール、ドレープにフォーカス。",[136,18964,18967],{"className":18965,"code":18966,"language":2186},[2184],"Macro view of cashmere knit fabric. Soft diffused light reveals\nindividual fiber structure and weave pattern. Camera slowly pans\nacross the textile. Gentle motion shows natural drape and softness.\n",[28,18968,18966],{"__ignoreMap":141},[11,18970,18971,18974],{},[23,18972,18973],{},"木目："," 年輪、仕上げ、自然な色彩変化にフォーカス。",[136,18976,18979],{"className":18977,"code":18978,"language":2186},[2184],"Extreme macro of walnut wood surface with oil finish. Warm side\nlighting reveals growth rings and natural color variation. Camera\nglides along the grain direction. Rich, organic texture detail.\n",[28,18980,18978],{"__ignoreMap":141},[11,18982,18983,18984,1769],{},"これらの素材クローズアップは、商品リスティングの2番目または3番目の動画として特に効果的です。顧客が商品全体を見た後（回転動画またはヒーローショット）、マクロディテール動画が品質の印象を強化します。これらのリビールを強化するカメラワーク技法については、",[37,18985,18986],{"href":3855},"カメラムーブメントガイド",[48,18988,18990],{"id":18989},"動画タイプ-5開封リビール","動画タイプ 5：開封リビール",[11,18992,18993],{},"開封動画が YouTube やソーシャルプラットフォームで人気な理由は、購入体験をシミュレートするからです。パッケージを開ける期待感、商品の最初の一目、美しくデザインされた開封の満足感 — このフォーマットは、購入という感情のピークに訴えます。",[136,18995,18997],{"className":337,"code":18996,"language":339,"meta":141,"style":141},"payload = {\n    \"model\": \"seedance-2.0\",\n    \"image_urls\": [\n        \"https://your-cdn.com/products/smartwatch-boxed.jpg\"\n    ],\n    \"prompt\": (\n        \"@Image1 is a premium smartwatch in its retail packaging. \"\n        \"Hands gently lift the box lid, revealing tissue paper inside. \"\n        \"The tissue parts to unveil the watch nestled in a molded insert. \"\n        \"Soft overhead lighting. The watch face catches the light as \"\n        \"it's lifted from the box. Close-up of the clasp clicking shut \"\n        \"on a wrist. Smooth, deliberate pacing. Unboxing experience \"\n        \"video. Premium commercial quality.\"\n    ),\n    \"duration\": 12,\n    \"quality\": \"1080p\",\n    \"aspect_ratio\": \"9:16\"\n}\n\nresult = create_and_wait(payload)\n",[28,18998,18999,19007,19017,19023,19028,19032,19038,19043,19048,19053,19058,19063,19068,19073,19077,19087,19097,19105,19109,19113],{"__ignoreMap":141},[145,19000,19001,19003,19005],{"class":147,"line":148},[145,19002,3660],{"class":262},[145,19004,266],{"class":258},[145,19006,427],{"class":262},[145,19008,19009,19011,19013,19015],{"class":147,"line":166},[145,19010,3669],{"class":159},[145,19012,436],{"class":262},[145,19014,1309],{"class":159},[145,19016,451],{"class":262},[145,19018,19019,19021],{"class":147,"line":178},[145,19020,15206],{"class":159},[145,19022,2691],{"class":262},[145,19024,19025],{"class":147,"line":187},[145,19026,19027],{"class":159},"        \"https://your-cdn.com/products/smartwatch-boxed.jpg\"\n",[145,19029,19030],{"class":147,"line":372},[145,19031,16188],{"class":262},[145,19033,19034,19036],{"class":147,"line":378},[145,19035,3680],{"class":159},[145,19037,1323],{"class":262},[145,19039,19040],{"class":147,"line":384},[145,19041,19042],{"class":159},"        \"@Image1 is a premium smartwatch in its retail packaging. \"\n",[145,19044,19045],{"class":147,"line":408},[145,19046,19047],{"class":159},"        \"Hands gently lift the box lid, revealing tissue paper inside. \"\n",[145,19049,19050],{"class":147,"line":419},[145,19051,19052],{"class":159},"        \"The tissue parts to unveil the watch nestled in a molded insert. \"\n",[145,19054,19055],{"class":147,"line":430},[145,19056,19057],{"class":159},"        \"Soft overhead lighting. The watch face catches the light as \"\n",[145,19059,19060],{"class":147,"line":454},[145,19061,19062],{"class":159},"        \"it's lifted from the box. Close-up of the clasp clicking shut \"\n",[145,19064,19065],{"class":147,"line":465},[145,19066,19067],{"class":159},"        \"on a wrist. Smooth, deliberate pacing. Unboxing experience \"\n",[145,19069,19070],{"class":147,"line":599},[145,19071,19072],{"class":159},"        \"video. Premium commercial quality.\"\n",[145,19074,19075],{"class":147,"line":604},[145,19076,3803],{"class":262},[145,19078,19079,19081,19083,19085],{"class":147,"line":610},[145,19080,3692],{"class":159},[145,19082,436],{"class":262},[145,19084,16229],{"class":155},[145,19086,451],{"class":262},[145,19088,19089,19091,19093,19095],{"class":147,"line":616},[145,19090,3704],{"class":159},[145,19092,436],{"class":262},[145,19094,3709],{"class":159},[145,19096,451],{"class":262},[145,19098,19099,19101,19103],{"class":147,"line":622},[145,19100,3716],{"class":159},[145,19102,436],{"class":262},[145,19104,18578],{"class":159},[145,19106,19107],{"class":147,"line":627},[145,19108,468],{"class":262},[145,19110,19111],{"class":147,"line":638},[145,19112,375],{"emptyLinePlaceholder":58},[145,19114,19115,19117,19119],{"class":147,"line":653},[145,19116,12078],{"class":262},[145,19118,266],{"class":258},[145,19120,18096],{"class":262},[11,19122,19123],{},"開封フォーマットは長い duration が最適です — 10〜15秒 — 始まり（密封された箱）、中間（リビール）、終わり（使用中またはディスプレイ中の商品）のストーリーを語るためです。短いクリップは物語の弧を切り詰め、感情的なペイオフを失います。",[92,19125,19126],{"id":19126},"開封プロンプトの構造",[11,19128,19129],{},"効果的な開封プロンプトは三幕構成に従います：",[11,19131,19132,19135],{},[23,19133,19134],{},"第1幕 — パッケージ（2〜3秒）。"," パッケージを確立します。密封された箱と手の関わり、パッケージの素材、ブランド要素を記述します。",[11,19137,19138,19141],{},[23,19139,19140],{},"第2幕 — リビール（4〜6秒）。"," 蓋が開きます。ティッシュペーパー、フォームインサート、保護層が開きます。商品が初めて目に見えるようになります。これが感情のピークです — 感覚的なディテールで記述してください。",[11,19143,19144,19147],{},[23,19145,19146],{},"第3幕 — 商品（3〜5秒）。"," 商品が持ち上げられ、ディスプレイされ、または使用されます。腕時計が手首に装着される。イヤホンが耳に入る。スマートフォンの画面が点灯する。これで購入のファンタジーが完成します。",[11,19149,19150],{},"独特な、またはプレミアムなパッケージを持つ商品の場合は、箱が映った写真を入力画像として使用してください。白背景の商品写真しかない場合は、プロンプトでパッケージを記述し、モデルに生成させてください。実際のパッケージの参照画像を提供すると、より一貫した結果が得られます。",[11,19152,19153,19154,19156],{},"ここでは 9:16 の縦型フォーマットが主流です。開封コンテンツは主に Instagram Reels、TikTok、YouTube Shorts で配信されるためです。商品ページ用には、よりタイトなフレーミングの 16:9 編集を検討してください。",[37,19155,18986],{"href":3855},"では、開封シーケンスを強化するドラマチックなリビールやトップダウンアングルの記述方法を解説しています。",[92,19158,19159],{"id":19159},"マーケティングアセットとしてのパッケージ",[11,19161,19162],{},"プレミアムブランドはパッケージデザインに多額の投資をしており、開封動画はその投資がカメラ上で成果を発揮する場です。商品に独特なパッケージ（カスタムボックス、マグネット式クロージャー、エンボスロゴ、ブランディング入りティッシュペーパー）がある場合は、入力画像が商品単体ではなく、パッケージ状態を捉えていることを確認してください。",[11,19164,19165],{},"高級パッケージのない商品 — 標準的な茶色の箱、ポリメーラー、最小限のリテールパッケージ — でも、理想的な開封体験を作成できます。地味なパッケージの商品でも、魅力的な開封動画を制作できます。プロンプトはリビールの瞬間に集中してください — 閉じた箱と中の商品のコントラスト。パッケージが標準的であっても、ストーリーの弧が動画を支えます。",[92,19167,19168],{"id":19168},"動画タイプの組み合わせで完全なリスティングを構築",[11,19170,19171],{},"最も効果的な商品リスティングは、複数の動画タイプを組み合わせて使用します。商品ページの強力な組み合わせ：",[70,19173,19174,19180,19186,19192],{},[73,19175,19176,19179],{},[23,19177,19178],{},"ヒーローショット","（1本目の動画）— 注目を集め、プレミアムなポジショニングを確立",[73,19181,19182,19185],{},[23,19183,19184],{},"360° 回転","（2本目の動画）— あらゆる角度から商品を紹介",[73,19187,19188,19191],{},[23,19189,19190],{},"マクロクローズアップ","（3本目の動画）— 素材ディテールで品質を証明",[73,19193,19194,19197],{},[23,19195,19196],{},"ライフスタイルコンテキスト","（4本目の動画）— 顧客が所有をイメージできるようにする",[11,19199,19200],{},"同じ商品のソーシャルメディアプロモーションでは、ヒーローショットまたは開封リビール（どちらもフィードでのスクロール停止に最適化）をリードに、ライフスタイルや回転コンテンツでリターゲティングします。",[11,19202,19203],{},"1枚の商品写真から5種類すべてを1回のパイプライン実行で生成できます。次のセクションのバッチシステムがこれを自動的に処理します。",[48,19205,19207],{"id":19206},"マルチプラットフォーム書き出しすべてのチャネルに対応するアスペクト比","マルチプラットフォーム書き出し：すべてのチャネルに対応するアスペクト比",[11,19209,19210],{},"1本の商品動画は有用です。チャネルが必要とするすべてのフォーマットで同じ動画があれば、それはシステムです。各プラットフォームにはアスペクト比の好み、自動再生の動作、最適な duration が異なります。単一の動画を生成��てクロップするとコンポジションが崩れます。各比率でネイティブに生成すれば、すべての画面に正しくフレーミングされた動画が得られます。",[2037,19212,19213,19228],{},[2040,19214,19215],{},[2043,19216,19217,19219,19222,19225],{},[2046,19218,13638],{},[2046,19220,19221],{},"アスペクト比",[2046,19223,19224],{},"推奨 Duration",[2046,19226,19227],{},"備考",[2053,19229,19230,19243,19255,19268,19281,19293,19307,19320,19332],{},[2043,19231,19232,19235,19237,19240],{},[2058,19233,19234],{},"Amazon 商品ページ",[2058,19236,1808],{},[2058,19238,19239],{},"6〜8秒",[2058,19241,19242],{},"クリーン、情報的。リスティングでの自動再生。",[2043,19244,19245,19248,19250,19252],{},[2058,19246,19247],{},"Shopify 商品ページ",[2058,19249,1808],{},[2058,19251,18155],{},[2058,19253,19254],{},"自動再生ヒーローまたはギャラリー埋め込み。",[2043,19256,19257,19260,19262,19265],{},[2058,19258,19259],{},"Instagram Reels",[2058,19261,1812],{},[2058,19263,19264],{},"8〜10秒",[2058,19266,19267],{},"目を引く、速いテンポが好まれる。",[2043,19269,19270,19273,19275,19278],{},[2058,19271,19272],{},"TikTok",[2058,19274,1812],{},[2058,19276,19277],{},"8〜15秒",[2058,19279,19280],{},"トレンドスタイル、ダイナミックなトランジション。",[2043,19282,19283,19286,19288,19290],{},[2058,19284,19285],{},"Facebook フィード",[2058,19287,1816],{},[2058,19289,19239],{},[2058,19291,19292],{},"フィード面積を最大化するスクエア。",[2043,19294,19295,19298,19301,19304],{},[2058,19296,19297],{},"Pinterest 動画ピン",[2058,19299,19300],{},"1:1 または 9:16",[2058,19302,19303],{},"6〜15秒",[2058,19305,19306],{},"モバイルでは縦型が最もパフォーマンスが高い。",[2043,19308,19309,19312,19314,19317],{},[2058,19310,19311],{},"Web サイトヒーローバナー",[2058,19313,1808],{},[2058,19315,19316],{},"4〜6秒",[2058,19318,19319],{},"短いループ、自動再生、音声なし。",[2043,19321,19322,19325,19327,19329],{},[2058,19323,19324],{},"YouTube Shorts",[2058,19326,1812],{},[2058,19328,19277],{},[2058,19330,19331],{},"TikTok と同様のフォーマット。",[2043,19333,19334,19337,19339,19341],{},[2058,19335,19336],{},"メールキャンペーン",[2058,19338,1808],{},[2058,19340,19316],{},[2058,19342,19343],{},"GIF フォールバック、ファイルサイズを小さく。",[92,19345,19346],{"id":19346},"すべてのアスペクト比を一括生成",[11,19348,19349],{},"シンプルなループで、チャネルが必要とするすべてのアスペクト比で同じ商品動画を生成します：",[136,19351,19353],{"className":337,"code":19352,"language":339,"meta":141,"style":141},"platform_configs = [\n    {\"name\": \"amazon\",    \"aspect_ratio\": \"16:9\", \"duration\": 8},\n    {\"name\": \"instagram\", \"aspect_ratio\": \"9:16\", \"duration\": 10},\n    {\"name\": \"facebook\",  \"aspect_ratio\": \"1:1\",  \"duration\": 8},\n    {\"name\": \"website\",   \"aspect_ratio\": \"16:9\", \"duration\": 5},\n]\n\nbase_prompt = (\n    \"@Image1 is a premium wireless speaker. The speaker rotates slowly \"\n    \"on a matte black surface under soft studio lighting. Clean, minimal \"\n    \"aesthetic. Commercial product video quality.\"\n)\n\ntasks = []\nfor config in platform_configs:\n    payload = {\n        \"model\": \"seedance-2.0\",\n        \"image_urls\": [\"https://your-cdn.com/products/speaker.jpg\"],\n        \"prompt\": base_prompt,\n        \"duration\": config[\"duration\"],\n        \"quality\": \"1080p\",\n        \"aspect_ratio\": config[\"aspect_ratio\"]\n    }\n    task = generate_video(payload)\n    tasks.append({\"platform\": config[\"name\"], \"task_id\": task[\"task_id\"]})\n    print(f\"📐 {config['name']} ({config['aspect_ratio']}): {task['task_id']}\")\n    time.sleep(1)  # Rate limiting\n\n# Collect results\nfor t in tasks:\n    result = wait_for_video(t[\"task_id\"])\n    print(f\"✅ {t['platform']}: {result['output']['video_url']}\")\n",[28,19354,19355,19364,19397,19426,19455,19485,19489,19493,19503,19508,19513,19518,19522,19526,19535,19547,19555,19565,19576,19583,19594,19604,19614,19618,19626,19650,19704,19717,19721,19726,19738,19751],{"__ignoreMap":141},[145,19356,19357,19360,19362],{"class":147,"line":148},[145,19358,19359],{"class":262},"platform_configs ",[145,19361,266],{"class":258},[145,19363,8725],{"class":262},[145,19365,19366,19369,19372,19374,19377,19380,19382,19384,19386,19388,19390,19392,19394],{"class":147,"line":166},[145,19367,19368],{"class":262},"    {",[145,19370,19371],{"class":159},"\"name\"",[145,19373,436],{"class":262},[145,19375,19376],{"class":159},"\"amazon\"",[145,19378,19379],{"class":262},",    ",[145,19381,6027],{"class":159},[145,19383,436],{"class":262},[145,19385,1385],{"class":159},[145,19387,399],{"class":262},[145,19389,5825],{"class":159},[145,19391,436],{"class":262},[145,19393,3697],{"class":155},[145,19395,19396],{"class":262},"},\n",[145,19398,19399,19401,19403,19405,19408,19410,19412,19414,19416,19418,19420,19422,19424],{"class":147,"line":178},[145,19400,19368],{"class":262},[145,19402,19371],{"class":159},[145,19404,436],{"class":262},[145,19406,19407],{"class":159},"\"instagram\"",[145,19409,399],{"class":262},[145,19411,6027],{"class":159},[145,19413,436],{"class":262},[145,19415,3721],{"class":159},[145,19417,399],{"class":262},[145,19419,5825],{"class":159},[145,19421,436],{"class":262},[145,19423,536],{"class":155},[145,19425,19396],{"class":262},[145,19427,19428,19430,19432,19434,19437,19439,19441,19443,19445,19447,19449,19451,19453],{"class":147,"line":187},[145,19429,19368],{"class":262},[145,19431,19371],{"class":159},[145,19433,436],{"class":262},[145,19435,19436],{"class":159},"\"facebook\"",[145,19438,1448],{"class":262},[145,19440,6027],{"class":159},[145,19442,436],{"class":262},[145,19444,5999],{"class":159},[145,19446,1448],{"class":262},[145,19448,5825],{"class":159},[145,19450,436],{"class":262},[145,19452,3697],{"class":155},[145,19454,19396],{"class":262},[145,19456,19457,19459,19461,19463,19466,19469,19471,19473,19475,19477,19479,19481,19483],{"class":147,"line":372},[145,19458,19368],{"class":262},[145,19460,19371],{"class":159},[145,19462,436],{"class":262},[145,19464,19465],{"class":159},"\"website\"",[145,19467,19468],{"class":262},",   ",[145,19470,6027],{"class":159},[145,19472,436],{"class":262},[145,19474,1385],{"class":159},[145,19476,399],{"class":262},[145,19478,5825],{"class":159},[145,19480,436],{"class":262},[145,19482,1353],{"class":155},[145,19484,19396],{"class":262},[145,19486,19487],{"class":147,"line":378},[145,19488,763],{"class":262},[145,19490,19491],{"class":147,"line":384},[145,19492,375],{"emptyLinePlaceholder":58},[145,19494,19495,19498,19500],{"class":147,"line":408},[145,19496,19497],{"class":262},"base_prompt ",[145,19499,266],{"class":258},[145,19501,19502],{"class":262}," (\n",[145,19504,19505],{"class":147,"line":419},[145,19506,19507],{"class":159},"    \"@Image1 is a premium wireless speaker. The speaker rotates slowly \"\n",[145,19509,19510],{"class":147,"line":430},[145,19511,19512],{"class":159},"    \"on a matte black surface under soft studio lighting. Clean, minimal \"\n",[145,19514,19515],{"class":147,"line":454},[145,19516,19517],{"class":159},"    \"aesthetic. Commercial product video quality.\"\n",[145,19519,19520],{"class":147,"line":465},[145,19521,405],{"class":262},[145,19523,19524],{"class":147,"line":599},[145,19525,375],{"emptyLinePlaceholder":58},[145,19527,19528,19531,19533],{"class":147,"line":604},[145,19529,19530],{"class":262},"tasks ",[145,19532,266],{"class":258},[145,19534,5735],{"class":262},[145,19536,19537,19539,19542,19544],{"class":147,"line":610},[145,19538,8088],{"class":258},[145,19540,19541],{"class":262}," config ",[145,19543,1180],{"class":258},[145,19545,19546],{"class":262}," platform_configs:\n",[145,19548,19549,19551,19553],{"class":147,"line":616},[145,19550,1295],{"class":262},[145,19552,266],{"class":258},[145,19554,427],{"class":262},[145,19556,19557,19559,19561,19563],{"class":147,"line":622},[145,19558,1304],{"class":159},[145,19560,436],{"class":262},[145,19562,1309],{"class":159},[145,19564,451],{"class":262},[145,19566,19567,19569,19571,19574],{"class":147,"line":627},[145,19568,2688],{"class":159},[145,19570,10692],{"class":262},[145,19572,19573],{"class":159},"\"https://your-cdn.com/products/speaker.jpg\"",[145,19575,10698],{"class":262},[145,19577,19578,19580],{"class":147,"line":638},[145,19579,1320],{"class":159},[145,19581,19582],{"class":262},": base_prompt,\n",[145,19584,19585,19587,19590,19592],{"class":147,"line":653},[145,19586,1348],{"class":159},[145,19588,19589],{"class":262},": config[",[145,19591,5825],{"class":159},[145,19593,10698],{"class":262},[145,19595,19596,19598,19600,19602],{"class":147,"line":659},[145,19597,1364],{"class":159},[145,19599,436],{"class":262},[145,19601,3709],{"class":159},[145,19603,451],{"class":262},[145,19605,19606,19608,19610,19612],{"class":147,"line":670},[145,19607,1380],{"class":159},[145,19609,19589],{"class":262},[145,19611,6027],{"class":159},[145,19613,763],{"class":262},[145,19615,19616],{"class":147,"line":697},[145,19617,1408],{"class":262},[145,19619,19620,19622,19624],{"class":147,"line":709},[145,19621,1497],{"class":262},[145,19623,266],{"class":258},[145,19625,16725],{"class":262},[145,19627,19628,19631,19634,19636,19638,19640,19642,19645,19647],{"class":147,"line":715},[145,19629,19630],{"class":262},"    tasks.append({",[145,19632,19633],{"class":159},"\"platform\"",[145,19635,19589],{"class":262},[145,19637,19371],{"class":159},[145,19639,10606],{"class":262},[145,19641,7553],{"class":159},[145,19643,19644],{"class":262},": task[",[145,19646,7553],{"class":159},[145,19648,19649],{"class":262},"]})\n",[145,19651,19652,19654,19656,19658,19661,19663,19666,19669,19671,19673,19675,19677,19679,19682,19684,19686,19689,19691,19693,19696,19698,19700,19702],{"class":147,"line":721},[145,19653,1102],{"class":155},[145,19655,793],{"class":262},[145,19657,439],{"class":258},[145,19659,19660],{"class":159},"\"📐 ",[145,19662,684],{"class":155},[145,19664,19665],{"class":262},"config[",[145,19667,19668],{"class":159},"'name'",[145,19670,1536],{"class":262},[145,19672,690],{"class":155},[145,19674,1218],{"class":159},[145,19676,684],{"class":155},[145,19678,19665],{"class":262},[145,19680,19681],{"class":159},"'aspect_ratio'",[145,19683,1536],{"class":262},[145,19685,690],{"class":155},[145,19687,19688],{"class":159},"): ",[145,19690,684],{"class":155},[145,19692,1530],{"class":262},[145,19694,19695],{"class":159},"'task_id'",[145,19697,1536],{"class":262},[145,19699,690],{"class":155},[145,19701,448],{"class":159},[145,19703,405],{"class":262},[145,19705,19706,19709,19711,19714],{"class":147,"line":727},[145,19707,19708],{"class":262},"    time.sleep(",[145,19710,5308],{"class":155},[145,19712,19713],{"class":262},")  ",[145,19715,19716],{"class":174},"# Rate limiting\n",[145,19718,19719],{"class":147,"line":738},[145,19720,375],{"emptyLinePlaceholder":58},[145,19722,19723],{"class":147,"line":743},[145,19724,19725],{"class":174},"# Collect results\n",[145,19727,19728,19730,19733,19735],{"class":147,"line":749},[145,19729,8088],{"class":258},[145,19731,19732],{"class":262}," t ",[145,19734,1180],{"class":258},[145,19736,19737],{"class":262}," tasks:\n",[145,19739,19740,19742,19744,19747,19749],{"class":147,"line":766},[145,19741,1619],{"class":262},[145,19743,266],{"class":258},[145,19745,19746],{"class":262}," wait_for_video(t[",[145,19748,7553],{"class":159},[145,19750,1630],{"class":262},[145,19752,19753,19755,19757,19759,19762,19764,19767,19770,19772,19774,19776,19778,19780,19782,19784,19786,19788,19790,19792],{"class":147,"line":787},[145,19754,1102],{"class":155},[145,19756,793],{"class":262},[145,19758,439],{"class":258},[145,19760,19761],{"class":159},"\"✅ ",[145,19763,684],{"class":155},[145,19765,19766],{"class":262},"t[",[145,19768,19769],{"class":159},"'platform'",[145,19771,1536],{"class":262},[145,19773,690],{"class":155},[145,19775,436],{"class":159},[145,19777,684],{"class":155},[145,19779,11660],{"class":262},[145,19781,17710],{"class":159},[145,19783,1563],{"class":262},[145,19785,17715],{"class":159},[145,19787,1536],{"class":262},[145,19789,690],{"class":155},[145,19791,448],{"class":159},[145,19793,405],{"class":262},[11,19795,19796],{},"これはすべてのバリアントを並列で送信し（レート制限として1秒間の間隔）、完了したものから結果を収集します。100商品 x 4プラットフォームのカタログの場合、400本の動画が TV エピソード1本を見る程度の時間で生成されます。",[11,19798,19799],{},"このパターンは4つのバリアントをすべて送信し、完了したものから結果を収集します。合計生成時間は1本の動画とほぼ同等です。4つすべてがサーバーサイドで並列処理されます。",[92,19801,19802],{"id":19802},"ネイティブ比率がクロップに勝る理由",[11,19804,19805],{},"プロンプトはアスペクト比間で同一のままです。Seedance 2.0 はクロップではなく、各アスペクト比にネイティブに合わせてシーンを再構成し、フレーミングと空間レイアウトを調整します。回転動画の 9:16 縦型バージョンは商品を中央に配置し、より多くのヘッドルームを確保します。1:1 スクエアバージョンはフレーミングを引き締め、フィードでの商品視認性を最大化します。",[11,19807,19808],{},"従来の動画編集では、16:9 のマスターファイルをクロップしてマルチプラットフォーム対応します。9:16 へのセンタークロップはフレームの両側を失います。1:1 へのクロップはコンテキストを失います。Seedance 2.0 では、各比率がゼロから生成されます。モデルが各形状に適切にシーンを構成します。回転動画の 9:16 縦型バージョンは、商品により多くの縦方向の余白を持たせます。1:1 スクエアバージョンは、ソーシャルフィードでの商品視認性を最大化するためにフレーミングを引き締めます。商品は常にフレームの適切な割合を占めます。",[92,19810,19811],{"id":19811},"プラットフォーム別プロンプト調整",[11,19813,19814],{},"同じベースプロンプトがアスペクト比間で機能しますが、各プラットフォームのコンテンツスタイルに最適化できます：",[96,19816,19817,19823,19829,19835,19841],{},[73,19818,19819,19822],{},[23,19820,19821],{},"Amazon/Shopify (16:9)："," クリーンで情報的に。派手なトランジションを避ける。商品を明確に見せることに集中。",[73,19824,19825,19828],{},[23,19826,19827],{},"Instagram Reels (9:16)："," より速いテンポが効果的。より多くの視覚的動きのために、プロンプトに \"dynamic\" や \"energetic\" を追加。",[73,19830,19831,19834],{},[23,19832,19833],{},"TikTok (9:16)："," さらにダイナミックに。\"Quick cuts\"、\"trend-style transitions\"、\"bold camera movements\" が TikTok のビジュアル言語に合致。",[73,19836,19837,19840],{},[23,19838,19839],{},"Facebook フィード (1:1)："," スクエアフォーマットは強い中央構図が必要。商品を中央に記述：\"product centered in frame\"。",[73,19842,19843,19846],{},[23,19844,19845],{},"Web サイトヒーロー (16:9)："," 控えめさが勝ち。\"Slow, hypnotic motion\" と \"seamless loop\" がキーワード。これらの動画は無音で自動再生されるため、ナラティブよりもビジュアル品質が重要。",[11,19848,19849,19850,1769],{},"サポートされているすべてのアスペクト比を含む完全な API パラメータドキュメントは、",[37,19851,19852],{"href":14209},"動画生成 API ドキュメント",[48,19854,19856],{"id":19855},"バッチパイプラインcsv-カタログから動画ライブラリへ","バッチパイプライン：CSV カタログから動画ライブラリへ",[11,19858,19859],{},"個別の API コールはテストに適しています。本番の EC では、商品カタログを読み込み、すべての SKU の動画を生成し、失敗を処理し、出力を整理するパイプラインが必要です。このセクションでそのパイプラインを構築します。",[11,19861,19862],{},"商品カタログを含む CSV ファイルから始めます：",[136,19864,19868],{"className":19865,"code":19866,"language":19867,"meta":141,"style":141},"language-csv shiki shiki-themes github-dark","name,image_url,category,style\nLeather Bifold Wallet,https://cdn.example.com/wallet.jpg,accessories,rotation\nWireless Earbuds Pro,https://cdn.example.com/earbuds.jpg,electronics,hero\nCeramic Pour-Over Set,https://cdn.example.com/pourover.jpg,kitchen,lifestyle\nMerino Wool Scarf,https://cdn.example.com/scarf.jpg,apparel,macro\nSmart Fitness Watch,https://cdn.example.com/watch.jpg,electronics,unboxing\n","csv",[28,19869,19870,19875,19880,19885,19890,19895],{"__ignoreMap":141},[145,19871,19872],{"class":147,"line":148},[145,19873,19874],{},"name,image_url,category,style\n",[145,19876,19877],{"class":147,"line":166},[145,19878,19879],{},"Leather Bifold Wallet,https://cdn.example.com/wallet.jpg,accessories,rotation\n",[145,19881,19882],{"class":147,"line":178},[145,19883,19884],{},"Wireless Earbuds Pro,https://cdn.example.com/earbuds.jpg,electronics,hero\n",[145,19886,19887],{"class":147,"line":187},[145,19888,19889],{},"Ceramic Pour-Over Set,https://cdn.example.com/pourover.jpg,kitchen,lifestyle\n",[145,19891,19892],{"class":147,"line":372},[145,19893,19894],{},"Merino Wool Scarf,https://cdn.example.com/scarf.jpg,apparel,macro\n",[145,19896,19897],{"class":147,"line":378},[145,19898,19899],{},"Smart Fitness Watch,https://cdn.example.com/watch.jpg,electronics,unboxing\n",[11,19901,19902,19904],{},[28,19903,11068],{}," 列は、このガイドで取り上げた5種類の動画タイプにマッピングされます。完全なパイプラインは以下の通りです：",[136,19906,19908],{"className":337,"code":19907,"language":339,"meta":141,"style":141},"import csv\nimport os\nimport time\nimport requests\nfrom pathlib import Path\n\nAPI_KEY = \"YOUR_API_KEY\"\nBASE_URL = \"https://api.evolink.ai/v1\"\nOUTPUT_DIR = Path(\"./product_videos\")\nOUTPUT_DIR.mkdir(exist_ok=True)\n\nheaders = {\n    \"Authorization\": f\"Bearer {API_KEY}\",\n    \"Content-Type\": \"application/json\"\n}\n\n# Prompt templates keyed by style\nSTYLE_PROMPTS = {\n    \"rotation\": (\n        \"@Image1 is a {name}. The product rotates slowly on a clean surface \"\n        \"under professional studio lighting. Smooth 360-degree turntable \"\n        \"rotation. Commercial product showcase quality.\"\n    ),\n    \"hero\": (\n        \"@Image1 is a {name}. The product emerges dramatically from soft \"\n        \"volumetric fog with a golden backlight. Particles drift upward. \"\n        \"Cinematic slow reveal. Premium advertisement quality.\"\n    ),\n    \"lifestyle\": (\n        \"@Image1 is a {name}. The product is shown in a natural lifestyle \"\n        \"setting, being used in an everyday context. Warm natural lighting. \"\n        \"Shallow depth of field. Authentic lifestyle commercial.\"\n    ),\n    \"macro\": (\n        \"@Image1 is a {name}. Extreme macro close-up. The camera glides \"\n        \"across the surface, revealing material texture and craftsmanship \"\n        \"details. Shallow depth of field. Raking directional light. \"\n        \"Luxury product detail shot.\"\n    ),\n    \"unboxing\": (\n        \"@Image1 is a {name} in retail packaging. Hands lift the lid to \"\n        \"reveal the product inside. Tissue paper parts. The product is \"\n        \"lifted out and displayed. Soft overhead lighting. Premium \"\n        \"unboxing experience video.\"\n    ),\n}\n\nSTYLE_DEFAULTS = {\n    \"rotation\":  {\"duration\": 8,  \"aspect_ratio\": \"16:9\"},\n    \"hero\":      {\"duration\": 10, \"aspect_ratio\": \"16:9\"},\n    \"lifestyle\": {\"duration\": 8,  \"aspect_ratio\": \"9:16\"},\n    \"macro\":     {\"duration\": 8,  \"aspect_ratio\": \"16:9\"},\n    \"unboxing\":  {\"duration\": 12, \"aspect_ratio\": \"9:16\"},\n}\n\n\ndef submit_video_task(name: str, image_url: str, style: str) -> str:\n    \"\"\"Submit a single video generation task. Returns task_id.\"\"\"\n    prompt_template = STYLE_PROMPTS.get(style, STYLE_PROMPTS[\"rotation\"])\n    defaults = STYLE_DEFAULTS.get(style, STYLE_DEFAULTS[\"rotation\"])\n\n    payload = {\n        \"model\": \"seedance-2.0\",\n        \"image_urls\": [image_url],\n        \"prompt\": prompt_template.format(name=name),\n        \"duration\": defaults[\"duration\"],\n        \"quality\": \"1080p\",\n        \"aspect_ratio\": defaults[\"aspect_ratio\"],\n    }\n\n    resp = requests.post(\n        f\"{BASE_URL}/videos/generations\", headers=headers, json=payload\n    )\n    resp.raise_for_status()\n    return resp.json()[\"task_id\"]\n\n\ndef poll_task(task_id: str, timeout: int = 300) -> dict:\n    \"\"\"Poll until task completes or fails.\"\"\"\n    elapsed = 0\n    while elapsed \u003C timeout:\n        resp = requests.get(f\"{BASE_URL}/tasks/{task_id}\", headers=headers)\n        resp.raise_for_status()\n        task = resp.json()\n\n        if task[\"status\"] == \"completed\":\n            return task\n        elif task[\"status\"] == \"failed\":\n            raise RuntimeError(f\"Task {task_id} failed: {task.get('error')}\")\n\n        time.sleep(5)\n        elapsed += 5\n\n    raise TimeoutError(f\"Task {task_id} timed out after {timeout}s\")\n\n\ndef download_video(url: str, filepath: Path):\n    \"\"\"Download a video file from a URL.\"\"\"\n    resp = requests.get(url, stream=True)\n    resp.raise_for_status()\n    with open(filepath, \"wb\") as f:\n        for chunk in resp.iter_content(chunk_size=8192):\n            f.write(chunk)\n    print(f\"💾 Saved: {filepath}\")\n\n\ndef process_catalog(csv_path: str, max_retries: int = 2):\n    \"\"\"Process an entire product catalog CSV into videos.\"\"\"\n    # Phase 1: Submit all tasks\n    pending = []\n    with open(csv_path, \"r\") as f:\n        reader = csv.DictReader(f)\n        for row in reader:\n            name = row[\"name\"]\n            image_url = row[\"image_url\"]\n            style = row.get(\"style\", \"rotation\")\n\n            for attempt in range(max_retries + 1):\n                try:\n                    task_id = submit_video_task(name, image_url, style)\n                    pending.append({\n                        \"name\": name,\n                        \"task_id\": task_id,\n                        \"style\": style,\n                    })\n                    print(f\"🎬 Submitted: {name} ({style}) → {task_id}\")\n                    time.sleep(1)  # Rate limiting: 1 request per second\n                    break\n                except requests.exceptions.RequestException as e:\n                    if attempt \u003C max_retries:\n                        print(f\"⚠️  Retry {attempt + 1} for {name}: {e}\")\n                        time.sleep(3)\n                    else:\n                        print(f\"❌ Failed to submit {name}: {e}\")\n\n    # Phase 2: Collect results\n    results = []\n    for item in pending:\n        try:\n            task = poll_task(item[\"task_id\"])\n            video_url = task[\"output\"][\"video_url\"]\n\n            # Generate safe filename\n            safe_name = item[\"name\"].lower().replace(\" \", \"-\")\n            filename = f\"{safe_name}_{item['style']}.mp4\"\n            filepath = OUTPUT_DIR / filename\n\n            download_video(video_url, filepath)\n            results.append({\n                \"name\": item[\"name\"],\n                \"style\": item[\"style\"],\n                \"file\": str(filepath),\n                \"status\": \"success\"\n            })\n        except Exception as e:\n            print(f\"❌ Failed: {item['name']}: {e}\")\n            results.append({\n                \"name\": item[\"name\"],\n                \"style\": item[\"style\"],\n                \"file\": None,\n                \"status\": f\"error: {e}\"\n            })\n\n    # Summary\n    success = sum(1 for r in results if r[\"status\"] == \"success\")\n    print(f\"\\n📊 Complete: {success}/{len(results)} videos generated\")\n    return results\n\n\n# Run it\nresults = process_catalog(\"products.csv\")\n",[28,19909,19910,19917,19923,19929,19935,19947,19951,19959,19967,19981,19996,20000,20008,20024,20032,20036,20040,20045,20054,20061,20072,20077,20082,20086,20093,20102,20107,20112,20116,20123,20132,20137,20142,20146,20153,20162,20167,20172,20177,20181,20188,20197,20202,20207,20212,20216,20220,20224,20233,20256,20279,20302,20325,20347,20351,20355,20359,20387,20392,20414,20434,20438,20446,20456,20463,20478,20489,20499,20509,20513,20517,20525,20550,20554,20558,20569,20573,20577,20601,20606,20614,20624,20656,20660,20668,20672,20688,20694,20710,20744,20748,20756,20765,20769,20799,20803,20807,20821,20826,20842,20846,20863,20881,20885,20907,20911,20915,20939,20944,20949,20958,20976,20986,20998,21012,21026,21045,21049,21069,21076,21086,21091,21099,21107,21115,21120,21159,21171,21176,21188,21200,21241,21250,21257,21286,21290,21295,21303,21315,21321,21334,21351,21355,21360,21385,21421,21437,21441,21446,21451,21463,21474,21486,21496,21501,21511,21544,21548,21558,21568,21579,21598,21602,21606,21611,21649,21685,21691,21695,21699,21704],{"__ignoreMap":141},[145,19911,19912,19914],{"class":147,"line":148},[145,19913,346],{"class":258},[145,19915,19916],{"class":262}," csv\n",[145,19918,19919,19921],{"class":147,"line":166},[145,19920,346],{"class":258},[145,19922,362],{"class":262},[145,19924,19925,19927],{"class":147,"line":178},[145,19926,346],{"class":258},[145,19928,355],{"class":262},[145,19930,19931,19933],{"class":147,"line":187},[145,19932,346],{"class":258},[145,19934,328],{"class":262},[145,19936,19937,19939,19942,19944],{"class":147,"line":372},[145,19938,6586],{"class":258},[145,19940,19941],{"class":262}," pathlib ",[145,19943,346],{"class":258},[145,19945,19946],{"class":262}," Path\n",[145,19948,19949],{"class":147,"line":378},[145,19950,375],{"emptyLinePlaceholder":58},[145,19952,19953,19955,19957],{"class":147,"line":384},[145,19954,387],{"class":155},[145,19956,390],{"class":258},[145,19958,17419],{"class":159},[145,19960,19961,19963,19965],{"class":147,"line":408},[145,19962,411],{"class":155},[145,19964,390],{"class":258},[145,19966,416],{"class":159},[145,19968,19969,19971,19973,19976,19979],{"class":147,"line":419},[145,19970,6661],{"class":155},[145,19972,390],{"class":258},[145,19974,19975],{"class":262}," Path(",[145,19977,19978],{"class":159},"\"./product_videos\"",[145,19980,405],{"class":262},[145,19982,19983,19985,19988,19990,19992,19994],{"class":147,"line":430},[145,19984,6661],{"class":155},[145,19986,19987],{"class":262},".mkdir(",[145,19989,6687],{"class":700},[145,19991,266],{"class":258},[145,19993,1139],{"class":155},[145,19995,405],{"class":262},[145,19997,19998],{"class":147,"line":454},[145,19999,375],{"emptyLinePlaceholder":58},[145,20001,20002,20004,20006],{"class":147,"line":465},[145,20003,17436],{"class":262},[145,20005,266],{"class":258},[145,20007,427],{"class":262},[145,20009,20010,20012,20014,20016,20018,20020,20022],{"class":147,"line":599},[145,20011,433],{"class":159},[145,20013,436],{"class":262},[145,20015,439],{"class":258},[145,20017,442],{"class":159},[145,20019,445],{"class":155},[145,20021,448],{"class":159},[145,20023,451],{"class":262},[145,20025,20026,20028,20030],{"class":147,"line":604},[145,20027,457],{"class":159},[145,20029,436],{"class":262},[145,20031,462],{"class":159},[145,20033,20034],{"class":147,"line":610},[145,20035,468],{"class":262},[145,20037,20038],{"class":147,"line":616},[145,20039,375],{"emptyLinePlaceholder":58},[145,20041,20042],{"class":147,"line":622},[145,20043,20044],{"class":174},"# Prompt templates keyed by style\n",[145,20046,20047,20050,20052],{"class":147,"line":627},[145,20048,20049],{"class":155},"STYLE_PROMPTS",[145,20051,390],{"class":258},[145,20053,427],{"class":262},[145,20055,20056,20059],{"class":147,"line":638},[145,20057,20058],{"class":159},"    \"rotation\"",[145,20060,1323],{"class":262},[145,20062,20063,20066,20069],{"class":147,"line":653},[145,20064,20065],{"class":159},"        \"@Image1 is a ",[145,20067,20068],{"class":155},"{name}",[145,20070,20071],{"class":159},". The product rotates slowly on a clean surface \"\n",[145,20073,20074],{"class":147,"line":659},[145,20075,20076],{"class":159},"        \"under professional studio lighting. Smooth 360-degree turntable \"\n",[145,20078,20079],{"class":147,"line":670},[145,20080,20081],{"class":159},"        \"rotation. Commercial product showcase quality.\"\n",[145,20083,20084],{"class":147,"line":697},[145,20085,3803],{"class":262},[145,20087,20088,20091],{"class":147,"line":709},[145,20089,20090],{"class":159},"    \"hero\"",[145,20092,1323],{"class":262},[145,20094,20095,20097,20099],{"class":147,"line":715},[145,20096,20065],{"class":159},[145,20098,20068],{"class":155},[145,20100,20101],{"class":159},". The product emerges dramatically from soft \"\n",[145,20103,20104],{"class":147,"line":721},[145,20105,20106],{"class":159},"        \"volumetric fog with a golden backlight. Particles drift upward. \"\n",[145,20108,20109],{"class":147,"line":727},[145,20110,20111],{"class":159},"        \"Cinematic slow reveal. Premium advertisement quality.\"\n",[145,20113,20114],{"class":147,"line":738},[145,20115,3803],{"class":262},[145,20117,20118,20121],{"class":147,"line":743},[145,20119,20120],{"class":159},"    \"lifestyle\"",[145,20122,1323],{"class":262},[145,20124,20125,20127,20129],{"class":147,"line":749},[145,20126,20065],{"class":159},[145,20128,20068],{"class":155},[145,20130,20131],{"class":159},". The product is shown in a natural lifestyle \"\n",[145,20133,20134],{"class":147,"line":766},[145,20135,20136],{"class":159},"        \"setting, being used in an everyday context. Warm natural lighting. \"\n",[145,20138,20139],{"class":147,"line":787},[145,20140,20141],{"class":159},"        \"Shallow depth of field. Authentic lifestyle commercial.\"\n",[145,20143,20144],{"class":147,"line":833},[145,20145,3803],{"class":262},[145,20147,20148,20151],{"class":147,"line":838},[145,20149,20150],{"class":159},"    \"macro\"",[145,20152,1323],{"class":262},[145,20154,20155,20157,20159],{"class":147,"line":844},[145,20156,20065],{"class":159},[145,20158,20068],{"class":155},[145,20160,20161],{"class":159},". Extreme macro close-up. The camera glides \"\n",[145,20163,20164],{"class":147,"line":862},[145,20165,20166],{"class":159},"        \"across the surface, revealing material texture and craftsmanship \"\n",[145,20168,20169],{"class":147,"line":871},[145,20170,20171],{"class":159},"        \"details. Shallow depth of field. Raking directional light. \"\n",[145,20173,20174],{"class":147,"line":886},[145,20175,20176],{"class":159},"        \"Luxury product detail shot.\"\n",[145,20178,20179],{"class":147,"line":902},[145,20180,3803],{"class":262},[145,20182,20183,20186],{"class":147,"line":914},[145,20184,20185],{"class":159},"    \"unboxing\"",[145,20187,1323],{"class":262},[145,20189,20190,20192,20194],{"class":147,"line":953},[145,20191,20065],{"class":159},[145,20193,20068],{"class":155},[145,20195,20196],{"class":159}," in retail packaging. Hands lift the lid to \"\n",[145,20198,20199],{"class":147,"line":959},[145,20200,20201],{"class":159},"        \"reveal the product inside. Tissue paper parts. The product is \"\n",[145,20203,20204],{"class":147,"line":964},[145,20205,20206],{"class":159},"        \"lifted out and displayed. Soft overhead lighting. Premium \"\n",[145,20208,20209],{"class":147,"line":970},[145,20210,20211],{"class":159},"        \"unboxing experience video.\"\n",[145,20213,20214],{"class":147,"line":976},[145,20215,3803],{"class":262},[145,20217,20218],{"class":147,"line":988},[145,20219,468],{"class":262},[145,20221,20222],{"class":147,"line":993},[145,20223,375],{"emptyLinePlaceholder":58},[145,20225,20226,20229,20231],{"class":147,"line":5402},[145,20227,20228],{"class":155},"STYLE_DEFAULTS",[145,20230,390],{"class":258},[145,20232,427],{"class":262},[145,20234,20235,20237,20240,20242,20244,20246,20248,20250,20252,20254],{"class":147,"line":5411},[145,20236,20058],{"class":159},[145,20238,20239],{"class":262},":  {",[145,20241,5825],{"class":159},[145,20243,436],{"class":262},[145,20245,3697],{"class":155},[145,20247,1448],{"class":262},[145,20249,6027],{"class":159},[145,20251,436],{"class":262},[145,20253,1385],{"class":159},[145,20255,19396],{"class":262},[145,20257,20258,20260,20263,20265,20267,20269,20271,20273,20275,20277],{"class":147,"line":5439},[145,20259,20090],{"class":159},[145,20261,20262],{"class":262},":      {",[145,20264,5825],{"class":159},[145,20266,436],{"class":262},[145,20268,536],{"class":155},[145,20270,399],{"class":262},[145,20272,6027],{"class":159},[145,20274,436],{"class":262},[145,20276,1385],{"class":159},[145,20278,19396],{"class":262},[145,20280,20281,20283,20286,20288,20290,20292,20294,20296,20298,20300],{"class":147,"line":5470},[145,20282,20120],{"class":159},[145,20284,20285],{"class":262},": {",[145,20287,5825],{"class":159},[145,20289,436],{"class":262},[145,20291,3697],{"class":155},[145,20293,1448],{"class":262},[145,20295,6027],{"class":159},[145,20297,436],{"class":262},[145,20299,3721],{"class":159},[145,20301,19396],{"class":262},[145,20303,20304,20306,20309,20311,20313,20315,20317,20319,20321,20323],{"class":147,"line":5490},[145,20305,20150],{"class":159},[145,20307,20308],{"class":262},":     {",[145,20310,5825],{"class":159},[145,20312,436],{"class":262},[145,20314,3697],{"class":155},[145,20316,1448],{"class":262},[145,20318,6027],{"class":159},[145,20320,436],{"class":262},[145,20322,1385],{"class":159},[145,20324,19396],{"class":262},[145,20326,20327,20329,20331,20333,20335,20337,20339,20341,20343,20345],{"class":147,"line":5496},[145,20328,20185],{"class":159},[145,20330,20239],{"class":262},[145,20332,5825],{"class":159},[145,20334,436],{"class":262},[145,20336,16229],{"class":155},[145,20338,399],{"class":262},[145,20340,6027],{"class":159},[145,20342,436],{"class":262},[145,20344,3721],{"class":159},[145,20346,19396],{"class":262},[145,20348,20349],{"class":147,"line":5502},[145,20350,468],{"class":262},[145,20352,20353],{"class":147,"line":5507},[145,20354,375],{"emptyLinePlaceholder":58},[145,20356,20357],{"class":147,"line":5520},[145,20358,375],{"emptyLinePlaceholder":58},[145,20360,20361,20363,20366,20369,20371,20374,20376,20379,20381,20383,20385],{"class":147,"line":5547},[145,20362,525],{"class":258},[145,20364,20365],{"class":151}," submit_video_task",[145,20367,20368],{"class":262},"(name: ",[145,20370,8531],{"class":155},[145,20372,20373],{"class":262},", image_url: ",[145,20375,8531],{"class":155},[145,20377,20378],{"class":262},", style: ",[145,20380,8531],{"class":155},[145,20382,15662],{"class":262},[145,20384,8531],{"class":155},[145,20386,859],{"class":262},[145,20388,20389],{"class":147,"line":5587},[145,20390,20391],{"class":159},"    \"\"\"Submit a single video generation task. Returns task_id.\"\"\"\n",[145,20393,20394,20397,20399,20402,20405,20407,20409,20412],{"class":147,"line":5606},[145,20395,20396],{"class":262},"    prompt_template ",[145,20398,266],{"class":258},[145,20400,20401],{"class":155}," STYLE_PROMPTS",[145,20403,20404],{"class":262},".get(style, ",[145,20406,20049],{"class":155},[145,20408,6982],{"class":262},[145,20410,20411],{"class":159},"\"rotation\"",[145,20413,1630],{"class":262},[145,20415,20416,20419,20421,20424,20426,20428,20430,20432],{"class":147,"line":5611},[145,20417,20418],{"class":262},"    defaults ",[145,20420,266],{"class":258},[145,20422,20423],{"class":155}," STYLE_DEFAULTS",[145,20425,20404],{"class":262},[145,20427,20228],{"class":155},[145,20429,6982],{"class":262},[145,20431,20411],{"class":159},[145,20433,1630],{"class":262},[145,20435,20436],{"class":147,"line":5616},[145,20437,375],{"emptyLinePlaceholder":58},[145,20439,20440,20442,20444],{"class":147,"line":5621},[145,20441,1295],{"class":262},[145,20443,266],{"class":258},[145,20445,427],{"class":262},[145,20447,20448,20450,20452,20454],{"class":147,"line":7274},[145,20449,1304],{"class":159},[145,20451,436],{"class":262},[145,20453,1309],{"class":159},[145,20455,451],{"class":262},[145,20457,20458,20460],{"class":147,"line":7296},[145,20459,2688],{"class":159},[145,20461,20462],{"class":262},": [image_url],\n",[145,20464,20465,20467,20470,20473,20475],{"class":147,"line":7302},[145,20466,1320],{"class":159},[145,20468,20469],{"class":262},": prompt_template.format(",[145,20471,20472],{"class":700},"name",[145,20474,266],{"class":258},[145,20476,20477],{"class":262},"name),\n",[145,20479,20480,20482,20485,20487],{"class":147,"line":7308},[145,20481,1348],{"class":159},[145,20483,20484],{"class":262},": defaults[",[145,20486,5825],{"class":159},[145,20488,10698],{"class":262},[145,20490,20491,20493,20495,20497],{"class":147,"line":7319},[145,20492,1364],{"class":159},[145,20494,436],{"class":262},[145,20496,3709],{"class":159},[145,20498,451],{"class":262},[145,20500,20501,20503,20505,20507],{"class":147,"line":7330},[145,20502,1380],{"class":159},[145,20504,20484],{"class":262},[145,20506,6027],{"class":159},[145,20508,10698],{"class":262},[145,20510,20511],{"class":147,"line":7341},[145,20512,1408],{"class":262},[145,20514,20515],{"class":147,"line":7346},[145,20516,375],{"emptyLinePlaceholder":58},[145,20518,20519,20521,20523],{"class":147,"line":7352},[145,20520,1126],{"class":262},[145,20522,266],{"class":258},[145,20524,1433],{"class":262},[145,20526,20527,20529,20531,20533,20535,20537,20539,20541,20544,20546,20548],{"class":147,"line":7360},[145,20528,1438],{"class":258},[145,20530,448],{"class":159},[145,20532,678],{"class":155},[145,20534,1445],{"class":159},[145,20536,399],{"class":262},[145,20538,17648],{"class":700},[145,20540,266],{"class":258},[145,20542,20543],{"class":262},"headers, ",[145,20545,1859],{"class":700},[145,20547,266],{"class":258},[145,20549,2788],{"class":262},[145,20551,20552],{"class":147,"line":7374},[145,20553,1484],{"class":262},[145,20555,20556],{"class":147,"line":7379},[145,20557,1146],{"class":262},[145,20559,20560,20562,20565,20567],{"class":147,"line":7393},[145,20561,1704],{"class":258},[145,20563,20564],{"class":262}," resp.json()[",[145,20566,7553],{"class":159},[145,20568,763],{"class":262},[145,20570,20571],{"class":147,"line":7407},[145,20572,375],{"emptyLinePlaceholder":58},[145,20574,20575],{"class":147,"line":7439},[145,20576,375],{"emptyLinePlaceholder":58},[145,20578,20579,20581,20583,20585,20587,20589,20591,20593,20595,20597,20599],{"class":147,"line":7451},[145,20580,525],{"class":258},[145,20582,11531],{"class":151},[145,20584,17566],{"class":262},[145,20586,8531],{"class":155},[145,20588,17582],{"class":262},[145,20590,17574],{"class":155},[145,20592,390],{"class":258},[145,20594,17589],{"class":155},[145,20596,15662],{"class":262},[145,20598,8656],{"class":155},[145,20600,859],{"class":262},[145,20602,20603],{"class":147,"line":7461},[145,20604,20605],{"class":159},"    \"\"\"Poll until task completes or fails.\"\"\"\n",[145,20607,20608,20610,20612],{"class":147,"line":7466},[145,20609,630],{"class":262},[145,20611,266],{"class":258},[145,20613,635],{"class":155},[145,20615,20616,20618,20620,20622],{"class":147,"line":7473},[145,20617,641],{"class":258},[145,20619,644],{"class":262},[145,20621,647],{"class":258},[145,20623,650],{"class":262},[145,20625,20626,20628,20630,20632,20634,20636,20638,20640,20642,20644,20646,20648,20650,20652,20654],{"class":147,"line":7495},[145,20627,6787],{"class":262},[145,20629,266],{"class":258},[145,20631,17627],{"class":262},[145,20633,439],{"class":258},[145,20635,448],{"class":159},[145,20637,678],{"class":155},[145,20639,681],{"class":159},[145,20641,684],{"class":155},[145,20643,687],{"class":262},[145,20645,690],{"class":155},[145,20647,448],{"class":159},[145,20649,399],{"class":262},[145,20651,17648],{"class":700},[145,20653,266],{"class":258},[145,20655,17653],{"class":262},[145,20657,20658],{"class":147,"line":7526},[145,20659,6814],{"class":262},[145,20661,20662,20664,20666],{"class":147,"line":7531},[145,20663,730],{"class":262},[145,20665,266],{"class":258},[145,20667,11615],{"class":262},[145,20669,20670],{"class":147,"line":7537},[145,20671,375],{"emptyLinePlaceholder":58},[145,20673,20674,20676,20678,20680,20682,20684,20686],{"class":147,"line":7562},[145,20675,847],{"class":258},[145,20677,757],{"class":262},[145,20679,760],{"class":159},[145,20681,14751],{"class":262},[145,20683,853],{"class":258},[145,20685,856],{"class":159},[145,20687,859],{"class":262},[145,20689,20690,20692],{"class":147,"line":7567},[145,20691,865],{"class":258},[145,20693,868],{"class":262},[145,20695,20696,20698,20700,20702,20704,20706,20708],{"class":147,"line":7572},[145,20697,874],{"class":258},[145,20699,757],{"class":262},[145,20701,760],{"class":159},[145,20703,14751],{"class":262},[145,20705,853],{"class":258},[145,20707,881],{"class":159},[145,20709,859],{"class":262},[145,20711,20712,20714,20716,20718,20720,20722,20724,20726,20728,20730,20732,20734,20736,20738,20740,20742],{"class":147,"line":7595},[145,20713,905],{"class":258},[145,20715,908],{"class":155},[145,20717,793],{"class":262},[145,20719,439],{"class":258},[145,20721,920],{"class":159},[145,20723,684],{"class":155},[145,20725,687],{"class":262},[145,20727,690],{"class":155},[145,20729,929],{"class":159},[145,20731,684],{"class":155},[145,20733,17758],{"class":262},[145,20735,11712],{"class":159},[145,20737,945],{"class":262},[145,20739,690],{"class":155},[145,20741,448],{"class":159},[145,20743,405],{"class":262},[145,20745,20746],{"class":147,"line":7605},[145,20747,375],{"emptyLinePlaceholder":58},[145,20749,20750,20752,20754],{"class":147,"line":7611},[145,20751,14888],{"class":262},[145,20753,1353],{"class":155},[145,20755,405],{"class":262},[145,20757,20758,20760,20762],{"class":147,"line":7629},[145,20759,979],{"class":262},[145,20761,982],{"class":258},[145,20763,20764],{"class":155}," 5\n",[145,20766,20767],{"class":147,"line":7634},[145,20768,375],{"emptyLinePlaceholder":58},[145,20770,20771,20773,20775,20777,20779,20781,20783,20785,20787,20789,20791,20793,20795,20797],{"class":147,"line":7639},[145,20772,996],{"class":258},[145,20774,999],{"class":155},[145,20776,793],{"class":262},[145,20778,439],{"class":258},[145,20780,920],{"class":159},[145,20782,684],{"class":155},[145,20784,687],{"class":262},[145,20786,690],{"class":155},[145,20788,1014],{"class":159},[145,20790,684],{"class":155},[145,20792,1019],{"class":262},[145,20794,690],{"class":155},[145,20796,1024],{"class":159},[145,20798,405],{"class":262},[145,20800,20801],{"class":147,"line":7652},[145,20802,375],{"emptyLinePlaceholder":58},[145,20804,20805],{"class":147,"line":7666},[145,20806,375],{"emptyLinePlaceholder":58},[145,20808,20809,20811,20813,20816,20818],{"class":147,"line":7693},[145,20810,525],{"class":258},[145,20812,1082],{"class":151},[145,20814,20815],{"class":262},"(url: ",[145,20817,8531],{"class":155},[145,20819,20820],{"class":262},", filepath: Path):\n",[145,20822,20823],{"class":147,"line":7707},[145,20824,20825],{"class":159},"    \"\"\"Download a video file from a URL.\"\"\"\n",[145,20827,20828,20830,20832,20834,20836,20838,20840],{"class":147,"line":10218},[145,20829,1126],{"class":262},[145,20831,266],{"class":258},[145,20833,1131],{"class":262},[145,20835,1134],{"class":700},[145,20837,266],{"class":258},[145,20839,1139],{"class":155},[145,20841,405],{"class":262},[145,20843,20844],{"class":147,"line":10225},[145,20845,1146],{"class":262},[145,20847,20848,20850,20852,20855,20857,20859,20861],{"class":147,"line":10271},[145,20849,1151],{"class":258},[145,20851,1154],{"class":155},[145,20853,20854],{"class":262},"(filepath, ",[145,20856,1160],{"class":159},[145,20858,1163],{"class":262},[145,20860,1166],{"class":258},[145,20862,1169],{"class":262},[145,20864,20865,20867,20869,20871,20873,20875,20877,20879],{"class":147,"line":10276},[145,20866,1174],{"class":258},[145,20868,1177],{"class":262},[145,20870,1180],{"class":258},[145,20872,1183],{"class":262},[145,20874,1186],{"class":700},[145,20876,266],{"class":258},[145,20878,1191],{"class":155},[145,20880,547],{"class":262},[145,20882,20883],{"class":147,"line":10281},[145,20884,1198],{"class":262},[145,20886,20887,20889,20891,20893,20896,20898,20901,20903,20905],{"class":147,"line":10290},[145,20888,1102],{"class":155},[145,20890,793],{"class":262},[145,20892,439],{"class":258},[145,20894,20895],{"class":159},"\"💾 Saved: ",[145,20897,684],{"class":155},[145,20899,20900],{"class":262},"filepath",[145,20902,690],{"class":155},[145,20904,448],{"class":159},[145,20906,405],{"class":262},[145,20908,20909],{"class":147,"line":10296},[145,20910,375],{"emptyLinePlaceholder":58},[145,20912,20913],{"class":147,"line":10305},[145,20914,375],{"emptyLinePlaceholder":58},[145,20916,20917,20919,20922,20925,20927,20930,20932,20934,20937],{"class":147,"line":10326},[145,20918,525],{"class":258},[145,20920,20921],{"class":151}," process_catalog",[145,20923,20924],{"class":262},"(csv_path: ",[145,20926,8531],{"class":155},[145,20928,20929],{"class":262},", max_retries: ",[145,20931,17574],{"class":155},[145,20933,390],{"class":258},[145,20935,20936],{"class":155}," 2",[145,20938,547],{"class":262},[145,20940,20941],{"class":147,"line":10335},[145,20942,20943],{"class":159},"    \"\"\"Process an entire product catalog CSV into videos.\"\"\"\n",[145,20945,20946],{"class":147,"line":10340},[145,20947,20948],{"class":174},"    # Phase 1: Submit all tasks\n",[145,20950,20951,20954,20956],{"class":147,"line":10353},[145,20952,20953],{"class":262},"    pending ",[145,20955,266],{"class":258},[145,20957,5735],{"class":262},[145,20959,20960,20962,20964,20967,20970,20972,20974],{"class":147,"line":10375},[145,20961,1151],{"class":258},[145,20963,1154],{"class":155},[145,20965,20966],{"class":262},"(csv_path, ",[145,20968,20969],{"class":159},"\"r\"",[145,20971,1163],{"class":262},[145,20973,1166],{"class":258},[145,20975,1169],{"class":262},[145,20977,20978,20981,20983],{"class":147,"line":10382},[145,20979,20980],{"class":262},"        reader ",[145,20982,266],{"class":258},[145,20984,20985],{"class":262}," csv.DictReader(f)\n",[145,20987,20988,20990,20993,20995],{"class":147,"line":10403},[145,20989,1174],{"class":258},[145,20991,20992],{"class":262}," row ",[145,20994,1180],{"class":258},[145,20996,20997],{"class":262}," reader:\n",[145,20999,21000,21003,21005,21008,21010],{"class":147,"line":10408},[145,21001,21002],{"class":262},"            name ",[145,21004,266],{"class":258},[145,21006,21007],{"class":262}," row[",[145,21009,19371],{"class":159},[145,21011,763],{"class":262},[145,21013,21014,21017,21019,21021,21024],{"class":147,"line":10413},[145,21015,21016],{"class":262},"            image_url ",[145,21018,266],{"class":258},[145,21020,21007],{"class":262},[145,21022,21023],{"class":159},"\"image_url\"",[145,21025,763],{"class":262},[145,21027,21028,21031,21033,21036,21039,21041,21043],{"class":147,"line":10419},[145,21029,21030],{"class":262},"            style ",[145,21032,266],{"class":258},[145,21034,21035],{"class":262}," row.get(",[145,21037,21038],{"class":159},"\"style\"",[145,21040,399],{"class":262},[145,21042,20411],{"class":159},[145,21044,405],{"class":262},[145,21046,21047],{"class":147,"line":10428},[145,21048,375],{"emptyLinePlaceholder":58},[145,21050,21051,21053,21055,21057,21059,21062,21064,21067],{"class":147,"line":10437},[145,21052,6836],{"class":258},[145,21054,4993],{"class":262},[145,21056,1180],{"class":258},[145,21058,4998],{"class":155},[145,21060,21061],{"class":262},"(max_retries ",[145,21063,5298],{"class":258},[145,21065,21066],{"class":155}," 1",[145,21068,547],{"class":262},[145,21070,21071,21074],{"class":147,"line":10448},[145,21072,21073],{"class":258},"                try",[145,21075,859],{"class":262},[145,21077,21078,21081,21083],{"class":147,"line":10455},[145,21079,21080],{"class":262},"                    task_id ",[145,21082,266],{"class":258},[145,21084,21085],{"class":262}," submit_video_task(name, image_url, style)\n",[145,21087,21088],{"class":147,"line":10460},[145,21089,21090],{"class":262},"                    pending.append({\n",[145,21092,21093,21096],{"class":147,"line":10465},[145,21094,21095],{"class":159},"                        \"name\"",[145,21097,21098],{"class":262},": name,\n",[145,21100,21101,21104],{"class":147,"line":10470},[145,21102,21103],{"class":159},"                        \"task_id\"",[145,21105,21106],{"class":262},": task_id,\n",[145,21108,21109,21112],{"class":147,"line":10475},[145,21110,21111],{"class":159},"                        \"style\"",[145,21113,21114],{"class":262},": style,\n",[145,21116,21117],{"class":147,"line":10486},[145,21118,21119],{"class":262},"                    })\n",[145,21121,21122,21125,21127,21129,21132,21134,21136,21138,21140,21142,21144,21146,21149,21151,21153,21155,21157],{"class":147,"line":10497},[145,21123,21124],{"class":155},"                    print",[145,21126,793],{"class":262},[145,21128,439],{"class":258},[145,21130,21131],{"class":159},"\"🎬 Submitted: ",[145,21133,684],{"class":155},[145,21135,20472],{"class":262},[145,21137,690],{"class":155},[145,21139,1218],{"class":159},[145,21141,684],{"class":155},[145,21143,11068],{"class":262},[145,21145,690],{"class":155},[145,21147,21148],{"class":159},") → ",[145,21150,684],{"class":155},[145,21152,687],{"class":262},[145,21154,690],{"class":155},[145,21156,448],{"class":159},[145,21158,405],{"class":262},[145,21160,21161,21164,21166,21168],{"class":147,"line":10508},[145,21162,21163],{"class":262},"                    time.sleep(",[145,21165,5308],{"class":155},[145,21167,19713],{"class":262},[145,21169,21170],{"class":174},"# Rate limiting: 1 request per second\n",[145,21172,21173],{"class":147,"line":10517},[145,21174,21175],{"class":258},"                    break\n",[145,21177,21178,21181,21184,21186],{"class":147,"line":10522},[145,21179,21180],{"class":258},"                except",[145,21182,21183],{"class":262}," requests.exceptions.RequestException ",[145,21185,1166],{"class":258},[145,21187,5517],{"class":262},[145,21189,21190,21193,21195,21197],{"class":147,"line":10528},[145,21191,21192],{"class":258},"                    if",[145,21194,4993],{"class":262},[145,21196,647],{"class":258},[145,21198,21199],{"class":262}," max_retries:\n",[145,21201,21202,21205,21207,21209,21212,21214,21216,21218,21220,21223,21225,21227,21229,21231,21233,21235,21237,21239],{"class":147,"line":10537},[145,21203,21204],{"class":155},"                        print",[145,21206,793],{"class":262},[145,21208,439],{"class":258},[145,21210,21211],{"class":159},"\"⚠️  Retry ",[145,21213,684],{"class":155},[145,21215,5327],{"class":262},[145,21217,5298],{"class":258},[145,21219,5332],{"class":155},[145,21221,21222],{"class":159}," for ",[145,21224,684],{"class":155},[145,21226,20472],{"class":262},[145,21228,690],{"class":155},[145,21230,436],{"class":159},[145,21232,684],{"class":155},[145,21234,5561],{"class":262},[145,21236,690],{"class":155},[145,21238,448],{"class":159},[145,21240,405],{"class":262},[145,21242,21243,21246,21248],{"class":147,"line":10581},[145,21244,21245],{"class":262},"                        time.sleep(",[145,21247,4927],{"class":155},[145,21249,405],{"class":262},[145,21251,21252,21255],{"class":147,"line":10594},[145,21253,21254],{"class":258},"                    else",[145,21256,859],{"class":262},[145,21258,21259,21261,21263,21265,21268,21270,21272,21274,21276,21278,21280,21282,21284],{"class":147,"line":10614},[145,21260,21204],{"class":155},[145,21262,793],{"class":262},[145,21264,439],{"class":258},[145,21266,21267],{"class":159},"\"❌ Failed to submit ",[145,21269,684],{"class":155},[145,21271,20472],{"class":262},[145,21273,690],{"class":155},[145,21275,436],{"class":159},[145,21277,684],{"class":155},[145,21279,5561],{"class":262},[145,21281,690],{"class":155},[145,21283,448],{"class":159},[145,21285,405],{"class":262},[145,21287,21288],{"class":147,"line":10619},[145,21289,375],{"emptyLinePlaceholder":58},[145,21291,21292],{"class":147,"line":10624},[145,21293,21294],{"class":174},"    # Phase 2: Collect results\n",[145,21296,21297,21299,21301],{"class":147,"line":10630},[145,21298,8297],{"class":262},[145,21300,266],{"class":258},[145,21302,5735],{"class":262},[145,21304,21305,21307,21310,21312],{"class":147,"line":10639},[145,21306,4990],{"class":258},[145,21308,21309],{"class":262}," item ",[145,21311,1180],{"class":258},[145,21313,21314],{"class":262}," pending:\n",[145,21316,21317,21319],{"class":147,"line":10648},[145,21318,5006],{"class":258},[145,21320,859],{"class":262},[145,21322,21323,21325,21327,21330,21332],{"class":147,"line":10659},[145,21324,8386],{"class":262},[145,21326,266],{"class":258},[145,21328,21329],{"class":262}," poll_task(item[",[145,21331,7553],{"class":159},[145,21333,1630],{"class":262},[145,21335,21336,21338,21340,21342,21345,21347,21349],{"class":147,"line":10666},[145,21337,7262],{"class":262},[145,21339,266],{"class":258},[145,21341,757],{"class":262},[145,21343,21344],{"class":159},"\"output\"",[145,21346,1563],{"class":262},[145,21348,14773],{"class":159},[145,21350,763],{"class":262},[145,21352,21353],{"class":147,"line":10671},[145,21354,375],{"emptyLinePlaceholder":58},[145,21356,21357],{"class":147,"line":10676},[145,21358,21359],{"class":174},"            # Generate safe filename\n",[145,21361,21362,21365,21367,21370,21372,21375,21378,21380,21383],{"class":147,"line":10682},[145,21363,21364],{"class":262},"            safe_name ",[145,21366,266],{"class":258},[145,21368,21369],{"class":262}," item[",[145,21371,19371],{"class":159},[145,21373,21374],{"class":262},"].lower().replace(",[145,21376,21377],{"class":159},"\" \"",[145,21379,399],{"class":262},[145,21381,21382],{"class":159},"\"-\"",[145,21384,405],{"class":262},[145,21386,21387,21390,21392,21394,21396,21398,21401,21403,21406,21408,21411,21414,21416,21418],{"class":147,"line":10687},[145,21388,21389],{"class":262},"            filename ",[145,21391,266],{"class":258},[145,21393,3358],{"class":258},[145,21395,448],{"class":159},[145,21397,684],{"class":155},[145,21399,21400],{"class":262},"safe_name",[145,21402,690],{"class":155},[145,21404,21405],{"class":159},"_",[145,21407,684],{"class":155},[145,21409,21410],{"class":262},"item[",[145,21412,21413],{"class":159},"'style'",[145,21415,1536],{"class":262},[145,21417,690],{"class":155},[145,21419,21420],{"class":159},".mp4\"\n",[145,21422,21423,21426,21428,21431,21434],{"class":147,"line":10701},[145,21424,21425],{"class":262},"            filepath ",[145,21427,266],{"class":258},[145,21429,21430],{"class":155}," OUTPUT_DIR",[145,21432,21433],{"class":258}," /",[145,21435,21436],{"class":262}," filename\n",[145,21438,21439],{"class":147,"line":10712},[145,21440,375],{"emptyLinePlaceholder":58},[145,21442,21443],{"class":147,"line":10721},[145,21444,21445],{"class":262},"            download_video(video_url, filepath)\n",[145,21447,21448],{"class":147,"line":10726},[145,21449,21450],{"class":262},"            results.append({\n",[145,21452,21453,21456,21459,21461],{"class":147,"line":10731},[145,21454,21455],{"class":159},"                \"name\"",[145,21457,21458],{"class":262},": item[",[145,21460,19371],{"class":159},[145,21462,10698],{"class":262},[145,21464,21465,21468,21470,21472],{"class":147,"line":10740},[145,21466,21467],{"class":159},"                \"style\"",[145,21469,21458],{"class":262},[145,21471,21038],{"class":159},[145,21473,10698],{"class":262},[145,21475,21476,21479,21481,21483],{"class":147,"line":10765},[145,21477,21478],{"class":159},"                \"file\"",[145,21480,436],{"class":262},[145,21482,8531],{"class":155},[145,21484,21485],{"class":262},"(filepath),\n",[145,21487,21488,21491,21493],{"class":147,"line":10778},[145,21489,21490],{"class":159},"                \"status\"",[145,21492,436],{"class":262},[145,21494,21495],{"class":159},"\"success\"\n",[145,21497,21498],{"class":147,"line":10796},[145,21499,21500],{"class":262},"            })\n",[145,21502,21503,21505,21507,21509],{"class":147,"line":10801},[145,21504,5405],{"class":258},[145,21506,6920],{"class":155},[145,21508,6923],{"class":258},[145,21510,5517],{"class":262},[145,21512,21513,21515,21517,21519,21522,21524,21526,21528,21530,21532,21534,21536,21538,21540,21542],{"class":147,"line":10806},[145,21514,5442],{"class":155},[145,21516,793],{"class":262},[145,21518,439],{"class":258},[145,21520,21521],{"class":159},"\"❌ Failed: ",[145,21523,684],{"class":155},[145,21525,21410],{"class":262},[145,21527,19668],{"class":159},[145,21529,1536],{"class":262},[145,21531,690],{"class":155},[145,21533,436],{"class":159},[145,21535,684],{"class":155},[145,21537,5561],{"class":262},[145,21539,690],{"class":155},[145,21541,448],{"class":159},[145,21543,405],{"class":262},[145,21545,21546],{"class":147,"line":10812},[145,21547,21450],{"class":262},[145,21549,21550,21552,21554,21556],{"class":147,"line":10822},[145,21551,21455],{"class":159},[145,21553,21458],{"class":262},[145,21555,19371],{"class":159},[145,21557,10698],{"class":262},[145,21559,21560,21562,21564,21566],{"class":147,"line":10831},[145,21561,21467],{"class":159},[145,21563,21458],{"class":262},[145,21565,21038],{"class":159},[145,21567,10698],{"class":262},[145,21569,21570,21572,21574,21577],{"class":147,"line":10842},[145,21571,21478],{"class":159},[145,21573,436],{"class":262},[145,21575,21576],{"class":155},"None",[145,21578,451],{"class":262},[145,21580,21581,21583,21585,21587,21590,21592,21594,21596],{"class":147,"line":10849},[145,21582,21490],{"class":159},[145,21584,436],{"class":262},[145,21586,439],{"class":258},[145,21588,21589],{"class":159},"\"error: ",[145,21591,684],{"class":155},[145,21593,5561],{"class":262},[145,21595,690],{"class":155},[145,21597,950],{"class":159},[145,21599,21600],{"class":147,"line":10855},[145,21601,21500],{"class":262},[145,21603,21604],{"class":147,"line":10861},[145,21605,375],{"emptyLinePlaceholder":58},[145,21607,21608],{"class":147,"line":10866},[145,21609,21610],{"class":174},"    # Summary\n",[145,21612,21613,21616,21618,21620,21622,21624,21626,21629,21631,21633,21635,21638,21640,21642,21644,21647],{"class":147,"line":10877},[145,21614,21615],{"class":262},"    success ",[145,21617,266],{"class":258},[145,21619,8631],{"class":155},[145,21621,793],{"class":262},[145,21623,5308],{"class":155},[145,21625,6253],{"class":258},[145,21627,21628],{"class":262}," r ",[145,21630,1180],{"class":258},[145,21632,8645],{"class":262},[145,21634,1720],{"class":258},[145,21636,21637],{"class":262}," r[",[145,21639,760],{"class":159},[145,21641,14751],{"class":262},[145,21643,853],{"class":258},[145,21645,21646],{"class":159}," \"success\"",[145,21648,405],{"class":262},[145,21650,21651,21653,21655,21657,21659,21661,21664,21666,21669,21671,21673,21675,21678,21680,21683],{"class":147,"line":10888},[145,21652,1102],{"class":155},[145,21654,793],{"class":262},[145,21656,439],{"class":258},[145,21658,448],{"class":159},[145,21660,1671],{"class":155},[145,21662,21663],{"class":159},"📊 Complete: ",[145,21665,684],{"class":155},[145,21667,21668],{"class":262},"success",[145,21670,690],{"class":155},[145,21672,1226],{"class":159},[145,21674,6129],{"class":155},[145,21676,21677],{"class":262},"(results)",[145,21679,690],{"class":155},[145,21681,21682],{"class":159}," videos generated\"",[145,21684,405],{"class":262},[145,21686,21687,21689],{"class":147,"line":10899},[145,21688,1704],{"class":258},[145,21690,8702],{"class":262},[145,21692,21693],{"class":147,"line":10908},[145,21694,375],{"emptyLinePlaceholder":58},[145,21696,21697],{"class":147,"line":10913},[145,21698,375],{"emptyLinePlaceholder":58},[145,21700,21701],{"class":147,"line":10918},[145,21702,21703],{"class":174},"# Run it\n",[145,21705,21706,21709,21711,21714,21717],{"class":147,"line":10927},[145,21707,21708],{"class":262},"results ",[145,21710,266],{"class":258},[145,21712,21713],{"class":262}," process_catalog(",[145,21715,21716],{"class":159},"\"products.csv\"",[145,21718,405],{"class":262},[11,21720,21721],{},"パイプラインは2つのフェーズで動作します。フェーズ 1 はすべてのタスクを（レート制限付きで）高速に送信し、タスク ID を保存します。フェーズ 2 は各タスクをポーリングし、結果をダウンロードします。これにより並列性が最大化されます — すべての動画がサーバーサイドで同時に生成されます。",[92,21723,21724],{"id":21724},"ポーリングの代わりにコールバックを使用",[11,21726,21727,21728,21730,21731,1769],{},"大規模なカタログ（100商品以上）では、ポーリングは非効率になります。",[28,21729,3599],{}," パラメータを使用して、各動画の完了時に Webhook を受信します。完全な Webhook ペイロード仕様については、",[37,21732,21733],{"href":14209},"API ドキュメントのコールバックパラメータ",[136,21735,21737],{"className":337,"code":21736,"language":339,"meta":141,"style":141},"payload = {\n    \"model\": \"seedance-2.0\",\n    \"image_urls\": [\"https://your-cdn.com/products/item.jpg\"],\n    \"prompt\": \"@Image1 is a product. Smooth rotation. Studio lighting.\",\n    \"duration\": 8,\n    \"quality\": \"1080p\",\n    \"aspect_ratio\": \"16:9\",\n    \"callback_url\": \"https://your-server.com/webhooks/video-ready\"\n}\n",[28,21738,21739,21747,21757,21768,21779,21789,21799,21809,21818],{"__ignoreMap":141},[145,21740,21741,21743,21745],{"class":147,"line":148},[145,21742,3660],{"class":262},[145,21744,266],{"class":258},[145,21746,427],{"class":262},[145,21748,21749,21751,21753,21755],{"class":147,"line":166},[145,21750,3669],{"class":159},[145,21752,436],{"class":262},[145,21754,1309],{"class":159},[145,21756,451],{"class":262},[145,21758,21759,21761,21763,21766],{"class":147,"line":178},[145,21760,15206],{"class":159},[145,21762,10692],{"class":262},[145,21764,21765],{"class":159},"\"https://your-cdn.com/products/item.jpg\"",[145,21767,10698],{"class":262},[145,21769,21770,21772,21774,21777],{"class":147,"line":187},[145,21771,3680],{"class":159},[145,21773,436],{"class":262},[145,21775,21776],{"class":159},"\"@Image1 is a product. Smooth rotation. Studio lighting.\"",[145,21778,451],{"class":262},[145,21780,21781,21783,21785,21787],{"class":147,"line":372},[145,21782,3692],{"class":159},[145,21784,436],{"class":262},[145,21786,3697],{"class":155},[145,21788,451],{"class":262},[145,21790,21791,21793,21795,21797],{"class":147,"line":378},[145,21792,3704],{"class":159},[145,21794,436],{"class":262},[145,21796,3709],{"class":159},[145,21798,451],{"class":262},[145,21800,21801,21803,21805,21807],{"class":147,"line":384},[145,21802,3716],{"class":159},[145,21804,436],{"class":262},[145,21806,1385],{"class":159},[145,21808,451],{"class":262},[145,21810,21811,21813,21815],{"class":147,"line":408},[145,21812,6369],{"class":159},[145,21814,436],{"class":262},[145,21816,21817],{"class":159},"\"https://your-server.com/webhooks/video-ready\"\n",[145,21819,21820],{"class":147,"line":419},[145,21821,468],{"class":262},[11,21823,21824],{},"Webhook エンドポイントは、動画 URL を含む完了したタスクオブジェクトの POST を受信します。これによりポーリングが完全に排除され、結果を非同期で処理できます — 動画のダウンロード、商品データベースの更新、CDN へのプッシュを1つの Webhook ハンドラーで実行できます。",[92,21826,21827],{"id":21827},"パイプラインのヒント",[96,21829,21830,21836,21842,21848,21858,21864],{},[73,21831,21832,21835],{},[23,21833,21834],{},"レート制限："," リクエストは1秒に1回に抑えてください。バーストでの送信はスロットリングを引き起こす可能性があります。",[73,21837,21838,21841],{},[23,21839,21840],{},"動画 URL の有効期限："," 24時間以内にダウンロードしてください。上記のパイプラインは即座にダウンロードしますが、コールバックを使用する場合は、Webhook ハンドラーが迅速にダウンロードするようにしてください。",[73,21843,21844,21847],{},[23,21845,21846],{},"リトライロジック："," ネットワークエラーは発生します。パイプラインは失敗した送信を3秒のバックオフで最大2回リトライします。",[73,21849,21850,21853,21854,21857],{},[23,21851,21852],{},"出力の整理："," ファイル名規則 ",[28,21855,21856],{},"{product-name}_{style}.mp4"," により、動画ライブラリが閲覧しやすくなります。商品ごとに複数のアスペクト比を生成する場合は、ファイル名にアスペクト比を追加してください。",[73,21859,21860,21863],{},[23,21861,21862],{},"冪等性："," どの商品にすでに動画があるかを追跡してください。タスクを送信する前に、出力ファイルがすでに存在するか確認します。これにより、部分的な失敗後にパイプラインを再実行した際の重複生成を防げます。",[73,21865,21866,21869,21870,21873],{},[23,21867,21868],{},"コスト監視："," 実行ごとに生成された動画数をログに記録してください。動画1本あたり数セントなのでコストは低く抑えられますが、暴走ループや設定ミスの CSV が意図せず数千のリクエストを送信する可能性があります。確認プロンプトや ",[28,21871,21872],{},"--dry-run"," フラグを追加してください。",[92,21875,21876],{"id":21876},"基本を超えたスケーリング",[11,21878,21879],{},"1,000 SKU を超えるカタログの場合、以下の強化を検討してください：",[11,21881,21882,21885,21886,21889],{},[23,21883,21884],{},"並行ポーリング。"," 上記のパイプラインはタスクを順次ポーリングします。Python の ",[28,21887,21888],{},"concurrent.futures.ThreadPoolExecutor"," を使用して複数のタスクを並列でポーリングし、合計の経過時間を短縮します。",[11,21891,21892,21895,21896,21898],{},[23,21893,21894],{},"データベーストラッキング。"," インメモリの ",[28,21897,2261],{}," リストを、実行間で永続化される SQLite データベースまたはシンプルな JSON ファイルに置き換えます。タスク ID、完了ステータス、出力ファイルパス、タイムスタンプを追跡します。これにより、中断後にパイプラインを再開できます。",[11,21900,21901,21904],{},[23,21902,21903],{},"CDN アップロード。"," ダウンロード後、CDN（S3、CloudFront、Cloudflare R2）に自動アップロードし、パブリック URL を保存します。これにより、ホスティングインフラへのファイル転送の手作業が不要になります。",[11,21906,21907,21910],{},[23,21908,21909],{},"メタデータ生成。"," 動画と一緒に JSON マニフェストを生成し、商品名、動画タイプ、アスペクト比、duration、CDN URL を含めます。このマニフェストは、自動化されたリスティング更新のために CMS や商品情報管理（PIM）システムに直接フィードされます。",[48,21912,21914],{"id":21913},"ec-向けプロンプトテンプレートライブラリ","EC 向けプロンプトテンプレートライブラリ",[11,21916,21917,21918,21920],{},"最も一般的な EC 商品カテゴリー向けのコピー＆ペースト対応プロンプトです。各テンプレートは指定された商品タイプ用に設計されており、そのカテゴリーの商品写真と直接使用できます。",[28,21919,20068],{}," プレースホルダーに商品名を入れ替えてください。",[136,21922,21924],{"className":337,"code":21923,"language":339,"meta":141,"style":141},"ECOMMERCE_PROMPTS = {\n    \"jewelry\": {\n        \"prompt\": (\n            \"@Image1 is {name}. Extreme close-up on a black velvet surface. \"\n            \"The piece rotates slowly under pinpoint spotlights. Light refracts \"\n            \"through gemstones, casting prismatic reflections. Shallow depth of \"\n            \"field. The camera pulls back to reveal the full piece. Luxury \"\n            \"jewelry advertisement quality.\"\n        ),\n        \"duration\": 10,\n        \"aspect_ratio\": \"1:1\",\n    },\n    \"electronics\": {\n        \"prompt\": (\n            \"@Image1 is {name}. The device sits on a minimal desk setup. \"\n            \"Screen illuminates, casting a soft glow. Camera orbits slowly, \"\n            \"showing ports, buttons, and build quality from every angle. \"\n            \"Clean, modern aesthetic. Tech product showcase.\"\n        ),\n        \"duration\": 10,\n        \"aspect_ratio\": \"16:9\",\n    },\n    \"apparel\": {\n        \"prompt\": (\n            \"@Image1 is {name}. The garment is displayed on an invisible \"\n            \"mannequin form, rotating slowly. Fabric moves naturally with \"\n            \"gentle airflow, showing drape and texture. Soft diffused \"\n            \"studio lighting. Clean white background. Fashion e-commerce \"\n            \"product video.\"\n        ),\n        \"duration\": 8,\n        \"aspect_ratio\": \"9:16\",\n    },\n    \"food_beverage\": {\n        \"prompt\": (\n            \"@Image1 is {name}. Steam rises gently. Camera pushes in slowly \"\n            \"from a wide tabletop shot to an appetizing close-up. Warm, \"\n            \"golden-hour lighting. Shallow depth of field. Ingredients or \"\n            \"garnishes are visible in beautiful detail. Food photography \"\n            \"in motion.\"\n        ),\n        \"duration\": 8,\n        \"aspect_ratio\": \"1:1\",\n    },\n    \"furniture\": {\n        \"prompt\": (\n            \"@Image1 is {name}. Placed in a styled modern living room with \"\n            \"natural light streaming through large windows. Camera dollies \"\n            \"slowly around the piece, showing form and proportion in context. \"\n            \"Warm afternoon light. Interior design showcase quality.\"\n        ),\n        \"duration\": 10,\n        \"aspect_ratio\": \"16:9\",\n    },\n    \"cosmetics\": {\n        \"prompt\": (\n            \"@Image1 is {name}. The product sits on a marble surface with \"\n            \"soft pink and gold tones. A gentle pour or squeeze dispenses \"\n            \"the product, showing color and texture. Macro close-up of the \"\n            \"formula. Smooth, luxurious pacing. Beauty brand advertisement.\"\n        ),\n        \"duration\": 8,\n        \"aspect_ratio\": \"9:16\",\n    },\n    \"sports_gear\": {\n        \"prompt\": (\n            \"@Image1 is {name}. Dynamic presentation against a dark \"\n            \"background with dramatic side lighting. The product rotates \"\n            \"with energy — quick cuts between angles showing key features. \"\n            \"Subtle motion graphics energy. Athletic brand commercial style.\"\n        ),\n        \"duration\": 8,\n        \"aspect_ratio\": \"16:9\",\n    },\n    \"home_decor\": {\n        \"prompt\": (\n            \"@Image1 is {name}. Displayed in a curated shelf vignette with \"\n            \"complementary objects. Soft natural light. Camera slowly racks \"\n            \"focus from background to the product. Cozy, aspirational \"\n            \"interior styling. Lifestyle brand aesthetic.\"\n        ),\n        \"duration\": 8,\n        \"aspect_ratio\": \"1:1\",\n    },\n}\n\n\ndef generate_from_template(category: str, name: str, image_url: str) -> dict:\n    \"\"\"Generate a video using a category-specific prompt template.\"\"\"\n    template = ECOMMERCE_PROMPTS[category]\n    payload = {\n        \"model\": \"seedance-2.0\",\n        \"image_urls\": [image_url],\n        \"prompt\": template[\"prompt\"].format(name=name),\n        \"duration\": template[\"duration\"],\n        \"quality\": \"1080p\",\n        \"aspect_ratio\": template[\"aspect_ratio\"],\n    }\n    return create_and_wait(payload)\n\n\n# Example usage\nresult = generate_from_template(\n    category=\"jewelry\",\n    name=\"18K gold pendant necklace with emerald\",\n    image_url=\"https://your-cdn.com/products/emerald-pendant.jpg\"\n)\n",[28,21925,21926,21935,21942,21948,21958,21963,21968,21973,21978,21982,21992,22002,22007,22014,22020,22029,22034,22039,22044,22048,22058,22068,22072,22079,22085,22094,22099,22104,22109,22114,22118,22128,22138,22142,22149,22155,22164,22169,22174,22179,22184,22188,22198,22208,22212,22219,22225,22234,22239,22244,22249,22253,22263,22273,22277,22284,22290,22299,22304,22309,22314,22318,22328,22338,22342,22349,22355,22364,22369,22374,22379,22383,22393,22403,22407,22414,22420,22429,22434,22439,22444,22448,22458,22468,22472,22476,22480,22484,22511,22516,22529,22537,22547,22553,22571,22581,22591,22601,22605,22611,22615,22619,22624,22633,22645,22657,22667],{"__ignoreMap":141},[145,21927,21928,21931,21933],{"class":147,"line":148},[145,21929,21930],{"class":155},"ECOMMERCE_PROMPTS",[145,21932,390],{"class":258},[145,21934,427],{"class":262},[145,21936,21937,21940],{"class":147,"line":166},[145,21938,21939],{"class":159},"    \"jewelry\"",[145,21941,1944],{"class":262},[145,21943,21944,21946],{"class":147,"line":178},[145,21945,1320],{"class":159},[145,21947,1323],{"class":262},[145,21949,21950,21953,21955],{"class":147,"line":187},[145,21951,21952],{"class":159},"            \"@Image1 is ",[145,21954,20068],{"class":155},[145,21956,21957],{"class":159},". Extreme close-up on a black velvet surface. \"\n",[145,21959,21960],{"class":147,"line":372},[145,21961,21962],{"class":159},"            \"The piece rotates slowly under pinpoint spotlights. Light refracts \"\n",[145,21964,21965],{"class":147,"line":378},[145,21966,21967],{"class":159},"            \"through gemstones, casting prismatic reflections. Shallow depth of \"\n",[145,21969,21970],{"class":147,"line":384},[145,21971,21972],{"class":159},"            \"field. The camera pulls back to reveal the full piece. Luxury \"\n",[145,21974,21975],{"class":147,"line":408},[145,21976,21977],{"class":159},"            \"jewelry advertisement quality.\"\n",[145,21979,21980],{"class":147,"line":419},[145,21981,1343],{"class":262},[145,21983,21984,21986,21988,21990],{"class":147,"line":430},[145,21985,1348],{"class":159},[145,21987,436],{"class":262},[145,21989,536],{"class":155},[145,21991,451],{"class":262},[145,21993,21994,21996,21998,22000],{"class":147,"line":454},[145,21995,1380],{"class":159},[145,21997,436],{"class":262},[145,21999,5999],{"class":159},[145,22001,451],{"class":262},[145,22003,22004],{"class":147,"line":465},[145,22005,22006],{"class":262},"    },\n",[145,22008,22009,22012],{"class":147,"line":599},[145,22010,22011],{"class":159},"    \"electronics\"",[145,22013,1944],{"class":262},[145,22015,22016,22018],{"class":147,"line":604},[145,22017,1320],{"class":159},[145,22019,1323],{"class":262},[145,22021,22022,22024,22026],{"class":147,"line":610},[145,22023,21952],{"class":159},[145,22025,20068],{"class":155},[145,22027,22028],{"class":159},". The device sits on a minimal desk setup. \"\n",[145,22030,22031],{"class":147,"line":616},[145,22032,22033],{"class":159},"            \"Screen illuminates, casting a soft glow. Camera orbits slowly, \"\n",[145,22035,22036],{"class":147,"line":622},[145,22037,22038],{"class":159},"            \"showing ports, buttons, and build quality from every angle. \"\n",[145,22040,22041],{"class":147,"line":627},[145,22042,22043],{"class":159},"            \"Clean, modern aesthetic. Tech product showcase.\"\n",[145,22045,22046],{"class":147,"line":638},[145,22047,1343],{"class":262},[145,22049,22050,22052,22054,22056],{"class":147,"line":653},[145,22051,1348],{"class":159},[145,22053,436],{"class":262},[145,22055,536],{"class":155},[145,22057,451],{"class":262},[145,22059,22060,22062,22064,22066],{"class":147,"line":659},[145,22061,1380],{"class":159},[145,22063,436],{"class":262},[145,22065,1385],{"class":159},[145,22067,451],{"class":262},[145,22069,22070],{"class":147,"line":670},[145,22071,22006],{"class":262},[145,22073,22074,22077],{"class":147,"line":697},[145,22075,22076],{"class":159},"    \"apparel\"",[145,22078,1944],{"class":262},[145,22080,22081,22083],{"class":147,"line":709},[145,22082,1320],{"class":159},[145,22084,1323],{"class":262},[145,22086,22087,22089,22091],{"class":147,"line":715},[145,22088,21952],{"class":159},[145,22090,20068],{"class":155},[145,22092,22093],{"class":159},". The garment is displayed on an invisible \"\n",[145,22095,22096],{"class":147,"line":721},[145,22097,22098],{"class":159},"            \"mannequin form, rotating slowly. Fabric moves naturally with \"\n",[145,22100,22101],{"class":147,"line":727},[145,22102,22103],{"class":159},"            \"gentle airflow, showing drape and texture. Soft diffused \"\n",[145,22105,22106],{"class":147,"line":738},[145,22107,22108],{"class":159},"            \"studio lighting. Clean white background. Fashion e-commerce \"\n",[145,22110,22111],{"class":147,"line":743},[145,22112,22113],{"class":159},"            \"product video.\"\n",[145,22115,22116],{"class":147,"line":749},[145,22117,1343],{"class":262},[145,22119,22120,22122,22124,22126],{"class":147,"line":766},[145,22121,1348],{"class":159},[145,22123,436],{"class":262},[145,22125,3697],{"class":155},[145,22127,451],{"class":262},[145,22129,22130,22132,22134,22136],{"class":147,"line":787},[145,22131,1380],{"class":159},[145,22133,436],{"class":262},[145,22135,3721],{"class":159},[145,22137,451],{"class":262},[145,22139,22140],{"class":147,"line":833},[145,22141,22006],{"class":262},[145,22143,22144,22147],{"class":147,"line":838},[145,22145,22146],{"class":159},"    \"food_beverage\"",[145,22148,1944],{"class":262},[145,22150,22151,22153],{"class":147,"line":844},[145,22152,1320],{"class":159},[145,22154,1323],{"class":262},[145,22156,22157,22159,22161],{"class":147,"line":862},[145,22158,21952],{"class":159},[145,22160,20068],{"class":155},[145,22162,22163],{"class":159},". Steam rises gently. Camera pushes in slowly \"\n",[145,22165,22166],{"class":147,"line":871},[145,22167,22168],{"class":159},"            \"from a wide tabletop shot to an appetizing close-up. Warm, \"\n",[145,22170,22171],{"class":147,"line":886},[145,22172,22173],{"class":159},"            \"golden-hour lighting. Shallow depth of field. Ingredients or \"\n",[145,22175,22176],{"class":147,"line":902},[145,22177,22178],{"class":159},"            \"garnishes are visible in beautiful detail. Food photography \"\n",[145,22180,22181],{"class":147,"line":914},[145,22182,22183],{"class":159},"            \"in motion.\"\n",[145,22185,22186],{"class":147,"line":953},[145,22187,1343],{"class":262},[145,22189,22190,22192,22194,22196],{"class":147,"line":959},[145,22191,1348],{"class":159},[145,22193,436],{"class":262},[145,22195,3697],{"class":155},[145,22197,451],{"class":262},[145,22199,22200,22202,22204,22206],{"class":147,"line":964},[145,22201,1380],{"class":159},[145,22203,436],{"class":262},[145,22205,5999],{"class":159},[145,22207,451],{"class":262},[145,22209,22210],{"class":147,"line":970},[145,22211,22006],{"class":262},[145,22213,22214,22217],{"class":147,"line":976},[145,22215,22216],{"class":159},"    \"furniture\"",[145,22218,1944],{"class":262},[145,22220,22221,22223],{"class":147,"line":988},[145,22222,1320],{"class":159},[145,22224,1323],{"class":262},[145,22226,22227,22229,22231],{"class":147,"line":993},[145,22228,21952],{"class":159},[145,22230,20068],{"class":155},[145,22232,22233],{"class":159},". Placed in a styled modern living room with \"\n",[145,22235,22236],{"class":147,"line":5402},[145,22237,22238],{"class":159},"            \"natural light streaming through large windows. Camera dollies \"\n",[145,22240,22241],{"class":147,"line":5411},[145,22242,22243],{"class":159},"            \"slowly around the piece, showing form and proportion in context. \"\n",[145,22245,22246],{"class":147,"line":5439},[145,22247,22248],{"class":159},"            \"Warm afternoon light. Interior design showcase quality.\"\n",[145,22250,22251],{"class":147,"line":5470},[145,22252,1343],{"class":262},[145,22254,22255,22257,22259,22261],{"class":147,"line":5490},[145,22256,1348],{"class":159},[145,22258,436],{"class":262},[145,22260,536],{"class":155},[145,22262,451],{"class":262},[145,22264,22265,22267,22269,22271],{"class":147,"line":5496},[145,22266,1380],{"class":159},[145,22268,436],{"class":262},[145,22270,1385],{"class":159},[145,22272,451],{"class":262},[145,22274,22275],{"class":147,"line":5502},[145,22276,22006],{"class":262},[145,22278,22279,22282],{"class":147,"line":5507},[145,22280,22281],{"class":159},"    \"cosmetics\"",[145,22283,1944],{"class":262},[145,22285,22286,22288],{"class":147,"line":5520},[145,22287,1320],{"class":159},[145,22289,1323],{"class":262},[145,22291,22292,22294,22296],{"class":147,"line":5547},[145,22293,21952],{"class":159},[145,22295,20068],{"class":155},[145,22297,22298],{"class":159},". The product sits on a marble surface with \"\n",[145,22300,22301],{"class":147,"line":5587},[145,22302,22303],{"class":159},"            \"soft pink and gold tones. A gentle pour or squeeze dispenses \"\n",[145,22305,22306],{"class":147,"line":5606},[145,22307,22308],{"class":159},"            \"the product, showing color and texture. Macro close-up of the \"\n",[145,22310,22311],{"class":147,"line":5611},[145,22312,22313],{"class":159},"            \"formula. Smooth, luxurious pacing. Beauty brand advertisement.\"\n",[145,22315,22316],{"class":147,"line":5616},[145,22317,1343],{"class":262},[145,22319,22320,22322,22324,22326],{"class":147,"line":5621},[145,22321,1348],{"class":159},[145,22323,436],{"class":262},[145,22325,3697],{"class":155},[145,22327,451],{"class":262},[145,22329,22330,22332,22334,22336],{"class":147,"line":7274},[145,22331,1380],{"class":159},[145,22333,436],{"class":262},[145,22335,3721],{"class":159},[145,22337,451],{"class":262},[145,22339,22340],{"class":147,"line":7296},[145,22341,22006],{"class":262},[145,22343,22344,22347],{"class":147,"line":7302},[145,22345,22346],{"class":159},"    \"sports_gear\"",[145,22348,1944],{"class":262},[145,22350,22351,22353],{"class":147,"line":7308},[145,22352,1320],{"class":159},[145,22354,1323],{"class":262},[145,22356,22357,22359,22361],{"class":147,"line":7319},[145,22358,21952],{"class":159},[145,22360,20068],{"class":155},[145,22362,22363],{"class":159},". Dynamic presentation against a dark \"\n",[145,22365,22366],{"class":147,"line":7330},[145,22367,22368],{"class":159},"            \"background with dramatic side lighting. The product rotates \"\n",[145,22370,22371],{"class":147,"line":7341},[145,22372,22373],{"class":159},"            \"with energy — quick cuts between angles showing key features. \"\n",[145,22375,22376],{"class":147,"line":7346},[145,22377,22378],{"class":159},"            \"Subtle motion graphics energy. Athletic brand commercial style.\"\n",[145,22380,22381],{"class":147,"line":7352},[145,22382,1343],{"class":262},[145,22384,22385,22387,22389,22391],{"class":147,"line":7360},[145,22386,1348],{"class":159},[145,22388,436],{"class":262},[145,22390,3697],{"class":155},[145,22392,451],{"class":262},[145,22394,22395,22397,22399,22401],{"class":147,"line":7374},[145,22396,1380],{"class":159},[145,22398,436],{"class":262},[145,22400,1385],{"class":159},[145,22402,451],{"class":262},[145,22404,22405],{"class":147,"line":7379},[145,22406,22006],{"class":262},[145,22408,22409,22412],{"class":147,"line":7393},[145,22410,22411],{"class":159},"    \"home_decor\"",[145,22413,1944],{"class":262},[145,22415,22416,22418],{"class":147,"line":7407},[145,22417,1320],{"class":159},[145,22419,1323],{"class":262},[145,22421,22422,22424,22426],{"class":147,"line":7439},[145,22423,21952],{"class":159},[145,22425,20068],{"class":155},[145,22427,22428],{"class":159},". Displayed in a curated shelf vignette with \"\n",[145,22430,22431],{"class":147,"line":7451},[145,22432,22433],{"class":159},"            \"complementary objects. Soft natural light. Camera slowly racks \"\n",[145,22435,22436],{"class":147,"line":7461},[145,22437,22438],{"class":159},"            \"focus from background to the product. Cozy, aspirational \"\n",[145,22440,22441],{"class":147,"line":7466},[145,22442,22443],{"class":159},"            \"interior styling. Lifestyle brand aesthetic.\"\n",[145,22445,22446],{"class":147,"line":7473},[145,22447,1343],{"class":262},[145,22449,22450,22452,22454,22456],{"class":147,"line":7495},[145,22451,1348],{"class":159},[145,22453,436],{"class":262},[145,22455,3697],{"class":155},[145,22457,451],{"class":262},[145,22459,22460,22462,22464,22466],{"class":147,"line":7526},[145,22461,1380],{"class":159},[145,22463,436],{"class":262},[145,22465,5999],{"class":159},[145,22467,451],{"class":262},[145,22469,22470],{"class":147,"line":7531},[145,22471,22006],{"class":262},[145,22473,22474],{"class":147,"line":7537},[145,22475,468],{"class":262},[145,22477,22478],{"class":147,"line":7562},[145,22479,375],{"emptyLinePlaceholder":58},[145,22481,22482],{"class":147,"line":7567},[145,22483,375],{"emptyLinePlaceholder":58},[145,22485,22486,22488,22491,22494,22496,22499,22501,22503,22505,22507,22509],{"class":147,"line":7572},[145,22487,525],{"class":258},[145,22489,22490],{"class":151}," generate_from_template",[145,22492,22493],{"class":262},"(category: ",[145,22495,8531],{"class":155},[145,22497,22498],{"class":262},", name: ",[145,22500,8531],{"class":155},[145,22502,20373],{"class":262},[145,22504,8531],{"class":155},[145,22506,15662],{"class":262},[145,22508,8656],{"class":155},[145,22510,859],{"class":262},[145,22512,22513],{"class":147,"line":7595},[145,22514,22515],{"class":159},"    \"\"\"Generate a video using a category-specific prompt template.\"\"\"\n",[145,22517,22518,22521,22523,22526],{"class":147,"line":7605},[145,22519,22520],{"class":262},"    template ",[145,22522,266],{"class":258},[145,22524,22525],{"class":155}," ECOMMERCE_PROMPTS",[145,22527,22528],{"class":262},"[category]\n",[145,22530,22531,22533,22535],{"class":147,"line":7611},[145,22532,1295],{"class":262},[145,22534,266],{"class":258},[145,22536,427],{"class":262},[145,22538,22539,22541,22543,22545],{"class":147,"line":7629},[145,22540,1304],{"class":159},[145,22542,436],{"class":262},[145,22544,1309],{"class":159},[145,22546,451],{"class":262},[145,22548,22549,22551],{"class":147,"line":7634},[145,22550,2688],{"class":159},[145,22552,20462],{"class":262},[145,22554,22555,22557,22560,22562,22565,22567,22569],{"class":147,"line":7639},[145,22556,1320],{"class":159},[145,22558,22559],{"class":262},": template[",[145,22561,5780],{"class":159},[145,22563,22564],{"class":262},"].format(",[145,22566,20472],{"class":700},[145,22568,266],{"class":258},[145,22570,20477],{"class":262},[145,22572,22573,22575,22577,22579],{"class":147,"line":7652},[145,22574,1348],{"class":159},[145,22576,22559],{"class":262},[145,22578,5825],{"class":159},[145,22580,10698],{"class":262},[145,22582,22583,22585,22587,22589],{"class":147,"line":7666},[145,22584,1364],{"class":159},[145,22586,436],{"class":262},[145,22588,3709],{"class":159},[145,22590,451],{"class":262},[145,22592,22593,22595,22597,22599],{"class":147,"line":7693},[145,22594,1380],{"class":159},[145,22596,22559],{"class":262},[145,22598,6027],{"class":159},[145,22600,10698],{"class":262},[145,22602,22603],{"class":147,"line":7707},[145,22604,1408],{"class":262},[145,22606,22607,22609],{"class":147,"line":10218},[145,22608,1704],{"class":258},[145,22610,18096],{"class":262},[145,22612,22613],{"class":147,"line":10225},[145,22614,375],{"emptyLinePlaceholder":58},[145,22616,22617],{"class":147,"line":10271},[145,22618,375],{"emptyLinePlaceholder":58},[145,22620,22621],{"class":147,"line":10276},[145,22622,22623],{"class":174},"# Example usage\n",[145,22625,22626,22628,22630],{"class":147,"line":10281},[145,22627,12078],{"class":262},[145,22629,266],{"class":258},[145,22631,22632],{"class":262}," generate_from_template(\n",[145,22634,22635,22638,22640,22643],{"class":147,"line":10290},[145,22636,22637],{"class":700},"    category",[145,22639,266],{"class":258},[145,22641,22642],{"class":159},"\"jewelry\"",[145,22644,451],{"class":262},[145,22646,22647,22650,22652,22655],{"class":147,"line":10296},[145,22648,22649],{"class":700},"    name",[145,22651,266],{"class":258},[145,22653,22654],{"class":159},"\"18K gold pendant necklace with emerald\"",[145,22656,451],{"class":262},[145,22658,22659,22662,22664],{"class":147,"line":10305},[145,22660,22661],{"class":700},"    image_url",[145,22663,266],{"class":258},[145,22665,22666],{"class":159},"\"https://your-cdn.com/products/emerald-pendant.jpg\"\n",[145,22668,22669],{"class":147,"line":10326},[145,22670,405],{"class":262},[11,22672,22673,22674,22677],{},"これらのテンプレートは出発点です。ライティングの記述やカメラワークをブランドのビジュアルアイデンティティに合わせて調整してください。",[37,22675,22676],{"href":1767},"完全なプロンプトガイド","では、Seedance 2.0 の出力を微調整するための高度なテクニックを解説しています。",[92,22679,22680],{"id":22680},"ブランドに合わせたテンプレートのカスタマイズ",[11,22682,22683],{},"すべてのブランドにはビジュアル言語があります。Apple はクリーンな白い環境と精密でゆっくりとしたカメラワークを使用します。Nike はダイナミックなハイコントラストライティングと速いカットを使用します。商品動画は、ブランドの確立された美学を反映すべきです。",[11,22685,22686],{},"以下の軸に沿ってテンプレートを修正してください：",[96,22688,22689,22695,22701,22707],{},[73,22690,22691,22694],{},[23,22692,22693],{},"ライティングトーン："," アーティザン/ラグジュアリーブランドにはウォーム（ゴールド、アンバー）。テックにはクール（ブルー、シルバー）。ミニマリストブランドにはニュートラル（ホワイト、ソフト）。",[73,22696,22697,22700],{},[23,22698,22699],{},"カメラスピード："," プレミアムなポジショニングにはゆっくりとした意図的な動き。若者向けやスポーツブランドにはより速くダイナミックな動き。",[73,22702,22703,22706],{},[23,22704,22705],{},"背景："," ダークな背景はラグジュアリーを示す。白い背景はクリーン/モダンを示す。環境的な背景はライフスタイルを示す。",[73,22708,22709,22712],{},[23,22710,22711],{},"ペーシングのボキャブラリー："," \"Slow, measured\" vs. \"dynamic, energetic\" vs. \"calm, meditative\" — これらの言葉がモデルの出力テンポに直接影響します。",[11,22714,22715],{},"ブランドのマスタープロンプトプレフィックス — すべての商品動画プロンプトの前に追加する用語のセット — を構築し、カタログ全体に一貫して適用してください。これにより、単一のスタジオセットアップから得られる一貫性を模倣し、数百の商品動画にわたる視覚的な統一感が生まれます。",[48,22717,13137],{"id":13136},[92,22719,22721],{"id":22720},"商品動画の生成にはいくらかかりますか","商品動画の生成にはいくらかかりますか？",[11,22723,22724,22725,22730],{},"料金は duration と品質設定に依存します。1080p 品質の標準的な8秒動画は数セントです。カタログ全体で500本の商品動画を生成しても、ほとんどの設定で $100 をはるかに下回ります。現在のレートは ",[37,22726,22729],{"href":22727,"rel":22728},"https://evolink.ai/pricing",[41],"EvoLink の料金ページ","で確認してください。スタジオが動画1本あたり $500〜$2,000 を請求するのと比較すると、API のコストはどのスケールでも事実上無視できる水準です。",[92,22732,22734],{"id":22733},"実際の人物モデル写真を入力として使用できますか","実際の人物モデル写真を入力として使用できますか？",[11,22736,22737],{},"Seedance 2.0 には、ディープフェイクの悪用を防ぐため、リアルな人物の顔の生成に制限があります。商品のみの写真は制限なく使用できます。商品を人物と一緒に表示する必要がある場合 — モデルが着用する衣服、手首の腕時計 — フォトリアリスティックな肖像画ではなく、イラストやスタイライズされた人物の参照を使用してください。あるいは、プロンプトで人物の要素を記述し（例：\"a hand reaches into frame\"）、顔写真を入力として提供する代わりにモデルに生成させてください。",[92,22739,22741],{"id":22740},"動画生成にはどのくらい時間がかかりますか","動画生成にはどのくらい時間がかかりますか？",[11,22743,22744,22745,22747],{},"一般的な生成時間は、duration と品質設定に応じて60〜180秒です。720p の5秒動画は約1分で完了します。1080p の15秒動画は最大3分かかる場合があります。このガイドのバッチパイプラインは、ポーリングを通じてタイミングを自動的に処理します。本番システムでは、ポーリングの代わりに ",[28,22746,3599],{}," パラメータを使用して完了時に Webhook を受信してください。",[92,22749,22751],{"id":22750},"ブランドロゴやテキストオーバーレイを追加できますか","ブランドロゴやテキストオーバーレイを追加できますか？",[11,22753,22754],{},"2つのアプローチが有効です。まず、プロンプトにテキストの記述を含めます — \"Brand name fades in at the end\" や \"Logo watermark in lower right corner\"。モデルはテキスト風の要素を生成できますが、正確なタイポグラフィは保証されません。2つ目の、より確実な方法として、テキストなしで動画を生成し、FFmpeg、After Effects、または任意の動画編集ツールを使用してポストプロダクションでロゴ、タイトル、ローワーサードを合成します。2つ目のアプローチにより、ブランドアセットを正確にコントロールできます。",[92,22756,22758],{"id":22757},"動画品質は商用利用に十分ですか","動画品質は商用利用に十分ですか？",[11,22760,22761],{},"1080p 品質では、出力は商品リスティング、ソーシャルメディア広告、Web サイトのヒーローセクションに適しています。ビジュアル品質は、ほとんどの EC チームが基本的なスタジオセットアップで制作するものと同等か、それ以上です。ハイエンドのブランドキャンペーンやテレビ放送では、AI 生成動画をプリビズまたは出発点として使用し、従来のポストプロダクションで磨きをかけることをお勧めします。EC のユースケースの大部分 — Amazon、Shopify、ソーシャル広告、メールキャンペーン — では、出力はそのまま本番利用可能です。",[92,22763,22765],{"id":22764},"入力に最適な画像フォーマットと解像度は","入力に最適な画像フォーマットと解像度は？",[11,22767,22768],{},"JPEG と PNG の両方が使用できます。透明背景を持つ PNG は、クリーンな背景置換が必要な商品に理想的です。解像度については、利用可能な最高品質のソース画像を提供してください — 最低1024x1024ピクセル。モデルは高解像度の入力からより多くのディテールを抽出します。これはマクロクローズアップや回転動画で特に顕著です。目に見えるアーティファクトを持つ過度に圧縮された JPEG は避けてください。これらは生成された動画にそのまま持ち越されます。",[92,22770,22772],{"id":22771},"オーディオや音楽付きの動画を生成できますか","オーディオや音楽付きの動画を生成できますか？",[11,22774,208,22775,22777,22778,22780,22781,1769],{},[28,22776,1824],{}," パラメータをサポートしており、動画にコンテキストに応じた効果音を追加します。商品動画では、アンビエントなスタジオサウンドや控えめなスウーシュがプレミアム感を高めることができます。ただし、ほとんどの EC プラットフォームは動画を無音で自動再生するため、ビジュアル品質の方がはるかに重要です。特定の音楽やナレーションが必要な場合は、ポストプロダクションで追加してください。API はオーディオガイド生成用の ",[28,22779,3583],{}," もサポートしています — 詳細は",[37,22782,22784],{"href":22783},"/docs/multimodal-reference","マルチモーダルリファレンスドキュメント",[92,22786,22788],{"id":22787},"shopify-や-amazon-とどのように統合しますか","Shopify や Amazon とどのように統合しますか？",[11,22790,22791,22792,22794,22795,22797],{},"ワークフローは：動画を生成 → MP4 をダウンロード → プラットフォームにアップロードです。Shopify の場合、管理画面または Shopify API を通じて商品メディアに直接動画をアップロードします。Amazon の場合、Seller Central の「動画の管理」セクションまたは SP-API を通じてアップロードします。フルループを自動化するには、",[28,22793,3599],{}," 付きのバッチパイプラインを使用します — Webhook ハンドラーが動画をダウンロードし、プラットフォームの API に自動的にプッシュできます。",[37,22796,22784],{"href":22783},"では、インテグレーション構築のための完全な API レスポンスフォーマットを解説しています。",[48,22799,22801],{"id":22800},"スタジオから-api-へ新しい動画パイプライン","スタジオから API へ：新しい動画パイプライン",[11,22803,22804],{},"5種類の動画タイプが EC 商品動画の全スペクトラムをカバーします：商品ページ用の360°回転、ローンチ用のヒーローショット、感情的なつながりのためのライフスタイルコンテキスト、品質認識のためのマクロクローズアップ、ソーシャルコンテンツ用の開封リビール。各タイプに必要なのは、1枚の商品写真と1回の API コールです。",[11,22806,22807],{},"バッチパイプラインは CSV カタログを完全な動画ライブラリに変換します。マルチプラットフォーム書き出しは、チャネルが必要とするすべてのアスペクト比を一括で生成します。プロンプトテンプレートライブラリは、あらゆる商品カテゴリーのコピー＆ペースト対応の出発点を提供します。",[11,22809,22810],{},"ワークフロー全体 — 商品写真からすべての販売チャネルでの公開動画まで — が数週間から数時間に圧縮されます。1人の開発者が、以前は制作チーム、スタジオ、ポストプロダクション編集者を必要としていた動画パイプラインを運用できます。",[11,22812,22813],{},"これは従来の動画制作に対する段階的な改善ではありません。構造的な変化です。EC 動画のボトルネックはクリエイティブなビジョンではありませんでした。コストとロジスティクスでした。1本の動画が数セントで2分で完成するとき、問いは「どの商品に動画が必要か？」から「なぜすべての商品に動画がないのか？」に変わります。",[11,22815,22816],{},"1つの商品から始めましょう。回転動画を生成してください。3分で結果を確認できます。そしてカタログ全体にスケールしてください。1本の動画を生成するのも1万本を生成するのも、API は同じです。",[11,22818,22819,22820],{},"動画制作パイプラインを置き換えましょう。",[37,22821,22823],{"href":211,"rel":22822},[41],"EvoLink に無料登録 →",[45,22825],{},[11,22827,22828],{},[2619,22829,22830,22831,22833,22834,22833,22836,22833,22838],{},"このシリーズの過去の記事：",[37,22832,2212],{"href":1767}," · ",[37,22835,2968],{"href":2967},[37,22837,18986],{"href":3855},[37,22839,22840],{"href":3381},"画像から動画チュートリアル",[11068,22842,22843],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}html pre.shiki code .snl16, html code.shiki .snl16{--shiki-default:#F97583}html pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}html pre.shiki code .s9osk, html code.shiki .s9osk{--shiki-default:#FFAB70}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}",{"title":141,"searchDepth":166,"depth":166,"links":22845},[22846,22849,22850,22854,22858,22862,22866,22871,22876,22881,22884,22894],{"id":17223,"depth":166,"text":17224,"children":22847},[22848],{"id":17348,"depth":178,"text":17348},{"id":17357,"depth":166,"text":17358},{"id":17971,"depth":166,"text":17972,"children":22851},[22852,22853],{"id":18132,"depth":178,"text":18132},{"id":18196,"depth":178,"text":18196},{"id":18235,"depth":166,"text":18236,"children":22855},[22856,22857],{"id":18367,"depth":178,"text":18367},{"id":18409,"depth":178,"text":18409},{"id":18451,"depth":166,"text":18452,"children":22859},[22860,22861],{"id":18622,"depth":178,"text":18622},{"id":18711,"depth":178,"text":18712},{"id":18760,"depth":166,"text":18761,"children":22863},[22864,22865],{"id":18894,"depth":178,"text":18894},{"id":18932,"depth":178,"text":18932},{"id":18989,"depth":166,"text":18990,"children":22867},[22868,22869,22870],{"id":19126,"depth":178,"text":19126},{"id":19159,"depth":178,"text":19159},{"id":19168,"depth":178,"text":19168},{"id":19206,"depth":166,"text":19207,"children":22872},[22873,22874,22875],{"id":19346,"depth":178,"text":19346},{"id":19802,"depth":178,"text":19802},{"id":19811,"depth":178,"text":19811},{"id":19855,"depth":166,"text":19856,"children":22877},[22878,22879,22880],{"id":21724,"depth":178,"text":21724},{"id":21827,"depth":178,"text":21827},{"id":21876,"depth":178,"text":21876},{"id":21913,"depth":166,"text":21914,"children":22882},[22883],{"id":22680,"depth":178,"text":22680},{"id":13136,"depth":166,"text":13137,"children":22885},[22886,22887,22888,22889,22890,22891,22892,22893],{"id":22720,"depth":178,"text":22721},{"id":22733,"depth":178,"text":22734},{"id":22740,"depth":178,"text":22741},{"id":22750,"depth":178,"text":22751},{"id":22757,"depth":178,"text":22758},{"id":22764,"depth":178,"text":22765},{"id":22771,"depth":178,"text":22772},{"id":22787,"depth":178,"text":22788},{"id":22800,"depth":166,"text":22801},"Seedance 2.0 API を使って商品写真から EC 向け動画を生成。5 種類の動画タイプ、バッチパイプライン、マルチプラットフォーム書き出し。完全な Python コード付き。",{"date":22897,"image":22898,"seoTitle":22899},"2026-02-21","/s7-hero-ecommerce-product-videos.webp","Seedance 2.0 API で EC 向け AI 商品動画を作成 | チュートリアル","/ja/blog/seedance-2-ecommerce-product-videos",{"title":17209,"description":22895},"ja/blog/seedance-2-ecommerce-product-videos","Mk_XguKx2zGdtTocX1Klc6T_N8j5dkjYoOy08DdCJXc",{"id":22905,"title":22906,"body":22907,"description":30178,"extension":11130,"meta":30179,"navigation":58,"path":30182,"seo":30183,"stem":30184,"__hash__":30185},"content/ja/blog/seedance-2-image-to-video-api.md","Seedance 2.0 画像から動画 API：あらゆる画像を完全制御でアニメーション化",{"type":8,"value":22908,"toc":30107},[22909,22913,22916,22923,22925,22929,22932,22939,22942,23063,23068,23074,23079,23083,23086,23095,23098,23101,23108,23111,23114,23116,23120,23126,23130,23144,23153,23157,23169,23172,23176,23255,23262,23272,23275,23278,23564,23576,23581,23583,23587,23590,23592,23601,23627,23634,23638,24168,24178,24182,24186,24194,24200,24204,24209,24216,24219,24222,24225,24230,24236,24241,24247,24262,24265,24318,24326,24328,24332,24339,24342,24347,24361,24368,24370,24373,24405,24409,24925,24929,24934,24941,24944,24947,24953,24963,24969,24975,25019,25021,25025,25031,25035,25040,25046,25049,25055,25058,25062,25639,25643,25647,25654,25660,25664,25669,25764,25768,25773,25780,25786,25793,25795,25798,25808,25811,25817,26272,26276,26280,26287,26290,26293,26299,26307,26313,26322,26381,26390,26394,26397,27389,27397,27400,27403,27409,27415,27426,27428,27432,27439,27442,27445,27462,27465,27476,27480,27483,28012,28016,28020,28027,28030,28033,28039,28244,28248,28252,28259,28262,28265,28268,28855,28861,28864,28867,29026,29028,29031,29034,29038,29050,29056,29061,29124,29128,29133,29138,29143,29206,29210,29215,29220,29225,29271,29275,29280,29285,29302,29307,29345,29404,29408,29415,29423,29494,29498,29503,29508,29513,29661,29663,29667,29672,29677,29686,29739,29741,29745,29748,29951,29973,29975,29977,29981,29984,29988,29997,30001,30006,30010,30025,30029,30038,30042,30051,30055,30061,30063,30066,30073,30076,30082,30090,30092,30105],[22910,22911,22906],"h1",{"id":22912},"seedance-20-画像から動画-apiあらゆる画像を完全制御でアニメーション化",[11,22914,22915],{},"ハードドライブに眠っている1枚の商品写真では、何の反応も生みません。しかし、その商品がスタジオ照明の下で回転し、同期された音声が付いた10秒の動画であれば、クリック、シェア、そして売上を生み出します。Seedance 2.0 の画像から動画 API は、たった1回の POST リクエストで、あらゆる静止画像を完全に制御可能な動画に変換します。",[11,22917,22918,22919,22922],{},"このガイドでは、3つの異なる画像から動画モードを解説します：単一画像アニメーション、最初と最後のフレーム補間、そして ",[28,22920,22921],{},"@tag"," 参照を使ったマルチ画像合成です。各セクションには、完全に実行可能な Python コード、実際のデモ出力、そしてそれらを生成した正確なプロンプトが含まれています。",[45,22924],{},[48,22926,22928],{"id":22927},"seedance-20-の画像から動画が他と異なる理由","Seedance 2.0 の画像から動画が他と異なる理由",[11,22930,22931],{},"主要な AI 動画プラットフォームはすべて、何らかの画像から動画生成機能を提供しています。Sora は単一画像を開始フレームとして受け取ります。Kling は基本的なモーション制御による画像アニメーションを提供します。Veo 2 はスタイルガイダンスのための画像コンディショニングをサポートしています。これらはすべて同じ表面的な問題を解決しています：画像を動くピクセルに変換するということです。",[11,22933,22934,22935,22938],{},"Seedance 2.0 はまったく異なる問題を解決します。単一の生成リクエスト内で複数の画像に対する",[23,22936,22937],{},"構成的制御","を提供します。そして、これを他の API では現在実現できないタグシステムによって行います。",[92,22940,22941],{"id":22941},"主な違い",[2037,22943,22944,22959],{},[2040,22945,22946],{},[2043,22947,22948,22951,22953,22955,22957],{},[2046,22949,22950],{},"機能",[2046,22952,17055],{},[2046,22954,13727],{},[2046,22956,17039],{},[2046,22958,17219],{},[2053,22960,22961,22974,22988,23002,23021,23035,23048],{},[2043,22962,22963,22966,22968,22970,22972],{},[2058,22964,22965],{},"単一画像 → 動画",[2058,22967,13681],{},[2058,22969,13681],{},[2058,22971,13681],{},[2058,22973,13681],{},[2043,22975,22976,22979,22981,22984,22986],{},[2058,22977,22978],{},"最初と最後のフレーム制御",[2058,22980,13664],{},[2058,22982,22983],{},"✅ (限定的)",[2058,22985,13664],{},[2058,22987,13681],{},[2043,22989,22990,22993,22995,22997,22999],{},[2058,22991,22992],{},"マルチ画像合成",[2058,22994,13664],{},[2058,22996,13664],{},[2058,22998,13664],{},[2058,23000,23001],{},"✅ (最大9枚)",[2043,23003,23004,23007,23009,23011,23013],{},[2058,23005,23006],{},"画像ごとの役割割り当て",[2058,23008,13664],{},[2058,23010,13664],{},[2058,23012,13664],{},[2058,23014,23015,23016,399,23018,23020],{},"✅ (",[28,23017,2909],{},[28,23019,2919],{},"…)",[2043,23022,23023,23026,23028,23030,23032],{},[2058,23024,23025],{},"ミックスメディア (画像 + 動画 + 音声)",[2058,23027,13664],{},[2058,23029,13664],{},[2058,23031,13664],{},[2058,23033,23034],{},"✅ (最大12ファイル)",[2043,23036,23037,23040,23042,23044,23046],{},[2058,23038,23039],{},"ネイティブ音声生成",[2058,23041,13664],{},[2058,23043,13664],{},[2058,23045,13664],{},[2058,23047,13681],{},[2043,23049,23050,23053,23056,23058,23061],{},[2058,23051,23052],{},"API ファーストアクセス",[2058,23054,23055],{},"ウェイトリスト",[2058,23057,13681],{},[2058,23059,23060],{},"限定的",[2058,23062,13681],{},[11,23064,23065,23067],{},[28,23066,22921],{}," システムが Seedance 2.0 の優位性を発揮するポイントです。3枚の画像をアップロードする際、次のようなプロンプトを書くことができます：",[136,23069,23072],{"className":23070,"code":23071,"language":2186},[2184],"@Image1 is the main character. @Image2 is the background environment.\n@Image3 is the art style reference. The character walks through the environment\nin the style of @Image3.\n",[28,23073,23071],{"__ignoreMap":141},[11,23075,23076,23077,1261],{},"各画像に特定の意味的役割が割り当てられます。モデルはどの画像がキャラクターでどの画像が背景かを推測する必要がありません。明示的に指示するからです。このタグシステムの詳細については、",[37,23078,2968],{"href":2967},[92,23080,23082],{"id":23081},"開発者にとって-tags-が重要な理由","開発者にとって @Tags が重要な理由",[11,23084,23085],{},"他の画像から動画 API を使ったことがある方なら、そのフラストレーションをご存知でしょう：複数の画像をアップロードして、モデルが意図を理解してくれることを期待するしかありません。背景画像がキャラクターとして使われることもあります。すべての画像が一貫性のない混合物に融合されることもあります。モデルが各入力をどのように解釈するかを制御できないため、デバッグする方法がありません。",[11,23087,23088,23090,23091,23094],{},[28,23089,22921],{}," システムはこの不確実性を排除します。本質的には変数バインディングシステムです。各入力に名前を付け、指示の中で明示的に参照します。これにより、画像から動画の生成が",[23,23092,23093],{},"決定論的で再現可能","になります。同じ入力、同じタグ、同じプロンプトで、常に同じ意味的解釈が得られます。",[11,23096,23097],{},"本番パイプラインにおいて、これは「試して結果を見る」と「設定してそのままデプロイする」の違いです。テンプレートを構築し、出力を検証し、構成全体が予測不能に変化することなく特定の要素を反復的に改善できます。",[92,23099,23100],{"id":23100},"ネイティブ音声が出力を変える",[11,23102,23103,23104,23107],{},"ほとんどの AI 画像から動画ツールは無音のクリップを生成します。その後、別の音声生成ステップ、別の API コール、そして音声を合成するための動画編集パスが必要になります。Seedance 2.0 は ",[28,23105,23106],{},"generate_audio: true"," を設定することで、同じリクエストの一部として同期された音声を生成します。足音は歩行動作に一致します。風の音は屋外シーンに一致します。これにより、ポストプロダクションの工程がまるごと不要になります。",[92,23109,23110],{"id":23110},"できないこと",[11,23112,23113],{},"Seedance 2.0 は画像から動画生成において、リアルな人間の顔をサポートしていません。入力画像にフォトリアリスティックな人間の顔が含まれている場合、API は自動的にリクエストを拒否します。イラストキャラクター、様式化された顔、アニメキャラクター、フォトリアリスティックでないポートレートはすべて問題なく動作します。これは技術的な制限ではなく、意図的な安全上の制約です。",[45,23115],{},[48,23117,23119],{"id":23118},"クイックセットアップapi-キーと環境構築","クイックセットアップ：API キーと環境構築",[11,23121,23122,23123,23125],{},"必要なものは3つだけです：EvoLink アカウント、API キー、そして ",[28,23124,112],{}," ライブラリです。セットアップ全体は1分以内で完了します。",[92,23127,23129],{"id":23128},"ステップ-1api-キーを取得する","ステップ 1：API キーを取得する",[70,23131,23132,23138,23141],{},[73,23133,23134,23137],{},[37,23135,11806],{"href":211,"rel":23136},[41]," にアクセスして無料アカウントを作成します",[73,23139,23140],{},"ダッシュボードの API Keys セクションに移動します",[73,23142,23143],{},"新しいキーを生成してコピーします",[11,23145,23146,23147,23149,23150],{},"キーは ",[28,23148,244],{}," で始まり、次のような形式です：",[28,23151,23152],{},"sk-XpXn...Ms1N",[92,23154,23156],{"id":23155},"ステップ-2依存関係をインストールする","ステップ 2：依存関係をインストールする",[136,23158,23159],{"className":138,"code":317,"language":140,"meta":141,"style":141},[28,23160,23161],{"__ignoreMap":141},[145,23162,23163,23165,23167],{"class":147,"line":148},[145,23164,190],{"class":151},[145,23166,193],{"class":159},[145,23168,328],{"class":159},[11,23170,23171],{},"以上です。SDK のインストールも、複雑な認証フローも不要です。API は標準的な REST と Bearer トークン認証を使用します。",[92,23173,23175],{"id":23174},"ステップ-3python-環境を設定する","ステップ 3：Python 環境を設定する",[136,23177,23179],{"className":337,"code":23178,"language":339,"meta":141,"style":141},"import requests\nimport time\nimport json\n\nAPI_KEY = \"YOUR_API_KEY\"\nBASE_URL = \"https://api.evolink.ai/v1\"\nHEADERS = {\n    \"Authorization\": f\"Bearer {API_KEY}\",\n    \"Content-Type\": \"application/json\"\n}\n",[28,23180,23181,23187,23193,23199,23203,23211,23219,23227,23243,23251],{"__ignoreMap":141},[145,23182,23183,23185],{"class":147,"line":148},[145,23184,346],{"class":258},[145,23186,328],{"class":262},[145,23188,23189,23191],{"class":147,"line":166},[145,23190,346],{"class":258},[145,23192,355],{"class":262},[145,23194,23195,23197],{"class":147,"line":178},[145,23196,346],{"class":258},[145,23198,369],{"class":262},[145,23200,23201],{"class":147,"line":187},[145,23202,375],{"emptyLinePlaceholder":58},[145,23204,23205,23207,23209],{"class":147,"line":372},[145,23206,387],{"class":155},[145,23208,390],{"class":258},[145,23210,17419],{"class":159},[145,23212,23213,23215,23217],{"class":147,"line":378},[145,23214,411],{"class":155},[145,23216,390],{"class":258},[145,23218,416],{"class":159},[145,23220,23221,23223,23225],{"class":147,"line":384},[145,23222,422],{"class":155},[145,23224,390],{"class":258},[145,23226,427],{"class":262},[145,23228,23229,23231,23233,23235,23237,23239,23241],{"class":147,"line":408},[145,23230,433],{"class":159},[145,23232,436],{"class":262},[145,23234,439],{"class":258},[145,23236,442],{"class":159},[145,23238,445],{"class":155},[145,23240,448],{"class":159},[145,23242,451],{"class":262},[145,23244,23245,23247,23249],{"class":147,"line":419},[145,23246,457],{"class":159},[145,23248,436],{"class":262},[145,23250,462],{"class":159},[145,23252,23253],{"class":147,"line":430},[145,23254,468],{"class":262},[11,23256,23257,23258,23261],{},"このガイドのすべてのコード例は、これら3つの変数を基盤としています。",[28,23259,23260],{},"YOUR_API_KEY"," を実際のキーに置き換えれば、生成の準備は完了です。",[18,23263,23264],{},[11,23265,23266],{},[23,23267,23268],{},[37,23269,23271],{"href":211,"rel":23270},[41],"無料の EvoLink API キーを取得する →",[92,23273,23274],{"id":23274},"ポーリングヘルパー",[11,23276,23277],{},"動画生成には60〜180秒かかるため、完了を確認するためのポーリング関数が必要です。このヘルパーは3つの画像から動画モードすべてで動作します：",[136,23279,23281],{"className":337,"code":23280,"language":339,"meta":141,"style":141},"def wait_for_video(task_id, interval=5, max_wait=300):\n    \"\"\"Poll the task endpoint until the video is ready.\"\"\"\n    url = f\"{BASE_URL}/tasks/{task_id}\"\n    elapsed = 0\n\n    while elapsed \u003C max_wait:\n        resp = requests.get(url, headers=HEADERS)\n        data = resp.json()\n        status = data[\"status\"]\n\n        if status == \"completed\":\n            video_url = data[\"output\"][\"video_url\"]\n            print(f\"Video ready: {video_url}\")\n            return data\n        elif status == \"failed\":\n            print(f\"Generation failed: {data.get('error', 'Unknown error')}\")\n            return data\n\n        print(f\"Status: {status} ({elapsed}s elapsed)\")\n        time.sleep(interval)\n        elapsed += interval\n\n    print(\"Timed out waiting for video\")\n    return None\n",[28,23282,23283,23304,23309,23332,23340,23344,23355,23371,23380,23393,23397,23409,23425,23445,23452,23464,23493,23499,23503,23531,23535,23543,23547,23558],{"__ignoreMap":141},[145,23284,23285,23287,23289,23291,23293,23295,23298,23300,23302],{"class":147,"line":148},[145,23286,525],{"class":258},[145,23288,528],{"class":151},[145,23290,11534],{"class":262},[145,23292,266],{"class":258},[145,23294,1353],{"class":155},[145,23296,23297],{"class":262},", max_wait",[145,23299,266],{"class":258},[145,23301,11545],{"class":155},[145,23303,547],{"class":262},[145,23305,23306],{"class":147,"line":166},[145,23307,23308],{"class":159},"    \"\"\"Poll the task endpoint until the video is ready.\"\"\"\n",[145,23310,23311,23314,23316,23318,23320,23322,23324,23326,23328,23330],{"class":147,"line":178},[145,23312,23313],{"class":262},"    url ",[145,23315,266],{"class":258},[145,23317,3358],{"class":258},[145,23319,448],{"class":159},[145,23321,678],{"class":155},[145,23323,681],{"class":159},[145,23325,684],{"class":155},[145,23327,687],{"class":262},[145,23329,690],{"class":155},[145,23331,950],{"class":159},[145,23333,23334,23336,23338],{"class":147,"line":187},[145,23335,630],{"class":262},[145,23337,266],{"class":258},[145,23339,635],{"class":155},[145,23341,23342],{"class":147,"line":372},[145,23343,375],{"emptyLinePlaceholder":58},[145,23345,23346,23348,23350,23352],{"class":147,"line":378},[145,23347,641],{"class":258},[145,23349,644],{"class":262},[145,23351,647],{"class":258},[145,23353,23354],{"class":262}," max_wait:\n",[145,23356,23357,23359,23361,23363,23365,23367,23369],{"class":147,"line":384},[145,23358,6787],{"class":262},[145,23360,266],{"class":258},[145,23362,1131],{"class":262},[145,23364,17648],{"class":700},[145,23366,266],{"class":258},[145,23368,422],{"class":155},[145,23370,405],{"class":262},[145,23372,23373,23376,23378],{"class":147,"line":408},[145,23374,23375],{"class":262},"        data ",[145,23377,266],{"class":258},[145,23379,11615],{"class":262},[145,23381,23382,23384,23386,23389,23391],{"class":147,"line":419},[145,23383,752],{"class":262},[145,23385,266],{"class":258},[145,23387,23388],{"class":262}," data[",[145,23390,760],{"class":159},[145,23392,763],{"class":262},[145,23394,23395],{"class":147,"line":430},[145,23396,375],{"emptyLinePlaceholder":58},[145,23398,23399,23401,23403,23405,23407],{"class":147,"line":454},[145,23400,847],{"class":258},[145,23402,850],{"class":262},[145,23404,853],{"class":258},[145,23406,856],{"class":159},[145,23408,859],{"class":262},[145,23410,23411,23413,23415,23417,23419,23421,23423],{"class":147,"line":465},[145,23412,7262],{"class":262},[145,23414,266],{"class":258},[145,23416,23388],{"class":262},[145,23418,21344],{"class":159},[145,23420,1563],{"class":262},[145,23422,14773],{"class":159},[145,23424,763],{"class":262},[145,23426,23427,23429,23431,23433,23435,23437,23439,23441,23443],{"class":147,"line":599},[145,23428,5442],{"class":155},[145,23430,793],{"class":262},[145,23432,439],{"class":258},[145,23434,11655],{"class":159},[145,23436,684],{"class":155},[145,23438,1679],{"class":262},[145,23440,690],{"class":155},[145,23442,448],{"class":159},[145,23444,405],{"class":262},[145,23446,23447,23449],{"class":147,"line":604},[145,23448,865],{"class":258},[145,23450,23451],{"class":262}," data\n",[145,23453,23454,23456,23458,23460,23462],{"class":147,"line":610},[145,23455,874],{"class":258},[145,23457,850],{"class":262},[145,23459,853],{"class":258},[145,23461,881],{"class":159},[145,23463,859],{"class":262},[145,23465,23466,23468,23470,23472,23474,23476,23479,23481,23483,23485,23487,23489,23491],{"class":147,"line":616},[145,23467,5442],{"class":155},[145,23469,793],{"class":262},[145,23471,439],{"class":258},[145,23473,11704],{"class":159},[145,23475,684],{"class":155},[145,23477,23478],{"class":262},"data.get(",[145,23480,11712],{"class":159},[145,23482,399],{"class":262},[145,23484,942],{"class":159},[145,23486,945],{"class":262},[145,23488,690],{"class":155},[145,23490,448],{"class":159},[145,23492,405],{"class":262},[145,23494,23495,23497],{"class":147,"line":622},[145,23496,865],{"class":258},[145,23498,23451],{"class":262},[145,23500,23501],{"class":147,"line":627},[145,23502,375],{"emptyLinePlaceholder":58},[145,23504,23505,23507,23509,23511,23513,23515,23517,23519,23521,23523,23525,23527,23529],{"class":147,"line":638},[145,23506,790],{"class":155},[145,23508,793],{"class":262},[145,23510,439],{"class":258},[145,23512,11741],{"class":159},[145,23514,684],{"class":155},[145,23516,813],{"class":262},[145,23518,690],{"class":155},[145,23520,1218],{"class":159},[145,23522,684],{"class":155},[145,23524,803],{"class":262},[145,23526,690],{"class":155},[145,23528,11758],{"class":159},[145,23530,405],{"class":262},[145,23532,23533],{"class":147,"line":653},[145,23534,11765],{"class":262},[145,23536,23537,23539,23541],{"class":147,"line":659},[145,23538,979],{"class":262},[145,23540,982],{"class":258},[145,23542,11774],{"class":262},[145,23544,23545],{"class":147,"line":670},[145,23546,375],{"emptyLinePlaceholder":58},[145,23548,23549,23551,23553,23556],{"class":147,"line":697},[145,23550,1102],{"class":155},[145,23552,793],{"class":262},[145,23554,23555],{"class":159},"\"Timed out waiting for video\"",[145,23557,405],{"class":262},[145,23559,23560,23562],{"class":147,"line":709},[145,23561,1704],{"class":258},[145,23563,11796],{"class":155},[11,23565,23566,23567,2254,23569,2254,23571,2085,23573,23575],{},"タスクステータスはシンプルなライフサイクルに従います：",[28,23568,2076],{},[28,23570,2080],{},[28,23572,2084],{},[28,23574,2088],{},"。レスポンス内の動画 URL は24時間後に期限切れになります。それまでにダウンロードまたは配信してください。",[11,23577,23578,23579,1261],{},"API の基礎（テキストから動画、パラメータ、エラーハンドリング）の完全なウォークスルーについては、",[37,23580,296],{"href":17367},[45,23582],{},[48,23584,23586],{"id":23585},"モード-1単一画像アニメーション","モード 1：単一画像アニメーション",[11,23588,23589],{},"単一画像アニメーションは、最も一般的な画像から動画のワークフローです。1枚の画像と、希望するモーションを記述するプロンプトを提供します。モデルは画像のビジュアルコンテンツを保持しながら、リアルな動き、カメラモーション、環境エフェクトを追加します。",[92,23591,6299],{"id":6299},[11,23593,23594,23596,23597,23600],{},[28,23595,2896],{}," に URL を1つだけ渡すと、Seedance 2.0 はそれを",[23,23598,23599],{},"主要なビジュアルリファレンス","として扱います。モデルは最初のフレームを画像に固定し、プロンプトに基づいて前方への動きを生成します。出力では以下が保持されます：",[96,23602,23603,23609,23615,23621],{},[73,23604,23605,23606],{},"ソース画像の",[23,23607,23608],{},"カラーパレット",[73,23610,23611,23614],{},[23,23612,23613],{},"構図","とフレーミング",[73,23616,23617,23620],{},[23,23618,23619],{},"被写体のアイデンティティ","（服装、形状、特徴）",[73,23622,23623,23626],{},[23,23624,23625],{},"アートスタイル","（イラスト、3Dレンダリング、写真）",[11,23628,23629,23630,23633],{},"プロンプトは",[2619,23631,23632],{},"変化する部分","を制御します：動き、カメラアングル、照明の変化、環境のダイナミクスです。",[92,23635,23637],{"id":23636},"完全なコード単一画像から動画","完全なコード：単一画像から動画",[136,23639,23641],{"className":337,"code":23640,"language":339,"meta":141,"style":141},"import requests\nimport time\n\nAPI_KEY = \"YOUR_API_KEY\"\nBASE_URL = \"https://api.evolink.ai/v1\"\nHEADERS = {\n    \"Authorization\": f\"Bearer {API_KEY}\",\n    \"Content-Type\": \"application/json\"\n}\n\ndef wait_for_video(task_id, interval=5, max_wait=300):\n    url = f\"{BASE_URL}/tasks/{task_id}\"\n    elapsed = 0\n    while elapsed \u003C max_wait:\n        resp = requests.get(url, headers=HEADERS)\n        data = resp.json()\n        status = data[\"status\"]\n        if status == \"completed\":\n            print(f\"Video ready: {data['output']['video_url']}\")\n            return data\n        elif status == \"failed\":\n            print(f\"Failed: {data.get('error', 'Unknown error')}\")\n            return data\n        print(f\"Status: {status} ({elapsed}s)\")\n        time.sleep(interval)\n        elapsed += interval\n    return None\n\n# --- Single Image Animation ---\npayload = {\n    \"model\": \"seedance-2.0\",\n    \"prompt\": (\n        \"The woman in the painting slowly reaches for a coffee cup on the table, \"\n        \"lifts it to her lips, and takes a quiet sip. Soft morning light filters \"\n        \"through a nearby window. Gentle steam rises from the cup. \"\n        \"Painterly brushstroke texture preserved throughout.\"\n    ),\n    \"image_urls\": [\n        \"https://example.com/painting-woman.jpg\"\n    ],\n    \"duration\": 8,\n    \"quality\": \"1080p\",\n    \"aspect_ratio\": \"16:9\",\n    \"generate_audio\": True\n}\n\nresp = requests.post(\n    f\"{BASE_URL}/videos/generations\",\n    headers=HEADERS,\n    json=payload\n)\nresult = resp.json()\nprint(f\"Task ID: {result['task_id']}\")\n\n# Poll until complete\nvideo_data = wait_for_video(result[\"task_id\"])\n",[28,23642,23643,23649,23655,23659,23667,23675,23683,23699,23707,23711,23715,23735,23757,23765,23775,23791,23799,23811,23823,23852,23858,23870,23899,23905,23933,23937,23945,23951,23955,23960,23968,23978,23984,23989,23994,23999,24004,24008,24014,24019,24023,24033,24043,24053,24061,24065,24069,24078,24090,24100,24108,24112,24120,24145,24149,24154],{"__ignoreMap":141},[145,23644,23645,23647],{"class":147,"line":148},[145,23646,346],{"class":258},[145,23648,328],{"class":262},[145,23650,23651,23653],{"class":147,"line":166},[145,23652,346],{"class":258},[145,23654,355],{"class":262},[145,23656,23657],{"class":147,"line":178},[145,23658,375],{"emptyLinePlaceholder":58},[145,23660,23661,23663,23665],{"class":147,"line":187},[145,23662,387],{"class":155},[145,23664,390],{"class":258},[145,23666,17419],{"class":159},[145,23668,23669,23671,23673],{"class":147,"line":372},[145,23670,411],{"class":155},[145,23672,390],{"class":258},[145,23674,416],{"class":159},[145,23676,23677,23679,23681],{"class":147,"line":378},[145,23678,422],{"class":155},[145,23680,390],{"class":258},[145,23682,427],{"class":262},[145,23684,23685,23687,23689,23691,23693,23695,23697],{"class":147,"line":384},[145,23686,433],{"class":159},[145,23688,436],{"class":262},[145,23690,439],{"class":258},[145,23692,442],{"class":159},[145,23694,445],{"class":155},[145,23696,448],{"class":159},[145,23698,451],{"class":262},[145,23700,23701,23703,23705],{"class":147,"line":408},[145,23702,457],{"class":159},[145,23704,436],{"class":262},[145,23706,462],{"class":159},[145,23708,23709],{"class":147,"line":419},[145,23710,468],{"class":262},[145,23712,23713],{"class":147,"line":430},[145,23714,375],{"emptyLinePlaceholder":58},[145,23716,23717,23719,23721,23723,23725,23727,23729,23731,23733],{"class":147,"line":454},[145,23718,525],{"class":258},[145,23720,528],{"class":151},[145,23722,11534],{"class":262},[145,23724,266],{"class":258},[145,23726,1353],{"class":155},[145,23728,23297],{"class":262},[145,23730,266],{"class":258},[145,23732,11545],{"class":155},[145,23734,547],{"class":262},[145,23736,23737,23739,23741,23743,23745,23747,23749,23751,23753,23755],{"class":147,"line":465},[145,23738,23313],{"class":262},[145,23740,266],{"class":258},[145,23742,3358],{"class":258},[145,23744,448],{"class":159},[145,23746,678],{"class":155},[145,23748,681],{"class":159},[145,23750,684],{"class":155},[145,23752,687],{"class":262},[145,23754,690],{"class":155},[145,23756,950],{"class":159},[145,23758,23759,23761,23763],{"class":147,"line":599},[145,23760,630],{"class":262},[145,23762,266],{"class":258},[145,23764,635],{"class":155},[145,23766,23767,23769,23771,23773],{"class":147,"line":604},[145,23768,641],{"class":258},[145,23770,644],{"class":262},[145,23772,647],{"class":258},[145,23774,23354],{"class":262},[145,23776,23777,23779,23781,23783,23785,23787,23789],{"class":147,"line":610},[145,23778,6787],{"class":262},[145,23780,266],{"class":258},[145,23782,1131],{"class":262},[145,23784,17648],{"class":700},[145,23786,266],{"class":258},[145,23788,422],{"class":155},[145,23790,405],{"class":262},[145,23792,23793,23795,23797],{"class":147,"line":616},[145,23794,23375],{"class":262},[145,23796,266],{"class":258},[145,23798,11615],{"class":262},[145,23800,23801,23803,23805,23807,23809],{"class":147,"line":622},[145,23802,752],{"class":262},[145,23804,266],{"class":258},[145,23806,23388],{"class":262},[145,23808,760],{"class":159},[145,23810,763],{"class":262},[145,23812,23813,23815,23817,23819,23821],{"class":147,"line":627},[145,23814,847],{"class":258},[145,23816,850],{"class":262},[145,23818,853],{"class":258},[145,23820,856],{"class":159},[145,23822,859],{"class":262},[145,23824,23825,23827,23829,23831,23833,23835,23838,23840,23842,23844,23846,23848,23850],{"class":147,"line":638},[145,23826,5442],{"class":155},[145,23828,793],{"class":262},[145,23830,439],{"class":258},[145,23832,11655],{"class":159},[145,23834,684],{"class":155},[145,23836,23837],{"class":262},"data[",[145,23839,17710],{"class":159},[145,23841,1563],{"class":262},[145,23843,17715],{"class":159},[145,23845,1536],{"class":262},[145,23847,690],{"class":155},[145,23849,448],{"class":159},[145,23851,405],{"class":262},[145,23853,23854,23856],{"class":147,"line":653},[145,23855,865],{"class":258},[145,23857,23451],{"class":262},[145,23859,23860,23862,23864,23866,23868],{"class":147,"line":659},[145,23861,874],{"class":258},[145,23863,850],{"class":262},[145,23865,853],{"class":258},[145,23867,881],{"class":159},[145,23869,859],{"class":262},[145,23871,23872,23874,23876,23878,23881,23883,23885,23887,23889,23891,23893,23895,23897],{"class":147,"line":670},[145,23873,5442],{"class":155},[145,23875,793],{"class":262},[145,23877,439],{"class":258},[145,23879,23880],{"class":159},"\"Failed: ",[145,23882,684],{"class":155},[145,23884,23478],{"class":262},[145,23886,11712],{"class":159},[145,23888,399],{"class":262},[145,23890,942],{"class":159},[145,23892,945],{"class":262},[145,23894,690],{"class":155},[145,23896,448],{"class":159},[145,23898,405],{"class":262},[145,23900,23901,23903],{"class":147,"line":697},[145,23902,865],{"class":258},[145,23904,23451],{"class":262},[145,23906,23907,23909,23911,23913,23915,23917,23919,23921,23923,23925,23927,23929,23931],{"class":147,"line":709},[145,23908,790],{"class":155},[145,23910,793],{"class":262},[145,23912,439],{"class":258},[145,23914,11741],{"class":159},[145,23916,684],{"class":155},[145,23918,813],{"class":262},[145,23920,690],{"class":155},[145,23922,1218],{"class":159},[145,23924,684],{"class":155},[145,23926,803],{"class":262},[145,23928,690],{"class":155},[145,23930,10576],{"class":159},[145,23932,405],{"class":262},[145,23934,23935],{"class":147,"line":715},[145,23936,11765],{"class":262},[145,23938,23939,23941,23943],{"class":147,"line":721},[145,23940,979],{"class":262},[145,23942,982],{"class":258},[145,23944,11774],{"class":262},[145,23946,23947,23949],{"class":147,"line":727},[145,23948,1704],{"class":258},[145,23950,11796],{"class":155},[145,23952,23953],{"class":147,"line":738},[145,23954,375],{"emptyLinePlaceholder":58},[145,23956,23957],{"class":147,"line":743},[145,23958,23959],{"class":174},"# --- Single Image Animation ---\n",[145,23961,23962,23964,23966],{"class":147,"line":749},[145,23963,3660],{"class":262},[145,23965,266],{"class":258},[145,23967,427],{"class":262},[145,23969,23970,23972,23974,23976],{"class":147,"line":766},[145,23971,3669],{"class":159},[145,23973,436],{"class":262},[145,23975,1309],{"class":159},[145,23977,451],{"class":262},[145,23979,23980,23982],{"class":147,"line":787},[145,23981,3680],{"class":159},[145,23983,1323],{"class":262},[145,23985,23986],{"class":147,"line":833},[145,23987,23988],{"class":159},"        \"The woman in the painting slowly reaches for a coffee cup on the table, \"\n",[145,23990,23991],{"class":147,"line":838},[145,23992,23993],{"class":159},"        \"lifts it to her lips, and takes a quiet sip. Soft morning light filters \"\n",[145,23995,23996],{"class":147,"line":844},[145,23997,23998],{"class":159},"        \"through a nearby window. Gentle steam rises from the cup. \"\n",[145,24000,24001],{"class":147,"line":862},[145,24002,24003],{"class":159},"        \"Painterly brushstroke texture preserved throughout.\"\n",[145,24005,24006],{"class":147,"line":871},[145,24007,3803],{"class":262},[145,24009,24010,24012],{"class":147,"line":886},[145,24011,15206],{"class":159},[145,24013,2691],{"class":262},[145,24015,24016],{"class":147,"line":902},[145,24017,24018],{"class":159},"        \"https://example.com/painting-woman.jpg\"\n",[145,24020,24021],{"class":147,"line":914},[145,24022,16188],{"class":262},[145,24024,24025,24027,24029,24031],{"class":147,"line":953},[145,24026,3692],{"class":159},[145,24028,436],{"class":262},[145,24030,3697],{"class":155},[145,24032,451],{"class":262},[145,24034,24035,24037,24039,24041],{"class":147,"line":959},[145,24036,3704],{"class":159},[145,24038,436],{"class":262},[145,24040,3709],{"class":159},[145,24042,451],{"class":262},[145,24044,24045,24047,24049,24051],{"class":147,"line":964},[145,24046,3716],{"class":159},[145,24048,436],{"class":262},[145,24050,1385],{"class":159},[145,24052,451],{"class":262},[145,24054,24055,24057,24059],{"class":147,"line":970},[145,24056,3732],{"class":159},[145,24058,436],{"class":262},[145,24060,3737],{"class":155},[145,24062,24063],{"class":147,"line":976},[145,24064,468],{"class":262},[145,24066,24067],{"class":147,"line":988},[145,24068,375],{"emptyLinePlaceholder":58},[145,24070,24071,24074,24076],{"class":147,"line":993},[145,24072,24073],{"class":262},"resp ",[145,24075,266],{"class":258},[145,24077,1433],{"class":262},[145,24079,24080,24082,24084,24086,24088],{"class":147,"line":5402},[145,24081,6396],{"class":258},[145,24083,448],{"class":159},[145,24085,678],{"class":155},[145,24087,1445],{"class":159},[145,24089,451],{"class":262},[145,24091,24092,24094,24096,24098],{"class":147,"line":5411},[145,24093,6409],{"class":700},[145,24095,266],{"class":258},[145,24097,422],{"class":155},[145,24099,451],{"class":262},[145,24101,24102,24104,24106],{"class":147,"line":5439},[145,24103,6420],{"class":700},[145,24105,266],{"class":258},[145,24107,2788],{"class":262},[145,24109,24110],{"class":147,"line":5470},[145,24111,405],{"class":262},[145,24113,24114,24116,24118],{"class":147,"line":5490},[145,24115,12078],{"class":262},[145,24117,266],{"class":258},[145,24119,11615],{"class":262},[145,24121,24122,24124,24126,24128,24131,24133,24135,24137,24139,24141,24143],{"class":147,"line":5496},[145,24123,6442],{"class":155},[145,24125,793],{"class":262},[145,24127,439],{"class":258},[145,24129,24130],{"class":159},"\"Task ID: ",[145,24132,684],{"class":155},[145,24134,11660],{"class":262},[145,24136,19695],{"class":159},[145,24138,1536],{"class":262},[145,24140,690],{"class":155},[145,24142,448],{"class":159},[145,24144,405],{"class":262},[145,24146,24147],{"class":147,"line":5502},[145,24148,375],{"emptyLinePlaceholder":58},[145,24150,24151],{"class":147,"line":5507},[145,24152,24153],{"class":174},"# Poll until complete\n",[145,24155,24156,24159,24161,24164,24166],{"class":147,"line":5520},[145,24157,24158],{"class":262},"video_data ",[145,24160,266],{"class":258},[145,24162,24163],{"class":262}," wait_for_video(result[",[145,24165,7553],{"class":159},[145,24167,1630],{"class":262},[18,24169,24170],{},[11,24171,24172,2427,24175,24177],{},[23,24173,24174],{},"ご自身の API キーで実行してください。",[28,24176,2896],{}," の値を任意の公開アクセス可能な画像 URL に差し替えるだけです。",[92,24179,24181],{"id":24180},"デモ絵画が命を吹き込まれる","デモ：絵画が命を吹き込まれる",[56,24183,60,24184],{"controls":58,"playsInline":58,"style":59},[62,24185],{"src":18602,"type":65},[11,24187,24188,2427,24191],{},[23,24189,24190],{},"使用したプロンプト：",[2619,24192,24193],{},"\"The woman in the painting slowly reaches forward, picks up a coffee cup from the table, and takes a quiet sip. Soft indoor lighting. Painterly brushstroke style maintained. Subtle steam rises from the cup.\"",[11,24195,24196,24197,24199],{},"このデモでは、1枚の油絵風ポートレートを ",[28,24198,2909],{},"（キャラクターリファレンス）として使用しています。モデルは油絵の美的表現を維持しながら、自然な腕の動きと蒸気の物理表現を生成します。",[92,24201,24203],{"id":24202},"デモスタイル転写アニメーション","デモ：スタイル転写アニメーション",[56,24205,60,24206],{"controls":58,"playsInline":58,"style":59},[62,24207],{"src":24208,"type":65},"https://cdn.evolink.ai/seedance2api/%E6%A2%B5%E9%AB%98%E7%94%BB%E5%A5%B3%E5%AD%A9%E4%B8%8E%E6%9D%91%E5%BA%84.mp4",[11,24210,24211,2427,24213],{},[23,24212,24190],{},[2619,24214,24215],{},"\"A young girl walks along a winding path through a Van Gogh-style village. Swirling sky with thick brushstrokes. Vibrant yellows and blues. The girl's dress and hair flow in the wind. Camera slowly follows her from behind.\"",[11,24217,24218],{},"入力画像のゴッホ風の筆致がすべてのフレームに反映されている点にご注目ください。渦巻く空、建物のインパスト質感、色の関係性などです。単一画像アニメーションは、スタイルに一貫性のあるモーション生成に優れています。",[92,24220,24221],{"id":24221},"単一画像モードのプロンプトベストプラクティス",[11,24223,24224],{},"プロンプトがアニメーションの品質を決定します。静的な記述は静的な動画を生み出します。モーション豊かなプロンプトがダイナミックな出力を生み出します。",[11,24226,24227],{},[23,24228,24229],{},"弱いプロンプト：",[136,24231,24234],{"className":24232,"code":24233,"language":2186},[2184],"A cat sitting on a windowsill\n",[28,24235,24233],{"__ignoreMap":141},[11,24237,24238],{},[23,24239,24240],{},"強いプロンプト：",[136,24242,24245],{"className":24243,"code":24244,"language":2186},[2184],"The cat stretches lazily on the windowsill, yawns wide showing tiny teeth,\nthen curls back into a ball. Afternoon sunlight shifts slowly across the fur.\nDust motes float in the light beam. Camera holds steady, slight depth of field.\n",[28,24246,24244],{"__ignoreMap":141},[11,24248,24249,24250,24253,24254,24257,24258,24261],{},"違いは、強いプロンプトが",[23,24251,24252],{},"連続的なアクション","（伸びる → あくびする → 丸まる）、",[23,24255,24256],{},"環境の動き","（日光が移動する、塵が浮遊する）、",[23,24259,24260],{},"カメラの振る舞い","（固定、被写界深度）を指定していることです。",[11,24263,24264],{},"単一画像プロンプトの主要原則：",[2037,24266,24267,24276],{},[2040,24268,24269],{},[2043,24270,24271,24274],{},[2046,24272,24273],{},"原則",[2046,24275,11324],{},[2053,24277,24278,24286,24294,24302,24310],{},[2043,24279,24280,24283],{},[2058,24281,24282],{},"外見ではなく動きを記述する",[2058,24284,24285],{},"\"walks forward\"（\"a person standing\" ではなく）",[2043,24287,24288,24291],{},[2058,24289,24290],{},"2〜3のアクションを連続させる",[2058,24292,24293],{},"\"picks up → examines → sets down\"",[2043,24295,24296,24299],{},[2058,24297,24298],{},"環境のダイナミクスを加える",[2058,24300,24301],{},"\"wind rustles leaves\", \"rain beads on glass\"",[2043,24303,24304,24307],{},[2058,24305,24306],{},"カメラの動きを指定する",[2058,24308,24309],{},"\"slow pan left\", \"camera pulls back to reveal\"",[2043,24311,24312,24315],{},[2058,24313,24314],{},"画像のアートスタイルに合わせる",[2058,24316,24317],{},"\"painterly strokes preserved\", \"3D render quality\"",[11,24319,24320,24321,24323,24324,1261],{},"完全なプロンプトエンジニアリングのリファレンスについては、",[37,24322,2212],{"href":1767},"をご覧ください。カメラ固有のテクニックについては、",[37,24325,18986],{"href":3855},[45,24327],{},[48,24329,24331],{"id":24330},"モード-2最初と最後のフレーム制御","モード 2：最初と最後のフレーム制御",[11,24333,24334,24335,24338],{},"単一画像モードは動画の始まりを固定します。最初と最後のフレームモードは",[23,24336,24337],{},"両端","を固定します。開始フレームと終了フレームの2枚の画像を提供し、Seedance 2.0 がその間のスムーズなトランジションを生成します。",[92,24340,6299],{"id":24341},"仕組み-1",[11,24343,24344,24346],{},[28,24345,2896],{}," にちょうど2つの URL が含まれている場合、モデルはそれらを次のように解釈します：",[96,24348,24349,24355],{},[73,24350,24351,24354],{},[23,24352,24353],{},"最初の URL"," → 開始フレーム",[73,24356,24357,24360],{},[23,24358,24359],{},"2番目の URL"," → 終了フレーム",[11,24362,24363,24364,24367],{},"モデルは、自然で物理的に妥当なトランジションを作成する中間フレームを生成します。プロンプトはトランジションの",[2619,24365,24366],{},"スタイル","をガイドします。スムーズなモーフ、ナラティブな旅程、またはドラマチックな変換のいずれであるかを指示します。",[92,24369,13999],{"id":13999},[11,24371,24372],{},"最初と最後のフレーム制御は、単一画像モードでは解決できない問題を解決します：",[96,24374,24375,24381,24387,24393,24399],{},[73,24376,24377,24380],{},[23,24378,24379],{},"ビフォーアフター表現","：リノベーション、メイクアップ、季節の変化",[73,24382,24383,24386],{},[23,24384,24385],{},"タイムラプスシミュレーション","：夜明けから夕暮れ、空の部屋から家具付きの部屋",[73,24388,24389,24392],{},[23,24390,24391],{},"シーントランジション","：ある場所が別の場所にモーフィング",[73,24394,24395,24398],{},[23,24396,24397],{},"商品変換","：閉じたパッケージから開いた商品ディスプレイ",[73,24400,24401,24404],{},[23,24402,24403],{},"モーフィングエフェクト","：あるキャラクターやスタイルが別のものに変化",[92,24406,24408],{"id":24407},"完全なコード最初と最後のフレーム補間","完全なコード：最初と最後のフレーム補間",[136,24410,24412],{"className":337,"code":24411,"language":339,"meta":141,"style":141},"import requests\nimport time\n\nAPI_KEY = \"YOUR_API_KEY\"\nBASE_URL = \"https://api.evolink.ai/v1\"\nHEADERS = {\n    \"Authorization\": f\"Bearer {API_KEY}\",\n    \"Content-Type\": \"application/json\"\n}\n\ndef wait_for_video(task_id, interval=5, max_wait=300):\n    url = f\"{BASE_URL}/tasks/{task_id}\"\n    elapsed = 0\n    while elapsed \u003C max_wait:\n        resp = requests.get(url, headers=HEADERS)\n        data = resp.json()\n        status = data[\"status\"]\n        if status == \"completed\":\n            print(f\"Video ready: {data['output']['video_url']}\")\n            return data\n        elif status == \"failed\":\n            print(f\"Failed: {data.get('error', 'Unknown error')}\")\n            return data\n        print(f\"Status: {status} ({elapsed}s)\")\n        time.sleep(interval)\n        elapsed += interval\n    return None\n\n# --- First-Last Frame Control ---\npayload = {\n    \"model\": \"seedance-2.0\",\n    \"prompt\": (\n        \"Smooth cinematic transition. The real-world landscape gradually \"\n        \"transforms into a traditional Chinese ink wash painting. Mountains \"\n        \"dissolve from photorealistic to brushstroke. Water becomes flowing ink. \"\n        \"Sky shifts from blue to rice-paper white. Slow, meditative pace.\"\n    ),\n    \"image_urls\": [\n        \"https://example.com/real-landscape.jpg\",\n        \"https://example.com/ink-wash-painting.jpg\"\n    ],\n    \"duration\": 10,\n    \"quality\": \"1080p\",\n    \"aspect_ratio\": \"16:9\"\n}\n\nresp = requests.post(\n    f\"{BASE_URL}/videos/generations\",\n    headers=HEADERS,\n    json=payload\n)\nresult = resp.json()\nprint(f\"Task ID: {result['task_id']}\")\n\nvideo_data = wait_for_video(result[\"task_id\"])\n",[28,24413,24414,24420,24426,24430,24438,24446,24454,24470,24478,24482,24486,24506,24528,24536,24546,24562,24570,24582,24594,24622,24628,24640,24668,24674,24702,24706,24714,24720,24724,24729,24737,24747,24753,24758,24763,24768,24773,24777,24783,24790,24795,24799,24809,24819,24827,24831,24835,24843,24855,24865,24873,24877,24885,24909,24913],{"__ignoreMap":141},[145,24415,24416,24418],{"class":147,"line":148},[145,24417,346],{"class":258},[145,24419,328],{"class":262},[145,24421,24422,24424],{"class":147,"line":166},[145,24423,346],{"class":258},[145,24425,355],{"class":262},[145,24427,24428],{"class":147,"line":178},[145,24429,375],{"emptyLinePlaceholder":58},[145,24431,24432,24434,24436],{"class":147,"line":187},[145,24433,387],{"class":155},[145,24435,390],{"class":258},[145,24437,17419],{"class":159},[145,24439,24440,24442,24444],{"class":147,"line":372},[145,24441,411],{"class":155},[145,24443,390],{"class":258},[145,24445,416],{"class":159},[145,24447,24448,24450,24452],{"class":147,"line":378},[145,24449,422],{"class":155},[145,24451,390],{"class":258},[145,24453,427],{"class":262},[145,24455,24456,24458,24460,24462,24464,24466,24468],{"class":147,"line":384},[145,24457,433],{"class":159},[145,24459,436],{"class":262},[145,24461,439],{"class":258},[145,24463,442],{"class":159},[145,24465,445],{"class":155},[145,24467,448],{"class":159},[145,24469,451],{"class":262},[145,24471,24472,24474,24476],{"class":147,"line":408},[145,24473,457],{"class":159},[145,24475,436],{"class":262},[145,24477,462],{"class":159},[145,24479,24480],{"class":147,"line":419},[145,24481,468],{"class":262},[145,24483,24484],{"class":147,"line":430},[145,24485,375],{"emptyLinePlaceholder":58},[145,24487,24488,24490,24492,24494,24496,24498,24500,24502,24504],{"class":147,"line":454},[145,24489,525],{"class":258},[145,24491,528],{"class":151},[145,24493,11534],{"class":262},[145,24495,266],{"class":258},[145,24497,1353],{"class":155},[145,24499,23297],{"class":262},[145,24501,266],{"class":258},[145,24503,11545],{"class":155},[145,24505,547],{"class":262},[145,24507,24508,24510,24512,24514,24516,24518,24520,24522,24524,24526],{"class":147,"line":465},[145,24509,23313],{"class":262},[145,24511,266],{"class":258},[145,24513,3358],{"class":258},[145,24515,448],{"class":159},[145,24517,678],{"class":155},[145,24519,681],{"class":159},[145,24521,684],{"class":155},[145,24523,687],{"class":262},[145,24525,690],{"class":155},[145,24527,950],{"class":159},[145,24529,24530,24532,24534],{"class":147,"line":599},[145,24531,630],{"class":262},[145,24533,266],{"class":258},[145,24535,635],{"class":155},[145,24537,24538,24540,24542,24544],{"class":147,"line":604},[145,24539,641],{"class":258},[145,24541,644],{"class":262},[145,24543,647],{"class":258},[145,24545,23354],{"class":262},[145,24547,24548,24550,24552,24554,24556,24558,24560],{"class":147,"line":610},[145,24549,6787],{"class":262},[145,24551,266],{"class":258},[145,24553,1131],{"class":262},[145,24555,17648],{"class":700},[145,24557,266],{"class":258},[145,24559,422],{"class":155},[145,24561,405],{"class":262},[145,24563,24564,24566,24568],{"class":147,"line":616},[145,24565,23375],{"class":262},[145,24567,266],{"class":258},[145,24569,11615],{"class":262},[145,24571,24572,24574,24576,24578,24580],{"class":147,"line":622},[145,24573,752],{"class":262},[145,24575,266],{"class":258},[145,24577,23388],{"class":262},[145,24579,760],{"class":159},[145,24581,763],{"class":262},[145,24583,24584,24586,24588,24590,24592],{"class":147,"line":627},[145,24585,847],{"class":258},[145,24587,850],{"class":262},[145,24589,853],{"class":258},[145,24591,856],{"class":159},[145,24593,859],{"class":262},[145,24595,24596,24598,24600,24602,24604,24606,24608,24610,24612,24614,24616,24618,24620],{"class":147,"line":638},[145,24597,5442],{"class":155},[145,24599,793],{"class":262},[145,24601,439],{"class":258},[145,24603,11655],{"class":159},[145,24605,684],{"class":155},[145,24607,23837],{"class":262},[145,24609,17710],{"class":159},[145,24611,1563],{"class":262},[145,24613,17715],{"class":159},[145,24615,1536],{"class":262},[145,24617,690],{"class":155},[145,24619,448],{"class":159},[145,24621,405],{"class":262},[145,24623,24624,24626],{"class":147,"line":653},[145,24625,865],{"class":258},[145,24627,23451],{"class":262},[145,24629,24630,24632,24634,24636,24638],{"class":147,"line":659},[145,24631,874],{"class":258},[145,24633,850],{"class":262},[145,24635,853],{"class":258},[145,24637,881],{"class":159},[145,24639,859],{"class":262},[145,24641,24642,24644,24646,24648,24650,24652,24654,24656,24658,24660,24662,24664,24666],{"class":147,"line":670},[145,24643,5442],{"class":155},[145,24645,793],{"class":262},[145,24647,439],{"class":258},[145,24649,23880],{"class":159},[145,24651,684],{"class":155},[145,24653,23478],{"class":262},[145,24655,11712],{"class":159},[145,24657,399],{"class":262},[145,24659,942],{"class":159},[145,24661,945],{"class":262},[145,24663,690],{"class":155},[145,24665,448],{"class":159},[145,24667,405],{"class":262},[145,24669,24670,24672],{"class":147,"line":697},[145,24671,865],{"class":258},[145,24673,23451],{"class":262},[145,24675,24676,24678,24680,24682,24684,24686,24688,24690,24692,24694,24696,24698,24700],{"class":147,"line":709},[145,24677,790],{"class":155},[145,24679,793],{"class":262},[145,24681,439],{"class":258},[145,24683,11741],{"class":159},[145,24685,684],{"class":155},[145,24687,813],{"class":262},[145,24689,690],{"class":155},[145,24691,1218],{"class":159},[145,24693,684],{"class":155},[145,24695,803],{"class":262},[145,24697,690],{"class":155},[145,24699,10576],{"class":159},[145,24701,405],{"class":262},[145,24703,24704],{"class":147,"line":715},[145,24705,11765],{"class":262},[145,24707,24708,24710,24712],{"class":147,"line":721},[145,24709,979],{"class":262},[145,24711,982],{"class":258},[145,24713,11774],{"class":262},[145,24715,24716,24718],{"class":147,"line":727},[145,24717,1704],{"class":258},[145,24719,11796],{"class":155},[145,24721,24722],{"class":147,"line":738},[145,24723,375],{"emptyLinePlaceholder":58},[145,24725,24726],{"class":147,"line":743},[145,24727,24728],{"class":174},"# --- First-Last Frame Control ---\n",[145,24730,24731,24733,24735],{"class":147,"line":749},[145,24732,3660],{"class":262},[145,24734,266],{"class":258},[145,24736,427],{"class":262},[145,24738,24739,24741,24743,24745],{"class":147,"line":766},[145,24740,3669],{"class":159},[145,24742,436],{"class":262},[145,24744,1309],{"class":159},[145,24746,451],{"class":262},[145,24748,24749,24751],{"class":147,"line":787},[145,24750,3680],{"class":159},[145,24752,1323],{"class":262},[145,24754,24755],{"class":147,"line":833},[145,24756,24757],{"class":159},"        \"Smooth cinematic transition. The real-world landscape gradually \"\n",[145,24759,24760],{"class":147,"line":838},[145,24761,24762],{"class":159},"        \"transforms into a traditional Chinese ink wash painting. Mountains \"\n",[145,24764,24765],{"class":147,"line":844},[145,24766,24767],{"class":159},"        \"dissolve from photorealistic to brushstroke. Water becomes flowing ink. \"\n",[145,24769,24770],{"class":147,"line":862},[145,24771,24772],{"class":159},"        \"Sky shifts from blue to rice-paper white. Slow, meditative pace.\"\n",[145,24774,24775],{"class":147,"line":871},[145,24776,3803],{"class":262},[145,24778,24779,24781],{"class":147,"line":886},[145,24780,15206],{"class":159},[145,24782,2691],{"class":262},[145,24784,24785,24788],{"class":147,"line":902},[145,24786,24787],{"class":159},"        \"https://example.com/real-landscape.jpg\"",[145,24789,451],{"class":262},[145,24791,24792],{"class":147,"line":914},[145,24793,24794],{"class":159},"        \"https://example.com/ink-wash-painting.jpg\"\n",[145,24796,24797],{"class":147,"line":953},[145,24798,16188],{"class":262},[145,24800,24801,24803,24805,24807],{"class":147,"line":959},[145,24802,3692],{"class":159},[145,24804,436],{"class":262},[145,24806,536],{"class":155},[145,24808,451],{"class":262},[145,24810,24811,24813,24815,24817],{"class":147,"line":964},[145,24812,3704],{"class":159},[145,24814,436],{"class":262},[145,24816,3709],{"class":159},[145,24818,451],{"class":262},[145,24820,24821,24823,24825],{"class":147,"line":970},[145,24822,3716],{"class":159},[145,24824,436],{"class":262},[145,24826,2730],{"class":159},[145,24828,24829],{"class":147,"line":976},[145,24830,468],{"class":262},[145,24832,24833],{"class":147,"line":988},[145,24834,375],{"emptyLinePlaceholder":58},[145,24836,24837,24839,24841],{"class":147,"line":993},[145,24838,24073],{"class":262},[145,24840,266],{"class":258},[145,24842,1433],{"class":262},[145,24844,24845,24847,24849,24851,24853],{"class":147,"line":5402},[145,24846,6396],{"class":258},[145,24848,448],{"class":159},[145,24850,678],{"class":155},[145,24852,1445],{"class":159},[145,24854,451],{"class":262},[145,24856,24857,24859,24861,24863],{"class":147,"line":5411},[145,24858,6409],{"class":700},[145,24860,266],{"class":258},[145,24862,422],{"class":155},[145,24864,451],{"class":262},[145,24866,24867,24869,24871],{"class":147,"line":5439},[145,24868,6420],{"class":700},[145,24870,266],{"class":258},[145,24872,2788],{"class":262},[145,24874,24875],{"class":147,"line":5470},[145,24876,405],{"class":262},[145,24878,24879,24881,24883],{"class":147,"line":5490},[145,24880,12078],{"class":262},[145,24882,266],{"class":258},[145,24884,11615],{"class":262},[145,24886,24887,24889,24891,24893,24895,24897,24899,24901,24903,24905,24907],{"class":147,"line":5496},[145,24888,6442],{"class":155},[145,24890,793],{"class":262},[145,24892,439],{"class":258},[145,24894,24130],{"class":159},[145,24896,684],{"class":155},[145,24898,11660],{"class":262},[145,24900,19695],{"class":159},[145,24902,1536],{"class":262},[145,24904,690],{"class":155},[145,24906,448],{"class":159},[145,24908,405],{"class":262},[145,24910,24911],{"class":147,"line":5502},[145,24912,375],{"emptyLinePlaceholder":58},[145,24914,24915,24917,24919,24921,24923],{"class":147,"line":5507},[145,24916,24158],{"class":262},[145,24918,266],{"class":258},[145,24920,24163],{"class":262},[145,24922,7553],{"class":159},[145,24924,1630],{"class":262},[92,24926,24928],{"id":24927},"デモ現実から水墨画へ","デモ：現実から水墨画へ",[56,24930,60,24931],{"controls":58,"playsInline":58,"style":59},[62,24932],{"src":24933,"type":65},"https://cdn.evolink.ai/seedance2api/%E7%8E%B0%E5%AE%9E%E5%9C%BA%E6%99%AF%E5%B1%B1%E6%B0%B4%E7%94%BB.mp4",[11,24935,24936,2427,24938],{},[23,24937,24190],{},[2619,24939,24940],{},"\"The real-world mountain landscape gradually transforms into a traditional Chinese ink wash (山水画) painting. Photorealistic textures dissolve into flowing brushstrokes. Colors fade from vivid to monochrome ink tones. Water surfaces become calligraphic ink flows. Slow, contemplative transition.\"",[11,24942,24943],{},"最初のフレームはフォトリアリスティックな山岳風景です。最後のフレームは同様のシーンの伝統的な水墨画です。モデルは、写真的な質感が徐々に筆致へと溶けていくシームレスな変換を作成します。After Effects で手作業で行えば何時間もかかるエフェクトです。",[92,24945,24946],{"id":24946},"最初と最後のフレームモードのヒント",[11,24948,24949,24952],{},[23,24950,24951],{},"フレーム間の構図を合わせましょう。"," 最初のフレームの左側に山がある場合、最後のフレームにも同じ位置に同様の構造要素を配置すべきです。両方のフレームがおおよそ同じレイアウトを共有している場合、モデルはより良いトランジションを生成します。",[11,24954,24955,24958,24959,24962],{},[23,24956,24957],{},"端点だけでなく、トランジションを記述しましょう。"," モデルは開始と終了がどのように見えるかをすでに知っています。画像があるからです。プロンプトでは A から B への移行の",[2619,24960,24961],{},"方法","を記述すべきです。",[136,24964,24967],{"className":24965,"code":24966,"language":2186},[2184],"# Weak: just describes the endpoints\n\"A sunrise and a sunset\"\n\n# Strong: describes the journey\n\"The golden dawn light gradually warms to midday brightness,\nthen softens through amber afternoon hues into deep sunset oranges.\nShadows rotate clockwise. Cloud formations shift and reform.\"\n",[28,24968,24966],{"__ignoreMap":141},[11,24970,24971,24974],{},[23,24972,24973],{},"複雑なトランジションにはより長い尺を使用しましょう。"," シンプルな色の変化は4秒で機能します。スタイル変換（フォトリアリスティック → イラスト）は8〜12秒が有効です。短い尺での急激な変化は不自然に見えます。",[2037,24976,24977,24987],{},[2040,24978,24979],{},[2043,24980,24981,24984],{},[2046,24982,24983],{},"トランジションの種類",[2046,24985,24986],{},"推奨尺",[2053,24988,24989,24996,25003,25011],{},[2043,24990,24991,24994],{},[2058,24992,24993],{},"色/照明の変化",[2058,24995,19316],{},[2043,24997,24998,25001],{},[2058,24999,25000],{},"カメラ位置の変更",[2058,25002,19239],{},[2043,25004,25005,25008],{},[2058,25006,25007],{},"スタイル変換",[2058,25009,25010],{},"8〜12秒",[2043,25012,25013,25016],{},[2058,25014,25015],{},"ナラティブなシーン転換",[2058,25017,25018],{},"10〜15秒",[45,25020],{},[48,25022,25024],{"id":25023},"モード-3tags-を使ったマルチ画像合成","モード 3：@Tags を使ったマルチ画像合成",[11,25026,25027,25028,25030],{},"これは Seedance 2.0 の最も強力な画像から動画モードであり、競合する API が提供していないものです。最大9枚の画像を提供し、プロンプト内の ",[28,25029,4142],{}," タグを使って各画像に意味的な役割を割り当て、モデルがそれらを1つの一貫した動画に合成します。",[92,25032,25034],{"id":25033},"tags-の仕組み","@Tags の仕組み",[11,25036,25037,25039],{},[28,25038,2896],{}," に複数の URL を含めると、Seedance 2.0 は配列の位置に基づいて順番にタグを割り当てます：",[136,25041,25044],{"className":25042,"code":25043,"language":2186},[2184],"image_urls[0] → @Image1\nimage_urls[1] → @Image2\nimage_urls[2] → @Image3\n...\nimage_urls[8] → @Image9\n",[28,25045,25043],{"__ignoreMap":141},[11,25047,25048],{},"プロンプトでこれらのタグを参照して、各画像の使い方をモデルに正確に伝えます：",[136,25050,25053],{"className":25051,"code":25052,"language":2186},[2184],"@Image1 is the main character running through the city.\n@Image2 is the city skyline in the background.\n@Image3 defines the color grading and visual mood.\n",[28,25054,25052],{"__ignoreMap":141},[11,25056,25057],{},"タグがなければ、モデルはどの画像がキャラクターでどの画像が背景かを推測しなければなりません。タグがあれば、曖昧さはありません。これは、画像が視覚的に似ている場合や、特定の画像でコンテンツではなくスタイルを制御したい場合に特に重要です。",[92,25059,25061],{"id":25060},"完全なコードマルチ画像合成","完全なコード：マルチ画像合成",[136,25063,25065],{"className":337,"code":25064,"language":339,"meta":141,"style":141},"import requests\nimport time\n\nAPI_KEY = \"YOUR_API_KEY\"\nBASE_URL = \"https://api.evolink.ai/v1\"\nHEADERS = {\n    \"Authorization\": f\"Bearer {API_KEY}\",\n    \"Content-Type\": \"application/json\"\n}\n\ndef wait_for_video(task_id, interval=5, max_wait=300):\n    url = f\"{BASE_URL}/tasks/{task_id}\"\n    elapsed = 0\n    while elapsed \u003C max_wait:\n        resp = requests.get(url, headers=HEADERS)\n        data = resp.json()\n        status = data[\"status\"]\n        if status == \"completed\":\n            print(f\"Video ready: {data['output']['video_url']}\")\n            return data\n        elif status == \"failed\":\n            print(f\"Failed: {data.get('error', 'Unknown error')}\")\n            return data\n        print(f\"Status: {status} ({elapsed}s)\")\n        time.sleep(interval)\n        elapsed += interval\n    return None\n\n# --- Multi-Image Composition with @Tags ---\npayload = {\n    \"model\": \"seedance-2.0\",\n    \"prompt\": (\n        \"@Image1 is a parkour runner in dark athletic gear. \"\n        \"@Image2 is a futuristic city rooftop at twilight. \"\n        \"@Image3 is a neon-lit alleyway. \"\n        \"@Image4 is a glass skyscraper facade. \"\n        \"@Image5 provides the cyberpunk color grading reference. \"\n        \"The runner (@Image1) sprints across the rooftop (@Image2), \"\n        \"leaps over the edge, flips through the alleyway (@Image3), \"\n        \"and wall-runs along the skyscraper (@Image4). \"\n        \"Dynamic handheld camera follows the action. \"\n        \"Cyberpunk neon color palette from @Image5 throughout.\"\n    ),\n    \"image_urls\": [\n        \"https://example.com/runner.jpg\",\n        \"https://example.com/rooftop.jpg\",\n        \"https://example.com/alley.jpg\",\n        \"https://example.com/skyscraper.jpg\",\n        \"https://example.com/cyberpunk-ref.jpg\"\n    ],\n    \"duration\": 10,\n    \"quality\": \"1080p\",\n    \"aspect_ratio\": \"16:9\",\n    \"generate_audio\": True\n}\n\nresp = requests.post(\n    f\"{BASE_URL}/videos/generations\",\n    headers=HEADERS,\n    json=payload\n)\nresult = resp.json()\nprint(f\"Task ID: {result['task_id']}\")\n\nvideo_data = wait_for_video(result[\"task_id\"])\n",[28,25066,25067,25073,25079,25083,25091,25099,25107,25123,25131,25135,25139,25159,25181,25189,25199,25215,25223,25235,25247,25275,25281,25293,25321,25327,25355,25359,25367,25373,25377,25382,25390,25400,25406,25411,25416,25421,25426,25431,25436,25441,25446,25451,25456,25460,25466,25473,25480,25487,25494,25499,25503,25513,25523,25533,25541,25545,25549,25557,25569,25579,25587,25591,25599,25623,25627],{"__ignoreMap":141},[145,25068,25069,25071],{"class":147,"line":148},[145,25070,346],{"class":258},[145,25072,328],{"class":262},[145,25074,25075,25077],{"class":147,"line":166},[145,25076,346],{"class":258},[145,25078,355],{"class":262},[145,25080,25081],{"class":147,"line":178},[145,25082,375],{"emptyLinePlaceholder":58},[145,25084,25085,25087,25089],{"class":147,"line":187},[145,25086,387],{"class":155},[145,25088,390],{"class":258},[145,25090,17419],{"class":159},[145,25092,25093,25095,25097],{"class":147,"line":372},[145,25094,411],{"class":155},[145,25096,390],{"class":258},[145,25098,416],{"class":159},[145,25100,25101,25103,25105],{"class":147,"line":378},[145,25102,422],{"class":155},[145,25104,390],{"class":258},[145,25106,427],{"class":262},[145,25108,25109,25111,25113,25115,25117,25119,25121],{"class":147,"line":384},[145,25110,433],{"class":159},[145,25112,436],{"class":262},[145,25114,439],{"class":258},[145,25116,442],{"class":159},[145,25118,445],{"class":155},[145,25120,448],{"class":159},[145,25122,451],{"class":262},[145,25124,25125,25127,25129],{"class":147,"line":408},[145,25126,457],{"class":159},[145,25128,436],{"class":262},[145,25130,462],{"class":159},[145,25132,25133],{"class":147,"line":419},[145,25134,468],{"class":262},[145,25136,25137],{"class":147,"line":430},[145,25138,375],{"emptyLinePlaceholder":58},[145,25140,25141,25143,25145,25147,25149,25151,25153,25155,25157],{"class":147,"line":454},[145,25142,525],{"class":258},[145,25144,528],{"class":151},[145,25146,11534],{"class":262},[145,25148,266],{"class":258},[145,25150,1353],{"class":155},[145,25152,23297],{"class":262},[145,25154,266],{"class":258},[145,25156,11545],{"class":155},[145,25158,547],{"class":262},[145,25160,25161,25163,25165,25167,25169,25171,25173,25175,25177,25179],{"class":147,"line":465},[145,25162,23313],{"class":262},[145,25164,266],{"class":258},[145,25166,3358],{"class":258},[145,25168,448],{"class":159},[145,25170,678],{"class":155},[145,25172,681],{"class":159},[145,25174,684],{"class":155},[145,25176,687],{"class":262},[145,25178,690],{"class":155},[145,25180,950],{"class":159},[145,25182,25183,25185,25187],{"class":147,"line":599},[145,25184,630],{"class":262},[145,25186,266],{"class":258},[145,25188,635],{"class":155},[145,25190,25191,25193,25195,25197],{"class":147,"line":604},[145,25192,641],{"class":258},[145,25194,644],{"class":262},[145,25196,647],{"class":258},[145,25198,23354],{"class":262},[145,25200,25201,25203,25205,25207,25209,25211,25213],{"class":147,"line":610},[145,25202,6787],{"class":262},[145,25204,266],{"class":258},[145,25206,1131],{"class":262},[145,25208,17648],{"class":700},[145,25210,266],{"class":258},[145,25212,422],{"class":155},[145,25214,405],{"class":262},[145,25216,25217,25219,25221],{"class":147,"line":616},[145,25218,23375],{"class":262},[145,25220,266],{"class":258},[145,25222,11615],{"class":262},[145,25224,25225,25227,25229,25231,25233],{"class":147,"line":622},[145,25226,752],{"class":262},[145,25228,266],{"class":258},[145,25230,23388],{"class":262},[145,25232,760],{"class":159},[145,25234,763],{"class":262},[145,25236,25237,25239,25241,25243,25245],{"class":147,"line":627},[145,25238,847],{"class":258},[145,25240,850],{"class":262},[145,25242,853],{"class":258},[145,25244,856],{"class":159},[145,25246,859],{"class":262},[145,25248,25249,25251,25253,25255,25257,25259,25261,25263,25265,25267,25269,25271,25273],{"class":147,"line":638},[145,25250,5442],{"class":155},[145,25252,793],{"class":262},[145,25254,439],{"class":258},[145,25256,11655],{"class":159},[145,25258,684],{"class":155},[145,25260,23837],{"class":262},[145,25262,17710],{"class":159},[145,25264,1563],{"class":262},[145,25266,17715],{"class":159},[145,25268,1536],{"class":262},[145,25270,690],{"class":155},[145,25272,448],{"class":159},[145,25274,405],{"class":262},[145,25276,25277,25279],{"class":147,"line":653},[145,25278,865],{"class":258},[145,25280,23451],{"class":262},[145,25282,25283,25285,25287,25289,25291],{"class":147,"line":659},[145,25284,874],{"class":258},[145,25286,850],{"class":262},[145,25288,853],{"class":258},[145,25290,881],{"class":159},[145,25292,859],{"class":262},[145,25294,25295,25297,25299,25301,25303,25305,25307,25309,25311,25313,25315,25317,25319],{"class":147,"line":670},[145,25296,5442],{"class":155},[145,25298,793],{"class":262},[145,25300,439],{"class":258},[145,25302,23880],{"class":159},[145,25304,684],{"class":155},[145,25306,23478],{"class":262},[145,25308,11712],{"class":159},[145,25310,399],{"class":262},[145,25312,942],{"class":159},[145,25314,945],{"class":262},[145,25316,690],{"class":155},[145,25318,448],{"class":159},[145,25320,405],{"class":262},[145,25322,25323,25325],{"class":147,"line":697},[145,25324,865],{"class":258},[145,25326,23451],{"class":262},[145,25328,25329,25331,25333,25335,25337,25339,25341,25343,25345,25347,25349,25351,25353],{"class":147,"line":709},[145,25330,790],{"class":155},[145,25332,793],{"class":262},[145,25334,439],{"class":258},[145,25336,11741],{"class":159},[145,25338,684],{"class":155},[145,25340,813],{"class":262},[145,25342,690],{"class":155},[145,25344,1218],{"class":159},[145,25346,684],{"class":155},[145,25348,803],{"class":262},[145,25350,690],{"class":155},[145,25352,10576],{"class":159},[145,25354,405],{"class":262},[145,25356,25357],{"class":147,"line":715},[145,25358,11765],{"class":262},[145,25360,25361,25363,25365],{"class":147,"line":721},[145,25362,979],{"class":262},[145,25364,982],{"class":258},[145,25366,11774],{"class":262},[145,25368,25369,25371],{"class":147,"line":727},[145,25370,1704],{"class":258},[145,25372,11796],{"class":155},[145,25374,25375],{"class":147,"line":738},[145,25376,375],{"emptyLinePlaceholder":58},[145,25378,25379],{"class":147,"line":743},[145,25380,25381],{"class":174},"# --- Multi-Image Composition with @Tags ---\n",[145,25383,25384,25386,25388],{"class":147,"line":749},[145,25385,3660],{"class":262},[145,25387,266],{"class":258},[145,25389,427],{"class":262},[145,25391,25392,25394,25396,25398],{"class":147,"line":766},[145,25393,3669],{"class":159},[145,25395,436],{"class":262},[145,25397,1309],{"class":159},[145,25399,451],{"class":262},[145,25401,25402,25404],{"class":147,"line":787},[145,25403,3680],{"class":159},[145,25405,1323],{"class":262},[145,25407,25408],{"class":147,"line":833},[145,25409,25410],{"class":159},"        \"@Image1 is a parkour runner in dark athletic gear. \"\n",[145,25412,25413],{"class":147,"line":838},[145,25414,25415],{"class":159},"        \"@Image2 is a futuristic city rooftop at twilight. \"\n",[145,25417,25418],{"class":147,"line":844},[145,25419,25420],{"class":159},"        \"@Image3 is a neon-lit alleyway. \"\n",[145,25422,25423],{"class":147,"line":862},[145,25424,25425],{"class":159},"        \"@Image4 is a glass skyscraper facade. \"\n",[145,25427,25428],{"class":147,"line":871},[145,25429,25430],{"class":159},"        \"@Image5 provides the cyberpunk color grading reference. \"\n",[145,25432,25433],{"class":147,"line":886},[145,25434,25435],{"class":159},"        \"The runner (@Image1) sprints across the rooftop (@Image2), \"\n",[145,25437,25438],{"class":147,"line":902},[145,25439,25440],{"class":159},"        \"leaps over the edge, flips through the alleyway (@Image3), \"\n",[145,25442,25443],{"class":147,"line":914},[145,25444,25445],{"class":159},"        \"and wall-runs along the skyscraper (@Image4). \"\n",[145,25447,25448],{"class":147,"line":953},[145,25449,25450],{"class":159},"        \"Dynamic handheld camera follows the action. \"\n",[145,25452,25453],{"class":147,"line":959},[145,25454,25455],{"class":159},"        \"Cyberpunk neon color palette from @Image5 throughout.\"\n",[145,25457,25458],{"class":147,"line":964},[145,25459,3803],{"class":262},[145,25461,25462,25464],{"class":147,"line":970},[145,25463,15206],{"class":159},[145,25465,2691],{"class":262},[145,25467,25468,25471],{"class":147,"line":976},[145,25469,25470],{"class":159},"        \"https://example.com/runner.jpg\"",[145,25472,451],{"class":262},[145,25474,25475,25478],{"class":147,"line":988},[145,25476,25477],{"class":159},"        \"https://example.com/rooftop.jpg\"",[145,25479,451],{"class":262},[145,25481,25482,25485],{"class":147,"line":993},[145,25483,25484],{"class":159},"        \"https://example.com/alley.jpg\"",[145,25486,451],{"class":262},[145,25488,25489,25492],{"class":147,"line":5402},[145,25490,25491],{"class":159},"        \"https://example.com/skyscraper.jpg\"",[145,25493,451],{"class":262},[145,25495,25496],{"class":147,"line":5411},[145,25497,25498],{"class":159},"        \"https://example.com/cyberpunk-ref.jpg\"\n",[145,25500,25501],{"class":147,"line":5439},[145,25502,16188],{"class":262},[145,25504,25505,25507,25509,25511],{"class":147,"line":5470},[145,25506,3692],{"class":159},[145,25508,436],{"class":262},[145,25510,536],{"class":155},[145,25512,451],{"class":262},[145,25514,25515,25517,25519,25521],{"class":147,"line":5490},[145,25516,3704],{"class":159},[145,25518,436],{"class":262},[145,25520,3709],{"class":159},[145,25522,451],{"class":262},[145,25524,25525,25527,25529,25531],{"class":147,"line":5496},[145,25526,3716],{"class":159},[145,25528,436],{"class":262},[145,25530,1385],{"class":159},[145,25532,451],{"class":262},[145,25534,25535,25537,25539],{"class":147,"line":5502},[145,25536,3732],{"class":159},[145,25538,436],{"class":262},[145,25540,3737],{"class":155},[145,25542,25543],{"class":147,"line":5507},[145,25544,468],{"class":262},[145,25546,25547],{"class":147,"line":5520},[145,25548,375],{"emptyLinePlaceholder":58},[145,25550,25551,25553,25555],{"class":147,"line":5547},[145,25552,24073],{"class":262},[145,25554,266],{"class":258},[145,25556,1433],{"class":262},[145,25558,25559,25561,25563,25565,25567],{"class":147,"line":5587},[145,25560,6396],{"class":258},[145,25562,448],{"class":159},[145,25564,678],{"class":155},[145,25566,1445],{"class":159},[145,25568,451],{"class":262},[145,25570,25571,25573,25575,25577],{"class":147,"line":5606},[145,25572,6409],{"class":700},[145,25574,266],{"class":258},[145,25576,422],{"class":155},[145,25578,451],{"class":262},[145,25580,25581,25583,25585],{"class":147,"line":5611},[145,25582,6420],{"class":700},[145,25584,266],{"class":258},[145,25586,2788],{"class":262},[145,25588,25589],{"class":147,"line":5616},[145,25590,405],{"class":262},[145,25592,25593,25595,25597],{"class":147,"line":5621},[145,25594,12078],{"class":262},[145,25596,266],{"class":258},[145,25598,11615],{"class":262},[145,25600,25601,25603,25605,25607,25609,25611,25613,25615,25617,25619,25621],{"class":147,"line":7274},[145,25602,6442],{"class":155},[145,25604,793],{"class":262},[145,25606,439],{"class":258},[145,25608,24130],{"class":159},[145,25610,684],{"class":155},[145,25612,11660],{"class":262},[145,25614,19695],{"class":159},[145,25616,1536],{"class":262},[145,25618,690],{"class":155},[145,25620,448],{"class":159},[145,25622,405],{"class":262},[145,25624,25625],{"class":147,"line":7296},[145,25626,375],{"emptyLinePlaceholder":58},[145,25628,25629,25631,25633,25635,25637],{"class":147,"line":7302},[145,25630,24158],{"class":262},[145,25632,266],{"class":258},[145,25634,24163],{"class":262},[145,25636,7553],{"class":159},[145,25638,1630],{"class":262},[92,25640,25642],{"id":25641},"デモ5枚の画像リファレンスによるシティパルクール","デモ：5枚の画像リファレンスによるシティパルクール",[56,25644,60,25645],{"controls":58,"playsInline":58,"style":59},[62,25646],{"src":12098,"type":65},[11,25648,25649,2427,25651],{},[23,25650,24190],{},[2619,25652,25653],{},"\"@Image1 is the parkour runner. @Image2 is the rooftop environment. @Image3 is the neon alley. @Image4 is the glass building. @Image5 is the color palette reference. The runner (@Image1) sprints across the rooftop (@Image2), leaps, flips through the alley (@Image3), wall-runs along the building (@Image4). Dynamic tracking camera. Cyberpunk color grading from @Image5.\"",[11,25655,25656,25657,25659],{},"5枚の別々の画像（キャラクター、3つの環境、スタイルリファレンス）が1つの連続したアクションシーケンスに統合されています。各 ",[28,25658,4142],{}," タグがモデルに対し、どのビジュアル要素がシーンのどの部分を制御するかを正確に指示しています。",[92,25661,25663],{"id":25662},"一般的な-tag-の役割割り当て","一般的な @Tag の役割割り当て",[11,25665,25666,25668],{},[28,25667,22921],{}," システムは柔軟です。最も効果的なパターンを紹介します：",[2037,25670,25671,25684],{},[2040,25672,25673],{},[2043,25674,25675,25678,25681],{},[2046,25676,25677],{},"役割",[2046,25679,25680],{},"プロンプトでのタグ使用",[2046,25682,25683],{},"目的",[2053,25685,25686,25699,25712,25725,25738,25751],{},[2043,25687,25688,25691,25696],{},[2058,25689,25690],{},"キャラクター",[2058,25692,25693],{},[28,25694,25695],{},"@Image1 is the main character",[2058,25697,25698],{},"アイデンティティ、服装、特徴を保持",[2043,25700,25701,25704,25709],{},[2058,25702,25703],{},"背景",[2058,25705,25706],{},[28,25707,25708],{},"@Image2 is the environment",[2058,25710,25711],{},"シーンの場所を設定",[2043,25713,25714,25717,25722],{},[2058,25715,25716],{},"スタイルリファレンス",[2058,25718,25719],{},[28,25720,25721],{},"@Image3 defines the art style",[2058,25723,25724],{},"レンダリングの美的表現を制御",[2043,25726,25727,25730,25735],{},[2058,25728,25729],{},"オブジェクト/小道具",[2058,25731,25732],{},[28,25733,25734],{},"@Image4 is the product on the table",[2058,25736,25737],{},"シーンに特定のアイテムを配置",[2043,25739,25740,25743,25748],{},[2058,25741,25742],{},"カラーグレーディング",[2058,25744,25745],{},[28,25746,25747],{},"@Image5 is the color palette",[2058,25749,25750],{},"リファレンスから雰囲気/トーンを適用",[2043,25752,25753,25756,25761],{},[2058,25754,25755],{},"テクスチャリファレンス",[2058,25757,25758],{},[28,25759,25760],{},"@Image6 provides surface textures",[2058,25762,25763],{},"マテリアル/テクスチャの転写",[92,25765,25767],{"id":25766},"デモスタイルリファレンス付きキャラクター","デモ：スタイルリファレンス付きキャラクター",[56,25769,60,25770],{"controls":58,"playsInline":58,"style":59},[62,25771],{"src":25772,"type":65},"https://cdn.evolink.ai/seedance2api/%E7%BA%A2%E8%89%B2%E5%A4%96%E5%A5%97%E7%9A%84%E7%A5%9E%E7%A7%98%E8%BA%AB%E5%BD%B1%E5%9C%A8%E5%9F%8E%E5%B8%82%E8%A1%97%E9%81%93%E5%A5%94%E8%B7%91.mp4",[11,25774,25775,2427,25777],{},[23,25776,24190],{},[2619,25778,25779],{},"\"@Image1 is the character — a mysterious figure in a red coat. The character runs through rain-soaked city streets at night. Neon reflections on wet pavement. Camera tracks alongside at medium distance. Cinematic atmosphere, shallow depth of field.\"",[11,25781,25782,25783,25785],{},"1枚のキャラクターリファレンス画像がアイデンティティを制御し、プロンプトが環境とアクションを駆動します。赤いコート、体のプロポーション、動きのスタイルはすべて ",[28,25784,2909],{}," から導き出されています。",[11,25787,25788,25790,25791,1261],{},[28,25789,22921],{}," の完全なリファレンス（動画タグや音声タグ、ミックスメディアの組み合わせ、高度な役割パターンを含む）については、",[37,25792,2968],{"href":2967},[45,25794],{},[48,25796,25797],{"id":25797},"ショット間でキャラクターの一貫性を維持する",[11,25799,25800,25801,25804,25805,25807],{},"1つの生成クリップは便利です。異なるシーンにわたって",[2619,25802,25803],{},"同じキャラクター","が登場するクリップの連続は、ストーリーになります。キャラクターの一貫性は AI 動画生成における最も難しい問題であり、Seedance 2.0 の ",[28,25806,22921],{}," システムは API を通じて利用可能な最も信頼性の高いソリューションを提供します。",[92,25809,25810],{"id":25810},"キャラクターロックパターン",[11,25812,25813,25814,25816],{},"複数のショットで同じキャラクターを維持するには、すべての生成リクエストで同じキャラクターリファレンス画像を ",[28,25815,2909],{}," として使用します。プロンプトと背景/環境画像のみを変更します。",[136,25818,25820],{"className":337,"code":25819,"language":339,"meta":141,"style":141},"CHARACTER_IMAGE = \"https://example.com/my-character.jpg\"\n\nshots = [\n    {\n        \"prompt\": (\n            \"@Image1 is the main character. She walks into a cozy library, \"\n            \"looks around with wonder, and reaches for a book on the top shelf. \"\n            \"Warm golden lighting. Camera at eye level, slow push in.\"\n        ),\n        \"extra_images\": [],\n        \"duration\": 8\n    },\n    {\n        \"prompt\": (\n            \"@Image1 is the main character. She sits at a wooden reading table, \"\n            \"opens the book, and pages start glowing with magical light. \"\n            \"Dust particles float in warm lamplight. Camera orbits slowly around her.\"\n        ),\n        \"extra_images\": [],\n        \"duration\": 10\n    },\n    {\n        \"prompt\": (\n            \"@Image1 is the main character. She steps out of the library into \"\n            \"a fantastical world that matches the book's illustrations. \"\n            \"Vibrant colors replace the muted library tones. \"\n            \"Camera pulls back to reveal the vast landscape. Wide shot.\"\n        ),\n        \"extra_images\": [],\n        \"duration\": 10\n    },\n]\n\ndef generate_shot(shot):\n    image_urls = [CHARACTER_IMAGE] + shot[\"extra_images\"]\n    payload = {\n        \"model\": \"seedance-2.0\",\n        \"prompt\": shot[\"prompt\"],\n        \"image_urls\": image_urls,\n        \"duration\": shot[\"duration\"],\n        \"quality\": \"1080p\",\n        \"aspect_ratio\": \"16:9\"\n    }\n    resp = requests.post(\n        f\"{BASE_URL}/videos/generations\",\n        headers=HEADERS,\n        json=payload\n    )\n    return resp.json()[\"task_id\"]\n\n# Generate all shots\ntask_ids = [generate_shot(shot) for shot in shots]\nprint(f\"Submitted {len(task_ids)} shots: {task_ids}\")\n\n# Poll each shot\nfor i, task_id in enumerate(task_ids):\n    print(f\"\\nWaiting for Shot {i+1}...\")\n    wait_for_video(task_id)\n",[28,25821,25822,25832,25836,25845,25850,25856,25861,25866,25871,25875,25883,25892,25896,25900,25906,25911,25916,25921,25925,25931,25940,25944,25948,25954,25959,25964,25969,25974,25978,25984,25992,25996,26000,26004,26014,26036,26044,26054,26065,26072,26082,26092,26100,26104,26112,26124,26134,26142,26146,26156,26160,26165,26185,26217,26221,26226,26240,26267],{"__ignoreMap":141},[145,25823,25824,25827,25829],{"class":147,"line":148},[145,25825,25826],{"class":155},"CHARACTER_IMAGE",[145,25828,390],{"class":258},[145,25830,25831],{"class":159}," \"https://example.com/my-character.jpg\"\n",[145,25833,25834],{"class":147,"line":166},[145,25835,375],{"emptyLinePlaceholder":58},[145,25837,25838,25841,25843],{"class":147,"line":178},[145,25839,25840],{"class":262},"shots ",[145,25842,266],{"class":258},[145,25844,8725],{"class":262},[145,25846,25847],{"class":147,"line":187},[145,25848,25849],{"class":262},"    {\n",[145,25851,25852,25854],{"class":147,"line":372},[145,25853,1320],{"class":159},[145,25855,1323],{"class":262},[145,25857,25858],{"class":147,"line":378},[145,25859,25860],{"class":159},"            \"@Image1 is the main character. She walks into a cozy library, \"\n",[145,25862,25863],{"class":147,"line":384},[145,25864,25865],{"class":159},"            \"looks around with wonder, and reaches for a book on the top shelf. \"\n",[145,25867,25868],{"class":147,"line":408},[145,25869,25870],{"class":159},"            \"Warm golden lighting. Camera at eye level, slow push in.\"\n",[145,25872,25873],{"class":147,"line":419},[145,25874,1343],{"class":262},[145,25876,25877,25880],{"class":147,"line":430},[145,25878,25879],{"class":159},"        \"extra_images\"",[145,25881,25882],{"class":262},": [],\n",[145,25884,25885,25887,25889],{"class":147,"line":454},[145,25886,1348],{"class":159},[145,25888,436],{"class":262},[145,25890,25891],{"class":155},"8\n",[145,25893,25894],{"class":147,"line":465},[145,25895,22006],{"class":262},[145,25897,25898],{"class":147,"line":599},[145,25899,25849],{"class":262},[145,25901,25902,25904],{"class":147,"line":604},[145,25903,1320],{"class":159},[145,25905,1323],{"class":262},[145,25907,25908],{"class":147,"line":610},[145,25909,25910],{"class":159},"            \"@Image1 is the main character. She sits at a wooden reading table, \"\n",[145,25912,25913],{"class":147,"line":616},[145,25914,25915],{"class":159},"            \"opens the book, and pages start glowing with magical light. \"\n",[145,25917,25918],{"class":147,"line":622},[145,25919,25920],{"class":159},"            \"Dust particles float in warm lamplight. Camera orbits slowly around her.\"\n",[145,25922,25923],{"class":147,"line":627},[145,25924,1343],{"class":262},[145,25926,25927,25929],{"class":147,"line":638},[145,25928,25879],{"class":159},[145,25930,25882],{"class":262},[145,25932,25933,25935,25937],{"class":147,"line":653},[145,25934,1348],{"class":159},[145,25936,436],{"class":262},[145,25938,25939],{"class":155},"10\n",[145,25941,25942],{"class":147,"line":659},[145,25943,22006],{"class":262},[145,25945,25946],{"class":147,"line":670},[145,25947,25849],{"class":262},[145,25949,25950,25952],{"class":147,"line":697},[145,25951,1320],{"class":159},[145,25953,1323],{"class":262},[145,25955,25956],{"class":147,"line":709},[145,25957,25958],{"class":159},"            \"@Image1 is the main character. She steps out of the library into \"\n",[145,25960,25961],{"class":147,"line":715},[145,25962,25963],{"class":159},"            \"a fantastical world that matches the book's illustrations. \"\n",[145,25965,25966],{"class":147,"line":721},[145,25967,25968],{"class":159},"            \"Vibrant colors replace the muted library tones. \"\n",[145,25970,25971],{"class":147,"line":727},[145,25972,25973],{"class":159},"            \"Camera pulls back to reveal the vast landscape. Wide shot.\"\n",[145,25975,25976],{"class":147,"line":738},[145,25977,1343],{"class":262},[145,25979,25980,25982],{"class":147,"line":743},[145,25981,25879],{"class":159},[145,25983,25882],{"class":262},[145,25985,25986,25988,25990],{"class":147,"line":749},[145,25987,1348],{"class":159},[145,25989,436],{"class":262},[145,25991,25939],{"class":155},[145,25993,25994],{"class":147,"line":766},[145,25995,22006],{"class":262},[145,25997,25998],{"class":147,"line":787},[145,25999,763],{"class":262},[145,26001,26002],{"class":147,"line":833},[145,26003,375],{"emptyLinePlaceholder":58},[145,26005,26006,26008,26011],{"class":147,"line":838},[145,26007,525],{"class":258},[145,26009,26010],{"class":151}," generate_shot",[145,26012,26013],{"class":262},"(shot):\n",[145,26015,26016,26018,26020,26022,26024,26026,26028,26031,26034],{"class":147,"line":844},[145,26017,6090],{"class":262},[145,26019,266],{"class":258},[145,26021,8051],{"class":262},[145,26023,25826],{"class":155},[145,26025,14751],{"class":262},[145,26027,5298],{"class":258},[145,26029,26030],{"class":262}," shot[",[145,26032,26033],{"class":159},"\"extra_images\"",[145,26035,763],{"class":262},[145,26037,26038,26040,26042],{"class":147,"line":862},[145,26039,1295],{"class":262},[145,26041,266],{"class":258},[145,26043,427],{"class":262},[145,26045,26046,26048,26050,26052],{"class":147,"line":871},[145,26047,1304],{"class":159},[145,26049,436],{"class":262},[145,26051,1309],{"class":159},[145,26053,451],{"class":262},[145,26055,26056,26058,26061,26063],{"class":147,"line":886},[145,26057,1320],{"class":159},[145,26059,26060],{"class":262},": shot[",[145,26062,5780],{"class":159},[145,26064,10698],{"class":262},[145,26066,26067,26069],{"class":147,"line":902},[145,26068,2688],{"class":159},[145,26070,26071],{"class":262},": image_urls,\n",[145,26073,26074,26076,26078,26080],{"class":147,"line":914},[145,26075,1348],{"class":159},[145,26077,26060],{"class":262},[145,26079,5825],{"class":159},[145,26081,10698],{"class":262},[145,26083,26084,26086,26088,26090],{"class":147,"line":953},[145,26085,1364],{"class":159},[145,26087,436],{"class":262},[145,26089,3709],{"class":159},[145,26091,451],{"class":262},[145,26093,26094,26096,26098],{"class":147,"line":959},[145,26095,1380],{"class":159},[145,26097,436],{"class":262},[145,26099,2730],{"class":159},[145,26101,26102],{"class":147,"line":964},[145,26103,1408],{"class":262},[145,26105,26106,26108,26110],{"class":147,"line":970},[145,26107,1126],{"class":262},[145,26109,266],{"class":258},[145,26111,1433],{"class":262},[145,26113,26114,26116,26118,26120,26122],{"class":147,"line":976},[145,26115,1438],{"class":258},[145,26117,448],{"class":159},[145,26119,678],{"class":155},[145,26121,1445],{"class":159},[145,26123,451],{"class":262},[145,26125,26126,26128,26130,26132],{"class":147,"line":988},[145,26127,1456],{"class":700},[145,26129,266],{"class":258},[145,26131,422],{"class":155},[145,26133,451],{"class":262},[145,26135,26136,26138,26140],{"class":147,"line":993},[145,26137,1471],{"class":700},[145,26139,266],{"class":258},[145,26141,2788],{"class":262},[145,26143,26144],{"class":147,"line":5402},[145,26145,1484],{"class":262},[145,26147,26148,26150,26152,26154],{"class":147,"line":5411},[145,26149,1704],{"class":258},[145,26151,20564],{"class":262},[145,26153,7553],{"class":159},[145,26155,763],{"class":262},[145,26157,26158],{"class":147,"line":5439},[145,26159,375],{"emptyLinePlaceholder":58},[145,26161,26162],{"class":147,"line":5470},[145,26163,26164],{"class":174},"# Generate all shots\n",[145,26166,26167,26170,26172,26175,26177,26180,26182],{"class":147,"line":5490},[145,26168,26169],{"class":262},"task_ids ",[145,26171,266],{"class":258},[145,26173,26174],{"class":262}," [generate_shot(shot) ",[145,26176,8088],{"class":258},[145,26178,26179],{"class":262}," shot ",[145,26181,1180],{"class":258},[145,26183,26184],{"class":262}," shots]\n",[145,26186,26187,26189,26191,26193,26196,26198,26201,26203,26206,26208,26211,26213,26215],{"class":147,"line":5496},[145,26188,6442],{"class":155},[145,26190,793],{"class":262},[145,26192,439],{"class":258},[145,26194,26195],{"class":159},"\"Submitted ",[145,26197,6129],{"class":155},[145,26199,26200],{"class":262},"(task_ids)",[145,26202,690],{"class":155},[145,26204,26205],{"class":159}," shots: ",[145,26207,684],{"class":155},[145,26209,26210],{"class":262},"task_ids",[145,26212,690],{"class":155},[145,26214,448],{"class":159},[145,26216,405],{"class":262},[145,26218,26219],{"class":147,"line":5502},[145,26220,375],{"emptyLinePlaceholder":58},[145,26222,26223],{"class":147,"line":5507},[145,26224,26225],{"class":174},"# Poll each shot\n",[145,26227,26228,26230,26233,26235,26237],{"class":147,"line":5520},[145,26229,8088],{"class":258},[145,26231,26232],{"class":262}," i, task_id ",[145,26234,1180],{"class":258},[145,26236,6150],{"class":155},[145,26238,26239],{"class":262},"(task_ids):\n",[145,26241,26242,26244,26246,26248,26250,26252,26255,26257,26259,26261,26263,26265],{"class":147,"line":5547},[145,26243,1102],{"class":155},[145,26245,793],{"class":262},[145,26247,439],{"class":258},[145,26249,448],{"class":159},[145,26251,1671],{"class":155},[145,26253,26254],{"class":159},"Waiting for Shot ",[145,26256,684],{"class":155},[145,26258,6188],{"class":262},[145,26260,5298],{"class":258},[145,26262,9887],{"class":155},[145,26264,1119],{"class":159},[145,26266,405],{"class":262},[145,26268,26269],{"class":147,"line":5587},[145,26270,26271],{"class":262},"    wait_for_video(task_id)\n",[92,26273,26275],{"id":26274},"デモ図書館ストーリーシーケンス","デモ：図書館ストーリーシーケンス",[56,26277,60,26278],{"controls":58,"playsInline":58,"style":59},[62,26279],{"src":64,"type":65},[11,26281,26282,2427,26284],{},[23,26283,24190],{},[2619,26285,26286],{},"\"@Image1 is a young girl with braids. She enters a grand old library, runs her fingers along the spines of ancient books, pulls one out, and opens it. Golden dust motes swirl in shaft of light from a high window. Warm, magical atmosphere. Camera follows her at child's eye level.\"",[11,26288,26289],{},"キャラクター（おさげの少女）は、同じリファレンス画像がすべてのショットを固定しているため、視覚的に一貫しています。モデルは、異なるアクションと環境を生成しながら、彼女のプロポーション、服装、視覚的特徴を保持します。",[92,26291,26292],{"id":26292},"一貫性のヒント",[11,26294,26295,26298],{},[23,26296,26297],{},"明瞭で照明の良いキャラクターリファレンスを使用しましょう。"," モデルはリファレンス画像からアイデンティティの特徴を抽出します。ぼやけた、照明の暗い、または大部分が隠された画像では、モデルが作業できる情報が少なくなります。正面向き、全身または上半身のショットで、きれいな背景のものが最も良い一貫性を生み出します。",[11,26300,26301,2427,26304,26306],{},[23,26302,26303],{},"プロンプトでのキャラクター記述は最小限にしましょう。",[28,26305,2909],{}," がすでに青いドレスの女の子を示している場合、プロンプトで「赤いドレスを着た女の子」と書かないでください。矛盾する記述はモデルに画像とテキストのどちらかを選ばせることになり、一貫性が低下します。",[11,26308,26309,26312],{},[23,26310,26311],{},"ショット間で同じアスペクト比を維持しましょう。"," シーケンスの途中で 16:9 から 9:16 に切り替えると、異なるフレーミングが強制され、キャラクターの見え方が変わる可能性があります。1つの比率を選び、それを維持してください。",[11,26314,26315,26318,26319,26321],{},[23,26316,26317],{},"環境画像は別の @tags として追加しましょう。"," 背景をすべてテキストで記述する代わりに、背景のリファレンス画像を ",[28,26320,2919],{}," として提供します。これにより、キャラクターと環境の両方を視覚的に分離したまま正確に制御できます。",[136,26323,26325],{"className":337,"code":26324,"language":339,"meta":141,"style":141},"# Shot 1: Character in library\n\"image_urls\": [CHARACTER_IMAGE, \"https://example.com/library.jpg\"]\n# Prompt: \"@Image1 is the character. @Image2 is the library environment.\"\n\n# Shot 2: Character in forest\n\"image_urls\": [CHARACTER_IMAGE, \"https://example.com/forest.jpg\"]\n# Prompt: \"@Image1 is the character. @Image2 is the forest environment.\"\n",[28,26326,26327,26332,26347,26352,26356,26361,26376],{"__ignoreMap":141},[145,26328,26329],{"class":147,"line":148},[145,26330,26331],{"class":174},"# Shot 1: Character in library\n",[145,26333,26334,26336,26338,26340,26342,26345],{"class":147,"line":166},[145,26335,6097],{"class":159},[145,26337,10692],{"class":262},[145,26339,25826],{"class":155},[145,26341,399],{"class":262},[145,26343,26344],{"class":159},"\"https://example.com/library.jpg\"",[145,26346,763],{"class":262},[145,26348,26349],{"class":147,"line":178},[145,26350,26351],{"class":174},"# Prompt: \"@Image1 is the character. @Image2 is the library environment.\"\n",[145,26353,26354],{"class":147,"line":187},[145,26355,375],{"emptyLinePlaceholder":58},[145,26357,26358],{"class":147,"line":372},[145,26359,26360],{"class":174},"# Shot 2: Character in forest\n",[145,26362,26363,26365,26367,26369,26371,26374],{"class":147,"line":378},[145,26364,6097],{"class":159},[145,26366,10692],{"class":262},[145,26368,25826],{"class":155},[145,26370,399],{"class":262},[145,26372,26373],{"class":159},"\"https://example.com/forest.jpg\"",[145,26375,763],{"class":262},[145,26377,26378],{"class":147,"line":384},[145,26379,26380],{"class":174},"# Prompt: \"@Image1 is the character. @Image2 is the forest environment.\"\n",[11,26382,26383,26384,26386,26387,26389],{},"このパターン（キャラクターには固定の ",[28,26385,2909],{},"、環境には可変の ",[28,26388,2919],{},"）は、現在の AI 動画 API の中で最も信頼性の高いマルチショットワークフローです。",[92,26391,26393],{"id":26392},"上級編マルチショットナラティブパイプライン","上級編：マルチショットナラティブパイプライン",[11,26395,26396],{},"より長いナラティブ（30秒以上）の場合、複数のクリップを生成してつなぎ合わせる必要があります。ここでは、パイプライン全体を管理する構造化されたアプローチを紹介します。ショットリストの定義、並列生成、順序付きの出力です：",[136,26398,26400],{"className":337,"code":26399,"language":339,"meta":141,"style":141},"import concurrent.futures\nimport requests\nimport time\nimport json\n\nAPI_KEY = \"YOUR_API_KEY\"\nBASE_URL = \"https://api.evolink.ai/v1\"\nHEADERS = {\n    \"Authorization\": f\"Bearer {API_KEY}\",\n    \"Content-Type\": \"application/json\"\n}\n\nCHARACTER_REF = \"https://example.com/story-character.jpg\"\n\nSHOT_LIST = [\n    {\n        \"shot_id\": \"01_entrance\",\n        \"prompt\": (\n            \"@Image1 is the main character. \"\n            \"She pushes open a heavy wooden door and steps into a dimly lit room. \"\n            \"Dust swirls in the doorway light. \"\n            \"Camera follows her from behind, over-the-shoulder angle.\"\n        ),\n        \"env_images\": [],\n        \"duration\": 6\n    },\n    {\n        \"shot_id\": \"02_discovery\",\n        \"prompt\": (\n            \"@Image1 is the main character. @Image2 is the room interior. \"\n            \"She walks to the center of the room and discovers a glowing object on a pedestal. \"\n            \"Her face shows surprise. Blue light illuminates her features. \"\n            \"Camera pushes in from medium shot to close-up on her expression.\"\n        ),\n        \"env_images\": [\"https://example.com/mysterious-room.jpg\"],\n        \"duration\": 8\n    },\n    {\n        \"shot_id\": \"03_transformation\",\n        \"prompt\": (\n            \"@Image1 is the main character. \"\n            \"She reaches out and touches the glowing object. \"\n            \"Light radiates outward from the point of contact. \"\n            \"The room transforms — walls dissolve into a starfield. \"\n            \"Camera rapidly pulls back to extreme wide shot.\"\n        ),\n        \"env_images\": [],\n        \"duration\": 10\n    },\n]\n\ndef submit_shot(shot):\n    \"\"\"Submit a single shot for generation.\"\"\"\n    image_urls = [CHARACTER_REF] + shot[\"env_images\"]\n    payload = {\n        \"model\": \"seedance-2.0\",\n        \"prompt\": shot[\"prompt\"],\n        \"image_urls\": image_urls,\n        \"duration\": shot[\"duration\"],\n        \"quality\": \"1080p\",\n        \"aspect_ratio\": \"16:9\",\n        \"generate_audio\": True\n    }\n    resp = requests.post(f\"{BASE_URL}/videos/generations\", headers=HEADERS, json=payload)\n    task_id = resp.json()[\"task_id\"]\n    return {\"shot_id\": shot[\"shot_id\"], \"task_id\": task_id}\n\ndef poll_until_done(task_id, max_wait=300):\n    \"\"\"Block until task completes or fails.\"\"\"\n    url = f\"{BASE_URL}/tasks/{task_id}\"\n    elapsed = 0\n    while elapsed \u003C max_wait:\n        data = requests.get(url, headers=HEADERS).json()\n        if data[\"status\"] in (\"completed\", \"failed\"):\n            return data\n        time.sleep(5)\n        elapsed += 5\n    return None\n\n# Submit all shots in parallel\nresults = []\nfor shot in SHOT_LIST:\n    result = submit_shot(shot)\n    results.append(result)\n    print(f\"Submitted {result['shot_id']} → {result['task_id']}\")\n    time.sleep(0.5)\n\n# Collect results in order\nfinal_videos = []\nfor r in results:\n    print(f\"\\nPolling {r['shot_id']}...\")\n    data = poll_until_done(r[\"task_id\"])\n    if data and data[\"status\"] == \"completed\":\n        video_url = data[\"output\"][\"video_url\"]\n        final_videos.append({\"shot_id\": r[\"shot_id\"], \"url\": video_url})\n        print(f\"  Done: {r['shot_id']}: {video_url}\")\n    else:\n        print(f\"  Failed: {r['shot_id']}: generation failed\")\n\n# Output the ordered shot list\nprint(\"\\n=== Final Shot List ===\")\nfor v in final_videos:\n    print(f\"{v['shot_id']}: {v['url']}\")\n",[28,26401,26402,26408,26414,26420,26426,26430,26438,26446,26454,26470,26478,26482,26486,26496,26500,26509,26513,26525,26531,26536,26541,26546,26551,26555,26562,26571,26575,26579,26590,26596,26601,26606,26611,26616,26620,26631,26639,26643,26647,26658,26664,26668,26673,26678,26683,26688,26692,26698,26706,26710,26714,26718,26727,26732,26753,26761,26771,26781,26787,26797,26807,26817,26825,26829,26863,26875,26895,26899,26915,26920,26942,26950,26960,26977,27001,27007,27015,27023,27029,27033,27038,27046,27059,27068,27073,27110,27119,27123,27128,27137,27147,27177,27191,27213,27230,27250,27283,27289,27315,27319,27324,27339,27351],{"__ignoreMap":141},[145,26403,26404,26406],{"class":147,"line":148},[145,26405,346],{"class":258},[145,26407,8228],{"class":262},[145,26409,26410,26412],{"class":147,"line":166},[145,26411,346],{"class":258},[145,26413,328],{"class":262},[145,26415,26416,26418],{"class":147,"line":178},[145,26417,346],{"class":258},[145,26419,355],{"class":262},[145,26421,26422,26424],{"class":147,"line":187},[145,26423,346],{"class":258},[145,26425,369],{"class":262},[145,26427,26428],{"class":147,"line":372},[145,26429,375],{"emptyLinePlaceholder":58},[145,26431,26432,26434,26436],{"class":147,"line":378},[145,26433,387],{"class":155},[145,26435,390],{"class":258},[145,26437,17419],{"class":159},[145,26439,26440,26442,26444],{"class":147,"line":384},[145,26441,411],{"class":155},[145,26443,390],{"class":258},[145,26445,416],{"class":159},[145,26447,26448,26450,26452],{"class":147,"line":408},[145,26449,422],{"class":155},[145,26451,390],{"class":258},[145,26453,427],{"class":262},[145,26455,26456,26458,26460,26462,26464,26466,26468],{"class":147,"line":419},[145,26457,433],{"class":159},[145,26459,436],{"class":262},[145,26461,439],{"class":258},[145,26463,442],{"class":159},[145,26465,445],{"class":155},[145,26467,448],{"class":159},[145,26469,451],{"class":262},[145,26471,26472,26474,26476],{"class":147,"line":430},[145,26473,457],{"class":159},[145,26475,436],{"class":262},[145,26477,462],{"class":159},[145,26479,26480],{"class":147,"line":454},[145,26481,468],{"class":262},[145,26483,26484],{"class":147,"line":465},[145,26485,375],{"emptyLinePlaceholder":58},[145,26487,26488,26491,26493],{"class":147,"line":599},[145,26489,26490],{"class":155},"CHARACTER_REF",[145,26492,390],{"class":258},[145,26494,26495],{"class":159}," \"https://example.com/story-character.jpg\"\n",[145,26497,26498],{"class":147,"line":604},[145,26499,375],{"emptyLinePlaceholder":58},[145,26501,26502,26505,26507],{"class":147,"line":610},[145,26503,26504],{"class":155},"SHOT_LIST",[145,26506,390],{"class":258},[145,26508,8725],{"class":262},[145,26510,26511],{"class":147,"line":616},[145,26512,25849],{"class":262},[145,26514,26515,26518,26520,26523],{"class":147,"line":622},[145,26516,26517],{"class":159},"        \"shot_id\"",[145,26519,436],{"class":262},[145,26521,26522],{"class":159},"\"01_entrance\"",[145,26524,451],{"class":262},[145,26526,26527,26529],{"class":147,"line":627},[145,26528,1320],{"class":159},[145,26530,1323],{"class":262},[145,26532,26533],{"class":147,"line":638},[145,26534,26535],{"class":159},"            \"@Image1 is the main character. \"\n",[145,26537,26538],{"class":147,"line":653},[145,26539,26540],{"class":159},"            \"She pushes open a heavy wooden door and steps into a dimly lit room. \"\n",[145,26542,26543],{"class":147,"line":659},[145,26544,26545],{"class":159},"            \"Dust swirls in the doorway light. \"\n",[145,26547,26548],{"class":147,"line":670},[145,26549,26550],{"class":159},"            \"Camera follows her from behind, over-the-shoulder angle.\"\n",[145,26552,26553],{"class":147,"line":697},[145,26554,1343],{"class":262},[145,26556,26557,26560],{"class":147,"line":709},[145,26558,26559],{"class":159},"        \"env_images\"",[145,26561,25882],{"class":262},[145,26563,26564,26566,26568],{"class":147,"line":715},[145,26565,1348],{"class":159},[145,26567,436],{"class":262},[145,26569,26570],{"class":155},"6\n",[145,26572,26573],{"class":147,"line":721},[145,26574,22006],{"class":262},[145,26576,26577],{"class":147,"line":727},[145,26578,25849],{"class":262},[145,26580,26581,26583,26585,26588],{"class":147,"line":738},[145,26582,26517],{"class":159},[145,26584,436],{"class":262},[145,26586,26587],{"class":159},"\"02_discovery\"",[145,26589,451],{"class":262},[145,26591,26592,26594],{"class":147,"line":743},[145,26593,1320],{"class":159},[145,26595,1323],{"class":262},[145,26597,26598],{"class":147,"line":749},[145,26599,26600],{"class":159},"            \"@Image1 is the main character. @Image2 is the room interior. \"\n",[145,26602,26603],{"class":147,"line":766},[145,26604,26605],{"class":159},"            \"She walks to the center of the room and discovers a glowing object on a pedestal. \"\n",[145,26607,26608],{"class":147,"line":787},[145,26609,26610],{"class":159},"            \"Her face shows surprise. Blue light illuminates her features. \"\n",[145,26612,26613],{"class":147,"line":833},[145,26614,26615],{"class":159},"            \"Camera pushes in from medium shot to close-up on her expression.\"\n",[145,26617,26618],{"class":147,"line":838},[145,26619,1343],{"class":262},[145,26621,26622,26624,26626,26629],{"class":147,"line":844},[145,26623,26559],{"class":159},[145,26625,10692],{"class":262},[145,26627,26628],{"class":159},"\"https://example.com/mysterious-room.jpg\"",[145,26630,10698],{"class":262},[145,26632,26633,26635,26637],{"class":147,"line":862},[145,26634,1348],{"class":159},[145,26636,436],{"class":262},[145,26638,25891],{"class":155},[145,26640,26641],{"class":147,"line":871},[145,26642,22006],{"class":262},[145,26644,26645],{"class":147,"line":886},[145,26646,25849],{"class":262},[145,26648,26649,26651,26653,26656],{"class":147,"line":902},[145,26650,26517],{"class":159},[145,26652,436],{"class":262},[145,26654,26655],{"class":159},"\"03_transformation\"",[145,26657,451],{"class":262},[145,26659,26660,26662],{"class":147,"line":914},[145,26661,1320],{"class":159},[145,26663,1323],{"class":262},[145,26665,26666],{"class":147,"line":953},[145,26667,26535],{"class":159},[145,26669,26670],{"class":147,"line":959},[145,26671,26672],{"class":159},"            \"She reaches out and touches the glowing object. \"\n",[145,26674,26675],{"class":147,"line":964},[145,26676,26677],{"class":159},"            \"Light radiates outward from the point of contact. \"\n",[145,26679,26680],{"class":147,"line":970},[145,26681,26682],{"class":159},"            \"The room transforms — walls dissolve into a starfield. \"\n",[145,26684,26685],{"class":147,"line":976},[145,26686,26687],{"class":159},"            \"Camera rapidly pulls back to extreme wide shot.\"\n",[145,26689,26690],{"class":147,"line":988},[145,26691,1343],{"class":262},[145,26693,26694,26696],{"class":147,"line":993},[145,26695,26559],{"class":159},[145,26697,25882],{"class":262},[145,26699,26700,26702,26704],{"class":147,"line":5402},[145,26701,1348],{"class":159},[145,26703,436],{"class":262},[145,26705,25939],{"class":155},[145,26707,26708],{"class":147,"line":5411},[145,26709,22006],{"class":262},[145,26711,26712],{"class":147,"line":5439},[145,26713,763],{"class":262},[145,26715,26716],{"class":147,"line":5470},[145,26717,375],{"emptyLinePlaceholder":58},[145,26719,26720,26722,26725],{"class":147,"line":5490},[145,26721,525],{"class":258},[145,26723,26724],{"class":151}," submit_shot",[145,26726,26013],{"class":262},[145,26728,26729],{"class":147,"line":5496},[145,26730,26731],{"class":159},"    \"\"\"Submit a single shot for generation.\"\"\"\n",[145,26733,26734,26736,26738,26740,26742,26744,26746,26748,26751],{"class":147,"line":5502},[145,26735,6090],{"class":262},[145,26737,266],{"class":258},[145,26739,8051],{"class":262},[145,26741,26490],{"class":155},[145,26743,14751],{"class":262},[145,26745,5298],{"class":258},[145,26747,26030],{"class":262},[145,26749,26750],{"class":159},"\"env_images\"",[145,26752,763],{"class":262},[145,26754,26755,26757,26759],{"class":147,"line":5507},[145,26756,1295],{"class":262},[145,26758,266],{"class":258},[145,26760,427],{"class":262},[145,26762,26763,26765,26767,26769],{"class":147,"line":5520},[145,26764,1304],{"class":159},[145,26766,436],{"class":262},[145,26768,1309],{"class":159},[145,26770,451],{"class":262},[145,26772,26773,26775,26777,26779],{"class":147,"line":5547},[145,26774,1320],{"class":159},[145,26776,26060],{"class":262},[145,26778,5780],{"class":159},[145,26780,10698],{"class":262},[145,26782,26783,26785],{"class":147,"line":5587},[145,26784,2688],{"class":159},[145,26786,26071],{"class":262},[145,26788,26789,26791,26793,26795],{"class":147,"line":5606},[145,26790,1348],{"class":159},[145,26792,26060],{"class":262},[145,26794,5825],{"class":159},[145,26796,10698],{"class":262},[145,26798,26799,26801,26803,26805],{"class":147,"line":5611},[145,26800,1364],{"class":159},[145,26802,436],{"class":262},[145,26804,3709],{"class":159},[145,26806,451],{"class":262},[145,26808,26809,26811,26813,26815],{"class":147,"line":5616},[145,26810,1380],{"class":159},[145,26812,436],{"class":262},[145,26814,1385],{"class":159},[145,26816,451],{"class":262},[145,26818,26819,26821,26823],{"class":147,"line":5621},[145,26820,1396],{"class":159},[145,26822,436],{"class":262},[145,26824,3737],{"class":155},[145,26826,26827],{"class":147,"line":7274},[145,26828,1408],{"class":262},[145,26830,26831,26833,26835,26838,26840,26842,26844,26846,26848,26850,26852,26854,26856,26858,26860],{"class":147,"line":7296},[145,26832,1126],{"class":262},[145,26834,266],{"class":258},[145,26836,26837],{"class":262}," requests.post(",[145,26839,439],{"class":258},[145,26841,448],{"class":159},[145,26843,678],{"class":155},[145,26845,1445],{"class":159},[145,26847,399],{"class":262},[145,26849,17648],{"class":700},[145,26851,266],{"class":258},[145,26853,422],{"class":155},[145,26855,399],{"class":262},[145,26857,1859],{"class":700},[145,26859,266],{"class":258},[145,26861,26862],{"class":262},"payload)\n",[145,26864,26865,26867,26869,26871,26873],{"class":147,"line":7302},[145,26866,7076],{"class":262},[145,26868,266],{"class":258},[145,26870,20564],{"class":262},[145,26872,7553],{"class":159},[145,26874,763],{"class":262},[145,26876,26877,26879,26881,26884,26886,26888,26890,26892],{"class":147,"line":7308},[145,26878,1704],{"class":258},[145,26880,5894],{"class":262},[145,26882,26883],{"class":159},"\"shot_id\"",[145,26885,26060],{"class":262},[145,26887,26883],{"class":159},[145,26889,10606],{"class":262},[145,26891,7553],{"class":159},[145,26893,26894],{"class":262},": task_id}\n",[145,26896,26897],{"class":147,"line":7319},[145,26898,375],{"emptyLinePlaceholder":58},[145,26900,26901,26903,26906,26909,26911,26913],{"class":147,"line":7330},[145,26902,525],{"class":258},[145,26904,26905],{"class":151}," poll_until_done",[145,26907,26908],{"class":262},"(task_id, max_wait",[145,26910,266],{"class":258},[145,26912,11545],{"class":155},[145,26914,547],{"class":262},[145,26916,26917],{"class":147,"line":7341},[145,26918,26919],{"class":159},"    \"\"\"Block until task completes or fails.\"\"\"\n",[145,26921,26922,26924,26926,26928,26930,26932,26934,26936,26938,26940],{"class":147,"line":7346},[145,26923,23313],{"class":262},[145,26925,266],{"class":258},[145,26927,3358],{"class":258},[145,26929,448],{"class":159},[145,26931,678],{"class":155},[145,26933,681],{"class":159},[145,26935,684],{"class":155},[145,26937,687],{"class":262},[145,26939,690],{"class":155},[145,26941,950],{"class":159},[145,26943,26944,26946,26948],{"class":147,"line":7352},[145,26945,630],{"class":262},[145,26947,266],{"class":258},[145,26949,635],{"class":155},[145,26951,26952,26954,26956,26958],{"class":147,"line":7360},[145,26953,641],{"class":258},[145,26955,644],{"class":262},[145,26957,647],{"class":258},[145,26959,23354],{"class":262},[145,26961,26962,26964,26966,26968,26970,26972,26974],{"class":147,"line":7374},[145,26963,23375],{"class":262},[145,26965,266],{"class":258},[145,26967,1131],{"class":262},[145,26969,17648],{"class":700},[145,26971,266],{"class":258},[145,26973,422],{"class":155},[145,26975,26976],{"class":262},").json()\n",[145,26978,26979,26981,26983,26985,26987,26989,26991,26994,26996,26999],{"class":147,"line":7379},[145,26980,847],{"class":258},[145,26982,23388],{"class":262},[145,26984,760],{"class":159},[145,26986,14751],{"class":262},[145,26988,1180],{"class":258},[145,26990,1218],{"class":262},[145,26992,26993],{"class":159},"\"completed\"",[145,26995,399],{"class":262},[145,26997,26998],{"class":159},"\"failed\"",[145,27000,547],{"class":262},[145,27002,27003,27005],{"class":147,"line":7393},[145,27004,865],{"class":258},[145,27006,23451],{"class":262},[145,27008,27009,27011,27013],{"class":147,"line":7407},[145,27010,14888],{"class":262},[145,27012,1353],{"class":155},[145,27014,405],{"class":262},[145,27016,27017,27019,27021],{"class":147,"line":7439},[145,27018,979],{"class":262},[145,27020,982],{"class":258},[145,27022,20764],{"class":155},[145,27024,27025,27027],{"class":147,"line":7451},[145,27026,1704],{"class":258},[145,27028,11796],{"class":155},[145,27030,27031],{"class":147,"line":7461},[145,27032,375],{"emptyLinePlaceholder":58},[145,27034,27035],{"class":147,"line":7466},[145,27036,27037],{"class":174},"# Submit all shots in parallel\n",[145,27039,27040,27042,27044],{"class":147,"line":7473},[145,27041,21708],{"class":262},[145,27043,266],{"class":258},[145,27045,5735],{"class":262},[145,27047,27048,27050,27052,27054,27057],{"class":147,"line":7495},[145,27049,8088],{"class":258},[145,27051,26179],{"class":262},[145,27053,1180],{"class":258},[145,27055,27056],{"class":155}," SHOT_LIST",[145,27058,859],{"class":262},[145,27060,27061,27063,27065],{"class":147,"line":7526},[145,27062,1619],{"class":262},[145,27064,266],{"class":258},[145,27066,27067],{"class":262}," submit_shot(shot)\n",[145,27069,27070],{"class":147,"line":7531},[145,27071,27072],{"class":262},"    results.append(result)\n",[145,27074,27075,27077,27079,27081,27083,27085,27087,27090,27092,27094,27096,27098,27100,27102,27104,27106,27108],{"class":147,"line":7537},[145,27076,1102],{"class":155},[145,27078,793],{"class":262},[145,27080,439],{"class":258},[145,27082,26195],{"class":159},[145,27084,684],{"class":155},[145,27086,11660],{"class":262},[145,27088,27089],{"class":159},"'shot_id'",[145,27091,1536],{"class":262},[145,27093,690],{"class":155},[145,27095,2254],{"class":159},[145,27097,684],{"class":155},[145,27099,11660],{"class":262},[145,27101,19695],{"class":159},[145,27103,1536],{"class":262},[145,27105,690],{"class":155},[145,27107,448],{"class":159},[145,27109,405],{"class":262},[145,27111,27112,27114,27117],{"class":147,"line":7562},[145,27113,19708],{"class":262},[145,27115,27116],{"class":155},"0.5",[145,27118,405],{"class":262},[145,27120,27121],{"class":147,"line":7567},[145,27122,375],{"emptyLinePlaceholder":58},[145,27124,27125],{"class":147,"line":7572},[145,27126,27127],{"class":174},"# Collect results in order\n",[145,27129,27130,27133,27135],{"class":147,"line":7595},[145,27131,27132],{"class":262},"final_videos ",[145,27134,266],{"class":258},[145,27136,5735],{"class":262},[145,27138,27139,27141,27143,27145],{"class":147,"line":7605},[145,27140,8088],{"class":258},[145,27142,21628],{"class":262},[145,27144,1180],{"class":258},[145,27146,7257],{"class":262},[145,27148,27149,27151,27153,27155,27157,27159,27162,27164,27167,27169,27171,27173,27175],{"class":147,"line":7611},[145,27150,1102],{"class":155},[145,27152,793],{"class":262},[145,27154,439],{"class":258},[145,27156,448],{"class":159},[145,27158,1671],{"class":155},[145,27160,27161],{"class":159},"Polling ",[145,27163,684],{"class":155},[145,27165,27166],{"class":262},"r[",[145,27168,27089],{"class":159},[145,27170,1536],{"class":262},[145,27172,690],{"class":155},[145,27174,1119],{"class":159},[145,27176,405],{"class":262},[145,27178,27179,27182,27184,27187,27189],{"class":147,"line":7629},[145,27180,27181],{"class":262},"    data ",[145,27183,266],{"class":258},[145,27185,27186],{"class":262}," poll_until_done(r[",[145,27188,7553],{"class":159},[145,27190,1630],{"class":262},[145,27192,27193,27195,27198,27201,27203,27205,27207,27209,27211],{"class":147,"line":7634},[145,27194,2505],{"class":258},[145,27196,27197],{"class":262}," data ",[145,27199,27200],{"class":258},"and",[145,27202,23388],{"class":262},[145,27204,760],{"class":159},[145,27206,14751],{"class":262},[145,27208,853],{"class":258},[145,27210,856],{"class":159},[145,27212,859],{"class":262},[145,27214,27215,27218,27220,27222,27224,27226,27228],{"class":147,"line":7639},[145,27216,27217],{"class":262},"        video_url ",[145,27219,266],{"class":258},[145,27221,23388],{"class":262},[145,27223,21344],{"class":159},[145,27225,1563],{"class":262},[145,27227,14773],{"class":159},[145,27229,763],{"class":262},[145,27231,27232,27235,27237,27240,27242,27244,27247],{"class":147,"line":7652},[145,27233,27234],{"class":262},"        final_videos.append({",[145,27236,26883],{"class":159},[145,27238,27239],{"class":262},": r[",[145,27241,26883],{"class":159},[145,27243,10606],{"class":262},[145,27245,27246],{"class":159},"\"url\"",[145,27248,27249],{"class":262},": video_url})\n",[145,27251,27252,27254,27256,27258,27261,27263,27265,27267,27269,27271,27273,27275,27277,27279,27281],{"class":147,"line":7666},[145,27253,790],{"class":155},[145,27255,793],{"class":262},[145,27257,439],{"class":258},[145,27259,27260],{"class":159},"\"  Done: ",[145,27262,684],{"class":155},[145,27264,27166],{"class":262},[145,27266,27089],{"class":159},[145,27268,1536],{"class":262},[145,27270,690],{"class":155},[145,27272,436],{"class":159},[145,27274,684],{"class":155},[145,27276,1679],{"class":262},[145,27278,690],{"class":155},[145,27280,448],{"class":159},[145,27282,405],{"class":262},[145,27284,27285,27287],{"class":147,"line":7693},[145,27286,2541],{"class":258},[145,27288,859],{"class":262},[145,27290,27291,27293,27295,27297,27300,27302,27304,27306,27308,27310,27313],{"class":147,"line":7707},[145,27292,790],{"class":155},[145,27294,793],{"class":262},[145,27296,439],{"class":258},[145,27298,27299],{"class":159},"\"  Failed: ",[145,27301,684],{"class":155},[145,27303,27166],{"class":262},[145,27305,27089],{"class":159},[145,27307,1536],{"class":262},[145,27309,690],{"class":155},[145,27311,27312],{"class":159},": generation failed\"",[145,27314,405],{"class":262},[145,27316,27317],{"class":147,"line":10218},[145,27318,375],{"emptyLinePlaceholder":58},[145,27320,27321],{"class":147,"line":10225},[145,27322,27323],{"class":174},"# Output the ordered shot list\n",[145,27325,27326,27328,27330,27332,27334,27337],{"class":147,"line":10271},[145,27327,6442],{"class":155},[145,27329,793],{"class":262},[145,27331,448],{"class":159},[145,27333,1671],{"class":155},[145,27335,27336],{"class":159},"=== Final Shot List ===\"",[145,27338,405],{"class":262},[145,27340,27341,27343,27346,27348],{"class":147,"line":10276},[145,27342,8088],{"class":258},[145,27344,27345],{"class":262}," v ",[145,27347,1180],{"class":258},[145,27349,27350],{"class":262}," final_videos:\n",[145,27352,27353,27355,27357,27359,27361,27363,27366,27368,27370,27372,27374,27376,27378,27381,27383,27385,27387],{"class":147,"line":10281},[145,27354,1102],{"class":155},[145,27356,793],{"class":262},[145,27358,439],{"class":258},[145,27360,448],{"class":159},[145,27362,684],{"class":155},[145,27364,27365],{"class":262},"v[",[145,27367,27089],{"class":159},[145,27369,1536],{"class":262},[145,27371,690],{"class":155},[145,27373,436],{"class":159},[145,27375,684],{"class":155},[145,27377,27365],{"class":262},[145,27379,27380],{"class":159},"'url'",[145,27382,1536],{"class":262},[145,27384,690],{"class":155},[145,27386,448],{"class":159},[145,27388,405],{"class":262},[11,27390,27391,27392,11054,27394,27396],{},"このパイプラインは、任意の動画エディタや自動ステッチングツール（FFmpeg、MoviePy など）に入力できる、順序付きの動画 URL リストを生成します。すべてのリクエストが同じ ",[28,27393,26490],{},[28,27395,2909],{}," として使用するため、キャラクターはすべてのショットで一貫性を保ちます。",[92,27398,27399],{"id":27399},"一貫性のエッジケースへの対処",[11,27401,27402],{},"同じリファレンス画像を使用しても、ショット間でわずかなバリエーションが生じることがあります。キャラクターの服の色が数シェード変化したり、極端なワイドショットでプロポーションがわずかに変わったりすることがあります。これらのバリエーションを最小限に抑える戦略を紹介します：",[11,27404,27405,27408],{},[23,27406,27407],{},"すべてのプロンプトでキャラクターの詳細を再記述しましょう。"," キャラクターが特定の服装を着ている場合、簡潔に言及します：「@Image1 is the main character wearing a blue denim jacket.」これにより、リファレンス画像からのビジュアルアンカーが強化されます。",[11,27410,27411,27414],{},[23,27412,27413],{},"ショット間での極端なアングル変更を避けましょう。"," 正面のミディアムショットに続くトップダウンの極端なワイドショットは、最も多くのバリエーションを引き起こします。段階的に移行しましょう：ミディアムショット → やや広めのショット → ワイドショット。",[11,27416,27417,27420,27421,3620,27423,27425],{},[23,27418,27419],{},"同じクオリティとアスペクト比を使用しましょう。"," ショット間で ",[28,27422,1788],{},[28,27424,1796],{}," を混在させると、微妙なレンダリングの違いが生じることがあります。ショットリスト全体ですべてのパラメータを統一してください。",[45,27427],{},[48,27429,27431],{"id":27430},"ec-商品動画エンドツーエンドのワークフロー","EC 商品動画：エンドツーエンドのワークフロー",[11,27433,27434,27435,27438],{},"商品写真は高価です。商品の",[2619,27436,27437],{},"動画撮影","はさらに高価です。スタジオ、ターンテーブル、適切な照明、カメラマン、編集時間が必要です。Seedance 2.0 の画像から動画 API は、そのパイプラインのほとんどを1回の API コールで置き換えます。",[92,27440,27441],{"id":27441},"商品動画の課題",[11,27443,27444],{},"EC プラットフォームはますます動画コンテンツを優遇しています。Amazon では動画付きの商品リスティングがより高いコンバージョン率を示すと報告されています。Instagram と TikTok は動画ファーストのプラットフォームです。しかし、シンプルな10秒の商品回転動画を従来の方法で制作するには、以下が必要です：",[70,27446,27447,27450,27453,27456,27459],{},[73,27448,27449],{},"物理的なターンテーブルのセットアップ",[73,27451,27452],{},"適切な照明機材",[73,27454,27455],{},"撮影者（または慎重な DIY）",[73,27457,27458],{},"編集とカラーコレクション",[73,27460,27461],{},"エクスポートとアップロード",[11,27463,27464],{},"Seedance 2.0 では、パイプラインは次のようになります：",[70,27466,27467,27470,27473],{},[73,27468,27469],{},"商品写真を撮る（すでにお持ちのはずです）",[73,27471,27472],{},"1回の API コールを実行する",[73,27474,27475],{},"動画をダウンロードする",[92,27477,27479],{"id":27478},"単一商品腕時計の広告","単一商品：腕時計の広告",[11,27481,27482],{},"単一の商品画像から商品ショーケース動画を生成するための完全なワークフローを紹介します：",[136,27484,27486],{"className":337,"code":27485,"language":339,"meta":141,"style":141},"import requests\nimport time\n\nAPI_KEY = \"YOUR_API_KEY\"\nBASE_URL = \"https://api.evolink.ai/v1\"\nHEADERS = {\n    \"Authorization\": f\"Bearer {API_KEY}\",\n    \"Content-Type\": \"application/json\"\n}\n\ndef wait_for_video(task_id, interval=5, max_wait=300):\n    url = f\"{BASE_URL}/tasks/{task_id}\"\n    elapsed = 0\n    while elapsed \u003C max_wait:\n        resp = requests.get(url, headers=HEADERS)\n        data = resp.json()\n        status = data[\"status\"]\n        if status == \"completed\":\n            print(f\"Video ready: {data['output']['video_url']}\")\n            return data\n        elif status == \"failed\":\n            print(f\"Failed: {data.get('error', 'Unknown error')}\")\n            return data\n        print(f\"Status: {status} ({elapsed}s)\")\n        time.sleep(interval)\n        elapsed += interval\n    return None\n\n# --- Product Video: Luxury Watch ---\npayload = {\n    \"model\": \"seedance-2.0\",\n    \"prompt\": (\n        \"@Image1 is a luxury wristwatch. \"\n        \"The watch rotates slowly on a dark marble surface. \"\n        \"Dramatic side lighting highlights the metal bracelet and crystal face. \"\n        \"Light reflections move across the polished surfaces as the watch turns. \"\n        \"Subtle lens flare. Extreme close-up with shallow depth of field. \"\n        \"Premium product advertisement aesthetic.\"\n    ),\n    \"image_urls\": [\n        \"https://example.com/watch-product.jpg\"\n    ],\n    \"duration\": 8,\n    \"quality\": \"1080p\",\n    \"aspect_ratio\": \"16:9\",\n    \"generate_audio\": False\n}\n\nresp = requests.post(\n    f\"{BASE_URL}/videos/generations\",\n    headers=HEADERS,\n    json=payload\n)\nresult = resp.json()\nprint(f\"Task ID: {result['task_id']}\")\n\nvideo_data = wait_for_video(result[\"task_id\"])\n",[28,27487,27488,27494,27500,27504,27512,27520,27528,27544,27552,27556,27560,27580,27602,27610,27620,27636,27644,27656,27668,27696,27702,27714,27742,27748,27776,27780,27788,27794,27798,27803,27811,27821,27827,27832,27837,27842,27847,27852,27857,27861,27867,27872,27876,27886,27896,27906,27914,27918,27922,27930,27942,27952,27960,27964,27972,27996,28000],{"__ignoreMap":141},[145,27489,27490,27492],{"class":147,"line":148},[145,27491,346],{"class":258},[145,27493,328],{"class":262},[145,27495,27496,27498],{"class":147,"line":166},[145,27497,346],{"class":258},[145,27499,355],{"class":262},[145,27501,27502],{"class":147,"line":178},[145,27503,375],{"emptyLinePlaceholder":58},[145,27505,27506,27508,27510],{"class":147,"line":187},[145,27507,387],{"class":155},[145,27509,390],{"class":258},[145,27511,17419],{"class":159},[145,27513,27514,27516,27518],{"class":147,"line":372},[145,27515,411],{"class":155},[145,27517,390],{"class":258},[145,27519,416],{"class":159},[145,27521,27522,27524,27526],{"class":147,"line":378},[145,27523,422],{"class":155},[145,27525,390],{"class":258},[145,27527,427],{"class":262},[145,27529,27530,27532,27534,27536,27538,27540,27542],{"class":147,"line":384},[145,27531,433],{"class":159},[145,27533,436],{"class":262},[145,27535,439],{"class":258},[145,27537,442],{"class":159},[145,27539,445],{"class":155},[145,27541,448],{"class":159},[145,27543,451],{"class":262},[145,27545,27546,27548,27550],{"class":147,"line":408},[145,27547,457],{"class":159},[145,27549,436],{"class":262},[145,27551,462],{"class":159},[145,27553,27554],{"class":147,"line":419},[145,27555,468],{"class":262},[145,27557,27558],{"class":147,"line":430},[145,27559,375],{"emptyLinePlaceholder":58},[145,27561,27562,27564,27566,27568,27570,27572,27574,27576,27578],{"class":147,"line":454},[145,27563,525],{"class":258},[145,27565,528],{"class":151},[145,27567,11534],{"class":262},[145,27569,266],{"class":258},[145,27571,1353],{"class":155},[145,27573,23297],{"class":262},[145,27575,266],{"class":258},[145,27577,11545],{"class":155},[145,27579,547],{"class":262},[145,27581,27582,27584,27586,27588,27590,27592,27594,27596,27598,27600],{"class":147,"line":465},[145,27583,23313],{"class":262},[145,27585,266],{"class":258},[145,27587,3358],{"class":258},[145,27589,448],{"class":159},[145,27591,678],{"class":155},[145,27593,681],{"class":159},[145,27595,684],{"class":155},[145,27597,687],{"class":262},[145,27599,690],{"class":155},[145,27601,950],{"class":159},[145,27603,27604,27606,27608],{"class":147,"line":599},[145,27605,630],{"class":262},[145,27607,266],{"class":258},[145,27609,635],{"class":155},[145,27611,27612,27614,27616,27618],{"class":147,"line":604},[145,27613,641],{"class":258},[145,27615,644],{"class":262},[145,27617,647],{"class":258},[145,27619,23354],{"class":262},[145,27621,27622,27624,27626,27628,27630,27632,27634],{"class":147,"line":610},[145,27623,6787],{"class":262},[145,27625,266],{"class":258},[145,27627,1131],{"class":262},[145,27629,17648],{"class":700},[145,27631,266],{"class":258},[145,27633,422],{"class":155},[145,27635,405],{"class":262},[145,27637,27638,27640,27642],{"class":147,"line":616},[145,27639,23375],{"class":262},[145,27641,266],{"class":258},[145,27643,11615],{"class":262},[145,27645,27646,27648,27650,27652,27654],{"class":147,"line":622},[145,27647,752],{"class":262},[145,27649,266],{"class":258},[145,27651,23388],{"class":262},[145,27653,760],{"class":159},[145,27655,763],{"class":262},[145,27657,27658,27660,27662,27664,27666],{"class":147,"line":627},[145,27659,847],{"class":258},[145,27661,850],{"class":262},[145,27663,853],{"class":258},[145,27665,856],{"class":159},[145,27667,859],{"class":262},[145,27669,27670,27672,27674,27676,27678,27680,27682,27684,27686,27688,27690,27692,27694],{"class":147,"line":638},[145,27671,5442],{"class":155},[145,27673,793],{"class":262},[145,27675,439],{"class":258},[145,27677,11655],{"class":159},[145,27679,684],{"class":155},[145,27681,23837],{"class":262},[145,27683,17710],{"class":159},[145,27685,1563],{"class":262},[145,27687,17715],{"class":159},[145,27689,1536],{"class":262},[145,27691,690],{"class":155},[145,27693,448],{"class":159},[145,27695,405],{"class":262},[145,27697,27698,27700],{"class":147,"line":653},[145,27699,865],{"class":258},[145,27701,23451],{"class":262},[145,27703,27704,27706,27708,27710,27712],{"class":147,"line":659},[145,27705,874],{"class":258},[145,27707,850],{"class":262},[145,27709,853],{"class":258},[145,27711,881],{"class":159},[145,27713,859],{"class":262},[145,27715,27716,27718,27720,27722,27724,27726,27728,27730,27732,27734,27736,27738,27740],{"class":147,"line":670},[145,27717,5442],{"class":155},[145,27719,793],{"class":262},[145,27721,439],{"class":258},[145,27723,23880],{"class":159},[145,27725,684],{"class":155},[145,27727,23478],{"class":262},[145,27729,11712],{"class":159},[145,27731,399],{"class":262},[145,27733,942],{"class":159},[145,27735,945],{"class":262},[145,27737,690],{"class":155},[145,27739,448],{"class":159},[145,27741,405],{"class":262},[145,27743,27744,27746],{"class":147,"line":697},[145,27745,865],{"class":258},[145,27747,23451],{"class":262},[145,27749,27750,27752,27754,27756,27758,27760,27762,27764,27766,27768,27770,27772,27774],{"class":147,"line":709},[145,27751,790],{"class":155},[145,27753,793],{"class":262},[145,27755,439],{"class":258},[145,27757,11741],{"class":159},[145,27759,684],{"class":155},[145,27761,813],{"class":262},[145,27763,690],{"class":155},[145,27765,1218],{"class":159},[145,27767,684],{"class":155},[145,27769,803],{"class":262},[145,27771,690],{"class":155},[145,27773,10576],{"class":159},[145,27775,405],{"class":262},[145,27777,27778],{"class":147,"line":715},[145,27779,11765],{"class":262},[145,27781,27782,27784,27786],{"class":147,"line":721},[145,27783,979],{"class":262},[145,27785,982],{"class":258},[145,27787,11774],{"class":262},[145,27789,27790,27792],{"class":147,"line":727},[145,27791,1704],{"class":258},[145,27793,11796],{"class":155},[145,27795,27796],{"class":147,"line":738},[145,27797,375],{"emptyLinePlaceholder":58},[145,27799,27800],{"class":147,"line":743},[145,27801,27802],{"class":174},"# --- Product Video: Luxury Watch ---\n",[145,27804,27805,27807,27809],{"class":147,"line":749},[145,27806,3660],{"class":262},[145,27808,266],{"class":258},[145,27810,427],{"class":262},[145,27812,27813,27815,27817,27819],{"class":147,"line":766},[145,27814,3669],{"class":159},[145,27816,436],{"class":262},[145,27818,1309],{"class":159},[145,27820,451],{"class":262},[145,27822,27823,27825],{"class":147,"line":787},[145,27824,3680],{"class":159},[145,27826,1323],{"class":262},[145,27828,27829],{"class":147,"line":833},[145,27830,27831],{"class":159},"        \"@Image1 is a luxury wristwatch. \"\n",[145,27833,27834],{"class":147,"line":838},[145,27835,27836],{"class":159},"        \"The watch rotates slowly on a dark marble surface. \"\n",[145,27838,27839],{"class":147,"line":844},[145,27840,27841],{"class":159},"        \"Dramatic side lighting highlights the metal bracelet and crystal face. \"\n",[145,27843,27844],{"class":147,"line":862},[145,27845,27846],{"class":159},"        \"Light reflections move across the polished surfaces as the watch turns. \"\n",[145,27848,27849],{"class":147,"line":871},[145,27850,27851],{"class":159},"        \"Subtle lens flare. Extreme close-up with shallow depth of field. \"\n",[145,27853,27854],{"class":147,"line":886},[145,27855,27856],{"class":159},"        \"Premium product advertisement aesthetic.\"\n",[145,27858,27859],{"class":147,"line":902},[145,27860,3803],{"class":262},[145,27862,27863,27865],{"class":147,"line":914},[145,27864,15206],{"class":159},[145,27866,2691],{"class":262},[145,27868,27869],{"class":147,"line":953},[145,27870,27871],{"class":159},"        \"https://example.com/watch-product.jpg\"\n",[145,27873,27874],{"class":147,"line":959},[145,27875,16188],{"class":262},[145,27877,27878,27880,27882,27884],{"class":147,"line":964},[145,27879,3692],{"class":159},[145,27881,436],{"class":262},[145,27883,3697],{"class":155},[145,27885,451],{"class":262},[145,27887,27888,27890,27892,27894],{"class":147,"line":970},[145,27889,3704],{"class":159},[145,27891,436],{"class":262},[145,27893,3709],{"class":159},[145,27895,451],{"class":262},[145,27897,27898,27900,27902,27904],{"class":147,"line":976},[145,27899,3716],{"class":159},[145,27901,436],{"class":262},[145,27903,1385],{"class":159},[145,27905,451],{"class":262},[145,27907,27908,27910,27912],{"class":147,"line":988},[145,27909,3732],{"class":159},[145,27911,436],{"class":262},[145,27913,15252],{"class":155},[145,27915,27916],{"class":147,"line":993},[145,27917,468],{"class":262},[145,27919,27920],{"class":147,"line":5402},[145,27921,375],{"emptyLinePlaceholder":58},[145,27923,27924,27926,27928],{"class":147,"line":5411},[145,27925,24073],{"class":262},[145,27927,266],{"class":258},[145,27929,1433],{"class":262},[145,27931,27932,27934,27936,27938,27940],{"class":147,"line":5439},[145,27933,6396],{"class":258},[145,27935,448],{"class":159},[145,27937,678],{"class":155},[145,27939,1445],{"class":159},[145,27941,451],{"class":262},[145,27943,27944,27946,27948,27950],{"class":147,"line":5470},[145,27945,6409],{"class":700},[145,27947,266],{"class":258},[145,27949,422],{"class":155},[145,27951,451],{"class":262},[145,27953,27954,27956,27958],{"class":147,"line":5490},[145,27955,6420],{"class":700},[145,27957,266],{"class":258},[145,27959,2788],{"class":262},[145,27961,27962],{"class":147,"line":5496},[145,27963,405],{"class":262},[145,27965,27966,27968,27970],{"class":147,"line":5502},[145,27967,12078],{"class":262},[145,27969,266],{"class":258},[145,27971,11615],{"class":262},[145,27973,27974,27976,27978,27980,27982,27984,27986,27988,27990,27992,27994],{"class":147,"line":5507},[145,27975,6442],{"class":155},[145,27977,793],{"class":262},[145,27979,439],{"class":258},[145,27981,24130],{"class":159},[145,27983,684],{"class":155},[145,27985,11660],{"class":262},[145,27987,19695],{"class":159},[145,27989,1536],{"class":262},[145,27991,690],{"class":155},[145,27993,448],{"class":159},[145,27995,405],{"class":262},[145,27997,27998],{"class":147,"line":5520},[145,27999,375],{"emptyLinePlaceholder":58},[145,28001,28002,28004,28006,28008,28010],{"class":147,"line":5547},[145,28003,24158],{"class":262},[145,28005,266],{"class":258},[145,28007,24163],{"class":262},[145,28009,7553],{"class":159},[145,28011,1630],{"class":262},[92,28013,28015],{"id":28014},"デモ腕時計の商品動画","デモ：腕時計の商品動画",[56,28017,60,28018],{"controls":58,"playsInline":58,"style":59},[62,28019],{"src":17980,"type":65},[11,28021,28022,2427,28024],{},[23,28023,24190],{},[2619,28025,28026],{},"\"@Image1 is a luxury wristwatch. The watch rotates slowly under dramatic studio lighting on a dark reflective surface. Light catches the polished metal case and sapphire crystal. Slow cinematic rotation. Premium advertisement quality.\"",[11,28028,28029],{},"1枚の商品写真から、API はスタジオ品質の照明による回転商品ショーケースを生成します。文字盤の目盛り、ブレスレットのリンク、ケースの形状など、腕時計のデザインディテールはすべてリファレンス画像から取得されています。",[92,28031,28032],{"id":28032},"マルチカラー商品バリエーション",[11,28034,28035,28036,28038],{},"多くの商品には複数のカラーバリエーションがあります。各バリエーションを個別に撮影する代わりに、",[28,28037,22921],{}," システムを使ってすべてのバリエーションを1本の動画でショーケースできます：",[136,28040,28042],{"className":337,"code":28041,"language":339,"meta":141,"style":141},"# --- Multi-Color Product: Headphones ---\npayload = {\n    \"model\": \"seedance-2.0\",\n    \"prompt\": (\n        \"@Image1 shows premium over-ear headphones in four different colors \"\n        \"arranged on a clean surface. The camera slowly pans across all four \"\n        \"variants. Each headphone catches the studio light differently. \"\n        \"Smooth dolly movement from left to right. \"\n        \"Clean white background with subtle shadows. \"\n        \"Product catalog video style.\"\n    ),\n    \"image_urls\": [\n        \"https://example.com/headphones-all-colors.jpg\"\n    ],\n    \"duration\": 10,\n    \"quality\": \"1080p\",\n    \"aspect_ratio\": \"16:9\"\n}\n\nresp = requests.post(\n    f\"{BASE_URL}/videos/generations\",\n    headers=HEADERS,\n    json=payload\n)\nresult = resp.json()\nprint(f\"Task ID: {result['task_id']}\")\nvideo_data = wait_for_video(result[\"task_id\"])\n",[28,28043,28044,28049,28057,28067,28073,28078,28083,28088,28093,28098,28103,28107,28113,28118,28122,28132,28142,28150,28154,28158,28166,28178,28188,28196,28200,28208,28232],{"__ignoreMap":141},[145,28045,28046],{"class":147,"line":148},[145,28047,28048],{"class":174},"# --- Multi-Color Product: Headphones ---\n",[145,28050,28051,28053,28055],{"class":147,"line":166},[145,28052,3660],{"class":262},[145,28054,266],{"class":258},[145,28056,427],{"class":262},[145,28058,28059,28061,28063,28065],{"class":147,"line":178},[145,28060,3669],{"class":159},[145,28062,436],{"class":262},[145,28064,1309],{"class":159},[145,28066,451],{"class":262},[145,28068,28069,28071],{"class":147,"line":187},[145,28070,3680],{"class":159},[145,28072,1323],{"class":262},[145,28074,28075],{"class":147,"line":372},[145,28076,28077],{"class":159},"        \"@Image1 shows premium over-ear headphones in four different colors \"\n",[145,28079,28080],{"class":147,"line":378},[145,28081,28082],{"class":159},"        \"arranged on a clean surface. The camera slowly pans across all four \"\n",[145,28084,28085],{"class":147,"line":384},[145,28086,28087],{"class":159},"        \"variants. Each headphone catches the studio light differently. \"\n",[145,28089,28090],{"class":147,"line":408},[145,28091,28092],{"class":159},"        \"Smooth dolly movement from left to right. \"\n",[145,28094,28095],{"class":147,"line":419},[145,28096,28097],{"class":159},"        \"Clean white background with subtle shadows. \"\n",[145,28099,28100],{"class":147,"line":430},[145,28101,28102],{"class":159},"        \"Product catalog video style.\"\n",[145,28104,28105],{"class":147,"line":454},[145,28106,3803],{"class":262},[145,28108,28109,28111],{"class":147,"line":465},[145,28110,15206],{"class":159},[145,28112,2691],{"class":262},[145,28114,28115],{"class":147,"line":599},[145,28116,28117],{"class":159},"        \"https://example.com/headphones-all-colors.jpg\"\n",[145,28119,28120],{"class":147,"line":604},[145,28121,16188],{"class":262},[145,28123,28124,28126,28128,28130],{"class":147,"line":610},[145,28125,3692],{"class":159},[145,28127,436],{"class":262},[145,28129,536],{"class":155},[145,28131,451],{"class":262},[145,28133,28134,28136,28138,28140],{"class":147,"line":616},[145,28135,3704],{"class":159},[145,28137,436],{"class":262},[145,28139,3709],{"class":159},[145,28141,451],{"class":262},[145,28143,28144,28146,28148],{"class":147,"line":622},[145,28145,3716],{"class":159},[145,28147,436],{"class":262},[145,28149,2730],{"class":159},[145,28151,28152],{"class":147,"line":627},[145,28153,468],{"class":262},[145,28155,28156],{"class":147,"line":638},[145,28157,375],{"emptyLinePlaceholder":58},[145,28159,28160,28162,28164],{"class":147,"line":653},[145,28161,24073],{"class":262},[145,28163,266],{"class":258},[145,28165,1433],{"class":262},[145,28167,28168,28170,28172,28174,28176],{"class":147,"line":659},[145,28169,6396],{"class":258},[145,28171,448],{"class":159},[145,28173,678],{"class":155},[145,28175,1445],{"class":159},[145,28177,451],{"class":262},[145,28179,28180,28182,28184,28186],{"class":147,"line":670},[145,28181,6409],{"class":700},[145,28183,266],{"class":258},[145,28185,422],{"class":155},[145,28187,451],{"class":262},[145,28189,28190,28192,28194],{"class":147,"line":697},[145,28191,6420],{"class":700},[145,28193,266],{"class":258},[145,28195,2788],{"class":262},[145,28197,28198],{"class":147,"line":709},[145,28199,405],{"class":262},[145,28201,28202,28204,28206],{"class":147,"line":715},[145,28203,12078],{"class":262},[145,28205,266],{"class":258},[145,28207,11615],{"class":262},[145,28209,28210,28212,28214,28216,28218,28220,28222,28224,28226,28228,28230],{"class":147,"line":721},[145,28211,6442],{"class":155},[145,28213,793],{"class":262},[145,28215,439],{"class":258},[145,28217,24130],{"class":159},[145,28219,684],{"class":155},[145,28221,11660],{"class":262},[145,28223,19695],{"class":159},[145,28225,1536],{"class":262},[145,28227,690],{"class":155},[145,28229,448],{"class":159},[145,28231,405],{"class":262},[145,28233,28234,28236,28238,28240,28242],{"class":147,"line":727},[145,28235,24158],{"class":262},[145,28237,266],{"class":258},[145,28239,24163],{"class":262},[145,28241,7553],{"class":159},[145,28243,1630],{"class":262},[92,28245,28247],{"id":28246},"デモヘッドホンのカラーバリエーション","デモ：ヘッドホンのカラーバリエーション",[56,28249,60,28250],{"controls":58,"playsInline":58,"style":59},[62,28251],{"src":18244,"type":65},[11,28253,28254,2427,28256],{},[23,28255,24190],{},[2619,28257,28258],{},"\"@Image1 shows over-ear headphones in four color variants. The camera pans smoothly across each variant under clean studio lighting. Soft reflections on the ear cups. Minimal white background. Product showcase cinematography.\"",[11,28260,28261],{},"1枚の商品ラインナップ写真が、スムーズなパンニングショーケース動画になります。各カラーバリエーションがしっかり映し出され、スタジオ照明の美的表現はプロの商品動画撮影に匹敵します。",[92,28263,28264],{"id":28264},"商品カタログのバッチ生成",[11,28266,28267],{},"数十から数百の商品がある場合、生成ロジックをバッチプロセッサでラップします：",[136,28269,28271],{"className":337,"code":28270,"language":339,"meta":141,"style":141},"import csv\nimport time\nimport requests\n\nAPI_KEY = \"YOUR_API_KEY\"\nBASE_URL = \"https://api.evolink.ai/v1\"\nHEADERS = {\n    \"Authorization\": f\"Bearer {API_KEY}\",\n    \"Content-Type\": \"application/json\"\n}\n\ndef generate_product_video(product_name, image_url, style=\"premium\"):\n    \"\"\"Generate a product video from a single product image.\"\"\"\n    style_prompts = {\n        \"premium\": (\n            f\"@Image1 is a {product_name}. \"\n            \"The product rotates slowly under dramatic studio lighting \"\n            \"on a dark reflective surface. Cinematic close-up. \"\n            \"Light reveals surface details and textures. \"\n            \"Premium advertisement quality.\"\n        ),\n        \"lifestyle\": (\n            f\"@Image1 is a {product_name}. \"\n            \"The product is shown in a lifestyle setting — \"\n            \"a modern living space with natural light. \"\n            \"Camera slowly pushes in to reveal product details. \"\n            \"Warm, inviting atmosphere.\"\n        ),\n        \"minimal\": (\n            f\"@Image1 is a {product_name}. \"\n            \"Clean white background. The product rotates 360 degrees. \"\n            \"Even, shadowless lighting. E-commerce product spin.\"\n        ),\n    }\n\n    payload = {\n        \"model\": \"seedance-2.0\",\n        \"prompt\": style_prompts[style],\n        \"image_urls\": [image_url],\n        \"duration\": 8,\n        \"quality\": \"1080p\",\n        \"aspect_ratio\": \"1:1\"\n    }\n\n    resp = requests.post(\n        f\"{BASE_URL}/videos/generations\",\n        headers=HEADERS,\n        json=payload\n    )\n    data = resp.json()\n    return data[\"task_id\"]\n\n\n# Example: process a CSV product catalog\n# CSV format: product_name, image_url, style\nproducts = [\n    (\"Wireless Earbuds\", \"https://example.com/earbuds.jpg\", \"premium\"),\n    (\"Leather Wallet\", \"https://example.com/wallet.jpg\", \"lifestyle\"),\n    (\"Running Shoes\", \"https://example.com/shoes.jpg\", \"minimal\"),\n]\n\ntasks = []\nfor name, url, style in products:\n    task_id = generate_product_video(name, url, style)\n    tasks.append((name, task_id))\n    print(f\"Submitted: {name} → {task_id}\")\n    time.sleep(1)  # Rate limiting courtesy\n\nprint(f\"\\nSubmitted {len(tasks)} product videos\")\nprint(\"Poll each task_id to retrieve the completed video URLs\")\n",[28,28272,28273,28279,28285,28291,28295,28303,28311,28319,28335,28343,28347,28351,28368,28373,28382,28389,28406,28411,28416,28421,28426,28430,28437,28451,28456,28461,28466,28471,28475,28482,28496,28501,28506,28510,28514,28518,28526,28536,28543,28549,28559,28569,28578,28582,28586,28594,28606,28616,28624,28628,28636,28646,28650,28654,28659,28664,28673,28693,28712,28731,28735,28739,28747,28759,28768,28773,28802,28813,28817,28844],{"__ignoreMap":141},[145,28274,28275,28277],{"class":147,"line":148},[145,28276,346],{"class":258},[145,28278,19916],{"class":262},[145,28280,28281,28283],{"class":147,"line":166},[145,28282,346],{"class":258},[145,28284,355],{"class":262},[145,28286,28287,28289],{"class":147,"line":178},[145,28288,346],{"class":258},[145,28290,328],{"class":262},[145,28292,28293],{"class":147,"line":187},[145,28294,375],{"emptyLinePlaceholder":58},[145,28296,28297,28299,28301],{"class":147,"line":372},[145,28298,387],{"class":155},[145,28300,390],{"class":258},[145,28302,17419],{"class":159},[145,28304,28305,28307,28309],{"class":147,"line":378},[145,28306,411],{"class":155},[145,28308,390],{"class":258},[145,28310,416],{"class":159},[145,28312,28313,28315,28317],{"class":147,"line":384},[145,28314,422],{"class":155},[145,28316,390],{"class":258},[145,28318,427],{"class":262},[145,28320,28321,28323,28325,28327,28329,28331,28333],{"class":147,"line":408},[145,28322,433],{"class":159},[145,28324,436],{"class":262},[145,28326,439],{"class":258},[145,28328,442],{"class":159},[145,28330,445],{"class":155},[145,28332,448],{"class":159},[145,28334,451],{"class":262},[145,28336,28337,28339,28341],{"class":147,"line":419},[145,28338,457],{"class":159},[145,28340,436],{"class":262},[145,28342,462],{"class":159},[145,28344,28345],{"class":147,"line":430},[145,28346,468],{"class":262},[145,28348,28349],{"class":147,"line":454},[145,28350,375],{"emptyLinePlaceholder":58},[145,28352,28353,28355,28358,28361,28363,28366],{"class":147,"line":465},[145,28354,525],{"class":258},[145,28356,28357],{"class":151}," generate_product_video",[145,28359,28360],{"class":262},"(product_name, image_url, style",[145,28362,266],{"class":258},[145,28364,28365],{"class":159},"\"premium\"",[145,28367,547],{"class":262},[145,28369,28370],{"class":147,"line":599},[145,28371,28372],{"class":159},"    \"\"\"Generate a product video from a single product image.\"\"\"\n",[145,28374,28375,28378,28380],{"class":147,"line":604},[145,28376,28377],{"class":262},"    style_prompts ",[145,28379,266],{"class":258},[145,28381,427],{"class":262},[145,28383,28384,28387],{"class":147,"line":610},[145,28385,28386],{"class":159},"        \"premium\"",[145,28388,1323],{"class":262},[145,28390,28391,28393,28396,28398,28401,28403],{"class":147,"line":616},[145,28392,673],{"class":258},[145,28394,28395],{"class":159},"\"@Image1 is a ",[145,28397,684],{"class":155},[145,28399,28400],{"class":262},"product_name",[145,28402,690],{"class":155},[145,28404,28405],{"class":159},". \"\n",[145,28407,28408],{"class":147,"line":622},[145,28409,28410],{"class":159},"            \"The product rotates slowly under dramatic studio lighting \"\n",[145,28412,28413],{"class":147,"line":627},[145,28414,28415],{"class":159},"            \"on a dark reflective surface. Cinematic close-up. \"\n",[145,28417,28418],{"class":147,"line":638},[145,28419,28420],{"class":159},"            \"Light reveals surface details and textures. \"\n",[145,28422,28423],{"class":147,"line":653},[145,28424,28425],{"class":159},"            \"Premium advertisement quality.\"\n",[145,28427,28428],{"class":147,"line":659},[145,28429,1343],{"class":262},[145,28431,28432,28435],{"class":147,"line":670},[145,28433,28434],{"class":159},"        \"lifestyle\"",[145,28436,1323],{"class":262},[145,28438,28439,28441,28443,28445,28447,28449],{"class":147,"line":697},[145,28440,673],{"class":258},[145,28442,28395],{"class":159},[145,28444,684],{"class":155},[145,28446,28400],{"class":262},[145,28448,690],{"class":155},[145,28450,28405],{"class":159},[145,28452,28453],{"class":147,"line":709},[145,28454,28455],{"class":159},"            \"The product is shown in a lifestyle setting — \"\n",[145,28457,28458],{"class":147,"line":715},[145,28459,28460],{"class":159},"            \"a modern living space with natural light. \"\n",[145,28462,28463],{"class":147,"line":721},[145,28464,28465],{"class":159},"            \"Camera slowly pushes in to reveal product details. \"\n",[145,28467,28468],{"class":147,"line":727},[145,28469,28470],{"class":159},"            \"Warm, inviting atmosphere.\"\n",[145,28472,28473],{"class":147,"line":738},[145,28474,1343],{"class":262},[145,28476,28477,28480],{"class":147,"line":743},[145,28478,28479],{"class":159},"        \"minimal\"",[145,28481,1323],{"class":262},[145,28483,28484,28486,28488,28490,28492,28494],{"class":147,"line":749},[145,28485,673],{"class":258},[145,28487,28395],{"class":159},[145,28489,684],{"class":155},[145,28491,28400],{"class":262},[145,28493,690],{"class":155},[145,28495,28405],{"class":159},[145,28497,28498],{"class":147,"line":766},[145,28499,28500],{"class":159},"            \"Clean white background. The product rotates 360 degrees. \"\n",[145,28502,28503],{"class":147,"line":787},[145,28504,28505],{"class":159},"            \"Even, shadowless lighting. E-commerce product spin.\"\n",[145,28507,28508],{"class":147,"line":833},[145,28509,1343],{"class":262},[145,28511,28512],{"class":147,"line":838},[145,28513,1408],{"class":262},[145,28515,28516],{"class":147,"line":844},[145,28517,375],{"emptyLinePlaceholder":58},[145,28519,28520,28522,28524],{"class":147,"line":862},[145,28521,1295],{"class":262},[145,28523,266],{"class":258},[145,28525,427],{"class":262},[145,28527,28528,28530,28532,28534],{"class":147,"line":871},[145,28529,1304],{"class":159},[145,28531,436],{"class":262},[145,28533,1309],{"class":159},[145,28535,451],{"class":262},[145,28537,28538,28540],{"class":147,"line":886},[145,28539,1320],{"class":159},[145,28541,28542],{"class":262},": style_prompts[style],\n",[145,28544,28545,28547],{"class":147,"line":902},[145,28546,2688],{"class":159},[145,28548,20462],{"class":262},[145,28550,28551,28553,28555,28557],{"class":147,"line":914},[145,28552,1348],{"class":159},[145,28554,436],{"class":262},[145,28556,3697],{"class":155},[145,28558,451],{"class":262},[145,28560,28561,28563,28565,28567],{"class":147,"line":953},[145,28562,1364],{"class":159},[145,28564,436],{"class":262},[145,28566,3709],{"class":159},[145,28568,451],{"class":262},[145,28570,28571,28573,28575],{"class":147,"line":959},[145,28572,1380],{"class":159},[145,28574,436],{"class":262},[145,28576,28577],{"class":159},"\"1:1\"\n",[145,28579,28580],{"class":147,"line":964},[145,28581,1408],{"class":262},[145,28583,28584],{"class":147,"line":970},[145,28585,375],{"emptyLinePlaceholder":58},[145,28587,28588,28590,28592],{"class":147,"line":976},[145,28589,1126],{"class":262},[145,28591,266],{"class":258},[145,28593,1433],{"class":262},[145,28595,28596,28598,28600,28602,28604],{"class":147,"line":988},[145,28597,1438],{"class":258},[145,28599,448],{"class":159},[145,28601,678],{"class":155},[145,28603,1445],{"class":159},[145,28605,451],{"class":262},[145,28607,28608,28610,28612,28614],{"class":147,"line":993},[145,28609,1456],{"class":700},[145,28611,266],{"class":258},[145,28613,422],{"class":155},[145,28615,451],{"class":262},[145,28617,28618,28620,28622],{"class":147,"line":5402},[145,28619,1471],{"class":700},[145,28621,266],{"class":258},[145,28623,2788],{"class":262},[145,28625,28626],{"class":147,"line":5411},[145,28627,1484],{"class":262},[145,28629,28630,28632,28634],{"class":147,"line":5439},[145,28631,27181],{"class":262},[145,28633,266],{"class":258},[145,28635,11615],{"class":262},[145,28637,28638,28640,28642,28644],{"class":147,"line":5470},[145,28639,1704],{"class":258},[145,28641,23388],{"class":262},[145,28643,7553],{"class":159},[145,28645,763],{"class":262},[145,28647,28648],{"class":147,"line":5490},[145,28649,375],{"emptyLinePlaceholder":58},[145,28651,28652],{"class":147,"line":5496},[145,28653,375],{"emptyLinePlaceholder":58},[145,28655,28656],{"class":147,"line":5502},[145,28657,28658],{"class":174},"# Example: process a CSV product catalog\n",[145,28660,28661],{"class":147,"line":5507},[145,28662,28663],{"class":174},"# CSV format: product_name, image_url, style\n",[145,28665,28666,28669,28671],{"class":147,"line":5520},[145,28667,28668],{"class":262},"products ",[145,28670,266],{"class":258},[145,28672,8725],{"class":262},[145,28674,28675,28678,28681,28683,28686,28688,28690],{"class":147,"line":5547},[145,28676,28677],{"class":262},"    (",[145,28679,28680],{"class":159},"\"Wireless Earbuds\"",[145,28682,399],{"class":262},[145,28684,28685],{"class":159},"\"https://example.com/earbuds.jpg\"",[145,28687,399],{"class":262},[145,28689,28365],{"class":159},[145,28691,28692],{"class":262},"),\n",[145,28694,28695,28697,28700,28702,28705,28707,28710],{"class":147,"line":5587},[145,28696,28677],{"class":262},[145,28698,28699],{"class":159},"\"Leather Wallet\"",[145,28701,399],{"class":262},[145,28703,28704],{"class":159},"\"https://example.com/wallet.jpg\"",[145,28706,399],{"class":262},[145,28708,28709],{"class":159},"\"lifestyle\"",[145,28711,28692],{"class":262},[145,28713,28714,28716,28719,28721,28724,28726,28729],{"class":147,"line":5606},[145,28715,28677],{"class":262},[145,28717,28718],{"class":159},"\"Running Shoes\"",[145,28720,399],{"class":262},[145,28722,28723],{"class":159},"\"https://example.com/shoes.jpg\"",[145,28725,399],{"class":262},[145,28727,28728],{"class":159},"\"minimal\"",[145,28730,28692],{"class":262},[145,28732,28733],{"class":147,"line":5611},[145,28734,763],{"class":262},[145,28736,28737],{"class":147,"line":5616},[145,28738,375],{"emptyLinePlaceholder":58},[145,28740,28741,28743,28745],{"class":147,"line":5621},[145,28742,19530],{"class":262},[145,28744,266],{"class":258},[145,28746,5735],{"class":262},[145,28748,28749,28751,28754,28756],{"class":147,"line":7274},[145,28750,8088],{"class":258},[145,28752,28753],{"class":262}," name, url, style ",[145,28755,1180],{"class":258},[145,28757,28758],{"class":262}," products:\n",[145,28760,28761,28763,28765],{"class":147,"line":7296},[145,28762,7076],{"class":262},[145,28764,266],{"class":258},[145,28766,28767],{"class":262}," generate_product_video(name, url, style)\n",[145,28769,28770],{"class":147,"line":7302},[145,28771,28772],{"class":262},"    tasks.append((name, task_id))\n",[145,28774,28775,28777,28779,28781,28784,28786,28788,28790,28792,28794,28796,28798,28800],{"class":147,"line":7308},[145,28776,1102],{"class":155},[145,28778,793],{"class":262},[145,28780,439],{"class":258},[145,28782,28783],{"class":159},"\"Submitted: ",[145,28785,684],{"class":155},[145,28787,20472],{"class":262},[145,28789,690],{"class":155},[145,28791,2254],{"class":159},[145,28793,684],{"class":155},[145,28795,687],{"class":262},[145,28797,690],{"class":155},[145,28799,448],{"class":159},[145,28801,405],{"class":262},[145,28803,28804,28806,28808,28810],{"class":147,"line":7319},[145,28805,19708],{"class":262},[145,28807,5308],{"class":155},[145,28809,19713],{"class":262},[145,28811,28812],{"class":174},"# Rate limiting courtesy\n",[145,28814,28815],{"class":147,"line":7330},[145,28816,375],{"emptyLinePlaceholder":58},[145,28818,28819,28821,28823,28825,28827,28829,28832,28834,28837,28839,28842],{"class":147,"line":7341},[145,28820,6442],{"class":155},[145,28822,793],{"class":262},[145,28824,439],{"class":258},[145,28826,448],{"class":159},[145,28828,1671],{"class":155},[145,28830,28831],{"class":159},"Submitted ",[145,28833,6129],{"class":155},[145,28835,28836],{"class":262},"(tasks)",[145,28838,690],{"class":155},[145,28840,28841],{"class":159}," product videos\"",[145,28843,405],{"class":262},[145,28845,28846,28848,28850,28853],{"class":147,"line":7346},[145,28847,6442],{"class":155},[145,28849,793],{"class":262},[145,28851,28852],{"class":159},"\"Poll each task_id to retrieve the completed video URLs\"",[145,28854,405],{"class":262},[11,28856,28857,28858,28860],{},"このバッチパターンはあらゆるカタログサイズに対応できます。ポーリングの代わりにコールバック URL（",[28,28859,3599],{}," パラメータ）を使って拡張することもできます。大量バッチの場合はこちらの方が効率的です。各動画が完了すると、API がエンドポイントに POST を送信します。",[92,28862,28863],{"id":28863},"商品動画のプロンプトテンプレート",[11,28865,28866],{},"一般的な EC 動画ニーズに対応する、実証済みのプロンプトテンプレートを紹介します：",[136,28868,28870],{"className":337,"code":28869,"language":339,"meta":141,"style":141},"PRODUCT_TEMPLATES = {\n    \"rotation_360\": (\n        \"@Image1 is the product. \"\n        \"Full 360-degree rotation on a clean background. \"\n        \"Consistent studio lighting throughout the rotation. \"\n        \"Smooth, steady turntable motion. \"\n        \"Product catalog photography style.\"\n    ),\n    \"unboxing_reveal\": (\n        \"@Image1 is the product. \"\n        \"The product emerges from soft tissue paper inside a premium box. \"\n        \"Hands carefully lift it into view. \"\n        \"Camera slowly pushes in as the product is revealed. \"\n        \"Luxury unboxing experience. Warm lighting.\"\n    ),\n    \"hero_shot\": (\n        \"@Image1 is the product. \"\n        \"Dramatic hero shot. The product rises into frame against a dark background. \"\n        \"Volumetric light beams hit the product from the side. \"\n        \"Slow motion. Particles float in the light. \"\n        \"Epic product launch trailer aesthetic.\"\n    ),\n    \"in_use\": (\n        \"@Image1 is the product. \"\n        \"Someone picks up the product and uses it naturally. \"\n        \"Lifestyle setting with soft natural window light. \"\n        \"Medium close-up. The camera follows the interaction. \"\n        \"Authentic, relatable product usage.\"\n    ),\n}\n",[28,28871,28872,28881,28888,28893,28898,28903,28908,28913,28917,28924,28928,28933,28938,28943,28948,28952,28959,28963,28968,28973,28978,28983,28987,28994,28998,29003,29008,29013,29018,29022],{"__ignoreMap":141},[145,28873,28874,28877,28879],{"class":147,"line":148},[145,28875,28876],{"class":155},"PRODUCT_TEMPLATES",[145,28878,390],{"class":258},[145,28880,427],{"class":262},[145,28882,28883,28886],{"class":147,"line":166},[145,28884,28885],{"class":159},"    \"rotation_360\"",[145,28887,1323],{"class":262},[145,28889,28890],{"class":147,"line":178},[145,28891,28892],{"class":159},"        \"@Image1 is the product. \"\n",[145,28894,28895],{"class":147,"line":187},[145,28896,28897],{"class":159},"        \"Full 360-degree rotation on a clean background. \"\n",[145,28899,28900],{"class":147,"line":372},[145,28901,28902],{"class":159},"        \"Consistent studio lighting throughout the rotation. \"\n",[145,28904,28905],{"class":147,"line":378},[145,28906,28907],{"class":159},"        \"Smooth, steady turntable motion. \"\n",[145,28909,28910],{"class":147,"line":384},[145,28911,28912],{"class":159},"        \"Product catalog photography style.\"\n",[145,28914,28915],{"class":147,"line":408},[145,28916,3803],{"class":262},[145,28918,28919,28922],{"class":147,"line":419},[145,28920,28921],{"class":159},"    \"unboxing_reveal\"",[145,28923,1323],{"class":262},[145,28925,28926],{"class":147,"line":430},[145,28927,28892],{"class":159},[145,28929,28930],{"class":147,"line":454},[145,28931,28932],{"class":159},"        \"The product emerges from soft tissue paper inside a premium box. \"\n",[145,28934,28935],{"class":147,"line":465},[145,28936,28937],{"class":159},"        \"Hands carefully lift it into view. \"\n",[145,28939,28940],{"class":147,"line":599},[145,28941,28942],{"class":159},"        \"Camera slowly pushes in as the product is revealed. \"\n",[145,28944,28945],{"class":147,"line":604},[145,28946,28947],{"class":159},"        \"Luxury unboxing experience. Warm lighting.\"\n",[145,28949,28950],{"class":147,"line":610},[145,28951,3803],{"class":262},[145,28953,28954,28957],{"class":147,"line":616},[145,28955,28956],{"class":159},"    \"hero_shot\"",[145,28958,1323],{"class":262},[145,28960,28961],{"class":147,"line":622},[145,28962,28892],{"class":159},[145,28964,28965],{"class":147,"line":627},[145,28966,28967],{"class":159},"        \"Dramatic hero shot. The product rises into frame against a dark background. \"\n",[145,28969,28970],{"class":147,"line":638},[145,28971,28972],{"class":159},"        \"Volumetric light beams hit the product from the side. \"\n",[145,28974,28975],{"class":147,"line":653},[145,28976,28977],{"class":159},"        \"Slow motion. Particles float in the light. \"\n",[145,28979,28980],{"class":147,"line":659},[145,28981,28982],{"class":159},"        \"Epic product launch trailer aesthetic.\"\n",[145,28984,28985],{"class":147,"line":670},[145,28986,3803],{"class":262},[145,28988,28989,28992],{"class":147,"line":697},[145,28990,28991],{"class":159},"    \"in_use\"",[145,28993,1323],{"class":262},[145,28995,28996],{"class":147,"line":709},[145,28997,28892],{"class":159},[145,28999,29000],{"class":147,"line":715},[145,29001,29002],{"class":159},"        \"Someone picks up the product and uses it naturally. \"\n",[145,29004,29005],{"class":147,"line":721},[145,29006,29007],{"class":159},"        \"Lifestyle setting with soft natural window light. \"\n",[145,29009,29010],{"class":147,"line":727},[145,29011,29012],{"class":159},"        \"Medium close-up. The camera follows the interaction. \"\n",[145,29014,29015],{"class":147,"line":738},[145,29016,29017],{"class":159},"        \"Authentic, relatable product usage.\"\n",[145,29019,29020],{"class":147,"line":743},[145,29021,3803],{"class":262},[145,29023,29024],{"class":147,"line":749},[145,29025,468],{"class":262},[45,29027],{},[48,29029,29030],{"id":29030},"よくある間違いとその修正方法",[11,29032,29033],{},"数百回の API コールを経て、何がうまくいき何が失敗するかの明確なパターンが見えてきます。最も一般的な間違いとその修正方法を紹介します。",[92,29035,29037],{"id":29036},"間違い-1リアルな人間の顔写真を使用する","間違い 1：リアルな人間の顔写真を使用する",[11,29039,29040,29043,29044,29046,29047,29049],{},[23,29041,29042],{},"何が起こるか："," API が ",[28,29045,3637],{}," エラーまたは ",[28,29048,2088],{}," タスクステータスを返します。",[11,29051,29052,29055],{},[23,29053,29054],{},"理由："," Seedance 2.0 はフォトリアリスティックな人間の顔画像からの画像から動画生成をブロックします。これはバグではなく、安全ポリシーです。",[11,29057,29058,29060],{},[23,29059,13068],{}," 代わりにイラスト、様式化された、またはカートゥーンスタイルのキャラクター画像を使用してください。アニメキャラクター、油絵のポートレート、3D レンダリングされたキャラクター、シルエットはすべて完璧に動作します。ワークフローで人間のキャラクターが必要な場合は、まずフォトリアリスティックでないスタイルのテキストから画像モデルを使って生成してください。",[136,29062,29064],{"className":337,"code":29063,"language":339,"meta":141,"style":141},"# Will be rejected\n\"image_urls\": [\"https://example.com/real-person-photo.jpg\"]\n\n# Works fine\n\"image_urls\": [\"https://example.com/illustrated-character.png\"]\n\"image_urls\": [\"https://example.com/3d-rendered-character.jpg\"]\n\"image_urls\": [\"https://example.com/anime-character.png\"]\n",[28,29065,29066,29071,29082,29086,29091,29102,29113],{"__ignoreMap":141},[145,29067,29068],{"class":147,"line":148},[145,29069,29070],{"class":174},"# Will be rejected\n",[145,29072,29073,29075,29077,29080],{"class":147,"line":166},[145,29074,6097],{"class":159},[145,29076,10692],{"class":262},[145,29078,29079],{"class":159},"\"https://example.com/real-person-photo.jpg\"",[145,29081,763],{"class":262},[145,29083,29084],{"class":147,"line":178},[145,29085,375],{"emptyLinePlaceholder":58},[145,29087,29088],{"class":147,"line":187},[145,29089,29090],{"class":174},"# Works fine\n",[145,29092,29093,29095,29097,29100],{"class":147,"line":372},[145,29094,6097],{"class":159},[145,29096,10692],{"class":262},[145,29098,29099],{"class":159},"\"https://example.com/illustrated-character.png\"",[145,29101,763],{"class":262},[145,29103,29104,29106,29108,29111],{"class":147,"line":378},[145,29105,6097],{"class":159},[145,29107,10692],{"class":262},[145,29109,29110],{"class":159},"\"https://example.com/3d-rendered-character.jpg\"",[145,29112,763],{"class":262},[145,29114,29115,29117,29119,29122],{"class":147,"line":384},[145,29116,6097],{"class":159},[145,29118,10692],{"class":262},[145,29120,29121],{"class":159},"\"https://example.com/anime-character.png\"",[145,29123,763],{"class":262},[92,29125,29127],{"id":29126},"間違い-2外見のみを記述する静的なプロンプト","間違い 2：外見のみを記述する静的なプロンプト",[11,29129,29130,29132],{},[23,29131,29042],{}," 生成された動画にほとんどまたはまったく動きがありません。被写体が静止したまま、またはわずかなカメラドリフトのみが発生します。",[11,29134,29135,29137],{},[23,29136,29054],{}," モデルはプロンプトを文字通りに受け取ります。静的なシーンを記述すると（「a cat on a windowsill」）、ほぼ静止した動画が得られます。",[11,29139,29140,29142],{},[23,29141,13068],{}," 常に動作動詞、連続的なアクション、環境のダイナミクスを含めてください。",[136,29144,29146],{"className":337,"code":29145,"language":339,"meta":141,"style":141},"# Static: produces near-still video\n\"prompt\": \"A beautiful sunset over the ocean with golden light\"\n\n# Dynamic: produces engaging video\n\"prompt\": (\n    \"Waves crash against rocky coastline during golden sunset. \"\n    \"Water sprays upward, catching the warm light. \"\n    \"Camera slowly descends from sky level to water level. \"\n    \"Seabirds glide across the frame. \"\n    \"Light shifts from golden to deep amber.\"\n)\n",[28,29147,29148,29153,29162,29166,29171,29177,29182,29187,29192,29197,29202],{"__ignoreMap":141},[145,29149,29150],{"class":147,"line":148},[145,29151,29152],{"class":174},"# Static: produces near-still video\n",[145,29154,29155,29157,29159],{"class":147,"line":166},[145,29156,5780],{"class":159},[145,29158,436],{"class":262},[145,29160,29161],{"class":159},"\"A beautiful sunset over the ocean with golden light\"\n",[145,29163,29164],{"class":147,"line":178},[145,29165,375],{"emptyLinePlaceholder":58},[145,29167,29168],{"class":147,"line":187},[145,29169,29170],{"class":174},"# Dynamic: produces engaging video\n",[145,29172,29173,29175],{"class":147,"line":372},[145,29174,5780],{"class":159},[145,29176,1323],{"class":262},[145,29178,29179],{"class":147,"line":378},[145,29180,29181],{"class":159},"    \"Waves crash against rocky coastline during golden sunset. \"\n",[145,29183,29184],{"class":147,"line":384},[145,29185,29186],{"class":159},"    \"Water sprays upward, catching the warm light. \"\n",[145,29188,29189],{"class":147,"line":408},[145,29190,29191],{"class":159},"    \"Camera slowly descends from sky level to water level. \"\n",[145,29193,29194],{"class":147,"line":419},[145,29195,29196],{"class":159},"    \"Seabirds glide across the frame. \"\n",[145,29198,29199],{"class":147,"line":430},[145,29200,29201],{"class":159},"    \"Light shifts from golden to deep amber.\"\n",[145,29203,29204],{"class":147,"line":454},[145,29205,405],{"class":262},[92,29207,29209],{"id":29208},"間違い-3コンテンツに対して間違った尺","間違い 3：コンテンツに対して間違った尺",[11,29211,29212,29214],{},[23,29213,29042],{}," シンプルなアクションが引き伸ばされて不自然に感じられるか、複雑なシーケンスが急ぎ足で途切れ途切れに感じられます。",[11,29216,29217,29219],{},[23,29218,29054],{}," 尺はプロンプトの複雑さに合わせる必要があります。シンプルな商品回転に15秒は必要ありません。マルチアクションのキャラクターシーケンスは4秒では機能しません。",[11,29221,29222,29224],{},[23,29223,13068],{}," 尺をプロンプトの複雑さに合わせます：",[2037,29226,29227,29239],{},[2040,29228,29229],{},[2043,29230,29231,29234,29237],{},[2046,29232,29233],{},"プロンプトの複雑さ",[2046,29235,29236],{},"記述されたアクション",[2046,29238,24986],{},[2053,29240,29241,29251,29261],{},[2043,29242,29243,29246,29249],{},[2058,29244,29245],{},"シンプル（1つの動き）",[2058,29247,29248],{},"1つのアクション",[2058,29250,19316],{},[2043,29252,29253,29256,29259],{},[2058,29254,29255],{},"中程度（2〜3のアクション）",[2058,29257,29258],{},"2〜3の連続アクション",[2058,29260,18155],{},[2043,29262,29263,29266,29269],{},[2058,29264,29265],{},"複雑（ナラティブ）",[2058,29267,29268],{},"4つ以上のアクション、シーン転換",[2058,29270,25018],{},[92,29272,29274],{"id":29273},"間違い-4画像-url-の問題","間違い 4：画像 URL の問題",[11,29276,29277,29279],{},[23,29278,29042],{}," API が無効な画像に関するエラーを返すか、処理中にタスクが失敗します。",[11,29281,29282,29284],{},[23,29283,29054],{}," いくつかの一般的な URL の問題があります：",[96,29286,29287,29290,29293,29296,29299],{},[73,29288,29289],{},"URL に認証が必要（公開アクセスできない）",[73,29291,29292],{},"URL が画像ファイルではなくウェブページを指している",[73,29294,29295],{},"画像フォーマットがサポートされていない（WebP は時々失敗する）",[73,29297,29298],{},"画像が大きすぎる（超高解像度ファイルはタイムアウトする可能性がある）",[73,29300,29301],{},"URL が期限切れ（時間制限付きのプリサインド URL）",[11,29303,29304,29306],{},[23,29305,13068],{}," 画像 URL が以下の条件を満たしていることを確認してください：",[70,29308,29309,29315,29327,29333,29339],{},[73,29310,29311,29314],{},[23,29312,29313],{},"公開アクセス可能"," — ダウンロードに認証ヘッダーが不要",[73,29316,29317,1061,29320,2916,29323,29326],{},[23,29318,29319],{},"直接の画像リンク",[28,29321,29322],{},".jpg",[28,29324,29325],{},".png"," などで終わる（HTML ページではない）",[73,29328,29329,29332],{},[23,29330,29331],{},"標準フォーマット"," — JPEG と PNG が最も安全",[73,29334,29335,29338],{},[23,29336,29337],{},"適切なサイズ"," — 画像あたり 10MB 未満",[73,29340,29341,29344],{},[23,29342,29343],{},"永続的"," — 処理中に期限切れにならない",[136,29346,29348],{"className":337,"code":29347,"language":339,"meta":141,"style":141},"# Problem URLs\n\"https://drive.google.com/file/d/abc123/view\"  # Requires auth\n\"https://example.com/product-page\"              # HTML page, not image\n\"https://storage.com/image.jpg?token=abc&exp=1h\" # Might expire\n\n# Good URLs\n\"https://cdn.example.com/images/product.jpg\"     # Direct CDN link\n\"https://i.imgur.com/abc123.png\"                  # Public image host\n",[28,29349,29350,29355,29363,29371,29379,29383,29388,29396],{"__ignoreMap":141},[145,29351,29352],{"class":147,"line":148},[145,29353,29354],{"class":174},"# Problem URLs\n",[145,29356,29357,29360],{"class":147,"line":166},[145,29358,29359],{"class":159},"\"https://drive.google.com/file/d/abc123/view\"",[145,29361,29362],{"class":174},"  # Requires auth\n",[145,29364,29365,29368],{"class":147,"line":178},[145,29366,29367],{"class":159},"\"https://example.com/product-page\"",[145,29369,29370],{"class":174},"              # HTML page, not image\n",[145,29372,29373,29376],{"class":147,"line":187},[145,29374,29375],{"class":159},"\"https://storage.com/image.jpg?token=abc&exp=1h\"",[145,29377,29378],{"class":174}," # Might expire\n",[145,29380,29381],{"class":147,"line":372},[145,29382,375],{"emptyLinePlaceholder":58},[145,29384,29385],{"class":147,"line":378},[145,29386,29387],{"class":174},"# Good URLs\n",[145,29389,29390,29393],{"class":147,"line":384},[145,29391,29392],{"class":159},"\"https://cdn.example.com/images/product.jpg\"",[145,29394,29395],{"class":174},"     # Direct CDN link\n",[145,29397,29398,29401],{"class":147,"line":408},[145,29399,29400],{"class":159},"\"https://i.imgur.com/abc123.png\"",[145,29402,29403],{"class":174},"                  # Public image host\n",[92,29405,29407],{"id":29406},"間違い-5複数画像で-tags-を使用しない","間違い 5：複数画像で @Tags を使用しない",[11,29409,29410,2427,29412,29414],{},[23,29411,29042],{},[28,29413,4142],{}," タグを使わずに3枚以上の画像を渡すと、モデルがどの画像がどの目的に使われるかを推測します。結果は予測不能です。背景画像がキャラクターとして使われたり、スタイルリファレンスがシーン要素として扱われたりすることがあります。",[11,29416,29417,29419,29420,29422],{},[23,29418,13068],{}," 複数の画像を渡す場合は、常に ",[28,29421,4142],{}," タグを使用してください。各画像の役割を明示的に指定しましょう。",[136,29424,29426],{"className":337,"code":29425,"language":339,"meta":141,"style":141},"# Ambiguous: model guesses roles\n\"prompt\": \"A character walks through a forest in watercolor style\"\n\"image_urls\": [character.jpg, forest.jpg, watercolor_ref.jpg]\n\n# Explicit: model knows each role\n\"prompt\": (\n    \"@Image1 is the character. @Image2 is the forest environment. \"\n    \"@Image3 defines the watercolor art style. \"\n    \"The character (@Image1) walks through the forest (@Image2) \"\n    \"rendered in the watercolor style of @Image3.\"\n)\n\"image_urls\": [character.jpg, forest.jpg, watercolor_ref.jpg]\n",[28,29427,29428,29433,29442,29449,29453,29458,29464,29469,29474,29479,29484,29488],{"__ignoreMap":141},[145,29429,29430],{"class":147,"line":148},[145,29431,29432],{"class":174},"# Ambiguous: model guesses roles\n",[145,29434,29435,29437,29439],{"class":147,"line":166},[145,29436,5780],{"class":159},[145,29438,436],{"class":262},[145,29440,29441],{"class":159},"\"A character walks through a forest in watercolor style\"\n",[145,29443,29444,29446],{"class":147,"line":178},[145,29445,6097],{"class":159},[145,29447,29448],{"class":262},": [character.jpg, forest.jpg, watercolor_ref.jpg]\n",[145,29450,29451],{"class":147,"line":187},[145,29452,375],{"emptyLinePlaceholder":58},[145,29454,29455],{"class":147,"line":372},[145,29456,29457],{"class":174},"# Explicit: model knows each role\n",[145,29459,29460,29462],{"class":147,"line":378},[145,29461,5780],{"class":159},[145,29463,1323],{"class":262},[145,29465,29466],{"class":147,"line":384},[145,29467,29468],{"class":159},"    \"@Image1 is the character. @Image2 is the forest environment. \"\n",[145,29470,29471],{"class":147,"line":408},[145,29472,29473],{"class":159},"    \"@Image3 defines the watercolor art style. \"\n",[145,29475,29476],{"class":147,"line":419},[145,29477,29478],{"class":159},"    \"The character (@Image1) walks through the forest (@Image2) \"\n",[145,29480,29481],{"class":147,"line":430},[145,29482,29483],{"class":159},"    \"rendered in the watercolor style of @Image3.\"\n",[145,29485,29486],{"class":147,"line":454},[145,29487,405],{"class":262},[145,29489,29490,29492],{"class":147,"line":465},[145,29491,6097],{"class":159},[145,29493,29448],{"class":262},[92,29495,29497],{"id":29496},"間違い-6動画-url-の期限切れを忘れる","間違い 6：動画 URL の期限切れを忘れる",[11,29499,29500,29502],{},[23,29501,29042],{}," 動画を生成し、URL を保存し、翌日アクセスしようとすると 403 または 404 が返ります。",[11,29504,29505,29507],{},[23,29506,29054],{}," 生成された動画 URL は24時間後に期限切れになります。",[11,29509,29510,29512],{},[23,29511,13068],{}," 生成完了後すぐに動画ファイルをダウンロードしてください。ポーリング関数にダウンロードステップを追加します：",[136,29514,29516],{"className":337,"code":29515,"language":339,"meta":141,"style":141},"import os\n\ndef download_video(video_url, output_path):\n    \"\"\"Download a video before the URL expires.\"\"\"\n    resp = requests.get(video_url, stream=True)\n    resp.raise_for_status()\n    with open(output_path, \"wb\") as f:\n        for chunk in resp.iter_content(chunk_size=8192):\n            f.write(chunk)\n    print(f\"Saved to {output_path}\")\n\n# After generation completes:\nvideo_url = video_data[\"output\"][\"video_url\"]\ndownload_video(video_url, \"output/my-product-video.mp4\")\n",[28,29517,29518,29524,29528,29537,29542,29559,29563,29580,29598,29602,29624,29628,29633,29651],{"__ignoreMap":141},[145,29519,29520,29522],{"class":147,"line":148},[145,29521,346],{"class":258},[145,29523,362],{"class":262},[145,29525,29526],{"class":147,"line":166},[145,29527,375],{"emptyLinePlaceholder":58},[145,29529,29530,29532,29534],{"class":147,"line":178},[145,29531,525],{"class":258},[145,29533,1082],{"class":151},[145,29535,29536],{"class":262},"(video_url, output_path):\n",[145,29538,29539],{"class":147,"line":187},[145,29540,29541],{"class":159},"    \"\"\"Download a video before the URL expires.\"\"\"\n",[145,29543,29544,29546,29548,29551,29553,29555,29557],{"class":147,"line":372},[145,29545,1126],{"class":262},[145,29547,266],{"class":258},[145,29549,29550],{"class":262}," requests.get(video_url, ",[145,29552,1134],{"class":700},[145,29554,266],{"class":258},[145,29556,1139],{"class":155},[145,29558,405],{"class":262},[145,29560,29561],{"class":147,"line":378},[145,29562,1146],{"class":262},[145,29564,29565,29567,29569,29572,29574,29576,29578],{"class":147,"line":384},[145,29566,1151],{"class":258},[145,29568,1154],{"class":155},[145,29570,29571],{"class":262},"(output_path, ",[145,29573,1160],{"class":159},[145,29575,1163],{"class":262},[145,29577,1166],{"class":258},[145,29579,1169],{"class":262},[145,29581,29582,29584,29586,29588,29590,29592,29594,29596],{"class":147,"line":408},[145,29583,1174],{"class":258},[145,29585,1177],{"class":262},[145,29587,1180],{"class":258},[145,29589,1183],{"class":262},[145,29591,1186],{"class":700},[145,29593,266],{"class":258},[145,29595,1191],{"class":155},[145,29597,547],{"class":262},[145,29599,29600],{"class":147,"line":419},[145,29601,1198],{"class":262},[145,29603,29604,29606,29608,29610,29613,29615,29618,29620,29622],{"class":147,"line":430},[145,29605,1102],{"class":155},[145,29607,793],{"class":262},[145,29609,439],{"class":258},[145,29611,29612],{"class":159},"\"Saved to ",[145,29614,684],{"class":155},[145,29616,29617],{"class":262},"output_path",[145,29619,690],{"class":155},[145,29621,448],{"class":159},[145,29623,405],{"class":262},[145,29625,29626],{"class":147,"line":454},[145,29627,375],{"emptyLinePlaceholder":58},[145,29629,29630],{"class":147,"line":465},[145,29631,29632],{"class":174},"# After generation completes:\n",[145,29634,29635,29638,29640,29643,29645,29647,29649],{"class":147,"line":599},[145,29636,29637],{"class":262},"video_url ",[145,29639,266],{"class":258},[145,29641,29642],{"class":262}," video_data[",[145,29644,21344],{"class":159},[145,29646,1563],{"class":262},[145,29648,14773],{"class":159},[145,29650,763],{"class":262},[145,29652,29653,29656,29659],{"class":147,"line":604},[145,29654,29655],{"class":262},"download_video(video_url, ",[145,29657,29658],{"class":159},"\"output/my-product-video.mp4\"",[145,29660,405],{"class":262},[45,29662],{},[92,29664,29666],{"id":29665},"間違い-7プロンプトと画像コンテンツの矛盾","間違い 7：プロンプトと画像コンテンツの矛盾",[11,29668,29669,29671],{},[23,29670,29042],{}," 出力動画がちぐはぐな見た目になります。画像の要素とプロンプトの要素が主導権を奪い合い、視覚的なアーティファクトや一貫性のないシーンが生じます。",[11,29673,29674,29676],{},[23,29675,29054],{}," リファレンス画像と直接矛盾する内容をプロンプトに記述しています。例えば、画像が赤い車を示しているのに、プロンプトで「a blue sports car races down the highway」と書いた場合です。",[11,29678,29679,29681,29682,29685],{},[23,29680,13068],{}," プロンプトは画像を",[2619,29683,29684],{},"補完","すべきであり、矛盾させるべきではありません。リファレンス画像ですでに定義されている要素の外見ではなく、アクション、カメラの動き、環境の変化を記述してください。",[136,29687,29689],{"className":337,"code":29688,"language":339,"meta":141,"style":141},"# Contradicts image (image shows red car)\n\"prompt\": \"A blue sports car races down the highway at sunset\"\n\n# Complements image (lets the image define appearance)\n\"prompt\": (\n    \"@Image1 is the car. The car accelerates down an open highway. \"\n    \"Camera tracks alongside at speed. Sunset light reflects off the hood. \"\n    \"Road stretches to the horizon. Motion blur on the asphalt.\"\n)\n",[28,29690,29691,29696,29705,29709,29714,29720,29725,29730,29735],{"__ignoreMap":141},[145,29692,29693],{"class":147,"line":148},[145,29694,29695],{"class":174},"# Contradicts image (image shows red car)\n",[145,29697,29698,29700,29702],{"class":147,"line":166},[145,29699,5780],{"class":159},[145,29701,436],{"class":262},[145,29703,29704],{"class":159},"\"A blue sports car races down the highway at sunset\"\n",[145,29706,29707],{"class":147,"line":178},[145,29708,375],{"emptyLinePlaceholder":58},[145,29710,29711],{"class":147,"line":187},[145,29712,29713],{"class":174},"# Complements image (lets the image define appearance)\n",[145,29715,29716,29718],{"class":147,"line":372},[145,29717,5780],{"class":159},[145,29719,1323],{"class":262},[145,29721,29722],{"class":147,"line":378},[145,29723,29724],{"class":159},"    \"@Image1 is the car. The car accelerates down an open highway. \"\n",[145,29726,29727],{"class":147,"line":384},[145,29728,29729],{"class":159},"    \"Camera tracks alongside at speed. Sunset light reflects off the hood. \"\n",[145,29731,29732],{"class":147,"line":408},[145,29733,29734],{"class":159},"    \"Road stretches to the horizon. Motion blur on the asphalt.\"\n",[145,29736,29737],{"class":147,"line":419},[145,29738,405],{"class":262},[45,29740],{},[48,29742,29744],{"id":29743},"api-パラメータリファレンス","API パラメータリファレンス",[11,29746,29747],{},"画像から動画生成に関連するすべてのパラメータを1つのリファレンステーブルにまとめました：",[2037,29749,29750,29764],{},[2040,29751,29752],{},[2043,29753,29754,29756,29758,29760,29762],{},[2046,29755,3399],{},[2046,29757,3402],{},[2046,29759,16316],{},[2046,29761,3405],{},[2046,29763,3411],{},[2053,29765,29766,29783,29801,29820,29835,29858,29885,29902,29919,29936],{},[2043,29767,29768,29772,29774,29776,29778],{},[2058,29769,29770],{},[28,29771,1748],{},[2058,29773,3422],{},[2058,29775,4823],{},[2058,29777,3425],{},[2058,29779,29780,29782],{},[28,29781,1309],{}," を指定する必要があります",[2043,29784,29785,29789,29791,29793,29795],{},[2058,29786,29787],{},[28,29788,1763],{},[2058,29790,3422],{},[2058,29792,4823],{},[2058,29794,3425],{},[2058,29796,29797,29798,29800],{},"オプションの ",[28,29799,4142],{}," タグを含むモーション記述",[2043,29802,29803,29807,29809,29812,29817],{},[2058,29804,29805],{},[28,29806,2896],{},[2058,29808,3551],{},[2058,29810,29811],{},"はい (i2v の場合)",[2058,29813,29814],{},[28,29815,29816],{},"[]",[2058,29818,29819],{},"1〜9個の公開アクセス可能な画像 URL",[2043,29821,29822,29826,29828,29830,29832],{},[2058,29823,29824],{},[28,29825,1776],{},[2058,29827,3457],{},[2058,29829,4712],{},[2058,29831,1353],{},[2058,29833,29834],{},"動画の長さ（秒）（4〜15）",[2043,29836,29837,29841,29843,29845,29849],{},[2058,29838,29839],{},[28,29840,1784],{},[2058,29842,3422],{},[2058,29844,4712],{},[2058,29846,29847],{},[28,29848,1369],{},[2058,29850,29851,29852,2916,29854,2916,29856],{},"出力解像度：",[28,29853,4012],{},[28,29855,1369],{},[28,29857,3709],{},[2043,29859,29860,29864,29866,29868,29872],{},[2058,29861,29862],{},[28,29863,1804],{},[2058,29865,3422],{},[2058,29867,4712],{},[2058,29869,29870],{},[28,29871,1385],{},[2058,29873,29874,29875,2916,29877,2916,29879,2916,29881,2916,29883],{},"出力比率：",[28,29876,1385],{},[28,29878,3721],{},[28,29880,5999],{},[28,29882,6004],{},[28,29884,6009],{},[2043,29886,29887,29891,29893,29895,29899],{},[2058,29888,29889],{},[28,29890,1824],{},[2058,29892,3529],{},[2058,29894,4712],{},[2058,29896,29897],{},[28,29898,2937],{},[2058,29900,29901],{},"同期された音声トラックを生成",[2043,29903,29904,29908,29910,29912,29916],{},[2058,29905,29906],{},[28,29907,3566],{},[2058,29909,3551],{},[2058,29911,4712],{},[2058,29913,29914],{},[28,29915,29816],{},[2058,29917,29918],{},"0〜3個の動画リファレンス URL（ミックスメディア用）",[2043,29920,29921,29925,29927,29929,29933],{},[2058,29922,29923],{},[28,29924,3583],{},[2058,29926,3551],{},[2058,29928,4712],{},[2058,29930,29931],{},[28,29932,29816],{},[2058,29934,29935],{},"0〜3個の音声リファレンス URL（ミックスメディア用）",[2043,29937,29938,29942,29944,29946,29948],{},[2058,29939,29940],{},[28,29941,3599],{},[2058,29943,3422],{},[2058,29945,4712],{},[2058,29947,3425],{},[2058,29949,29950],{},"完了通知用の Webhook URL",[11,29952,29953,29956,29957,2254,29960,2916,29962,2254,29965,2916,29967,2254,29970,29972],{},[23,29954,29955],{},"制限："," リクエストあたり最大9枚の画像 + 3本の動画 + 3つの音声ファイル。すべてのメディアタイプの合計は12を超えることができません。タグは配列の位置で割り当てられます：",[28,29958,29959],{},"image_urls[0]",[28,29961,2909],{},[28,29963,29964],{},"video_urls[0]",[28,29966,11273],{},[28,29968,29969],{},"audio_urls[0]",[28,29971,16354],{},"。",[45,29974],{},[48,29976,13137],{"id":13136},[92,29978,29980],{"id":29979},"seedance-20-の画像から動画-api-ではどの画像フォーマットでも使用できますか","Seedance 2.0 の画像から動画 API では、どの画像フォーマットでも使用できますか？",[11,29982,29983],{},"JPEG と PNG は完全にサポートされており、推奨されています。GIF（最初のフレームのみ）、BMP、TIFF は一般的に動作しますが、テストが少ないです。WebP のサポートは一貫していないため、安定した結果を得るには JPEG または PNG に変換してください。すべての画像は、認証なしで公開 URL 経由でアクセスできる必要があります。",[92,29985,29987],{"id":29986},"画像から動画の生成にはどのくらい時間がかかりますか","画像から動画の生成にはどのくらい時間がかかりますか？",[11,29989,29990,29991,29993,29994,29996],{},"一般的な生成時間は、尺、品質設定、現在のサーバー負荷に応じて60〜180秒です。480p の4秒クリップは、1080p の15秒クリップよりも速く生成されます。ポーリングエンドポイント（",[28,29992,9024],{},"）を使用するか、",[28,29995,3599],{}," を設定して処理完了時に通知を受け取ることができます。",[92,29998,30000],{"id":29999},"_1回のリクエストで使用できる画像の最大数は","1回のリクエストで使用できる画像の最大数は？",[11,30002,30003,30005],{},[28,30004,2896],{}," に最大9枚の画像を含めることができます。すべてのメディアタイプ（画像 + 動画 + 音声）の合計ファイル数はリクエストあたり12に制限されています。つまり、9枚の画像を使用している場合でも、動画や音声のリファレンスを最大3つ追加できます。",[92,30007,30009],{"id":30008},"画像から動画と音声生成を組み合わせることはできますか","画像から動画と音声生成を組み合わせることはできますか？",[11,30011,30012,30013,30015,30016,30018,30019,30021,30022,30024],{},"はい。リクエストペイロードで ",[28,30014,2896],{}," とともに ",[28,30017,23106],{}," を設定してください。モデルはビジュアルコンテンツに一致する同期された音声を生成します。歩行シーンには足音、自然シーンには環境音、商品回転には機械音などです。",[28,30020,3583],{}," を通じて独自の音声を提供し、プロンプトで ",[28,30023,16354],{}," として参照することもできます。",[92,30026,30028],{"id":30027},"本番環境で動画-url-の期限切れをどう処理すればよいですか","本番環境で動画 URL の期限切れをどう処理すればよいですか？",[11,30030,30031,30032,30034,30035,30037],{},"生成された動画 URL は24時間後に期限切れになります。本番システムでは、パイプラインに即時ダウンロードステップを実装してください。タスクステータスが ",[28,30033,2084],{}," に変わったら、URL をアプリケーションに返す前に、動画ファイルを自分のストレージ（S3、GCS、またはローカルディスク）にダウンロードしてください。API が生成した URL を永続的な参照として保存しないでください。",[28,30036,3599],{}," を使用している場合は、Webhook ハンドラーの処理ロジックにダウンロードステップを含めてください。",[92,30039,30041],{"id":30040},"seedance-20-の画像から動画をアニメーションロゴやブランドイントロに使用できますか","Seedance 2.0 の画像から動画をアニメーションロゴやブランドイントロに使用できますか？",[11,30043,30044,30045,30047,30048,30050],{},"はい。これは最も強力なユースケースの1つです。ロゴやブランドマークを ",[28,30046,2909],{}," としてアップロードし、希望するアニメーションスタイルをプロンプトで指定します。パーティクルアセンブリ、リキッドリビール、3D 回転などです。ロゴはグラフィック要素（フォトリアリスティックな顔ではない）であるため、画像から動画パイプラインで完璧に動作します。",[28,30049,23106],{}," を設定して、リビールに同期されたサウンドエフェクトを追加できます。",[92,30052,30054],{"id":30053},"画像から動画のリクエストが拒否されたのはなぜですか","画像から動画のリクエストが拒否されたのはなぜですか？",[11,30056,30057,30058,30060],{},"最も一般的な拒否理由は、入力画像にフォトリアリスティックな人間の顔が含まれていることです。Seedance 2.0 は安全上の理由から、リアルな顔画像を自動的に検出してブロックします。その他の拒否原因としては、アクセスできない画像 URL、サポートされていないファイルフォーマット、9枚の画像制限の超過、またはメディアファイルの合計数が12を超えていることが挙げられます。具体的な詳細については、",[28,30059,2088],{}," タスクレスポンスのエラーメッセージを確認してください。",[45,30062],{},[48,30064,30065],{"id":30065},"画像のアニメーション化を始めましょう",[11,30067,30068,30069,30072],{},"ここまでで、Seedance 2.0 API を通じて静止画を動画に変換する3つの異なる方法を習得しました：素早いキャラクターやシーンモーションのための単一画像アニメーション、正確な開始から終了へのトランジションのための最初と最後のフレーム制御、そして複雑で役割を割り当てたシーンのための ",[28,30070,30071],{},"@tags"," を使ったマルチ画像合成です。",[11,30074,30075],{},"このガイド全体を通じたコード例は完全に実行可能です。いずれかをコピーし、API キーを挿入し、ご自身の画像を指定するだけで、数分以内に生成された動画が得られます。",[11,30077,30078,30079,30081],{},"プロダクトチームにとっては、バッチ生成ワークフローがスタジオなしで商品カタログ全体を動画アセットに変換します。クリエイティブチームにとっては、キャラクター一貫性パターンが1枚のキャラクターリファレンスからマルチショットストーリーテリングを可能にします。開発者にとっては、",[28,30080,22921],{}," システムが他の AI 動画 API では現在提供されていないレベルの構成的制御を提供します。",[11,30083,30084],{},[23,30085,30086],{},[37,30087,30089],{"href":211,"rel":30088},[41],"画像のアニメーション化を始めましょう。EvoLink に無料登録 →",[45,30091],{},[11,30093,30094],{},[2619,30095,30096,30097,2916,30099,2916,30101,2916,30103,29972],{},"このガイドは Seedance 2.0 チュートリアルシリーズの一部です。関連記事：",[37,30098,2212],{"href":1767},[37,30100,296],{"href":17367},[37,30102,2968],{"href":2967},[37,30104,18986],{"href":3855},[11068,30106,13275],{},{"title":141,"searchDepth":166,"depth":166,"links":30108},[30109,30115,30121,30128,30135,30142,30149,30158,30167,30168,30177],{"id":22927,"depth":166,"text":22928,"children":30110},[30111,30112,30113,30114],{"id":22941,"depth":178,"text":22941},{"id":23081,"depth":178,"text":23082},{"id":23100,"depth":178,"text":23100},{"id":23110,"depth":178,"text":23110},{"id":23118,"depth":166,"text":23119,"children":30116},[30117,30118,30119,30120],{"id":23128,"depth":178,"text":23129},{"id":23155,"depth":178,"text":23156},{"id":23174,"depth":178,"text":23175},{"id":23274,"depth":178,"text":23274},{"id":23585,"depth":166,"text":23586,"children":30122},[30123,30124,30125,30126,30127],{"id":6299,"depth":178,"text":6299},{"id":23636,"depth":178,"text":23637},{"id":24180,"depth":178,"text":24181},{"id":24202,"depth":178,"text":24203},{"id":24221,"depth":178,"text":24221},{"id":24330,"depth":166,"text":24331,"children":30129},[30130,30131,30132,30133,30134],{"id":24341,"depth":178,"text":6299},{"id":13999,"depth":178,"text":13999},{"id":24407,"depth":178,"text":24408},{"id":24927,"depth":178,"text":24928},{"id":24946,"depth":178,"text":24946},{"id":25023,"depth":166,"text":25024,"children":30136},[30137,30138,30139,30140,30141],{"id":25033,"depth":178,"text":25034},{"id":25060,"depth":178,"text":25061},{"id":25641,"depth":178,"text":25642},{"id":25662,"depth":178,"text":25663},{"id":25766,"depth":178,"text":25767},{"id":25797,"depth":166,"text":25797,"children":30143},[30144,30145,30146,30147,30148],{"id":25810,"depth":178,"text":25810},{"id":26274,"depth":178,"text":26275},{"id":26292,"depth":178,"text":26292},{"id":26392,"depth":178,"text":26393},{"id":27399,"depth":178,"text":27399},{"id":27430,"depth":166,"text":27431,"children":30150},[30151,30152,30153,30154,30155,30156,30157],{"id":27441,"depth":178,"text":27441},{"id":27478,"depth":178,"text":27479},{"id":28014,"depth":178,"text":28015},{"id":28032,"depth":178,"text":28032},{"id":28246,"depth":178,"text":28247},{"id":28264,"depth":178,"text":28264},{"id":28863,"depth":178,"text":28863},{"id":29030,"depth":166,"text":29030,"children":30159},[30160,30161,30162,30163,30164,30165,30166],{"id":29036,"depth":178,"text":29037},{"id":29126,"depth":178,"text":29127},{"id":29208,"depth":178,"text":29209},{"id":29273,"depth":178,"text":29274},{"id":29406,"depth":178,"text":29407},{"id":29496,"depth":178,"text":29497},{"id":29665,"depth":178,"text":29666},{"id":29743,"depth":166,"text":29744},{"id":13136,"depth":166,"text":13137,"children":30169},[30170,30171,30172,30173,30174,30175,30176],{"id":29979,"depth":178,"text":29980},{"id":29986,"depth":178,"text":29987},{"id":29999,"depth":178,"text":30000},{"id":30008,"depth":178,"text":30009},{"id":30027,"depth":178,"text":30028},{"id":30040,"depth":178,"text":30041},{"id":30053,"depth":178,"text":30054},{"id":30065,"depth":166,"text":30065},"Seedance 2.0 API で画像をアニメーション化する方法を解説——単一画像、最初と最後のフレーム、マルチ画像ワークフロー。完全な Python コード、@tag 構文、EC デモを収録。",{"date":22897,"image":30180,"seoTitle":30181},"/s5-hero-image-to-video.webp","Seedance 2.0 画像から動画 API：あらゆる画像をアニメーション化 (2026)","/ja/blog/seedance-2-image-to-video-api",{"title":22906,"description":30178},"ja/blog/seedance-2-image-to-video-api","icZTIY2_mw5RJkyNScNOxmn6DalwrumEjlwwAzjUQ_U",{"id":30187,"title":13260,"body":30188,"description":31934,"extension":11130,"meta":31935,"navigation":58,"path":31938,"seo":31939,"stem":31940,"__hash__":31941},"content/ja/blog/seedance-2-multimodal-tags-guide.md",{"type":8,"value":30189,"toc":31885},[30190,30196,30199,30206,30208,30212,30219,30222,30270,30273,30293,30300,30302,30306,30309,30315,30321,30324,30330,30354,30357,30446,30450,30453,30467,30473,30475,30479,30482,30485,30600,30604,30608,30614,30620,30626,30630,30635,30639,30643,30649,30654,30659,30662,30665,30671,30674,30676,30680,30687,30690,30779,30783,30787,30793,30798,30803,30806,30809,30853,30862,30866,30870,30875,30877,30881,30884,30887,30961,30965,30972,30976,30982,30987,30990,30993,30999,31002,31006,31011,31016,31019,31021,31025,31028,31032,31038,31043,31057,31061,31067,31073,31077,31082,31086,31100,31104,31110,31115,31119,31124,31128,31142,31146,31152,31157,31161,31164,31255,31261,31265,31268,31478,31481,31673,31680,31682,31684,31688,31695,31702,31705,31708,31711,31722,31726,31729,31732,31738,31741,31744,31752,31761,31764,31767,31769,31771,31775,31778,31782,31792,31796,31805,31809,31816,31820,31823,31825,31829,31832,31835,31855,31863,31868,31875,31877,31882],[11,30191,30192,30193,30195],{},"ほとんどのAI動画生成ツールは、テキストプロンプトを入力すると、モデルが勝手に判断した結果を返します。Seedance 2.0 は異なるアプローチを取ります。画像、動画、音声ファイルをアップロードし、",[23,30194,30071],{}," を使って各ファイルの役割を正確に指示できます。最初のフレームとして使う、カメラワークを定義する、音楽のテンポを設定する、キャラクターのリファレンスにする、といった指定が可能です。",[11,30197,30198],{},"この @tag リファレンスシステムこそが、Seedance 2.0 を Sora 2、Kling 3.0、Veo 3.1 と差別化するポイントです。このレベルのマルチモーダル制御を提供しているツールは他にありません。",[11,30200,30201,30202,30205],{},"本ガイドでは、すべての @tag タイプ、構文ルール、ファイル制限、そしてすぐに使える実際のプロンプト例を解説します。API コールを試したい方は、",[37,30203,13235],{"href":211,"rel":30204},[41],"してください。30秒で完了します。",[45,30207],{},[48,30209,30211],{"id":30210},"tag-リファレンスシステムとは","@Tag リファレンスシステムとは？",[11,30213,30214,30215,30218],{},"従来のテキストからビデオへの生成は、1入力・1出力のプロセスでした。プロンプトを書くと、モデルが自由に解釈して出力します。Seedance 2.0 はこれを",[23,30216,30217],{},"多入力・方向付き出力","のプロセスに変えました。",[11,30220,30221],{},"違いを見てみましょう：",[2037,30223,30224,30240],{},[2040,30225,30226],{},[2043,30227,30228,30231,30234,30237],{},[2046,30229,30230],{},"アプローチ",[2046,30232,30233],{},"入力",[2046,30235,30236],{},"制御レベル",[2046,30238,30239],{},"結果",[2053,30241,30242,30256],{},[2043,30243,30244,30247,30250,30253],{},[2058,30245,30246],{},"テキストのみ",[2058,30248,30249],{},"「女性がステージで踊る」",[2058,30251,30252],{},"低 — モデルがすべてを決定",[2058,30254,30255],{},"どんな女性、どんなダンス、どんなステージになるかはすべてモデル任せ",[2043,30257,30258,30261,30264,30267],{},[2058,30259,30260],{},"@tags 使用",[2058,30262,30263],{},"@Image1（キャラクター）+ @Video1（ダンスリファレンス）+ プロンプト",[2058,30265,30266],{},"高 — 各要素を指示可能",[2058,30268,30269],{},"指定したキャラクターが、リファレンスの通りのダンスを実行",[11,30271,30272],{},"@tag システムは映画監督のショットリストのように機能します。アップロードした各ファイルに、プロンプト内の自然言語で役割が割り当てられます：",[96,30274,30275,30281,30287],{},[73,30276,30277,30280],{},[28,30278,30279],{},"@Image1 as the first frame"," — オープニングのビジュアルを固定",[73,30282,30283,30286],{},[28,30284,30285],{},"@Video1 for camera movement reference"," — シネマトグラフィーをコピー",[73,30288,30289,30292],{},[28,30290,30291],{},"@Audio1 as background music"," — サウンドトラックとリズムを設定",[11,30294,30295,30296,30299],{},"1回の生成で最大 ",[23,30297,30298],{},"12ファイル","（画像9枚 + 動画3本 + 音声クリップ3つ）を組み合わせ、それぞれに特定の目的をタグ付けできます。",[45,30301],{},[48,30303,30305],{"id":30304},"tag-構文ルール-完全リファレンス","@Tag 構文ルール — 完全リファレンス",[92,30307,30308],{"id":30308},"基本構文",[11,30310,30311,30312,30314],{},"形式はシンプルです：",[28,30313,11395],{}," + アセットタイプ + 番号。",[136,30316,30319],{"className":30317,"code":30318,"language":2186},[2184],"@Image1, @Image2, @Image3 ... @Image9\n@Video1, @Video2, @Video3\n@Audio1, @Audio2, @Audio3\n",[28,30320,30318],{"__ignoreMap":141},[11,30322,30323],{},"プロンプト内でこれらのタグを参照し、自然言語で役割を記述します：",[136,30325,30328],{"className":30326,"code":30327,"language":2186},[2184],"@Image1 as the first frame, @Image2 as character reference,\nreference @Video1's camera movement and tracking shots,\nuse @Audio1 for background music tempo.\n",[28,30329,30327],{"__ignoreMap":141},[18,30331,30332],{},[11,30333,30334,30337,30338,2916,30341,2916,30344,30347,30348,2916,30350,2916,30352,1756],{},[23,30335,30336],{},"注意："," Jimeng（即梦）プラットフォームでは、タグは中国語形式を使用します：",[28,30339,30340],{},"@图片1",[28,30342,30343],{},"@视频1",[28,30345,30346],{},"@音频1","。API 経由では ",[28,30349,2909],{},[28,30351,11273],{},[28,30353,16354],{},[92,30355,30356],{"id":30356},"ファイル制限とフォーマット",[2037,30358,30359,30377],{},[2040,30360,30361],{},[2043,30362,30363,30366,30369,30372,30375],{},[2046,30364,30365],{},"アセットタイプ",[2046,30367,30368],{},"最大数",[2046,30370,30371],{},"フォーマット",[2046,30373,30374],{},"サイズ制限",[2046,30376,19227],{},[2053,30378,30379,30396,30412,30428],{},[2043,30380,30381,30384,30387,30390,30393],{},[2058,30382,30383],{},"画像",[2058,30385,30386],{},"9",[2058,30388,30389],{},"JPEG, PNG, WebP, BMP, TIFF, GIF",[2058,30391,30392],{},"各30 MB",[2058,30394,30395],{},"高解像度ほど出力品質が向上",[2043,30397,30398,30401,30403,30406,30409],{},[2058,30399,30400],{},"動画",[2058,30402,4927],{},[2058,30404,30405],{},"MP4, MOV",[2058,30407,30408],{},"各50 MB",[2058,30410,30411],{},"合計時間：2〜15秒、解像度：480p〜720p",[2043,30413,30414,30417,30419,30422,30425],{},[2058,30415,30416],{},"音声",[2058,30418,4927],{},[2058,30420,30421],{},"MP3, WAV",[2058,30423,30424],{},"各15 MB",[2058,30426,30427],{},"合計時間：15秒以下",[2043,30429,30430,30435,30439,30441,30443],{},[2058,30431,30432],{},[23,30433,30434],{},"合計",[2058,30436,30437],{},[23,30438,30298],{},[2058,30440,3425],{},[2058,30442,3425],{},[2058,30444,30445],{},"制限内で任意の組み合わせが可能",[92,30447,30449],{"id":30448},"_2つのエントリーモード","2つのエントリーモード",[11,30451,30452],{},"Seedance 2.0 には2つの生成モードがあります。入力内容によって使い分けます：",[70,30454,30455,30461],{},[73,30456,30457,30460],{},[23,30458,30459],{},"最初/最後のフレームモード"," — 開始画像（+ オプションの終了画像）とテキストプロンプトのみをアップロード。シンプルで高速。",[73,30462,30463,30466],{},[23,30464,30465],{},"オールラウンドリファレンスモード"," — 画像、動画、音声を任意に組み合わせ、@tag で役割を指定してアップロード。フルパワーを発揮するのはこちら。",[11,30468,30469,30472],{},[23,30470,30471],{},"ルール："," 動画や音声のリファレンスをアップロードする場合、または画像を3枚以上アップロードする場合は、オールラウンドリファレンスモードを使用する必要があります。",[45,30474],{},[48,30476,30478],{"id":30477},"画像-tags-ビジュアル表現の制御","画像 @Tags — ビジュアル表現の制御",[11,30480,30481],{},"画像リファレンスは最も汎用性の高い @tag タイプです。1枚の画像でも、プロンプトでの記述方法次第で多くの異なる目的に使用できます。",[92,30483,30484],{"id":30484},"画像のリファレンスタイプ",[2037,30486,30487,30497],{},[2040,30488,30489],{},[2043,30490,30491,30493,30495],{},[2046,30492,25683],{},[2046,30494,2980],{},[2046,30496,11324],{},[2053,30498,30499,30513,30528,30542,30556,30571,30586],{},[2043,30500,30501,30506,30510],{},[2058,30502,30503],{},[23,30504,30505],{},"最初のフレーム",[2058,30507,30508],{},[28,30509,30279],{},[2058,30511,30512],{},"動画のオープニングビジュアルを正確に固定",[2043,30514,30515,30520,30525],{},[2058,30516,30517],{},[23,30518,30519],{},"最後のフレーム",[2058,30521,30522],{},[28,30523,30524],{},"@Image2 as the last frame",[2058,30526,30527],{},"トランジション用の終了ビジュアルを定義",[2043,30529,30530,30535,30539],{},[2058,30531,30532],{},[23,30533,30534],{},"キャラクターID",[2058,30536,30537],{},[28,30538,25695],{},[2058,30540,30541],{},"動画全体で顔・体の一貫性を維持",[2043,30543,30544,30548,30553],{},[2058,30545,30546],{},[23,30547,25716],{},[2058,30549,30550],{},[28,30551,30552],{},"reference @Image1's art style",[2058,30554,30555],{},"絵画スタイル、カラーパレット、視覚的美学を適用",[2043,30557,30558,30563,30568],{},[2058,30559,30560],{},[23,30561,30562],{},"シーン/環境",[2058,30564,30565],{},[28,30566,30567],{},"scene references @Image3",[2058,30569,30570],{},"ロケーション、背景、建築を設定",[2043,30572,30573,30578,30583],{},[2058,30574,30575],{},[23,30576,30577],{},"オブジェクトリファレンス",[2058,30579,30580],{},[28,30581,30582],{},"the product in @Image1",[2058,30584,30585],{},"コマーシャル用の製品ディテールを維持",[2043,30587,30588,30592,30597],{},[2058,30589,30590],{},[23,30591,23613],{},[2058,30593,30594],{},[28,30595,30596],{},"framing references @Image1",[2058,30598,30599],{},"カメラアングルとレイアウトをコピー",[92,30601,30603],{"id":30602},"例ゴッホ風のスタイル転送","例：ゴッホ風のスタイル転送",[11,30605,30606],{},[23,30607,11837],{},[136,30609,30612],{"className":30610,"code":30611,"language":2186},[2184],"A young woman with long blonde hair in a blue dress stands on a hilltop,\ngazing at a Provençal village at sunset. Entirely rendered in @Image1's\npost-impressionist art style — thick impasto brushstrokes, swirling textures,\nrich yellows and blues.\n",[28,30613,30611],{"__ignoreMap":141},[11,30615,30616,30619],{},[23,30617,30618],{},"入力："," ゴッホの絵画1枚を @Image1 として使用",[11,30621,30622,30625],{},[23,30623,30624],{},"結果："," モデルがシーン全体をゴッホの特徴的なスタイルで描画します。フィルターの重ね合わせではなく、動画全体を通じてブラシストロークの質感を維持した本格的なスタイル転送です。",[56,30627,60,30628],{"autoPlay":58,"loop":58,"muted":58,"playsInline":58,"style":59},[62,30629],{"src":24208,"type":65},[11,30631,30632],{},[2619,30633,30634],{},"動画：@Image リファレンスを使用したスタイル転送 — ゴッホ風ポスト印象派レンダリング",[92,30636,30638],{"id":30637},"例商品コマーシャル","例：商品コマーシャル",[11,30640,30641],{},[23,30642,11837],{},[136,30644,30647],{"className":30645,"code":30646,"language":2186},[2184],"Commercial showcase of the handbag in @Image2.\nSide profile references @Image1.\nSurface material texture references @Image3.\nDisplay all product details with cinematic camera movement.\nGrand orchestral background music.\n",[28,30648,30646],{"__ignoreMap":141},[11,30650,30651,30653],{},[23,30652,30618],{}," 3枚の画像 — サイドビュー、メイン商品写真、素材クローズアップ",[11,30655,30656,30658],{},[23,30657,30624],{}," リファレンス画像から正確な素材の質感とプロポーションを維持した、洗練された商品動画。製品ディテールにAIのハルシネーションが発生しません。",[92,30660,30661],{"id":30661},"複数画像でのキャラクター一貫性",[11,30663,30664],{},"同じキャラクターを複数のショットで使用する場合は、異なる角度からの複数のリファレンス画像をアップロードします：",[136,30666,30669],{"className":30667,"code":30668,"language":2186},[2184],"@Image1 and @Image2 define the main character's appearance.\nThe character walks through @Image3's environment,\nwearing the outfit from @Image4.\n",[28,30670,30668],{"__ignoreMap":141},[11,30672,30673],{},"キャラクターのリファレンス画像が多いほど、出力の一貫性が向上します。これにより、単一画像生成で問題となる「顔の変形」問題が解決されます。",[45,30675],{},[48,30677,30679],{"id":30678},"動画-tags-カメラワークとモーションの複製","動画 @Tags — カメラワークとモーションの複製",[11,30681,30682,30683,30686],{},"動画リファレンスは、Seedance 2.0 の最も強力な機能を引き出します：",[23,30684,30685],{},"カメラワークと物理的な動きの精密な複製","。リファレンス動画をアップロードすると、モデルが正確なシネマトグラフィー、アクションの振り付け、ビジュアルエフェクトをコピーします。",[92,30688,30689],{"id":30689},"動画のリファレンスタイプ",[2037,30691,30692,30703],{},[2040,30693,30694],{},[2043,30695,30696,30698,30700],{},[2046,30697,25683],{},[2046,30699,2980],{},[2046,30701,30702],{},"コピーされる内容",[2053,30704,30705,30720,30735,30749,30764],{},[2043,30706,30707,30712,30717],{},[2058,30708,30709],{},[23,30710,30711],{},"カメラワーク",[2058,30713,30714],{},[28,30715,30716],{},"reference @Video1's camera movement",[2058,30718,30719],{},"パン、チルト、ドリー、トラッキング、ズームパターン",[2043,30721,30722,30727,30732],{},[2058,30723,30724],{},[23,30725,30726],{},"アクション/振り付け",[2058,30728,30729],{},[28,30730,30731],{},"perform the actions from @Video1",[2058,30733,30734],{},"体の動き、ダンスステップ、格闘の振り付け",[2043,30736,30737,30741,30746],{},[2058,30738,30739],{},[23,30740,11375],{},[2058,30742,30743],{},[28,30744,30745],{},"reference @Video1's transition effects",[2058,30747,30748],{},"パーティクルエフェクト、スタイルトランジション、VFX",[2043,30750,30751,30756,30761],{},[2058,30752,30753],{},[23,30754,30755],{},"リズム/ペーシング",[2058,30757,30758],{},[28,30759,30760],{},"match @Video1's editing rhythm",[2058,30762,30763],{},"カットのタイミング、ビート同期、テンポ",[2043,30765,30766,30771,30776],{},[2058,30767,30768],{},[23,30769,30770],{},"完全複製",[2058,30772,30773],{},[28,30774,30775],{},"completely reference @Video1",[2058,30777,30778],{},"すべて — カメラ、アクション、エフェクト、ペーシング",[92,30780,30782],{"id":30781},"例シネマティックカメラ複製","例：シネマティックカメラ複製",[11,30784,30785],{},[23,30786,11837],{},[136,30788,30791],{"className":30789,"code":30790,"language":2186},[2184],"Reference @Image1's character. He is in @Image2's elevator.\nCompletely reference @Video1's camera movements and the protagonist's\nfacial expressions. Hitchcock zoom when the character is frightened,\nthen several orbiting shots inside the elevator.\nThe elevator door opens, tracking shot follows him out.\nExterior scene references @Image3.\n",[28,30792,30790],{"__ignoreMap":141},[11,30794,30795,30797],{},[23,30796,30618],{}," 3枚の画像（キャラクター、エレベーター内装、外観シーン）+ 1本のリファレンス動画（希望するカメラワーク付き）",[11,30799,30800,30802],{},[23,30801,30624],{}," モデルがリファレンス動画から正確なヒッチコックズーム、軌道カメラ移動、トラッキングショットを再現し、まったく異なるキャラクターと設定に適用します。",[92,30804,30805],{"id":30805},"複製可能なカメラテクニック",[11,30807,30808],{},"Seedance 2.0 はリファレンス動画から以下のカメラワークを再現できます：",[96,30810,30811,30817,30822,30828,30833,30838,30843,30848],{},[73,30812,30813,30816],{},[23,30814,30815],{},"ヒッチコックズーム","（ドリーズーム / めまいエフェクト）",[73,30818,30819],{},[23,30820,30821],{},"被写体周囲の360°オービット",[73,30823,30824,30827],{},[23,30825,30826],{},"ワンショット長回し","（カットなし）",[73,30829,30830],{},[23,30831,30832],{},"メカニカルアームによるマルチアングルトラッキング",[73,30834,30835],{},[23,30836,30837],{},"ローアングルヒーローショット",[73,30839,30840],{},[23,30841,30842],{},"手持ちカメラのチェイスショット",[73,30844,30845],{},[23,30846,30847],{},"魚眼レンズディストーション",[73,30849,30850],{},[23,30851,30852],{},"プッシュプルのリズミカルな動き",[11,30854,30855,30858,30859,1261],{},[23,30856,30857],{},"プロンプトのコツ："," リファレンス動画のどの側面をコピーするか具体的に指定しましょう。「reference @Video1's camera movement」は単なる「reference @Video1」よりも効果的です。モデルにすべてをコピーしようとさせるのではなく、シネマトグラフィーに集中させることができます。カメラリファレンスの実例と完全なPythonコードは、",[37,30860,30861],{"href":3855},"カメラワーク専用チュートリアル",[92,30863,30865],{"id":30864},"例アクションパルクール","例：アクションパルクール",[56,30867,60,30868],{"autoPlay":58,"loop":58,"muted":58,"playsInline":58,"style":59},[62,30869],{"src":12098,"type":65},[11,30871,30872],{},[2619,30873,30874],{},"動画：シネマティックトラッキングショットによるダイナミックなパルクール — カメラワークリファレンスを使用して生成",[45,30876],{},[48,30878,30880],{"id":30879},"音声-tags-リファレンスによるサウンドデザイン","音声 @Tags — リファレンスによるサウンドデザイン",[11,30882,30883],{},"Seedance 2.0 はすべての動画にネイティブ音声を生成します — 効果音、環境音、音楽、さらには台詞まで。音声 @tags を使えば、サウンドをコントロールできます。",[92,30885,30886],{"id":30886},"音声のリファレンスタイプ",[2037,30888,30889,30899],{},[2040,30890,30891],{},[2043,30892,30893,30895,30897],{},[2046,30894,25683],{},[2046,30896,2980],{},[2046,30898,30702],{},[2053,30900,30901,30916,30931,30946],{},[2043,30902,30903,30908,30913],{},[2058,30904,30905],{},[23,30906,30907],{},"BGM",[2058,30909,30910],{},[28,30911,30912],{},"use @Audio1 for background music",[2058,30914,30915],{},"音楽スタイル、テンポ、楽器",[2043,30917,30918,30923,30928],{},[2058,30919,30920],{},[23,30921,30922],{},"効果音",[2058,30924,30925],{},[28,30926,30927],{},"sound effects reference @Audio1",[2058,30929,30930],{},"特定のサウンドテクスチャとタイミング",[2043,30932,30933,30938,30943],{},[2058,30934,30935],{},[23,30936,30937],{},"ボイス/ナレーションスタイル",[2058,30939,30940],{},[28,30941,30942],{},"narration voice references @Video1",[2058,30944,30945],{},"声のトーン、話すペース、アクセント",[2043,30947,30948,30953,30958],{},[2058,30949,30950],{},[23,30951,30952],{},"ビート同期",[2058,30954,30955],{},[28,30956,30957],{},"match @Audio1's rhythm for editing cuts",[2058,30959,30960],{},"音楽のビートがビジュアルトランジションを駆動",[92,30962,30964],{"id":30963},"ビート同期ミュージックビデオモード","ビート同期（ミュージックビデオモード）",[11,30966,30967,30968,30971],{},"最も強力な音声機能の1つ：音楽トラックをアップロードすると、モデルが",[23,30969,30970],{},"ビジュアルのカットやトランジションをビートに同期","させます。",[11,30973,30974],{},[23,30975,11837],{},[136,30977,30980],{"className":30978,"code":30979,"language":2186},[2184],"@Image1 through @Image7 as scene references.\nMatch @Video1's visual rhythm and beat synchronization.\nEach image appears on a music beat with dynamic transitions.\nEnhance visual impact with dramatic lighting changes on each cut.\n",[28,30981,30979],{"__ignoreMap":141},[11,30983,30984,30986],{},[23,30985,30624],{}," モデルがミュージックビデオスタイルの編集を作成し、シーンの切り替え、カメラの動き、ライティングの変化がリファレンス音声のビートに正確に合わせて発生します。",[92,30988,30989],{"id":30989},"アップロード動画の音声をリファレンスとして使用",[11,30991,30992],{},"別の音声ファイルは不要です。アップロードした動画の音声トラックをリファレンスにできます：",[136,30994,30997],{"className":30995,"code":30996,"language":2186},[2184],"Background music references @Video1's audio.\n",[28,30998,30996],{"__ignoreMap":141},[11,31000,31001],{},"これは、既存の動画のサウンドデザインを複製しつつビジュアルを変更したい場合に便利です。",[92,31003,31005],{"id":31004},"例キャラクターの台詞","例：キャラクターの台詞",[56,31007,60,31008],{"autoPlay":58,"loop":58,"muted":58,"playsInline":58,"style":59},[62,31009],{"src":31010,"type":65},"https://cdn.evolink.ai/seedance2api/%E7%8C%AB%E7%8B%97%E8%B0%88%E5%BF%83.mp4",[11,31012,31013],{},[2619,31014,31015],{},"動画：自然な声の演技とカフェの環境音を含むAI生成キャラクターダイアログ",[11,31017,31018],{},"Seedance 2.0 は英語、中国語、スペイン語、韓国語など、多言語での台詞生成をサポートしています。プロンプトに台詞を直接書くと、モデルがリップシンクと声の演技を生成します。",[45,31020],{},[48,31022,31024],{"id":31023},"高度な組み合わせ-マルチモーダルレシピ","高度な組み合わせ — マルチモーダルレシピ",[11,31026,31027],{},"@tags の真の力は、複数のモダリティを組み合わせた時に発揮されます。一般的な制作シナリオに対応する3つの実証済みレシピを紹介します。",[92,31029,31031],{"id":31030},"レシピ-1シネマティック短編映画","レシピ 1：シネマティック短編映画",[11,31033,31034,31037],{},[23,31035,31036],{},"目標："," 特定のキャラクター、カメラワーク、サウンドトラックによる映画品質のシーン",[11,31039,31040],{},[23,31041,31042],{},"ファイル：",[96,31044,31045,31048,31051,31054],{},[73,31046,31047],{},"@Image1: キャラクターの顔/体のリファレンス",[73,31049,31050],{},"@Image2: 環境/ロケーションリファレンス",[73,31052,31053],{},"@Video1: カメラワークリファレンス（例：映画のトラッキングショット）",[73,31055,31056],{},"@Audio1: BGMトラック",[11,31058,31059],{},[23,31060,11837],{},[136,31062,31065],{"className":31063,"code":31064,"language":2186},[2184],"@Image1's character walks through @Image2's environment.\nCamera movement follows @Video1's tracking shot pattern.\nBackground music uses @Audio1.\nCinematic lighting, shallow depth of field, 24fps film grain.\n",[28,31066,31064],{"__ignoreMap":141},[11,31068,31069,31072],{},[23,31070,31071],{},"ファイル配分："," 画像2枚 + 動画1本 + 音声1つ = 12枠中4枠使用",[92,31074,31076],{"id":31075},"レシピ-2ecサイト商品動画","レシピ 2：ECサイト商品動画",[11,31078,31079,31081],{},[23,31080,31036],{}," 静止画の商品写真からプロフェッショナルな商品ショーケースを作成",[11,31083,31084],{},[23,31085,31042],{},[96,31087,31088,31091,31094,31097],{},[73,31089,31090],{},"@Image1: 商品メインショット",[73,31092,31093],{},"@Image2: 商品サイドビュー",[73,31095,31096],{},"@Image3: 素材/テクスチャのクローズアップ",[73,31098,31099],{},"@Video1: カメラワークリファレンス（商品を周回するショット）",[11,31101,31102],{},[23,31103,11837],{},[136,31105,31108],{"className":31106,"code":31107,"language":2186},[2184],"Commercial showcase of the product in @Image2.\nSide profile references @Image1.\nSurface material and texture reference @Image3.\nCamera movement references @Video1's orbiting rotation.\nStudio lighting, reflective dark surface, premium aesthetic.\n",[28,31109,31107],{"__ignoreMap":141},[11,31111,31112,31114],{},[23,31113,31071],{}," 画像3枚 + 動画1本 = 12枠中4枠使用",[92,31116,31118],{"id":31117},"レシピ-3マルチキャラクターアニメーション","レシピ 3：マルチキャラクターアニメーション",[11,31120,31121,31123],{},[23,31122,31036],{}," 振り付けされたアクションで2人のキャラクターが交流",[11,31125,31126],{},[23,31127,31042],{},[96,31129,31130,31133,31136,31139],{},[73,31131,31132],{},"@Image1, @Image2: キャラクターA（正面 + 横のリファレンス）",[73,31134,31135],{},"@Image3, @Image4: キャラクターB（正面 + 横のリファレンス）",[73,31137,31138],{},"@Image5: 背景/シーンリファレンス",[73,31140,31141],{},"@Video1: アクション振り付けリファレンス",[11,31143,31144],{},[23,31145,11837],{},[136,31147,31150],{"className":31148,"code":31149,"language":2186},[2184],"@Image1 and @Image2 define Character A (spear wielder).\n@Image3 and @Image4 define Character B (dual swords).\nThey fight in @Image5's autumn forest, mimicking @Video1's\ncombat choreography. White dust rises on impact.\nDramatic star-filled night sky.\n",[28,31151,31149],{"__ignoreMap":141},[11,31153,31154,31156],{},[23,31155,31071],{}," 画像5枚 + 動画1本 = 12枠中6枠使用",[92,31158,31160],{"id":31159},"_12ファイル枠配分戦略","12ファイル枠：配分戦略",[11,31162,31163],{},"12枠を有効に使うための配分方法：",[2037,31165,31166,31178],{},[2040,31167,31168],{},[2043,31169,31170,31173,31176],{},[2046,31171,31172],{},"優先度",[2046,31174,31175],{},"配分",[2046,31177,8131],{},[2053,31179,31180,31192,31205,31217,31230,31242],{},[2043,31181,31182,31186,31189],{},[2058,31183,31184],{},[23,31185,30534],{},[2058,31187,31188],{},"キャラクターごとに2〜3枚の画像",[2058,31190,31191],{},"角度が多いほど一貫性が向上",[2043,31193,31194,31199,31202],{},[2058,31195,31196],{},[23,31197,31198],{},"カメラ/モーションリファレンス",[2058,31200,31201],{},"動画1本",[2058,31203,31204],{},"良いリファレンスが1つあれば十分",[2043,31206,31207,31211,31214],{},[2058,31208,31209],{},[23,31210,30562],{},[2058,31212,31213],{},"画像1〜2枚",[2058,31215,31216],{},"世界観を設定",[2043,31218,31219,31224,31227],{},[2058,31220,31221],{},[23,31222,31223],{},"音声/音楽",[2058,31225,31226],{},"音声1つまたは動画1本（音声トラック用）",[2058,31228,31229],{},"雰囲気を設定",[2043,31231,31232,31236,31239],{},[2058,31233,31234],{},[23,31235,25716],{},[2058,31237,31238],{},"画像1枚（必要な場合）",[2058,31240,31241],{},"非リアルスタイルの場合のみ",[2043,31243,31244,31249,31252],{},[2058,31245,31246],{},[23,31247,31248],{},"予備",[2058,31250,31251],{},"2〜3枠を空けておく",[2058,31253,31254],{},"イテレーションと追加ディテール用",[11,31256,31257,31260],{},[23,31258,31259],{},"プロのコツ："," 12枠すべてを使う必要はありません。4〜6ファイルから始めて、出力にさらなる精度が必要な場合にのみ追加しましょう。リファレンスを過剰に入れるとモデルが混乱する可能性があります。",[92,31262,31264],{"id":31263},"api-コール例","API コール例",[11,31266,31267],{},"マルチモーダル生成の API コール例：",[136,31269,31271],{"className":337,"code":31270,"language":339,"meta":141,"style":141},"import requests\n\nresponse = requests.post(\n    \"https://api.evolink.ai/v1/videos/generations\",\n    headers={\"Authorization\": \"Bearer YOUR_EVOLINK_API_KEY\"},\n    json={\n        \"model\": \"seedance-2.0\",\n        \"prompt\": (\n            \"@Image1 as the main character. \"\n            \"@Image2 as the environment. \"\n            \"Reference @Video1's tracking shot and camera movement. \"\n            \"The character walks through a misty forest at dawn. \"\n            \"Cinematic lighting, shallow depth of field.\"\n        ),\n        \"image_urls\": [\n            \"https://your-cdn.com/character.jpg\",\n            \"https://your-cdn.com/forest.jpg\"\n        ],\n        \"video_urls\": [\n            \"https://your-cdn.com/tracking-shot.mp4\"\n        ],\n        \"duration\": 10,\n        \"quality\": \"1080p\",\n        \"generate_audio\": true\n    }\n)\n\ntask_id = response.json()[\"id\"]\nprint(f\"Generation started: {task_id}\")\n",[28,31272,31273,31279,31283,31291,31298,31316,31324,31334,31340,31345,31350,31355,31360,31365,31369,31375,31382,31387,31391,31397,31402,31406,31416,31426,31433,31437,31441,31445,31457],{"__ignoreMap":141},[145,31274,31275,31277],{"class":147,"line":148},[145,31276,346],{"class":258},[145,31278,328],{"class":262},[145,31280,31281],{"class":147,"line":166},[145,31282,375],{"emptyLinePlaceholder":58},[145,31284,31285,31287,31289],{"class":147,"line":178},[145,31286,6387],{"class":262},[145,31288,266],{"class":258},[145,31290,1433],{"class":262},[145,31292,31293,31296],{"class":147,"line":187},[145,31294,31295],{"class":159},"    \"https://api.evolink.ai/v1/videos/generations\"",[145,31297,451],{"class":262},[145,31299,31300,31302,31304,31306,31309,31311,31314],{"class":147,"line":372},[145,31301,6409],{"class":700},[145,31303,266],{"class":258},[145,31305,684],{"class":262},[145,31307,31308],{"class":159},"\"Authorization\"",[145,31310,436],{"class":262},[145,31312,31313],{"class":159},"\"Bearer YOUR_EVOLINK_API_KEY\"",[145,31315,19396],{"class":262},[145,31317,31318,31320,31322],{"class":147,"line":378},[145,31319,6420],{"class":700},[145,31321,266],{"class":258},[145,31323,1866],{"class":262},[145,31325,31326,31328,31330,31332],{"class":147,"line":384},[145,31327,1304],{"class":159},[145,31329,436],{"class":262},[145,31331,1309],{"class":159},[145,31333,451],{"class":262},[145,31335,31336,31338],{"class":147,"line":408},[145,31337,1320],{"class":159},[145,31339,1323],{"class":262},[145,31341,31342],{"class":147,"line":419},[145,31343,31344],{"class":159},"            \"@Image1 as the main character. \"\n",[145,31346,31347],{"class":147,"line":430},[145,31348,31349],{"class":159},"            \"@Image2 as the environment. \"\n",[145,31351,31352],{"class":147,"line":454},[145,31353,31354],{"class":159},"            \"Reference @Video1's tracking shot and camera movement. \"\n",[145,31356,31357],{"class":147,"line":465},[145,31358,31359],{"class":159},"            \"The character walks through a misty forest at dawn. \"\n",[145,31361,31362],{"class":147,"line":599},[145,31363,31364],{"class":159},"            \"Cinematic lighting, shallow depth of field.\"\n",[145,31366,31367],{"class":147,"line":604},[145,31368,1343],{"class":262},[145,31370,31371,31373],{"class":147,"line":610},[145,31372,2688],{"class":159},[145,31374,2691],{"class":262},[145,31376,31377,31380],{"class":147,"line":616},[145,31378,31379],{"class":159},"            \"https://your-cdn.com/character.jpg\"",[145,31381,451],{"class":262},[145,31383,31384],{"class":147,"line":622},[145,31385,31386],{"class":159},"            \"https://your-cdn.com/forest.jpg\"\n",[145,31388,31389],{"class":147,"line":627},[145,31390,2701],{"class":262},[145,31392,31393,31395],{"class":147,"line":638},[145,31394,12002],{"class":159},[145,31396,2691],{"class":262},[145,31398,31399],{"class":147,"line":653},[145,31400,31401],{"class":159},"            \"https://your-cdn.com/tracking-shot.mp4\"\n",[145,31403,31404],{"class":147,"line":659},[145,31405,2701],{"class":262},[145,31407,31408,31410,31412,31414],{"class":147,"line":670},[145,31409,1348],{"class":159},[145,31411,436],{"class":262},[145,31413,536],{"class":155},[145,31415,451],{"class":262},[145,31417,31418,31420,31422,31424],{"class":147,"line":697},[145,31419,1364],{"class":159},[145,31421,436],{"class":262},[145,31423,3709],{"class":159},[145,31425,451],{"class":262},[145,31427,31428,31430],{"class":147,"line":709},[145,31429,1396],{"class":159},[145,31431,31432],{"class":262},": true\n",[145,31434,31435],{"class":147,"line":715},[145,31436,1408],{"class":262},[145,31438,31439],{"class":147,"line":721},[145,31440,405],{"class":262},[145,31442,31443],{"class":147,"line":727},[145,31444,375],{"emptyLinePlaceholder":58},[145,31446,31447,31449,31451,31453,31455],{"class":147,"line":738},[145,31448,12044],{"class":262},[145,31450,266],{"class":258},[145,31452,12049],{"class":262},[145,31454,1627],{"class":159},[145,31456,763],{"class":262},[145,31458,31459,31461,31463,31465,31468,31470,31472,31474,31476],{"class":147,"line":743},[145,31460,6442],{"class":155},[145,31462,793],{"class":262},[145,31464,439],{"class":258},[145,31466,31467],{"class":159},"\"Generation started: ",[145,31469,684],{"class":155},[145,31471,687],{"class":262},[145,31473,690],{"class":155},[145,31475,448],{"class":159},[145,31477,405],{"class":262},[11,31479,31480],{},"結果のポーリング：",[136,31482,31484],{"className":337,"code":31483,"language":339,"meta":141,"style":141},"import time\n\nwhile True:\n    status = requests.get(\n        f\"https://api.evolink.ai/v1/tasks/{task_id}\",\n        headers={\"Authorization\": \"Bearer YOUR_EVOLINK_API_KEY\"}\n    )\n    result = status.json()\n\n    if result[\"status\"] == \"completed\":\n        print(f\"Video ready: {result['results'][0]}\")\n        break\n    elif result[\"status\"] == \"failed\":\n        print(f\"Error: {result.get('error', 'Unknown error')}\")\n        break\n\n    time.sleep(5)\n",[28,31485,31486,31492,31496,31505,31513,31530,31546,31550,31559,31563,31579,31607,31612,31628,31657,31661,31665],{"__ignoreMap":141},[145,31487,31488,31490],{"class":147,"line":148},[145,31489,346],{"class":258},[145,31491,355],{"class":262},[145,31493,31494],{"class":147,"line":166},[145,31495,375],{"emptyLinePlaceholder":58},[145,31497,31498,31501,31503],{"class":147,"line":178},[145,31499,31500],{"class":258},"while",[145,31502,14679],{"class":155},[145,31504,859],{"class":262},[145,31506,31507,31509,31511],{"class":147,"line":187},[145,31508,7094],{"class":262},[145,31510,266],{"class":258},[145,31512,667],{"class":262},[145,31514,31515,31517,31520,31522,31524,31526,31528],{"class":147,"line":372},[145,31516,1438],{"class":258},[145,31518,31519],{"class":159},"\"https://api.evolink.ai/v1/tasks/",[145,31521,684],{"class":155},[145,31523,687],{"class":262},[145,31525,690],{"class":155},[145,31527,448],{"class":159},[145,31529,451],{"class":262},[145,31531,31532,31534,31536,31538,31540,31542,31544],{"class":147,"line":378},[145,31533,1456],{"class":700},[145,31535,266],{"class":258},[145,31537,684],{"class":262},[145,31539,31308],{"class":159},[145,31541,436],{"class":262},[145,31543,31313],{"class":159},[145,31545,468],{"class":262},[145,31547,31548],{"class":147,"line":384},[145,31549,1484],{"class":262},[145,31551,31552,31554,31556],{"class":147,"line":408},[145,31553,1619],{"class":262},[145,31555,266],{"class":258},[145,31557,31558],{"class":262}," status.json()\n",[145,31560,31561],{"class":147,"line":419},[145,31562,375],{"emptyLinePlaceholder":58},[145,31564,31565,31567,31569,31571,31573,31575,31577],{"class":147,"line":430},[145,31566,2505],{"class":258},[145,31568,1649],{"class":262},[145,31570,760],{"class":159},[145,31572,14751],{"class":262},[145,31574,853],{"class":258},[145,31576,856],{"class":159},[145,31578,859],{"class":262},[145,31580,31581,31583,31585,31587,31589,31591,31593,31595,31597,31599,31601,31603,31605],{"class":147,"line":454},[145,31582,790],{"class":155},[145,31584,793],{"class":262},[145,31586,439],{"class":258},[145,31588,11655],{"class":159},[145,31590,684],{"class":155},[145,31592,11660],{"class":262},[145,31594,11663],{"class":159},[145,31596,1563],{"class":262},[145,31598,782],{"class":155},[145,31600,1536],{"class":262},[145,31602,690],{"class":155},[145,31604,448],{"class":159},[145,31606,405],{"class":262},[145,31608,31609],{"class":147,"line":465},[145,31610,31611],{"class":258},"        break\n",[145,31613,31614,31616,31618,31620,31622,31624,31626],{"class":147,"line":599},[145,31615,7382],{"class":258},[145,31617,1649],{"class":262},[145,31619,760],{"class":159},[145,31621,14751],{"class":262},[145,31623,853],{"class":258},[145,31625,881],{"class":159},[145,31627,859],{"class":262},[145,31629,31630,31632,31634,31636,31639,31641,31643,31645,31647,31649,31651,31653,31655],{"class":147,"line":604},[145,31631,790],{"class":155},[145,31633,793],{"class":262},[145,31635,439],{"class":258},[145,31637,31638],{"class":159},"\"Error: ",[145,31640,684],{"class":155},[145,31642,11709],{"class":262},[145,31644,11712],{"class":159},[145,31646,399],{"class":262},[145,31648,942],{"class":159},[145,31650,945],{"class":262},[145,31652,690],{"class":155},[145,31654,448],{"class":159},[145,31656,405],{"class":262},[145,31658,31659],{"class":147,"line":610},[145,31660,31611],{"class":258},[145,31662,31663],{"class":147,"line":616},[145,31664,375],{"emptyLinePlaceholder":58},[145,31666,31667,31669,31671],{"class":147,"line":622},[145,31668,19708],{"class":262},[145,31670,1353],{"class":155},[145,31672,405],{"class":262},[11,31674,31675,31676,31679],{},"このコードを ",[37,31677,11200],{"href":211,"rel":31678},[41],"で実行してください。サインアップは無料で、クレジットカードは不要です。",[45,31681],{},[48,31683,13024],{"id":13024},[92,31685,31687],{"id":31686},"tag-の目的を指定しない","@tag の目的を指定しない",[11,31689,31690,2427,31692],{},[23,31691,13033],{},[28,31693,31694],{},"@Image1 @Video1 generate a video of a dancer",[11,31696,31697,2427,31699],{},[23,31698,13050],{},[28,31700,31701],{},"@Image1 as the dancer's appearance reference. @Video1 for dance choreography and camera movement. Generate the dancer performing on a stage.",[11,31703,31704],{},"モデルには明示的な役割の割り当てが必要です。指定しないとモデルが推測しますが、たいてい間違った結果になります。",[92,31706,31707],{"id":31707},"低解像度の入力ファイル",[11,31709,31710],{},"@Image1 が 480p の場合、出力はぼやけたものになります。以下を常に心がけましょう：",[96,31712,31713,31716,31719],{},[73,31714,31715],{},"画像：2K以上の解像度",[73,31717,31718],{},"動画：720p、圧縮アーティファクトのないクリーンな映像",[73,31720,31721],{},"音声：128kbps以上のMP3またはロスレスWAV",[92,31723,31725],{"id":31724},"_12ファイル枠すべてを使おうとする","12ファイル枠すべてを使おうとする",[11,31727,31728],{},"リファレンスが多ければ良い出力が得られるわけではありません。3〜5ファイルから始めて、必要な場合にのみ追加しましょう。矛盾するリファレンスが多すぎるとモデルが混乱します。",[92,31730,31731],{"id":31731},"リアルな人物の顔写真をアップロードする",[11,31733,31734,31737],{},[23,31735,31736],{},"プラットフォームの制限："," Seedance 2.0 は現在、リアルな人物の顔を含む画像や動画のアップロードをサポートしていません。システムが自動的にこれらのアップロードをブロックします。イラスト風、アニメ風、またはスタイライズされたキャラクターリファレンスを使用してください。",[92,31739,31740],{"id":31740},"アセット番号の混同",[11,31742,31743],{},"画像3枚と動画2本をアップロードした場合、番号は独立して付けられます：",[96,31745,31746,31749],{},[73,31747,31748],{},"画像：@Image1, @Image2, @Image3",[73,31750,31751],{},"動画：@Video1, @Video2",[11,31753,31754,280,31757,31760],{},[28,31755,31756],{},"@File3",[28,31758,31759],{},"@Asset5"," とは書かないでください。タイプ別の番号付けを使用します。",[92,31762,31763],{"id":31763},"動画延長時のデュレーション設定ミス",[11,31765,31766],{},"既存の動画を5秒延長する場合、生成デュレーションは5秒（新しい部分）に設定します。合計の長さではありません。延長分はオリジナルに追加されます。",[45,31768],{},[48,31770,13137],{"id":13136},[92,31772,31774],{"id":31773},"_1回の生成で何ファイルまでアップロードできますか","1回の生成で何ファイルまでアップロードできますか？",[11,31776,31777],{},"合計12ファイルまで：画像は最大9枚、動画は3本、音声クリップは3つ。動画の合計時間は2〜15秒の範囲内である必要があります。音声クリップの合計は15秒まで可能です。",[92,31779,31781],{"id":31780},"api-経由で-tags-を使用できますか","API 経由で @tags を使用できますか？",[11,31783,31784,31785,2916,31787,2916,31789,31791],{},"はい。API を呼び出す際、JSON リクエストボディに ",[28,31786,2896],{},[28,31788,3566],{},[28,31790,3583],{}," 配列を渡します。各配列にはリファレンスファイルの直接 URL を含めます。@tag の番号付け（@Image1、@Image2...）は各配列内の URL の順序に対応します。プロンプトテキストでは、UIと同じ @tag 構文を使用します。",[92,31793,31795],{"id":31794},"tag-に役割を割り当てないとどうなりますか","@tag に役割を割り当てないとどうなりますか？",[11,31797,31798,31799,31801,31802,31804],{},"モデルはファイルの内容とプロンプトのコンテキストから目的を推測しようとします。しかし、これは信頼性が低い方法です。常に各タグの役割を明示的に記述してください。例えば、",[28,31800,2909],{}," をコンテキストなしで言及するだけでなく、",[28,31803,30279],{}," のように記述します。",[92,31806,31808],{"id":31807},"アップロードした動画ファイルの音声をリファレンスにできますか","アップロードした動画ファイルの音声をリファレンスにできますか？",[11,31810,31811,31812,31815],{},"はい。プロンプトで ",[28,31813,31814],{},"background music references @Video1's audio"," と記述します。モデルが動画から音声トラックを抽出し、別の音声ファイルを必要とせずにサウンドリファレンスとして使用します。",[92,31817,31819],{"id":31818},"対応している画像動画フォーマットは","対応している画像・動画フォーマットは？",[11,31821,31822],{},"画像：JPEG, PNG, WebP, BMP, TIFF, GIF（各最大30 MB）。動画：MP4, MOV（各最大50 MB、480p〜720p解像度）。音声：MP3, WAV（各最大15 MB）。",[45,31824],{},[48,31826,31828],{"id":31827},"tags-で制作を始めよう","@Tags で制作を始めよう",[11,31830,31831],{},"@tag リファレンスシステムは、Seedance 2.0 を現在利用可能な最もコントローラブルなAI動画生成ツールにしている要素です。欲しいものを言葉で説明して結果を運に任せる代わりに、モデルに正確に意図を見せた上で、映画クルーのように指揮を執ることができます。",[11,31833,31834],{},"重要な原則：",[70,31836,31837,31843,31849],{},[73,31838,31839,31842],{},[23,31840,31841],{},"すべての @tag には役割が必要。"," ファイルをアップロードするだけでなく、各ファイルの役割をモデルに伝えましょう。",[73,31844,31845,31848],{},[23,31846,31847],{},"小さく始めて、精度を追加。"," 3〜4つのリファレンスから始めて、出力に必要な場合にのみ追加します。",[73,31850,31851,31854],{},[23,31852,31853],{},"何をコピーするか具体的に指定。"," 「reference @Video1's camera movement」は「reference @Video1」よりも効果的です。",[11,31856,31857,31858,31862],{},"AI動画の監督を始めませんか？ ",[37,31859,31861],{"href":211,"rel":31860},[41],"EvoLink で無料スタート"," — Seedance 2.0 と主要なAI動画モデルすべてに対応する1つの API キーで、スマートルーティングにより20〜70%のコスト削減が可能です。",[11,31864,31865],{},[23,31866,31867],{},"学習を続ける：",[96,31869,31870],{},[73,31871,31872,31874],{},[37,31873,2212],{"href":1767}," — プロンプトライティングの基礎をマスター",[45,31876],{},[11,31878,31879],{},[2619,31880,31881],{},"最終更新：2026年2月20日 | Written by J, Growth Lead at EvoLink",[11068,31883,31884],{},"html pre.shiki code .snl16, html code.shiki .snl16{--shiki-default:#F97583}html pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}html pre.shiki code .s9osk, html code.shiki .s9osk{--shiki-default:#FFAB70}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":141,"searchDepth":166,"depth":166,"links":31886},[31887,31888,31893,31899,31905,31911,31918,31926,31933],{"id":30210,"depth":166,"text":30211},{"id":30304,"depth":166,"text":30305,"children":31889},[31890,31891,31892],{"id":30308,"depth":178,"text":30308},{"id":30356,"depth":178,"text":30356},{"id":30448,"depth":178,"text":30449},{"id":30477,"depth":166,"text":30478,"children":31894},[31895,31896,31897,31898],{"id":30484,"depth":178,"text":30484},{"id":30602,"depth":178,"text":30603},{"id":30637,"depth":178,"text":30638},{"id":30661,"depth":178,"text":30661},{"id":30678,"depth":166,"text":30679,"children":31900},[31901,31902,31903,31904],{"id":30689,"depth":178,"text":30689},{"id":30781,"depth":178,"text":30782},{"id":30805,"depth":178,"text":30805},{"id":30864,"depth":178,"text":30865},{"id":30879,"depth":166,"text":30880,"children":31906},[31907,31908,31909,31910],{"id":30886,"depth":178,"text":30886},{"id":30963,"depth":178,"text":30964},{"id":30989,"depth":178,"text":30989},{"id":31004,"depth":178,"text":31005},{"id":31023,"depth":166,"text":31024,"children":31912},[31913,31914,31915,31916,31917],{"id":31030,"depth":178,"text":31031},{"id":31075,"depth":178,"text":31076},{"id":31117,"depth":178,"text":31118},{"id":31159,"depth":178,"text":31160},{"id":31263,"depth":178,"text":31264},{"id":13024,"depth":166,"text":13024,"children":31919},[31920,31921,31922,31923,31924,31925],{"id":31686,"depth":178,"text":31687},{"id":31707,"depth":178,"text":31707},{"id":31724,"depth":178,"text":31725},{"id":31731,"depth":178,"text":31731},{"id":31740,"depth":178,"text":31740},{"id":31763,"depth":178,"text":31763},{"id":13136,"depth":166,"text":13137,"children":31927},[31928,31929,31930,31931,31932],{"id":31773,"depth":178,"text":31774},{"id":31780,"depth":178,"text":31781},{"id":31794,"depth":178,"text":31795},{"id":31807,"depth":178,"text":31808},{"id":31818,"depth":178,"text":31819},{"id":31827,"depth":166,"text":31828},"Seedance 2.0 の @tag リファレンスシステムを徹底解説。画像・動画・音声のタグ構文を実例とプロンプトテンプレート付きで学べます。無料で今すぐ始めましょう。",{"date":13327,"image":31936,"seoTitle":31937},"/screenshot-20260220-193326.png","Seedance 2.0 @Tags ガイド：マルチモーダルリファレンスシステム解説","/ja/blog/seedance-2-multimodal-tags-guide",{"title":13260,"description":31934},"ja/blog/seedance-2-multimodal-tags-guide","CiZLOLP_0izA87rVkbrHHn1_HCYeGp_B06eKnYCAIXk",{"id":31943,"title":31944,"body":31945,"description":38342,"extension":11130,"meta":38343,"navigation":58,"path":38346,"seo":38347,"stem":38348,"__hash__":38349},"content/ja/blog/seedance-2-prompt-guide.md","Seedance 2.0 プロンプト完全ガイド：マルチモーダル動画生成をマスターする",{"type":8,"value":31946,"toc":38293},[31947,31954,31962,31977,31989,31991,31994,31997,32002,32080,32083,32092,32095,32100,32104,32111,32114,32138,32141,32147,32152,32155,32160,32166,32171,32177,32180,32183,32207,32215,32222,32226,32232,32238,32244,32250,32253,32257,32260,32265,32744,32747,32754,32768,32770,32774,32779,32782,32830,32837,32843,32846,32932,32935,33009,33012,33069,33072,33075,33171,33178,33180,33184,33187,33191,33197,33201,33434,33438,33443,33447,33683,33687,33692,33697,33928,33931,33935,33945,33949,34178,34182,34190,34194,34468,34472,34480,34484,34725,34729,34738,34742,35086,35090,35094,35103,35108,35406,35410,35415,35420,35687,35691,35696,35700,35956,35960,35965,35970,36212,36215,36219,36224,36397,36401,36406,36579,36587,36589,36593,36784,36790,36792,36796,36799,36802,37090,37093,37096,37099,37139,37142,37145,37166,37173,37176,37179,37198,37208,37211,37214,37323,37326,37329,37332,37503,37506,37526,37528,37531,37534,37537,37664,37667,37670,37810,37813,37816,37972,37980,37982,37984,37988,37991,37995,37998,38028,38032,38046,38050,38053,38056,38067,38072,38076,38079,38090,38094,38108,38112,38115,38141,38145,38162,38166,38173,38177,38209,38213,38216,38233,38235,38238,38241,38244,38247,38258,38267,38283,38285,38290],[11,31948,31949,31950,31953],{},"Seedance 2.0 はテキスト、画像、動画クリップ、音声ファイルを1つのプロンプトにまとめて受け付けます。映画のような仕上がりを得る鍵は、プロンプトの構成方法と、アップロードしたメディアを ",[28,31951,31952],{},"@Tags"," で参照する方法にあります。",[11,31955,31956,31957,31961],{},"ByteDance の ",[37,31958,31960],{"href":17217,"rel":31959},[41],"Seed 動画基盤モデル","をベースに構築された Seedance 2.0 は、API 経由で利用可能な最も高性能なマルチモーダル動画生成モデルです。",[11,31963,31964,31965,31968,31969,31972,31973,31976],{},"本ガイドでは、",[23,31966,31967],{},"Seedance 2.0 プロンプトの公式","を解説し、",[28,31970,31971],{},"@Tag"," 参照システムの仕組みを説明した上で、",[23,31974,31975],{},"15以上のコピペ可能なプロンプトテンプレート","と動作する Python API コードを提供します。",[18,31978,31979],{},[11,31980,31981,31984,31985,11811],{},[23,31982,31983],{},"コード例を実際に動かしましょう："," 以下のすべてのスニペットを実行するには、",[37,31986,31988],{"href":211,"rel":31987},[41],"EvoLink で無料 API キーを取得",[45,31990],{},[48,31992,31967],{"id":31993},"seedance-20-プロンプトの公式",[11,31995,31996],{},"効果的な Seedance プロンプトは、5つのパートで構成されます：",[11,31998,31999],{},[23,32000,32001],{},"被写体 + アクション + カメラ + スタイル + 制約条件",[2037,32003,32004,32016],{},[2040,32005,32006],{},[2043,32007,32008,32011,32014],{},[2046,32009,32010],{},"要素",[2046,32012,32013],{},"制御する内容",[2046,32015,11324],{},[2053,32017,32018,32030,32043,32055,32067],{},[2043,32019,32020,32024,32027],{},[2058,32021,32022],{},[23,32023,13083],{},[2058,32025,32026],{},"画面に映る人物やオブジェクト",[2058,32028,32029],{},"「火星にいる白い宇宙服の宇宙飛行士」",[2043,32031,32032,32037,32040],{},[2058,32033,32034],{},[23,32035,32036],{},"アクション",[2058,32038,32039],{},"動きとイベント",[2058,32041,32042],{},"「クレーターの縁から前に踏み出す」",[2043,32044,32045,32049,32052],{},[2058,32046,32047],{},[23,32048,13079],{},[2058,32050,32051],{},"アングル、動き、レンズ",[2058,32053,32054],{},"「超広角ショット、ゆっくりクローズアップへプッシュイン」",[2043,32056,32057,32061,32064],{},[2058,32058,32059],{},[23,32060,24366],{},[2058,32062,32063],{},"映像の美学",[2058,32065,32066],{},"「SF大作、IMAX 70mm、ティールオレンジの彩度を抑えたパレット」",[2043,32068,32069,32074,32077],{},[2058,32070,32071],{},[23,32072,32073],{},"制約条件",[2058,32075,32076],{},"尺、解像度、ムード",[2058,32078,32079],{},"「10秒、リアルな砂塵の物理演算、一貫した宇宙服デザイン」",[92,32081,32082],{"id":32082},"この公式が機能する理由",[11,32084,32085,32086,32091],{},"Seedance 2.0 はデュアルブランチの ",[37,32087,32090],{"href":32088,"rel":32089},"https://arxiv.org/abs/2212.09748",[41],"Diffusion Transformer"," アーキテクチャを使用しています。一方のブランチは空間情報（見た目）を処理し、もう一方は時間情報（時間経過に伴う動き）を処理します。構造化されたプロンプトは両方のブランチに明確な情報を供給します。",[11,32093,32094],{},"*「かっこいい車の動画」*のような曖昧なプロンプトでは、モデルが空間的・時間的な詳細を推測せざるを得ません。構造化されたプロンプトはその推測を排除します。",[11,32096,32097,32098,1261],{},"完全な API パラメータリファレンスは",[37,32099,1260],{"href":14209},[92,32101,32103],{"id":32102},"上級編ショットスクリプト形式","上級編：ショットスクリプト形式",[11,32105,32106,32107,32110],{},"5パートの公式は優れた出発点です。しかし、Seedance 2.0 の最高品質の出力 — SNSでバズるようなもの — はより強力な形式を使用しています：",[23,32108,32109],{},"ショットスクリプト","です。",[11,32112,32113],{},"ショットスクリプトは基本公式に3つのレイヤーを追加します：",[70,32115,32116,32126,32132],{},[73,32117,32118,32121,32122,32125],{},[23,32119,32120],{},"タイムコード"," — 動画を3～5秒のセグメントに分割し、明示的な ",[28,32123,32124],{},"[00:00-00:05]"," マーカーを付ける",[73,32127,32128,32131],{},[23,32129,32130],{},"ショット言語"," — 各ショットとその機能に名前を付ける：「Shot 1: The Scale (Extreme Wide Shot)」",[73,32133,32134,32137],{},[23,32135,32136],{},"スタイルアンカー + 物理的詳細"," — 特定の監督・映画スタイルに紐付け、抽象的概念ではなく物理的な反応を記述する",[11,32139,32140],{},"構造は以下の通りです：",[136,32142,32145],{"className":32143,"code":32144,"language":2186},[2184],"【Style】Specific style anchor (director name / film style / art movement)\n【Duration】Total length\n\n[00:00-00:04] Shot 1: Shot Name (Camera Type).\nScene description with physical details.\nCharacter action with specific body language.\nAudio cue.\n\n[00:04-00:07] Shot 2: Shot Name (Camera Type).\n...\n\n[00:07-00:10] Shot 3: Shot Name (Camera Type).\n...\n\nConsistency constraints. Physics requirements. Palette notes.\n",[28,32146,32144],{"__ignoreMap":141},[32148,32149,32151],"h4",{"id":32150},"基本公式-vs-ショットスクリプト比較","基本公式 vs. ショットスクリプト：比較",[11,32153,32154],{},"同じコンセプト — 火星の宇宙飛行士 — を両方の方法で書いて比較してみましょう：",[11,32156,32157],{},[23,32158,32159],{},"基本公式（初心者向け）：",[136,32161,32164],{"className":32162,"code":32163,"language":2186},[2184],"An astronaut in a white spacesuit stands at the edge of a Mars crater.\nRed dust blows across the visor. Camera slowly pushes in to reveal\nEarth reflected in the helmet. Sci-fi epic style, desaturated\nteal-orange palette. 10 seconds.\n",[28,32165,32163],{"__ignoreMap":141},[11,32167,32168],{},[23,32169,32170],{},"ショットスクリプト（トップクリエイター向け）：",[136,32172,32175],{"className":32173,"code":32174,"language":2186},[2184],"【Style】Denis Villeneuve Sci-Fi Epic, IMAX 70mm, desaturated teal-orange palette.\n【Duration】10 seconds\n\n[00:00-00:04] Shot 1: The Scale (Extreme Wide Shot).\nA lone astronaut in a white spacesuit stands at the edge of an enormous\ncrater on Mars. Red dust blows across the visor in gusts. The crater\nstretches to the horizon — the scale of nature dwarfs the human figure\ncompletely. Deep rumbling bass audio.\n\n[00:04-00:07] Shot 2: The Discovery (Push-in to Close-up).\nCamera slowly pushes from the wide shot into a tight close-up of the\nastronaut's helmet visor. In the curved reflection, we see Earth — tiny,\nblue, impossibly far away. The astronaut's breathing is audible.\nAnamorphic lens flare streaks across the frame.\n\n[00:07-00:10] Shot 3: The Decision (Low Angle, Static).\nFrom below, the astronaut steps forward off the crater edge — a leap of\nfaith into the unknown. Dust particles float in slow motion around the\nboots. Camera holds steady as the figure descends. Cut to black.\n\nConsistent spacesuit design. Realistic Mars dust physics. Epic\norchestral audio swell on final shot.\n",[28,32176,32174],{"__ignoreMap":141},[32148,32178,32179],{"id":32179},"ショットスクリプトがより良い結果を生む理由",[11,32181,32182],{},"ショットスクリプトが基本公式より優れている理由は3つあります：",[70,32184,32185,32195,32201],{},[73,32186,32187,32190,32191,32194],{},[23,32188,32189],{},"時間的な精度。"," タイムコードは各アクションが",[2619,32192,32193],{},"いつ","発生するかを Seedance に正確に伝えます。タイムコードがないと、モデルはアクションを尺全体に予測不可能な形で分散させます。",[73,32196,32197,32200],{},[23,32198,32199],{},"ナラティブアーク。"," ショットに名前を付けることで、セットアップ → 発見 → ペイオフというストーリーを構築できます。モデルは感情の流れを理解すると、より魅力的な動きを生成します。",[73,32202,32203,32206],{},[23,32204,32205],{},"物理的な具体性。"," 「ブーツの周りを砂塵がスローモーションで漂う」のような詳細は、曖昧な美的表現ではなく、物理エンジンに具体的な制約を与えます。",[11,32208,32209,32214],{},[37,32210,32213],{"href":32211,"rel":32212},"https://github.com/EvoLinkAI/awesome-seedance-2-guide",[41],"awesome-seedance"," コミュニティのトップクリエイターは、レーシングシーンからアートスタイル変換まで、ベスト作品にショットスクリプト形式を一貫して使用しています。パターンは明確です：構造化されたタイムコード + 具体的なスタイルアンカー = 映画的な出力。",[11,32216,32217,32218,32221],{},"これらのカメラテクニックを",[37,32219,32220],{"href":3855},"カメラムーブメント複製ガイド","でステップバイステップで解説しています。",[92,32223,32225],{"id":32224},"テキストのみ-vs-マルチモーダルプロンプト","テキストのみ vs. マルチモーダルプロンプト",[11,32227,32228,32231],{},[23,32229,32230],{},"テキストのみのプロンプト","はシーンの記述を完全に言語に頼ります：",[136,32233,32236],{"className":32234,"code":32235,"language":2186},[2184],"A red sports car drifts around a mountain curve, tires smoking,\ndrone shot tracking from above, cinematic color grading, 10 seconds\n",[28,32237,32235],{"__ignoreMap":141},[11,32239,32240,32243],{},[23,32241,32242],{},"マルチモーダルプロンプト","はテキストとアップロードした参照素材を組み合わせます：",[136,32245,32248],{"className":32246,"code":32247,"language":2186},[2184],"@Image1 as first frame, car drifts around the curve following\n@Video1 camera path, @Audio1 as engine sound, cinematic grading, 10 seconds\n",[28,32249,32247],{"__ignoreMap":141},[11,32251,32252],{},"マルチモーダル版は、モデルの「赤いスポーツカー」の解釈に頼る代わりに、Seedance 2.0 に正確なビジュアルアンカーを提供します。",[92,32254,32256],{"id":32255},"初めての-seedance-20-プロンプト-api-使用例","初めての Seedance 2.0 プロンプト — API 使用例",[11,32258,32259],{},"ショットスクリプト形式を使用した、完全なテキストからビデオへの生成呼び出しです：",[56,32261,60,32262],{"autoPlay":58,"loop":58,"muted":58,"playsInline":58,"style":59},[62,32263],{"src":32264,"type":65},"https://cdn.evolink.ai/seedance2api/%E8%B5%9B%E8%BD%A6%E7%94%B5%E5%BD%B1%E6%84%9F.mp4",[136,32266,32268],{"className":337,"code":32267,"language":339,"meta":141,"style":141},"import requests\nimport os\nimport time\n\nAPI_KEY = os.environ.get(\"SEEDANCE_API_KEY\")\nBASE_URL = \"https://api.evolink.ai/v1\"\n\n# Submit generation task\nresponse = requests.post(\n    f\"{BASE_URL}/videos/generations\",\n    headers={\"Authorization\": f\"Bearer {API_KEY}\"},\n    json={\n        \"model\": \"seedance-2.0\",\n        \"prompt\": (\n            \"【Style】Hollywood Professional Racing Movie, Cinematic Night, Rain.\\n\"\n            \"【Duration】10 seconds\\n\\n\"\n            \"[00:00-00:03] Shot 1: The Veteran (Interior/Close-up).\\n\"\n            \"Rain hammers the windshield of a high-tech race car on a night track. \"\n            \"Inside the cockpit, the veteran driver in a black helmet looks sideways \"\n            \"at his rival. Dashboard instruments glow green on his visor.\\n\"\n            \"Dialogue Cue: He gives a subtle nod and mouths 'Let's go.'\\n\\n\"\n            \"[00:03-00:06] Shot 2: The Challenger (Interior/Close-up).\\n\"\n            \"Cut to the rival car. A younger driver grips the steering wheel with \"\n            \"white knuckles. Raindrops streak across the side window. Eyes wide with \"\n            \"adrenaline through the visor slit.\\n\"\n            \"Dialogue Cue: He whispers 'Focus' to himself.\\n\\n\"\n            \"[00:06-00:10] Shot 3: The Green Light (Wide Action Shot).\\n\"\n            \"Starting lights turn GREEN. Both cars launch forward in sync on gleaming \"\n            \"wet asphalt. Massive water rooster tails spray behind them. Rain hits \"\n            \"the camera lens. Motion blur turns stadium lights into long golden streaks.\\n\\n\"\n            \"Consistent car designs. Realistic rain physics, water reflections. \"\n            \"Tension-building audio.\"\n        ),\n        \"duration\": 10,\n        \"quality\": \"1080p\"\n    }\n)\ntask = response.json()\ntask_id = task[\"id\"]\n\n# Poll for result\nwhile True:\n    status = requests.get(\n        f\"{BASE_URL}/tasks/{task_id}\",\n        headers={\"Authorization\": f\"Bearer {API_KEY}\"}\n    ).json()\n    if status[\"status\"] == \"completed\":\n        print(f\"Video ready: {status['results'][0]}\")\n        break\n    elif status[\"status\"] == \"failed\":\n        print(f\"Error: {status['error']}\")\n        break\n    time.sleep(5)\n",[28,32269,32270,32276,32282,32288,32292,32306,32314,32318,32323,32331,32343,32365,32373,32383,32389,32398,32407,32416,32421,32426,32435,32444,32453,32458,32463,32472,32481,32490,32495,32500,32509,32514,32519,32523,32533,32542,32546,32550,32558,32570,32574,32579,32587,32595,32615,32637,32642,32659,32688,32692,32708,32732,32736],{"__ignoreMap":141},[145,32271,32272,32274],{"class":147,"line":148},[145,32273,346],{"class":258},[145,32275,328],{"class":262},[145,32277,32278,32280],{"class":147,"line":166},[145,32279,346],{"class":258},[145,32281,362],{"class":262},[145,32283,32284,32286],{"class":147,"line":178},[145,32285,346],{"class":258},[145,32287,355],{"class":262},[145,32289,32290],{"class":147,"line":187},[145,32291,375],{"emptyLinePlaceholder":58},[145,32293,32294,32296,32298,32301,32304],{"class":147,"line":372},[145,32295,387],{"class":155},[145,32297,390],{"class":258},[145,32299,32300],{"class":262}," os.environ.get(",[145,32302,32303],{"class":159},"\"SEEDANCE_API_KEY\"",[145,32305,405],{"class":262},[145,32307,32308,32310,32312],{"class":147,"line":378},[145,32309,411],{"class":155},[145,32311,390],{"class":258},[145,32313,416],{"class":159},[145,32315,32316],{"class":147,"line":384},[145,32317,375],{"emptyLinePlaceholder":58},[145,32319,32320],{"class":147,"line":408},[145,32321,32322],{"class":174},"# Submit generation task\n",[145,32324,32325,32327,32329],{"class":147,"line":419},[145,32326,6387],{"class":262},[145,32328,266],{"class":258},[145,32330,1433],{"class":262},[145,32332,32333,32335,32337,32339,32341],{"class":147,"line":430},[145,32334,6396],{"class":258},[145,32336,448],{"class":159},[145,32338,678],{"class":155},[145,32340,1445],{"class":159},[145,32342,451],{"class":262},[145,32344,32345,32347,32349,32351,32353,32355,32357,32359,32361,32363],{"class":147,"line":454},[145,32346,6409],{"class":700},[145,32348,266],{"class":258},[145,32350,684],{"class":262},[145,32352,31308],{"class":159},[145,32354,436],{"class":262},[145,32356,439],{"class":258},[145,32358,442],{"class":159},[145,32360,445],{"class":155},[145,32362,448],{"class":159},[145,32364,19396],{"class":262},[145,32366,32367,32369,32371],{"class":147,"line":465},[145,32368,6420],{"class":700},[145,32370,266],{"class":258},[145,32372,1866],{"class":262},[145,32374,32375,32377,32379,32381],{"class":147,"line":599},[145,32376,1304],{"class":159},[145,32378,436],{"class":262},[145,32380,1309],{"class":159},[145,32382,451],{"class":262},[145,32384,32385,32387],{"class":147,"line":604},[145,32386,1320],{"class":159},[145,32388,1323],{"class":262},[145,32390,32391,32394,32396],{"class":147,"line":610},[145,32392,32393],{"class":159},"            \"【Style】Hollywood Professional Racing Movie, Cinematic Night, Rain.",[145,32395,1671],{"class":155},[145,32397,950],{"class":159},[145,32399,32400,32403,32405],{"class":147,"line":616},[145,32401,32402],{"class":159},"            \"【Duration】10 seconds",[145,32404,11966],{"class":155},[145,32406,950],{"class":159},[145,32408,32409,32412,32414],{"class":147,"line":622},[145,32410,32411],{"class":159},"            \"[00:00-00:03] Shot 1: The Veteran (Interior/Close-up).",[145,32413,1671],{"class":155},[145,32415,950],{"class":159},[145,32417,32418],{"class":147,"line":627},[145,32419,32420],{"class":159},"            \"Rain hammers the windshield of a high-tech race car on a night track. \"\n",[145,32422,32423],{"class":147,"line":638},[145,32424,32425],{"class":159},"            \"Inside the cockpit, the veteran driver in a black helmet looks sideways \"\n",[145,32427,32428,32431,32433],{"class":147,"line":653},[145,32429,32430],{"class":159},"            \"at his rival. Dashboard instruments glow green on his visor.",[145,32432,1671],{"class":155},[145,32434,950],{"class":159},[145,32436,32437,32440,32442],{"class":147,"line":659},[145,32438,32439],{"class":159},"            \"Dialogue Cue: He gives a subtle nod and mouths 'Let's go.'",[145,32441,11966],{"class":155},[145,32443,950],{"class":159},[145,32445,32446,32449,32451],{"class":147,"line":670},[145,32447,32448],{"class":159},"            \"[00:03-00:06] Shot 2: The Challenger (Interior/Close-up).",[145,32450,1671],{"class":155},[145,32452,950],{"class":159},[145,32454,32455],{"class":147,"line":697},[145,32456,32457],{"class":159},"            \"Cut to the rival car. A younger driver grips the steering wheel with \"\n",[145,32459,32460],{"class":147,"line":709},[145,32461,32462],{"class":159},"            \"white knuckles. Raindrops streak across the side window. Eyes wide with \"\n",[145,32464,32465,32468,32470],{"class":147,"line":715},[145,32466,32467],{"class":159},"            \"adrenaline through the visor slit.",[145,32469,1671],{"class":155},[145,32471,950],{"class":159},[145,32473,32474,32477,32479],{"class":147,"line":721},[145,32475,32476],{"class":159},"            \"Dialogue Cue: He whispers 'Focus' to himself.",[145,32478,11966],{"class":155},[145,32480,950],{"class":159},[145,32482,32483,32486,32488],{"class":147,"line":727},[145,32484,32485],{"class":159},"            \"[00:06-00:10] Shot 3: The Green Light (Wide Action Shot).",[145,32487,1671],{"class":155},[145,32489,950],{"class":159},[145,32491,32492],{"class":147,"line":738},[145,32493,32494],{"class":159},"            \"Starting lights turn GREEN. Both cars launch forward in sync on gleaming \"\n",[145,32496,32497],{"class":147,"line":743},[145,32498,32499],{"class":159},"            \"wet asphalt. Massive water rooster tails spray behind them. Rain hits \"\n",[145,32501,32502,32505,32507],{"class":147,"line":749},[145,32503,32504],{"class":159},"            \"the camera lens. Motion blur turns stadium lights into long golden streaks.",[145,32506,11966],{"class":155},[145,32508,950],{"class":159},[145,32510,32511],{"class":147,"line":766},[145,32512,32513],{"class":159},"            \"Consistent car designs. Realistic rain physics, water reflections. \"\n",[145,32515,32516],{"class":147,"line":787},[145,32517,32518],{"class":159},"            \"Tension-building audio.\"\n",[145,32520,32521],{"class":147,"line":833},[145,32522,1343],{"class":262},[145,32524,32525,32527,32529,32531],{"class":147,"line":838},[145,32526,1348],{"class":159},[145,32528,436],{"class":262},[145,32530,536],{"class":155},[145,32532,451],{"class":262},[145,32534,32535,32537,32539],{"class":147,"line":844},[145,32536,1364],{"class":159},[145,32538,436],{"class":262},[145,32540,32541],{"class":159},"\"1080p\"\n",[145,32543,32544],{"class":147,"line":862},[145,32545,1408],{"class":262},[145,32547,32548],{"class":147,"line":871},[145,32549,405],{"class":262},[145,32551,32552,32554,32556],{"class":147,"line":886},[145,32553,6433],{"class":262},[145,32555,266],{"class":258},[145,32557,735],{"class":262},[145,32559,32560,32562,32564,32566,32568],{"class":147,"line":902},[145,32561,12044],{"class":262},[145,32563,266],{"class":258},[145,32565,757],{"class":262},[145,32567,1627],{"class":159},[145,32569,763],{"class":262},[145,32571,32572],{"class":147,"line":914},[145,32573,375],{"emptyLinePlaceholder":58},[145,32575,32576],{"class":147,"line":953},[145,32577,32578],{"class":174},"# Poll for result\n",[145,32580,32581,32583,32585],{"class":147,"line":959},[145,32582,31500],{"class":258},[145,32584,14679],{"class":155},[145,32586,859],{"class":262},[145,32588,32589,32591,32593],{"class":147,"line":964},[145,32590,7094],{"class":262},[145,32592,266],{"class":258},[145,32594,667],{"class":262},[145,32596,32597,32599,32601,32603,32605,32607,32609,32611,32613],{"class":147,"line":970},[145,32598,1438],{"class":258},[145,32600,448],{"class":159},[145,32602,678],{"class":155},[145,32604,681],{"class":159},[145,32606,684],{"class":155},[145,32608,687],{"class":262},[145,32610,690],{"class":155},[145,32612,448],{"class":159},[145,32614,451],{"class":262},[145,32616,32617,32619,32621,32623,32625,32627,32629,32631,32633,32635],{"class":147,"line":976},[145,32618,1456],{"class":700},[145,32620,266],{"class":258},[145,32622,684],{"class":262},[145,32624,31308],{"class":159},[145,32626,436],{"class":262},[145,32628,439],{"class":258},[145,32630,442],{"class":159},[145,32632,445],{"class":155},[145,32634,448],{"class":159},[145,32636,468],{"class":262},[145,32638,32639],{"class":147,"line":988},[145,32640,32641],{"class":262},"    ).json()\n",[145,32643,32644,32646,32649,32651,32653,32655,32657],{"class":147,"line":993},[145,32645,2505],{"class":258},[145,32647,32648],{"class":262}," status[",[145,32650,760],{"class":159},[145,32652,14751],{"class":262},[145,32654,853],{"class":258},[145,32656,856],{"class":159},[145,32658,859],{"class":262},[145,32660,32661,32663,32665,32667,32669,32671,32674,32676,32678,32680,32682,32684,32686],{"class":147,"line":5402},[145,32662,790],{"class":155},[145,32664,793],{"class":262},[145,32666,439],{"class":258},[145,32668,11655],{"class":159},[145,32670,684],{"class":155},[145,32672,32673],{"class":262},"status[",[145,32675,11663],{"class":159},[145,32677,1563],{"class":262},[145,32679,782],{"class":155},[145,32681,1536],{"class":262},[145,32683,690],{"class":155},[145,32685,448],{"class":159},[145,32687,405],{"class":262},[145,32689,32690],{"class":147,"line":5411},[145,32691,31611],{"class":258},[145,32693,32694,32696,32698,32700,32702,32704,32706],{"class":147,"line":5439},[145,32695,7382],{"class":258},[145,32697,32648],{"class":262},[145,32699,760],{"class":159},[145,32701,14751],{"class":262},[145,32703,853],{"class":258},[145,32705,881],{"class":159},[145,32707,859],{"class":262},[145,32709,32710,32712,32714,32716,32718,32720,32722,32724,32726,32728,32730],{"class":147,"line":5470},[145,32711,790],{"class":155},[145,32713,793],{"class":262},[145,32715,439],{"class":258},[145,32717,31638],{"class":159},[145,32719,684],{"class":155},[145,32721,32673],{"class":262},[145,32723,11712],{"class":159},[145,32725,1536],{"class":262},[145,32727,690],{"class":155},[145,32729,448],{"class":159},[145,32731,405],{"class":262},[145,32733,32734],{"class":147,"line":5490},[145,32735,31611],{"class":258},[145,32737,32738,32740,32742],{"class":147,"line":5496},[145,32739,19708],{"class":262},[145,32741,1353],{"class":155},[145,32743,405],{"class":262},[11,32745,32746],{},"これにより、ネイティブ音声出力付きの10秒、1080p動画が生成されます。ショットスクリプトは Seedance に明確なタイムコード、カメラ指示、物理的な詳細を与え、1つのテキストプロンプトから映画的な三幕構成のレーシングシーケンスを実現します。",[11,32748,32749,32750,32753],{},"API が初めてですか？セットアップと認証については",[37,32751,32752],{"href":17367},"はじめにガイド","から始めてください。",[18,32755,32756],{},[11,32757,32758,32760,32761,2916,32763,2916,32765,32767],{},[23,32759,30336],{}," 以降のすべてのコード例は同じセットアップを使用します。上記の例から ",[28,32762,346],{},[28,32764,387],{},[28,32766,411],{},"、ポーリングロジックをコピーしてください。ユニークなプロンプトとパラメータを含む API 呼び出し部分のみを示します。",[45,32769],{},[48,32771,32773],{"id":32772},"tag-参照システムの解説","@Tag 参照システムの解説",[11,32775,32776,32778],{},[28,32777,31971],{}," システムこそが Seedance 2.0 プロンプトを真のマルチモーダルにする仕組みです。ファイルをアップロードすると、各ファイルにはタイプとアップロード順に基づいた自動タグが割り当てられます。",[92,32780,32781],{"id":32781},"構文ルール",[96,32783,32784,32797,32810,32824],{},[73,32785,32786,2427,32789,399,32791,32793,32794,32796],{},[23,32787,32788],{},"画像：",[28,32790,2909],{},[28,32792,2919],{},", ... ",[28,32795,2956],{},"（最大9枚）",[73,32798,32799,2427,32802,399,32804,399,32806,32809],{},[23,32800,32801],{},"動画：",[28,32803,11273],{},[28,32805,13153],{},[28,32807,32808],{},"@Video3","（最大3クリップ）",[73,32811,32812,2427,32815,399,32817,399,32820,32823],{},[23,32813,32814],{},"音声：",[28,32816,16354],{},[28,32818,32819],{},"@Audio2",[28,32821,32822],{},"@Audio3","（最大3ファイル）",[73,32825,32826,32829],{},[23,32827,32828],{},"合計ファイル上限："," リクエストあたり12ファイル",[11,32831,32832,32833,32836],{},"タグは各タイプ内でアップロード順に割り当てられます。プロンプトテキストで、各参照を Seedance が",[2619,32834,32835],{},"どのように","使用するかを指示します。",[11,32838,32839,32840,1261],{},"すべての @tag パターンと 8 以上の実例を詳しく知るには、",[37,32841,32842],{"href":2967},"完全な @Tags ガイド",[92,32844,32845],{"id":32845},"画像参照の5つの使い方",[2037,32847,32848,32861],{},[2040,32849,32850],{},[2043,32851,32852,32855,32858],{},[2046,32853,32854],{},"用途",[2046,32856,32857],{},"プロンプト構文",[2046,32859,32860],{},"動作",[2053,32862,32863,32876,32889,32903,32918],{},[2043,32864,32865,32869,32873],{},[2058,32866,32867],{},[23,32868,30505],{},[2058,32870,32871],{},[28,32872,2995],{},[2058,32874,32875],{},"この画像から動画が開始される",[2043,32877,32878,32882,32886],{},[2058,32879,32880],{},[23,32881,30519],{},[2058,32883,32884],{},[28,32885,3008],{},[2058,32887,32888],{},"この画像で動画が終了する",[2043,32890,32891,32896,32900],{},[2058,32892,32893],{},[23,32894,32895],{},"キャラクターの外見",[2058,32897,32898],{},[28,32899,3021],{},[2058,32901,32902],{},"キャラクターの外見を全体を通して維持",[2043,32904,32905,32910,32915],{},[2058,32906,32907],{},[23,32908,32909],{},"シーン環境",[2058,32911,32912],{},[28,32913,32914],{},"@Image1 as background environment",[2058,32916,32917],{},"画像をシーン設定として使用",[2043,32919,32920,32925,32929],{},[2058,32921,32922],{},[23,32923,32924],{},"スタイル / 美学",[2058,32926,32927],{},[28,32928,3034],{},[2058,32930,32931],{},"カラーパレット、テクスチャ、ムードを合わせる",[92,32933,32934],{"id":32934},"動画参照の4つの使い方",[2037,32936,32937,32947],{},[2040,32938,32939],{},[2043,32940,32941,32943,32945],{},[2046,32942,32854],{},[2046,32944,32857],{},[2046,32946,32860],{},[2053,32948,32949,32964,32979,32994],{},[2043,32950,32951,32956,32961],{},[2058,32952,32953],{},[23,32954,32955],{},"カメラ複製",[2058,32957,32958],{},[28,32959,32960],{},"follow @Video1 camera movement",[2058,32962,32963],{},"パン、チルト、ズームのパターンをコピー",[2043,32965,32966,32971,32976],{},[2058,32967,32968],{},[23,32969,32970],{},"モーション模倣",[2058,32972,32973],{},[28,32974,32975],{},"character moves like @Video1",[2058,32977,32978],{},"身体の動き・振付を転写",[2043,32980,32981,32986,32991],{},[2058,32982,32983],{},[23,32984,32985],{},"エフェクト複製",[2058,32987,32988],{},[28,32989,32990],{},"apply @Video1 transition effects",[2058,32992,32993],{},"ビジュアルエフェクトとトランジションを合わせる",[2043,32995,32996,33001,33006],{},[2058,32997,32998],{},[23,32999,33000],{},"リズム参照",[2058,33002,33003],{},[28,33004,33005],{},"match @Video1 pacing and cuts",[2058,33007,33008],{},"タイミングとシーンのリズムを同期",[92,33010,33011],{"id":33011},"音声参照の3つの使い方",[2037,33013,33014,33024],{},[2040,33015,33016],{},[2043,33017,33018,33020,33022],{},[2046,33019,32854],{},[2046,33021,32857],{},[2046,33023,32860],{},[2053,33025,33026,33040,33054],{},[2043,33027,33028,33032,33037],{},[2058,33029,33030],{},[23,33031,30907],{},[2058,33033,33034],{},[28,33035,33036],{},"@Audio1 as background soundtrack",[2058,33038,33039],{},"アップロードした音楽でムードを設定",[2043,33041,33042,33046,33051],{},[2058,33043,33044],{},[23,33045,30922],{},[2058,33047,33048],{},[28,33049,33050],{},"@Audio1 as ambient sound",[2058,33052,33053],{},"特定の効果音を追加",[2043,33055,33056,33061,33066],{},[2058,33057,33058],{},[23,33059,33060],{},"ボイススタイル",[2058,33062,33063],{},[28,33064,33065],{},"@Audio1 as voice style reference",[2058,33067,33068],{},"声のトーンとリズムを合わせる",[92,33070,33071],{"id":33071},"最適なファイル配分戦略",[11,33073,33074],{},"12ファイルの上限内で、ユースケース別の参照ファイル配分は以下の通りです：",[2037,33076,33077,33091],{},[2040,33078,33079],{},[2043,33080,33081,33083,33085,33087,33089],{},[2046,33082,13999],{},[2046,33084,30383],{},[2046,33086,30400],{},[2046,33088,30416],{},[2046,33090,30434],{},[2053,33092,33093,33109,33124,33141,33156],{},[2043,33094,33095,33098,33101,33104,33106],{},[2058,33096,33097],{},"商品CM",[2058,33099,33100],{},"4（商品アングル）",[2058,33102,33103],{},"1（カメラ参照）",[2058,33105,13008],{},[2058,33107,33108],{},"6",[2043,33110,33111,33114,33117,33120,33122],{},[2058,33112,33113],{},"キャラクターアニメ",[2058,33115,33116],{},"3（キャラクター + シーン）",[2058,33118,33119],{},"2（モーション参照）",[2058,33121,13008],{},[2058,33123,33108],{},[2043,33125,33126,33129,33132,33135,33138],{},[2058,33127,33128],{},"ミュージックビデオ",[2058,33130,33131],{},"2（スタイル + キャラクター）",[2058,33133,33134],{},"2（ダンス参照）",[2058,33136,33137],{},"3（楽曲）",[2058,33139,33140],{},"7",[2043,33142,33143,33146,33149,33152,33154],{},[2058,33144,33145],{},"マルチショット物語",[2058,33147,33148],{},"6（シーンキーフレーム）",[2058,33150,33151],{},"1（スタイル参照）",[2058,33153,13008],{},[2058,33155,3697],{},[2043,33157,33158,33161,33164,33166,33169],{},[2058,33159,33160],{},"最高品質シングルショット",[2058,33162,33163],{},"9（全アングル）",[2058,33165,782],{},[2058,33167,33168],{},"3（オーディオレイヤー）",[2058,33170,16229],{},[18,33172,33173],{},[11,33174,33175,33177],{},[23,33176,133],{}," 12スロットすべてを使う必要はほとんどありません。少数の高品質な参照の方が、大量の低品質な参照よりも良い結果を出すことが多いです。",[45,33179],{},[48,33181,33183],{"id":33182},"_15以上のすぐに使える-seedance-プロンプトテンプレート","15以上のすぐに使える Seedance プロンプトテンプレート",[92,33185,33186],{"id":33186},"テキストから動画のプロンプトテンプレート",[32148,33188,33190],{"id":33189},"t1-マルチキャラクター対話ショートフィルム","T1: マルチキャラクター対話ショートフィルム",[11,33192,33193,33196],{},[23,33194,33195],{},"説明："," 2つのアニメキャラクターがそれぞれ異なるボイスパーソナリティでダイナミックな会話を繰り広げ、声優機能を披露します — ショットスクリプト形式で構成。",[56,33198,60,33199],{"autoPlay":58,"loop":58,"muted":58,"playsInline":58,"style":59},[62,33200],{"src":31010,"type":65},[136,33202,33204],{"className":337,"code":33203,"language":339,"meta":141,"style":141},"# T1: マルチキャラクター対話 — 上記の最初の例のセットアップを使用\nresponse = requests.post(\n    f\"{BASE_URL}/videos/generations\",\n    headers={\"Authorization\": f\"Bearer {API_KEY}\"},\n    json={\n        \"model\": \"seedance-2.0\",\n        \"prompt\": (\n            \"【Style】Pixar-quality 3D animation, warm color palette, expressive character acting.\\n\"\n            \"【Duration】12 seconds\\n\\n\"\n            \"[00:00-00:04] Shot 1: The Philosopher (Medium Close-up).\\n\"\n            \"A wise old cat in round spectacles sits at a cozy cafe table, paws wrapped \"\n            \"around a tiny porcelain cup. Steam curls upward. The cat speaks in a calm, \"\n            \"measured tone: 'Experience teaches patience, young friend.' Warm afternoon \"\n            \"light through the cafe window. Subtle ear twitch.\\n\\n\"\n            \"[00:04-00:08] Shot 2: The Adventurer (Medium Close-up, Reverse Shot).\\n\"\n            \"Cut to the opposite side of the table. An energetic young golden retriever \"\n            \"bounces in his seat, tail wagging visibly behind the chair. He leans forward \"\n            \"with wide eyes and responds: 'But adventure awaits right now!' His paws \"\n            \"gesture wildly, nearly knocking over a pastry plate.\\n\\n\"\n            \"[00:08-00:12] Shot 3: The Punchline (Wide Two-Shot).\\n\"\n            \"Camera pulls back to show both at the table. The cat calmly catches the \"\n            \"falling pastry with one paw without looking — places it back. The dog's jaw \"\n            \"drops in amazement. Beat of silence. Both burst into laughter.\\n\\n\"\n            \"Consistent character designs throughout. Distinct vocal timbres per character. \"\n            \"Warm cafe lighting with bokeh background.\"\n        ),\n        \"duration\": 12,\n        \"quality\": \"1080p\"\n    }\n)\n# 上記の最初の例と同じポーリングループを使用\n",[28,33205,33206,33211,33219,33231,33253,33261,33271,33277,33286,33295,33304,33309,33314,33319,33328,33337,33342,33347,33352,33361,33370,33375,33380,33389,33394,33399,33403,33413,33421,33425,33429],{"__ignoreMap":141},[145,33207,33208],{"class":147,"line":148},[145,33209,33210],{"class":174},"# T1: マルチキャラクター対話 — 上記の最初の例のセットアップを使用\n",[145,33212,33213,33215,33217],{"class":147,"line":166},[145,33214,6387],{"class":262},[145,33216,266],{"class":258},[145,33218,1433],{"class":262},[145,33220,33221,33223,33225,33227,33229],{"class":147,"line":178},[145,33222,6396],{"class":258},[145,33224,448],{"class":159},[145,33226,678],{"class":155},[145,33228,1445],{"class":159},[145,33230,451],{"class":262},[145,33232,33233,33235,33237,33239,33241,33243,33245,33247,33249,33251],{"class":147,"line":187},[145,33234,6409],{"class":700},[145,33236,266],{"class":258},[145,33238,684],{"class":262},[145,33240,31308],{"class":159},[145,33242,436],{"class":262},[145,33244,439],{"class":258},[145,33246,442],{"class":159},[145,33248,445],{"class":155},[145,33250,448],{"class":159},[145,33252,19396],{"class":262},[145,33254,33255,33257,33259],{"class":147,"line":372},[145,33256,6420],{"class":700},[145,33258,266],{"class":258},[145,33260,1866],{"class":262},[145,33262,33263,33265,33267,33269],{"class":147,"line":378},[145,33264,1304],{"class":159},[145,33266,436],{"class":262},[145,33268,1309],{"class":159},[145,33270,451],{"class":262},[145,33272,33273,33275],{"class":147,"line":384},[145,33274,1320],{"class":159},[145,33276,1323],{"class":262},[145,33278,33279,33282,33284],{"class":147,"line":408},[145,33280,33281],{"class":159},"            \"【Style】Pixar-quality 3D animation, warm color palette, expressive character acting.",[145,33283,1671],{"class":155},[145,33285,950],{"class":159},[145,33287,33288,33291,33293],{"class":147,"line":419},[145,33289,33290],{"class":159},"            \"【Duration】12 seconds",[145,33292,11966],{"class":155},[145,33294,950],{"class":159},[145,33296,33297,33300,33302],{"class":147,"line":430},[145,33298,33299],{"class":159},"            \"[00:00-00:04] Shot 1: The Philosopher (Medium Close-up).",[145,33301,1671],{"class":155},[145,33303,950],{"class":159},[145,33305,33306],{"class":147,"line":454},[145,33307,33308],{"class":159},"            \"A wise old cat in round spectacles sits at a cozy cafe table, paws wrapped \"\n",[145,33310,33311],{"class":147,"line":465},[145,33312,33313],{"class":159},"            \"around a tiny porcelain cup. Steam curls upward. The cat speaks in a calm, \"\n",[145,33315,33316],{"class":147,"line":599},[145,33317,33318],{"class":159},"            \"measured tone: 'Experience teaches patience, young friend.' Warm afternoon \"\n",[145,33320,33321,33324,33326],{"class":147,"line":604},[145,33322,33323],{"class":159},"            \"light through the cafe window. Subtle ear twitch.",[145,33325,11966],{"class":155},[145,33327,950],{"class":159},[145,33329,33330,33333,33335],{"class":147,"line":610},[145,33331,33332],{"class":159},"            \"[00:04-00:08] Shot 2: The Adventurer (Medium Close-up, Reverse Shot).",[145,33334,1671],{"class":155},[145,33336,950],{"class":159},[145,33338,33339],{"class":147,"line":616},[145,33340,33341],{"class":159},"            \"Cut to the opposite side of the table. An energetic young golden retriever \"\n",[145,33343,33344],{"class":147,"line":622},[145,33345,33346],{"class":159},"            \"bounces in his seat, tail wagging visibly behind the chair. He leans forward \"\n",[145,33348,33349],{"class":147,"line":627},[145,33350,33351],{"class":159},"            \"with wide eyes and responds: 'But adventure awaits right now!' His paws \"\n",[145,33353,33354,33357,33359],{"class":147,"line":638},[145,33355,33356],{"class":159},"            \"gesture wildly, nearly knocking over a pastry plate.",[145,33358,11966],{"class":155},[145,33360,950],{"class":159},[145,33362,33363,33366,33368],{"class":147,"line":653},[145,33364,33365],{"class":159},"            \"[00:08-00:12] Shot 3: The Punchline (Wide Two-Shot).",[145,33367,1671],{"class":155},[145,33369,950],{"class":159},[145,33371,33372],{"class":147,"line":659},[145,33373,33374],{"class":159},"            \"Camera pulls back to show both at the table. The cat calmly catches the \"\n",[145,33376,33377],{"class":147,"line":670},[145,33378,33379],{"class":159},"            \"falling pastry with one paw without looking — places it back. The dog's jaw \"\n",[145,33381,33382,33385,33387],{"class":147,"line":697},[145,33383,33384],{"class":159},"            \"drops in amazement. Beat of silence. Both burst into laughter.",[145,33386,11966],{"class":155},[145,33388,950],{"class":159},[145,33390,33391],{"class":147,"line":709},[145,33392,33393],{"class":159},"            \"Consistent character designs throughout. Distinct vocal timbres per character. \"\n",[145,33395,33396],{"class":147,"line":715},[145,33397,33398],{"class":159},"            \"Warm cafe lighting with bokeh background.\"\n",[145,33400,33401],{"class":147,"line":721},[145,33402,1343],{"class":262},[145,33404,33405,33407,33409,33411],{"class":147,"line":727},[145,33406,1348],{"class":159},[145,33408,436],{"class":262},[145,33410,16229],{"class":155},[145,33412,451],{"class":262},[145,33414,33415,33417,33419],{"class":147,"line":738},[145,33416,1364],{"class":159},[145,33418,436],{"class":262},[145,33420,32541],{"class":159},[145,33422,33423],{"class":147,"line":743},[145,33424,1408],{"class":262},[145,33426,33427],{"class":147,"line":749},[145,33428,405],{"class":262},[145,33430,33431],{"class":147,"line":766},[145,33432,33433],{"class":174},"# 上記の最初の例と同じポーリングループを使用\n",[32148,33435,33437],{"id":33436},"t2-スタイル変換-動くゴッホの絵画","T2: スタイル変換 — 動くゴッホの絵画",[11,33439,33440,33442],{},[23,33441,33195],{}," クラシックな後期印象派のシーンを呼吸し動く世界へ変換します — プロンプトエンジニアリングによる精密なアートスタイル制御を実演。",[56,33444,60,33445],{"autoPlay":58,"loop":58,"muted":58,"playsInline":58,"style":59},[62,33446],{"src":24208,"type":65},[136,33448,33450],{"className":337,"code":33449,"language":339,"meta":141,"style":141},"# T2: スタイル変換 — 上記の最初の例のセットアップを使用\nresponse = requests.post(\n    f\"{BASE_URL}/videos/generations\",\n    headers={\"Authorization\": f\"Bearer {API_KEY}\"},\n    json={\n        \"model\": \"seedance-2.0\",\n        \"prompt\": (\n            \"【Style】Van Gogh Post-Impressionism, thick impasto oil paint texture, \"\n            \"swirling brushstrokes, dreamy high-saturation.\\n\"\n            \"【Duration】10 seconds\\n\\n\"\n            \"[00:00-00:04] Shot 1: The Living Sky (Wide Shot, Slow Pan Up).\\n\"\n            \"A young woman in a flowing blue dress stands in a sunlit village square. \"\n            \"Behind her, cobblestone streets and rustic cottages are painted with thick, \"\n            \"visible brushstrokes. The entire sky swirls with golden celestial bodies \"\n            \"and flowing paint. Everything moves — the sky itself breathes.\\n\\n\"\n            \"[00:04-00:07] Shot 2: The Portrait Focus (Medium Shot, Slow Pan Down).\\n\"\n            \"Camera pushes in closer to the woman's face. Her features are rendered \"\n            \"in Van Gogh's distinctive style — bold brushstrokes define her cheekbones \"\n            \"and flowing hair. The village behind her shifts with painted texture, \"\n            \"windows glowing with warm yellow-orange light.\\n\\n\"\n            \"[00:07-00:10] Shot 3: The Immersion (Tracking Shot, Moving Into the Painting).\\n\"\n            \"Camera slowly pushes forward deeper into the painted world. We move past \"\n            \"the woman, through the village streets. Paint texture becomes visible at \"\n            \"close range. The entire world is alive with flowing brushstrokes.\\n\\n\"\n            \"Pure Van Gogh aesthetic throughout. No photorealism. Every surface is visible \"\n            \"oil paint. Blue-yellow-orange palette dominant.\"\n        ),\n        \"duration\": 10,\n        \"quality\": \"1080p\"\n    }\n)\n# 上記の最初の例と同じポーリングループを使用\n",[28,33451,33452,33457,33465,33477,33499,33507,33517,33523,33528,33537,33545,33554,33559,33564,33569,33578,33587,33592,33597,33602,33611,33620,33625,33630,33639,33644,33649,33653,33663,33671,33675,33679],{"__ignoreMap":141},[145,33453,33454],{"class":147,"line":148},[145,33455,33456],{"class":174},"# T2: スタイル変換 — 上記の最初の例のセットアップを使用\n",[145,33458,33459,33461,33463],{"class":147,"line":166},[145,33460,6387],{"class":262},[145,33462,266],{"class":258},[145,33464,1433],{"class":262},[145,33466,33467,33469,33471,33473,33475],{"class":147,"line":178},[145,33468,6396],{"class":258},[145,33470,448],{"class":159},[145,33472,678],{"class":155},[145,33474,1445],{"class":159},[145,33476,451],{"class":262},[145,33478,33479,33481,33483,33485,33487,33489,33491,33493,33495,33497],{"class":147,"line":187},[145,33480,6409],{"class":700},[145,33482,266],{"class":258},[145,33484,684],{"class":262},[145,33486,31308],{"class":159},[145,33488,436],{"class":262},[145,33490,439],{"class":258},[145,33492,442],{"class":159},[145,33494,445],{"class":155},[145,33496,448],{"class":159},[145,33498,19396],{"class":262},[145,33500,33501,33503,33505],{"class":147,"line":372},[145,33502,6420],{"class":700},[145,33504,266],{"class":258},[145,33506,1866],{"class":262},[145,33508,33509,33511,33513,33515],{"class":147,"line":378},[145,33510,1304],{"class":159},[145,33512,436],{"class":262},[145,33514,1309],{"class":159},[145,33516,451],{"class":262},[145,33518,33519,33521],{"class":147,"line":384},[145,33520,1320],{"class":159},[145,33522,1323],{"class":262},[145,33524,33525],{"class":147,"line":408},[145,33526,33527],{"class":159},"            \"【Style】Van Gogh Post-Impressionism, thick impasto oil paint texture, \"\n",[145,33529,33530,33533,33535],{"class":147,"line":419},[145,33531,33532],{"class":159},"            \"swirling brushstrokes, dreamy high-saturation.",[145,33534,1671],{"class":155},[145,33536,950],{"class":159},[145,33538,33539,33541,33543],{"class":147,"line":430},[145,33540,32402],{"class":159},[145,33542,11966],{"class":155},[145,33544,950],{"class":159},[145,33546,33547,33550,33552],{"class":147,"line":454},[145,33548,33549],{"class":159},"            \"[00:00-00:04] Shot 1: The Living Sky (Wide Shot, Slow Pan Up).",[145,33551,1671],{"class":155},[145,33553,950],{"class":159},[145,33555,33556],{"class":147,"line":465},[145,33557,33558],{"class":159},"            \"A young woman in a flowing blue dress stands in a sunlit village square. \"\n",[145,33560,33561],{"class":147,"line":599},[145,33562,33563],{"class":159},"            \"Behind her, cobblestone streets and rustic cottages are painted with thick, \"\n",[145,33565,33566],{"class":147,"line":604},[145,33567,33568],{"class":159},"            \"visible brushstrokes. The entire sky swirls with golden celestial bodies \"\n",[145,33570,33571,33574,33576],{"class":147,"line":610},[145,33572,33573],{"class":159},"            \"and flowing paint. Everything moves — the sky itself breathes.",[145,33575,11966],{"class":155},[145,33577,950],{"class":159},[145,33579,33580,33583,33585],{"class":147,"line":616},[145,33581,33582],{"class":159},"            \"[00:04-00:07] Shot 2: The Portrait Focus (Medium Shot, Slow Pan Down).",[145,33584,1671],{"class":155},[145,33586,950],{"class":159},[145,33588,33589],{"class":147,"line":622},[145,33590,33591],{"class":159},"            \"Camera pushes in closer to the woman's face. Her features are rendered \"\n",[145,33593,33594],{"class":147,"line":627},[145,33595,33596],{"class":159},"            \"in Van Gogh's distinctive style — bold brushstrokes define her cheekbones \"\n",[145,33598,33599],{"class":147,"line":638},[145,33600,33601],{"class":159},"            \"and flowing hair. The village behind her shifts with painted texture, \"\n",[145,33603,33604,33607,33609],{"class":147,"line":653},[145,33605,33606],{"class":159},"            \"windows glowing with warm yellow-orange light.",[145,33608,11966],{"class":155},[145,33610,950],{"class":159},[145,33612,33613,33616,33618],{"class":147,"line":659},[145,33614,33615],{"class":159},"            \"[00:07-00:10] Shot 3: The Immersion (Tracking Shot, Moving Into the Painting).",[145,33617,1671],{"class":155},[145,33619,950],{"class":159},[145,33621,33622],{"class":147,"line":670},[145,33623,33624],{"class":159},"            \"Camera slowly pushes forward deeper into the painted world. We move past \"\n",[145,33626,33627],{"class":147,"line":697},[145,33628,33629],{"class":159},"            \"the woman, through the village streets. Paint texture becomes visible at \"\n",[145,33631,33632,33635,33637],{"class":147,"line":709},[145,33633,33634],{"class":159},"            \"close range. The entire world is alive with flowing brushstrokes.",[145,33636,11966],{"class":155},[145,33638,950],{"class":159},[145,33640,33641],{"class":147,"line":715},[145,33642,33643],{"class":159},"            \"Pure Van Gogh aesthetic throughout. No photorealism. Every surface is visible \"\n",[145,33645,33646],{"class":147,"line":721},[145,33647,33648],{"class":159},"            \"oil paint. Blue-yellow-orange palette dominant.\"\n",[145,33650,33651],{"class":147,"line":727},[145,33652,1343],{"class":262},[145,33654,33655,33657,33659,33661],{"class":147,"line":738},[145,33656,1348],{"class":159},[145,33658,436],{"class":262},[145,33660,536],{"class":155},[145,33662,451],{"class":262},[145,33664,33665,33667,33669],{"class":147,"line":743},[145,33666,1364],{"class":159},[145,33668,436],{"class":262},[145,33670,32541],{"class":159},[145,33672,33673],{"class":147,"line":749},[145,33674,1408],{"class":262},[145,33676,33677],{"class":147,"line":766},[145,33678,405],{"class":262},[145,33680,33681],{"class":147,"line":787},[145,33682,33433],{"class":174},[32148,33684,33686],{"id":33685},"t3-感情表現-アニメキャラクターの演技","T3: 感情表現 — アニメキャラクターの演技",[11,33688,33689,33691],{},[23,33690,33195],{}," 手紙を読むアニメスタイルのキャラクターが詳細な表情変化を見せます。テキストのみのプロンプトで繊細なキャラクター演技を作成できることを実演。",[56,33693,60,33694],{"autoPlay":58,"loop":58,"muted":58,"playsInline":58,"style":59},[62,33695],{"src":33696,"type":65},"https://cdn.evolink.ai/seedance2api/%E5%8A%A8%E6%BC%AB%E4%BA%BA%E7%89%A9%E8%AF%BB%E4%BF%A1%E8%A1%A8%E6%83%85.mp4",[136,33698,33700],{"className":337,"code":33699,"language":339,"meta":141,"style":141},"# T3: 感情表現 — 上記の最初の例のセットアップを使用\nresponse = requests.post(\n    f\"{BASE_URL}/videos/generations\",\n    headers={\"Authorization\": f\"Bearer {API_KEY}\"},\n    json={\n        \"model\": \"seedance-2.0\",\n        \"prompt\": (\n            \"【Style】High-quality anime, Studio Ghibli-inspired character animation, \"\n            \"detailed facial expressions.\\n\"\n            \"【Duration】12 seconds\\n\\n\"\n            \"[00:00-00:04] Shot 1: The Letter Arrives (Medium Close-up).\\n\"\n            \"A young anime girl with long black hair sits by a sunlit window. She holds \"\n            \"an unopened envelope with both hands, turning it over carefully. Her eyes \"\n            \"show curiosity mixed with anticipation. Soft morning light illuminates her face.\\n\\n\"\n            \"[00:04-00:08] Shot 2: The Reading (Close-up on Face).\\n\"\n            \"Camera pushes closer as she opens the letter and begins reading. Her \"\n            \"expression changes dramatically — eyes widening with surprise, then a slow \"\n            \"smile spreading across her face. Her lips part slightly as if to gasp. \"\n            \"Every micro-expression is clearly animated.\\n\\n\"\n            \"[00:08-00:12] Shot 3: The Joy (Medium Shot, Slight Pull Back).\\n\"\n            \"She clutches the letter to her chest and closes her eyes with pure happiness. \"\n            \"A single tear of joy rolls down her cheek. Cherry blossom petals drift past \"\n            \"the window behind her. Camera holds on her peaceful, radiant expression.\\n\\n\"\n            \"Consistent anime character design. Detailed emotional facial animation. \"\n            \"Natural lighting transitions.\"\n        ),\n        \"duration\": 12,\n        \"quality\": \"1080p\"\n    }\n)\n# 上記の最初の例と同じポーリングループを使用\n",[28,33701,33702,33707,33715,33727,33749,33757,33767,33773,33778,33787,33795,33804,33809,33814,33823,33832,33837,33842,33847,33856,33865,33870,33875,33884,33889,33894,33898,33908,33916,33920,33924],{"__ignoreMap":141},[145,33703,33704],{"class":147,"line":148},[145,33705,33706],{"class":174},"# T3: 感情表現 — 上記の最初の例のセットアップを使用\n",[145,33708,33709,33711,33713],{"class":147,"line":166},[145,33710,6387],{"class":262},[145,33712,266],{"class":258},[145,33714,1433],{"class":262},[145,33716,33717,33719,33721,33723,33725],{"class":147,"line":178},[145,33718,6396],{"class":258},[145,33720,448],{"class":159},[145,33722,678],{"class":155},[145,33724,1445],{"class":159},[145,33726,451],{"class":262},[145,33728,33729,33731,33733,33735,33737,33739,33741,33743,33745,33747],{"class":147,"line":187},[145,33730,6409],{"class":700},[145,33732,266],{"class":258},[145,33734,684],{"class":262},[145,33736,31308],{"class":159},[145,33738,436],{"class":262},[145,33740,439],{"class":258},[145,33742,442],{"class":159},[145,33744,445],{"class":155},[145,33746,448],{"class":159},[145,33748,19396],{"class":262},[145,33750,33751,33753,33755],{"class":147,"line":372},[145,33752,6420],{"class":700},[145,33754,266],{"class":258},[145,33756,1866],{"class":262},[145,33758,33759,33761,33763,33765],{"class":147,"line":378},[145,33760,1304],{"class":159},[145,33762,436],{"class":262},[145,33764,1309],{"class":159},[145,33766,451],{"class":262},[145,33768,33769,33771],{"class":147,"line":384},[145,33770,1320],{"class":159},[145,33772,1323],{"class":262},[145,33774,33775],{"class":147,"line":408},[145,33776,33777],{"class":159},"            \"【Style】High-quality anime, Studio Ghibli-inspired character animation, \"\n",[145,33779,33780,33783,33785],{"class":147,"line":419},[145,33781,33782],{"class":159},"            \"detailed facial expressions.",[145,33784,1671],{"class":155},[145,33786,950],{"class":159},[145,33788,33789,33791,33793],{"class":147,"line":430},[145,33790,33290],{"class":159},[145,33792,11966],{"class":155},[145,33794,950],{"class":159},[145,33796,33797,33800,33802],{"class":147,"line":454},[145,33798,33799],{"class":159},"            \"[00:00-00:04] Shot 1: The Letter Arrives (Medium Close-up).",[145,33801,1671],{"class":155},[145,33803,950],{"class":159},[145,33805,33806],{"class":147,"line":465},[145,33807,33808],{"class":159},"            \"A young anime girl with long black hair sits by a sunlit window. She holds \"\n",[145,33810,33811],{"class":147,"line":599},[145,33812,33813],{"class":159},"            \"an unopened envelope with both hands, turning it over carefully. Her eyes \"\n",[145,33815,33816,33819,33821],{"class":147,"line":604},[145,33817,33818],{"class":159},"            \"show curiosity mixed with anticipation. Soft morning light illuminates her face.",[145,33820,11966],{"class":155},[145,33822,950],{"class":159},[145,33824,33825,33828,33830],{"class":147,"line":610},[145,33826,33827],{"class":159},"            \"[00:04-00:08] Shot 2: The Reading (Close-up on Face).",[145,33829,1671],{"class":155},[145,33831,950],{"class":159},[145,33833,33834],{"class":147,"line":616},[145,33835,33836],{"class":159},"            \"Camera pushes closer as she opens the letter and begins reading. Her \"\n",[145,33838,33839],{"class":147,"line":622},[145,33840,33841],{"class":159},"            \"expression changes dramatically — eyes widening with surprise, then a slow \"\n",[145,33843,33844],{"class":147,"line":627},[145,33845,33846],{"class":159},"            \"smile spreading across her face. Her lips part slightly as if to gasp. \"\n",[145,33848,33849,33852,33854],{"class":147,"line":638},[145,33850,33851],{"class":159},"            \"Every micro-expression is clearly animated.",[145,33853,11966],{"class":155},[145,33855,950],{"class":159},[145,33857,33858,33861,33863],{"class":147,"line":653},[145,33859,33860],{"class":159},"            \"[00:08-00:12] Shot 3: The Joy (Medium Shot, Slight Pull Back).",[145,33862,1671],{"class":155},[145,33864,950],{"class":159},[145,33866,33867],{"class":147,"line":659},[145,33868,33869],{"class":159},"            \"She clutches the letter to her chest and closes her eyes with pure happiness. \"\n",[145,33871,33872],{"class":147,"line":670},[145,33873,33874],{"class":159},"            \"A single tear of joy rolls down her cheek. Cherry blossom petals drift past \"\n",[145,33876,33877,33880,33882],{"class":147,"line":697},[145,33878,33879],{"class":159},"            \"the window behind her. Camera holds on her peaceful, radiant expression.",[145,33881,11966],{"class":155},[145,33883,950],{"class":159},[145,33885,33886],{"class":147,"line":709},[145,33887,33888],{"class":159},"            \"Consistent anime character design. Detailed emotional facial animation. \"\n",[145,33890,33891],{"class":147,"line":715},[145,33892,33893],{"class":159},"            \"Natural lighting transitions.\"\n",[145,33895,33896],{"class":147,"line":721},[145,33897,1343],{"class":262},[145,33899,33900,33902,33904,33906],{"class":147,"line":727},[145,33901,1348],{"class":159},[145,33903,436],{"class":262},[145,33905,16229],{"class":155},[145,33907,451],{"class":262},[145,33909,33910,33912,33914],{"class":147,"line":738},[145,33911,1364],{"class":159},[145,33913,436],{"class":262},[145,33915,32541],{"class":159},[145,33917,33918],{"class":147,"line":743},[145,33919,1408],{"class":262},[145,33921,33922],{"class":147,"line":749},[145,33923,405],{"class":262},[145,33925,33926],{"class":147,"line":766},[145,33927,33433],{"class":174},[92,33929,33930],{"id":33930},"画像から動画のプロンプトテンプレート",[32148,33932,33934],{"id":33933},"i1-商品cm-プレミアムヘッドホン","I1: 商品CM — プレミアムヘッドホン",[11,33936,33937,33939,33940,33942,33943,1261],{},[23,33938,33195],{}," 商品写真をダイナミックなカラー展開とスタジオ品質のライティングを備えたプレミアムCMに変換。",[28,33941,2909],{}," を最初のフレームとして使用。バッチ生成を含むその他の商品動画ワークフローについては、",[37,33944,22840],{"href":3381},[56,33946,60,33947],{"autoPlay":58,"loop":58,"muted":58,"playsInline":58,"style":59},[62,33948],{"src":18244,"type":65},[136,33950,33952],{"className":337,"code":33951,"language":339,"meta":141,"style":141},"# I1: 商品CM — 上記の最初の例のセットアップを使用\nresponse = requests.post(\n    f\"{BASE_URL}/videos/generations\",\n    headers={\"Authorization\": f\"Bearer {API_KEY}\"},\n    json={\n        \"model\": \"seedance-2.0\",\n        \"image_urls\": [\"https://example.com/premium_headphones.jpg\"],\n        \"prompt\": (\n            \"@Image1 as first frame.\\n\"\n            \"【Style】Premium product keynote, clean minimal aesthetic, commercial photography.\\n\"\n            \"【Duration】15 seconds\\n\\n\"\n            \"[00:00-00:02] Rapid four-frame flash cuts — black, blue, white, rose gold \"\n            \"headphones appear one by one in stylized freeze frames. Close-up on metallic \"\n            \"texture and premium finish. Voiceover: 'Sound that moves you.'\\n\\n\"\n            \"[00:02-00:06] Extreme close-up of the headphone hinge mechanism unfolding. \"\n            \"Precision engineering visible in slow motion. Studio lighting creates elegant \"\n            \"highlights on the metal surface.\\n\\n\"\n            \"[00:06-00:12] Quick-cut lifestyle montage. Urban professional commuting, \"\n            \"artist in creative studio, athlete training — each wearing different colored \"\n            \"headphones that match their aesthetic.\\n\\n\"\n            \"[00:12-00:15] All four headphones lined up on minimal white pedestal. Brand \"\n            \"text 'SoundPro Hear Everything' elegantly fades in at the bottom.\\n\\n\"\n            \"Maintain exact product proportions and details from @Image1. Commercial-grade \"\n            \"lighting. Clean, premium aesthetic throughout.\"\n        ),\n        \"duration\": 15,\n        \"quality\": \"1080p\"\n    }\n)\n# 上記の最初の例と同じポーリングループを使用\n",[28,33953,33954,33959,33967,33979,34001,34009,34019,34030,34036,34045,34054,34063,34068,34073,34082,34087,34092,34101,34106,34111,34120,34125,34134,34139,34144,34148,34158,34166,34170,34174],{"__ignoreMap":141},[145,33955,33956],{"class":147,"line":148},[145,33957,33958],{"class":174},"# I1: 商品CM — 上記の最初の例のセットアップを使用\n",[145,33960,33961,33963,33965],{"class":147,"line":166},[145,33962,6387],{"class":262},[145,33964,266],{"class":258},[145,33966,1433],{"class":262},[145,33968,33969,33971,33973,33975,33977],{"class":147,"line":178},[145,33970,6396],{"class":258},[145,33972,448],{"class":159},[145,33974,678],{"class":155},[145,33976,1445],{"class":159},[145,33978,451],{"class":262},[145,33980,33981,33983,33985,33987,33989,33991,33993,33995,33997,33999],{"class":147,"line":187},[145,33982,6409],{"class":700},[145,33984,266],{"class":258},[145,33986,684],{"class":262},[145,33988,31308],{"class":159},[145,33990,436],{"class":262},[145,33992,439],{"class":258},[145,33994,442],{"class":159},[145,33996,445],{"class":155},[145,33998,448],{"class":159},[145,34000,19396],{"class":262},[145,34002,34003,34005,34007],{"class":147,"line":372},[145,34004,6420],{"class":700},[145,34006,266],{"class":258},[145,34008,1866],{"class":262},[145,34010,34011,34013,34015,34017],{"class":147,"line":378},[145,34012,1304],{"class":159},[145,34014,436],{"class":262},[145,34016,1309],{"class":159},[145,34018,451],{"class":262},[145,34020,34021,34023,34025,34028],{"class":147,"line":384},[145,34022,2688],{"class":159},[145,34024,10692],{"class":262},[145,34026,34027],{"class":159},"\"https://example.com/premium_headphones.jpg\"",[145,34029,10698],{"class":262},[145,34031,34032,34034],{"class":147,"line":408},[145,34033,1320],{"class":159},[145,34035,1323],{"class":262},[145,34037,34038,34041,34043],{"class":147,"line":419},[145,34039,34040],{"class":159},"            \"@Image1 as first frame.",[145,34042,1671],{"class":155},[145,34044,950],{"class":159},[145,34046,34047,34050,34052],{"class":147,"line":430},[145,34048,34049],{"class":159},"            \"【Style】Premium product keynote, clean minimal aesthetic, commercial photography.",[145,34051,1671],{"class":155},[145,34053,950],{"class":159},[145,34055,34056,34059,34061],{"class":147,"line":454},[145,34057,34058],{"class":159},"            \"【Duration】15 seconds",[145,34060,11966],{"class":155},[145,34062,950],{"class":159},[145,34064,34065],{"class":147,"line":465},[145,34066,34067],{"class":159},"            \"[00:00-00:02] Rapid four-frame flash cuts — black, blue, white, rose gold \"\n",[145,34069,34070],{"class":147,"line":599},[145,34071,34072],{"class":159},"            \"headphones appear one by one in stylized freeze frames. Close-up on metallic \"\n",[145,34074,34075,34078,34080],{"class":147,"line":604},[145,34076,34077],{"class":159},"            \"texture and premium finish. Voiceover: 'Sound that moves you.'",[145,34079,11966],{"class":155},[145,34081,950],{"class":159},[145,34083,34084],{"class":147,"line":610},[145,34085,34086],{"class":159},"            \"[00:02-00:06] Extreme close-up of the headphone hinge mechanism unfolding. \"\n",[145,34088,34089],{"class":147,"line":616},[145,34090,34091],{"class":159},"            \"Precision engineering visible in slow motion. Studio lighting creates elegant \"\n",[145,34093,34094,34097,34099],{"class":147,"line":622},[145,34095,34096],{"class":159},"            \"highlights on the metal surface.",[145,34098,11966],{"class":155},[145,34100,950],{"class":159},[145,34102,34103],{"class":147,"line":627},[145,34104,34105],{"class":159},"            \"[00:06-00:12] Quick-cut lifestyle montage. Urban professional commuting, \"\n",[145,34107,34108],{"class":147,"line":638},[145,34109,34110],{"class":159},"            \"artist in creative studio, athlete training — each wearing different colored \"\n",[145,34112,34113,34116,34118],{"class":147,"line":653},[145,34114,34115],{"class":159},"            \"headphones that match their aesthetic.",[145,34117,11966],{"class":155},[145,34119,950],{"class":159},[145,34121,34122],{"class":147,"line":659},[145,34123,34124],{"class":159},"            \"[00:12-00:15] All four headphones lined up on minimal white pedestal. Brand \"\n",[145,34126,34127,34130,34132],{"class":147,"line":670},[145,34128,34129],{"class":159},"            \"text 'SoundPro Hear Everything' elegantly fades in at the bottom.",[145,34131,11966],{"class":155},[145,34133,950],{"class":159},[145,34135,34136],{"class":147,"line":697},[145,34137,34138],{"class":159},"            \"Maintain exact product proportions and details from @Image1. Commercial-grade \"\n",[145,34140,34141],{"class":147,"line":709},[145,34142,34143],{"class":159},"            \"lighting. Clean, premium aesthetic throughout.\"\n",[145,34145,34146],{"class":147,"line":715},[145,34147,1343],{"class":262},[145,34149,34150,34152,34154,34156],{"class":147,"line":721},[145,34151,1348],{"class":159},[145,34153,436],{"class":262},[145,34155,3904],{"class":155},[145,34157,451],{"class":262},[145,34159,34160,34162,34164],{"class":147,"line":727},[145,34161,1364],{"class":159},[145,34163,436],{"class":262},[145,34165,32541],{"class":159},[145,34167,34168],{"class":147,"line":738},[145,34169,1408],{"class":262},[145,34171,34172],{"class":147,"line":743},[145,34173,405],{"class":262},[145,34175,34176],{"class":147,"line":749},[145,34177,33433],{"class":174},[32148,34179,34181],{"id":34180},"i2-キャラクターアニメーション-絵画の貴婦人のコーヒー冒険","I2: キャラクターアニメーション — 絵画の貴婦人のコーヒー冒険",[11,34183,34184,34186,34187,34189],{},[23,34185,33195],{}," 絵画のキャラクターが魅力的なコーヒー泥棒シーンで命を吹き込まれます。",[28,34188,2909],{}," が魔法のようなナラティブの中でキャラクターの外見をどう維持するかを実演。",[56,34191,60,34192],{"autoPlay":58,"loop":58,"muted":58,"playsInline":58,"style":59},[62,34193],{"src":18602,"type":65},[136,34195,34197],{"className":337,"code":34196,"language":339,"meta":141,"style":141},"# I2: キャラクターアニメーション — 上記の最初の例のセットアップを使用\nresponse = requests.post(\n    f\"{BASE_URL}/videos/generations\",\n    headers={\"Authorization\": f\"Bearer {API_KEY}\"},\n    json={\n        \"model\": \"seedance-2.0\",\n        \"image_urls\": [\"https://example.com/painted_noblewoman.jpg\"],\n        \"prompt\": (\n            \"@Image1 as character reference.\\n\"\n            \"【Style】Cinematic realism with magical elements, warm practical lighting.\\n\"\n            \"【Duration】15 seconds\\n\\n\"\n            \"[00:00-00:04] Shot 1: The Awakening (Medium Shot on Canvas).\\n\"\n            \"The painted noblewoman suddenly comes alive inside the canvas. Her eyes dart \"\n            \"left and right nervously. Her painted hand animates and pushes forward through \"\n            \"the surface of the painting, reaching out from inside the canvas to grab a coffee \"\n            \"cup sitting on the table in front of the frame.\\n\\n\"\n            \"[00:04-00:08] Shot 2: The Secret Sip (Close-up on Face and Hands).\\n\"\n            \"She takes a quick sip and shows a deeply satisfied expression. Her eyes close \"\n            \"with pleasure as she savors the taste. Steam from the hot coffee catches the \"\n            \"gallery lighting.\\n\\n\"\n            \"[00:08-00:12] Shot 3: The Panic (Wide Shot, Quick Action).\\n\"\n            \"Suddenly footsteps approach — she panics and quickly puts the coffee back. \"\n            \"A butler-like figure walks in, picks up the coffee from the table, and leaves. \"\n            \"The woman freezes back into painting pose.\\n\\n\"\n            \"[00:12-00:15] Shot 4: The Finale (Push-in to Product Shot).\\n\"\n            \"Camera pushes forward as the scene fades to a pure black background with a \"\n            \"single spotlight illuminating the coffee cup. Elegant text appears at the \"\n            \"bottom: 'Good coffee is worth the wait.'\\n\\n\"\n            \"Maintain @Image1 character appearance exactly. Seamless transitions between \"\n            \"painted and living states. Realistic coffee physics.\"\n        ),\n        \"duration\": 15,\n        \"quality\": \"1080p\"\n    }\n)\n# 上記の最初の例と同じポーリングループを使用\n",[28,34198,34199,34204,34212,34224,34246,34254,34264,34275,34281,34290,34299,34307,34316,34321,34326,34331,34340,34349,34354,34359,34368,34377,34382,34387,34396,34405,34410,34415,34424,34429,34434,34438,34448,34456,34460,34464],{"__ignoreMap":141},[145,34200,34201],{"class":147,"line":148},[145,34202,34203],{"class":174},"# I2: キャラクターアニメーション — 上記の最初の例のセットアップを使用\n",[145,34205,34206,34208,34210],{"class":147,"line":166},[145,34207,6387],{"class":262},[145,34209,266],{"class":258},[145,34211,1433],{"class":262},[145,34213,34214,34216,34218,34220,34222],{"class":147,"line":178},[145,34215,6396],{"class":258},[145,34217,448],{"class":159},[145,34219,678],{"class":155},[145,34221,1445],{"class":159},[145,34223,451],{"class":262},[145,34225,34226,34228,34230,34232,34234,34236,34238,34240,34242,34244],{"class":147,"line":187},[145,34227,6409],{"class":700},[145,34229,266],{"class":258},[145,34231,684],{"class":262},[145,34233,31308],{"class":159},[145,34235,436],{"class":262},[145,34237,439],{"class":258},[145,34239,442],{"class":159},[145,34241,445],{"class":155},[145,34243,448],{"class":159},[145,34245,19396],{"class":262},[145,34247,34248,34250,34252],{"class":147,"line":372},[145,34249,6420],{"class":700},[145,34251,266],{"class":258},[145,34253,1866],{"class":262},[145,34255,34256,34258,34260,34262],{"class":147,"line":378},[145,34257,1304],{"class":159},[145,34259,436],{"class":262},[145,34261,1309],{"class":159},[145,34263,451],{"class":262},[145,34265,34266,34268,34270,34273],{"class":147,"line":384},[145,34267,2688],{"class":159},[145,34269,10692],{"class":262},[145,34271,34272],{"class":159},"\"https://example.com/painted_noblewoman.jpg\"",[145,34274,10698],{"class":262},[145,34276,34277,34279],{"class":147,"line":408},[145,34278,1320],{"class":159},[145,34280,1323],{"class":262},[145,34282,34283,34286,34288],{"class":147,"line":419},[145,34284,34285],{"class":159},"            \"@Image1 as character reference.",[145,34287,1671],{"class":155},[145,34289,950],{"class":159},[145,34291,34292,34295,34297],{"class":147,"line":430},[145,34293,34294],{"class":159},"            \"【Style】Cinematic realism with magical elements, warm practical lighting.",[145,34296,1671],{"class":155},[145,34298,950],{"class":159},[145,34300,34301,34303,34305],{"class":147,"line":454},[145,34302,34058],{"class":159},[145,34304,11966],{"class":155},[145,34306,950],{"class":159},[145,34308,34309,34312,34314],{"class":147,"line":465},[145,34310,34311],{"class":159},"            \"[00:00-00:04] Shot 1: The Awakening (Medium Shot on Canvas).",[145,34313,1671],{"class":155},[145,34315,950],{"class":159},[145,34317,34318],{"class":147,"line":599},[145,34319,34320],{"class":159},"            \"The painted noblewoman suddenly comes alive inside the canvas. Her eyes dart \"\n",[145,34322,34323],{"class":147,"line":604},[145,34324,34325],{"class":159},"            \"left and right nervously. Her painted hand animates and pushes forward through \"\n",[145,34327,34328],{"class":147,"line":610},[145,34329,34330],{"class":159},"            \"the surface of the painting, reaching out from inside the canvas to grab a coffee \"\n",[145,34332,34333,34336,34338],{"class":147,"line":616},[145,34334,34335],{"class":159},"            \"cup sitting on the table in front of the frame.",[145,34337,11966],{"class":155},[145,34339,950],{"class":159},[145,34341,34342,34345,34347],{"class":147,"line":622},[145,34343,34344],{"class":159},"            \"[00:04-00:08] Shot 2: The Secret Sip (Close-up on Face and Hands).",[145,34346,1671],{"class":155},[145,34348,950],{"class":159},[145,34350,34351],{"class":147,"line":627},[145,34352,34353],{"class":159},"            \"She takes a quick sip and shows a deeply satisfied expression. Her eyes close \"\n",[145,34355,34356],{"class":147,"line":638},[145,34357,34358],{"class":159},"            \"with pleasure as she savors the taste. Steam from the hot coffee catches the \"\n",[145,34360,34361,34364,34366],{"class":147,"line":653},[145,34362,34363],{"class":159},"            \"gallery lighting.",[145,34365,11966],{"class":155},[145,34367,950],{"class":159},[145,34369,34370,34373,34375],{"class":147,"line":659},[145,34371,34372],{"class":159},"            \"[00:08-00:12] Shot 3: The Panic (Wide Shot, Quick Action).",[145,34374,1671],{"class":155},[145,34376,950],{"class":159},[145,34378,34379],{"class":147,"line":670},[145,34380,34381],{"class":159},"            \"Suddenly footsteps approach — she panics and quickly puts the coffee back. \"\n",[145,34383,34384],{"class":147,"line":697},[145,34385,34386],{"class":159},"            \"A butler-like figure walks in, picks up the coffee from the table, and leaves. \"\n",[145,34388,34389,34392,34394],{"class":147,"line":709},[145,34390,34391],{"class":159},"            \"The woman freezes back into painting pose.",[145,34393,11966],{"class":155},[145,34395,950],{"class":159},[145,34397,34398,34401,34403],{"class":147,"line":715},[145,34399,34400],{"class":159},"            \"[00:12-00:15] Shot 4: The Finale (Push-in to Product Shot).",[145,34402,1671],{"class":155},[145,34404,950],{"class":159},[145,34406,34407],{"class":147,"line":721},[145,34408,34409],{"class":159},"            \"Camera pushes forward as the scene fades to a pure black background with a \"\n",[145,34411,34412],{"class":147,"line":727},[145,34413,34414],{"class":159},"            \"single spotlight illuminating the coffee cup. Elegant text appears at the \"\n",[145,34416,34417,34420,34422],{"class":147,"line":738},[145,34418,34419],{"class":159},"            \"bottom: 'Good coffee is worth the wait.'",[145,34421,11966],{"class":155},[145,34423,950],{"class":159},[145,34425,34426],{"class":147,"line":743},[145,34427,34428],{"class":159},"            \"Maintain @Image1 character appearance exactly. Seamless transitions between \"\n",[145,34430,34431],{"class":147,"line":749},[145,34432,34433],{"class":159},"            \"painted and living states. Realistic coffee physics.\"\n",[145,34435,34436],{"class":147,"line":766},[145,34437,1343],{"class":262},[145,34439,34440,34442,34444,34446],{"class":147,"line":787},[145,34441,1348],{"class":159},[145,34443,436],{"class":262},[145,34445,3904],{"class":155},[145,34447,451],{"class":262},[145,34449,34450,34452,34454],{"class":147,"line":833},[145,34451,1364],{"class":159},[145,34453,436],{"class":262},[145,34455,32541],{"class":159},[145,34457,34458],{"class":147,"line":838},[145,34459,1408],{"class":262},[145,34461,34462],{"class":147,"line":844},[145,34463,405],{"class":262},[145,34465,34466],{"class":147,"line":862},[145,34467,33433],{"class":174},[32148,34469,34471],{"id":34470},"i3-スタイル転写-リアルから水墨画へ","I3: スタイル転写 — リアルから水墨画へ",[11,34473,34474,34476,34477,34479],{},[23,34475,33195],{}," リアルな風景写真を動く伝統的中国水墨画（水墨画）に変換します。",[28,34478,2909],{}," をシーン構図の参照として使用したスタイル転写を実演。",[56,34481,60,34482],{"autoPlay":58,"loop":58,"muted":58,"playsInline":58,"style":59},[62,34483],{"src":24933,"type":65},[136,34485,34487],{"className":337,"code":34486,"language":339,"meta":141,"style":141},"# I3: スタイル転写 — 上記の最初の例のセットアップを使用\nresponse = requests.post(\n    f\"{BASE_URL}/videos/generations\",\n    headers={\"Authorization\": f\"Bearer {API_KEY}\"},\n    json={\n        \"model\": \"seedance-2.0\",\n        \"image_urls\": [\"https://example.com/realistic_landscape.jpg\"],\n        \"prompt\": (\n            \"@Image1 as scene composition reference.\\n\"\n            \"【Style】Traditional Chinese ink wash painting (水墨画), monochrome with faint indigo, meditative.\\n\"\n            \"【Duration】12 seconds\\n\\n\"\n            \"[00:00-00:04] Shot 1: The Transformation Begins (Wide, Static).\\n\"\n            \"The photorealistic landscape slowly dissolves into flowing black ink. Mountain \"\n            \"peaks render as bold wet brushstrokes on rice paper texture. Realistic details \"\n            \"fade as traditional ink wash aesthetics take over.\\n\\n\"\n            \"[00:04-00:08] Shot 2: Life Emerges in Ink (Medium Shot, Slow Pan Right).\\n\"\n            \"Mist begins drifting between the valleys — visible as diluted ink wash spreading \"\n            \"on wet paper. A crane takes flight from behind a mountain, leaving elegant ink \"\n            \"trails across the sky. Water effects spread ink at mountain bases.\\n\\n\"\n            \"[00:08-00:12] Shot 3: Completion (Wide, Slow Zoom Out).\\n\"\n            \"Camera slowly pulls back to reveal the entire scene as a traditional scroll \"\n            \"painting being unrolled on a wooden desk. An unseen hand dips a brush in ink \"\n            \"at the edge of frame. The painting breathes — clouds still drift, crane still flies.\\n\\n\"\n            \"Visible rice paper texture and authentic brushstroke quality throughout. \"\n            \"No photorealism. Pure traditional ink wash aesthetic.\"\n        ),\n        \"duration\": 12,\n        \"quality\": \"1080p\"\n    }\n)\n# 上記の最初の例と同じポーリングループを使用\n",[28,34488,34489,34494,34502,34514,34536,34544,34554,34565,34571,34580,34589,34597,34606,34611,34616,34625,34634,34639,34644,34653,34662,34667,34672,34681,34686,34691,34695,34705,34713,34717,34721],{"__ignoreMap":141},[145,34490,34491],{"class":147,"line":148},[145,34492,34493],{"class":174},"# I3: スタイル転写 — 上記の最初の例のセットアップを使用\n",[145,34495,34496,34498,34500],{"class":147,"line":166},[145,34497,6387],{"class":262},[145,34499,266],{"class":258},[145,34501,1433],{"class":262},[145,34503,34504,34506,34508,34510,34512],{"class":147,"line":178},[145,34505,6396],{"class":258},[145,34507,448],{"class":159},[145,34509,678],{"class":155},[145,34511,1445],{"class":159},[145,34513,451],{"class":262},[145,34515,34516,34518,34520,34522,34524,34526,34528,34530,34532,34534],{"class":147,"line":187},[145,34517,6409],{"class":700},[145,34519,266],{"class":258},[145,34521,684],{"class":262},[145,34523,31308],{"class":159},[145,34525,436],{"class":262},[145,34527,439],{"class":258},[145,34529,442],{"class":159},[145,34531,445],{"class":155},[145,34533,448],{"class":159},[145,34535,19396],{"class":262},[145,34537,34538,34540,34542],{"class":147,"line":372},[145,34539,6420],{"class":700},[145,34541,266],{"class":258},[145,34543,1866],{"class":262},[145,34545,34546,34548,34550,34552],{"class":147,"line":378},[145,34547,1304],{"class":159},[145,34549,436],{"class":262},[145,34551,1309],{"class":159},[145,34553,451],{"class":262},[145,34555,34556,34558,34560,34563],{"class":147,"line":384},[145,34557,2688],{"class":159},[145,34559,10692],{"class":262},[145,34561,34562],{"class":159},"\"https://example.com/realistic_landscape.jpg\"",[145,34564,10698],{"class":262},[145,34566,34567,34569],{"class":147,"line":408},[145,34568,1320],{"class":159},[145,34570,1323],{"class":262},[145,34572,34573,34576,34578],{"class":147,"line":419},[145,34574,34575],{"class":159},"            \"@Image1 as scene composition reference.",[145,34577,1671],{"class":155},[145,34579,950],{"class":159},[145,34581,34582,34585,34587],{"class":147,"line":430},[145,34583,34584],{"class":159},"            \"【Style】Traditional Chinese ink wash painting (水墨画), monochrome with faint indigo, meditative.",[145,34586,1671],{"class":155},[145,34588,950],{"class":159},[145,34590,34591,34593,34595],{"class":147,"line":454},[145,34592,33290],{"class":159},[145,34594,11966],{"class":155},[145,34596,950],{"class":159},[145,34598,34599,34602,34604],{"class":147,"line":465},[145,34600,34601],{"class":159},"            \"[00:00-00:04] Shot 1: The Transformation Begins (Wide, Static).",[145,34603,1671],{"class":155},[145,34605,950],{"class":159},[145,34607,34608],{"class":147,"line":599},[145,34609,34610],{"class":159},"            \"The photorealistic landscape slowly dissolves into flowing black ink. Mountain \"\n",[145,34612,34613],{"class":147,"line":604},[145,34614,34615],{"class":159},"            \"peaks render as bold wet brushstrokes on rice paper texture. Realistic details \"\n",[145,34617,34618,34621,34623],{"class":147,"line":610},[145,34619,34620],{"class":159},"            \"fade as traditional ink wash aesthetics take over.",[145,34622,11966],{"class":155},[145,34624,950],{"class":159},[145,34626,34627,34630,34632],{"class":147,"line":616},[145,34628,34629],{"class":159},"            \"[00:04-00:08] Shot 2: Life Emerges in Ink (Medium Shot, Slow Pan Right).",[145,34631,1671],{"class":155},[145,34633,950],{"class":159},[145,34635,34636],{"class":147,"line":622},[145,34637,34638],{"class":159},"            \"Mist begins drifting between the valleys — visible as diluted ink wash spreading \"\n",[145,34640,34641],{"class":147,"line":627},[145,34642,34643],{"class":159},"            \"on wet paper. A crane takes flight from behind a mountain, leaving elegant ink \"\n",[145,34645,34646,34649,34651],{"class":147,"line":638},[145,34647,34648],{"class":159},"            \"trails across the sky. Water effects spread ink at mountain bases.",[145,34650,11966],{"class":155},[145,34652,950],{"class":159},[145,34654,34655,34658,34660],{"class":147,"line":653},[145,34656,34657],{"class":159},"            \"[00:08-00:12] Shot 3: Completion (Wide, Slow Zoom Out).",[145,34659,1671],{"class":155},[145,34661,950],{"class":159},[145,34663,34664],{"class":147,"line":659},[145,34665,34666],{"class":159},"            \"Camera slowly pulls back to reveal the entire scene as a traditional scroll \"\n",[145,34668,34669],{"class":147,"line":670},[145,34670,34671],{"class":159},"            \"painting being unrolled on a wooden desk. An unseen hand dips a brush in ink \"\n",[145,34673,34674,34677,34679],{"class":147,"line":697},[145,34675,34676],{"class":159},"            \"at the edge of frame. The painting breathes — clouds still drift, crane still flies.",[145,34678,11966],{"class":155},[145,34680,950],{"class":159},[145,34682,34683],{"class":147,"line":709},[145,34684,34685],{"class":159},"            \"Visible rice paper texture and authentic brushstroke quality throughout. \"\n",[145,34687,34688],{"class":147,"line":715},[145,34689,34690],{"class":159},"            \"No photorealism. Pure traditional ink wash aesthetic.\"\n",[145,34692,34693],{"class":147,"line":721},[145,34694,1343],{"class":262},[145,34696,34697,34699,34701,34703],{"class":147,"line":727},[145,34698,1348],{"class":159},[145,34700,436],{"class":262},[145,34702,16229],{"class":155},[145,34704,451],{"class":262},[145,34706,34707,34709,34711],{"class":147,"line":738},[145,34708,1364],{"class":159},[145,34710,436],{"class":262},[145,34712,32541],{"class":159},[145,34714,34715],{"class":147,"line":743},[145,34716,1408],{"class":262},[145,34718,34719],{"class":147,"line":749},[145,34720,405],{"class":262},[145,34722,34723],{"class":147,"line":766},[145,34724,33433],{"class":174},[32148,34726,34728],{"id":34727},"i4-マルチイメージワンショットナラティブ-都市パルクール","I4: マルチイメージ・ワンショットナラティブ — 都市パルクール",[11,34730,34731,34733,34734,34737],{},[23,34732,33195],{}," 複数のロケーション画像をシームレスにつなぎ、パルクールランナーの連続トラッキングショットを作成。ショットスクリプト形式で正確なタイミング制御を行い、壮大な都市の旅を実現。このテクニックは",[37,34735,34736],{"href":3855},"カメラムーブメント複製","パターンに基づいています。",[56,34739,60,34740],{"autoPlay":58,"loop":58,"muted":58,"playsInline":58,"style":59},[62,34741],{"src":12098,"type":65},[136,34743,34745],{"className":337,"code":34744,"language":339,"meta":141,"style":141},"# I4: マルチイメージ・ワンショットナラティブ — 上記の最初の例のセットアップを使用\nresponse = requests.post(\n    f\"{BASE_URL}/videos/generations\",\n    headers={\"Authorization\": f\"Bearer {API_KEY}\"},\n    json={\n        \"model\": \"seedance-2.0\",\n        \"image_urls\": [\n            \"https://example.com/city_street.jpg\",\n            \"https://example.com/staircase.jpg\",\n            \"https://example.com/pedestrian_bridge.jpg\",\n            \"https://example.com/rooftop_building.jpg\",\n            \"https://example.com/city_skyline.jpg\"\n        ],\n        \"prompt\": (\n            \"@Image1 @Image2 @Image3 @Image4 @Image5 seamless one-shot tracking camera \"\n            \"following a parkour runner sprinting through city streets leaping up staircases \"\n            \"crossing a pedestrian bridge vaulting onto rooftops finally standing at the \"\n            \"rooftop edge overlooking the entire city skyline. Golden sunset light fills \"\n            \"the frame. Dynamic powerful full of freedom and energy.\\n\"\n            \"【Style】Cinematic action sports, dynamic tracking shot, golden hour lighting.\\n\"\n            \"【Duration】15 seconds\\n\\n\"\n            \"[00:00-00:03] Urban Sprint (@Image1 as environment).\\n\"\n            \"Tracking camera follows a parkour athlete in athletic gear sprinting at full \"\n            \"speed through busy city streets. Low angle emphasizes power and speed. \"\n            \"Pedestrians blur past. Urban architecture creates dynamic leading lines.\\n\\n\"\n            \"[00:03-00:06] Staircase Vault (@Image2 as environment).\\n\"\n            \"Runner leaps up a concrete staircase in a single fluid motion — camera follows \"\n            \"the arc of movement. Each step is a launching pad. Concrete textures and \"\n            \"architectural details sharp in focus.\\n\\n\"\n            \"[00:06-00:09] Bridge Crossing (@Image3 as environment).\\n\"\n            \"Athlete vaults over the pedestrian bridge railing and lands on the walkway. \"\n            \"Camera maintains tracking speed. City traffic flows below. Wind catches \"\n            \"the runner's clothing.\\n\\n\"\n            \"[00:09-00:12] Rooftop Ascent (@Image4 as environment).\\n\"\n            \"A powerful jump and climb sequence onto building rooftops. Camera cranes up \"\n            \"to follow the vertical movement. Urban landscape spreads out below.\\n\\n\"\n            \"[00:12-00:15] Victory Moment (@Image5 as environment).\\n\"\n            \"Runner stands at the rooftop edge overlooking the entire city skyline. \"\n            \"Golden sunset light silhouettes the figure. Camera slowly pulls back to \"\n            \"reveal the epic scale of the journey completed.\\n\\n\"\n            \"Consistent runner character (same outfit, build, movement style) across all scenes. \"\n            \"Realistic parkour physics. Golden hour lighting throughout.\"\n        ),\n        \"duration\": 15,\n        \"quality\": \"1080p\"\n    }\n)\n# 上記の最初の例と同じポーリングループを使用\n",[28,34746,34747,34752,34760,34772,34794,34802,34812,34818,34825,34832,34839,34846,34851,34855,34861,34866,34871,34876,34881,34890,34899,34907,34916,34921,34926,34935,34944,34949,34954,34963,34972,34977,34982,34991,35000,35005,35014,35023,35028,35033,35042,35047,35052,35056,35066,35074,35078,35082],{"__ignoreMap":141},[145,34748,34749],{"class":147,"line":148},[145,34750,34751],{"class":174},"# I4: マルチイメージ・ワンショットナラティブ — 上記の最初の例のセットアップを使用\n",[145,34753,34754,34756,34758],{"class":147,"line":166},[145,34755,6387],{"class":262},[145,34757,266],{"class":258},[145,34759,1433],{"class":262},[145,34761,34762,34764,34766,34768,34770],{"class":147,"line":178},[145,34763,6396],{"class":258},[145,34765,448],{"class":159},[145,34767,678],{"class":155},[145,34769,1445],{"class":159},[145,34771,451],{"class":262},[145,34773,34774,34776,34778,34780,34782,34784,34786,34788,34790,34792],{"class":147,"line":187},[145,34775,6409],{"class":700},[145,34777,266],{"class":258},[145,34779,684],{"class":262},[145,34781,31308],{"class":159},[145,34783,436],{"class":262},[145,34785,439],{"class":258},[145,34787,442],{"class":159},[145,34789,445],{"class":155},[145,34791,448],{"class":159},[145,34793,19396],{"class":262},[145,34795,34796,34798,34800],{"class":147,"line":372},[145,34797,6420],{"class":700},[145,34799,266],{"class":258},[145,34801,1866],{"class":262},[145,34803,34804,34806,34808,34810],{"class":147,"line":378},[145,34805,1304],{"class":159},[145,34807,436],{"class":262},[145,34809,1309],{"class":159},[145,34811,451],{"class":262},[145,34813,34814,34816],{"class":147,"line":384},[145,34815,2688],{"class":159},[145,34817,2691],{"class":262},[145,34819,34820,34823],{"class":147,"line":408},[145,34821,34822],{"class":159},"            \"https://example.com/city_street.jpg\"",[145,34824,451],{"class":262},[145,34826,34827,34830],{"class":147,"line":419},[145,34828,34829],{"class":159},"            \"https://example.com/staircase.jpg\"",[145,34831,451],{"class":262},[145,34833,34834,34837],{"class":147,"line":430},[145,34835,34836],{"class":159},"            \"https://example.com/pedestrian_bridge.jpg\"",[145,34838,451],{"class":262},[145,34840,34841,34844],{"class":147,"line":454},[145,34842,34843],{"class":159},"            \"https://example.com/rooftop_building.jpg\"",[145,34845,451],{"class":262},[145,34847,34848],{"class":147,"line":465},[145,34849,34850],{"class":159},"            \"https://example.com/city_skyline.jpg\"\n",[145,34852,34853],{"class":147,"line":599},[145,34854,2701],{"class":262},[145,34856,34857,34859],{"class":147,"line":604},[145,34858,1320],{"class":159},[145,34860,1323],{"class":262},[145,34862,34863],{"class":147,"line":610},[145,34864,34865],{"class":159},"            \"@Image1 @Image2 @Image3 @Image4 @Image5 seamless one-shot tracking camera \"\n",[145,34867,34868],{"class":147,"line":616},[145,34869,34870],{"class":159},"            \"following a parkour runner sprinting through city streets leaping up staircases \"\n",[145,34872,34873],{"class":147,"line":622},[145,34874,34875],{"class":159},"            \"crossing a pedestrian bridge vaulting onto rooftops finally standing at the \"\n",[145,34877,34878],{"class":147,"line":627},[145,34879,34880],{"class":159},"            \"rooftop edge overlooking the entire city skyline. Golden sunset light fills \"\n",[145,34882,34883,34886,34888],{"class":147,"line":638},[145,34884,34885],{"class":159},"            \"the frame. Dynamic powerful full of freedom and energy.",[145,34887,1671],{"class":155},[145,34889,950],{"class":159},[145,34891,34892,34895,34897],{"class":147,"line":653},[145,34893,34894],{"class":159},"            \"【Style】Cinematic action sports, dynamic tracking shot, golden hour lighting.",[145,34896,1671],{"class":155},[145,34898,950],{"class":159},[145,34900,34901,34903,34905],{"class":147,"line":659},[145,34902,34058],{"class":159},[145,34904,11966],{"class":155},[145,34906,950],{"class":159},[145,34908,34909,34912,34914],{"class":147,"line":670},[145,34910,34911],{"class":159},"            \"[00:00-00:03] Urban Sprint (@Image1 as environment).",[145,34913,1671],{"class":155},[145,34915,950],{"class":159},[145,34917,34918],{"class":147,"line":697},[145,34919,34920],{"class":159},"            \"Tracking camera follows a parkour athlete in athletic gear sprinting at full \"\n",[145,34922,34923],{"class":147,"line":709},[145,34924,34925],{"class":159},"            \"speed through busy city streets. Low angle emphasizes power and speed. \"\n",[145,34927,34928,34931,34933],{"class":147,"line":715},[145,34929,34930],{"class":159},"            \"Pedestrians blur past. Urban architecture creates dynamic leading lines.",[145,34932,11966],{"class":155},[145,34934,950],{"class":159},[145,34936,34937,34940,34942],{"class":147,"line":721},[145,34938,34939],{"class":159},"            \"[00:03-00:06] Staircase Vault (@Image2 as environment).",[145,34941,1671],{"class":155},[145,34943,950],{"class":159},[145,34945,34946],{"class":147,"line":727},[145,34947,34948],{"class":159},"            \"Runner leaps up a concrete staircase in a single fluid motion — camera follows \"\n",[145,34950,34951],{"class":147,"line":738},[145,34952,34953],{"class":159},"            \"the arc of movement. Each step is a launching pad. Concrete textures and \"\n",[145,34955,34956,34959,34961],{"class":147,"line":743},[145,34957,34958],{"class":159},"            \"architectural details sharp in focus.",[145,34960,11966],{"class":155},[145,34962,950],{"class":159},[145,34964,34965,34968,34970],{"class":147,"line":749},[145,34966,34967],{"class":159},"            \"[00:06-00:09] Bridge Crossing (@Image3 as environment).",[145,34969,1671],{"class":155},[145,34971,950],{"class":159},[145,34973,34974],{"class":147,"line":766},[145,34975,34976],{"class":159},"            \"Athlete vaults over the pedestrian bridge railing and lands on the walkway. \"\n",[145,34978,34979],{"class":147,"line":787},[145,34980,34981],{"class":159},"            \"Camera maintains tracking speed. City traffic flows below. Wind catches \"\n",[145,34983,34984,34987,34989],{"class":147,"line":833},[145,34985,34986],{"class":159},"            \"the runner's clothing.",[145,34988,11966],{"class":155},[145,34990,950],{"class":159},[145,34992,34993,34996,34998],{"class":147,"line":838},[145,34994,34995],{"class":159},"            \"[00:09-00:12] Rooftop Ascent (@Image4 as environment).",[145,34997,1671],{"class":155},[145,34999,950],{"class":159},[145,35001,35002],{"class":147,"line":844},[145,35003,35004],{"class":159},"            \"A powerful jump and climb sequence onto building rooftops. Camera cranes up \"\n",[145,35006,35007,35010,35012],{"class":147,"line":862},[145,35008,35009],{"class":159},"            \"to follow the vertical movement. Urban landscape spreads out below.",[145,35011,11966],{"class":155},[145,35013,950],{"class":159},[145,35015,35016,35019,35021],{"class":147,"line":871},[145,35017,35018],{"class":159},"            \"[00:12-00:15] Victory Moment (@Image5 as environment).",[145,35020,1671],{"class":155},[145,35022,950],{"class":159},[145,35024,35025],{"class":147,"line":886},[145,35026,35027],{"class":159},"            \"Runner stands at the rooftop edge overlooking the entire city skyline. \"\n",[145,35029,35030],{"class":147,"line":902},[145,35031,35032],{"class":159},"            \"Golden sunset light silhouettes the figure. Camera slowly pulls back to \"\n",[145,35034,35035,35038,35040],{"class":147,"line":914},[145,35036,35037],{"class":159},"            \"reveal the epic scale of the journey completed.",[145,35039,11966],{"class":155},[145,35041,950],{"class":159},[145,35043,35044],{"class":147,"line":953},[145,35045,35046],{"class":159},"            \"Consistent runner character (same outfit, build, movement style) across all scenes. \"\n",[145,35048,35049],{"class":147,"line":959},[145,35050,35051],{"class":159},"            \"Realistic parkour physics. Golden hour lighting throughout.\"\n",[145,35053,35054],{"class":147,"line":964},[145,35055,1343],{"class":262},[145,35057,35058,35060,35062,35064],{"class":147,"line":970},[145,35059,1348],{"class":159},[145,35061,436],{"class":262},[145,35063,3904],{"class":155},[145,35065,451],{"class":262},[145,35067,35068,35070,35072],{"class":147,"line":976},[145,35069,1364],{"class":159},[145,35071,436],{"class":262},[145,35073,32541],{"class":159},[145,35075,35076],{"class":147,"line":988},[145,35077,1408],{"class":262},[145,35079,35080],{"class":147,"line":993},[145,35081,405],{"class":262},[145,35083,35084],{"class":147,"line":5402},[145,35085,33433],{"class":174},[92,35087,35089],{"id":35088},"マルチモーダル-tag-テンプレート","マルチモーダル @Tag テンプレート",[32148,35091,35093],{"id":35092},"m1-高度なカメラムーブメント複製-クリスタルダンジョン探索","M1: 高度なカメラムーブメント複製 — クリスタルダンジョン探索",[11,35095,35096,35098,35099,35102],{},[23,35097,33195],{}," 参照動画の複雑なカメラワークを正確に再現しつつ、まったく新しいファンタジーコンテンツと複数の画像参照に適用します。完全なカメラ複製ワークフローは",[37,35100,35101],{"href":3855},"専用カメラムーブメントガイド","で学べます。",[56,35104,60,35105],{"autoPlay":58,"loop":58,"muted":58,"playsInline":58,"style":59},[62,35106],{"src":35107,"type":65},"https://cdn.evolink.ai/seedance2api/%E6%B0%B4%E6%99%B6%E6%8E%A2%E9%99%A9.mp4",[136,35109,35111],{"className":337,"code":35110,"language":339,"meta":141,"style":141},"# M1: カメラムーブメント複製 — 上記の最初の例のセットアップを使用\nresponse = requests.post(\n    f\"{BASE_URL}/videos/generations\",\n    headers={\"Authorization\": f\"Bearer {API_KEY}\"},\n    json={\n        \"model\": \"seedance-2.0\",\n        \"image_urls\": [\n            \"https://example.com/dungeon_entrance.png\",\n            \"https://example.com/crystal_ceiling.png\",\n            \"https://example.com/left_passage.png\",\n            \"https://example.com/right_chamber.png\"\n        ],\n        \"video_urls\": [\"https://example.com/camera_movement_ref.mp4\"],\n        \"prompt\": (\n            \"Use @Image1 as the opening first frame. First-person POV perspective. \"\n            \"Reference @Video1 camera movement style exactly. The scene above references \"\n            \"@Image2, the left scene references @Image3, the right scene references @Image4. \"\n            \"A hand holds a glowing magic lantern, exploring an ancient dungeon. Firelight \"\n            \"flickers across stone walls, casting dancing shadows.\\n\"\n            \"【Style】Fantasy adventure, realistic lighting, atmospheric.\\n\"\n            \"【Duration】9 seconds\\n\\n\"\n            \"[00:00-00:03] Entrance Discovery.\\n\"\n            \"First-person view entering the dungeon. The magical lantern illuminates ancient \"\n            \"stone architecture. Camera follows @Video1 movement pattern — smooth forward \"\n            \"motion with subtle tilts to examine details.\\n\\n\"\n            \"[00:03-00:06] Chamber Exploration.\\n\"\n            \"Camera pans upward to reveal @Image2 crystal formations on the ceiling, \"\n            \"then tilts left toward @Image3 dark passage, creating suspense. Lantern \"\n            \"light creates dynamic shadows on dungeon walls.\\n\\n\"\n            \"[00:06-00:09] Final Discovery.\\n\"\n            \"Camera turns right to reveal @Image4 hidden chamber with treasure. \"\n            \"Replicate @Video1 final movement — slow push-in with slight upward tilt. \"\n            \"Golden light from treasures mingles with lantern glow.\\n\\n\"\n            \"Maintain exact @Video1 camera timing and movement speed. Realistic fire physics \"\n            \"and shadow casting. Atmospheric dungeon ambiance.\"\n        ),\n        \"duration\": 9,\n        \"quality\": \"1080p\"\n    }\n)\n# 上記の最初の例と同じポーリングループを使用\n",[28,35112,35113,35118,35126,35138,35160,35168,35178,35184,35191,35198,35205,35210,35214,35225,35231,35236,35241,35246,35251,35260,35269,35278,35287,35292,35297,35306,35315,35320,35325,35334,35343,35348,35353,35362,35367,35372,35376,35386,35394,35398,35402],{"__ignoreMap":141},[145,35114,35115],{"class":147,"line":148},[145,35116,35117],{"class":174},"# M1: カメラムーブメント複製 — 上記の最初の例のセットアップを使用\n",[145,35119,35120,35122,35124],{"class":147,"line":166},[145,35121,6387],{"class":262},[145,35123,266],{"class":258},[145,35125,1433],{"class":262},[145,35127,35128,35130,35132,35134,35136],{"class":147,"line":178},[145,35129,6396],{"class":258},[145,35131,448],{"class":159},[145,35133,678],{"class":155},[145,35135,1445],{"class":159},[145,35137,451],{"class":262},[145,35139,35140,35142,35144,35146,35148,35150,35152,35154,35156,35158],{"class":147,"line":187},[145,35141,6409],{"class":700},[145,35143,266],{"class":258},[145,35145,684],{"class":262},[145,35147,31308],{"class":159},[145,35149,436],{"class":262},[145,35151,439],{"class":258},[145,35153,442],{"class":159},[145,35155,445],{"class":155},[145,35157,448],{"class":159},[145,35159,19396],{"class":262},[145,35161,35162,35164,35166],{"class":147,"line":372},[145,35163,6420],{"class":700},[145,35165,266],{"class":258},[145,35167,1866],{"class":262},[145,35169,35170,35172,35174,35176],{"class":147,"line":378},[145,35171,1304],{"class":159},[145,35173,436],{"class":262},[145,35175,1309],{"class":159},[145,35177,451],{"class":262},[145,35179,35180,35182],{"class":147,"line":384},[145,35181,2688],{"class":159},[145,35183,2691],{"class":262},[145,35185,35186,35189],{"class":147,"line":408},[145,35187,35188],{"class":159},"            \"https://example.com/dungeon_entrance.png\"",[145,35190,451],{"class":262},[145,35192,35193,35196],{"class":147,"line":419},[145,35194,35195],{"class":159},"            \"https://example.com/crystal_ceiling.png\"",[145,35197,451],{"class":262},[145,35199,35200,35203],{"class":147,"line":430},[145,35201,35202],{"class":159},"            \"https://example.com/left_passage.png\"",[145,35204,451],{"class":262},[145,35206,35207],{"class":147,"line":454},[145,35208,35209],{"class":159},"            \"https://example.com/right_chamber.png\"\n",[145,35211,35212],{"class":147,"line":465},[145,35213,2701],{"class":262},[145,35215,35216,35218,35220,35223],{"class":147,"line":599},[145,35217,12002],{"class":159},[145,35219,10692],{"class":262},[145,35221,35222],{"class":159},"\"https://example.com/camera_movement_ref.mp4\"",[145,35224,10698],{"class":262},[145,35226,35227,35229],{"class":147,"line":604},[145,35228,1320],{"class":159},[145,35230,1323],{"class":262},[145,35232,35233],{"class":147,"line":610},[145,35234,35235],{"class":159},"            \"Use @Image1 as the opening first frame. First-person POV perspective. \"\n",[145,35237,35238],{"class":147,"line":616},[145,35239,35240],{"class":159},"            \"Reference @Video1 camera movement style exactly. The scene above references \"\n",[145,35242,35243],{"class":147,"line":622},[145,35244,35245],{"class":159},"            \"@Image2, the left scene references @Image3, the right scene references @Image4. \"\n",[145,35247,35248],{"class":147,"line":627},[145,35249,35250],{"class":159},"            \"A hand holds a glowing magic lantern, exploring an ancient dungeon. Firelight \"\n",[145,35252,35253,35256,35258],{"class":147,"line":638},[145,35254,35255],{"class":159},"            \"flickers across stone walls, casting dancing shadows.",[145,35257,1671],{"class":155},[145,35259,950],{"class":159},[145,35261,35262,35265,35267],{"class":147,"line":653},[145,35263,35264],{"class":159},"            \"【Style】Fantasy adventure, realistic lighting, atmospheric.",[145,35266,1671],{"class":155},[145,35268,950],{"class":159},[145,35270,35271,35274,35276],{"class":147,"line":659},[145,35272,35273],{"class":159},"            \"【Duration】9 seconds",[145,35275,11966],{"class":155},[145,35277,950],{"class":159},[145,35279,35280,35283,35285],{"class":147,"line":670},[145,35281,35282],{"class":159},"            \"[00:00-00:03] Entrance Discovery.",[145,35284,1671],{"class":155},[145,35286,950],{"class":159},[145,35288,35289],{"class":147,"line":697},[145,35290,35291],{"class":159},"            \"First-person view entering the dungeon. The magical lantern illuminates ancient \"\n",[145,35293,35294],{"class":147,"line":709},[145,35295,35296],{"class":159},"            \"stone architecture. Camera follows @Video1 movement pattern — smooth forward \"\n",[145,35298,35299,35302,35304],{"class":147,"line":715},[145,35300,35301],{"class":159},"            \"motion with subtle tilts to examine details.",[145,35303,11966],{"class":155},[145,35305,950],{"class":159},[145,35307,35308,35311,35313],{"class":147,"line":721},[145,35309,35310],{"class":159},"            \"[00:03-00:06] Chamber Exploration.",[145,35312,1671],{"class":155},[145,35314,950],{"class":159},[145,35316,35317],{"class":147,"line":727},[145,35318,35319],{"class":159},"            \"Camera pans upward to reveal @Image2 crystal formations on the ceiling, \"\n",[145,35321,35322],{"class":147,"line":738},[145,35323,35324],{"class":159},"            \"then tilts left toward @Image3 dark passage, creating suspense. Lantern \"\n",[145,35326,35327,35330,35332],{"class":147,"line":743},[145,35328,35329],{"class":159},"            \"light creates dynamic shadows on dungeon walls.",[145,35331,11966],{"class":155},[145,35333,950],{"class":159},[145,35335,35336,35339,35341],{"class":147,"line":749},[145,35337,35338],{"class":159},"            \"[00:06-00:09] Final Discovery.",[145,35340,1671],{"class":155},[145,35342,950],{"class":159},[145,35344,35345],{"class":147,"line":766},[145,35346,35347],{"class":159},"            \"Camera turns right to reveal @Image4 hidden chamber with treasure. \"\n",[145,35349,35350],{"class":147,"line":787},[145,35351,35352],{"class":159},"            \"Replicate @Video1 final movement — slow push-in with slight upward tilt. \"\n",[145,35354,35355,35358,35360],{"class":147,"line":833},[145,35356,35357],{"class":159},"            \"Golden light from treasures mingles with lantern glow.",[145,35359,11966],{"class":155},[145,35361,950],{"class":159},[145,35363,35364],{"class":147,"line":838},[145,35365,35366],{"class":159},"            \"Maintain exact @Video1 camera timing and movement speed. Realistic fire physics \"\n",[145,35368,35369],{"class":147,"line":844},[145,35370,35371],{"class":159},"            \"and shadow casting. Atmospheric dungeon ambiance.\"\n",[145,35373,35374],{"class":147,"line":862},[145,35375,1343],{"class":262},[145,35377,35378,35380,35382,35384],{"class":147,"line":871},[145,35379,1348],{"class":159},[145,35381,436],{"class":262},[145,35383,30386],{"class":155},[145,35385,451],{"class":262},[145,35387,35388,35390,35392],{"class":147,"line":886},[145,35389,1364],{"class":159},[145,35391,436],{"class":262},[145,35393,32541],{"class":159},[145,35395,35396],{"class":147,"line":902},[145,35397,1408],{"class":262},[145,35399,35400],{"class":147,"line":914},[145,35401,405],{"class":262},[145,35403,35404],{"class":147,"line":953},[145,35405,33433],{"class":174},[32148,35407,35409],{"id":35408},"m2-キャラクター-カメラムーブメント同期-ステージダンスパフォーマンス","M2: キャラクター + カメラムーブメント同期 — ステージダンスパフォーマンス",[11,35411,35412,35414],{},[23,35413,33195],{}," 画像からのキャラクター参照と、動画からのカメラワーク・ダンス振付を組み合わせ、同期したパフォーマンスアートを作成します。",[56,35416,60,35417],{"autoPlay":58,"loop":58,"muted":58,"playsInline":58,"style":59},[62,35418],{"src":35419,"type":65},"https://cdn.evolink.ai/seedance2api/%E5%A5%B3%E7%94%9F%E8%B7%B3%E8%88%9E.mp4",[136,35421,35423],{"className":337,"code":35422,"language":339,"meta":141,"style":141},"# M2: キャラクター + カメラムーブメント同期 — 上記の最初の例のセットアップを使用\nresponse = requests.post(\n    f\"{BASE_URL}/videos/generations\",\n    headers={\"Authorization\": f\"Bearer {API_KEY}\"},\n    json={\n        \"model\": \"seedance-2.0\",\n        \"image_urls\": [\"https://example.com/stage_dancer.png\"],\n        \"video_urls\": [\"https://example.com/dance_movement_ref.mp4\"],\n        \"prompt\": (\n            \"@Image1 dancer as the main subject. Reference @Video1 camera movement style \"\n            \"rhythmic push-pull pan and tilt movements. The dancer choreography also \"\n            \"references @Video1 dance moves. Performing energetically on a colorful \"\n            \"LED-lit stage. Spotlights shift colors in sync with the rhythm.\\n\"\n            \"【Style】Concert performance, dynamic stage lighting, high energy.\\n\"\n            \"【Duration】12 seconds\\n\\n\"\n            \"[00:00-00:04] Opening Sequence.\\n\"\n            \"Camera starts wide showing @Image1 dancer center stage. LED lights pulse \"\n            \"in blue and purple. Dancer begins with @Video1 opening choreography — \"\n            \"fluid arm movements and spins. Camera matches @Video1 initial push-in timing.\\n\\n\"\n            \"[00:04-00:08] Dynamic Performance.\\n\"\n            \"Camera follows @Video1 rhythmic push-pull pattern as dancer performs high-energy \"\n            \"moves. Stage lights shift to warm orange and pink. Smoke effects catch the \"\n            \"colored lighting, creating atmospheric depth.\\n\\n\"\n            \"[00:08-00:12] Finale Moment.\\n\"\n            \"Camera matches @Video1 final tilt movement as dancer strikes a powerful \"\n            \"finishing pose. All stage lights converge into a brilliant white spotlight. \"\n            \"Sparkle effects cascade down around the performer.\\n\\n\"\n            \"Maintain @Image1 character appearance exactly. Synchronized camera and \"\n            \"choreography timing from @Video1. Professional stage lighting effects.\"\n        ),\n        \"duration\": 12,\n        \"quality\": \"1080p\"\n    }\n)\n# 上記の最初の例と同じポーリングループを使用\n",[28,35424,35425,35430,35438,35450,35472,35480,35490,35501,35512,35518,35523,35528,35533,35542,35551,35559,35568,35573,35578,35587,35596,35601,35606,35615,35624,35629,35634,35643,35648,35653,35657,35667,35675,35679,35683],{"__ignoreMap":141},[145,35426,35427],{"class":147,"line":148},[145,35428,35429],{"class":174},"# M2: キャラクター + カメラムーブメント同期 — 上記の最初の例のセットアップを使用\n",[145,35431,35432,35434,35436],{"class":147,"line":166},[145,35433,6387],{"class":262},[145,35435,266],{"class":258},[145,35437,1433],{"class":262},[145,35439,35440,35442,35444,35446,35448],{"class":147,"line":178},[145,35441,6396],{"class":258},[145,35443,448],{"class":159},[145,35445,678],{"class":155},[145,35447,1445],{"class":159},[145,35449,451],{"class":262},[145,35451,35452,35454,35456,35458,35460,35462,35464,35466,35468,35470],{"class":147,"line":187},[145,35453,6409],{"class":700},[145,35455,266],{"class":258},[145,35457,684],{"class":262},[145,35459,31308],{"class":159},[145,35461,436],{"class":262},[145,35463,439],{"class":258},[145,35465,442],{"class":159},[145,35467,445],{"class":155},[145,35469,448],{"class":159},[145,35471,19396],{"class":262},[145,35473,35474,35476,35478],{"class":147,"line":372},[145,35475,6420],{"class":700},[145,35477,266],{"class":258},[145,35479,1866],{"class":262},[145,35481,35482,35484,35486,35488],{"class":147,"line":378},[145,35483,1304],{"class":159},[145,35485,436],{"class":262},[145,35487,1309],{"class":159},[145,35489,451],{"class":262},[145,35491,35492,35494,35496,35499],{"class":147,"line":384},[145,35493,2688],{"class":159},[145,35495,10692],{"class":262},[145,35497,35498],{"class":159},"\"https://example.com/stage_dancer.png\"",[145,35500,10698],{"class":262},[145,35502,35503,35505,35507,35510],{"class":147,"line":408},[145,35504,12002],{"class":159},[145,35506,10692],{"class":262},[145,35508,35509],{"class":159},"\"https://example.com/dance_movement_ref.mp4\"",[145,35511,10698],{"class":262},[145,35513,35514,35516],{"class":147,"line":419},[145,35515,1320],{"class":159},[145,35517,1323],{"class":262},[145,35519,35520],{"class":147,"line":430},[145,35521,35522],{"class":159},"            \"@Image1 dancer as the main subject. Reference @Video1 camera movement style \"\n",[145,35524,35525],{"class":147,"line":454},[145,35526,35527],{"class":159},"            \"rhythmic push-pull pan and tilt movements. The dancer choreography also \"\n",[145,35529,35530],{"class":147,"line":465},[145,35531,35532],{"class":159},"            \"references @Video1 dance moves. Performing energetically on a colorful \"\n",[145,35534,35535,35538,35540],{"class":147,"line":599},[145,35536,35537],{"class":159},"            \"LED-lit stage. Spotlights shift colors in sync with the rhythm.",[145,35539,1671],{"class":155},[145,35541,950],{"class":159},[145,35543,35544,35547,35549],{"class":147,"line":604},[145,35545,35546],{"class":159},"            \"【Style】Concert performance, dynamic stage lighting, high energy.",[145,35548,1671],{"class":155},[145,35550,950],{"class":159},[145,35552,35553,35555,35557],{"class":147,"line":610},[145,35554,33290],{"class":159},[145,35556,11966],{"class":155},[145,35558,950],{"class":159},[145,35560,35561,35564,35566],{"class":147,"line":616},[145,35562,35563],{"class":159},"            \"[00:00-00:04] Opening Sequence.",[145,35565,1671],{"class":155},[145,35567,950],{"class":159},[145,35569,35570],{"class":147,"line":622},[145,35571,35572],{"class":159},"            \"Camera starts wide showing @Image1 dancer center stage. LED lights pulse \"\n",[145,35574,35575],{"class":147,"line":627},[145,35576,35577],{"class":159},"            \"in blue and purple. Dancer begins with @Video1 opening choreography — \"\n",[145,35579,35580,35583,35585],{"class":147,"line":638},[145,35581,35582],{"class":159},"            \"fluid arm movements and spins. Camera matches @Video1 initial push-in timing.",[145,35584,11966],{"class":155},[145,35586,950],{"class":159},[145,35588,35589,35592,35594],{"class":147,"line":653},[145,35590,35591],{"class":159},"            \"[00:04-00:08] Dynamic Performance.",[145,35593,1671],{"class":155},[145,35595,950],{"class":159},[145,35597,35598],{"class":147,"line":659},[145,35599,35600],{"class":159},"            \"Camera follows @Video1 rhythmic push-pull pattern as dancer performs high-energy \"\n",[145,35602,35603],{"class":147,"line":670},[145,35604,35605],{"class":159},"            \"moves. Stage lights shift to warm orange and pink. Smoke effects catch the \"\n",[145,35607,35608,35611,35613],{"class":147,"line":697},[145,35609,35610],{"class":159},"            \"colored lighting, creating atmospheric depth.",[145,35612,11966],{"class":155},[145,35614,950],{"class":159},[145,35616,35617,35620,35622],{"class":147,"line":709},[145,35618,35619],{"class":159},"            \"[00:08-00:12] Finale Moment.",[145,35621,1671],{"class":155},[145,35623,950],{"class":159},[145,35625,35626],{"class":147,"line":715},[145,35627,35628],{"class":159},"            \"Camera matches @Video1 final tilt movement as dancer strikes a powerful \"\n",[145,35630,35631],{"class":147,"line":721},[145,35632,35633],{"class":159},"            \"finishing pose. All stage lights converge into a brilliant white spotlight. \"\n",[145,35635,35636,35639,35641],{"class":147,"line":727},[145,35637,35638],{"class":159},"            \"Sparkle effects cascade down around the performer.",[145,35640,11966],{"class":155},[145,35642,950],{"class":159},[145,35644,35645],{"class":147,"line":738},[145,35646,35647],{"class":159},"            \"Maintain @Image1 character appearance exactly. Synchronized camera and \"\n",[145,35649,35650],{"class":147,"line":743},[145,35651,35652],{"class":159},"            \"choreography timing from @Video1. Professional stage lighting effects.\"\n",[145,35654,35655],{"class":147,"line":749},[145,35656,1343],{"class":262},[145,35658,35659,35661,35663,35665],{"class":147,"line":766},[145,35660,1348],{"class":159},[145,35662,436],{"class":262},[145,35664,16229],{"class":155},[145,35666,451],{"class":262},[145,35668,35669,35671,35673],{"class":147,"line":787},[145,35670,1364],{"class":159},[145,35672,436],{"class":262},[145,35674,32541],{"class":159},[145,35676,35677],{"class":147,"line":833},[145,35678,1408],{"class":262},[145,35680,35681],{"class":147,"line":838},[145,35682,405],{"class":262},[145,35684,35685],{"class":147,"line":844},[145,35686,33433],{"class":174},[32148,35688,35690],{"id":35689},"m3-チェイスシーン-赤いコートの謎の人影","M3: チェイスシーン — 赤いコートの謎の人影",[11,35692,35693,35695],{},[23,35694,33195],{}," 赤いコートの謎の人物が都市の街路を駆け抜ける緊迫した追跡シーケンスを作成。スリラー映画のシネマトグラフィーとドラマチックな緊張感の構築を実演。",[56,35697,60,35698],{"autoPlay":58,"loop":58,"muted":58,"playsInline":58,"style":59},[62,35699],{"src":25772,"type":65},[136,35701,35703],{"className":337,"code":35702,"language":339,"meta":141,"style":141},"# M3: チェイスシーン — 上記の最初の例のセットアップを使用\nresponse = requests.post(\n    f\"{BASE_URL}/videos/generations\",\n    headers={\"Authorization\": f\"Bearer {API_KEY}\"},\n    json={\n        \"model\": \"seedance-2.0\",\n        \"image_urls\": [\"https://example.com/red_coat_figure.jpg\"],\n        \"prompt\": (\n            \"@Image1 as character reference — mysterious figure in distinctive red coat.\\n\"\n            \"【Style】Thriller cinematography, urban chase scene, dramatic shadows, high contrast.\\n\"\n            \"【Duration】12 seconds\\n\\n\"\n            \"[00:00-00:04] Shot 1: The Pursuit Begins (Wide Shot, Tracking).\\n\"\n            \"The red-coated figure sprints through narrow city alleyways at night. \"\n            \"Streetlights cast long dramatic shadows. Camera tracks from behind — we \"\n            \"see only the billowing red coat and rapid footsteps on wet pavement. \"\n            \"Tension-building audio undertones.\\n\\n\"\n            \"[00:04-00:08] Shot 2: Urban Obstacles (Medium Shot, Side Tracking).\\n\"\n            \"Figure vaults over parked cars and dodges between concrete pillars. Camera \"\n            \"follows from the side, maintaining speed. Red coat stands out against the \"\n            \"monochrome urban environment. Breathing is audible and labored.\\n\\n\"\n            \"[00:08-00:12] Shot 3: The Escape (Low Angle, Wide Shot).\\n\"\n            \"Figure reaches a fire escape and begins climbing rapidly upward. Camera \"\n            \"tilts up from below — dramatic low angle emphasizes the vertical escape. \"\n            \"Red coat flutters in the wind. City lights twinkle in the background as \"\n            \"the figure disappears into the night.\\n\\n\"\n            \"Maintain @Image1 character appearance — especially the distinctive red coat. \"\n            \"Realistic chase physics. High-contrast noir lighting. Mysterious identity \"\n            \"preserved throughout.\"\n        ),\n        \"duration\": 12,\n        \"quality\": \"1080p\"\n    }\n)\n# 上記の最初の例と同じポーリングループを使用\n",[28,35704,35705,35710,35718,35730,35752,35760,35770,35781,35787,35796,35805,35813,35822,35827,35832,35837,35846,35855,35860,35865,35874,35883,35888,35893,35898,35907,35912,35917,35922,35926,35936,35944,35948,35952],{"__ignoreMap":141},[145,35706,35707],{"class":147,"line":148},[145,35708,35709],{"class":174},"# M3: チェイスシーン — 上記の最初の例のセットアップを使用\n",[145,35711,35712,35714,35716],{"class":147,"line":166},[145,35713,6387],{"class":262},[145,35715,266],{"class":258},[145,35717,1433],{"class":262},[145,35719,35720,35722,35724,35726,35728],{"class":147,"line":178},[145,35721,6396],{"class":258},[145,35723,448],{"class":159},[145,35725,678],{"class":155},[145,35727,1445],{"class":159},[145,35729,451],{"class":262},[145,35731,35732,35734,35736,35738,35740,35742,35744,35746,35748,35750],{"class":147,"line":187},[145,35733,6409],{"class":700},[145,35735,266],{"class":258},[145,35737,684],{"class":262},[145,35739,31308],{"class":159},[145,35741,436],{"class":262},[145,35743,439],{"class":258},[145,35745,442],{"class":159},[145,35747,445],{"class":155},[145,35749,448],{"class":159},[145,35751,19396],{"class":262},[145,35753,35754,35756,35758],{"class":147,"line":372},[145,35755,6420],{"class":700},[145,35757,266],{"class":258},[145,35759,1866],{"class":262},[145,35761,35762,35764,35766,35768],{"class":147,"line":378},[145,35763,1304],{"class":159},[145,35765,436],{"class":262},[145,35767,1309],{"class":159},[145,35769,451],{"class":262},[145,35771,35772,35774,35776,35779],{"class":147,"line":384},[145,35773,2688],{"class":159},[145,35775,10692],{"class":262},[145,35777,35778],{"class":159},"\"https://example.com/red_coat_figure.jpg\"",[145,35780,10698],{"class":262},[145,35782,35783,35785],{"class":147,"line":408},[145,35784,1320],{"class":159},[145,35786,1323],{"class":262},[145,35788,35789,35792,35794],{"class":147,"line":419},[145,35790,35791],{"class":159},"            \"@Image1 as character reference — mysterious figure in distinctive red coat.",[145,35793,1671],{"class":155},[145,35795,950],{"class":159},[145,35797,35798,35801,35803],{"class":147,"line":430},[145,35799,35800],{"class":159},"            \"【Style】Thriller cinematography, urban chase scene, dramatic shadows, high contrast.",[145,35802,1671],{"class":155},[145,35804,950],{"class":159},[145,35806,35807,35809,35811],{"class":147,"line":454},[145,35808,33290],{"class":159},[145,35810,11966],{"class":155},[145,35812,950],{"class":159},[145,35814,35815,35818,35820],{"class":147,"line":465},[145,35816,35817],{"class":159},"            \"[00:00-00:04] Shot 1: The Pursuit Begins (Wide Shot, Tracking).",[145,35819,1671],{"class":155},[145,35821,950],{"class":159},[145,35823,35824],{"class":147,"line":599},[145,35825,35826],{"class":159},"            \"The red-coated figure sprints through narrow city alleyways at night. \"\n",[145,35828,35829],{"class":147,"line":604},[145,35830,35831],{"class":159},"            \"Streetlights cast long dramatic shadows. Camera tracks from behind — we \"\n",[145,35833,35834],{"class":147,"line":610},[145,35835,35836],{"class":159},"            \"see only the billowing red coat and rapid footsteps on wet pavement. \"\n",[145,35838,35839,35842,35844],{"class":147,"line":616},[145,35840,35841],{"class":159},"            \"Tension-building audio undertones.",[145,35843,11966],{"class":155},[145,35845,950],{"class":159},[145,35847,35848,35851,35853],{"class":147,"line":622},[145,35849,35850],{"class":159},"            \"[00:04-00:08] Shot 2: Urban Obstacles (Medium Shot, Side Tracking).",[145,35852,1671],{"class":155},[145,35854,950],{"class":159},[145,35856,35857],{"class":147,"line":627},[145,35858,35859],{"class":159},"            \"Figure vaults over parked cars and dodges between concrete pillars. Camera \"\n",[145,35861,35862],{"class":147,"line":638},[145,35863,35864],{"class":159},"            \"follows from the side, maintaining speed. Red coat stands out against the \"\n",[145,35866,35867,35870,35872],{"class":147,"line":653},[145,35868,35869],{"class":159},"            \"monochrome urban environment. Breathing is audible and labored.",[145,35871,11966],{"class":155},[145,35873,950],{"class":159},[145,35875,35876,35879,35881],{"class":147,"line":659},[145,35877,35878],{"class":159},"            \"[00:08-00:12] Shot 3: The Escape (Low Angle, Wide Shot).",[145,35880,1671],{"class":155},[145,35882,950],{"class":159},[145,35884,35885],{"class":147,"line":670},[145,35886,35887],{"class":159},"            \"Figure reaches a fire escape and begins climbing rapidly upward. Camera \"\n",[145,35889,35890],{"class":147,"line":697},[145,35891,35892],{"class":159},"            \"tilts up from below — dramatic low angle emphasizes the vertical escape. \"\n",[145,35894,35895],{"class":147,"line":709},[145,35896,35897],{"class":159},"            \"Red coat flutters in the wind. City lights twinkle in the background as \"\n",[145,35899,35900,35903,35905],{"class":147,"line":715},[145,35901,35902],{"class":159},"            \"the figure disappears into the night.",[145,35904,11966],{"class":155},[145,35906,950],{"class":159},[145,35908,35909],{"class":147,"line":721},[145,35910,35911],{"class":159},"            \"Maintain @Image1 character appearance — especially the distinctive red coat. \"\n",[145,35913,35914],{"class":147,"line":727},[145,35915,35916],{"class":159},"            \"Realistic chase physics. High-contrast noir lighting. Mysterious identity \"\n",[145,35918,35919],{"class":147,"line":738},[145,35920,35921],{"class":159},"            \"preserved throughout.\"\n",[145,35923,35924],{"class":147,"line":743},[145,35925,1343],{"class":262},[145,35927,35928,35930,35932,35934],{"class":147,"line":749},[145,35929,1348],{"class":159},[145,35931,436],{"class":262},[145,35933,16229],{"class":155},[145,35935,451],{"class":262},[145,35937,35938,35940,35942],{"class":147,"line":766},[145,35939,1364],{"class":159},[145,35941,436],{"class":262},[145,35943,32541],{"class":159},[145,35945,35946],{"class":147,"line":787},[145,35947,1408],{"class":262},[145,35949,35950],{"class":147,"line":833},[145,35951,405],{"class":262},[145,35953,35954],{"class":147,"line":838},[145,35955,33433],{"class":174},[32148,35957,35959],{"id":35958},"ボーナス街頭群衆チェイスシーン","ボーナス：街頭群衆チェイスシーン",[11,35961,35962,35964],{},[23,35963,33195],{}," 群衆が走るシーンの追加例。複数のキャラクターと都市のエネルギーが必要なアクションシーケンスに最適。",[56,35966,60,35967],{"autoPlay":58,"loop":58,"muted":58,"playsInline":58,"style":59},[62,35968],{"src":35969,"type":65},"https://cdn.evolink.ai/seedance2api/%E8%A1%97%E5%A4%B4%E4%B8%80%E5%A0%86%E4%BA%BA%E5%9C%A8%E8%B7%91.mp4",[136,35971,35973],{"className":337,"code":35972,"language":339,"meta":141,"style":141},"# ボーナス: 街頭群衆チェイスシーン — 上記の最初の例のセットアップを使用\nresponse = requests.post(\n    f\"{BASE_URL}/videos/generations\",\n    headers={\"Authorization\": f\"Bearer {API_KEY}\"},\n    json={\n        \"model\": \"seedance-2.0\",\n        \"image_urls\": [\"https://example.com/street_crowd.jpg\"],\n        \"prompt\": (\n            \"@Image1 as scene reference for crowd composition and urban environment.\\n\"\n            \"【Style】Action thriller, handheld camera, urgent pacing, realistic movement.\\n\"\n            \"【Duration】8 seconds\\n\\n\"\n            \"[00:00-00:03] Mass Movement Begins.\\n\"\n            \"A crowd of people suddenly breaks into a run down a busy street. Camera \"\n            \"is handheld, in the middle of the action. Multiple individuals in different \"\n            \"clothing all moving in the same direction with urgent purpose.\\n\\n\"\n            \"[00:03-00:06] Chaos and Urgency.\\n\"\n            \"Camera weaves through the running crowd. Close-ups on determined faces, \"\n            \"flying hair, scattered personal items. People help each other maintain \"\n            \"pace. Urban storefronts blur past in the background.\\n\\n\"\n            \"[00:06-00:08] Dispersal.\\n\"\n            \"The crowd reaches an intersection and scatters in different directions. \"\n            \"Camera tilts up to show the scope of the mass movement from a high angle \"\n            \"as people disappear down various streets.\\n\\n\"\n            \"Realistic crowd physics and natural human movement. Handheld camera shake \"\n            \"for authenticity. Urban street environment based on @Image1.\"\n        ),\n        \"duration\": 8,\n        \"quality\": \"1080p\"\n    }\n)\n# 上記の最初の例と同じポーリングループを使用\n",[28,35974,35975,35980,35988,36000,36022,36030,36040,36051,36057,36066,36075,36084,36093,36098,36103,36112,36121,36126,36131,36140,36149,36154,36159,36168,36173,36178,36182,36192,36200,36204,36208],{"__ignoreMap":141},[145,35976,35977],{"class":147,"line":148},[145,35978,35979],{"class":174},"# ボーナス: 街頭群衆チェイスシーン — 上記の最初の例のセットアップを使用\n",[145,35981,35982,35984,35986],{"class":147,"line":166},[145,35983,6387],{"class":262},[145,35985,266],{"class":258},[145,35987,1433],{"class":262},[145,35989,35990,35992,35994,35996,35998],{"class":147,"line":178},[145,35991,6396],{"class":258},[145,35993,448],{"class":159},[145,35995,678],{"class":155},[145,35997,1445],{"class":159},[145,35999,451],{"class":262},[145,36001,36002,36004,36006,36008,36010,36012,36014,36016,36018,36020],{"class":147,"line":187},[145,36003,6409],{"class":700},[145,36005,266],{"class":258},[145,36007,684],{"class":262},[145,36009,31308],{"class":159},[145,36011,436],{"class":262},[145,36013,439],{"class":258},[145,36015,442],{"class":159},[145,36017,445],{"class":155},[145,36019,448],{"class":159},[145,36021,19396],{"class":262},[145,36023,36024,36026,36028],{"class":147,"line":372},[145,36025,6420],{"class":700},[145,36027,266],{"class":258},[145,36029,1866],{"class":262},[145,36031,36032,36034,36036,36038],{"class":147,"line":378},[145,36033,1304],{"class":159},[145,36035,436],{"class":262},[145,36037,1309],{"class":159},[145,36039,451],{"class":262},[145,36041,36042,36044,36046,36049],{"class":147,"line":384},[145,36043,2688],{"class":159},[145,36045,10692],{"class":262},[145,36047,36048],{"class":159},"\"https://example.com/street_crowd.jpg\"",[145,36050,10698],{"class":262},[145,36052,36053,36055],{"class":147,"line":408},[145,36054,1320],{"class":159},[145,36056,1323],{"class":262},[145,36058,36059,36062,36064],{"class":147,"line":419},[145,36060,36061],{"class":159},"            \"@Image1 as scene reference for crowd composition and urban environment.",[145,36063,1671],{"class":155},[145,36065,950],{"class":159},[145,36067,36068,36071,36073],{"class":147,"line":430},[145,36069,36070],{"class":159},"            \"【Style】Action thriller, handheld camera, urgent pacing, realistic movement.",[145,36072,1671],{"class":155},[145,36074,950],{"class":159},[145,36076,36077,36080,36082],{"class":147,"line":454},[145,36078,36079],{"class":159},"            \"【Duration】8 seconds",[145,36081,11966],{"class":155},[145,36083,950],{"class":159},[145,36085,36086,36089,36091],{"class":147,"line":465},[145,36087,36088],{"class":159},"            \"[00:00-00:03] Mass Movement Begins.",[145,36090,1671],{"class":155},[145,36092,950],{"class":159},[145,36094,36095],{"class":147,"line":599},[145,36096,36097],{"class":159},"            \"A crowd of people suddenly breaks into a run down a busy street. Camera \"\n",[145,36099,36100],{"class":147,"line":604},[145,36101,36102],{"class":159},"            \"is handheld, in the middle of the action. Multiple individuals in different \"\n",[145,36104,36105,36108,36110],{"class":147,"line":610},[145,36106,36107],{"class":159},"            \"clothing all moving in the same direction with urgent purpose.",[145,36109,11966],{"class":155},[145,36111,950],{"class":159},[145,36113,36114,36117,36119],{"class":147,"line":616},[145,36115,36116],{"class":159},"            \"[00:03-00:06] Chaos and Urgency.",[145,36118,1671],{"class":155},[145,36120,950],{"class":159},[145,36122,36123],{"class":147,"line":622},[145,36124,36125],{"class":159},"            \"Camera weaves through the running crowd. Close-ups on determined faces, \"\n",[145,36127,36128],{"class":147,"line":627},[145,36129,36130],{"class":159},"            \"flying hair, scattered personal items. People help each other maintain \"\n",[145,36132,36133,36136,36138],{"class":147,"line":638},[145,36134,36135],{"class":159},"            \"pace. Urban storefronts blur past in the background.",[145,36137,11966],{"class":155},[145,36139,950],{"class":159},[145,36141,36142,36145,36147],{"class":147,"line":653},[145,36143,36144],{"class":159},"            \"[00:06-00:08] Dispersal.",[145,36146,1671],{"class":155},[145,36148,950],{"class":159},[145,36150,36151],{"class":147,"line":659},[145,36152,36153],{"class":159},"            \"The crowd reaches an intersection and scatters in different directions. \"\n",[145,36155,36156],{"class":147,"line":670},[145,36157,36158],{"class":159},"            \"Camera tilts up to show the scope of the mass movement from a high angle \"\n",[145,36160,36161,36164,36166],{"class":147,"line":697},[145,36162,36163],{"class":159},"            \"as people disappear down various streets.",[145,36165,11966],{"class":155},[145,36167,950],{"class":159},[145,36169,36170],{"class":147,"line":709},[145,36171,36172],{"class":159},"            \"Realistic crowd physics and natural human movement. Handheld camera shake \"\n",[145,36174,36175],{"class":147,"line":715},[145,36176,36177],{"class":159},"            \"for authenticity. Urban street environment based on @Image1.\"\n",[145,36179,36180],{"class":147,"line":721},[145,36181,1343],{"class":262},[145,36183,36184,36186,36188,36190],{"class":147,"line":727},[145,36185,1348],{"class":159},[145,36187,436],{"class":262},[145,36189,3697],{"class":155},[145,36191,451],{"class":262},[145,36193,36194,36196,36198],{"class":147,"line":738},[145,36195,1364],{"class":159},[145,36197,436],{"class":262},[145,36199,32541],{"class":159},[145,36201,36202],{"class":147,"line":743},[145,36203,1408],{"class":262},[145,36205,36206],{"class":147,"line":749},[145,36207,405],{"class":262},[145,36209,36210],{"class":147,"line":766},[145,36211,33433],{"class":174},[92,36213,36214],{"id":36214},"動画延長テンプレート",[32148,36216,36218],{"id":36217},"e1-前方延長とブランドフィナーレ","E1: 前方延長とブランドフィナーレ",[11,36220,36221,36223],{},[23,36222,33195],{}," 既存の動画に新しいシーンとプロフェッショナルなブランド結末（ロゴとタグライン付き）を追加して延長します。",[136,36225,36227],{"className":337,"code":36226,"language":339,"meta":141,"style":141},"# E1: 前方延長とブランドフィナーレ — 上記の最初の例のセットアップを使用\nresponse = requests.post(\n    f\"{BASE_URL}/videos/generations\",\n    headers={\"Authorization\": f\"Bearer {API_KEY}\"},\n    json={\n        \"model\": \"seedance-2.0\",\n        \"video_urls\": [\"https://example.com/existing_video.mp4\"],\n        \"prompt\": (\n            \"Extend @Video1 forward with 8 additional seconds.\\n\"\n            \"【Style】Match @Video1 style exactly.\\n\"\n            \"【Duration】8 seconds extension\\n\\n\"\n            \"Continue the existing narrative: if it ends with product showcase, add lifestyle usage scene. \"\n            \"Show the product being used in natural environment with satisfied users. \"\n            \"Final 2 seconds: elegant brand logo animation with company tagline appearing below. \"\n            \"Maintain consistent lighting and color grading throughout. \"\n            \"Smooth transition from original content to extension.\"\n        ),\n        \"duration\": 8,\n        \"quality\": \"1080p\"\n    }\n)\n# 上記の最初の例と同じポーリングループを使用\n",[28,36228,36229,36234,36242,36254,36276,36284,36294,36305,36311,36320,36329,36338,36343,36348,36353,36358,36363,36367,36377,36385,36389,36393],{"__ignoreMap":141},[145,36230,36231],{"class":147,"line":148},[145,36232,36233],{"class":174},"# E1: 前方延長とブランドフィナーレ — 上記の最初の例のセットアップを使用\n",[145,36235,36236,36238,36240],{"class":147,"line":166},[145,36237,6387],{"class":262},[145,36239,266],{"class":258},[145,36241,1433],{"class":262},[145,36243,36244,36246,36248,36250,36252],{"class":147,"line":178},[145,36245,6396],{"class":258},[145,36247,448],{"class":159},[145,36249,678],{"class":155},[145,36251,1445],{"class":159},[145,36253,451],{"class":262},[145,36255,36256,36258,36260,36262,36264,36266,36268,36270,36272,36274],{"class":147,"line":187},[145,36257,6409],{"class":700},[145,36259,266],{"class":258},[145,36261,684],{"class":262},[145,36263,31308],{"class":159},[145,36265,436],{"class":262},[145,36267,439],{"class":258},[145,36269,442],{"class":159},[145,36271,445],{"class":155},[145,36273,448],{"class":159},[145,36275,19396],{"class":262},[145,36277,36278,36280,36282],{"class":147,"line":372},[145,36279,6420],{"class":700},[145,36281,266],{"class":258},[145,36283,1866],{"class":262},[145,36285,36286,36288,36290,36292],{"class":147,"line":378},[145,36287,1304],{"class":159},[145,36289,436],{"class":262},[145,36291,1309],{"class":159},[145,36293,451],{"class":262},[145,36295,36296,36298,36300,36303],{"class":147,"line":384},[145,36297,12002],{"class":159},[145,36299,10692],{"class":262},[145,36301,36302],{"class":159},"\"https://example.com/existing_video.mp4\"",[145,36304,10698],{"class":262},[145,36306,36307,36309],{"class":147,"line":408},[145,36308,1320],{"class":159},[145,36310,1323],{"class":262},[145,36312,36313,36316,36318],{"class":147,"line":419},[145,36314,36315],{"class":159},"            \"Extend @Video1 forward with 8 additional seconds.",[145,36317,1671],{"class":155},[145,36319,950],{"class":159},[145,36321,36322,36325,36327],{"class":147,"line":430},[145,36323,36324],{"class":159},"            \"【Style】Match @Video1 style exactly.",[145,36326,1671],{"class":155},[145,36328,950],{"class":159},[145,36330,36331,36334,36336],{"class":147,"line":454},[145,36332,36333],{"class":159},"            \"【Duration】8 seconds extension",[145,36335,11966],{"class":155},[145,36337,950],{"class":159},[145,36339,36340],{"class":147,"line":465},[145,36341,36342],{"class":159},"            \"Continue the existing narrative: if it ends with product showcase, add lifestyle usage scene. \"\n",[145,36344,36345],{"class":147,"line":599},[145,36346,36347],{"class":159},"            \"Show the product being used in natural environment with satisfied users. \"\n",[145,36349,36350],{"class":147,"line":604},[145,36351,36352],{"class":159},"            \"Final 2 seconds: elegant brand logo animation with company tagline appearing below. \"\n",[145,36354,36355],{"class":147,"line":610},[145,36356,36357],{"class":159},"            \"Maintain consistent lighting and color grading throughout. \"\n",[145,36359,36360],{"class":147,"line":616},[145,36361,36362],{"class":159},"            \"Smooth transition from original content to extension.\"\n",[145,36364,36365],{"class":147,"line":622},[145,36366,1343],{"class":262},[145,36368,36369,36371,36373,36375],{"class":147,"line":627},[145,36370,1348],{"class":159},[145,36372,436],{"class":262},[145,36374,3697],{"class":155},[145,36376,451],{"class":262},[145,36378,36379,36381,36383],{"class":147,"line":638},[145,36380,1364],{"class":159},[145,36382,436],{"class":262},[145,36384,32541],{"class":159},[145,36386,36387],{"class":147,"line":653},[145,36388,1408],{"class":262},[145,36390,36391],{"class":147,"line":659},[145,36392,405],{"class":262},[145,36394,36395],{"class":147,"line":670},[145,36396,33433],{"class":174},[32148,36398,36400],{"id":36399},"e2-後方延長とバックストーリー","E2: 後方延長とバックストーリー",[11,36402,36403,36405],{},[23,36404,33195],{}," 既存の動画コンテンツの前にコンテキストとセットアップを追加し、より完成度の高いナラティブを作成します。",[136,36407,36409],{"className":337,"code":36408,"language":339,"meta":141,"style":141},"# E2: 後方延長とバックストーリー — 上記の最初の例のセットアップを使用\nresponse = requests.post(\n    f\"{BASE_URL}/videos/generations\",\n    headers={\"Authorization\": f\"Bearer {API_KEY}\"},\n    json={\n        \"model\": \"seedance-2.0\",\n        \"video_urls\": [\"https://example.com/main_video.mp4\"],\n        \"prompt\": (\n            \"Create 6 seconds of backstory before @Video1 begins.\\n\"\n            \"【Style】Match @Video1 visual style exactly.\\n\"\n            \"【Duration】6 seconds extension\\n\\n\"\n            \"If @Video1 shows action, show the calm setup or preparation moment. \"\n            \"If @Video1 shows a reveal, show the mystery or anticipation beforehand. \"\n            \"Match the visual style, lighting, and character appearances exactly. \"\n            \"Create narrative tension that builds toward the existing video's opening moment. \"\n            \"Seamless transition into original content.\"\n        ),\n        \"duration\": 6,\n        \"quality\": \"1080p\"\n    }\n)\n# 上記の最初の例と同じポーリングループを使用\n",[28,36410,36411,36416,36424,36436,36458,36466,36476,36487,36493,36502,36511,36520,36525,36530,36535,36540,36545,36549,36559,36567,36571,36575],{"__ignoreMap":141},[145,36412,36413],{"class":147,"line":148},[145,36414,36415],{"class":174},"# E2: 後方延長とバックストーリー — 上記の最初の例のセットアップを使用\n",[145,36417,36418,36420,36422],{"class":147,"line":166},[145,36419,6387],{"class":262},[145,36421,266],{"class":258},[145,36423,1433],{"class":262},[145,36425,36426,36428,36430,36432,36434],{"class":147,"line":178},[145,36427,6396],{"class":258},[145,36429,448],{"class":159},[145,36431,678],{"class":155},[145,36433,1445],{"class":159},[145,36435,451],{"class":262},[145,36437,36438,36440,36442,36444,36446,36448,36450,36452,36454,36456],{"class":147,"line":187},[145,36439,6409],{"class":700},[145,36441,266],{"class":258},[145,36443,684],{"class":262},[145,36445,31308],{"class":159},[145,36447,436],{"class":262},[145,36449,439],{"class":258},[145,36451,442],{"class":159},[145,36453,445],{"class":155},[145,36455,448],{"class":159},[145,36457,19396],{"class":262},[145,36459,36460,36462,36464],{"class":147,"line":372},[145,36461,6420],{"class":700},[145,36463,266],{"class":258},[145,36465,1866],{"class":262},[145,36467,36468,36470,36472,36474],{"class":147,"line":378},[145,36469,1304],{"class":159},[145,36471,436],{"class":262},[145,36473,1309],{"class":159},[145,36475,451],{"class":262},[145,36477,36478,36480,36482,36485],{"class":147,"line":384},[145,36479,12002],{"class":159},[145,36481,10692],{"class":262},[145,36483,36484],{"class":159},"\"https://example.com/main_video.mp4\"",[145,36486,10698],{"class":262},[145,36488,36489,36491],{"class":147,"line":408},[145,36490,1320],{"class":159},[145,36492,1323],{"class":262},[145,36494,36495,36498,36500],{"class":147,"line":419},[145,36496,36497],{"class":159},"            \"Create 6 seconds of backstory before @Video1 begins.",[145,36499,1671],{"class":155},[145,36501,950],{"class":159},[145,36503,36504,36507,36509],{"class":147,"line":430},[145,36505,36506],{"class":159},"            \"【Style】Match @Video1 visual style exactly.",[145,36508,1671],{"class":155},[145,36510,950],{"class":159},[145,36512,36513,36516,36518],{"class":147,"line":454},[145,36514,36515],{"class":159},"            \"【Duration】6 seconds extension",[145,36517,11966],{"class":155},[145,36519,950],{"class":159},[145,36521,36522],{"class":147,"line":465},[145,36523,36524],{"class":159},"            \"If @Video1 shows action, show the calm setup or preparation moment. \"\n",[145,36526,36527],{"class":147,"line":599},[145,36528,36529],{"class":159},"            \"If @Video1 shows a reveal, show the mystery or anticipation beforehand. \"\n",[145,36531,36532],{"class":147,"line":604},[145,36533,36534],{"class":159},"            \"Match the visual style, lighting, and character appearances exactly. \"\n",[145,36536,36537],{"class":147,"line":610},[145,36538,36539],{"class":159},"            \"Create narrative tension that builds toward the existing video's opening moment. \"\n",[145,36541,36542],{"class":147,"line":616},[145,36543,36544],{"class":159},"            \"Seamless transition into original content.\"\n",[145,36546,36547],{"class":147,"line":622},[145,36548,1343],{"class":262},[145,36550,36551,36553,36555,36557],{"class":147,"line":627},[145,36552,1348],{"class":159},[145,36554,436],{"class":262},[145,36556,33108],{"class":155},[145,36558,451],{"class":262},[145,36560,36561,36563,36565],{"class":147,"line":638},[145,36562,1364],{"class":159},[145,36564,436],{"class":262},[145,36566,32541],{"class":159},[145,36568,36569],{"class":147,"line":653},[145,36570,1408],{"class":262},[145,36572,36573],{"class":147,"line":659},[145,36574,405],{"class":262},[145,36576,36577],{"class":147,"line":670},[145,36578,33433],{"class":174},[18,36580,36581],{},[11,36582,36583],{},[37,36584,36586],{"href":211,"rel":36585},[41],"EvoLink API キーで上級テンプレートを実行しましょう。無料登録はこちら →",[45,36588],{},[48,36590,36592],{"id":36591},"よくある-seedance-プロンプトの間違いと修正方法","よくある Seedance プロンプトの間違いと修正方法",[2037,36594,36595,36611],{},[2040,36596,36597],{},[2043,36598,36599,36602,36605,36608],{},[2046,36600,36601],{},"#",[2046,36603,36604],{},"間違い",[2046,36606,36607],{},"失敗する理由",[2046,36609,36610],{},"修正方法",[2053,36612,36613,36629,36648,36670,36686,36702,36718,36734,36750,36766],{},[2043,36614,36615,36617,36623,36626],{},[2058,36616,5308],{},[2058,36618,36619,36622],{},[23,36620,36621],{},"曖昧すぎる"," — 「犬のいい動画」",[2058,36624,36625],{},"モデルが犬種、アクション、カメラ、スタイルを推測",[2058,36627,36628],{},"「ゴールデンレトリバーがフリスビーを空中キャッチ、スローモーションの横アングル、公園、晴天」",[2043,36630,36631,36633,36642,36645],{},[2058,36632,5289],{},[2058,36634,36635,36638,36639,36641],{},[23,36636,36637],{},"@tag 番号の間違い"," — 画像を2枚しかアップロードしていないのに ",[28,36640,2922],{}," を使用",[2058,36643,36644],{},"存在しないファイルを参照；生成が失敗または無視される",[2058,36646,36647],{},"アップロード順を確認；タグは各タイプ内で1から始まる連番",[2043,36649,36650,36652,36658,36661],{},[2058,36651,4927],{},[2058,36653,36654,36657],{},[23,36655,36656],{},"制約条件の欠落"," — 尺や解像度を指定しない",[2058,36659,36660],{},"モデルのデフォルトがニーズに合わない可能性",[2058,36662,36663,36664,3620,36666,36669],{},"プロンプトテキストと API パラメータの両方で ",[28,36665,1776],{},[28,36667,36668],{},"resolution"," を必ず指定",[2043,36671,36672,36674,36680,36683],{},[2058,36673,3997],{},[2058,36675,36676,36679],{},[23,36677,36678],{},"モダリティの矛盾"," — 画像は昼間なのに、プロンプトで「暗い夜景」と指示",[2058,36681,36682],{},"モデルが混在した信号を受け取り、照明が不整合に",[2058,36684,36685],{},"プロンプトの記述を参照コンテンツと一致させる",[2043,36687,36688,36690,36696,36699],{},[2058,36689,1353],{},[2058,36691,36692,36695],{},[23,36693,36694],{},"プロンプトの過負荷"," — あらゆる微細な詳細を200語以上で記述",[2058,36697,36698],{},"モデルの優先順位付けが不適切に；重要な指示が希釈される",[2058,36700,36701],{},"プロンプトは150語以内に；テキストではなく参照ファイルでビジュアルの詳細を伝える",[2043,36703,36704,36706,36712,36715],{},[2058,36705,33108],{},[2058,36707,36708,36711],{},[23,36709,36710],{},"カメラ指示なし"," — シーンを記述するがカメラの動きを指定しない",[2058,36713,36714],{},"静止またはランダムに動く出力に",[2058,36716,36717],{},"明示的なカメラ指示を追加：「スロードリーイン」や「静止ワイドショット」など",[2043,36719,36720,36722,36728,36731],{},[2058,36721,33140],{},[2058,36723,36724,36727],{},[23,36725,36726],{},"リアルな顔写真のアップロード"," — 実在の人物の顔写真をアップロード",[2058,36729,36730],{},"コンプライアンスフィルターでブロック；リクエストが拒否",[2058,36732,36733],{},"イラスト風、スタイライズド、またはフォトリアリスティックでないキャラクター参照を使用",[2043,36735,36736,36738,36744,36747],{},[2058,36737,3697],{},[2058,36739,36740,36743],{},[23,36741,36742],{},"ファイル上限の超過"," — 画像を10枚アップロード",[2058,36745,36746],{},"最大は画像9枚；リクエストが拒否される",[2058,36748,36749],{},"上限を守る：画像9枚以下、動画3本以下、音声3ファイル以下、合計12以下",[2043,36751,36752,36754,36760,36763],{},[2058,36753,30386],{},[2058,36755,36756,36759],{},[23,36757,36758],{},"スタイルアンカーなし"," — 具体的な参照なしに汎用的な「シネマティック」を使用",[2058,36761,36762],{},"出力が汎用的で焦点が定まらない",[2058,36764,36765],{},"具体的な監督、映画、アートスタイルに紐付ける：「Denis Villeneuve SF大作」や「ゴッホ後期印象派」",[2043,36767,36768,36770,36776,36779],{},[2058,36769,536],{},[2058,36771,36772,36775],{},[23,36773,36774],{},"タイムコードなし"," — ショットスクリプトではなく散文で記述",[2058,36777,36778],{},"アクションが尺全体に予測不可能に分散",[2058,36780,36781,36783],{},[28,36782,32124],{}," タイムコードで各アクションのタイミングを正確に制御",[11,36785,36786,36787,1261],{},"詳細なエラーハンドリングパターンとリトライロジックについては、",[37,36788,36789],{"href":14209},"API ドキュメント",[45,36791],{},[48,36793,36795],{"id":36794},"api-開発者向けプロンプトエンジニアリングのベストプラクティス","API 開発者向けプロンプトエンジニアリングのベストプラクティス",[92,36797,36798],{"id":36798},"バッチ生成のためにプロンプトをテンプレート化する",[11,36800,36801],{},"大量の動画を生成する場合、変数付きの再利用可能なプロンプトテンプレートを定義します：",[136,36803,36805],{"className":337,"code":36804,"language":339,"meta":141,"style":141},"PRODUCT_TEMPLATE = (\n    \"@Image1 as first frame.\\n\"\n    \"【Style】{style}\\n\"\n    \"【Duration】{duration} seconds\\n\\n\"\n    \"[00:00-00:03] Product slowly begins rotating clockwise. \"\n    \"{lighting_description}. Every texture detail remains razor-sharp.\\n\\n\"\n    \"[00:03-00:06] Rotation continues to 180 degrees. Camera subtly lowers angle \"\n    \"to reveal the product's profile.\\n\\n\"\n    \"[00:06-{end_tc}] Rotation slows to a stop at the most photogenic angle. \"\n    \"Clean, minimal, premium.\\n\\n\"\n    \"Maintain exact product proportions from @Image1. {background}. Commercial-grade lighting.\"\n)\n\n# Generate multiple product videos\nproducts = [\n    {\"style\": \"Clean white infinity cove, premium commercial\",\n     \"duration\": 8, \"end_tc\": \"00:08\",\n     \"lighting_description\": \"Soft studio lighting creates a gentle gradient\",\n     \"background\": \"White background throughout\"},\n    {\"style\": \"Warm wooden surface, artisan craft aesthetic\",\n     \"duration\": 10, \"end_tc\": \"00:10\",\n     \"lighting_description\": \"Warm golden spotlight from above\",\n     \"background\": \"Natural wood grain texture visible\"},\n]\n\nfor product in products:\n    prompt = PRODUCT_TEMPLATE.format(**product)\n    # Submit to API using the prompt...\n",[28,36806,36807,36816,36825,36835,36850,36855,36870,36875,36884,36895,36904,36915,36919,36923,36928,36936,36949,36970,36982,36994,37007,37026,37037,37048,37052,37056,37067,37085],{"__ignoreMap":141},[145,36808,36809,36812,36814],{"class":147,"line":148},[145,36810,36811],{"class":155},"PRODUCT_TEMPLATE",[145,36813,390],{"class":258},[145,36815,19502],{"class":262},[145,36817,36818,36821,36823],{"class":147,"line":166},[145,36819,36820],{"class":159},"    \"@Image1 as first frame.",[145,36822,1671],{"class":155},[145,36824,950],{"class":159},[145,36826,36827,36830,36833],{"class":147,"line":178},[145,36828,36829],{"class":159},"    \"【Style】",[145,36831,36832],{"class":155},"{style}\\n",[145,36834,950],{"class":159},[145,36836,36837,36840,36843,36846,36848],{"class":147,"line":187},[145,36838,36839],{"class":159},"    \"【Duration】",[145,36841,36842],{"class":155},"{duration}",[145,36844,36845],{"class":159}," seconds",[145,36847,11966],{"class":155},[145,36849,950],{"class":159},[145,36851,36852],{"class":147,"line":372},[145,36853,36854],{"class":159},"    \"[00:00-00:03] Product slowly begins rotating clockwise. \"\n",[145,36856,36857,36860,36863,36866,36868],{"class":147,"line":378},[145,36858,36859],{"class":159},"    \"",[145,36861,36862],{"class":155},"{lighting_description}",[145,36864,36865],{"class":159},". Every texture detail remains razor-sharp.",[145,36867,11966],{"class":155},[145,36869,950],{"class":159},[145,36871,36872],{"class":147,"line":384},[145,36873,36874],{"class":159},"    \"[00:03-00:06] Rotation continues to 180 degrees. Camera subtly lowers angle \"\n",[145,36876,36877,36880,36882],{"class":147,"line":408},[145,36878,36879],{"class":159},"    \"to reveal the product's profile.",[145,36881,11966],{"class":155},[145,36883,950],{"class":159},[145,36885,36886,36889,36892],{"class":147,"line":419},[145,36887,36888],{"class":159},"    \"[00:06-",[145,36890,36891],{"class":155},"{end_tc}",[145,36893,36894],{"class":159},"] Rotation slows to a stop at the most photogenic angle. \"\n",[145,36896,36897,36900,36902],{"class":147,"line":430},[145,36898,36899],{"class":159},"    \"Clean, minimal, premium.",[145,36901,11966],{"class":155},[145,36903,950],{"class":159},[145,36905,36906,36909,36912],{"class":147,"line":454},[145,36907,36908],{"class":159},"    \"Maintain exact product proportions from @Image1. ",[145,36910,36911],{"class":155},"{background}",[145,36913,36914],{"class":159},". Commercial-grade lighting.\"\n",[145,36916,36917],{"class":147,"line":465},[145,36918,405],{"class":262},[145,36920,36921],{"class":147,"line":599},[145,36922,375],{"emptyLinePlaceholder":58},[145,36924,36925],{"class":147,"line":604},[145,36926,36927],{"class":174},"# Generate multiple product videos\n",[145,36929,36930,36932,36934],{"class":147,"line":610},[145,36931,28668],{"class":262},[145,36933,266],{"class":258},[145,36935,8725],{"class":262},[145,36937,36938,36940,36942,36944,36947],{"class":147,"line":616},[145,36939,19368],{"class":262},[145,36941,21038],{"class":159},[145,36943,436],{"class":262},[145,36945,36946],{"class":159},"\"Clean white infinity cove, premium commercial\"",[145,36948,451],{"class":262},[145,36950,36951,36954,36956,36958,36960,36963,36965,36968],{"class":147,"line":622},[145,36952,36953],{"class":159},"     \"duration\"",[145,36955,436],{"class":262},[145,36957,3697],{"class":155},[145,36959,399],{"class":262},[145,36961,36962],{"class":159},"\"end_tc\"",[145,36964,436],{"class":262},[145,36966,36967],{"class":159},"\"00:08\"",[145,36969,451],{"class":262},[145,36971,36972,36975,36977,36980],{"class":147,"line":627},[145,36973,36974],{"class":159},"     \"lighting_description\"",[145,36976,436],{"class":262},[145,36978,36979],{"class":159},"\"Soft studio lighting creates a gentle gradient\"",[145,36981,451],{"class":262},[145,36983,36984,36987,36989,36992],{"class":147,"line":638},[145,36985,36986],{"class":159},"     \"background\"",[145,36988,436],{"class":262},[145,36990,36991],{"class":159},"\"White background throughout\"",[145,36993,19396],{"class":262},[145,36995,36996,36998,37000,37002,37005],{"class":147,"line":653},[145,36997,19368],{"class":262},[145,36999,21038],{"class":159},[145,37001,436],{"class":262},[145,37003,37004],{"class":159},"\"Warm wooden surface, artisan craft aesthetic\"",[145,37006,451],{"class":262},[145,37008,37009,37011,37013,37015,37017,37019,37021,37024],{"class":147,"line":659},[145,37010,36953],{"class":159},[145,37012,436],{"class":262},[145,37014,536],{"class":155},[145,37016,399],{"class":262},[145,37018,36962],{"class":159},[145,37020,436],{"class":262},[145,37022,37023],{"class":159},"\"00:10\"",[145,37025,451],{"class":262},[145,37027,37028,37030,37032,37035],{"class":147,"line":670},[145,37029,36974],{"class":159},[145,37031,436],{"class":262},[145,37033,37034],{"class":159},"\"Warm golden spotlight from above\"",[145,37036,451],{"class":262},[145,37038,37039,37041,37043,37046],{"class":147,"line":697},[145,37040,36986],{"class":159},[145,37042,436],{"class":262},[145,37044,37045],{"class":159},"\"Natural wood grain texture visible\"",[145,37047,19396],{"class":262},[145,37049,37050],{"class":147,"line":709},[145,37051,763],{"class":262},[145,37053,37054],{"class":147,"line":715},[145,37055,375],{"emptyLinePlaceholder":58},[145,37057,37058,37060,37063,37065],{"class":147,"line":721},[145,37059,8088],{"class":258},[145,37061,37062],{"class":262}," product ",[145,37064,1180],{"class":258},[145,37066,28758],{"class":262},[145,37068,37069,37072,37074,37077,37080,37082],{"class":147,"line":727},[145,37070,37071],{"class":262},"    prompt ",[145,37073,266],{"class":258},[145,37075,37076],{"class":155}," PRODUCT_TEMPLATE",[145,37078,37079],{"class":262},".format(",[145,37081,16618],{"class":258},[145,37083,37084],{"class":262},"product)\n",[145,37086,37087],{"class":147,"line":738},[145,37088,37089],{"class":174},"    # Submit to API using the prompt...\n",[11,37091,37092],{},"このアプローチはプロンプトの一貫性を保ち、A/Bテストを容易にします。",[92,37094,37095],{"id":37095},"複雑なシーンにはショットスクリプト形式を使用する",[11,37097,37098],{},"5秒を超える動画や複数のアクションを含む動画には、ショットスクリプト形式を使用します：",[70,37100,37101,37113,37121,37127,37133],{},[73,37102,37103,1061,37106,3620,37109,37112],{},[23,37104,37105],{},"スタイルと尺を冒頭で宣言",[28,37107,37108],{},"【Style】",[28,37110,37111],{},"【Duration】"," で指定",[73,37114,37115,1061,37118,37120],{},[23,37116,37117],{},"3～5秒のセグメントに分割",[28,37119,32124],{}," タイムコードを使用",[73,37122,37123,37126],{},[23,37124,37125],{},"各ショットに名前を付ける"," — その機能を明記：「Shot 1: The Reveal」",[73,37128,37129,37132],{},[23,37130,37131],{},"物理的な詳細を追加"," — 抽象的な概念ではなく、実際に起こること（水しぶき、砂塵が舞うなど）を記述",[73,37134,37135,37138],{},[23,37136,37137],{},"制約条件で締めくくる"," — 一貫性ルール、パレットの注意事項、物理要件",[92,37140,37141],{"id":37141},"複数世代にわたるキャラクターの一貫性を維持する",[11,37143,37144],{},"同じキャラクターを複数の動画で維持するには：",[70,37146,37147,37154,37160],{},[73,37148,37149,1061,37152,37112],{},[23,37150,37151],{},"すべてのリクエストで同じ参照画像を使用",[28,37153,3021],{},[73,37155,37156,37159],{},[23,37157,37158],{},"明示的な外見記述をプロンプトに含める"," — 画像参照を使用している場合でも「同じ赤いジャケット、短い黒髪」のように記述",[73,37161,37162,37165],{},[23,37163,37164],{},"順次生成する"," — 動画Nの最終フレームを動画N+1の最初のフレーム画像として使用",[11,37167,37168,37169,37172],{},"バッチ生成やキャラクターロックを含む高度なマルチショット一貫性パターンについては、",[37,37170,37171],{"href":3381},"画像から動画ガイド","で詳しく解説しています。",[92,37174,37175],{"id":37175},"コストを最適化する",[11,37177,37178],{},"動画参照はテキストのみや画像のみのプロンプトと比較して生成コストが増加します。以下の判断基準を使用してください：",[96,37180,37181,37186,37192],{},[73,37182,37183,37185],{},[23,37184,30246],{}," — 最も安価；汎用的なシーンや参照素材がない場合に使用",[73,37187,37188,37191],{},[23,37189,37190],{},"画像参照"," — 中程度のコスト；キャラクターやシーンの一貫性が必要な場合に使用",[73,37193,37194,37197],{},[23,37195,37196],{},"動画参照"," — 最もコストが高い；カメラ複製やモーション転写が具体的に必要な場合のみ使用",[18,37199,37200],{},[11,37201,37202,37203,37207],{},"正確な料金は解像度と尺によって異なります。最新の料金は ",[37,37204,22729],{"href":37205,"rel":37206},"https://evolink.ai/#pricing",[41],"をご確認ください（2026年2月時点）。",[92,37209,37210],{"id":37210},"プロンプトをバージョン管理する",[11,37212,37213],{},"プロンプトをコードと同様に扱いましょう。メタデータ付きでバージョン管理に保存します：",[136,37215,37217],{"className":337,"code":37216,"language":339,"meta":141,"style":141},"PROMPT_REGISTRY = {\n    \"product_hero_v3\": {\n        \"version\": \"3.0\",\n        \"prompt\": \"【Style】Clean white infinity cove...\",\n        \"model\": \"seedance-2.0\",\n        \"duration\": 10,\n        \"test_results\": {\"ctr\": 0.24, \"conversion\": 0.087},\n        \"created\": \"2026-02-19\"\n    }\n}\n",[28,37218,37219,37228,37235,37247,37258,37268,37278,37305,37315,37319],{"__ignoreMap":141},[145,37220,37221,37224,37226],{"class":147,"line":148},[145,37222,37223],{"class":155},"PROMPT_REGISTRY",[145,37225,390],{"class":258},[145,37227,427],{"class":262},[145,37229,37230,37233],{"class":147,"line":166},[145,37231,37232],{"class":159},"    \"product_hero_v3\"",[145,37234,1944],{"class":262},[145,37236,37237,37240,37242,37245],{"class":147,"line":178},[145,37238,37239],{"class":159},"        \"version\"",[145,37241,436],{"class":262},[145,37243,37244],{"class":159},"\"3.0\"",[145,37246,451],{"class":262},[145,37248,37249,37251,37253,37256],{"class":147,"line":187},[145,37250,1320],{"class":159},[145,37252,436],{"class":262},[145,37254,37255],{"class":159},"\"【Style】Clean white infinity cove...\"",[145,37257,451],{"class":262},[145,37259,37260,37262,37264,37266],{"class":147,"line":372},[145,37261,1304],{"class":159},[145,37263,436],{"class":262},[145,37265,1309],{"class":159},[145,37267,451],{"class":262},[145,37269,37270,37272,37274,37276],{"class":147,"line":378},[145,37271,1348],{"class":159},[145,37273,436],{"class":262},[145,37275,536],{"class":155},[145,37277,451],{"class":262},[145,37279,37280,37283,37285,37288,37290,37293,37295,37298,37300,37303],{"class":147,"line":384},[145,37281,37282],{"class":159},"        \"test_results\"",[145,37284,20285],{"class":262},[145,37286,37287],{"class":159},"\"ctr\"",[145,37289,436],{"class":262},[145,37291,37292],{"class":155},"0.24",[145,37294,399],{"class":262},[145,37296,37297],{"class":159},"\"conversion\"",[145,37299,436],{"class":262},[145,37301,37302],{"class":155},"0.087",[145,37304,19396],{"class":262},[145,37306,37307,37310,37312],{"class":147,"line":408},[145,37308,37309],{"class":159},"        \"created\"",[145,37311,436],{"class":262},[145,37313,37314],{"class":159},"\"2026-02-19\"\n",[145,37316,37317],{"class":147,"line":419},[145,37318,1408],{"class":262},[145,37320,37321],{"class":147,"line":430},[145,37322,468],{"class":262},[11,37324,37325],{},"これによりプロンプトのA/Bテストと、必要に応じた以前のバージョンへのロールバックが可能になります。",[92,37327,37328],{"id":37328},"生成失敗をグレースフルに処理する",[11,37330,37331],{},"すべてのプロンプトが成功するわけではありません。指数バックオフ付きのリトライロジックを構築しましょう：",[136,37333,37335],{"className":337,"code":37334,"language":339,"meta":141,"style":141},"import time\nimport random\n\ndef generate_with_retry(prompt_data, max_retries=3):\n    for attempt in range(max_retries):\n        try:\n            response = requests.post(f\"{BASE_URL}/videos/generations\",\n                                   json=prompt_data, headers=headers)\n            if response.status_code == 200:\n                return response.json()\n        except Exception as e:\n            if attempt == max_retries - 1:\n                raise e\n            time.sleep(2 ** attempt + random.uniform(0, 1))\n    return None\n",[28,37336,37337,37343,37349,37353,37369,37381,37387,37405,37421,37433,37439,37449,37467,37474,37497],{"__ignoreMap":141},[145,37338,37339,37341],{"class":147,"line":148},[145,37340,346],{"class":258},[145,37342,355],{"class":262},[145,37344,37345,37347],{"class":147,"line":166},[145,37346,346],{"class":258},[145,37348,4908],{"class":262},[145,37350,37351],{"class":147,"line":178},[145,37352,375],{"emptyLinePlaceholder":58},[145,37354,37355,37357,37360,37363,37365,37367],{"class":147,"line":187},[145,37356,525],{"class":258},[145,37358,37359],{"class":151}," generate_with_retry",[145,37361,37362],{"class":262},"(prompt_data, max_retries",[145,37364,266],{"class":258},[145,37366,4927],{"class":155},[145,37368,547],{"class":262},[145,37370,37371,37373,37375,37377,37379],{"class":147,"line":372},[145,37372,4990],{"class":258},[145,37374,4993],{"class":262},[145,37376,1180],{"class":258},[145,37378,4998],{"class":155},[145,37380,5001],{"class":262},[145,37382,37383,37385],{"class":147,"line":378},[145,37384,5006],{"class":258},[145,37386,859],{"class":262},[145,37388,37389,37391,37393,37395,37397,37399,37401,37403],{"class":147,"line":384},[145,37390,5013],{"class":262},[145,37392,266],{"class":258},[145,37394,26837],{"class":262},[145,37396,439],{"class":258},[145,37398,448],{"class":159},[145,37400,678],{"class":155},[145,37402,1445],{"class":159},[145,37404,451],{"class":262},[145,37406,37407,37410,37412,37415,37417,37419],{"class":147,"line":408},[145,37408,37409],{"class":700},"                                   json",[145,37411,266],{"class":258},[145,37413,37414],{"class":262},"prompt_data, ",[145,37416,17648],{"class":700},[145,37418,266],{"class":258},[145,37420,17653],{"class":262},[145,37422,37423,37425,37427,37429,37431],{"class":147,"line":419},[145,37424,5081],{"class":258},[145,37426,2508],{"class":262},[145,37428,853],{"class":258},[145,37430,2513],{"class":155},[145,37432,859],{"class":262},[145,37434,37435,37437],{"class":147,"line":430},[145,37436,5094],{"class":258},[145,37438,735],{"class":262},[145,37440,37441,37443,37445,37447],{"class":147,"line":454},[145,37442,5405],{"class":258},[145,37444,6920],{"class":155},[145,37446,6923],{"class":258},[145,37448,5517],{"class":262},[145,37450,37451,37453,37455,37457,37460,37463,37465],{"class":147,"line":465},[145,37452,5081],{"class":258},[145,37454,4993],{"class":262},[145,37456,853],{"class":258},[145,37458,37459],{"class":262}," max_retries ",[145,37461,37462],{"class":258},"-",[145,37464,21066],{"class":155},[145,37466,859],{"class":262},[145,37468,37469,37471],{"class":147,"line":599},[145,37470,5206],{"class":258},[145,37472,37473],{"class":262}," e\n",[145,37475,37476,37479,37481,37483,37485,37487,37489,37491,37493,37495],{"class":147,"line":604},[145,37477,37478],{"class":262},"            time.sleep(",[145,37480,5289],{"class":155},[145,37482,5292],{"class":258},[145,37484,4993],{"class":262},[145,37486,5298],{"class":258},[145,37488,5301],{"class":262},[145,37490,782],{"class":155},[145,37492,399],{"class":262},[145,37494,5308],{"class":155},[145,37496,8659],{"class":262},[145,37498,37499,37501],{"class":147,"line":610},[145,37500,1704],{"class":258},[145,37502,11796],{"class":155},[11,37504,37505],{},"よくある失敗パターン：",[96,37507,37508,37514,37520],{},[73,37509,37510,37513],{},[23,37511,37512],{},"コンテンツポリシー違反"," — リアルな人物の顔が原因であることが多い",[73,37515,37516,37519],{},[23,37517,37518],{},"リソース枯渇"," — より長いディレイの後にリトライ",[73,37521,37522,37525],{},[23,37523,37524],{},"無効な @tag 参照"," — ファイルのアップロード順を確認",[45,37527],{},[48,37529,37530],{"id":37530},"プロユーザー向け上級テクニック",[92,37532,37533],{"id":37533},"複数世代のチェーン接続",[11,37535,37536],{},"ある動画の最終フレームを次の動画の最初のフレームとして使用し、よ���長いナラティブを作成します：",[136,37538,37540],{"className":337,"code":37539,"language":339,"meta":141,"style":141},"# Step 1: Generate opening scene\nscene1_result = generate_video({\n    \"prompt\": \"A detective enters a dark office...\",\n    \"duration\": 8\n})\n\n# Step 2: Extract last frame and use as first frame for scene 2\nlast_frame = extract_frame(scene1_result[\"video_url\"], timestamp=-1)\n\nscene2_result = generate_video({\n    \"files\": [(\"references\", last_frame)],\n    \"prompt\": \"@Image1 as first frame. The detective discovers a clue...\",\n    \"duration\": 10\n})\n",[28,37541,37542,37547,37557,37568,37576,37581,37585,37590,37614,37618,37627,37641,37652,37660],{"__ignoreMap":141},[145,37543,37544],{"class":147,"line":148},[145,37545,37546],{"class":174},"# Step 1: Generate opening scene\n",[145,37548,37549,37552,37554],{"class":147,"line":166},[145,37550,37551],{"class":262},"scene1_result ",[145,37553,266],{"class":258},[145,37555,37556],{"class":262}," generate_video({\n",[145,37558,37559,37561,37563,37566],{"class":147,"line":178},[145,37560,3680],{"class":159},[145,37562,436],{"class":262},[145,37564,37565],{"class":159},"\"A detective enters a dark office...\"",[145,37567,451],{"class":262},[145,37569,37570,37572,37574],{"class":147,"line":187},[145,37571,3692],{"class":159},[145,37573,436],{"class":262},[145,37575,25891],{"class":155},[145,37577,37578],{"class":147,"line":372},[145,37579,37580],{"class":262},"})\n",[145,37582,37583],{"class":147,"line":378},[145,37584,375],{"emptyLinePlaceholder":58},[145,37586,37587],{"class":147,"line":384},[145,37588,37589],{"class":174},"# Step 2: Extract last frame and use as first frame for scene 2\n",[145,37591,37592,37595,37597,37600,37602,37604,37607,37610,37612],{"class":147,"line":408},[145,37593,37594],{"class":262},"last_frame ",[145,37596,266],{"class":258},[145,37598,37599],{"class":262}," extract_frame(scene1_result[",[145,37601,14773],{"class":159},[145,37603,10606],{"class":262},[145,37605,37606],{"class":700},"timestamp",[145,37608,37609],{"class":258},"=-",[145,37611,5308],{"class":155},[145,37613,405],{"class":262},[145,37615,37616],{"class":147,"line":419},[145,37617,375],{"emptyLinePlaceholder":58},[145,37619,37620,37623,37625],{"class":147,"line":430},[145,37621,37622],{"class":262},"scene2_result ",[145,37624,266],{"class":258},[145,37626,37556],{"class":262},[145,37628,37629,37632,37635,37638],{"class":147,"line":454},[145,37630,37631],{"class":159},"    \"files\"",[145,37633,37634],{"class":262},": [(",[145,37636,37637],{"class":159},"\"references\"",[145,37639,37640],{"class":262},", last_frame)],\n",[145,37642,37643,37645,37647,37650],{"class":147,"line":465},[145,37644,3680],{"class":159},[145,37646,436],{"class":262},[145,37648,37649],{"class":159},"\"@Image1 as first frame. The detective discovers a clue...\"",[145,37651,451],{"class":262},[145,37653,37654,37656,37658],{"class":147,"line":599},[145,37655,3692],{"class":159},[145,37657,436],{"class":262},[145,37659,25939],{"class":155},[145,37661,37662],{"class":147,"line":604},[145,37663,37580],{"class":262},[92,37665,37666],{"id":37666},"動的プロンプト生成",[11,37668,37669],{},"AIを使用して成功したプロンプトのバリエーションを生成します：",[136,37671,37673],{"className":337,"code":37672,"language":339,"meta":141,"style":141},"def generate_prompt_variations(base_prompt, num_variations=3):\n    variations = []\n    for i in range(num_variations):\n        # Use OpenAI/Claude to generate stylistic variations\n        variation = ai_rephrase(base_prompt, style=f\"variation_{i}\")\n        variations.append(variation)\n    return variations\n\n# Test multiple versions for A/B optimization\nbase = \"【Style】Cinematic product showcase...\"\nfor variation in generate_prompt_variations(base):\n    result = generate_video({\"prompt\": variation})\n    # Track performance metrics...\n",[28,37674,37675,37691,37700,37714,37719,37748,37753,37760,37764,37769,37779,37791,37805],{"__ignoreMap":141},[145,37676,37677,37679,37682,37685,37687,37689],{"class":147,"line":148},[145,37678,525],{"class":258},[145,37680,37681],{"class":151}," generate_prompt_variations",[145,37683,37684],{"class":262},"(base_prompt, num_variations",[145,37686,266],{"class":258},[145,37688,4927],{"class":155},[145,37690,547],{"class":262},[145,37692,37693,37696,37698],{"class":147,"line":166},[145,37694,37695],{"class":262},"    variations ",[145,37697,266],{"class":258},[145,37699,5735],{"class":262},[145,37701,37702,37704,37707,37709,37711],{"class":147,"line":178},[145,37703,4990],{"class":258},[145,37705,37706],{"class":262}," i ",[145,37708,1180],{"class":258},[145,37710,4998],{"class":155},[145,37712,37713],{"class":262},"(num_variations):\n",[145,37715,37716],{"class":147,"line":187},[145,37717,37718],{"class":174},"        # Use OpenAI/Claude to generate stylistic variations\n",[145,37720,37721,37724,37726,37729,37731,37733,37735,37738,37740,37742,37744,37746],{"class":147,"line":372},[145,37722,37723],{"class":262},"        variation ",[145,37725,266],{"class":258},[145,37727,37728],{"class":262}," ai_rephrase(base_prompt, ",[145,37730,11068],{"class":700},[145,37732,266],{"class":258},[145,37734,439],{"class":258},[145,37736,37737],{"class":159},"\"variation_",[145,37739,684],{"class":155},[145,37741,6188],{"class":262},[145,37743,690],{"class":155},[145,37745,448],{"class":159},[145,37747,405],{"class":262},[145,37749,37750],{"class":147,"line":378},[145,37751,37752],{"class":262},"        variations.append(variation)\n",[145,37754,37755,37757],{"class":147,"line":384},[145,37756,1704],{"class":258},[145,37758,37759],{"class":262}," variations\n",[145,37761,37762],{"class":147,"line":408},[145,37763,375],{"emptyLinePlaceholder":58},[145,37765,37766],{"class":147,"line":419},[145,37767,37768],{"class":174},"# Test multiple versions for A/B optimization\n",[145,37770,37771,37774,37776],{"class":147,"line":430},[145,37772,37773],{"class":262},"base ",[145,37775,266],{"class":258},[145,37777,37778],{"class":159}," \"【Style】Cinematic product showcase...\"\n",[145,37780,37781,37783,37786,37788],{"class":147,"line":454},[145,37782,8088],{"class":258},[145,37784,37785],{"class":262}," variation ",[145,37787,1180],{"class":258},[145,37789,37790],{"class":262}," generate_prompt_variations(base):\n",[145,37792,37793,37795,37797,37800,37802],{"class":147,"line":465},[145,37794,1619],{"class":262},[145,37796,266],{"class":258},[145,37798,37799],{"class":262}," generate_video({",[145,37801,5780],{"class":159},[145,37803,37804],{"class":262},": variation})\n",[145,37806,37807],{"class":147,"line":599},[145,37808,37809],{"class":174},"    # Track performance metrics...\n",[92,37811,37812],{"id":37812},"自動品質評価",[11,37814,37815],{},"手動レビューの前に生成された動画を自動的にスコアリングします：",[136,37817,37819],{"className":337,"code":37818,"language":339,"meta":141,"style":141},"def assess_video_quality(video_url):\n    scores = {}\n\n    # Motion smoothness (analyze frame-to-frame changes)\n    scores[\"motion\"] = calculate_motion_smoothness(video_url)\n\n    # Visual consistency (check for flickering/artifacts)\n    scores[\"consistency\"] = detect_visual_artifacts(video_url)\n\n    # Prompt adherence (use CLIP to compare with text description)\n    scores[\"adherence\"] = measure_prompt_alignment(video_url, prompt)\n\n    return scores\n\n# Only proceed with high-quality generations\nresult = generate_video(prompt_data)\nif assess_video_quality(result[\"video_url\"])[\"overall\"] > 0.8:\n    publish_video(result[\"video_url\"])\n",[28,37820,37821,37831,37840,37844,37849,37864,37868,37873,37887,37891,37896,37910,37914,37921,37925,37930,37939,37963],{"__ignoreMap":141},[145,37822,37823,37825,37828],{"class":147,"line":148},[145,37824,525],{"class":258},[145,37826,37827],{"class":151}," assess_video_quality",[145,37829,37830],{"class":262},"(video_url):\n",[145,37832,37833,37836,37838],{"class":147,"line":166},[145,37834,37835],{"class":262},"    scores ",[145,37837,266],{"class":258},[145,37839,16635],{"class":262},[145,37841,37842],{"class":147,"line":178},[145,37843,375],{"emptyLinePlaceholder":58},[145,37845,37846],{"class":147,"line":187},[145,37847,37848],{"class":174},"    # Motion smoothness (analyze frame-to-frame changes)\n",[145,37850,37851,37854,37857,37859,37861],{"class":147,"line":372},[145,37852,37853],{"class":262},"    scores[",[145,37855,37856],{"class":159},"\"motion\"",[145,37858,14751],{"class":262},[145,37860,266],{"class":258},[145,37862,37863],{"class":262}," calculate_motion_smoothness(video_url)\n",[145,37865,37866],{"class":147,"line":378},[145,37867,375],{"emptyLinePlaceholder":58},[145,37869,37870],{"class":147,"line":384},[145,37871,37872],{"class":174},"    # Visual consistency (check for flickering/artifacts)\n",[145,37874,37875,37877,37880,37882,37884],{"class":147,"line":408},[145,37876,37853],{"class":262},[145,37878,37879],{"class":159},"\"consistency\"",[145,37881,14751],{"class":262},[145,37883,266],{"class":258},[145,37885,37886],{"class":262}," detect_visual_artifacts(video_url)\n",[145,37888,37889],{"class":147,"line":419},[145,37890,375],{"emptyLinePlaceholder":58},[145,37892,37893],{"class":147,"line":430},[145,37894,37895],{"class":174},"    # Prompt adherence (use CLIP to compare with text description)\n",[145,37897,37898,37900,37903,37905,37907],{"class":147,"line":454},[145,37899,37853],{"class":262},[145,37901,37902],{"class":159},"\"adherence\"",[145,37904,14751],{"class":262},[145,37906,266],{"class":258},[145,37908,37909],{"class":262}," measure_prompt_alignment(video_url, prompt)\n",[145,37911,37912],{"class":147,"line":465},[145,37913,375],{"emptyLinePlaceholder":58},[145,37915,37916,37918],{"class":147,"line":599},[145,37917,1704],{"class":258},[145,37919,37920],{"class":262}," scores\n",[145,37922,37923],{"class":147,"line":604},[145,37924,375],{"emptyLinePlaceholder":58},[145,37926,37927],{"class":147,"line":610},[145,37928,37929],{"class":174},"# Only proceed with high-quality generations\n",[145,37931,37932,37934,37936],{"class":147,"line":616},[145,37933,12078],{"class":262},[145,37935,266],{"class":258},[145,37937,37938],{"class":262}," generate_video(prompt_data)\n",[145,37940,37941,37943,37946,37948,37951,37954,37956,37958,37961],{"class":147,"line":622},[145,37942,1720],{"class":258},[145,37944,37945],{"class":262}," assess_video_quality(result[",[145,37947,14773],{"class":159},[145,37949,37950],{"class":262},"])[",[145,37952,37953],{"class":159},"\"overall\"",[145,37955,14751],{"class":262},[145,37957,5851],{"class":258},[145,37959,37960],{"class":155}," 0.8",[145,37962,859],{"class":262},[145,37964,37965,37968,37970],{"class":147,"line":627},[145,37966,37967],{"class":262},"    publish_video(result[",[145,37969,14773],{"class":159},[145,37971,1630],{"class":262},[18,37973,37974],{},[11,37975,37976],{},[37,37977,37979],{"href":211,"rel":37978},[41],"EvoLink Pro プランで上級 Seedance 機能にアクセス",[45,37981],{},[48,37983,8919],{"id":8919},[92,37985,37987],{"id":37986},"seedance-10-と-20-の違いは何ですか","Seedance 1.0 と 2.0 の違いは何ですか？",[11,37989,37990],{},"Seedance 2.0 ではマルチモーダル入力（@tag 参照）、より長い生成（4〜15秒）、大幅に改善された時間的一貫性が導入されました。プロンプト構造は類似していますが、2.0は複雑なシーンをはるかに上手く処理します。",[92,37992,37994],{"id":37993},"tag-参照が無視されることがあるのはなぜですか","@tag 参照が無視されることがあるのはなぜですか？",[11,37996,37997],{},"よくある原因：",[70,37999,38000,38007,38016,38022],{},[73,38001,38002,36638,38005,36641],{},[23,38003,38004],{},"番号の間違い",[28,38006,2922],{},[73,38008,38009,38012,38013,38015],{},[23,38010,38011],{},"ファイルタイプの不一致"," — 画像をアップロードしたのに ",[28,38014,16354],{}," を参照",[73,38017,38018,38021],{},[23,38019,38020],{},"矛盾する指示"," — 明るい昼間の画像に対して「暗い夜景」を指示",[73,38023,38024,38027],{},[23,38025,38026],{},"アップロード順の混乱"," — タグは各タイプ内でアップロード順に割り当てられる",[92,38029,38031],{"id":38030},"複数の動画でキャラクターの一貫性を維持するにはどうすればいいですか","複数の動画でキャラクターの一貫性を維持するにはどうすればいいですか？",[70,38033,38034,38037,38040,38043],{},[73,38035,38036],{},"すべての生成で同じ参照画像を使用する",[73,38038,38039],{},"テキストに明示的なキャラクター記述を含める（「同じ青いジャケット、肩までの茶色い髪」）",[73,38041,38042],{},"動画Nの最終フレームを動画N+1の最初のフレームとして使用する",[73,38044,38045],{},"すべてのプロンプトでキャラクター記述を同一に保つ",[92,38047,38049],{"id":38048},"既存の動画を修正できますか","既存の動画を修正できますか？",[11,38051,38052],{},"はい！video_urls で既存の動画をアップロードし、プロンプトで @Video1 参照を使用して編集できます — キャラクターの置き換え、シーンの修正、尺の延長、ストーリーラインの変更が可能です。",[11,38054,38055],{},"また、以下の方法も使用できます：",[96,38057,38058,38061,38064],{},[73,38059,38060],{},"@Video1 でオリジナルを参照し、プロンプトで編集内容を記述する",[73,38062,38063],{},"image_urls で参照画像をアップロードしてキャラクターの置き換えや要素の追加を行う",[73,38065,38066],{},"延長プロンプトでオリジナル動画の前後にコンテンツを追加する",[11,38068,38069,38070,1261],{},"完全な編集パラメータ仕様については",[37,38071,22784],{"href":22783},[92,38073,38075],{"id":38074},"最大動画尺はどのくらいですか","最大動画尺はどのくらいですか？",[11,38077,38078],{},"Seedance 2.0 は1回の生成で4～15秒に対応しています。15秒の制限を超えるより長いコンテンツの場合は以下を検討してください：",[96,38080,38081,38084,38087],{},[73,38082,38083],{},"複数のシーンに分割してチェーン接続する",[73,38085,38086],{},"明確なタイムコード付きのショットスクリプト形式を使用する",[73,38088,38089],{},"生成ごとに単一のコンセプトに集中する",[92,38091,38093],{"id":38092},"コンテンツポリシー違反を避けるにはどうすればいいですか","コンテンツポリシー違反を避けるにはどうすればいいですか？",[96,38095,38096,38099,38102,38105],{},[73,38097,38098],{},"リアルな人物の顔写真をアップロードしない",[73,38100,38101],{},"著作権のあるキャラクターや有名人を避ける",[73,38103,38104],{},"写真の代わりにイラスト風・スタイライズドなキャラクター参照を使用する",[73,38106,38107],{},"既存メディアの再現ではなくオリジナルのコンセプトに集中する",[92,38109,38111],{"id":38110},"プロンプトによってコストが異なるのはなぜですか","プロンプトによってコストが異なるのはなぜですか？",[11,38113,38114],{},"生成コストの要因：",[70,38116,38117,38123,38129,38135],{},[73,38118,38119,38122],{},[23,38120,38121],{},"尺"," — 長い動画ほどコストが高い",[73,38124,38125,38128],{},[23,38126,38127],{},"解像度"," — 1080pは720pよりコストが高い",[73,38130,38131,38134],{},[23,38132,38133],{},"参照ファイル数"," — 動画参照は画像参照よりコストが高い",[73,38136,38137,38140],{},[23,38138,38139],{},"複雑さ"," — マルチキャラクターシーンはより多くの計算リソースを使用する可能性",[92,38142,38144],{"id":38143},"ショットスクリプト形式で最良の結果を得るには","ショットスクリプト形式で最良の結果を得るには？",[70,38146,38147,38150,38153,38156,38159],{},[73,38148,38149],{},"各ショットセグメントを最大3～5秒に抑える",[73,38151,38152],{},"具体的なスタイルアンカーを使用する（「シネマティック」ではなく「クリストファー・ノーラン スリラー」）",[73,38154,38155],{},"抽象的な概念ではなく物理的なアクションを記述する",[73,38157,38158],{},"各ショットにカメラワーク指示を含める",[73,38160,38161],{},"一貫性の制約と物理要件で締めくくる",[92,38163,38165],{"id":38164},"seedance-を商用プロジェクトに使用できますか","Seedance を商用プロジェクトに使用できますか？",[11,38167,38168,38169,38172],{},"はい、適切なライセンスの下で使用可能です。サブスクリプションティアによってポリシーが異なる場合があるため、最新の規約は ",[37,38170,213],{"href":211,"rel":38171},[41]," でご確認ください。",[92,38174,38176],{"id":38175},"生成失敗のトラブルシューティング方法は","生成失敗のトラブルシューティング方法は？",[70,38178,38179,38185,38191,38197,38203],{},[73,38180,38181,38184],{},[23,38182,38183],{},"ファイル上限を確認"," — 画像9枚以下、動画3本以下、音声3ファイル以下",[73,38186,38187,38190],{},[23,38188,38189],{},"@tag 番号の確認"," — アップロードしたファイルと一致しているか",[73,38192,38193,38196],{},[23,38194,38195],{},"プロンプトの簡略化"," — 200語を超える場合は短くする",[73,38198,38199,38202],{},[23,38200,38201],{},"矛盾する指示を除去"," — テキストと参照ファイル間の矛盾をなくす",[73,38204,38205,38208],{},[23,38206,38207],{},"まずテキストのみで試す"," — その後、段階的に参照を追加する",[92,38210,38212],{"id":38211},"プロフェッショナル品質のプロンプトとは何ですか","「プロフェッショナル品質」のプロンプトとは何ですか？",[11,38214,38215],{},"プロフェッショナルなプロンプトには通常、以下が含まれます：",[96,38217,38218,38221,38224,38227,38230],{},[73,38219,38220],{},"タイムコード付きのショットスクリプト形式",[73,38222,38223],{},"具体的なスタイルアンカー（監督名、アートムーブメント）",[73,38225,38226],{},"抽象的な概念ではなく物理的なアクションの記述",[73,38228,38229],{},"一貫性の制約と物理要件",[73,38231,38232],{},"適切な参照ファイルの選択と @tag の使用",[45,38234],{},[48,38236,38237],{"id":38237},"まとめ",[11,38239,38240],{},"Seedance 2.0 のプロンプトをマスターするには、テキスト記述とマルチモーダル参照のバランスを理解することが重要です。ショットスクリプト形式は映画的なコントロールを提供し、@tag 参照はビジュアルの一貫性を確保します。",[11,38242,38243],{},"本ガイドのテキストのみのテンプレートから始めて、構文に慣れたら徐々に画像や動画の参照を取り入れてください。過度に複雑な記述よりも、明確で具体的な指示に集中しましょう。",[11,38245,38246],{},"ここに掲載したテンプレートは、商品CMからキャラクターアニメーション、スタイル変換まで、最も一般的なユースケースをカバーしています。スタイルアンカー、タイムコード、参照ファイルを変更して、あなた固有のニーズに合わせてください。",[11,38248,38249,38250,38253,38254,38257],{},"最も重要なのは：",[23,38251,38252],{},"実験すること","です。各プロンプトは Seedance 2.0 が指示をどう解釈するかについて何かを教えてくれます。",[37,38255,32213],{"href":32211,"rel":38256},[41]," コミュニティでは、成功したプロンプトパターンやブレイクスルーテクニックが共有されています。",[11,38259,38260,2427,38263,38266],{},[23,38261,38262],{},"作成を始める準備はできましたか？",[37,38264,13235],{"href":211,"rel":38265},[41],"して、本ガイドのすべてのテンプレートを実行しましょう。動画制作の未来はマルチモーダルです — そしてそれは今日から利用可能です。",[11,38268,38269,38272,38273,38276,38277,38279,38280,38282],{},[23,38270,38271],{},"次のステップ："," @tag 参照システムをマスターする → ",[37,38274,38275],{"href":2967},"マルチモーダルガイド"," | ",[37,38278,22840],{"href":3381}," | 完全な Python 例で",[37,38281,34736],{"href":3855},"を学ぶ",[45,38284],{},[11,38286,38287],{},[2619,38288,38289],{},"最終更新：2026年2月19日 | Written by J, Growth Lead at EvoLink",[11068,38291,38292],{},"html pre.shiki code .snl16, html code.shiki .snl16{--shiki-default:#F97583}html pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}html pre.shiki code .s9osk, html code.shiki .s9osk{--shiki-default:#FFAB70}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}",{"title":141,"searchDepth":166,"depth":166,"links":38294},[38295,38301,38308,38314,38315,38323,38328,38341],{"id":31993,"depth":166,"text":31967,"children":38296},[38297,38298,38299,38300],{"id":32082,"depth":178,"text":32082},{"id":32102,"depth":178,"text":32103},{"id":32224,"depth":178,"text":32225},{"id":32255,"depth":178,"text":32256},{"id":32772,"depth":166,"text":32773,"children":38302},[38303,38304,38305,38306,38307],{"id":32781,"depth":178,"text":32781},{"id":32845,"depth":178,"text":32845},{"id":32934,"depth":178,"text":32934},{"id":33011,"depth":178,"text":33011},{"id":33071,"depth":178,"text":33071},{"id":33182,"depth":166,"text":33183,"children":38309},[38310,38311,38312,38313],{"id":33186,"depth":178,"text":33186},{"id":33930,"depth":178,"text":33930},{"id":35088,"depth":178,"text":35089},{"id":36214,"depth":178,"text":36214},{"id":36591,"depth":166,"text":36592},{"id":36794,"depth":166,"text":36795,"children":38316},[38317,38318,38319,38320,38321,38322],{"id":36798,"depth":178,"text":36798},{"id":37095,"depth":178,"text":37095},{"id":37141,"depth":178,"text":37141},{"id":37175,"depth":178,"text":37175},{"id":37210,"depth":178,"text":37210},{"id":37328,"depth":178,"text":37328},{"id":37530,"depth":166,"text":37530,"children":38324},[38325,38326,38327],{"id":37533,"depth":178,"text":37533},{"id":37666,"depth":178,"text":37666},{"id":37812,"depth":178,"text":37812},{"id":8919,"depth":166,"text":8919,"children":38329},[38330,38331,38332,38333,38334,38335,38336,38337,38338,38339,38340],{"id":37986,"depth":178,"text":37987},{"id":37993,"depth":178,"text":37994},{"id":38030,"depth":178,"text":38031},{"id":38048,"depth":178,"text":38049},{"id":38074,"depth":178,"text":38075},{"id":38092,"depth":178,"text":38093},{"id":38110,"depth":178,"text":38111},{"id":38143,"depth":178,"text":38144},{"id":38164,"depth":178,"text":38165},{"id":38175,"depth":178,"text":38176},{"id":38211,"depth":178,"text":38212},{"id":38237,"depth":166,"text":38237},"Seedance 2.0 のプロンプトを @tag 構文、マルチモーダル参照、15以上のコピペで使えるテンプレートで習得。Python API コード例付き。",{"date":38344,"image":38345,"pinned":58},"2026-02-19","/111.png","/ja/blog/seedance-2-prompt-guide",{"title":31944,"description":38342},"ja/blog/seedance-2-prompt-guide","yJydk2Zr5ftwUZoKDWgXZnZEdpNFYcmprQZomS_aUJM",{"id":38351,"title":38352,"body":38353,"description":41251,"extension":11130,"meta":41252,"navigation":58,"path":41273,"seo":41274,"stem":41275,"__hash__":41276},"content/ja/blog/seedance-2-vs-sora-2-api-comparison.md","Seedance 2.0 vs Sora 2：同一プロンプトで実施したAPI実機テスト（2026年版）",{"type":8,"value":38354,"toc":41208},[38355,38358,38361,38378,38391,38394,38397,38417,38423,38429,38432,38438,38504,38507,38510,38514,38518,38523,38526,38531,38591,38597,38600,38606,38609,38614,38664,38669,38672,38677,38681,38687,38693,38696,38701,38767,38770,38774,38779,38784,38787,38792,38849,38855,38861,38864,38867,38870,38875,38929,38935,38938,38944,38948,38954,38957,38964,38969,39028,39031,39034,39038,39042,39047,39050,39055,39109,39114,39117,39120,39123,39128,39178,39184,39187,39191,39197,39200,39205,39265,39268,39271,39278,39282,39285,39459,39464,39482,39486,39489,39493,39496,40074,40080,40213,40219,40223,40424,40427,40433,40439,40445,40451,40462,40466,40469,40473,40534,40545,40556,40560,40566,40569,40639,40646,40652,40656,40702,40706,40709,40713,40753,40757,40783,40787,40790,40793,41021,41024,41028,41031,41033,41037,41040,41044,41055,41059,41062,41066,41072,41076,41083,41087,41094,41096,41100,41177,41180,41193,41205],[22910,38356,38352],{"id":38357},"seedance-20-vs-sora-2同一プロンプトで実施したapi実機テスト2026年版",[11,38359,38360],{},"「Seedance vs Sora」を比較した記事のほとんどは、スペック表の比較にとどまっています。私たちは両モデルに同じ3つのプロンプトを入力し、出力を記録してフレーム単位でスコアリングしました。動画の実証映像、コピー可能なAPIコード、そして選択を左右するかもしれない料金の詳細とともに、その結果をお伝えします。",[11,38362,38363,38364,38369,38370,38373,38374,38377],{},"Seedance 2.0（ByteDanceの",[37,38365,38368],{"href":38366,"rel":38367},"https://seed.bytedance.com/en",[41],"Seedチーム","による）は、今回のテスト全体で",[23,38371,38372],{},"総合8.5/10","を獲得し、Sora 2の",[23,38375,38376],{},"8.0/10","を上回りました。差がついた箇所は予想とは異なるものでした。",[38379,38380,38382],"callout",{"type":38381},"info",[11,38383,38384,2427,38387,38390],{},[23,38385,38386],{},"自分でテストしてみたい方へ：",[37,38388,38389],{"href":16295},"EvoLink APIキーを無料で取得","して、下記の実際のプロンプトをそのまま使ってみてください。",[48,38392,38393],{"id":38393},"テストのセットアップ",[11,38395,38396],{},"私たちは、異なる能力をストレステストするために3つのプロンプトを設計しました：",[70,38398,38399,38405,38411],{},[73,38400,38401,38404],{},[23,38402,38403],{},"スローモーション物理演算"," — 磁器の花瓶が砕け散る（パーティクルダイナミクス、マテリアルレンダリング）",[73,38406,38407,38410],{},[23,38408,38409],{},"ダイナミックな人間の動き"," — 夜の屋上でのブレイクダンス（解剖学、モーションブラー、ネオンライティング）",[73,38412,38413,38416],{},[23,38414,38415],{},"表情とライティング"," — 魔法の本を発見する老婦人（微細な表情、ボリュメトリックライト）",[11,38418,38419,38422],{},[23,38420,38421],{},"方法論："," 各プロンプトは両方のAPIに一字一句そのまま送信しました。チェリーピッキングなし — 各モデルから最初に生成されたものを使用しました。動画は15秒、無編集です。スコアリングには6つの次元を使用：画質、プロンプト遵守度、物理/解剖学的リアリズム、ライティング、モーションの流動性、ディテールの豊かさ。",[11,38424,38425,38428],{},[23,38426,38427],{},"なぜこれが重要か："," AI動画APIの上にプロダクトを構築する場合、どのモデルがあなたのユースケースに対応できるかを知る必要があります。スペック表では、Sora 2の人体解剖学が一時停止時に破綻することや、Seedanceの60fpsがスローモーションシーンを目に見えて滑らかにすることは分かりません。",[11,38430,38431],{},"既存の「Seedance vs Sora」記事はすべて、機能リストの比較や単一のチェリーピッキングされた例に依存しています。制御された同一プロンプトと体系的なスコアリングを使用したものはありません。それが、このテストが埋めるギャップです。",[11,38433,38434,38437],{},[23,38435,38436],{},"テストしなかったもの："," 今回はテキストオーバーレイの品質、マルチシーンナラティブ、オーディオ同期の精度は評価していません。これらは独自の専用テストに値します。また、テキストから動画モードに限定しました — 画像から動画、動画から動画の比較は、フォローアップで計画しています。",[2037,38439,38440,38451],{},[2040,38441,38442],{},[2043,38443,38444,38446,38448],{},[2046,38445,3399],{},[2046,38447,17219],{"align":13641},[2046,38449,38450],{"align":13641},"Sora 2",[2053,38452,38453,38463,38474,38483,38493],{},[2043,38454,38455,38457,38460],{},[2058,38456,38127],{},[2058,38458,38459],{"align":13641},"1280×720 (720p)",[2058,38461,38462],{"align":13641},"1792×1024 (~1080p)",[2043,38464,38465,38468,38471],{},[2058,38466,38467],{},"フレームレート",[2058,38469,38470],{"align":13641},"60fps",[2058,38472,38473],{"align":13641},"30fps",[2043,38475,38476,38479,38481],{},[2058,38477,38478],{},"長さ",[2058,38480,4073],{"align":13641},[2058,38482,4073],{"align":13641},[2043,38484,38485,38488,38491],{},[2058,38486,38487],{},"コーデック",[2058,38489,38490],{"align":13641},"H.264",[2058,38492,38490],{"align":13641},[2043,38494,38495,38498,38501],{},[2058,38496,38497],{},"オーディオ",[2058,38499,38500],{"align":13641},"AAC 44.1kHz ステレオ",[2058,38502,38503],{"align":13641},"AAC 96kHz ステレオ",[11,38505,38506],{},"Seedanceは解像度をトレードオフして2倍のフレームレートを実現しています。Soraはフレームあたり約2.5倍のピクセルを提供します。どちらの選択も、異なるコンテンツタイプに対して実際の影響があります — 以下でご覧いただけます。",[11,38508,38509],{},"オーディオについての簡単な注記：両モデルとも同期されたオーディオ（対話、効果音、音楽）を生成しますが、サンプルレートが異なります。Soraの96kHz出力はCD品質を超えていますが、Seedanceの44.1kHzは標準的なCDオーディオと一致します。実際には、ほとんどの配信プラットフォーム（YouTube、TikTok、Instagram）は48kHz以下にダウンサンプリングするため、この違いが最終配信で問題になることはほとんどありません。",[48,38511,38513],{"id":38512},"テスト1-スローモーション物理演算磁器の花瓶","テスト1 — スローモーション物理演算（磁器の花瓶）",[11,38515,38516],{},[23,38517,11837],{},[18,38519,38520],{},[11,38521,38522],{},"A porcelain vase falls from a marble table in slow motion. Camera starts with a close-up of the vase wobbling on the edge, then follows it downward with a smooth tracking shot as it shatters on a stone floor. Fragments scatter in all directions. Dust particles float in warm afternoon sunlight streaming through a window. Shallow depth of field, 24fps cinematic look",[92,38524,17219],{"id":38525},"seedance-20",[56,38527,60,38528],{"autoPlay":58,"loop":58,"muted":58,"playsInline":58,"style":59},[62,38529],{"src":38530,"type":65},"https://cdn.evolink.ai/skills-media/seedance2/seedance2.0%E7%93%B7%E5%99%A8%E6%8E%89%E5%9C%B0%E4%B8%8A.mp4",[2037,38532,38533,38545],{},[2040,38534,38535],{},[2043,38536,38537,38540,38543],{},[2046,38538,38539],{},"評価項目",[2046,38541,38542],{"align":13641},"スコア",[2046,38544,19227],{},[2053,38546,38547,38558,38569,38580],{},[2043,38548,38549,38552,38555],{},[2058,38550,38551],{},"画質",[2058,38553,38554],{"align":13641},"8.5/10",[2058,38556,38557],{},"ほぼシネマティック。青白い磁器のテクスチャは鮮明で、大理石の木目もリアル",[2043,38559,38560,38563,38566],{},[2058,38561,38562],{},"プロンプト遵守度",[2058,38564,38565],{"align":13641},"7.5/10",[2058,38567,38568],{},"花瓶、大理石のテーブル、温かい光、浅い被写界深度 — すべて存在。塵の粒子は欠落",[2043,38570,38571,38574,38577],{},[2058,38572,38573],{},"物理的リアリズム",[2058,38575,38576],{"align":13641},"7.0/10",[2058,38578,38579],{},"落下軌道は妥当だが、破片が密集しすぎ。モーションブラーの欠如が「浮遊」感を与える",[2043,38581,38582,38585,38588],{},[2058,38583,38584],{},"ライティング",[2058,38586,38587],{"align":13641},"9.0/10",[2058,38589,38590],{},"窓からの午後の温かさが一貫している。釉薬の鏡面ハイライトが正確",[11,38592,38593,38596],{},[23,38594,38595],{},"優れている点："," ボケと温かい光のレンダリングが本当に映画的に感じられます。60fpsで、スローモーションの落下はバターのように滑らか — 個々の破片をフレームごとに追跡でき、ジャダーは一切ありません。青白い磁器の釉薬が午後の光を捉える様子は、本物の青磁と全く同じで、花瓶が落下中に回転するにつれて自然に変化する柔らかい鏡面ハイライトがあります。",[11,38598,38599],{},"浅い被写界深度の実行は特筆に値します。背景要素は自然なグラデーションでぼけており、安価な実装で見られるハードエッジのマスクではありません。大理石のテーブルの金色のエッジトリムは前景で鮮明なままで、背後の部屋は説得力を持って落ちていきます。",[11,38601,38602,38605],{},[23,38603,38604],{},"弱点："," 破片が硬い石の床への衝撃に対して十分に散乱していません。実際の磁器がその速度で石に当たると、破片は数フィート四方に飛び散るはずですが、ここでは狭い半径内に集まっています。プロンプトで特に要求された塵や陶器の粉末は見えません。落下する花瓶にもモーションブラーがなく、空中フレームでわずかな「浮遊」感を生み出しています。",[92,38607,38450],{"id":38608},"sora-2",[56,38610,60,38611],{"autoPlay":58,"loop":58,"muted":58,"playsInline":58,"style":59},[62,38612],{"src":38613,"type":65},"https://cdn.evolink.ai/skills-media/seedance2/sora2%E7%93%B7%E5%99%A8%E6%8E%89%E5%9C%B0%E4%B8%8A.mp4",[2037,38615,38616,38626],{},[2040,38617,38618],{},[2043,38619,38620,38622,38624],{},[2046,38621,38539],{},[2046,38623,38542],{"align":13641},[2046,38625,19227],{},[2053,38627,38628,38637,38646,38655],{},[2043,38629,38630,38632,38634],{},[2058,38631,38551],{},[2058,38633,38587],{"align":13641},[2058,38635,38636],{},"より高解像度でより多くのディテールが見える。破砕した陶器の断面（釉薬の下の灰色の素地）が印象的",[2043,38638,38639,38641,38643],{},[2058,38640,38562],{},[2058,38642,38565],{"align":13641},[2058,38644,38645],{},"主要な要素は存在する。塵の粒子も欠落",[2043,38647,38648,38650,38652],{},[2058,38649,38573],{},[2058,38651,38376],{"align":13641},[2058,38653,38654],{},"破砕力学がより説得力がある — 不均一な厚さ、不規則な破断面が脆性破壊の挙動と一致",[2043,38656,38657,38659,38661],{},[2058,38658,38584],{},[2058,38660,38587],{"align":13641},[2058,38662,38663],{},"右からの温かい光。光沢のある磁器とマットな石面の正確な差別化",[11,38665,38666,38668],{},[23,38667,38595],{}," 破砕のディテールが優れています。破断点で釉薬の下に灰色の陶器素地（素焼き）が見える — ほとんどの3Dレンダリングでも試みられないような、微妙だが物理的に正確なディテールです。胴体が砕ける間も首が無傷なのは、実際の陶器の応力分布と一致しています：首は花瓶の中で最も厚く、最も構造的に強化された部分です。",[11,38670,38671],{},"破片の端は脆性材料の破壊と一致する、不規則なコンコイダル（貝殻状）の破砕パターンを示しています。いくつかの破片は釉薬が素地から剥がれた薄い端を持ち、他は厚い断面を示しています。この破砕の多様性のレベルが「説得力がある」と「明らかにCG」を分けるものです。",[11,38673,38674,38676],{},[23,38675,38604],{}," 優れた破砕物理演算にもかかわらず、一部の破片は依然としてわずかな「浮遊」感を示しています — 石の上でバウンドしてスライドするのではなく、衝撃後に急速に減速しすぎています。塵の粒子はSeedanceと同様に欠落しています。また、この大きさの花瓶が硬い表面に当たった場合に期待されるよりも、破片の数が少ないです。",[92,38678,38680],{"id":38679},"test-1-verdict","Test 1 Verdict",[11,38682,38683,38686],{},[23,38684,38685],{},"Sora 2 wins on fracture detail and raw resolution."," The higher pixel count and more convincing break physics make this a clear edge for static-heavy or close-up content.",[11,38688,38689,38692],{},[23,38690,38691],{},"Seedance 2.0 wins on motion smoothness."," The 60fps frame rate makes the slow-motion fall visually smoother. If your use case is actual slow-motion video (ads, product demos), that frame rate matters.",[11,38694,38695],{},"Both models failed to generate floating dust particles in sunlight — a shared limitation of current AI video generation. Volumetric particle effects (dust, smoke, mist) remain a weak point across all diffusion-based video models, likely because training data rarely isolates these subtle atmospheric elements.",[11,38697,38698],{},[23,38699,38700],{},"Score summary for Test 1:",[2037,38702,38703,38727],{},[2040,38704,38705],{},[2043,38706,38707,38710,38713,38716,38719,38722],{},[2046,38708,38709],{},"Model",[2046,38711,38712],{"align":13641},"Image Quality",[2046,38714,38715],{"align":13641},"Prompt Adherence",[2046,38717,38718],{"align":13641},"Physics",[2046,38720,38721],{"align":13641},"Lighting",[2046,38723,38724],{"align":13641},[23,38725,38726],{},"Average",[2053,38728,38729,38750],{},[2043,38730,38731,38733,38736,38739,38742,38745],{},[2058,38732,17219],{},[2058,38734,38735],{"align":13641},"8.5",[2058,38737,38738],{"align":13641},"7.5",[2058,38740,38741],{"align":13641},"7.0",[2058,38743,38744],{"align":13641},"9.0",[2058,38746,38747],{"align":13641},[23,38748,38749],{},"8.0",[2043,38751,38752,38754,38756,38758,38760,38762],{},[2058,38753,38450],{},[2058,38755,38744],{"align":13641},[2058,38757,38738],{"align":13641},[2058,38759,38749],{"align":13641},[2058,38761,38744],{"align":13641},[2058,38763,38764],{"align":13641},[23,38765,38766],{},"8.4",[11,38768,38769],{},"Sora 2 takes this round by a narrow margin, driven by superior fracture physics and resolution. But if your use case prioritizes smooth slow-motion playback over freeze-frame detail, the 60fps advantage tips back toward Seedance.",[48,38771,38773],{"id":38772},"test-2-dynamic-human-motion-rooftop-breakdance","Test 2 — Dynamic Human Motion (Rooftop Breakdance)",[11,38775,38776],{},[23,38777,38778],{},"Prompt:",[18,38780,38781],{},[11,38782,38783],{},"A street dancer performs an explosive breakdance routine on a rain-soaked city rooftop at night. Neon lights from surrounding buildings reflect off the wet surface. Camera circles the dancer in a dynamic 360-degree orbit. The dancer transitions from a power move into a freeze pose. Dramatic rim lighting, cinematic color grading with teal and orange tones",[92,38785,17219],{"id":38786},"seedance-20-1",[56,38788,60,38789],{"autoPlay":58,"loop":58,"muted":58,"playsInline":58,"style":59},[62,38790],{"src":38791,"type":65},"https://cdn.evolink.ai/skills-media/seedance2/seedance2.0%E5%A4%9C%E6%99%AF%E8%A1%97%E8%88%9E.mp4",[2037,38793,38794,38807],{},[2040,38795,38796],{},[2043,38797,38798,38801,38804],{},[2046,38799,38800],{},"Dimension",[2046,38802,38803],{"align":13641},"Score",[2046,38805,38806],{},"Notes",[2053,38808,38809,38818,38828,38838],{},[2043,38810,38811,38813,38815],{},[2058,38812,38712],{},[2058,38814,38587],{"align":13641},[2058,38816,38817],{},"Stunning night rendering. Neon reflections on wet surfaces are almost photographic",[2043,38819,38820,38823,38825],{},[2058,38821,38822],{},"Anatomy Accuracy",[2058,38824,38554],{"align":13641},[2058,38826,38827],{},"B-boy floor work poses are recognizable. Wrist-forearm-shoulder force lines align correctly",[2043,38829,38830,38833,38835],{},[2058,38831,38832],{},"Motion Dynamics",[2058,38834,38587],{"align":13641},[2058,38836,38837],{},"Motion blur direction matches movement. Low center of gravity fits breakdance mechanics. 60fps keeps fast transitions smooth",[2043,38839,38840,38843,38846],{},[2058,38841,38842],{},"Lighting & Atmosphere",[2058,38844,38845],{"align":13641},"9.5/10",[2058,38847,38848],{},"Near-perfect neon reflections on wet ground. Rim lighting + backlit silhouette creates cinematic drama",[11,38850,38851,38854],{},[23,38852,38853],{},"Standout:"," This is where Seedance 2.0 truly shines. The teal-and-orange color grading is executed precisely. Neon reflections on the rain-soaked rooftop are stunning — red and cyan complementary colors map naturally onto the wet surface. The atmosphere is immersive enough for a professional music video.",[11,38856,38857,38860],{},[23,38858,38859],{},"The 60fps advantage is decisive here."," Fast arm sweeps, power moves, and transitions look fluid rather than stuttery. Clothing has weight and drapes correctly during motion — the hoodie fabric stretches and bunches at the shoulders in ways that suggest real textile physics.",[11,38862,38863],{},"The color grading deserves a closer look. Teal and orange are complementary colors, and the prompt specifically requested this combination. Seedance didn't just tint the image — it placed warm orange neon sources behind the dancer (creating rim light) and cool cyan sources in front, then let the wet rooftop surface mix both colors in reflections. This is how a cinematographer would actually light this scene.",[11,38865,38866],{},"Water behavior on the rooftop is also convincing. The surface has a thin, even layer of water that reflects the cityscape above. When the dancer moves, you can see subtle disturbance patterns radiating outward from points of contact. It's not perfect fluid simulation, but it reads as \"wet ground\" instantly.",[92,38868,38450],{"id":38869},"sora-2-1",[56,38871,60,38872],{"autoPlay":58,"loop":58,"muted":58,"playsInline":58,"style":59},[62,38873],{"src":38874,"type":65},"https://cdn.evolink.ai/skills-media/seedance2/sora2%E5%A4%9C%E6%99%AF%E8%A1%97%E8%88%9E.mp4",[2037,38876,38877,38887],{},[2040,38878,38879],{},[2043,38880,38881,38883,38885],{},[2046,38882,38800],{},[2046,38884,38803],{"align":13641},[2046,38886,38806],{},[2053,38888,38889,38898,38911,38920],{},[2043,38890,38891,38893,38895],{},[2058,38892,38712],{},[2058,38894,38376],{"align":13641},[2058,38896,38897],{},"Strong cyberpunk aesthetic, detailed city background. But has an \"AI sheen\" — everything looks too perfectly graded",[2043,38899,38900,38902,38905],{},[2058,38901,38822],{},[2058,38903,38904],{"align":13641},"6.5/10",[2058,38906,15946,38907,38910],{},[23,38908,38909],{},"Major weakness."," Hand-ground contact is blurry, fingers indistinguishable. Torso narrows unnaturally during handstand. Feet/shoe edges have a \"melting\" quality",[2043,38912,38913,38915,38917],{},[2058,38914,38832],{},[2058,38916,38376],{"align":13641},[2058,38918,38919],{},"Water splash effects are good, rotational momentum is credible. But some water droplets look more like noise than real droplets",[2043,38921,38922,38924,38926],{},[2058,38923,38842],{},[2058,38925,38554],{"align":13641},[2058,38927,38928],{},"Dual-source contrast (warm orange backlight + cool cyan front) handled well. But immersion falls short of Seedance",[11,38930,38931,38934],{},[23,38932,38933],{},"The anatomy problem is serious."," During freeze poses and handstands, the dancer's hands dissolve into the ground contact surface — individual fingers are indistinguishable. The torso becomes tube-like rather than showing realistic ribcage-to-pelvis structure, losing the natural width variation between chest, waist, and hips. A second arm disappears entirely in some frames, creating an anatomical gap that breaks the illusion.",[11,38936,38937],{},"Foot and shoe edges exhibit a \"melting\" quality, where the boundary between footwear and air becomes soft and undefined. This is a common failure mode in diffusion-based video models when limbs overlap or contact surfaces.",[11,38939,38940,38943],{},[23,38941,38942],{},"It looks fine while playing at normal speed. Pause any frame during a freeze pose and things fall apart."," For content that will only be viewed as video (social media, ads), this may be acceptable. For anything that might be screenshotted, thumbnailed, or analyzed, it's a dealbreaker.",[92,38945,38947],{"id":38946},"test-2-verdict","Test 2 Verdict",[11,38949,38950,38953],{},[23,38951,38952],{},"Seedance 2.0 wins decisively."," The anatomy accuracy gap (8.5 vs 6.5) is the largest single-dimension difference across all three tests. For any content involving dynamic human movement — dance, sports, action sequences — Seedance is the more reliable choice right now.",[11,38955,38956],{},"The 60fps frame rate compounds this advantage. At 30fps, fast breakdance movements produce noticeable judder. At 60fps, they're smooth.",[11,38958,38959,38960,38963],{},"If you're building a product that generates human-motion content through an ",[37,38961,38962],{"href":14209},"AI video API",", this result should heavily influence your model selection.",[11,38965,38966],{},[23,38967,38968],{},"Score summary for Test 2:",[2037,38970,38971,38991],{},[2040,38972,38973],{},[2043,38974,38975,38977,38979,38982,38985,38987],{},[2046,38976,38709],{},[2046,38978,38712],{"align":13641},[2046,38980,38981],{"align":13641},"Anatomy",[2046,38983,38984],{"align":13641},"Motion",[2046,38986,38721],{"align":13641},[2046,38988,38989],{"align":13641},[23,38990,38726],{},[2053,38992,38993,39010],{},[2043,38994,38995,38997,38999,39001,39003,39006],{},[2058,38996,17219],{},[2058,38998,38744],{"align":13641},[2058,39000,38735],{"align":13641},[2058,39002,38744],{"align":13641},[2058,39004,39005],{"align":13641},"9.5",[2058,39007,39008],{"align":13641},[23,39009,38744],{},[2043,39011,39012,39014,39016,39019,39021,39023],{},[2058,39013,38450],{},[2058,39015,38749],{"align":13641},[2058,39017,39018],{"align":13641},"6.5",[2058,39020,38749],{"align":13641},[2058,39022,38735],{"align":13641},[2058,39024,39025],{"align":13641},[23,39026,39027],{},"7.75",[11,39029,39030],{},"This is the widest gap across all three tests. Seedance outperforms in every single dimension. The anatomy accuracy delta (8.5 vs 6.5) alone should be disqualifying for Sora in human-motion applications where frame-level quality matters.",[11,39032,39033],{},"For developers working on fitness apps, dance content platforms, sports highlights, or any product featuring dynamic human movement, this test provides strong evidence for defaulting to Seedance 2.0.",[48,39035,39037],{"id":39036},"test-3-facial-expression-lighting-elder-bookshop","Test 3 — Facial Expression & Lighting (Elder Bookshop)",[11,39039,39040],{},[23,39041,38778],{},[18,39043,39044],{},[11,39045,39046],{},"A wise elderly woman with silver hair and round spectacles sits in a cluttered antique bookshop. She picks up a leather-bound book, opens it, and her expression shifts from curiosity to wonder as golden light emanates from the pages. The light illuminates her face and the surrounding book spines. Camera slowly pushes in from medium shot to close-up on her face. Warm tungsten lighting mixed with the magical golden glow.",[92,39048,17219],{"id":39049},"seedance-20-2",[56,39051,60,39052],{"autoPlay":58,"loop":58,"muted":58,"playsInline":58,"style":59},[62,39053],{"src":39054,"type":65},"https://cdn.evolink.ai/skills-media/seedance2/seedance2.0%E8%80%81%E4%BA%BA%E5%A5%87%E9%81%87.mp4",[2037,39056,39057,39067],{},[2040,39058,39059],{},[2043,39060,39061,39063,39065],{},[2046,39062,38800],{},[2046,39064,38803],{"align":13641},[2046,39066,38806],{},[2053,39068,39069,39079,39089,39099],{},[2043,39070,39071,39074,39076],{},[2058,39072,39073],{},"Facial Quality",[2058,39075,38554],{"align":13641},[2058,39077,39078],{},"Wrinkles, crow's feet, nasolabial folds render naturally. Round spectacles sit correctly on nose bridge with subtle refraction",[2043,39080,39081,39084,39086],{},[2058,39082,39083],{},"Expression Transition",[2058,39085,38554],{"align":13641},[2058,39087,39088],{},"Quiet focus → wonder is conveyed through widening eyes, slightly raised brows, parting lips. Layered micro-expressions",[2043,39090,39091,39094,39096],{},[2058,39092,39093],{},"Environment Detail",[2058,39095,38587],{"align":13641},[2058,39097,39098],{},"⭐ Richest scene of all tests. Floor-to-ceiling leather book spines, rolling library ladder, globe desk lamp, ink bottles, brass instruments",[2043,39100,39101,39104,39106],{},[2058,39102,39103],{},"Golden Light Effect",[2058,39105,38587],{"align":13641},[2058,39107,39108],{},"Volumetric golden light radiates upward from pages. Correctly illuminates chin, cheeks, under-nose. Blends naturally with existing warm tungsten",[11,39110,39111,39113],{},[23,39112,38853],{}," The bookshop environment is extraordinary. It feels like a real, lived-in space — books stacked chaotically on floors and tables, period-appropriate props scattered naturally. The scene evokes a Dickensian bookshop or an Oxford study. Seedance built the entire world around the character, not just the character.",[11,39115,39116],{},"The golden light has actual volume. It interacts correctly with silver hair edges and fabric folds, creating natural rim highlights. The light doesn't just illuminate the face — it casts subtle warm reflections on the nearest book spines and creates a gentle glow on the table surface. This kind of multi-surface light interaction is what sells the \"magical\" quality of the scene.",[11,39118,39119],{},"The expression transition is worth examining in detail. It's not a simple cut from \"neutral\" to \"amazed.\" You can see a sequence: concentration as she opens the book → slight confusion as the light first appears → recognition → genuine wonder with slightly parted lips and widened eyes. This micro-expression layering is what separates AI-generated faces that feel \"alive\" from those that feel \"posed.\"",[92,39121,38450],{"id":39122},"sora-2-2",[56,39124,60,39125],{"autoPlay":58,"loop":58,"muted":58,"playsInline":58,"style":59},[62,39126],{"src":39127,"type":65},"https://cdn.evolink.ai/skills-media/seedance2/sora2%E8%80%81%E4%BA%BA%E5%A5%87%E9%81%87.mp4",[2037,39129,39130,39140],{},[2040,39131,39132],{},[2043,39133,39134,39136,39138],{},[2046,39135,38800],{},[2046,39137,38803],{"align":13641},[2046,39139,38806],{},[2053,39141,39142,39151,39160,39169],{},[2043,39143,39144,39146,39148],{},[2058,39145,39073],{},[2058,39147,38565],{"align":13641},[2058,39149,39150],{},"Passable but \"waxy.\" Forehead and cheeks are too smooth. Aging inconsistent — some areas look 70+, others 50",[2043,39152,39153,39155,39157],{},[2058,39154,39083],{},[2058,39156,38376],{"align":13641},[2058,39158,39159],{},"Wonder comes through (mouth opens, eyes widen). But eyelid and brow expressiveness is less nuanced than Seedance",[2043,39161,39162,39164,39166],{},[2058,39163,39093],{},[2058,39165,38554],{"align":13641},[2058,39167,39168],{},"Good atmosphere with green banker's lamp. Depth of field handled well. But less layered — missing ladder, floor books, desk props",[2043,39170,39171,39173,39175],{},[2058,39172,39103],{},[2058,39174,38587],{"align":13641},[2058,39176,39177],{},"Upward lighting direction correct. Golden particle effects add magical feel. Good subsurface scattering on skin",[11,39179,39180,39183],{},[23,39181,39182],{},"The \"wax face\" problem:"," Sora 2 renders elderly skin that's simultaneously wrinkled and oddly smooth. The forehead lacks the texture density you'd expect — age spots, pore visibility, and the slight translucency of thin elderly skin are all muted. Some areas of the face read as 70+ years old (around the eyes), while others look closer to 50 (forehead, cheeks). This inconsistency breaks the uncanny valley in close-up shots — exactly the shot this prompt calls for.",[11,39185,39186],{},"The bookshop environment, while atmospheric, is less layered than Seedance's version. It has a green banker's lamp and well-handled depth of field, but lacks the rolling ladder, floor-level book stacks, brass instruments, ink bottles, and other period props that make Seedance's version feel like a real space rather than a set.",[92,39188,39190],{"id":39189},"test-3-verdict","Test 3 Verdict",[11,39192,39193,39196],{},[23,39194,39195],{},"Seedance 2.0 wins on facial detail and environmental richness."," For character-driven content — storytelling, narrative ads, emotional close-ups — Seedance produces more believable faces and richer worlds.",[11,39198,39199],{},"Both models nail the golden magical light effect. That's a tie.",[11,39201,39202],{},[23,39203,39204],{},"Score summary for Test 3:",[2037,39206,39207,39229],{},[2040,39208,39209],{},[2043,39210,39211,39213,39216,39219,39222,39225],{},[2046,39212,38709],{},[2046,39214,39215],{"align":13641},"Face Quality",[2046,39217,39218],{"align":13641},"Expression",[2046,39220,39221],{"align":13641},"Environment",[2046,39223,39224],{"align":13641},"Light Effect",[2046,39226,39227],{"align":13641},[23,39228,38726],{},[2053,39230,39231,39248],{},[2043,39232,39233,39235,39237,39239,39241,39243],{},[2058,39234,17219],{},[2058,39236,38735],{"align":13641},[2058,39238,38735],{"align":13641},[2058,39240,38744],{"align":13641},[2058,39242,38744],{"align":13641},[2058,39244,39245],{"align":13641},[23,39246,39247],{},"8.75",[2043,39249,39250,39252,39254,39256,39258,39260],{},[2058,39251,38450],{},[2058,39253,38738],{"align":13641},[2058,39255,38749],{"align":13641},[2058,39257,38735],{"align":13641},[2058,39259,38744],{"align":13641},[2058,39261,39262],{"align":13641},[23,39263,39264],{},"8.25",[11,39266,39267],{},"Seedance wins this round through more convincing facial aging and a richer environment. The \"wax face\" issue with Sora is particularly problematic in close-up shots, which are exactly what this prompt demands with its \"medium shot to close-up\" camera push.",[11,39269,39270],{},"For narrative content, short films, character-driven ads, or any application where emotional authenticity matters, Seedance's facial rendering is a meaningful advantage.",[11,39272,39273,39274,39277],{},"For more on getting the best results from Seedance prompts, see our ",[37,39275,39276],{"href":1767},"prompt engineering guide",".",[48,39279,39281],{"id":39280},"technical-specs-comparison","Technical Specs Comparison",[11,39283,39284],{},"Here's the full technical breakdown based on our actual output analysis:",[2037,39286,39287,39298],{},[2040,39288,39289],{},[2043,39290,39291,39294,39296],{},[2046,39292,39293],{},"Specification",[2046,39295,17219],{"align":13641},[2046,39297,38450],{"align":13641},[2053,39299,39300,39311,39324,39335,39348,39361,39372,39385,39398,39411,39424,39435,39447],{},[2043,39301,39302,39307,39309],{},[2058,39303,39304],{},[23,39305,39306],{},"Resolution",[2058,39308,38459],{"align":13641},[2058,39310,38462],{"align":13641},[2043,39312,39313,39318,39321],{},[2058,39314,39315],{},[23,39316,39317],{},"Pixels per frame",[2058,39319,39320],{"align":13641},"921,600",[2058,39322,39323],{"align":13641},"1,835,008 (~2×)",[2043,39325,39326,39331,39333],{},[2058,39327,39328],{},[23,39329,39330],{},"Frame rate",[2058,39332,38470],{"align":13641},[2058,39334,38473],{"align":13641},[2043,39336,39337,39342,39345],{},[2058,39338,39339],{},[23,39340,39341],{},"Total frames (15s)",[2058,39343,39344],{"align":13641},"900",[2058,39346,39347],{"align":13641},"450",[2043,39349,39350,39355,39358],{},[2058,39351,39352],{},[23,39353,39354],{},"Duration range",[2058,39356,39357],{"align":13641},"4–15s",[2058,39359,39360],{"align":13641},"Up to 20s",[2043,39362,39363,39368,39370],{},[2058,39364,39365],{},[23,39366,39367],{},"Codec",[2058,39369,38490],{"align":13641},[2058,39371,38490],{"align":13641},[2043,39373,39374,39379,39382],{},[2058,39375,39376],{},[23,39377,39378],{},"Audio",[2058,39380,39381],{"align":13641},"AAC 44.1kHz stereo",[2058,39383,39384],{"align":13641},"AAC 96kHz stereo",[2043,39386,39387,39392,39395],{},[2058,39388,39389],{},[23,39390,39391],{},"Audio generation",[2058,39393,39394],{"align":13641},"Built-in (voice, SFX, music)",[2058,39396,39397],{"align":13641},"Built-in",[2043,39399,39400,39405,39408],{},[2058,39401,39402],{},[23,39403,39404],{},"Aspect ratios",[2058,39406,39407],{"align":13641},"16:9, 9:16, 1:1, 4:3, 3:4, 21:9",[2058,39409,39410],{"align":13641},"16:9, 9:16, 1:1",[2043,39412,39413,39418,39421],{},[2058,39414,39415],{},[23,39416,39417],{},"Input modes",[2058,39419,39420],{"align":13641},"Text, image, video, audio → video",[2058,39422,39423],{"align":13641},"Text, image → video",[2043,39425,39426,39431,39433],{},[2058,39427,39428],{},[23,39429,39430],{},"Max input images",[2058,39432,30386],{"align":13641},[2058,39434,5308],{"align":13641},[2043,39436,39437,39442,39444],{},[2058,39438,39439],{},[23,39440,39441],{},"Max input videos",[2058,39443,4927],{"align":13641},[2058,39445,39446],{"align":13641},"N/A",[2043,39448,39449,39454,39457],{},[2058,39450,39451],{},[23,39452,39453],{},"@-reference system",[2058,39455,39456],{"align":13641},"✅ (multimodal tags)",[2058,39458,13664],{"align":13641},[11,39460,39461],{},[23,39462,39463],{},"Key takeaways:",[96,39465,39466,39469,39472,39479],{},[73,39467,39468],{},"Seedance's 60fps produces 2× more frames in the same duration, which is why motion looks smoother",[73,39470,39471],{},"Sora's higher resolution is better for content that will be paused or screenshotted",[73,39473,39474,39475,39478],{},"Seedance's ",[37,39476,39477],{"href":2967},"multimodal @-reference system"," allows combining image, video, and audio inputs in a single prompt — a capability Sora 2 doesn't offer",[73,39480,39481],{},"Seedance supports 1080p output as well (see API parameters below), though our tests used the default 720p",[48,39483,39485],{"id":39484},"api-access-code-examples","API Access & Code Examples",[11,39487,39488],{},"Both models are accessible via REST APIs. Here's how to call each one.",[92,39490,39492],{"id":39491},"seedance-20-via-evolink-api","Seedance 2.0 via EvoLink API",[11,39494,39495],{},"EvoLink provides unified API access to Seedance 2.0 with async task processing. Here's a complete Python example:",[136,39497,39499],{"className":337,"code":39498,"language":339,"meta":141,"style":141},"import requests\nimport time\n\nAPI_KEY = \"your-evolink-api-key\"  # Get one at evolink.ai/dashboard/keys\nBASE_URL = \"https://api.evolink.ai/v1\"\n\ndef generate_video(prompt: str, duration: int = 15, quality: str = \"720p\") -> str:\n    \"\"\"Generate a video with Seedance 2.0 and return the video URL.\"\"\"\n\n    # Step 1: Submit generation task\n    response = requests.post(\n        f\"{BASE_URL}/video/generations\",\n        headers={\n            \"Authorization\": f\"Bearer {API_KEY}\",\n            \"Content-Type\": \"application/json\",\n        },\n        json={\n            \"model\": \"seedance-2.0\",\n            \"prompt\": prompt,\n            \"duration\": duration,\n            \"quality\": quality,\n            \"aspect_ratio\": \"16:9\",\n            \"generate_audio\": True,\n        },\n    )\n    response.raise_for_status()\n    task_id = response.json()[\"task_id\"]\n    print(f\"Task submitted: {task_id}\")\n\n    # Step 2: Poll for completion\n    while True:\n        status_resp = requests.get(\n            f\"{BASE_URL}/tasks/{task_id}\",\n            headers={\"Authorization\": f\"Bearer {API_KEY}\"},\n        )\n        status_resp.raise_for_status()\n        task = status_resp.json()\n\n        if task[\"status\"] == \"completed\":\n            video_url = task[\"output\"][\"video_url\"]\n            print(f\"Done! Video URL (valid 24h): {video_url}\")\n            return video_url\n        elif task[\"status\"] == \"failed\":\n            raise RuntimeError(f\"Task failed: {task.get('error', 'Unknown error')}\")\n\n        print(f\"Status: {task['status']}... waiting 5s\")\n        time.sleep(5)\n\n\n# Run the porcelain vase test\nvideo = generate_video(\n    prompt=(\n        \"A porcelain vase falls from a marble table in slow motion. \"\n        \"Camera starts with a close-up of the vase wobbling on the edge, \"\n        \"then follows it downward with a smooth tracking shot as it shatters \"\n        \"on a stone floor. Fragments scatter in all directions. \"\n        \"Dust particles float in warm afternoon sunlight streaming through a window. \"\n        \"Shallow depth of field, 24fps cinematic look\"\n    ),\n    duration=15,\n    quality=\"720p\",\n)\n",[28,39500,39501,39507,39513,39517,39528,39536,39540,39575,39580,39584,39589,39597,39610,39618,39635,39647,39652,39660,39670,39676,39682,39688,39699,39710,39714,39718,39722,39734,39754,39758,39763,39771,39779,39799,39821,39825,39829,39837,39841,39857,39873,39894,39901,39917,39947,39951,39977,39985,39989,39993,39998,40008,40016,40021,40026,40031,40036,40041,40046,40050,40060,40070],{"__ignoreMap":141},[145,39502,39503,39505],{"class":147,"line":148},[145,39504,346],{"class":258},[145,39506,328],{"class":262},[145,39508,39509,39511],{"class":147,"line":166},[145,39510,346],{"class":258},[145,39512,355],{"class":262},[145,39514,39515],{"class":147,"line":178},[145,39516,375],{"emptyLinePlaceholder":58},[145,39518,39519,39521,39523,39525],{"class":147,"line":187},[145,39520,387],{"class":155},[145,39522,390],{"class":258},[145,39524,14498],{"class":159},[145,39526,39527],{"class":174},"  # Get one at evolink.ai/dashboard/keys\n",[145,39529,39530,39532,39534],{"class":147,"line":372},[145,39531,411],{"class":155},[145,39533,390],{"class":258},[145,39535,416],{"class":159},[145,39537,39538],{"class":147,"line":378},[145,39539,375],{"emptyLinePlaceholder":58},[145,39541,39542,39544,39546,39548,39550,39553,39555,39557,39559,39562,39564,39566,39569,39571,39573],{"class":147,"line":384},[145,39543,525],{"class":258},[145,39545,14556],{"class":151},[145,39547,15657],{"class":262},[145,39549,8531],{"class":155},[145,39551,39552],{"class":262},", duration: ",[145,39554,17574],{"class":155},[145,39556,390],{"class":258},[145,39558,5854],{"class":155},[145,39560,39561],{"class":262},", quality: ",[145,39563,8531],{"class":155},[145,39565,390],{"class":258},[145,39567,39568],{"class":159}," \"720p\"",[145,39570,15662],{"class":262},[145,39572,8531],{"class":155},[145,39574,859],{"class":262},[145,39576,39577],{"class":147,"line":408},[145,39578,39579],{"class":159},"    \"\"\"Generate a video with Seedance 2.0 and return the video URL.\"\"\"\n",[145,39581,39582],{"class":147,"line":419},[145,39583,375],{"emptyLinePlaceholder":58},[145,39585,39586],{"class":147,"line":430},[145,39587,39588],{"class":174},"    # Step 1: Submit generation task\n",[145,39590,39591,39593,39595],{"class":147,"line":454},[145,39592,1428],{"class":262},[145,39594,266],{"class":258},[145,39596,1433],{"class":262},[145,39598,39599,39601,39603,39605,39608],{"class":147,"line":465},[145,39600,1438],{"class":258},[145,39602,448],{"class":159},[145,39604,678],{"class":155},[145,39606,39607],{"class":159},"/video/generations\"",[145,39609,451],{"class":262},[145,39611,39612,39614,39616],{"class":147,"line":599},[145,39613,1456],{"class":700},[145,39615,266],{"class":258},[145,39617,1866],{"class":262},[145,39619,39620,39623,39625,39627,39629,39631,39633],{"class":147,"line":604},[145,39621,39622],{"class":159},"            \"Authorization\"",[145,39624,436],{"class":262},[145,39626,439],{"class":258},[145,39628,442],{"class":159},[145,39630,445],{"class":155},[145,39632,448],{"class":159},[145,39634,451],{"class":262},[145,39636,39637,39640,39642,39645],{"class":147,"line":610},[145,39638,39639],{"class":159},"            \"Content-Type\"",[145,39641,436],{"class":262},[145,39643,39644],{"class":159},"\"application/json\"",[145,39646,451],{"class":262},[145,39648,39649],{"class":147,"line":616},[145,39650,39651],{"class":262},"        },\n",[145,39653,39654,39656,39658],{"class":147,"line":622},[145,39655,1471],{"class":700},[145,39657,266],{"class":258},[145,39659,1866],{"class":262},[145,39661,39662,39664,39666,39668],{"class":147,"line":627},[145,39663,8335],{"class":159},[145,39665,436],{"class":262},[145,39667,1309],{"class":159},[145,39669,451],{"class":262},[145,39671,39672,39674],{"class":147,"line":638},[145,39673,8346],{"class":159},[145,39675,8349],{"class":262},[145,39677,39678,39680],{"class":147,"line":653},[145,39679,8354],{"class":159},[145,39681,16687],{"class":262},[145,39683,39684,39686],{"class":147,"line":659},[145,39685,8365],{"class":159},[145,39687,16695],{"class":262},[145,39689,39690,39693,39695,39697],{"class":147,"line":670},[145,39691,39692],{"class":159},"            \"aspect_ratio\"",[145,39694,436],{"class":262},[145,39696,1385],{"class":159},[145,39698,451],{"class":262},[145,39700,39701,39704,39706,39708],{"class":147,"line":697},[145,39702,39703],{"class":159},"            \"generate_audio\"",[145,39705,436],{"class":262},[145,39707,1139],{"class":155},[145,39709,451],{"class":262},[145,39711,39712],{"class":147,"line":709},[145,39713,39651],{"class":262},[145,39715,39716],{"class":147,"line":715},[145,39717,1484],{"class":262},[145,39719,39720],{"class":147,"line":721},[145,39721,2797],{"class":262},[145,39723,39724,39726,39728,39730,39732],{"class":147,"line":727},[145,39725,7076],{"class":262},[145,39727,266],{"class":258},[145,39729,12049],{"class":262},[145,39731,7553],{"class":159},[145,39733,763],{"class":262},[145,39735,39736,39738,39740,39742,39744,39746,39748,39750,39752],{"class":147,"line":738},[145,39737,1102],{"class":155},[145,39739,793],{"class":262},[145,39741,439],{"class":258},[145,39743,6449],{"class":159},[145,39745,684],{"class":155},[145,39747,687],{"class":262},[145,39749,690],{"class":155},[145,39751,448],{"class":159},[145,39753,405],{"class":262},[145,39755,39756],{"class":147,"line":743},[145,39757,375],{"emptyLinePlaceholder":58},[145,39759,39760],{"class":147,"line":749},[145,39761,39762],{"class":174},"    # Step 2: Poll for completion\n",[145,39764,39765,39767,39769],{"class":147,"line":766},[145,39766,641],{"class":258},[145,39768,14679],{"class":155},[145,39770,859],{"class":262},[145,39772,39773,39775,39777],{"class":147,"line":787},[145,39774,14686],{"class":262},[145,39776,266],{"class":258},[145,39778,667],{"class":262},[145,39780,39781,39783,39785,39787,39789,39791,39793,39795,39797],{"class":147,"line":833},[145,39782,673],{"class":258},[145,39784,448],{"class":159},[145,39786,678],{"class":155},[145,39788,681],{"class":159},[145,39790,684],{"class":155},[145,39792,687],{"class":262},[145,39794,690],{"class":155},[145,39796,448],{"class":159},[145,39798,451],{"class":262},[145,39800,39801,39803,39805,39807,39809,39811,39813,39815,39817,39819],{"class":147,"line":838},[145,39802,701],{"class":700},[145,39804,266],{"class":258},[145,39806,684],{"class":262},[145,39808,31308],{"class":159},[145,39810,436],{"class":262},[145,39812,439],{"class":258},[145,39814,442],{"class":159},[145,39816,445],{"class":155},[145,39818,448],{"class":159},[145,39820,19396],{"class":262},[145,39822,39823],{"class":147,"line":844},[145,39824,712],{"class":262},[145,39826,39827],{"class":147,"line":862},[145,39828,14727],{"class":262},[145,39830,39831,39833,39835],{"class":147,"line":871},[145,39832,730],{"class":262},[145,39834,266],{"class":258},[145,39836,14736],{"class":262},[145,39838,39839],{"class":147,"line":886},[145,39840,375],{"emptyLinePlaceholder":58},[145,39842,39843,39845,39847,39849,39851,39853,39855],{"class":147,"line":902},[145,39844,847],{"class":258},[145,39846,757],{"class":262},[145,39848,760],{"class":159},[145,39850,14751],{"class":262},[145,39852,853],{"class":258},[145,39854,856],{"class":159},[145,39856,859],{"class":262},[145,39858,39859,39861,39863,39865,39867,39869,39871],{"class":147,"line":914},[145,39860,7262],{"class":262},[145,39862,266],{"class":258},[145,39864,757],{"class":262},[145,39866,21344],{"class":159},[145,39868,1563],{"class":262},[145,39870,14773],{"class":159},[145,39872,763],{"class":262},[145,39874,39875,39877,39879,39881,39884,39886,39888,39890,39892],{"class":147,"line":953},[145,39876,5442],{"class":155},[145,39878,793],{"class":262},[145,39880,439],{"class":258},[145,39882,39883],{"class":159},"\"Done! Video URL (valid 24h): ",[145,39885,684],{"class":155},[145,39887,1679],{"class":262},[145,39889,690],{"class":155},[145,39891,448],{"class":159},[145,39893,405],{"class":262},[145,39895,39896,39898],{"class":147,"line":959},[145,39897,865],{"class":258},[145,39899,39900],{"class":262}," video_url\n",[145,39902,39903,39905,39907,39909,39911,39913,39915],{"class":147,"line":964},[145,39904,874],{"class":258},[145,39906,757],{"class":262},[145,39908,760],{"class":159},[145,39910,14751],{"class":262},[145,39912,853],{"class":258},[145,39914,881],{"class":159},[145,39916,859],{"class":262},[145,39918,39919,39921,39923,39925,39927,39929,39931,39933,39935,39937,39939,39941,39943,39945],{"class":147,"line":970},[145,39920,905],{"class":258},[145,39922,908],{"class":155},[145,39924,793],{"class":262},[145,39926,439],{"class":258},[145,39928,14831],{"class":159},[145,39930,684],{"class":155},[145,39932,17758],{"class":262},[145,39934,11712],{"class":159},[145,39936,399],{"class":262},[145,39938,942],{"class":159},[145,39940,945],{"class":262},[145,39942,690],{"class":155},[145,39944,448],{"class":159},[145,39946,405],{"class":262},[145,39948,39949],{"class":147,"line":976},[145,39950,375],{"emptyLinePlaceholder":58},[145,39952,39953,39955,39957,39959,39961,39963,39965,39968,39970,39972,39975],{"class":147,"line":988},[145,39954,790],{"class":155},[145,39956,793],{"class":262},[145,39958,439],{"class":258},[145,39960,11741],{"class":159},[145,39962,684],{"class":155},[145,39964,1530],{"class":262},[145,39966,39967],{"class":159},"'status'",[145,39969,1536],{"class":262},[145,39971,690],{"class":155},[145,39973,39974],{"class":159},"... waiting 5s\"",[145,39976,405],{"class":262},[145,39978,39979,39981,39983],{"class":147,"line":993},[145,39980,14888],{"class":262},[145,39982,1353],{"class":155},[145,39984,405],{"class":262},[145,39986,39987],{"class":147,"line":5402},[145,39988,375],{"emptyLinePlaceholder":58},[145,39990,39991],{"class":147,"line":5411},[145,39992,375],{"emptyLinePlaceholder":58},[145,39994,39995],{"class":147,"line":5439},[145,39996,39997],{"class":174},"# Run the porcelain vase test\n",[145,39999,40000,40003,40005],{"class":147,"line":5470},[145,40001,40002],{"class":262},"video ",[145,40004,266],{"class":258},[145,40006,40007],{"class":262}," generate_video(\n",[145,40009,40010,40012,40014],{"class":147,"line":5490},[145,40011,16860],{"class":700},[145,40013,266],{"class":258},[145,40015,911],{"class":262},[145,40017,40018],{"class":147,"line":5496},[145,40019,40020],{"class":159},"        \"A porcelain vase falls from a marble table in slow motion. \"\n",[145,40022,40023],{"class":147,"line":5502},[145,40024,40025],{"class":159},"        \"Camera starts with a close-up of the vase wobbling on the edge, \"\n",[145,40027,40028],{"class":147,"line":5507},[145,40029,40030],{"class":159},"        \"then follows it downward with a smooth tracking shot as it shatters \"\n",[145,40032,40033],{"class":147,"line":5520},[145,40034,40035],{"class":159},"        \"on a stone floor. Fragments scatter in all directions. \"\n",[145,40037,40038],{"class":147,"line":5547},[145,40039,40040],{"class":159},"        \"Dust particles float in warm afternoon sunlight streaming through a window. \"\n",[145,40042,40043],{"class":147,"line":5587},[145,40044,40045],{"class":159},"        \"Shallow depth of field, 24fps cinematic look\"\n",[145,40047,40048],{"class":147,"line":5606},[145,40049,3803],{"class":262},[145,40051,40052,40054,40056,40058],{"class":147,"line":5611},[145,40053,16887],{"class":700},[145,40055,266],{"class":258},[145,40057,3904],{"class":155},[145,40059,451],{"class":262},[145,40061,40062,40064,40066,40068],{"class":147,"line":5616},[145,40063,16898],{"class":700},[145,40065,266],{"class":258},[145,40067,1369],{"class":159},[145,40069,451],{"class":262},[145,40071,40072],{"class":147,"line":5621},[145,40073,405],{"class":262},[11,40075,40076,40079],{},[23,40077,40078],{},"Multimodal input example"," — using an image as the first frame:",[136,40081,40083],{"className":337,"code":40082,"language":339,"meta":141,"style":141},"response = requests.post(\n    f\"{BASE_URL}/video/generations\",\n    headers={\n        \"Authorization\": f\"Bearer {API_KEY}\",\n        \"Content-Type\": \"application/json\",\n    },\n    json={\n        \"model\": \"seedance-2.0\",\n        \"prompt\": \"@Image1 as first frame, the vase begins to wobble and fall\",\n        \"image_urls\": [\"https://example.com/porcelain-vase.jpg\"],\n        \"duration\": 10,\n        \"quality\": \"1080p\",\n    },\n)\n",[28,40084,40085,40093,40105,40113,40130,40141,40145,40153,40163,40174,40185,40195,40205,40209],{"__ignoreMap":141},[145,40086,40087,40089,40091],{"class":147,"line":148},[145,40088,6387],{"class":262},[145,40090,266],{"class":258},[145,40092,1433],{"class":262},[145,40094,40095,40097,40099,40101,40103],{"class":147,"line":166},[145,40096,6396],{"class":258},[145,40098,448],{"class":159},[145,40100,678],{"class":155},[145,40102,39607],{"class":159},[145,40104,451],{"class":262},[145,40106,40107,40109,40111],{"class":147,"line":178},[145,40108,6409],{"class":700},[145,40110,266],{"class":258},[145,40112,1866],{"class":262},[145,40114,40115,40118,40120,40122,40124,40126,40128],{"class":147,"line":187},[145,40116,40117],{"class":159},"        \"Authorization\"",[145,40119,436],{"class":262},[145,40121,439],{"class":258},[145,40123,442],{"class":159},[145,40125,445],{"class":155},[145,40127,448],{"class":159},[145,40129,451],{"class":262},[145,40131,40132,40135,40137,40139],{"class":147,"line":372},[145,40133,40134],{"class":159},"        \"Content-Type\"",[145,40136,436],{"class":262},[145,40138,39644],{"class":159},[145,40140,451],{"class":262},[145,40142,40143],{"class":147,"line":378},[145,40144,22006],{"class":262},[145,40146,40147,40149,40151],{"class":147,"line":384},[145,40148,6420],{"class":700},[145,40150,266],{"class":258},[145,40152,1866],{"class":262},[145,40154,40155,40157,40159,40161],{"class":147,"line":408},[145,40156,1304],{"class":159},[145,40158,436],{"class":262},[145,40160,1309],{"class":159},[145,40162,451],{"class":262},[145,40164,40165,40167,40169,40172],{"class":147,"line":419},[145,40166,1320],{"class":159},[145,40168,436],{"class":262},[145,40170,40171],{"class":159},"\"@Image1 as first frame, the vase begins to wobble and fall\"",[145,40173,451],{"class":262},[145,40175,40176,40178,40180,40183],{"class":147,"line":430},[145,40177,2688],{"class":159},[145,40179,10692],{"class":262},[145,40181,40182],{"class":159},"\"https://example.com/porcelain-vase.jpg\"",[145,40184,10698],{"class":262},[145,40186,40187,40189,40191,40193],{"class":147,"line":454},[145,40188,1348],{"class":159},[145,40190,436],{"class":262},[145,40192,536],{"class":155},[145,40194,451],{"class":262},[145,40196,40197,40199,40201,40203],{"class":147,"line":465},[145,40198,1364],{"class":159},[145,40200,436],{"class":262},[145,40202,3709],{"class":159},[145,40204,451],{"class":262},[145,40206,40207],{"class":147,"line":599},[145,40208,22006],{"class":262},[145,40210,40211],{"class":147,"line":604},[145,40212,405],{"class":262},[11,40214,40215,40216,39277],{},"For advanced multimodal workflows with @Image, @Video, and @Audio references, see our ",[37,40217,40218],{"href":2967},"@Tags guide",[92,40220,40222],{"id":40221},"sora-2-via-openai-api","Sora 2 via OpenAI API",[136,40224,40226],{"className":337,"code":40225,"language":339,"meta":141,"style":141},"from openai import OpenAI\n\nclient = OpenAI()  # Uses OPENAI_API_KEY env var\n\n# Submit video generation\nresponse = client.responses.create(\n    model=\"sora\",\n    input=[{\n        \"type\": \"text\",\n        \"text\": (\n            \"A porcelain vase falls from a marble table in slow motion. \"\n            \"Camera starts with a close-up of the vase wobbling on the edge, \"\n            \"then follows it downward with a smooth tracking shot as it shatters \"\n            \"on a stone floor. Fragments scatter in all directions. \"\n            \"Dust particles float in warm afternoon sunlight streaming through a window. \"\n            \"Shallow depth of field, 24fps cinematic look\"\n        ),\n    }],\n    resolution=\"1080p\",\n    duration=15,\n)\n\n# Get the video URL from the response\nvideo_url = response.output[0].url\nprint(f\"Video URL: {video_url}\")\n",[28,40227,40228,40240,40244,40257,40261,40266,40275,40287,40297,40309,40316,40321,40326,40331,40336,40341,40346,40350,40355,40366,40376,40380,40384,40389,40403],{"__ignoreMap":141},[145,40229,40230,40232,40235,40237],{"class":147,"line":148},[145,40231,6586],{"class":258},[145,40233,40234],{"class":262}," openai ",[145,40236,346],{"class":258},[145,40238,40239],{"class":262}," OpenAI\n",[145,40241,40242],{"class":147,"line":166},[145,40243,375],{"emptyLinePlaceholder":58},[145,40245,40246,40249,40251,40254],{"class":147,"line":178},[145,40247,40248],{"class":262},"client ",[145,40250,266],{"class":258},[145,40252,40253],{"class":262}," OpenAI()  ",[145,40255,40256],{"class":174},"# Uses OPENAI_API_KEY env var\n",[145,40258,40259],{"class":147,"line":187},[145,40260,375],{"emptyLinePlaceholder":58},[145,40262,40263],{"class":147,"line":372},[145,40264,40265],{"class":174},"# Submit video generation\n",[145,40267,40268,40270,40272],{"class":147,"line":378},[145,40269,6387],{"class":262},[145,40271,266],{"class":258},[145,40273,40274],{"class":262}," client.responses.create(\n",[145,40276,40277,40280,40282,40285],{"class":147,"line":384},[145,40278,40279],{"class":700},"    model",[145,40281,266],{"class":258},[145,40283,40284],{"class":159},"\"sora\"",[145,40286,451],{"class":262},[145,40288,40289,40292,40294],{"class":147,"line":408},[145,40290,40291],{"class":700},"    input",[145,40293,266],{"class":258},[145,40295,40296],{"class":262},"[{\n",[145,40298,40299,40302,40304,40307],{"class":147,"line":419},[145,40300,40301],{"class":159},"        \"type\"",[145,40303,436],{"class":262},[145,40305,40306],{"class":159},"\"text\"",[145,40308,451],{"class":262},[145,40310,40311,40314],{"class":147,"line":430},[145,40312,40313],{"class":159},"        \"text\"",[145,40315,1323],{"class":262},[145,40317,40318],{"class":147,"line":454},[145,40319,40320],{"class":159},"            \"A porcelain vase falls from a marble table in slow motion. \"\n",[145,40322,40323],{"class":147,"line":465},[145,40324,40325],{"class":159},"            \"Camera starts with a close-up of the vase wobbling on the edge, \"\n",[145,40327,40328],{"class":147,"line":599},[145,40329,40330],{"class":159},"            \"then follows it downward with a smooth tracking shot as it shatters \"\n",[145,40332,40333],{"class":147,"line":604},[145,40334,40335],{"class":159},"            \"on a stone floor. Fragments scatter in all directions. \"\n",[145,40337,40338],{"class":147,"line":610},[145,40339,40340],{"class":159},"            \"Dust particles float in warm afternoon sunlight streaming through a window. \"\n",[145,40342,40343],{"class":147,"line":616},[145,40344,40345],{"class":159},"            \"Shallow depth of field, 24fps cinematic look\"\n",[145,40347,40348],{"class":147,"line":622},[145,40349,1343],{"class":262},[145,40351,40352],{"class":147,"line":627},[145,40353,40354],{"class":262},"    }],\n",[145,40356,40357,40360,40362,40364],{"class":147,"line":638},[145,40358,40359],{"class":700},"    resolution",[145,40361,266],{"class":258},[145,40363,3709],{"class":159},[145,40365,451],{"class":262},[145,40367,40368,40370,40372,40374],{"class":147,"line":653},[145,40369,16887],{"class":700},[145,40371,266],{"class":258},[145,40373,3904],{"class":155},[145,40375,451],{"class":262},[145,40377,40378],{"class":147,"line":659},[145,40379,405],{"class":262},[145,40381,40382],{"class":147,"line":670},[145,40383,375],{"emptyLinePlaceholder":58},[145,40385,40386],{"class":147,"line":697},[145,40387,40388],{"class":174},"# Get the video URL from the response\n",[145,40390,40391,40393,40395,40398,40400],{"class":147,"line":709},[145,40392,29637],{"class":262},[145,40394,266],{"class":258},[145,40396,40397],{"class":262}," response.output[",[145,40399,782],{"class":155},[145,40401,40402],{"class":262},"].url\n",[145,40404,40405,40407,40409,40411,40414,40416,40418,40420,40422],{"class":147,"line":715},[145,40406,6442],{"class":155},[145,40408,793],{"class":262},[145,40410,439],{"class":258},[145,40412,40413],{"class":159},"\"Video URL: ",[145,40415,684],{"class":155},[145,40417,1679],{"class":262},[145,40419,690],{"class":155},[145,40421,448],{"class":159},[145,40423,405],{"class":262},[11,40425,40426],{},"Both APIs follow a similar pattern: submit a prompt, get back a video. But the differences go beyond just the endpoint.",[11,40428,40429,40432],{},[23,40430,40431],{},"Async vs sync:"," The EvoLink API for Seedance is asynchronous — you submit a task and poll for completion (or use a webhook callback). Sora via OpenAI returns directly. For production pipelines processing many videos, the async pattern is often preferable since you can submit batches without blocking.",[11,40434,40435,40438],{},[23,40436,40437],{},"Input flexibility:"," Seedance's @-reference system lets you combine up to 9 images, 3 videos, and 3 audio tracks in a single prompt. You can say \"@Image1 as first frame, replicate @Video1 camera movement, sync to @Audio1 beat.\" Sora 2 supports image input but doesn't offer this kind of multimodal composition.",[11,40440,40441,40444],{},[23,40442,40443],{},"Output options:"," Seedance lets you toggle audio generation on or off per request, choose from six aspect ratios (including 21:9 ultrawide), and select 480p/720p/1080p resolution. Sora offers fewer output configuration options but delivers higher default resolution.",[11,40446,40447,40450],{},[23,40448,40449],{},"Video URL expiry:"," EvoLink video URLs expire after 24 hours — download or cache them immediately. Plan your pipeline accordingly.",[38379,40452,40453],{"type":21668},[11,40454,40455,2427,40458,40461],{},[23,40456,40457],{},"Run this comparison yourself.",[37,40459,40460],{"href":16295},"Get your EvoLink API key"," and test with your own prompts. The code above works out of the box.",[48,40463,40465],{"id":40464},"pricing-breakdown","Pricing Breakdown",[11,40467,40468],{},"Cost per 15-second video at default settings, as of February 2026:",[92,40470,40472],{"id":40471},"sora-2-via-openai-evolink","Sora 2 (via OpenAI / EvoLink)",[2037,40474,40475,40486],{},[2040,40476,40477],{},[2043,40478,40479,40481,40483],{},[2046,40480,39306],{},[2046,40482,18152],{"align":13641},[2046,40484,40485],{"align":13641},"Price per video",[2053,40487,40488,40499,40510,40522],{},[2043,40489,40490,40492,40494],{},[2058,40491,1788],{},[2058,40493,4067],{"align":13641},[2058,40495,40496],{"align":13641},[23,40497,40498],{},"$0.50",[2043,40500,40501,40503,40505],{},[2058,40502,1788],{},[2058,40504,4070],{"align":13641},[2058,40506,40507],{"align":13641},[23,40508,40509],{},"$1.00",[2043,40511,40512,40514,40517],{},[2058,40513,1788],{},[2058,40515,40516],{"align":13641},"12s",[2058,40518,40519],{"align":13641},[23,40520,40521],{},"$1.20",[2043,40523,40524,40526,40529],{},[2058,40525,1788],{},[2058,40527,40528],{"align":13641},"20s",[2058,40530,40531],{"align":13641},[23,40532,40533],{},"$2.00",[11,40535,40536,40537,40540,40541,40544],{},"That works out to ",[23,40538,40539],{},"$0.10/second"," at 720p standard tier. Our 15-second test videos cost approximately ",[23,40542,40543],{},"$1.50 each"," on Sora 2.",[11,40546,40547],{},[2619,40548,40549,40550,40555],{},"Source: ",[37,40551,40554],{"href":40552,"rel":40553},"https://seedance2api.app/pricing",[41],"seedance2api.app/pricing",", as of Feb 2026",[92,40557,40559],{"id":40558},"seedance-20-via-evolink","Seedance 2.0 (via EvoLink)",[11,40561,40562,40565],{},[23,40563,40564],{},"Pricing coming soon."," Seedance 2.0 pricing will be announced at launch. The model supports 480p, 720p, and 1080p output with optional audio generation.",[11,40567,40568],{},"For context, here's how it stacks up against other models in the market:",[2037,40570,40571,40586],{},[2040,40572,40573],{},[2043,40574,40575,40577,40580,40583],{},[2046,40576,38709],{},[2046,40578,40579],{"align":13641},"Cost per second",[2046,40581,40582],{"align":13641},"Est. cost per video",[2046,40584,40585],{"align":13641},"Max resolution",[2053,40587,40588,40599,40612,40626],{},[2043,40589,40590,40592,40595,40597],{},[2058,40591,17219],{},[2058,40593,40594],{"align":13641},"Coming soon",[2058,40596,40594],{"align":13641},[2058,40598,1796],{"align":13641},[2043,40600,40601,40603,40606,40609],{},[2058,40602,38450],{},[2058,40604,40605],{"align":13641},"$0.10 (720p)",[2058,40607,40608],{"align":13641},"$1.20 / 12s",[2058,40610,40611],{"align":13641},"720p (Std) / 1080p (Pro)",[2043,40613,40614,40617,40620,40623],{},[2058,40615,40616],{},"Kling 3.0",[2058,40618,40619],{"align":13641},"$0.112 (1080p)",[2058,40621,40622],{"align":13641},"$1.12 / 10s",[2058,40624,40625],{"align":13641},"4K",[2043,40627,40628,40631,40634,40637],{},[2058,40629,40630],{},"Veo 3.1",[2058,40632,40633],{"align":13641},"$0.40 (1080p)",[2058,40635,40636],{"align":13641},"$3.20 / 8s",[2058,40638,40625],{"align":13641},[11,40640,40641],{},[2619,40642,40549,40643],{},[37,40644,40554],{"href":40552,"rel":40645},[41],[11,40647,40648,40651],{},[37,40649,40650],{"href":16295},"Get early access"," to lock in launch pricing when it's announced.",[92,40653,40655],{"id":40654},"cost-considerations","Cost Considerations",[96,40657,40658,40664,40670,40676,40686,40692],{},[73,40659,40660,40663],{},[23,40661,40662],{},"Resolution tradeoff:"," Seedance at 720p costs less than Sora at 1080p, but delivers 60fps vs 30fps. Depending on your use case, the higher frame rate may be more valuable than the higher resolution.",[73,40665,40666,40669],{},[23,40667,40668],{},"Audio bundling:"," Both models can generate synchronized audio. Factor this into your per-video cost if you'd otherwise need separate audio generation.",[73,40671,40672,40675],{},[23,40673,40674],{},"Volume matters:"," For production workloads generating hundreds of videos, even small per-second differences compound. Test both with your actual prompts before committing.",[73,40677,40678,40681,40682,40685],{},[23,40679,40680],{},"Intellectual property:"," Seedance 2.0 outputs include ",[37,40683,40684],{"href":9055},"commercial usage rights"," — verify the latest terms for your use case.",[73,40687,40688,40691],{},[23,40689,40690],{},"Hidden costs:"," Don't forget bandwidth, storage, and post-processing. Sora's higher resolution means larger file sizes (~2× per frame). If you're serving these videos to end users, CDN costs scale with file size. Seedance's 60fps means more frames per second but at lower resolution, resulting in comparable file sizes.",[73,40693,40694,40697,40698,40701],{},[23,40695,40696],{},"Free tier testing:"," Before committing to either API for production, run your actual prompts through both. The results from these three prompts may not generalize to your specific content domain. EvoLink offers a ",[37,40699,40700],{"href":16295},"free API key"," to get started with Seedance testing.",[48,40703,40705],{"id":40704},"when-to-choose-which","When to Choose Which",[11,40707,40708],{},"Picking a model isn't about \"which is better\" — it's about matching capabilities to your specific use case.",[92,40710,40712],{"id":40711},"choose-seedance-20-when","Choose Seedance 2.0 when:",[96,40714,40715,40721,40727,40733,40741,40747],{},[73,40716,40717,40720],{},[23,40718,40719],{},"Dynamic human content"," — dance, sports, action, fitness. The anatomy accuracy gap (8.5 vs 6.5 in our test) is significant.",[73,40722,40723,40726],{},[23,40724,40725],{},"Slow-motion or high-motion content"," — 60fps makes a visible difference in ads, product demos, and cinematic sequences.",[73,40728,40729,40732],{},[23,40730,40731],{},"Character close-ups"," — facial detail and micro-expression rendering are more convincing, especially for elderly or highly detailed faces.",[73,40734,40735,40738,40739,39277],{},[23,40736,40737],{},"Multimodal workflows"," — you need to combine reference images, videos, and audio in a single generation using the ",[37,40740,39453],{"href":2967},[73,40742,40743,40746],{},[23,40744,40745],{},"Rich environment scenes"," — Seedance builds more detailed, \"lived-in\" environments with more props and depth layers.",[73,40748,40749,40752],{},[23,40750,40751],{},"Flexible aspect ratios"," — 21:9 ultrawide and 4:3 formats aren't available on Sora.",[92,40754,40756],{"id":40755},"choose-sora-2-when","Choose Sora 2 when:",[96,40758,40759,40765,40771,40777],{},[73,40760,40761,40764],{},[23,40762,40763],{},"Maximum resolution matters"," — if your output will be displayed at 1080p+ or screenshotted/paused frequently, Sora's higher pixel count wins.",[73,40766,40767,40770],{},[23,40768,40769],{},"Object destruction physics"," — fracture detail on breaking objects is more convincing (uneven thickness, visible internal material layers).",[73,40772,40773,40776],{},[23,40774,40775],{},"Static or slow-moving scenes"," — when the 60fps advantage doesn't apply, Sora's resolution advantage is uncontested.",[73,40778,40779,40782],{},[23,40780,40781],{},"Existing OpenAI integration"," — if your stack already uses the OpenAI SDK, adding Sora requires minimal new infrastructure.",[92,40784,40786],{"id":40785},"the-hybrid-approach","The hybrid approach",[11,40788,40789],{},"For production pipelines, consider using both. Generate character/motion content with Seedance 2.0 and object/environment establishing shots with Sora 2. Both APIs follow standard REST patterns, making it straightforward to route prompts based on content type.",[11,40791,40792],{},"A simple routing heuristic based on our test results:",[136,40794,40796],{"className":337,"code":40795,"language":339,"meta":141,"style":141},"def choose_model(prompt: str, needs_pause_quality: bool = False) -> str:\n    \"\"\"Route to the better model based on content type.\"\"\"\n    motion_keywords = [\"dance\", \"run\", \"fight\", \"sport\", \"action\", \"slow motion\", \"jump\"]\n    face_keywords = [\"close-up\", \"expression\", \"portrait\", \"face\", \"emotion\", \"elderly\"]\n    \n    prompt_lower = prompt.lower()\n    \n    if any(kw in prompt_lower for kw in motion_keywords):\n        return \"seedance-2.0\"  # Better anatomy + 60fps\n    if any(kw in prompt_lower for kw in face_keywords):\n        return \"seedance-2.0\"  # Better facial detail\n    if needs_pause_quality:\n        return \"sora\"          # Higher resolution for screenshots\n    return \"seedance-2.0\"      # Default to higher overall score\n",[28,40797,40798,40826,40831,40875,40914,40918,40926,40930,40955,40965,40986,40995,41002,41012],{"__ignoreMap":141},[145,40799,40800,40802,40805,40807,40809,40812,40815,40817,40820,40822,40824],{"class":147,"line":148},[145,40801,525],{"class":258},[145,40803,40804],{"class":151}," choose_model",[145,40806,15657],{"class":262},[145,40808,8531],{"class":155},[145,40810,40811],{"class":262},", needs_pause_quality: ",[145,40813,40814],{"class":155},"bool",[145,40816,390],{"class":258},[145,40818,40819],{"class":155}," False",[145,40821,15662],{"class":262},[145,40823,8531],{"class":155},[145,40825,859],{"class":262},[145,40827,40828],{"class":147,"line":166},[145,40829,40830],{"class":159},"    \"\"\"Route to the better model based on content type.\"\"\"\n",[145,40832,40833,40836,40838,40840,40843,40845,40848,40850,40853,40855,40858,40860,40863,40865,40868,40870,40873],{"class":147,"line":178},[145,40834,40835],{"class":262},"    motion_keywords ",[145,40837,266],{"class":258},[145,40839,8051],{"class":262},[145,40841,40842],{"class":159},"\"dance\"",[145,40844,399],{"class":262},[145,40846,40847],{"class":159},"\"run\"",[145,40849,399],{"class":262},[145,40851,40852],{"class":159},"\"fight\"",[145,40854,399],{"class":262},[145,40856,40857],{"class":159},"\"sport\"",[145,40859,399],{"class":262},[145,40861,40862],{"class":159},"\"action\"",[145,40864,399],{"class":262},[145,40866,40867],{"class":159},"\"slow motion\"",[145,40869,399],{"class":262},[145,40871,40872],{"class":159},"\"jump\"",[145,40874,763],{"class":262},[145,40876,40877,40880,40882,40884,40887,40889,40892,40894,40897,40899,40902,40904,40907,40909,40912],{"class":147,"line":187},[145,40878,40879],{"class":262},"    face_keywords ",[145,40881,266],{"class":258},[145,40883,8051],{"class":262},[145,40885,40886],{"class":159},"\"close-up\"",[145,40888,399],{"class":262},[145,40890,40891],{"class":159},"\"expression\"",[145,40893,399],{"class":262},[145,40895,40896],{"class":159},"\"portrait\"",[145,40898,399],{"class":262},[145,40900,40901],{"class":159},"\"face\"",[145,40903,399],{"class":262},[145,40905,40906],{"class":159},"\"emotion\"",[145,40908,399],{"class":262},[145,40910,40911],{"class":159},"\"elderly\"",[145,40913,763],{"class":262},[145,40915,40916],{"class":147,"line":372},[145,40917,562],{"class":262},[145,40919,40920,40922,40924],{"class":147,"line":378},[145,40921,15676],{"class":262},[145,40923,266],{"class":258},[145,40925,15681],{"class":262},[145,40927,40928],{"class":147,"line":384},[145,40929,562],{"class":262},[145,40931,40932,40934,40937,40940,40942,40945,40947,40950,40952],{"class":147,"line":408},[145,40933,2505],{"class":258},[145,40935,40936],{"class":155}," any",[145,40938,40939],{"class":262},"(kw ",[145,40941,1180],{"class":258},[145,40943,40944],{"class":262}," prompt_lower ",[145,40946,8088],{"class":258},[145,40948,40949],{"class":262}," kw ",[145,40951,1180],{"class":258},[145,40953,40954],{"class":262}," motion_keywords):\n",[145,40956,40957,40959,40962],{"class":147,"line":419},[145,40958,7051],{"class":258},[145,40960,40961],{"class":159}," \"seedance-2.0\"",[145,40963,40964],{"class":174},"  # Better anatomy + 60fps\n",[145,40966,40967,40969,40971,40973,40975,40977,40979,40981,40983],{"class":147,"line":430},[145,40968,2505],{"class":258},[145,40970,40936],{"class":155},[145,40972,40939],{"class":262},[145,40974,1180],{"class":258},[145,40976,40944],{"class":262},[145,40978,8088],{"class":258},[145,40980,40949],{"class":262},[145,40982,1180],{"class":258},[145,40984,40985],{"class":262}," face_keywords):\n",[145,40987,40988,40990,40992],{"class":147,"line":454},[145,40989,7051],{"class":258},[145,40991,40961],{"class":159},[145,40993,40994],{"class":174},"  # Better facial detail\n",[145,40996,40997,40999],{"class":147,"line":465},[145,40998,2505],{"class":258},[145,41000,41001],{"class":262}," needs_pause_quality:\n",[145,41003,41004,41006,41009],{"class":147,"line":599},[145,41005,7051],{"class":258},[145,41007,41008],{"class":159}," \"sora\"",[145,41010,41011],{"class":174},"          # Higher resolution for screenshots\n",[145,41013,41014,41016,41018],{"class":147,"line":604},[145,41015,1704],{"class":258},[145,41017,40961],{"class":159},[145,41019,41020],{"class":174},"      # Default to higher overall score\n",[11,41022,41023],{},"This is intentionally simplistic — your production router would use more sophisticated classification. But the principle holds: match the model to the content's primary requirement.",[92,41025,41027],{"id":41026},"what-about-other-models","What about other models?",[11,41029,41030],{},"This comparison focused exclusively on Seedance 2.0 and Sora 2 because they represent the current production-grade tier of AI video APIs. Other models like Runway Gen-3, Pika, and Kling are viable alternatives but weren't included in this specific test. We may cover broader comparisons in future articles.",[48,41032,13137],{"id":13136},[92,41034,41036],{"id":41035},"is-seedance-20-better-than-sora-2","Is Seedance 2.0 better than Sora 2?",[11,41038,41039],{},"In our tests, Seedance 2.0 scored higher overall (8.5 vs 8.0), with particular strengths in human anatomy accuracy, motion fluidity (60fps), lighting, and facial detail. Sora 2 wins on resolution and object fracture physics. Neither is universally \"better\" — it depends on your content type.",[92,41041,41043],{"id":41042},"can-i-access-seedance-20-through-an-api","Can I access Seedance 2.0 through an API?",[11,41045,41046,41047,41051,41052,39277],{},"Yes. Seedance 2.0 is available through the ",[37,41048,41050],{"href":15974,"rel":41049},[41],"EvoLink API"," with standard REST endpoints. It supports text-to-video, image-to-video, and video-to-video generation. ",[37,41053,41054],{"href":16295},"Get an API key here",[92,41056,41058],{"id":41057},"whats-the-actual-output-quality-difference-at-720p","What's the actual output quality difference at 720p?",[11,41060,41061],{},"At matched 720p resolution, Seedance delivers 60fps while Sora delivers 30fps. This means Seedance produces twice as many frames per second, resulting in noticeably smoother motion — especially in fast-moving scenes. For static content, the visual quality is comparable at the same resolution.",[92,41063,41065],{"id":41064},"do-both-models-generate-audio","Do both models generate audio?",[11,41067,41068,41069,41071],{},"Yes. Both Seedance 2.0 and Sora 2 can generate synchronized audio including voice, sound effects, and background music. Seedance allows you to control audio generation with a ",[28,41070,1824],{}," parameter and can align output to reference audio tracks via the @Audio tag.",[92,41073,41075],{"id":41074},"which-model-is-more-cost-effective-for-production-use","Which model is more cost-effective for production use?",[11,41077,41078,41079,41082],{},"It depends on volume and content type. Sora 2 standard tier costs $0.10/second for 720p — a 15-second video runs about $1.50. Seedance 2.0 pricing hasn't been announced yet (coming at launch). Check ",[37,41080,40554],{"href":40552,"rel":41081},[41]," for the latest. If your content is motion-heavy, Seedance's 60fps at 720p may deliver better perceived quality per dollar than Sora's 30fps at the same resolution.",[92,41084,41086],{"id":41085},"can-i-use-seedance-20-outputs-commercially","Can I use Seedance 2.0 outputs commercially?",[11,41088,41089,41090,41093],{},"Seedance 2.0 outputs through the EvoLink API include commercial usage rights, but terms vary. Read our ",[37,41091,41092],{"href":9055},"detailed copyright and licensing guide"," for the full breakdown of what's allowed, including monetization on YouTube, use in client work, and redistribution rights. Always verify the latest terms before production deployment.",[45,41095],{},[48,41097,41099],{"id":41098},"final-scores","Final Scores",[2037,41101,41102,41112],{},[2040,41103,41104],{},[2043,41105,41106,41108,41110],{},[2046,41107,38800],{},[2046,41109,17219],{"align":13641},[2046,41111,38450],{"align":13641},[2053,41113,41114,41124,41133,41143,41153,41162],{},[2043,41115,41116,41118,41121],{},[2058,41117,38712],{},[2058,41119,41120],{"align":13641},"8.7",[2058,41122,41123],{"align":13641},"8.3",[2043,41125,41126,41128,41130],{},[2058,41127,38715],{},[2058,41129,41123],{"align":13641},[2058,41131,41132],{"align":13641},"7.8",[2043,41134,41135,41138,41140],{},[2058,41136,41137],{},"Physics/Anatomy Realism",[2058,41139,38749],{"align":13641},[2058,41141,41142],{"align":13641},"7.3",[2043,41144,41145,41147,41150],{},[2058,41146,38721],{},[2058,41148,41149],{"align":13641},"9.2",[2058,41151,41152],{"align":13641},"8.8",[2043,41154,41155,41158,41160],{},[2058,41156,41157],{},"Motion Fluidity",[2058,41159,38735],{"align":13641},[2058,41161,41132],{"align":13641},[2043,41163,41164,41169,41173],{},[2058,41165,41166],{},[23,41167,41168],{},"Overall",[2058,41170,41171],{"align":13641},[23,41172,38735],{},[2058,41174,41175],{"align":13641},[23,41176,38749],{},[11,41178,41179],{},"Both models represent the state of the art in AI video generation as of early 2026. Neither can generate floating dust particles. Neither produces perfect hands every time. But for production API use, these results should guide your model selection based on what you're actually building.",[11,41181,41182,41183,41187,41188,39277],{},"For the latest on Seedance model capabilities, see the official ",[37,41184,41186],{"href":38366,"rel":41185},[41],"ByteDance Seed research page",". For Sora documentation and updates, refer to ",[37,41189,41192],{"href":41190,"rel":41191},"https://platform.openai.com/docs",[41],"OpenAI's official platform docs",[38379,41194,41196],{"type":41195},"primary",[11,41197,41198,2427,41201,41204],{},[23,41199,41200],{},"Start building with Seedance 2.0.",[37,41202,41203],{"href":16295},"Get your free EvoLink API key"," and generate your first video in under a minute.",[11068,41206,41207],{},"html pre.shiki code .snl16, html code.shiki .snl16{--shiki-default:#F97583}html pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}html pre.shiki code .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}html pre.shiki code .s9osk, html code.shiki .s9osk{--shiki-default:#FFAB70}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":141,"searchDepth":166,"depth":166,"links":41209},[41210,41211,41216,41221,41226,41227,41231,41236,41242,41250],{"id":38393,"depth":166,"text":38393},{"id":38512,"depth":166,"text":38513,"children":41212},[41213,41214,41215],{"id":38525,"depth":178,"text":17219},{"id":38608,"depth":178,"text":38450},{"id":38679,"depth":178,"text":38680},{"id":38772,"depth":166,"text":38773,"children":41217},[41218,41219,41220],{"id":38786,"depth":178,"text":17219},{"id":38869,"depth":178,"text":38450},{"id":38946,"depth":178,"text":38947},{"id":39036,"depth":166,"text":39037,"children":41222},[41223,41224,41225],{"id":39049,"depth":178,"text":17219},{"id":39122,"depth":178,"text":38450},{"id":39189,"depth":178,"text":39190},{"id":39280,"depth":166,"text":39281},{"id":39484,"depth":166,"text":39485,"children":41228},[41229,41230],{"id":39491,"depth":178,"text":39492},{"id":40221,"depth":178,"text":40222},{"id":40464,"depth":166,"text":40465,"children":41232},[41233,41234,41235],{"id":40471,"depth":178,"text":40472},{"id":40558,"depth":178,"text":40559},{"id":40654,"depth":178,"text":40655},{"id":40704,"depth":166,"text":40705,"children":41237},[41238,41239,41240,41241],{"id":40711,"depth":178,"text":40712},{"id":40755,"depth":178,"text":40756},{"id":40785,"depth":178,"text":40786},{"id":41026,"depth":178,"text":41027},{"id":13136,"depth":166,"text":13137,"children":41243},[41244,41245,41246,41247,41248,41249],{"id":41035,"depth":178,"text":41036},{"id":41042,"depth":178,"text":41043},{"id":41057,"depth":178,"text":41058},{"id":41064,"depth":178,"text":41065},{"id":41074,"depth":178,"text":41075},{"id":41085,"depth":178,"text":41086},{"id":41098,"depth":166,"text":41099},"Seedance 2.0とSora 2を同一プロンプトでテストしました。実際の出力比較、フレーム単位の分析、APIコード、料金の詳細をご覧ください。",{"head":41253,"slug":41260,"date":41261,"image":41262,"tags":41263,"keywords":41269},{"meta":41254},[41255,41258],{"name":41256,"content":41257},"og:title","Seedance 2.0 vs Sora 2 API：並列テスト結果 | 2026年版",{"name":41259,"content":41251},"og:description","seedance-2-vs-sora-2-api-comparison","2026-02-24","/seedance2-vs-sora2-hero.png",[41264,41265,41266,41267,41268],"seedance 2.0","sora 2","ai動画api","api比較","動画生成",[41270,41271,41272],"seedance 2.0 vs sora 2","seedance vs sora api","ai動画api比較","/ja/blog/seedance-2-vs-sora-2-api-comparison",{"title":38352,"description":41251},"ja/blog/seedance-2-vs-sora-2-api-comparison","8X7sT1b0xnE9eUh6KdY3h7ZHITtw_vlrusZbIwEMyJA",1775067555038]