- AI 技能
- 人工智能
- 深度研究
- 数据分析
- 媒体生成
【免费下载链接】SenseNova-Skills
Modular SenseNova skills for building AI-powered office assistants and productivity workflows
本技术指南以 prompting.md 为核心骨架,系统讲解 SenseNova-Skills 中sn-motion-html技能面向“连续运镜式 HTML 视觉叙事”的四类提示词模式:可复用的风格前言(Style Preamble)、锁定角色/产品一致性的身份块(Identity Block)、单帧承载单一主导事件的场景静帧(Scene Still),以及保持画面连续性的Dive 运动与Connector 运动提示。结合仓库内 init_project.py 与 seedance_pipeline.py 的源码实现,读者将掌握从预设/自定义艺术方向出发、到生成可被 Seedance 视频 API 正确消费的提示词文件的全套方法,并理解风格与主体分离、身份锁定、边界锚定等关键工程约束背后的运行机制。
一、prompting 在 sn-motion-html 生产流水线中的位置
sn-motion-html的产出不是普通的自动播放视频页,而是一个由页面滚动进度驱动的、贯穿全片的虚拟连续镜头(virtual continuous take):固定全视口媒体舞台 + 一条有序时间线(场景 → 连接 → 场景 → … → 终场)。要支撑这种体验,图片层与视频层必须共享同一套视觉语言。prompting 文档正是这套“共享语言”的写作规范,它回答三个问题:
- 如何写一个每张静帧都原样复用的风格块(保证画面统一);
- 如何为反复出现的角色/产品建立不可变约束(保证身份稳定);
- 如何把“静态画面”扩展为“随时间变化的运动”,且不让运动破坏源画面。
在完整流程中,prompting 规范被引用两次:生成角色参考、场景或运动提示时参考 references/prompting.md;同时它服务于 workflow.md 中定义的两道创意批准门(视觉风格批准、内容与镜头计划批准),以及后续静帧集与视频批次的生成阶段。形象地说,style-presets 决定“世界长什么样”,story.json 决定“发生什么”,而 prompting 决定“每张图、每个镜头具体怎么写”。
二、起点:协调预设与图像能力探测
2.1 从预设出发,或替换为用户自定义艺术方向
写作提示词的起点有两种:一是直接采用 style-presets.md 中的协调预设(Anime / Cinematic / CGI),二是用用户自定义的艺术方向替换预设。关键约束是:风格是全局唯一的——同一项目的 HTML、静帧生成与视频运动必须共享同一套视觉处理;不要把folio、caption、graphic这三种 UI 预设与风格名互相推断,也不要在用户没有明确要求混合时混用视觉预设。
三种预设各有一致性规则:
- Anime(
--style anime):暖纸白背景、墨蓝文字、珊瑚色点缀、圆润展示字体;静帧为精致的戏剧化动画插画、克制的赛璐璐着色;视频要求帧间保持线宽、面部比例、服装配色与赛璐璐边界稳定,避免线抖动、面部漂移与多余手指。适合神话、青春故事、科普、风格化历史与角色主导的产品世界。 - Cinematic(
--style cinematic):克制的暖中性色、衬线展示字体、深色紧凑控件;静帧为可信的电影剧照(虚构选角而非可识别演员);视频要求物理合理的运动、稳定的服装道具、有动机的运镜语法、一致的曝光与调色。适合历史叙事、纪录片、品牌片、旅行与建筑。 - CGI(
--style cgi):冷矿物背景、深板岩文字、青绿点缀、精准无衬线字体;静帧为高水准 CG 渲染(连贯 PBR 材质、受控拓扑);视频要求几何、材质 ID、灯光方向与模拟特效稳定。适合科学、技术、工业系统与数据驱动环境。
自定义方向时,可以改变调色板、时代、文化指涉或题材,但必须保留预设的一致性规则;不要指名模仿在世艺术家,而是描述可观察的视觉属性;偏差记录在项目生产规范中,保证图片、视频与 HTML 三层对齐。
2.2 生成前必须解析环境中的图像能力
在生成任何静帧之前,先探测当前环境暴露的图像能力(image capability)——它可能是可直接调用的图像工具、一个暴露或指导图像工作流的技能,或者两者兼有。生成静帧时必须优先使用环境中已有的能力;若没有任何合适能力,应在继续静帧生成阶段之前把该阻塞报告给用户,不得悄悄用占位图替代(见 SKILL.md 生产不变量)。
2.3 初始化器写入两个提示词文件
init_project.py在初始化项目时会根据所选风格预设,把图像提示块写入prompts/style-preamble.txt、把运动提示块写入prompts/style-motion.txt:
python scripts/init_project.py /absolute/output/path --title "Story title" --style cinematic --ui folio源码对应关系(init_project.py):
preset_path = SKILL_ROOT / "assets" / "style-presets" / f"{args.style}.json" preset = json.loads(preset_path.read_text(encoding="utf-8")) (output / "prompts" / "style-preamble.txt").write_text(preset["image_prompt"].strip() + "\n", encoding="utf-8") (output / "prompts" / "style-motion.txt").write_text(preset["video_prompt"].strip() + "\n", encoding="utf-8")以 Cinematic 为例,实际写入的预设内容来自 assets/style-presets/cinematic.json:
CINEMATIC VISUAL SYSTEM: authored film still with believable production design, fictional casting, motivated practical lighting, cinematic dynamic range, natural lens behavior, controlled depth of field, subtle film grain, atmospheric perspective, and restrained color grading. Preserve recurring facial structure, wardrobe, props, architecture, and period details. Landscape composition with a safe central crop. No recognizable real actor, no glossy AI skin, no embedded text, no logo, no watermark, no modern object unless specified.而模板中的占位文件(如 style-preamble.txt)则在初始化后被替换为上述真实预设内容。这意味着:不修改模板,初始化即得到可用的风格提示;后续要自定义艺术方向,直接改写这两个文件即可,它们会在视频生成时被自动引用(见第六节)。
三、风格前言(Style Preamble):可复用、与主体分离
3.1 字段模板
创建一个可复用的提示块,包含以下 8 个字段:
MEDIUM: [photography / illustration / clay diorama / collage / ...] PALETTE: [named colors and contrast] MATERIALS: [surface and texture] CAMERA: [lens, angle, distance, projection] LIGHT: [direction, softness, time or studio setup] COMPOSITION: landscape frame, safe central crop, readable depth layers CONTINUITY: use supplied identity references without redesign EXCLUDE: text, letters, numbers, logo, watermark, unintended modern objects字段要点(对应 prompting.md 的语义并扩展):
| 字段 | 作用 | 取值范围/写法示例 |
|---|---|---|
MEDIUM | 定义媒介质感 | photography、illustration、clay diorama、collage 等,可组合限定 |
PALETTE | 定义命名色与对比 | 如warm paper-white, ink-blue, coral accent |
MATERIALS | 定义表面与纹理 | 织物、金属、玻璃、纸感等,与媒介配套 |
CAMERA | 定义镜头语言 | 焦段、角度、距离、投影方式(如透视/正交) |
LIGHT | 定义光的方向、柔和度与时段 | 棚拍、晨昏、伦勃朗光、柔和漫射等 |
COMPOSITION | 构图硬约束 | 横向画幅、安全中央裁切、可读的深度分层(模板原文) |
CONTINUITY | 连续性约束 | 使用提供的身份参考、不做重新设计(模板原文) |
EXCLUDE | 负面约束 | 文字、字母、数字、Logo、水印、非预期现代物件 |
3.2 核心原则:风格与主体分离
让风格块与主体指令分开,这样每一张场景都能收到完全相同的风格块,从而实现跨场景的视觉统一。做法是:
style-preamble.txt只承载风格(媒介/调色/材质/镜头/光/构图/负面约束),一次写好,全片复用;- 每个场景的主体指令(章节事件、前景/中景/背景、可读故事情节)单独写在场景提示中;
- 视频层的
style-motion.txt独立承担运动渲染、镜头行为、时间一致性规则与禁止伪影的说明。
源码印证了这种“分离 + 复用”的落地方式:模板中的 style-motion.txt 占位内容明确要求“定义本项目的运动渲染、镜头行为、时间一致性规则与禁止伪影”,并在 seedance_pipeline.py 中,每条视频提示都会被自动前置拼接该文件内容:
prompt_path = root / item["prompt"] prompt = prompt_path.read_text(encoding="utf-8").strip() style_motion_path = root / "prompts" / "style-motion.txt" if style_motion_path.exists(): style_motion = style_motion_path.read_text(encoding="utf-8").strip() if style_motion: prompt = f"{style_motion}\n\n{prompt}"也就是说,你只需要写“这一条 dive/connector 具体动什么”,风格与时间一致性规则由流水线自动附加——这正是“Keep style separate from subject instructions”的工程实现。
四、身份块(Identity Block):锁定每一个反复出现的形象
4.1 必须锁定的六类属性
对于每个反复出现的人物、生物、产品或载具,都要锁定以下属性(对应 prompting.md 的六点并扩展为可执行清单):
- 外表年龄/形态与身体比例(apparent age/form and body proportions)——例如“成年男性、窄肩、1:1.6 头身比”,防止跨场景变形;
- 面部或剪影几何(face or silhouette geometry)——脸型、五官间距、标志性剪影轮廓;
- 主导色与材质(dominant colors and materials)——服装主色、皮肤/表面材质;
- 标志性服装、标记或物件(signature garment, marking, or object)——道具、徽记、随身物件;
- 允许的场景特定变化(allowed scene-specific wear or state changes)——明确列出哪些是可变的(如换季衣物、情绪表情、装备增减);
- 绝不允许改变的特征(features that must never change)——例如发色、胎记、品牌 Logo、产品外壳弧度。
4.2 先出参考表,场景中只点名实际出现的引用
在叙事场景生成之前,先为每个关键身份生成一张中性参考表(neutral reference sheet)。它作为后续所有场景的一致性基线(workflow.md 中称之为 consistency baseline)。
场景提示里有一个重要纪律:只点名实际出现在该场景中的参考。把无关的参考塞进场景提示会稀释身份控制——例如一个只有主角的场景,不需要把配角的产品参考表也放进提示。另外,对于反复出现的角色/产品,优先基于参考图进行编辑生成,而不是每次从零生成(workflow.md 第 5 节)。
五、场景静帧(Scene Still):一张图只讲一个主导事件
5.1 场景提示模板
[STYLE PREAMBLE] [RELEVANT IDENTITY BLOCKS] Create chapter [ID]: [visual event]. Foreground: [anchor detail]. Midground: [main action and identities]. Background: [place, weather, destination]. Story facts that must be readable: [2–4 items]. Keep the main subjects inside the central safe area for a 16:9 web crop. Static frozen moment; no motion blur; no embedded text.逐行拆解:
- 第一行
[STYLE PREAMBLE]:插入第三节的风格前言块(全片完全相同); - 第二行
[RELEVANT IDENTITY BLOCKS]:只插入本场景出现的身份块; Create chapter [ID]: [visual event].:章节 ID 必须与 content/story.json 中的章节id保持一致(如01-opening),后接该章节的单一主导视觉事件;- 前景/中景/背景:三层信息各司其职——前景放锚点细节,中景放主行动与身份,背景放地点、天气与目的地;
Story facts that must be readable: [2–4 items]:强制列出必须能被观众“读出来”的 2~4 个情节事实,防止画面与文案脱节;- 16:9 安全区:主主体保持在中央安全裁切区内,因为最终网页裁切、窄屏纵向裁切都依赖这一点(frontend.md 也强调 critical subjects 必须在 safe central crop 内);
- 收尾负约束:静态冻结瞬间、无运动模糊、无内嵌文字。
5.2 一张静帧 = 一个主导事件
一张静帧应该只传达一个主导事件(one still should communicate one dominant event)。只有当前期艺术方向明确要求“微缩世界”或“多事件画面(tableau)”时,才允许使用蒙太奇式合成。这与 workflow.md 中“每个章节只有一个主导视觉事件”的章节规划原则互为表里——静帧密度过高会让单条视频提示无法承载,也会破坏“一段视频只讲一件事”的连续镜头叙事。
六、Dive 运动(Dive Motion):克制地让画面动起来
Dive 指“在某一场景静帧内部展开的镜头段落”。其写作原则是:用克制的运动描述保留源图像,而不是重写画面。
6.1 Dive 提示模板
Use image 1 as the sole visual reference. Preserve identities, layout, palette, and materials. Four-second continuous shot. [Small environmental motion]. [One subtle character action]. Camera [locked / slow push / shallow orbit]. No cut, no redesign, no new character, no text, no logo, no sudden lighting change. End on a stable readable frame.要点解析:
- 唯一视觉参考:
Use image 1 as the sole visual reference——dive 的输入是一张静帧,所有身份、构图、调色、材质都必须以它为锚; - 时长与节奏:Four-second continuous shot(4 秒连续镜头);运动幅度被刻意限制为“小幅环境运动 + 一个微妙角色动作”;
- 镜头语法三选一:locked(固定)/ slow push(缓慢推近)/ shallow orbit(浅幅度环绕);
- 六重负约束:no cut(无剪辑)、no redesign(不重新设计)、no new character(不新增角色)、no text、no logo、no sudden lighting change(无突发灯光变化);
- 收尾稳定:End on a stable readable frame——末帧必须稳定可读,因为末帧将作为下一段 Connector 的起始边界。
6.2 源码印证:模板文件与流水线行为
模板仓库中的两个 dive 提示文件 01-opening.txt 与 02-destination.txt 内容完全一致,正是上述模板的落地示例:
Use image 1 as the sole visual reference. Preserve its subjects, composition, palette, and materials. Four-second continuous shot with restrained environmental movement and one subtle subject action. Slow controlled camera movement. No cut, redesign, new subject, text, logo, watermark, or sudden lighting change. End on a stable frame.在 seedance_pipeline.py 中,dive 阶段把章节静帧作为唯一条件帧提交,并在生成后从归一化视频中提取首尾两帧:
def run_dives(root, client, manifest, args): items = manifest.get("dives", [])[: args.limit or None] frames = root / "assets" / "video" / "frames" def run_one(item): generate_clip(root, client, manifest, "dives", item, root / item["still"], None, args) output = root / item["output"] extract_frames(output, frames / f"{item['id']}-first.png", frames / f"{item['id']}-last.png")注意 extract_frames 的取值方式:首帧取第 0 帧,末帧取-sseof -0.05(离结尾 0.05 秒处)。边界帧从归一化后的 dive 视频提取,而不是从源静帧提取——这保证了相邻段落在像素层面真正接得上,是“连续运镜”叙事的关键工程细节。
七、Connector 运动(Connector Motion):两幅参考图之间的语义桥接
Connector 是连接两个相邻 dive 的过渡镜头,输入是两幅边界帧。prompting 规范在这里强调一个反直觉但极重要的点:即使两个输入都用reference_image角色,也要在提示中显式给它们分配语义顺序。
7.1 Connector 提示模板
Image 1 is the departure boundary; image 2 is the destination boundary. Create a continuous journey from [departure] to [destination]. Begin with the visual language of image 1, travel via [sea / sky / tunnel / map / material transformation], and settle into image 2. Preserve recurring identities and palette. No cut, no text, no extra subject, no violent morph, no camera roll. Stable first and last moments.要点解析:
- 边界角色:Image 1 = 出发边界(departure boundary),Image 2 = 目的地边界(destination boundary);
- 旅程路径:travel via 的取值为具体介质——sea(海)、sky(天空)、tunnel(隧道)、map(地图)、material transformation(材质转化)等;路径的选择要与故事环境匹配,模板文件 01-opening-to-destination.txt 中的写法是 “through an environment appropriate to this story”;
- 收尾锚定:settle into image 2——落点必须稳定地“住进”第二幅边界;
- 五重负约束:no cut、no text、no extra subject(不出现额外主体)、no violent morph(禁止剧烈变形)、no camera roll(禁止镜头翻滚);
- 首末帧稳定:Stable first and last moments,与 dive 的末帧、下一 dive 的首帧形成无缝衔接。
7.2 源码印证:两阶段依赖与 conditioning 模式
Connector 不能与 dive 同时并发,因为它依赖两侧边界帧。流水线通过两阶段执行体现依赖关系(seedance_pipeline.py):
def run_connectors(root, client, manifest, args): items = manifest.get("connectors", [])[: args.limit or None] frames = root / "assets" / "video" / "frames" def run_one(item): generate_clip(root, client, manifest, "connectors", item, frames / f"{item['from']}-last.png", frames / f"{item['to']}-first.png", args)即:connector 的条件帧是from侧 dive 的末帧与to侧 dive 的首帧,帧缓存位于assets/video/frames/{dive-id}-{first|last}.png(见 schemas.md)。
提示语义顺序与 API 请求中的角色绑定,见 build_payload 的实现:
mode = manifest.get("conditioning_mode", "reference_images") first_role = "reference_image" if mode == "reference_images" else "first_frame" content = [{"type": "text", "text": prompt}, {"type": "image_url", "image_url": {"url": data_uri(first)}, "role": first_role}] if last is not None: last_role = "reference_image" if mode == "reference_images" else "last_frame" content.append({"type": "image_url", "image_url": {"url": data_uri(last)}, "role": last_role})两种 conditioning 模式的取舍(schemas.md):
reference_images(默认):本地帧都以role: reference_image发送,适合 Seedance 的多模态构图与显式输出比例,dive 与 connector 都可用;first_last:connector 使用first_frame/last_frame角色,当精确边界锚定比构图自由度更重要时选择,需确认所选模型支持并核对比例限制。
默认请求模板(video-manifest.json)给出conditioning_mode: "reference_images"、duration: 4、resolution: "720p"、ratio: "16:9"、target_width: 1280、target_height: 720、fps: 24等生产参数,connector 记录通过from/to引用 dive 的id。
八、视频提示的核心原则:描述变化,而非复述画面
prompting 文档末尾给出了一条贯穿 dive 与 connector 的通用铁律:
Video prompts should describe changes over time, not repeat the entire still-image description.
视频提示应描述随时间发生的变化(运动幅度、镜头行为、环境动态、过渡路径),而不是把整段静帧描述重抄一遍。理由很实际:
- 静帧提示已在风格前言与身份块中锁定了“有什么、长什么样”,视频层再复述会引入冲突描述,反而破坏一致性;
- 视频模型需要的是“动起来的方式”——这也是为什么
style-motion.txt单独承载运动规则,而 dive/connector 的.txt只写一条具体运动/旅程描述(seedance_pipeline.py 把两者拼接后提交); - 同时,seedance.md 提醒:模型 ID 与支持的参数可能变化,应以官方文档为准;请求体默认是“一条文本提示 + 一张或两张本地图(data URL)”的内容数组。
九、与批准门、验证环节的衔接(生产纪律)
提示词写作不是孤立动作,它服务于两道创意批准门(SKILL.md 与 workflow.md):
- 视觉风格批准门:展示风格前言与身份块(含媒介、调色、材质、灯光、镜头语法、构图、负约束与角色/产品处理);若图像能力可用,附上小规模参考/门控集(通常为开场、中段、结尾三张静帧)。未获明确批准,不得生成完整静帧集。
- 内容与镜头计划批准门:展示章节顺序、每章主导视觉事件与展示文案、场景取景/镜头意图、connector 的起止点与每场景文案位置。
两道门是两个独立决策:风格批准决定“世界看起来如何”,内容与镜头计划批准决定“展示什么、镜头如何移动”。后续的付费视频授权是独立授权门,不能替代任何一道创意批准。
生产不变量中还要求:先做小规模静帧一致性门控(consistency gate)再生成完整静帧集;dive 可并行,connector 必须等相邻 dive 边界帧全部就绪后再并行;交付前运行 verify_media.py 校验数量、尺寸、帧率、编码与精确时长,并用 contact_sheet.py 生成中段联系表,优先检查身份正确性、关键物件与场景含义(而非偶发生成细节)。
十、提示词写作速查清单
- 开工前:从 style-presets.md 三预设中选一个,或替换为用户艺术方向;探测环境图像能力并确认可用。
- 风格层:
style-preamble.txt写满 MEDIUM/PALETTE/MATERIALS/CAMERA/LIGHT/COMPOSITION/CONTINUITY/EXCLUDE 八字段;style-motion.txt承载运动渲染与时间一致性规则;两块全片复用,与主体指令分离。 - 身份层:每个反复出现的形象锁六点(比例、几何、颜色材质、标志物、允许变化、禁止变化);先生成中性参考表;场景提示只点名实际出现的引用。
- 静帧层:STYLE PREAMBLE + RELEVANT IDENTITY BLOCKS + 单一主导事件 + 前景/中景/背景 + 2~4 个可读事实 + 16:9 中央安全区 + 静态无字收尾;一张图只讲一件事。
- Dive 层:唯一参考图 + 4 秒连续镜头 + 小幅环境运动 + 一个微妙动作 + locked/slow push/shallow orbit + 六重负约束 + 末帧稳定。
- Connector 层:显式声明 Image 1 为出发边界、Image 2 为目的地边界 + 具体旅行介质 + 保持身份与调色 + 禁止剪辑/文字/额外主体/剧烈变形/镜头翻滚 + 首末帧稳定。
- 视频提示总原则:写随时间的变化,不重复静帧描述;提交前检查 video-manifest.json 中的模型、时长、分辨率、比例与 conditioning 模式。
- AI 技能
- 人工智能
- 深度研究
- 数据分析
- 媒体生成
【免费下载链接】SenseNova-Skills
Modular SenseNova skills for building AI-powered office assistants and productivity workflows
相关推荐
Workerd 运行时 API 实战指南:从 Worker 入口、Web 平台 API 到 CLI 与 Wrangler 集成
Workerd 运行时 API 实战指南:从 Worker 入口、Web 平台 API 到 CLI 与 Wrangler 集成 本篇指南以 Cloudflare
AI 技能人工智能深度研究数据分析媒体生成Node.js 0.9.8(Unstable)版本发布公告全解读:变更明细、发布产物与仓库呈现机制
Node.js 0.9.8(Unstable)版本发布公告全解读:变更明细、发布产物与仓库呈现机制 本篇技术指南以 Node.js 官方网站开源仓库中的 v0.
AI 技能人工智能深度研究数据分析媒体生成SenseNova-Skills 布局审查提示词全解:layout_review.md 如何驱动 sn-image-imitate 的生成-审查闭环
SenseNova Skills 布局审查提示词全解:layout_review.md 如何驱动 sn image imitate 的生成 审查闭环 导读 本文
AI 技能人工智能深度研究数据分析媒体生成
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考