extra fingers, blurry, text を、動画APIにもそのまま渡す。これは手軽ですが、設計としてはかなり危ういやり方です。ネガティブプロンプトを「禁止語リスト」と考えると崩れる
-
空間的な欠陥:余分な物体、文字、ロゴ、形の破綻、ぼけ
-
時間的な欠陥:ちらつき、人物同一性の変化、形状の変形、露出の揺れ、動きの飛び

flicker や identity drift をネガティブ側へ足せば終わるとは限りません。モデルが否定指定を受け取れるか、時間方向の条件をどこまで解釈するか、参照画像や先頭・末尾フレームを使えるかによって、取るべき手段が変わります。画像用と動画用の除外指定は、同じ欄に入れない
|
比較軸
|
画像生成
|
動画生成
|
|
評価単位
|
1枚の画面
|
複数フレームと時間変化
|
|
主な除外対象
|
余分な物体、文字、透かし、解剖学的破綻
|
ちらつき、同一性の変化、形状変化、急なカメラ移動
|
|
一貫性
|
画面内の整合性
|
フレーム間一貫性と動作の連続性
|
|
修正方法
|
ネガティブ指定、マスク、インペイント
|
ネガティブ指定、肯定的な保持条件、参照フレーム、ショット分割
|
|
seedの使い方
|
同条件で構図差を見やすい
|
同条件で文言差を追えるが、時間方向の完全一致を保証するものではない
|
|
API対応
|
専用フィールドが比較的見つけやすい
|
モデル単位で対応が違い、同じサービス内でも統一されていない
|
negative_prompt があります。一方で、同社の Stable Video Diffusion APIはすでに提供終了 となっており、画像側のパラメーターを動画側にも当然使えるとは言えません。時間軸での崩れは、除外指定だけでは止めにくい
|
シーン
|
画像用の除外語だけを流用
|
動画で残りやすい問題
|
追加したい条件
|
|
人物が歩く
|
extra limbs, deformed hands |
途中で腕の長さや服の色が変わる
|
same person, consistent clothing, continuous walking motion |
|
卓上の商品を撮る
|
text, logo, blur |
背景や反射がフレームごとに揺れる
|
locked-off camera, fixed lighting, stable reflections |
|
車が旋回する
|
extra wheels, distorted body |
見えない側から車体形状が変わる
|
参照画像、短いショット、角度ごとの分割
|
|
顔のクローズアップ
|
asymmetrical face, artifacts |
まばたきの前後で顔つきが変わる
|
同一人物の保持条件、動作を1つに絞る
|

no flicker は除外ですが、stable exposure throughout the shot は保持条件です。no identity drift に対して、the same person with consistent facial features and clothing は、モデルに残してほしい状態を説明しています。no を増やすより筋が通っています。さらに、長い1本を無理に生成するより、動作を1つに限定した短いショットへ分けたほうが、どこで崩れたかも追いやすくなります。APIではモデルごとに別物として扱う
|
API/モデル
|
専用の除外指定
|
実装時の注意
|
|
Google Veo 3.1
|
negativePrompt |
長時間処理として呼び出す。モデルID、秒数、解像度、出力本数も一緒に検証する
|
|
Runway APIのVeo系
|
negativePrompt |
2026年7月にVeo 3/3.1/3.1 Fastへ追加。最大1,000文字。省略時はRunway既定値
|
|
Amazon Nova Reel
|
否定語の使用を避ける
|
no、not、without が意図と逆の結果を招く可能性があるため、肯定的な映像要約へ変換する |
|
Stability AIの画像API
|
negative_prompt |
画像側の対応例。Stable Video Diffusion APIは提供終了しており、動画へ同じ設計を流用できない
|
negativePrompt として別フィールドで渡せます。RunwayもVeo系については、2026年7月10日の更新で 最大1,000文字の negativePrompt を追加しました。no、not、without を使わないよう、動画生成プロンプトの注意点 に明記されています。「バナナのない果物かご」と書いた結果、バナナが出る可能性がある、という分かりやすい例も示されています。
共通化するなら、文字列ではなく意図を保存する
TypeScript
type NegativeSpec = {
spatial: string; // extra limbs, text, watermark など
temporal: string; // flicker, identity drift, exposure shift など
preserve: string; // same subject, fixed lighting, locked camera など
};type TargetModel =
| "vertex:veo-3.1"
| "runway:veo3.1"
| "aws:nova-reel";function compilePrompt(
model: TargetModel,
positivePrompt: string,
spec: NegativeSpec
) {
if (model === "vertex:veo-3.1" || model === "runway:veo3.1") {
return {
prompt: [positivePrompt, ...spec.preserve].join(", "),
negativePrompt: [...spec.spatial, ...spec.temporal].join(", "),
};
}
-
共通仕様のバージョン
-
変換後のpositive promptとnegative prompt
-
provider、model ID、seed、秒数、解像度
-
生成日時と料金計算用の単価スナップショット
-
レビュー結果と失敗分類
従量課金は「秒数×本数×再試行」で考える
生成費用 = 1秒あたりの単価 × 出力秒数 × 出力本数 × 実行回数
たとえばRunway APIでは、1 creditが\$0.01です。2026年8月17日時点の `gen4.5` は12 credits/秒なので、8秒を2本生成すると次の計算になります。
12 credits × 8秒 × 2本 = 192 credits = $1.92
veo3.1_fast は音声なし10 credits/秒、音声あり15 credits/秒です。同じ8秒を2本なら、音声なしは$1.60、音声ありは$2.40になります。単価は Runway APIのモデル別料金 で更新されるため、コードへ直接埋め込まず、設定値として管理したほうが安全です。レート制限はRPMだけ見ても足りない
THROTTLED となり、サーバー側のキューへ入ります。日次上限を超えると429です。つまりクライアント側で無理に一定間隔へ丸めるより、同時実行枠とキューの状態 を監視するほうが実態に合います。
queued → submitted → running → succeeded
↘ throttled → running
↘ failed / moderated / expired
データ保持は「URLの寿命」と「学習利用」を分ける
-
入力画像やプロンプトをサービスが何日保持するか
-
出力動画のダウンロードURLがいつ失効するか
-
自社のS3やCloud Storageへ何日残すか
-
入出力がモデル学習に使われるか
-
障害調査や不正利用監視のログが残るか
runway:// URIは24時間で失効します。URLが消えることと、契約上のデータ保持や学習利用の条件は同じ意味ではありません。制作ワークフローへ入れるなら、品質判定を先に決める
-
共通仕様を作る
-
空間的な除外、時間的な除外、保持条件を別々に保存します。
-
モデル能力で変換する
-
専用フィールドがあれば除外側へ渡し、否定表現を避けるモデルでは肯定的な保持条件へ書き換えます。
-
短い候補を生成する
-
長尺を一度に作らず、1ショット1動作でプロンプト差を確認します。
-
時間軸でレビューする
-
先頭、中間、末尾だけでなく、形が変わる瞬間やカメラ移動の境目を見ます。指、顔、商品形状、背景、露出、速度を別項目にします。
-
採用条件だけ本番化する
-
プロンプト、モデルID、seed、秒数、単価、結果を記録し、同じ条件で再生成できる状態にします。
negative_spec:
spatial:
- extra limbs
- unwanted text
- watermark
temporal:
- flicker
- identity drift
- geometry morphing
- abrupt exposure changes
preserve:
- same subject throughout the shot
- consistent clothing and colors
- continuous natural motion
- stable lighting
- locked camera
spatial と temporal を negativePrompt へ、preserve を通常プロンプトへ展開します。Nova Reelなら否定欄を作らず、必要な preserve だけを映像の説明へ自然に織り込みます。ネガティブ指定より先に、モデルの入口を確認する
flicker を足したものではありません。1枚の中の欠陥と、時間の途中で起きる変化を分け、さらにAPIが否定指定をどう受け取るかまで確認して初めて、運用できる形になります。-
専用のnegative promptフィールドがあるか
-
否定語ではなく肯定的な保持条件へ変換すべきか
-
秒課金、同時実行数、出力の保存先をどう記録するか