mcpField
A
amazon-nova-reel

amazon-nova-reel

github.com/calesthioクリエイティブ・メディア219101 回インストール15 週間前に更新
リポジトリ

amazon-nova-reel について

Amazon Bedrock Nova Reel を使う動画制作ワークフロー向けのスキルです。非同期実行、単一・複数ショットの方式、S3 への成果物保存を説明し、Legacy モデルのため有料実行前にアクセス権、ライフサイクル、承認内容を確認します。

主な機能

  1. 01単一・複数ショット生成の計画
  2. 02非同期ジョブの送信と追跡
  3. 03動画出力の S3 配信
  4. 04画像とプロンプトの要件
  5. 05ライフサイクルと有料実行承認の確認

活用シーン

  1. 016 秒のテキスト・画像から動画へのクリップ制作
  2. 02ショットリストに基づく複数ショット動画の生成
  3. 03コンセプト動画の制作とショットごとの確認
  4. 04既存 Reel ワークロードの移行計画

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/calesthio/generative-media-skills --skill amazon-nova-reel

インストール後、Claude Code で/amazon-nova-reelを入力して読み込まれたか確認します。

同梱ファイルEVAL.md

詳細

Amazon Nova Reel の本番運用

Nova Reel は、同期型のクリップ生成関数ではなく、非同期の本番運用サービスとして扱ってください。ショットを計画し、すべての入力を検証し、正確な承認を得て、冪等性トークンを使って一度だけ送信し、呼び出し ARN を永続化してから、検証済みの S3 成果物のみを採用してください。

このスキルに含まれる変動する情報はすべて、2026-07-10 に AWS の一次情報源で確認済みです。料金が発生する実行の直前に、モデルへのアクセス、リージョン、料金、クォータ、ライフサイクルを再確認してください。

現在の契約を確認する

新たなデフォルトとして Nova Reel を選択しないでください。AWS の Bedrock ライフサイクル表では、公開済みの Reel の両バージョンが 2026-03-30 時点で レガシー とされており、EOL は 2026-09-30 です。

モデルリージョン現在の用途
amazon.nova-reel-v1:1us-east-1Reel 1.1 の機能を必要とし、資金を確保した移行計画がある、すでに認可済みで現在も稼働中のワークロードのみ
amazon.nova-reel-v1:0us-east-1、eu-west-1、ap-northeast-1既存の 6 秒のレガシーワークロードのみ。新規作業を移行しないでください

新規のお客様はレガシーモデルを使用できません。既存のお客様も、15 日間利用がないとアクセスを失う可能性があり、新たなプロビジョンドスループットを作成することはできません。EOL 以降、または EOL の直後からは、非公開の継続利用契約がない限り呼び出しは失敗します。移行は自動では行われません。AWS の表には現在有効な Nova Reel の後継モデルが記載されていないため、後継モデルを推測してはいけません。EOL 後も稼働させる必要がある作業では、AWS が後継モデルを公開するか、アカウントチームが非公開の契約を確認するまでは、現在有効な別のプロバイダーを選択してください。

アカウントで Reel 1.1 へのアクセスが確認済みで、EOL までに納品を完了できる場合、Reel 1.1 は次をサポートします。

  • TEXT_VIDEO:テキストから動画、または画像から動画を生成する 6 秒のショットを 1 つ作成します。
  • MULTI_SHOT_AUTOMATED:1 つの長いプロンプトを、6 秒刻みで 12~120 秒の動画に展開します。入力画像は使用しません。
  • MULTI_SHOT_MANUAL:順序付きの 6 秒のショット一覧を作成します。各ショットにはプロンプトと、任意の開始画像を指定できます。長さはショット数に応じて決まり、最長 120 秒です。
  • 英語のプロンプト、1280×720 の出力、24 fps、音声なしの動画、非同期の StartAsyncInvoke、S3 への納品。

Nova の生成ガイドでは引き続き Reel 1.1 が案内されていますが、Bedrock のライフサイクルページには、記載された日付が Bedrock の使用に適用されると明記されています。ページ間で記載が異なる場合は、ライフサイクル表を正式な情報として扱ってください。実行する前に、アカウントが対象のリージョンで対象のモデルを呼び出せること、ジョブが EOL までに完了することを確認し、移行先を記録してください。

参照先:Bedrock のモデルライフサイクル、Nova Reel の生成ガイド、Bedrock Nova Reel のモデルページ、リージョン別の互換性。

入力の上限
モードテキスト画像長さ
TEXT_VIDEO1~512 文字開始画像を 0 枚または 1 枚6 秒ちょうど
MULTI_SHOT_AUTOMATED1~4,000 文字なし12~120 秒、6 秒単位
MULTI_SHOT_MANUALショットごとに 1~512 文字ショットごとに任意で 1 枚1 ショットあたり 6 秒、最大 120 秒(したがって、最大 20 ショット)

常に fps: 24 と dimension: "1280x720" を指定してください。Seed は省略可能で、省略した場合は 42 が使用されます。指定できる値は 0~2,147,483,646 です。参照画像は PNG または JPEG 形式で、1280×720、8 ビット RGB である必要があります。PNG のアルファチャンネルが許可されるのは、すべてのピクセルが完全に不透明な場合に限られます。AWS は、S3 から指定する画像のサイズ上限を 25 MB としています。画像は開始キーフレームとして使用し、汎用的なスタイル参照用の画像集として使用しないでください。

AWS の現在の手動モードに関する説明には、ショット数の個別の最小値は記載されていません。6 秒のショットを 1 つ生成する場合は TEXT_VIDEO を使用し、実際に複数のショットが必要な場合は手動モードを使用してください。「少なくとも 2 つ」という制作上の慣例を、サービススキーマの最小要件として記載しないでください。Reel 1.0 は従来の 6 秒モデルです。長尺および複数ショットのリクエストには Reel 1.1 が必要です。

出典:動画生成へのアクセスと入力スキーマ。

編集方針に基づいてモードを選択する

  • 独立した 6 秒の挿入映像、最初のフレームからのアニメーション、または低コストのコンセプト検討には TEXT_VIDEO を選択します。
  • 正確なショットの区切りよりも、全体のテーマとスタイルの流れを重視する場合は MULTI_SHOT_AUTOMATED を選択します。このモードでは画像を条件として指定できません。
  • 編集用のショットリストが承認済みの場合、または特定の開始フレーム、製品のアングル、制御されたトランジションが必要な場合は MULTI_SHOT_MANUAL を選択します。
  • ショットごとに個別の選定、差し替え、予算、納期が必要な場合は、6 秒のジョブを別々に生成します。複数ショットのリクエストが失敗しても、信頼できる部分的な完成映像は得られません。

Nova Reel には音声機能が組み込まれていません。音楽、セリフ、環境音、効果音は別途予算を確保し、制作してください。リップシンク、正確な文字表現、製品形状の完全な再現、物理的な正確さ、または Seed による確定的な再現を保証しないでください。AWS は、画面上の文字に一貫性があることや、人間の解剖学的形状が正確であることは保証されないと明示しています。

会話ではなく、動きを直接記述する

チャットへの指示ではなく、映像の描写を書いてください。最も重要な被写体と動作を最初に記し、続けて環境、照明、ルック、カメラの動きを指定します。6 秒の各ショットには、主要なカメラワークを 1 つだけ使用してください。

AWS がドキュメントで紹介している有用なカメラワークの表現には、dolly in、dolly out、pan left、pan right、tilt up、tilt down、orbit、tracking shot、zoom in、zoom out、static shot などがあります。時間の経過に伴う目に見える変化を描写してください。「映画のようにして」ではなく、「蒸気が上向きに渦巻くなか、カメラがゆっくりとドリーインする」と記述します。

画像から動画を生成する場合は、望ましい動きと変化だけを記述してください。参照画像と食い違う描写を加えると、内容がずれるおそれがあります。安定した名詞と属性を繰り返し使い、被写体の同一性を保ってください。各手動モードのショットで、同じ製品名、素材、色、服装、時刻、レンズに関する表現を繰り返します。

制作上のヒューリスティック: 複数ショットの生成を始める前に、連続性の指針を確定します。

  1. 被写体の同一性:固定する説明と、変更してはならない要素を明確にします。
  2. 世界のルール:場所、天候、時刻、色調、質感、アスペクト比、レンズの雰囲気を決めます。
  3. 動きの文法:カメラの高さ、速度、方向、トランジションの意図を定めます。
  4. ショットの目的:6 秒の各単位で新たに伝える情報を決めます。
  5. 連続性の基準:動きの開始・終了方向、画面内の位置、アクションの状態、照明の方向を定めます。

出典:Nova Reel のプロンプト作成に関するベストプラクティス。

有効なリクエストを作成する

例:単発の画像から動画へのリクエスト

意図:新しい製品デザインを持ち込まず、承認済みのパックショットをアニメーション化します。

model_input = {
    "taskType": "TEXT_VIDEO",
    "textToVideoParams": {
        "text": (
            "Slow dolly in on the cobalt glass perfume bottle. "
            "A narrow highlight travels across the glass while faint mist drifts behind it. "
            "Dark slate studio, soft rim light, premium restrained motion."
        ),
        "images": [{
            "format": "png",
            "source": {"s3Location": {
                "uri": "s3://approved-inputs/campaign-42/bottle-1280x720.png",
                "bucketOwner": "123456789012"
            }}
        }]
    },
    "videoGenerationConfig": {
        "durationSeconds": 6,
        "fps": 24,
        "dimension": "1280x720",
        "seed": 1845
    }
}

期待される結果:提供されたフレームから始まる、音声なしの6秒間の720pクリップです。ラベルの変形、反射の変化、過剰な霧、要求より強いカメラの動きなどが、起こり得る失敗です。製品の描写に重大な誤りがある場合は、修正せず却下してください。

例:自動生成による18秒のコンセプト
model_input = {
    "taskType": "MULTI_SHOT_AUTOMATED",
    "multiShotAutomatedParams": {
        "text": (
            "Cinematic dawn study of a coastal research station built from weathered steel. "
            "Begin with a wide aerial approach over dark water, transition to scientists crossing "
            "a glass walkway, and finish inside the warm laboratory looking back toward the sea. "
            "Maintain overcast blue exterior light, amber interiors, realistic architecture, slow "
            "controlled camera motion, and a quiet documentary tone throughout."
        )
    },
    "videoGenerationConfig": {
        "durationSeconds": 18,
        "fps": 24,
        "dimension": "1280x720",
        "seed": 9071
    }
}

このモードはアイデア出しに使用し、正確な編集タイミングには使用しないでください。納品された各ショットとoutput.mp4の両方を確認してください。

例:手動で作成する3ショットのストーリーボード
model_input = {
    "taskType": "MULTI_SHOT_MANUAL",
    "multiShotManualParams": {
        "shots": [
            {"text": "Wide static shot of a cobalt glass perfume bottle centered on dark slate, soft white rim light from camera left, faint haze, premium minimal studio."},
            {"text": "Macro tracking shot moving left to right across the same cobalt glass bottle, preserving its rectangular silhouette and silver cap; the camera-left rim light glides over the glass."},
            {"text": "Slow dolly out from the same cobalt glass bottle on dark slate as the haze clears, preserving the silver cap, camera-left rim light, and restrained premium studio palette."}
        ]
    },
    "videoGenerationConfig": {
        "fps": 24,
        "dimension": "1280x720",
        "seed": 1845
    }
}

アンカーを繰り返しているのは意図的です。製品形状の厳密さが必須の場合は、各ショットに承認済みの開始画像を添付し、人による製品品質確認も必須にしてください。

有料の送信にはすべて承認ゲートを設ける

AWSはNova Reelの料金を生成秒数に基づいて設定しています。Bedrockの料金ページにあるNova Reelのインタラクティブな料金表には、2026-07-10の確認時点で生成秒あたり0.08米ドルと表示されていました。これは日付時点の計画用スナップショットとして扱い、実行時の固定値とはみなさないでください。Legacy/public-extended-accessの料金は変更される可能性があり、現在、ライフサイクル表にはReelのpublic-extended-access開始日が記載されていません。承認と実行の直前に、公式の料金表を再確認するか、アカウントの見積もりを取得してください。duration × verified rateで見積もり、S3、KMS、ロギング、取得、転送の各コストを別途加算してください。日付時点のスナップショットでは、6秒=$0.48、18秒=$1.44、120秒=$9.60です。

出典:Amazon Bedrock pricing。

以下を含む承認記録を必須としてください。

  • 正規化された承認エンベロープのSHA-256、正確なリクエスト、モデルID、リージョン、S3の入力URIと出力URI。
  • 生成秒数、確認済みの単価、通貨、承認済みの上限金額、料金の確認日時。
  • ライフサイクルの確認日時、Legacyアクセスの確認、EOL日、完了予定日、移行先。
  • すべての参照画像と描写された人物の権利/同意のステータス。
  • 保持期間の分類、承認者の本人識別情報、有効期限。
  • 実行が有料かつ非同期であることを明示した記述。

ダイジェストの欠落または不一致、承認の期限切れ、上限が有限でない、または見積もり額に満たない場合、料金/ライフサイクルの証拠が古い場合、Legacyアクセスが確認されていない場合、ジョブがEOLを超える可能性がある場合、リージョンが誤っている場合、バケット/プレフィックスが未承認の場合、または入力バイトが変更された場合は、フェイルクローズしてください。人による「よさそうです」というメッセージは、再利用可能な支出承認ではありません。

例:ドライランを先に行う送信

この完全な例は、ドライランを先に行います。EXECUTE=1で、最新の料金とライフサイクルの証拠が提示され、Legacyアクセスが明示的に確認され、承認ダイジェストがその証拠とAWSリクエストに正確に一致し、承認済みの上限が見積もり額を満たす場合にのみ送信します。呼び出しを行わずにアクセスを証明するものではありません。実行を承認する前に、オペレーターはアカウントでアクセスを確認する必要があります。

import hashlib
import json
import math
import os
from datetime import date, datetime, timezone
from decimal import Decimal, InvalidOperation
from pathlib import Path
from urllib.parse import urlparse

MODEL_ID = "amazon.nova-reel-v1:1"
REGION = "us-east-1"
OUTPUT_URI = os.environ.get("NOVA_OUTPUT_S3", "")
RATE = Decimal(os.environ.get("NOVA_RATE_USD_PER_SEC", "0.08"))  # Planning fallback only.
PRICE_VERIFIED_AT = os.environ.get("NOVA_PRICE_VERIFIED_AT", "")
LIFECYCLE_VERIFIED_AT = os.environ.get("NOVA_LIFECYCLE_VERIFIED_AT", "")
PRICE_EVIDENCE = os.environ.get("NOVA_PRICE_EVIDENCE", "")
LIFECYCLE_EVIDENCE = os.environ.get("NOVA_LIFECYCLE_EVIDENCE", "")
PLANNED_COMPLETION_DATE = os.environ.get("NOVA_PLANNED_COMPLETION_DATE", "")
EXIT_ROUTE = os.environ.get("NOVA_EXIT_ROUTE", "")
AWS_ACCOUNT_ID = os.environ.get("NOVA_AWS_ACCOUNT_ID", "")
PROJECT_ID = os.environ.get("NOVA_PROJECT_ID", "")
APPROVER_ID = os.environ.get("NOVA_APPROVER_ID", "")
APPROVAL_EXPIRES_AT = os.environ.get("NOVA_APPROVAL_EXPIRES_AT", "")
RETENTION_CLASS = os.environ.get("NOVA_RETENTION_CLASS", "")
EOL = date(2026, 9, 30)

model_input = {
    "taskType": "TEXT_VIDEO",
    "textToVideoParams": {"text": "Static wide shot of wind moving through silver grass at dawn, soft fog, natural documentary light."},
    "videoGenerationConfig": {"durationSeconds": 6, "fps": 24, "dimension": "1280x720", "seed": 42},
}
aws_request = {
    "modelId": MODEL_ID,
    "modelInput": model_input,
    "outputDataConfig": {"s3OutputDataConfig": {"s3Uri": OUTPUT_URI}},
}
approval_envelope = {
    "aws_request": aws_request,
    "unit_rate_usd_per_generated_second": str(RATE),
    "price_verified_at": PRICE_VERIFIED_AT,
    "price_evidence": PRICE_EVIDENCE,
    "lifecycle_verified_at": LIFECYCLE_VERIFIED_AT,
    "lifecycle_evidence": LIFECYCLE_EVIDENCE,
    "model_lifecycle": "Legacy",
    "eol_date": EOL.isoformat(),
    "legacy_access_confirmed": os.environ.get("NOVA_LEGACY_ACCESS_CONFIRMED") == "1",
    "planned_completion_date": PLANNED_COMPLETION_DATE,
    "exit_route": EXIT_ROUTE,
    "aws_account_id": AWS_ACCOUNT_ID,
    "project_id": PROJECT_ID,
    "approver_id": APPROVER_ID,
    "approval_expires_at": APPROVAL_EXPIRES_AT,
    "rights_and_consent_confirmed": os.environ.get("NOVA_RIGHTS_CONFIRMED") == "1",
    "retention_class": RETENTION_CLASS,
}
canonical = json.dumps(approval_envelope, sort_keys=True, separators=(",", ":")).encode()
digest = hashlib.sha256(canonical).hexdigest()
STATE = Path(os.environ.get("NOVA_STATE", f"nova-reel-{digest}.json"))
seconds = Decimal(model_input["videoGenerationConfig"]["durationSeconds"])
estimate = seconds * RATE
print(json.dumps({"approval_sha256": digest, "estimated_usd": str(estimate), "approval_envelope": approval_envelope}, indent=2))

if os.environ.get("EXECUTE") != "1":
    raise SystemExit("DRY RUN: set EXECUTE=1 only after approval")
if not RATE.is_finite() or RATE <= 0:
    raise SystemExit("verified unit rate must be finite and positive")
if REGION != "us-east-1" or MODEL_ID != "amazon.nova-reel-v1:1":
    raise SystemExit("unsupported production route")
if os.environ.get("NOVA_LEGACY_ACCESS_CONFIRMED") != "1":
    raise SystemExit("Legacy model access is not confirmed for this AWS account")
if datetime.now(timezone.utc).date() >= EOL:
    raise SystemExit("Nova Reel EOL reached; use a confirmed successor or private arrangement")
if not PRICE_VERIFIED_AT or not LIFECYCLE_VERIFIED_AT or not PRICE_EVIDENCE or not LIFECYCLE_EVIDENCE:
    raise SystemExit("current price and lifecycle verification timestamps and evidence are required")
try:
    price_checked = datetime.fromisoformat(PRICE_VERIFIED_AT.replace("Z", "+00:00"))
    lifecycle_checked = datetime.fromisoformat(LIFECYCLE_VERIFIED_AT.replace("Z", "+00:00"))
    approval_expires = datetime.fromisoformat(APPROVAL_EXPIRES_AT.replace("Z", "+00:00"))
    planned_completion = date.fromisoformat(PLANNED_COMPLETION_DATE)
except ValueError:
    raise SystemExit("invalid verification, approval-expiry, or completion timestamp")
now = datetime.now(timezone.utc)
for label, checked in (("price", price_checked), ("lifecycle", lifecycle_checked)):
    age_seconds = (now - checked).total_seconds() if checked.tzinfo is not None else -1
    if checked.tzinfo is None or age_seconds < 0 or age_seconds > 86400:
        raise SystemExit(f"{label} verification is future-dated or older than 24 hours")
if approval_expires.tzinfo is None or approval_expires <= now:
    raise SystemExit("approval is expired or lacks a timezone")
if planned_completion < now.date() or planned_completion >= EOL or not EXIT_ROUTE.strip():
    raise SystemExit("completion must be current, precede EOL, and include an exit route")
if len(AWS_ACCOUNT_ID) != 12 or not AWS_ACCOUNT_ID.isdigit() or not PROJECT_ID.strip():
    raise SystemExit("AWS account and project identity are required")
if not APPROVER_ID.strip() or not RETENTION_CLASS.strip():
    raise SystemExit("approver identity and retention class are required")
if os.environ.get("NOVA_RIGHTS_CONFIRMED") != "1":
    raise SystemExit("input, brand, and likeness rights/consent are not confirmed")
parsed = urlparse(OUTPUT_URI)
allowed = os.environ.get("NOVA_ALLOWED_OUTPUT_PREFIX", "")
if parsed.scheme != "s3" or not parsed.netloc or ".." in parsed.path.split("/"):
    raise SystemExit("invalid S3 output URI")
if not allowed or not OUTPUT_URI.startswith(allowed.rstrip("/") + "/"):
    raise SystemExit("S3 output is outside the approved bucket/prefix")
if os.environ.get("APPROVED_SHA256") != digest:
    raise SystemExit("approval digest mismatch")
try:
    maximum = Decimal(os.environ["APPROVED_MAX_USD"])
except (KeyError, InvalidOperation):
    raise SystemExit("missing or invalid approved maximum")
if not math.isfinite(float(maximum)) or maximum < estimate:
    raise SystemExit("approved maximum is non-finite or insufficient")

claim = {"state": "SUBMITTING", "approval_sha256": digest, "approval_envelope": approval_envelope, "clientRequestToken": digest}
fd = os.open(STATE, os.O_CREAT | os.O_EXCL | os.O_WRONLY, 0o600)
with os.fdopen(fd, "w", encoding="utf-8") as handle:
    json.dump(claim, handle, indent=2)
    handle.flush()
    os.fsync(handle.fileno())

def replace_state(value):
    temporary = STATE.with_name(STATE.name + ".tmp")
    temp_fd = os.open(temporary, os.O_CREAT | os.O_EXCL | os.O_WRONLY, 0o600)
    with os.fdopen(temp_fd, "w", encoding="utf-8") as handle:
        json.dump(value, handle, indent=2)
        handle.flush()
        os.fsync(handle.fileno())
    os.replace(temporary, STATE)

try:
    import boto3
    client = boto3.client("bedrock-runtime", region_name=REGION)
    response = client.start_async_invoke(
        **aws_request,
        clientRequestToken=digest,
    )
    claim.update(state="SUBMITTED", invocationArn=response["invocationArn"])
except Exception as exc:
    claim.update(state="UNKNOWN", error_type=type(exc).__name__)
    replace_state(claim)
    raise SystemExit("submission outcome unknown; reconcile by exact token before any retry")
replace_state(claim)
print(json.dumps(claim, indent=2))

APIは、冪等性のために特別にclientRequestToken(印字可能なASCII文字で1~256文字)を受け付け、invocationArnを返します。両方を永続化してください。ListAsyncInvokesは各サマリーのclientRequestTokenを返しますが、トークンによるフィルター機能はありません。最初の送信期間をページネーションして、トークンが完全一致するものを探し、復元したARNに対してGetAsyncInvokeを使用してください。一覧取得で結果を確定できず、SDK操作で再試行可能なトランスポート上の曖昧さが生じた場合は、まったく同じ論理リクエストをバイト単位で維持し、同じトークンを使用して再試行してください。ペイロードを変更したり、新しいトークンを生成したりしてはいけません。サービスから復元可能なARNが返されない場合は、エスカレーションしてください。冪等性によってジョブがキャンセルされたり、異なるトークンに対する料金が発生しなくなったりするとは主張しないでください。

出典:StartAsyncInvoke API、ListAsyncInvokes API、GetAsyncInvoke API。

非同期ジョブを運用する

  1. 後続処理に進む前に、リクエスト、ダイジェスト、トークン、呼び出し ARN、出力プレフィックス、送信時刻、承認、および入力ハッシュを保存します。
  2. 上限付きの指数バックオフとジッターを使用して GetAsyncInvoke をポーリングします。有効な状態は InProgress、Completed、および Failed です。スロットリングに従い、宣言された期限で停止します。ローカルのタイムアウトは、有料ジョブが停止したことを意味しません。
  3. ネットワークの状態が不明になった後は、ARNで照会するか、時刻と返されたトークンの完全一致を使って一覧表示します。再試行が許されるのは、同一のリクエストと同一の冪等性トークンを使用する場合のみです。新しいトークンは、新たな有料ジョブ作成のリスクになります。
  4. Completed は「確認する準備ができた」という意味であり、「配信が承認された」という意味ではないものとして扱います。
  5. プロバイダーが書き込んだ証跡を保持します。AWS のドキュメントでは、manifest.json、output.mp4、および成功したマルチショットのファイル名として shot_0001.mp4 などが記載されています。同じガイド内で、ステータスオブジェクトは概要では generation-status.json、詳細な結果セクションでは video-generation-status.json と呼ばれています。正確な呼び出しプレフィックス内で実際のオブジェクトを特定し、その名前とバイト列を保持して、ファイル名を決めつけずに、ドキュメントに記載された fullVideo/shots スキーマを検証します。

AWS によると、標準的な所要時間は6秒の動画で約90秒、2分の動画で14~17分です。これらは観測値であり、SLAではありません。日付付きのデフォルトクォータ表には、Reel 1.0 の同時リクエスト数が10件、Reel 1.1 が3件と記載されています。実際のアカウントクォータは異なる場合があり、AWS がデフォルト値を更新する可能性もあります。バッチをスケジュールする前に、Service Quotas を確認してください。

参照先:動画へのアクセスと結果スキーマ、Bedrock のクォータ。

S3 を保護し、管理の連鎖を維持する

最小権限を付与します。AWS のドキュメントでは、生成に必要な最小権限として bedrock:InvokeModel とプレフィックスをスコープ指定した s3:PutObject が記載されています。追跡には bedrock:GetAsyncInvoke と bedrock:ListAsyncInvokes も必要です。結果の読み取りには、プレフィックスをスコープ指定した s3:GetObject と、通常は s3:prefix で制約した s3:ListBucket が必要です。クロスアカウントバケットの場合は、bucketOwner とバケットポリシーを設定します。バケット名から所有者を推測しないでください。SSE-KMS の場合、必要に応じて KMS キー ARN を kmsKeyId として渡し、必要なキー使用権限のみを付与します。書き込みには kms:GenerateDataKey が必要です。読み取りには kms:Decrypt が必要な場合があります。通常、kms:DescribeKey も必要です。キーのポリシーでは、適切なプリンシパルを許可し、サポートされている場合はアカウント/ソースを制約する必要があります。

専用バケット、または承認済みのデータ境界内にあるジョブごとの不変プレフィックスを使用します。必要に応じて、Block Public Access、バージョニング、暗号化、ライフサイクルルール、CloudTrail データイベント、および明示的なバケット所有者条件を有効にします。シークレット、個人データ、または未承認のアセット名を、オブジェクトキー、プロンプト、タグ、ログに含めないでください。

昇格の前に:

  • Completed であり、特定したプロバイダーステータス JSON(現在のドキュメントの不整合により、video-generation-status.json または generation-status.json)に成功した fullVideo エントリがあることを必須とします。
  • すべての S3 URI が承認済みのバケットおよび呼び出しプレフィックスの範囲内であることを確認します。
  • バイト数の上限を設け、認証済みの SDK 呼び出しでダウンロードします。返された任意の URL は使用しないでください。
  • ffprobe で MP4 のマジックナンバー/コンテナを検証し、ファイル全体をデコードして、1280×720、24 fps、想定される6秒単位の長さ、および必須の音声トラックがないことを確認します。
  • 構成するすべてのショットを確認し、連続性、安全性、テキスト、解剖学的な正確さ、ブランド/製品の正確さ、ちらつき、歪み、意図しない人物やマークを検査します。
  • SHA-256 を計算し、オリジナルとマニフェスト/ステータスを保持して、モデル/リージョン/リクエスト/承認/ソースハッシュを記録し、既存の納品物を上書きせずにアトミックに公開します。

来歴が重要な場合は、Nova のオリジナル出力を保持してください。トランスコード、再多重化、メタデータの削除、またはソーシャルプラットフォームでの処理により、不可視のウォーターマークが残っていても Content Credentials が失われることがあります。検証していない派生物がクレデンシャルを保持していると主張せず、派生物の系譜を記録してください。

権利、プライバシー、責任あるリリース

プロジェクトで使用する権限を得ている入力画像、ブランド、場所、人物の肖像のみを使用してください。識別可能な人物やデジタルレプリカについては、文書化された同意を得てください。モデルのセーフガードが法的審査や編集上の審査に取って代わると示唆しないでください。

AWSによると、BedrockはNova Reelの入力や出力をBedrockモデルのトレーニングに使用しません。Bedrockの現在の不正利用検出ページには、デフォルトでオペレーターのアクセスがなく、データは保持されないと記載されています。また、Nova Reelを対象に含まない、モデル固有の保持に関する例外も記載されています。同ページでは別途、CSAMに該当すると思われる入力や出力は、ブロック、保存、審査、報告される場合があるとしています。S3の出力と呼び出しログは、お客様の管理下で意図的にデータを保持します。不正利用への対応、S3、ログ、バックアップ、アカウント設定を考慮せずに、「決して保存されない」や「保持期間ゼロ」と断言するのは避けてください。

Nova Reelは生成動画に不可視のウォーターマークを適用し、Reel 1.1ではC2PAベースのContent Credentialsが追加されています。元のコンテンツで認証情報を検証し、視聴者やポリシーに応じてAI生成であることを開示してください。AWS Service Termsでは、AI出力はお客様のコンテンツであり、一意であるとは限らず、Provenance Dataを削除、隠蔽、改変してはならないと定めています。AWSはまた、一般提供されているNovaの出力に対する条件付きの知的財産補償について説明しています。適用条件と除外事項は契約上の問題であり、出力の一意性、あらゆる法域における所有権、侵害のある入力を使用する許可を保証するものではありません。

出典:Nova Reel AI Service Card、Bedrock abuse detection、S3 access、AWS Service Terms、AWS Responsible AI Policy、AWS Acceptable Use Policy。

最終リリースチェックリスト

  • 現在のモデルID、ライフサイクル、リージョン、アカウントアクセス、価格、クォータ、EOL前に完了する計画、終了方法を再確認済みです。
  • モードとスキーマがクリエイティブブリーフに一致し、画像の形式、サイズ、アルファ、権利、ハッシュを確認済みです。
  • プロンプトとストーリーボードで、被写体、世界観、照明、動き、画面上の方向の一貫性が保たれています。
  • 正確なダイジェスト/コストの承認があり、冪等性のある作成試行が1回、永続的に記録されています。
  • 非同期ステータスとプロバイダーのS3マニフェスト/ステータスが保持されています。
  • 元のコンテンツとすべてのショットについて、技術、安全性、一貫性、ブランド、肖像、編集上の品質保証に合格しています。
  • 成果物のハッシュ、来歴、開示、派生物の系譜、保持期間、削除担当者が記録されています。
  • 音声と最終仕上げは、別個の承認済み制作工程として扱われています。

コメント