关于 amazon-nova-reel
面向使用 Amazon Bedrock Nova Reel 的视频制作工作流技能,说明异步提交、单镜头和多镜头模式及 S3 交付。它强调模型已进入 Legacy 阶段,并要求在付费运行前核实访问权、生命周期和审批信息。
主要功能
- 01规划单镜头与多镜头生成
- 02使用异步任务提交和跟踪
- 03将视频结果交付至 S3
- 04说明输入图像与提示词规范
- 05运行前核验生命周期和付费审批
适用场景
- 01制作六秒文本或图像转视频片段
- 02按镜头列表生成多镜头视频
- 03生成概念视频并检查各镜头
- 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 选作新的默认选项。截至 2026-03-30,AWS 的 Bedrock 生命周期表将已发布的 Reel 两个版本都标记为 Legacy,EOL 日期为 2026-09-30:
| 模型 | 区域 | 当前用途 |
|---|---|---|
amazon.nova-reel-v1:1 | us-east-1 | 仅适用于已获授权且仍在运行、需要 Reel 1.1 功能并有资金支持的退出计划的工作负载 |
amazon.nova-reel-v1:0 | us-east-1、eu-west-1、ap-northeast-1 | 仅适用于现有的六秒旧版工作负载;不要将新工作迁移到此版本 |
新客户无法使用 Legacy 模型;现有客户在闲置 15 天后可能会失去访问权限;也无法创建新的预置吞吐量。EOL 当天或之后不久,除非客户有私下安排可继续访问,否则调用将失败。迁移不会自动进行。AWS 的表格未列出正在使用的 Nova Reel 后继产品,因此不要自行设想一个:对于必须在 EOL 之后继续运行的工作,除非 AWS 发布了后继产品或客户团队确认存在私下安排,否则请选择其他目前仍在使用的提供商。
如果账户已确认可访问 Reel 1.1,且交付可在 EOL 前完成,Reel 1.1 支持:
TEXT_VIDEO:一个六秒的文本生成视频或图像生成视频镜头。MULTI_SHOT_AUTOMATED:将一条长提示词扩展为时长 12–120 秒的视频,时长以六秒为增量;不支持输入图像。MULTI_SHOT_MANUAL:按顺序排列的六秒镜头列表,每个镜头包含提示词和可选的起始图像;时长取决于镜头数量,最长为 120 秒。- 英文提示词、1280×720 输出、24 fps、无声视频、异步
StartAsyncInvoke和 S3 交付。
Nova 生成指南仍介绍 Reel 1.1,但 Bedrock 生命周期页面明确说明,其日期适用于 Bedrock 的使用情况。若页面内容不一致,请以生命周期表为准。每次运行前,请确认账户能够在指定区域调用指定模型,确认任务会在 EOL 前完成,并记录退出方案。
来源:Bedrock 模型生命周期、Nova Reel 生成指南、Bedrock Nova Reel 模型页面、区域兼容性。
精确输入限制
| 模式 | 文本 | 图像 | 时长 |
|---|---|---|---|
TEXT_VIDEO | 1–512 个字符 | 零张或一张起始图像 | 恰好 6 秒 |
MULTI_SHOT_AUTOMATED | 1–4,000 个字符 | 无 | 12–120 秒,且为 6 的倍数 |
MULTI_SHOT_MANUAL | 每个镜头 1–512 个字符 | 每个镜头可选一张图像 | 每个镜头 6 秒,最多 120 秒(因此最多 20 个镜头) |
始终发送 fps: 24 和 dimension: "1280x720"。种子为可选项,默认为 42,且必须介于 0–2,147,483,646 之间。参考图像必须为 PNG 或 JPEG 格式、尺寸为 1280×720、色深为 8 位 RGB;PNG 仅在每个像素都完全不透明时才可包含 alpha 通道。AWS 规定,从 S3 提供的图像大小上限为 25 MB。请将图像用作起始关键帧,而不是通用的风格参考库。
AWS 当前的手动模式说明未公布单独的最小镜头数。单个 6 秒镜头请使用 TEXT_VIDEO,真正包含多个镜头的列表请使用手动模式;不要把制作惯例“至少两个”说成服务架构的最低要求。Reel 1.0 是旧版 6 秒模型;较长和多镜头请求需要 Reel 1.1。
来源:视频生成的访问与输入架构。
根据剪辑决策选择模式
- 自成一体的 6 秒插入镜头、首帧动画或低成本概念探索,请选择
TEXT_VIDEO。 - 如果整体主题和风格流畅度比精确的镜头边界更重要,请选择
MULTI_SHOT_AUTOMATED。它不是图像条件模式。 - 如果剪辑有已批准的镜头列表、特定起始帧、产品角度或受控转场,请选择
MULTI_SHOT_MANUAL。 - 如果镜头需要独立筛选、替换、预算或交付计划,请分别生成 6 秒任务。多镜头请求失败时,不会得到可依赖的部分成片。
Nova Reel 不支持原生音频。请单独规划并制作音乐、对白、环境音和音效。不要承诺口型同步、精确排版、精确的产品几何形状、物理准确性或通过种子确定性复现。AWS 特别提醒,无法保证屏幕文字连贯,也无法保证人物解剖结构正确。
直接描述动作,而非对话
请写视觉描述,而不是聊天指令。先写最重要的主体和动作,再描述环境、光线、画面风格和摄影机运动。每个 6 秒镜头只使用一种主要的摄影机运动。
AWS 文档列出的实用摄影机描述包括 dolly in、dolly out、pan left、pan right、tilt up、tilt down、orbit、tracking shot、zoom in、zoom out 和 static shot。描述随时间可见的变化:“蒸汽向上盘旋,摄影机缓缓推进”,而不是“让它更有电影感”。
对于图像转视频,只描述期望的动作和变化。前后矛盾地重新描述参考图像可能会加剧画面偏移。通过稳定的名词和属性保持身份一致:在每个手动镜头中重复相同的产品名称、材质、颜色、服装、一天中的时段和镜头语言。
制作启发式: 多镜头生成前,先确定连续性指南:
- 主体身份:精确且稳定的描述,以及禁止的变化。
- 世界规则:地点、天气、时间、调色板、纹理、宽高比和镜头质感。
- 动作语法:摄影机高度、速度、方向和转场意图。
- 镜头用途:每个 6 秒单元提供哪些新信息。
- 连续性锚点:进入/离开方向、画面位置、动作状态和光线方向。
构建有效请求
示例:单次图像转视频请求
意图:为已批准的产品展示图添加动画,不引入新的产品设计。
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。
示例:手动制作三镜头故事板
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 收费。2026-07-10 核实时,Bedrock 定价页面的交互式 Nova Reel 行显示每生成秒 0.08 美元。请将其视为带日期的规划快照,而非执行时固定不变的费率:Legacy/公开扩展访问定价可能会变动,且生命周期表目前未列出 Reel 的公开扩展访问起始日期。请在批准和执行前重新查看官方价格行或获取账户报价。按 时长 × 已核实费率 报价,然后另行计算 S3、KMS、日志记录、检索和传输费用。按该日期的快照,6 秒 = $0.48,18 秒 = $1.44,120 秒 = $9.60。
要求审批记录包含:
- 规范审批信封 SHA-256、精确请求、模型 ID、Region、S3 输入和输出 URI;
- 生成秒数、已核实的单价、币种、最高授权金额和价格核实时间戳;
- 生命周期核实时间戳、已确认的 Legacy 访问权限、EOL 日期、计划完成日期和退出方案;
- 每份参考资料及每位画面中人物的权利/同意状态;
- 保留分类、审批人身份和过期时间;
- 明确声明本次运行为付费且异步。
若摘要缺失或不匹配、审批已过期、最高授权金额不是有限值或额度不足、价格/生命周期证据过时、Legacy 访问权限未确认、任务可能跨越 EOL、Region 错误、存储桶/前缀未经批准,或输入字节已更改,则必须拒绝执行。人工回复“看起来不错”不能作为可重复使用的支出授权。
示例:先试运行,再提交
此完整示例会先进行试运行。只有在 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(1–256 个可打印 ASCII 字符),专用于实现幂等性,并返回 invocationArn。请持久化保存二者。ListAsyncInvokes 会在每个摘要中返回 clientRequestToken,但不提供按令牌筛选的功能:请对原始提交时间窗口进行分页,并精确匹配令牌,然后对找回的 ARN 使用 GetAsyncInvoke。如果无法通过列表确定结果,且 SDK 操作存在可重试的传输歧义,则仅重试逐字节完全相同的逻辑请求,并使用相同令牌;切勿更改负载或生成新令牌。如果服务未返回可恢复的 ARN,请升级处理。不要声称幂等性会取消任务,或阻止使用不同令牌的请求产生费用。
来源:StartAsyncInvoke API、ListAsyncInvokes API、GetAsyncInvoke API。
操作异步作业
- 在执行后续工作前,持久化请求、摘要、令牌、调用 ARN、输出前缀、提交时间、审批信息和输入哈希。
- 使用有界指数退避和抖动轮询
GetAsyncInvoke。有效状态为InProgress、Completed和Failed。遵守限流,并在声明的截止时间停止;本地超时并不意味着付费作业已停止。 - 网络状态不明时,按 ARN 查询,或按时间和准确返回的令牌列出记录。只有请求和幂等令牌完全相同才允许重试;新令牌会带来新的付费创建风险。
- 将
Completed视为“可供检查”,而非“已获准交付”。 - 保留提供方写入的证据。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 中存在成功的fullVideo条目(根据当前文档的不一致之处,文件名可能是video-generation-status.json或generation-status.json); - 将每个 S3 URI 限定在获批的存储桶和调用前缀内;
- 通过经过身份验证的 SDK 调用下载,并限制字节数;切勿使用任意返回的 URL;
- 使用
ffprobe验证 MP4 魔数和容器格式,解码整个文件,并确认分辨率为 1280×720、帧率为 24 fps、时长符合 6 秒的倍数,且不包含必需的音轨; - 检查每个组成镜头的连贯性、安全性、文本、人体结构、品牌/产品准确性、闪烁、扭曲,以及是否出现非预期人物或标记;
- 计算 SHA-256,保留原始文件以及清单/状态,记录模型、Region、请求、审批和来源哈希,并以原子方式发布,且不得覆盖现有交付物。
如果来源证明很重要,请保留 Nova 原始输出。转码、重新封装、剥离元数据或社交平台处理都可能移除 Content Credentials,即使不可见水印仍然存在。请记录衍生文件的沿袭关系,不要声称未经验证的衍生文件仍保留凭证。
权利、隐私与负责任的发布
仅使用项目获准使用的输入图像、品牌、地点和肖像。对于可识别的个人和数字替身,请取得书面同意。不要暗示模型防护措施可以取代法律或编辑审查。
AWS 表示,Bedrock 不会使用 Nova Reel 的输入或输出训练 Bedrock 模型。Bedrock 当前的滥用检测页面说明,默认情况下不会有运营人员访问,也不会保留数据;页面还列出了特定模型的保留例外,但未提及 Nova Reel。该页面另行说明,疑似 CSAM 的输入或输出可能会被拦截、存储、审查和举报。你在 S3 中的输出以及任何调用日志,都会在你的控制下有意保留数据。若未考虑滥用处理、S3、日志、备份和账户配置,请避免声称数据“绝不会存储”或“零保留”。
Nova Reel 会为生成的视频添加不可见水印,Reel 1.1 还加入了基于 C2PA 的 Content Credentials。请验证原始内容的凭证,并在受众或政策要求时披露 AI 生成信息。AWS 服务条款规定,AI 输出属于你的内容,可能并非独有,且不得移除、遮蔽或更改 Provenance Data。AWS 还说明,对已正式推出的 Nova 输出提供有条件的 IP 赔偿;资格和例外属于合同问题,这并不构成独特性、在所有司法管辖区内的所有权或使用侵权输入的许可保证。
来源:Nova Reel AI Service Card、Bedrock abuse detection、S3 access、AWS Service Terms、AWS Responsible AI Policy、AWS Acceptable Use Policy。
最终发布检查清单
- 重新核实当前模型 ID、生命周期、区域、账户访问权限、价格、配额、是否计划在 EOL 前完成,以及退出方案。
- 模式和架构与创意简报一致;图像通过格式、大小、透明度、权利和哈希检查。
- 提示词和故事板保持主体、世界、光线、动作和屏幕方向的连贯性。
- 已获得精确摘要和费用审批;一次具备幂等性的创建尝试已持久记录。
- 已保留异步状态以及提供商的 S3 清单和状态。
- 原始内容和每个镜头均通过技术、安全、连贯性、品牌、肖像和编辑质量检查。
- 已记录成品哈希、来源信息、披露、衍生内容溯源、保留期限和删除责任人。
- 音频和最终润色作为单独且经批准的制作阶段处理。