关于 scenario-consistency
scenario-consistency 是帮助创作 Agent 在图像和视频变体间保持一致性的技能。它根据一致性需求,指导选择提示词基线、参考图、控制图或训练模型。
主要功能
- 01使用基线加差异提示词
- 02用参考图锚定生成结果
- 03区分风格与主体参考
- 04通过控制图固定构图
- 05将主体身份延续到视频
适用场景
- 01创建一致的角色变体
- 02在插画系列中保持视觉风格
- 03固定图像组中的姿势或构图
- 04让参考角色在视频中动起来
MCP 相关
依赖 `scenario` 技能中说明的 Scenario MCP 连接和核心生成流程,指导客户端通过 Scenario 工具选择并运行一致性方案。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ scenario-labs/ skills --skill scenario-consistency安装后在 Claude Code 中输入/scenario-consistency确认已加载。
详细介绍
场景一致性
概述
“让变体二看起来和变体一完全一样,除了 X 之外”是最常见的创作需求,而 Agent 会尝试使用种子,但种子解决不了这个问题。一致性取决于你向模型提供的内容,按持久性由低到高依次是:提示词基线、参考图像、风格参考、控制图、训练后的模型。同样的参考也能让角色在视频中保持一致。关于连接和核心循环,请参阅 scenario 技能;关于训练,请参阅 scenario-model-training;关于创建并归档命名角色或道具库及其设定图,请参阅 scenario-identity-library。如果你的可用技能中缺少此处提到的同系列技能,请让用户安装它(npx skills add scenario-labs/skills --skill <name>);如果是在无人值守的情况下运行,请根据工具架构继续操作,并标明这一缺口。
快速参考
| 技术 | 保持一致的内容 | 所需投入 | 适用场景 |
|---|---|---|---|
| 基线加差异提示词 | 身份、构图、调色 | 低 | 始终适用,这是基础 |
| 参考图像输入 | 身份和世界观 | 低 | 一组场景或角度 |
| 风格参考输入 | 渲染风格,而非主体 | 低 | 图标集、UI、系列插画 |
asset_detect 控制图 | 姿势、几何形状、构图 | 中 | 布局必须保持不变时 |
| 参考图生成视频 | 动态中的身份一致性 | 中 | 角色或产品需要动起来时 |
| 重用种子 | 单张图像的精确生成结果 | 低 | 重新生成单次生成结果 |
| 训练后的模型 | 品牌风格,或大规模角色阵容 | 高 | 参考图不再满足扩展需求时(见下文) |
Scenario 发布的流程指南:生成一张效果出色的参考图像,将其作为图像输入传递给每次场景生成,并优先选择参考图像槽位最多的模型。
基线加增量提示词
写明所有不得改变的内容,然后在最后一个分句中写出唯一的变化。每次运行之间保持提示词逐字节相同,只修改那个分句。每个项目都必须带有的变化(新服装、理发)属于基线,而非增量:先以主角自身的变化为增量运行一次,将结果确认为新的主角,然后以此为准锚定整个系列,这样参考图和枚举内容描述的就是同一造型。
具体列出各项细节:主体几何形状、相机高度和角度、主体在画面中的大小和位置、光照方向、每个具名子元素及其所在位置、以名称或十六进制值标注的配色,以及嵌入的文字。先查看基线(asset_display):没见过的色调就无法列举,而模糊的锚点会逐渐偏移。
同时附上已批准的基线作为参考图。图像模型通常使用 referenceImages,但上限、必填要求和基数取决于 model_schema_get,有些模型的字段还是单个标量文件。标量 image 加上 strength 属于图生图,并非参考图槽位:它会同时锚定构图和身份;在默认强度下,纯背景锚点会覆盖整个场景的增量,因此场景系列需要真正的参考字段。只有架构标明 array: true 时才用数组封装,即使只有一个资源也要写成 ["asset_..."]:直接传入字符串会被静默丢弃,运行仍会成功,但会忽略该字符串。在提示词中说明每张参考图的用途。已批准的模特照片可填入剩余槽位:将其整理为一个集合(使用目录工具,写入通道),并通过 search filters={"collection_ids": [...]} 检索。有些风格参考模型成员会在首次运行时生成可复用的风格:其 ID 位于已完成作业的输出元数据中(通过 job_get 并设置 verbose=true 获取),不在运行响应或资源上;后续运行时,在架构的 ID 字段中传入该 ID,以替代图片。这两个字段互斥,而且只有图片字段标记为 cost_impact,因此只需支付一次生成费用:每次运行都传入相同的参考图之前,先阅读字段说明。即使架构将两个字段都标为可选,首次运行仍必须附上图片:该模型成员不接受两者都缺省的运行请求。
锚点可以是上传的素材:用户的角色原画、草图或产品照片可通过 upload_asset 和 upload_asset_complete 上传(参见 scenario),并像任何已批准的主角图一样通过参考字段传入。asset_describe(参见 scenario-asset-analysis)会返回风格综合描述(媒介、配色、光照、构图、氛围),可用于填充枚举内容中的配色和光照条目;子元素清单则通过观察获得,或使用 asset_analyze 并将枚举标题作为指令生成(两者都是目录工具;asset_describe 使用 dry_run 计价)。
系列中的每个项目都需要单独调用一次 model_run:批量数量字段只会重复同一个提示词,无法为每个项目分别附带增量分句。分批启动,并遵守团队的并发上限(scenario 技能中的 parallel-custom-jobs 行):如果启动请求因 429 被拒绝,就不会创建作业;应在下一批次重新启动,而不是直接跳过。
在没有主体的情况下锁定风格
风格参考与主体参考使用不同的槽位,少数图像模型提供风格参考:撰写时,有一个模型系列支持将一到十张图片作为 styleReferenceImages,并以少量额外费用据此生成私有风格;作业输出会返回可复用的风格 ID,后续运行时通过 styleId 传入,以替代图片(二者互斥),并由 styleMatch 选择 precise 或 flexible 的遵循程度。它锁定的是渲染效果、配色和线条,而非角色:应将其与主体参考搭配使用,或通过基线枚举锁定身份。使用 recommend,并用用户自己的措辞描述风格需求,以查找此类模型成员;随后通过 model_schema_get 确认字段。接收 RGB 三元组(colors)的配色字段只表示偏好,而非约束:也要在提示词中保留十六进制值。
使用控制图锁定结构
生成控制图,并将其作为条件输入。对于需要变化的属性,切勿从原图中提取控制图:从已批准的图像中提取姿势图会锁定你要求更改的姿势;姿势集需要从目标姿势图像中提取控制图,否则就不需要控制图。
asset_detect 接受 asset_id 和一个 modality,可选值为 canny、depth、grayscale、lineart_anime、mlsd、normal、pose、scribble、segmentation、sketch(remove_background 默认为 true)。它仅适用于目录,并且属于写入通道,尽管文档页面将其归在 Analysis 下:请通过 scenario_tool_execute_write 运行。
控制块(controlImage、controlModality、controlStrength、controlStart、controlEnd)仅适用于在 capabilities 中列出 controlnet 的模型:规划时先检查模型是否支持;不支持的模型需要使用参考图像。controlModality 接受 canny、tile、depth、blur、pose、gray 和 low-quality:只有 canny、depth 和 pose 会映射到控制图,grayscale 会变为 gray。controlStrength 默认为 0.7,推荐范围为 0.3 到 0.8:canny、depth 和 tile 接近 0.7,pose、gray 和 blur 为 0.8 到 0.9,高于 0.9 则会非常僵硬。Strength 表示控制程度,controlStart 和 controlEnd 表示控制时机:将 controlEnd 设为接近 0.65,可在前期锁定构图,随后释放控制,让提示词进一步细化细节。
将身份特征延续到视频中
参考图转视频成员会让参考图所示的主体动起来,但不会锁定构图为首帧。目录没有参考图转视频能力值:这些成员标记为 img2video,因此用 capability="img2video" 调用 recommend,并用用户自己的措辞说明一致性需求(“与这些图片中相同的角色”);然后在 model_schema_get 中确认所选成员带有多槽位 referenceImages 数组(撰写时,领先成员有 7 到 9 个槽位,其中一个是前四个之后的计费槽位),若要复制动作,还要确认有 referenceVideo 或 referenceVideos 槽位(时长上限为 3 到 15 秒不等,有些按上传视频的秒数计费)。若排名结果中没有成员带有该数组,就从视频模型系列技能 scenario-video 列出的系列名称中调用 search。槽位数量对价格的影响小于分辨率和时长:从 model_schema_get 读取这两项的枚举值,其中 cost_impact 会标出它们;先用仍能展示完整动作的最低成本试跑来验证身份一致性,即选择交付时长下的最低分辨率(较短片段会掩盖后期漂移),并先用 dry_run 为试跑载荷和交付载荷分别定价(一个试跑载荷按默认值计价为 80 CU,而不是 130)。通过试跑只能验证制作方案,不能验证试跑结果:交付渲染上线前还要单独全面检查。多个系列中,image(首帧锚点)与参考数组互斥:参考图流程可从免费步骤开始,而固定开场帧则属于不同成员。从素材库填充槽位:按照 scenario-identity-library,使用主视觉图和两三张经过批准的上身实拍图,每张单独上传,绝不使用转面图。若尚无素材库,仅在一个槽位中放入经过批准的主视觉图,也是有效的首次运行(已发布的流程从一张高质量参考图开始);之后,等上文的图像参考流程中有一张图呈现出清晰的角色视图(中性姿势、没有场景道具:场景静帧会把道具和姿势一并带入槽位)时,再用这些经过批准的静帧填充其余槽位,绝不要从转面图中裁剪。提示动作,而不是外观:有些架构按顺序引用上传内容(“Image 1 转向镜头,动作参考 Video 1”);另一些则说明主体会在有无提示词的情况下出现;对所有架构而言,重新描述角色都会与图片信息冲突。各系列的约定和提示词语法见视频模型系列技能 scenario-video 列出的内容。检查整个片段中的身份一致性:asset_get 会将 firstFrame 和 lastFrame 作为免费的资源 ID 返回,但若漂移在镜头中途才出现,首尾两帧都可能看不出来,因此片段上线前要用 model_scenario-video-to-image-seq 扫描各帧(固定的第一方 ID:Scenario 的确定性单帧提取器,因此发现流程只会重新推导出它);每秒约取两帧(frameInterval 是两次提取之间的源帧数整数,取自 asset_get 的片段 frameRate 并减半后四舍五入,24 fps 时为 12;片段通过 video 传入)。这是因为曾有一个片段在 10.5 秒时抽查的单帧看起来正常,但缺陷在 11.0 秒才出现。按子元素逐帧对照基线清单:某个明确列出的部位新增、缺失、变色或变形,都算漂移;随动作移动的部位,例如摆动的斗篷或倾斜的天线,则属于动画效果,可以通过检查。
参考图不再适用的场景
参考图优先是文档规定的顺序,也是成本更低的方式,因此应先充分使用,再考虑训练。当同一个角色会在数百张图片中反复出现、四个或更多身份必须共享场景,或无论主体是什么,每次运行都需要相同的渲染风格时,训练才值得投入。每个反复出现的角色训练一个模型,再为风格单独训练一个模型:同时承载两者的单个模型会在较少见到的那一方上逐渐偏移。多角色场景应合成,而不是共同生成,因为参考图槽位会分散注意力:先以各自的基准单独生成每个身份,再使用 scenario-image-editing 中的编辑工作流将它们放到一起。数据集大小、基座选择和报价后再启动规则见 scenario-model-training。训练出的模型不能通过自身 ID 运行(参见 scenario 中的 runs_as 和 run_with),而且仍需使用基准加增量的提示词:训练减少的是枚举内容,不是对增量进行严格管理的要求。
精灵图集和动画帧是难点:通用图像模型生成的相邻帧在比例、尺寸和轮廓上会发生偏移,而游戏引擎会将这些问题一览无余地呈现出来。同一角色的帧应使用 scenario-sprite-animation 中的视频通道生成,由一次渲染保持身份一致,而不是每帧各生成一次。
示例:一个吉祥物的五种姿势
- 使用
asset_display查看已批准的主角(asset_hero),并写下其基准:上文完整列出的所有必须保持不变的要素。 - 使用任务本身的措辞作为
prompt调用recommend(仅在要查找特定系列时使用search),优先选择支持参考图槽位的模型,然后调用model_schema_get:确认参考字段的名称、上限、基数和必填状态。架构中没有参考字段就应排除该候选模型:返回排序后的列表;若其中也没有支持参考图的模型(recommend会为社区微调模型排序,可能漏掉第一方模型),则从同系列的模型技能(scenario-gemini-image、scenario-seedream)中获取系列名称,再用search查找。 - 每种姿势调用一次
model_run,共五次,在并发上限内分批以wait=false启动:每次都使用字节完全一致的基准,仅在最后一个子句中描述姿势,并按照架构规定的格式将主角放入参考字段:只有在array: true时才使用["asset_hero"]。不要设置种子。不要使用控制图:从主角生成的姿势图会锁定原本要改变的姿势。 - 对每批调用
jobs_wait,并通过pending_job_ids再次调用;每当有空位就启动下一种姿势,直到五种全部完成。将每个结果与主角进行对照,并通过收紧枚举内容来修正偏移,而不要串联输出。
常见错误
- 为了让两个提示词匹配而使用种子:它只能复现一次生成结果,不会迁移任何内容。对一组生成任务不要设置种子;只有在重新生成一个提示词完全不变的结果时才设置。
- 写“同上”:不同调用之间没有记忆;每次都要完整重述基准。
- 将一组生成结果串联起来:偏移会不断累积。每个项目都以同一份已批准的基准为锚点。
- 为一次性任务训练模型:单个场景中的单个角色适合使用参考图;上文所述的训练场景适用于大规模反复出现的角色阵容,即每个角色一个模型,风格另用一个模型。
- 误以为
asset_detect的模态名称都是有效的controlModality值。 - 将角色转面图表传入视频或图像的参考图槽位:视频模型会让网格中的内容动起来;对图像模型而言,该图表是用于归档和审核的材料,不是参考图。槽位应接收单张已批准的图像。
- 在图像转视频提示词中重新描述角色:图像负责体现外观;提示词负责描述动作、镜头和时间安排。