完璧なAIビデオプロンプトを作成したとします。シーンは映画的で、カメラワークは意図的、視覚的な細部も正確です。Seedance 2のAPIに送信したところ、拒否されました。明確な説明も、具体的なポリシー違反も示されず、ただ一般的な「コンテンツポリシー」エラーと表示されるだけです。
このサービスをホストする主要なプラットフォームの使用データによると、Seedance 2のAPIリクエストの37%でこの事態が発生しています。何が苛立たしいかというと、これらの拒否されたプロンプトのほとんどは、実際にはByteDanceのコンテンツポリシーに違反していないのです。それらは、ビデオ生成が開始される前にすべてのリクエストを評価するLLMベースのコンテンツフィルターで誤検知を引き起こしているのです。
従来のキーワードベースのフィルターとは異なり、Seedance 2は言語モデルを使用して、プロンプト全体の意図と文脈を解釈します。これは、API上でアプリケーションを構築する開発者にとって新たな課題を生み出します。禁止ワードのブラックリストを維持するだけではいけません。フィルターがどのようにあなたのプロンプトをシーンとして読み取るかを理解する必要があります。
このガイドでは、37%の拒否率の背景にあるパターンを解き明かし、コンテンツモデレーションを初回で通過するプロンプトを設計する方法を説明します。フィルターシステムの技術的アーキテクチャ、安全な文脈を構築するための実証済みの戦略、そしてAPI開発ツールを使用してプロンプトを体系的にテストする方法について解説します。
Seedance 2のコンテンツフィルターシステムを理解する
フィルターの実際の仕組み
Seedance 2のコンテンツモデレーションは、キーワードをスキャンしません。大規模言語モデルを使用してプロンプトを読み込み、描写しているシーンの文脈を評価します。
バイトダンスの最新モデル「Seeddance 2.0」が、海外で「狂ってる」と話題に。
— チャエン | デジライズ CEO《重要AIニュースを毎日最速で発信⚡️》 (@masahirochaen) February 10, 2026
何でもできてしまう…いろいろカオス
プロンプト例:
「図1のキャラが世界武術大会で図2のキャラと対戦する」
※著作権違反になるため、解放されても以下のような動画は作ってはいけませんpic.twitter.com/zkdsNUdSgv
これはプロンプトエンジニアリングのすべてを変えます。
フィルターは以下を解釈します。
- 意図(Intent): そのシーンは何を描写しようとしていますか?
- 文脈(Context): そのアクションを取り巻く創造的または物語的な枠組みは何ですか?
- 曖昧さ(Ambiguity): このプロンプトには複数の解釈の仕方がありますか?
「ライフル」のような単語が自動的にプロンプトにフラグを立てるわけではありません。しかし、周囲の文脈がない「人物がライフルを発射する」という表現はフラグを立てるでしょう。なぜなら、フィルターは孤立した暴力的なアクション以外に判断材料がないからです。
目的は単語を削除することではありません。明確に無害であると読み取れる文脈を構築することです。
LLMの評価プロセス
Seedance 2 API経由でプロンプトを送信すると、以下のことが起こります。
- 画像分析(画像入力が提供された場合):まず顔検出が実行され、写真的な顔は即座に拒否されます。
- プロンプトの解析:LLMがテキストプロンプト全体を単一のシーンとして読み取ります。
- 意図の分類:モデルは、そのシーンが禁止コンテンツを描写しているかどうかを評価します。
- 文脈の評価:モデルは、映画的/創造的なフレームワークが存在するかどうかを確認します。
- 最終決定:合格 → ビデオ生成開始;不合格 → APIは400エラーを返します。
この多段階プロセスは、異なるチェックポイントで不合格となる可能性があることを意味します。プロンプトがどこで失敗しているかを理解することが、修正に役立ちます。
現在の禁止コンテンツカテゴリ
ByteDanceの更新されたポリシー(2026年2月)に基づきます。
| カテゴリ | 例 | ステータス |
|---|---|---|
| 現実の人間の顔 | 識別可能な人物の写真 | 厳格にブロック |
| 有名人の肖像 | 特定の俳優、公人 | ブロック |
| 著作権で保護されたキャラクター | ディズニー、マーベルなど | ブロック |
| 文脈のない暴力 | 孤立した暴力行為 | 高い監視 |
| いかなる文脈における未成年者 | 年齢記述子 + あらゆる行動 | 最大限の機密性 |
| 政治的コンテンツ | 特定の政治家、国旗 | ブロック |
| 露骨なコンテンツ | 性的または生々しい描写 | ブロック |
重要な洞察:コンテンツよりも文脈が重要です。歴史的に正確な戦争映画のシーンは通過できますが、文脈のない孤立した銃はできません。
ApidogでSeedance 2 APIをテストする
プロンプト戦略に入る前に、体系的なテストを設定しましょう。コンテンツフィルターを扱う際は、プロンプトのバリエーションを大規模にテストし、何が通過し、何が失敗するかを追跡する必要があります。

ApidogでSeedance 2 APIを設定する
ステップ1:新しいプロジェクトを作成する
- Apidogを開き、「Seedance 2 API Testing」という名前のプロジェクトを作成します。
- これにより、すべてのビデオ生成エンドポイントが整理されます。

ステップ2:認証を設定する
Seedance 2 API(WaveSpeed、fal.ai、Replicateなどのプラットフォーム経由でアクセス)は通常、Bearerトークン認証を使用します。
- Apidogで「環境設定(Environment Settings)」に移動します。
- 環境変数を追加します。
- 名前:
SEEDANCE_API_KEY - 値: あなたのAPIトークン
- 「機密(Sensitive)」としてマークします。

ステップ3:ビデオ生成エンドポイントを作成する
以下の設定で新しいPOSTリクエストを追加します。
- URL:
https://api.fal.ai/v1/seedance/video(またはプロバイダーのエンドポイント) - ヘッダー:
Authorization:Bearer {{SEEDANCE_API_KEY}}Content-Type:application/json
ステップ4:テストプロンプトコレクションを構築する
プロンプトのバリエーションをテストするために、複数の保存済みリクエストを作成します。
{
"prompt": "cinematic wide shot, 35mm film grain, 2.39:1 anamorphic, a rider on horseback in a vast snowy landscape, overcast diffused light, muted desaturated tones",
"duration": 10,
"aspect_ratio": "16:9",
"quality": "high"
}
Apidogを使用すると、以下のことができます。
- バリエーションを並行してテスト: リクエストをクローンし、一度に1つの変数を変更します。
- 拒否パターンを追跡: 失敗したリクエストをエラーコードとともに保存します。
- リグレッションテストを自動化: API更新後も以前通過したプロンプトが機能するかを確認します。
- クライアントコードを生成: 機能するプロンプトをPython、JavaScript、またはcURLとしてエクスポートします。
Apidogを無料で試してみてください。Seedance 2のプロンプトテストワークフローを構築できます。
戦略1:機密性の高い要素の周囲に安全な文脈を構築する
シーンから機密性の高い要素を削除しないでください。劇的な瞬間を薄めないでください。代わりに、意図が明白になるような文脈でそれらを囲んでください。
問題:孤立したアクション
LLMはプロンプト全体を統一されたシーンとして読み取ります。全体的なシーンが平和な旅、文化的な瞬間、または映画的な物語として読み取れる場合、その中の1つのアクションがそれを損なうことはありません。
❌ 失敗するプロンプト:
a person fires a rifle into the sky
なぜ失敗するのか:
- シーンの文脈がない
- 創造的なフレーミングがない
- アクションの目的がない
- 曖昧な意図
フィルターは他に評価する情報がないため、慎重な判断に傾きます。
✅ 合格するプロンプト:
a rider on a horse galloping through a vast snowy mountain landscape, poncho whipping in the wind, the rider raises an old rifle overhead and fires once into the gray sky as a signal, the sound echoing across the empty valley, cinematic, 35mm film grain, 2.39:1 anamorphic
なぜ合格するのか:
- 映画的な旅の文脈
- 明確な目的(合図)
- 文化的設定(ポンチョ、古いライフル)
- 映画の美学が創造的な意図を固定する
- 広角の確立ショットのフレーミング
同じアクションでも、文脈が異なります。LLMは完全なシーンを読み取り、あなたが実世界の暴力を描写しているのではなく、映画のワンシーンを描写していると理解します。
原則: プロンプトを削ぎ落とすのではなく、構築してください。フィルターが作成しているものを理解するのに十分な文脈を与えてください。
戦略2:キャラクターを年齢ではなく役割で描写する
この戦略は、参照フレームとして画像入力を使用する場合に適用されます。Seedance 2がすでにキャラクターのビジュアルを持っている場合、彼らが誰であるかを説明する必要はありません。画像がそれを表現します。あなたのプロンプトは、彼らが何をするかを説明します。
未成年者保護フィルター
Seedance 2には非常に厳格な未成年者保護フィルターがあります。LLMがキャラクターを子供として解釈した瞬間、画像自体が合格するはずであっても、プロンプト全体が最大限の機密性で精査されます。
高感度をトリガーする単語:
- 「少年」、「少女」、「子供」、「キッズ」、「若い」
- 「ティーン」、「若者」、「未成年」
- 18歳未満の年齢を表す数字
- 「小さな子供」、「ちびっ子」
解決策:役割に基づいた描写
シーン内での役割でキャラクターを参照してください。画像がすでに視覚的アイデンティティを持っています。
❌ 失敗するプロンプト(画像入力あり):
a young boy riding a horse through snowy mountains
なぜ失敗するのか:
- 「young boy」が最大限の監視をトリガーする
- その他すべて(馬、山、雪)が未成年者安全の視点から評価される
- 無邪気な活動ですら疑わしくなる
✅ 合格するプロンプト(同じ画像あり):
a rider on a gray horse moving through snowy mountains, wearing a colorful striped poncho and leather boots, a worn saddlebag on the horse
なぜ合格するのか:
- 画像がキャラクターが誰であるかを示す
- プロンプトはアクションと環境を描写する
- フィルターは「rider」を読み取り、通常通り評価する
- 年齢に基づいた精査がない
その他の例
❌ 失敗:
a child standing alone in the wilderness
✅ 合格:
a small figure wrapped in a wool cloak, standing in a vast mountain landscape, overcast sky, wide establishing shot
原則: 画像入力を使用する場合、画像にアイデンティティを持たせてください。プロンプトはアクションとシーンを描写し、キャラクターの年齢は絶対に記述しないでください。
戦略3:すべての文で文脈を構築する
戦略1は文脈を構築すると述べています。この戦略は、*それを無駄にしない*と述べています。
LLMはプロンプト全体を一つのシーンとして評価します。すべての文は、あなたが構築している安全な文脈を強化するか、フィルターが誤解する可能性のあるノイズを導入するかのどちらかです。
何を削るべきか
これらの要素はモデレーションを通過するのに役立ちません。
- 背景ストーリー: 「長年の探索の後…」
- キャラクターの動機: 「復讐に駆られて…」
- 感情的な描写: 「途方に暮れ、一人ぼっちで…」
- 政治的な言及: 「自由のために戦う…」
- 内面的な思考: 「彼らが生き残れるか疑問に思いながら…」
フィルターは、キャラクターがなぜ山にいるのかは気にしません。カメラが何を見るかを気にします。
原則: 長くするのではなく、内容を濃くしてください。すべての文は、カメラが見るものを描写するか、シーンを創造的/映画的なものとして固定するかのいずれかであるべきです。どちらでもない文は削除してください。
構造化されたJSONプロンプト
この規律を強制する一つの方法は、プロンプトをJSONとして構造化することです。Seedance 2 APIはJSON形式のプロンプトを受け入れ、視覚的な世界とショットの描写を分けることで、すべてを整理できます。
{
"visual_world": {
"light": "overcast flat snow light, no direct sun, soft diffused shadows",
"color": "muted desaturated naturals, cold whites and grays, warm tones only on skin and fabric",
"film": "35mm grain, vintage Cooke lenses, soft halation on highlights, 2.39:1 anamorphic",
"atmosphere": "quiet, vast, isolated"
},
"sequence": {
"duration": "10 seconds",
"pacing": "starts still, builds to rapid cuts, ends in sudden stillness",
"shots": {
"shot_1": {
"duration": "3 seconds",
"camera": "static, locked off, no movement",
"action": "Rider in colorful striped poncho sitting on gray horse beside an icy stream, horse drinking, snowy peaks in background, overcast sky, completely still",
"transition": "SMASH CUT"
},
"shot_2": {
"duration": "3 seconds",
"camera": "wide shot from behind, low angle",
"action": "Rider on gray horse galloping fast through deep snow, snow kicking up, dark pine trees flanking both sides",
"transition": "SMASH CUT"
},
"shot_3": {
"duration": "4 seconds",
"camera": "wide still composition, locked off",
"action": "Flat open snow field, a gray wolf standing still on the left facing right, the rider on the stopped horse on the right facing left, both motionless, breath vapor rising, total stillness"
}
}
}
}
すべてのフィールドは目的を持っています。無駄なものはありません。視覚的な世界は一度映画的な文脈を設定し、各ショットはカメラが見るものを明確かつ集中的に記述します。
戦略4:画像入力と顔検出
Seedance 2はアップロードされた画像内の顔を積極的に検出し、LLMがプロンプトを評価する前にそれらを拒否します。これは、画像入力を含むリクエストの拒否理由で最も多いものです。
顔検出システム
ByteDanceは、ディープフェイクへの懸念とハリウッドスタジオからの法的圧力に対応して、厳格な顔検出を導入しました。このシステムは次の通りです。
- 顔の特徴についてアップロードされた画像を分析します。
- 横顔や部分的に隠された顔でも顔を検出します。
- 写真的な顔は即座に拒否します。
- 許容範囲は様々ですが、イラスト/様式化された顔は許可します。
何がブロックされるか
❌ 確実に拒否されるもの:
- 正面を向いた写真的な顔
- 顔の特徴を示す横顔の写真
- 部分的に隠された顔(サングラス、マスクなど)
- 識別可能な人物が写っている集合写真
- 有名人の写真やスクリーンショット
✅ 合格する可能性があるもの:
- 後頭部、肩が見えるもの
- 人物がフレームの5%未満を占める広角ショット
- イラスト調の顔(写真ではなくアートスタイル)
- 3Dレンダリングされたキャラクター(様式化されており、写実的ではないもの)
- 顔の細部がないシルエット
修正戦略
オプション1:顔を削除するためにトリミングする
Show character from behind: (キャラクターを後ろから見せる)
- Back of head (後頭部)
- Shoulders (肩)
- Clothing details (服装の詳細)
- Environment around them (周囲の環境)
オプション2:広角ショットを使用する
Pull the camera back so facial features
aren't detectable by the algorithm: (アルゴリズムで顔の特徴が検出されないようにカメラを引く)
- Landscape with small figure (小さな人物が写る風景)
- Environmental emphasis (環境の強調)
- Scale and atmosphere (スケールと雰囲気)
オプション3:イラストに置き換える
Convert photo reference to illustrated style first: (写真の参照を最初にイラストスタイルに変換する)
- Use an AI image-to-image tool (AI画像-画像変換ツールを使用する)
- Apply heavy artistic filters (強い芸術的フィルターを適用する)
- Remove photorealistic biometric features (写真のような生体認証の特徴を削除する)
画像が何度も拒否される場合、LLMがプロンプトを読み込む前に顔検出器が作動しています。まず画像を修正してから、再提出してください。
戦略5:映画的な言語を文脈の固定点として使用する
カメラアングル、レンズ仕様、照明の描写、アスペクト比など、あなたのプロンプトが映画の演出のように読める場合、LLMはプロンプト全体を創造的/映画的な制作の文脈として解釈します。
この文脈は本質的に安全です。映画はあらゆる種類の劇的なシーンを描写します。フィルターは、プロンプトを現実世界のシナリオとしてではなく、ショットの説明として読み取る場合に、より寛容になります。
効果的な映画用語
カメラアングルと動き:
- 「ワイド確立ショット」
- 「カメラ固定、動きなし」
- 「スローダリープッシュ」
- 「下降する航空ドローンショット」
- 「後方から追跡するトラッキングショット」
レンズとフォーマット:
- 「35mmフィルムグレイン」
- 「2.39:1アナモルフィック」
- 「ヴィンテージクックレンズ」
- 「浅い被写界深度、f/2.8」
- 「ロングレンズ圧縮、85mm」
照明の記述子:
- 「曇天の拡散光」
- 「ゴールデンアワーの逆光」
- 「柔らかな窓からの光、強い影なし」
- 「タングステン実用照明」
- 「火元からの動機づけられた照明」
映画の美学:
- 「落ち着いた彩度を落とした自然な色合い」
- 「ハイライトの柔らかなハレーション」
- 「繊細なフィルムグレインの質感」
- 「ヴィンテージなカラーグレーディング」
ビフォーアフター
❌ 映画的なフレーミングなし:
a person on a horse fires a gun in the mountains
✅ 映画的なフレーミングあり:
cinematic wide shot, 35mm film grain, 2.39:1 anamorphic, a rider on horseback in a vast snowy landscape, overcast diffused light, the rider raises a rifle and fires once into the sky as a signal, smoke rising, sound echoing, muted desaturated tones
同じコンテンツです。しかし、映画的なフレーミングはLLMに「これは映画であり、脅威ではない」と伝えます。
原則: 映画言語 = 創造的文脈 = より高いフィルター許容度。
API実装例
Seedance 2 APIをプログラムで呼び出す際に、これらの戦略を実装する方法を以下に示します。
Pythonの例:プロンプトのバリエーションをテストする
import requests
import os
API_KEY = os.environ.get("SEEDANCE_API_KEY")
BASE_URL = "https://api.fal.ai/v1/seedance/video"
def generate_video(prompt, test_name):
"""
Submit a video generation request and return the response.
"""
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
payload = {
"prompt": prompt,
"duration": 10,
"aspect_ratio": "16:9",
"quality": "high"
}
try:
response = requests.post(BASE_URL, json=payload, headers=headers)
if response.status_code == 200:
print(f"✅ {test_name} 成功")
return response.json()
else:
print(f"❌ {test_name} 失敗: {response.status_code}")
print(f"エラー: {response.json().get('error', '不明なエラー')}")
return None
except Exception as e:
print(f"❌ {test_name} ERROR: {str(e)}")
return None
# Test different prompt strategies
prompts = {
"minimal_context": "person fires rifle",
"basic_context": "hunter fires rifle in forest",
"cinematic_context": """cinematic wide shot, 35mm film grain,
weathered hunter in autumn forest clearing, raises vintage rifle
and fires at distant target, golden hour light filtering through trees,
2.39:1 anamorphic, muted earth tones"""
}
# Run tests
results = {}
for test_name, prompt in prompts.items():
results[test_name] = generate_video(prompt, test_name)
# Analyze results
passing_rate = sum(1 for r in results.values() if r is not None) / len(results)
print(f"\n合格率: {passing_rate * 100:.1f}%")
JavaScriptの例:構造化されたJSONプロンプト
const SEEDANCE_API_KEY = process.env.SEEDANCE_API_KEY;
const BASE_URL = 'https://api.fal.ai/v1/seedance/video';
async function generateVideoWithStructure(promptStructure) {
const response = await fetch(BASE_URL, {
method: 'POST',
headers: {
'Authorization': `Bearer ${SEEDANCE_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
prompt: promptStructure,
duration: 10,
aspect_ratio: '16:9',
}),
});
if (!response.ok) {
const error = await response.json();
console.error('生成に失敗しました:', error);
return null;
}
return await response.json();
}
// Structured prompt example
const structuredPrompt = {
visual_world: {
light: 'overcast flat snow light, soft diffused shadows',
color: 'muted desaturated naturals, cold whites and grays',
film: '35mm grain, vintage Cooke lenses, 2.39:1 anamorphic',
atmosphere: 'quiet, vast, isolated',
},
sequence: {
duration: '10 seconds',
shots: {
shot_1: {
duration: '5 seconds',
camera: 'static wide shot, locked off',
action: 'Rider in striped poncho on gray horse beside icy stream, horse drinking, snowy peaks in background, completely still',
},
shot_2: {
duration: '5 seconds',
camera: 'wide shot from behind, low angle',
action: 'Rider on horse galloping through deep snow, snow kicking up, dark pines flanking both sides',
},
},
},
};
// Generate video
const result = await generateVideoWithStructure(structuredPrompt);
console.log('ビデオ生成結果:', result);
現在のコンテンツ制限(2026年2月)
ByteDanceの更新されたポリシーおよび業界の報告に基づき、現在の制限は以下の通りです。
厳格に禁止されているもの
- 画像内の現実の人間の顔: 写真的な顔は即座に拒否されます。
- 有名人の肖像: 特定の俳優、ミュージシャン、公人。
- 著作権で保護されたキャラクター: ディズニー、マーベル、DC、任天堂など。
- 政治的コンテンツ: 特定の政治家、国旗、政治的シンボル。
- 露骨な性的コンテンツ: ヌード、性的行為、示唆的な画像。
- 生々しい暴力: ゴア表現、拷問、文脈のない過度な暴力。
- いかなる文脈における未成年者: あらゆる年齢記述子 + あらゆる行動。
高い監視(文脈が必須)
- 武器: 明確な映画的フレーミングと目的が必要です。
- 紛争シーン: 映画の美学と創造的な固定点が必要です。
- 孤立した人物: 環境的文脈がある方が良いです。
- 曖昧な行動: シーンの説明で明確にします。
最近の変更点(2026年)
- 音声再構築の停止: 写真から音声を再構築する機能は、プライバシー懸念のため削除されました。
- 義務的な検証: 一部のプラットフォームでは、高度な機能にアクセスする前にユーザー認証を要求します。
- 強化されたIP検出: 著作権で保護された素材に対する強力なチェック。
- リアルタイム監視: 生成されたビデオは悪用されていないかスクリーニングされます。
法的背景
ByteDanceは、著作権で保護された素材の無断使用に関して、ハリウッドスタジオからの継続的な法的圧力を受けています。モーション・ピクチャー・アソシエーションは、Seedance 2.0がトレーニングデータのために著作権で保護された作品を「大規模に無断使用」したと述べました。
これらの制限は、法的な進展に応じてさらに厳しくなる可能性があります。
ベストプラクティス概要
推奨事項
✅ 映画的文脈を構築する: 映画用語、カメラアングル、照明の描写を使用する
✅ カメラが見るものを記述する: 視覚的要素のみに焦点を当てる
✅ 役割に基づいたキャラクター描写を使用する: 年齢ではなく、「乗馬者」「人物」「旅人」など
✅ プロンプトをJSONとして構造化する: 視覚的な世界とショットの描写を分離する
✅ 体系的にテストする: Apidogを使用して、合格したものと失敗したものを追跡する
✅ 画像から顔をトリミングする: キャラクターを後ろから、または広角ショットで示す
✅ 行動に明確な目的を与える: 「ライフルを発射する」だけでなく「合図としてライフルを発射する」
✅ イラストの参照を使用する: 様式化された画像は写真よりも通過しやすい
非推奨事項
❌ 年齢の記述子を使用しない: 「少年」「少女」「子供」「若い」は最大限の監視をトリガーする
❌ 背景ストーリーを含めない: フィルターはキャラクターの動機を気にしない
❌ 写真的な顔をアップロードしない: 即座に拒否される
❌ 行動を曖昧にしない: すべての劇的要素に文脈を与える
❌ 映画的なフレーミングを省略しない: 映画的な言語は安全な文脈を作り出す
❌ 単なるキーワードを使用しない: 「人物が銃を発射する」は失敗する。シーンを構築する
❌ 有名人を参照しない: 特定の人物や著作権で保護されたキャラクターはブロックされる
信頼性の高いAIビデオ生成ワークフローを構築する準備はできましたか?Apidogをダウンロードして、Seedance 2 APIプロンプトを体系的にテストし、コンテンツモデレーションエラーをデバッグし、ビジュアルテストと自動検証を備えた本番環境対応の統合を作成しましょう。
