Opus5.5 做视频太贵,国产开源平替来了!
大家都还在为 Claude Opus 5.5 写代码做一条 15 秒视频花掉近百美元而感到心疼的时候,开源社区已经把写代码生成视频的底座给掀了
商汤开源的 SenseNova 6.8 Code2Video ,是一个专门通过编写和修改代码来生成视频的模型,27B 参数
本次公开了全量参数模型权重和配套的创作 Skill ,还支持对生成结果进行多轮自然语言精细修改,甚至能把一段没有任何源码的参考视频直接逆向重构为可编辑的代码工程,还挺 impressive 的
项目地址:
OpenSenseNova/SenseNova-6.8-Code2Video
一、SenseNova 6.8 Code2Video 是怎么做出视频的?
和 Sora 、Runway 等传统视频生成模型不同,SenseNova 6.8 Code2Video 不会去猜每一帧的像素,而是用代码将创意转化为视频,核心工作机制可以拆解为:
1. 底座:27B 专精模型 + 512K 超长上下文的代码生成
传统像素扩散模型在做科普视频、动态图形( Motion Graphics )或排版动画( Typography )时,经常出现文字拼写乱码、数学公式变形、物理碰撞穿模等问题,如果要精准渲染,这就不是模型能力或者参数的问题了,而是底层实现原理不一样
- 代码即画面:SenseNova 6.8 Code2Video 拥有 270 亿参数与 512K 上下文窗口,它通过编写可执行的前端与图形代码(涵盖 HTML/CSS 、Canvas 、SVG 、Three.js 、Manim 、p5.js 等)来构建视频

- 绝对精准:在代码的世界里,文字是原样排版的字符,公式和数据直接源自输入,坐标、时长、节拍和运镜路径都是精确的数字,运动、碰撞和光影则由物理与数学方程严格计算得出。
2.渲染机制:基于纯时间函数 f(t) 的确定性逐帧捕获
和 Opus 5.5 类似,它并不是靠 [录屏] 来抓画面,而是遵循一套严谨的渲染 workflow ,大概的原理是:
1.将画面写为时间的纯函数:
模型编写的代码中,每一帧画面都是时间参数 t 的纯函数,给定任意时间点 t ,程序就能唯一计算出那一毫秒所有元素的位置、形变与色彩。因为完全不依赖系统实时时钟,同一份代码无论运行多少次,渲染出的视频都分毫不差。
2.无头浏览器逐帧截图 + FFmpeg 合成:
后台通过 Playwright 启动无头 Chromium 浏览器,按设定的帧率依次步进调用时间函数并截取高清画面,最后交由 FFmpeg 将成百上千张序列帧与音轨合成为最终的 MP4 视频文件。
3. 程序化音频与卡点
配乐、环境音和动作音效同样可以通过 Python 脚本合成或对齐节拍,实现画面切镜与音乐节拍的严丝合缝

3. 用 spec.md 来驱动代码生成,而不是抽卡
为什么普通模型一句话生成的代码动画往往粗糙简陋,而 SenseNova 6.8 Code2Video 能产出完整成片?关键在于它与官方开源的 code video Skill 以及你的 coding agent 规定了一个严格的检验流程:
- 先写规格书( SPEC.md ):接到需求后,模型不会上来就瞎写代码,而是先根据任务类型读取对应的 guide ,将需求转化为一份可核查的技术规格文档 SPEC.md ,确定构图、配色、缓动曲线与分镜时间轴。
这个 spec.md 简直太重要了,我们用自然语言修改的内容,本质上都是修改 spec 文件,而不是直接改代码
一个项目有了一个统一的 spec ,就能确保每次改动后的生成风格一致性,上下逻辑连贯
吴恩达在他的最新的 vibe coding 课里也提到了这一点的重要性
Spec.md 大概长这样:(有点长)

- 看缩略图挑刺( Contact Sheets 自检):模型写出初版代码并渲染后,会自动抽取关键帧生成“分镜缩略图联系表( Contact Sheets )”,模型会像真正的导演一样审阅这些预览画面,检查文字有没有重叠、元素有没有出画、动效节奏是否合理,然后自己改代码、重新渲染
- 超长程耐力:一条精品短片的打磨往往包含成百上千次“写代码 \rightarrow 渲染预览 \rightarrow 视觉检查 \rightarrow 修复问题”的循环。SenseNova 6.8 Code2Video 针对长程任务进行了专门训练,单次任务可稳定支撑 10 小时以上、超过 2,000 轮( Turns ) 的工具调用与迭代,直到通过全部验证并输出验证报告 VERIFY.md 与最终成片 out/final.mp4
二、环境搭建
在动手制作科普视频前,需要准备好本地渲染环境、模型推理服务以及官方的 code-video Skill
1. 安装基础依赖环境
确保你的机器上已安装以下 5 样基础工具(建议提前装好,避免 Agent 在首次运行时花费大量时间安装环境):
- Codex (或者 Claude Code 等编程 agent )
- Node.js ( 18 及以上版本)
- Python 3 (用于音频处理与辅助脚本,需安装仓库 requirements.txt 中的依赖)
- FFmpeg / FFprobe (用于视频合成与媒体流校验)
- Playwright (含 Chromium ) 及视频对应语言的系统字体
2. 部署模型服务(或接入 API )
官方已在 Hugging Face 开源了 SenseNova 6.8 Code2Video 的全量参数权重( INT4 与 INT8 量化权重计划在后续发布,具体时间请以官方更新为准)
Bash
#1. 从 Hugging Face 下载模型权重
huggingface-cli download sensenova/SenseNova-6.8-Code2Video --local-dir /path/to/SenseNova-6.8-Code2Video
# 2. 使用 vLLM 启动 OpenAI 兼容接口(示例采用 4 卡张量并行,开启 512K 上下文)
docker run --rm --gpus all --ipc=host -p 8000:8000 \
-e VLLM_ALLOW_LONG_MAX_MODEL_LEN=1 \
-v /path/to/SenseNova-6.8-Code2Video:/model \
vllm/vllm-openai:latest \
--model /model \
--tensor-parallel-size 4 \
--max-model-len 524288 \
--reasoning-parser qwen3 \
--enable-auto-tool-choice \
--tool-call-parser qwen3_coder
3. 安装官方 code-video Skill
官方的 code-video Skill 包含了完整的制作工作流、验证脚本以及 8 大领域的工艺指南( Craft Guides ):
- crafts/explainer-diagrams.md:教学与科普讲解(数学、科学、历史、流程图、数据可视化)
- crafts/stylized-looks.md:特定艺术与视觉风格(水墨、像素风、剪纸风、水彩等)
- crafts/simulations-and-generative.md:粒子系统、物理模拟、细胞自动机、Shader 生成艺术
- crafts/character-and-creature-motion.md:人物、动物或生物动作动画
- crafts/threejs-scenes-and-cameras.md:3D 场景、产品展示与三维运镜
- crafts/motion-graphics-and-promos.md:动态字体排版、UI 动效、Logo 演绎与品牌宣传片()
- crafts/sound-design-and-narration.md:旁白配音、音乐、音效与环境音设计
- crafts/music-and-beat-sync.md:音乐驱动短片与节拍卡点
Bash
# 1. 克隆官方 GitHub 仓库
git clone https://github.com/OpenSenseNova/SenseNova-6.8-Code2Video.git
# 2. 创建你的视频任务文件夹(注意:Agent 会自动执行 Shell 命令,建议在独立隔离目录中运行)
mkdir -p ~/video_tasks/methane_explainer/.claude/skills
# 3. 将官方 code-video Skill 完整复制到任务目录的 .claude/skills 下
cp -r SenseNova-6.8-Code2Video/skills/code-video ~/video_tasks/methane_explainer/.claude/skills/code-video
4. 配置 Codex 长程运行参数
因为 Codex 默认通常将未识别的自定义模型按默认上下文(如 128K 或 200K )处理。为了充分利用 SenseNova 6.8 的 512K 超长上下文并支撑上千轮的长程自检迭代,需要在配置文件(如 ~/.codex/config.json 或 settings.json )或环境变量中显式声明 512K 上下文、自动压缩与单次最大输出:
环境变量配置:
- CODEX_MAX_CONTEXT_TOKENS=524288 (显式开启 512K 上下文窗口)
- CODEX_AUTOCOMPACT_PCT=80 (上下文占用达到 80% 时自动执行历史摘要压缩,防止长程交互爆显存)
- CODEX_MAX_OUTPUT_TOKENS=64000 (单次最大输出 64K tokens ,保证单次生成完整代码工程)
三、实战,如何制作一个科普视频
假设我们要制作一条 12 秒的化学科普短片:微观视角拆解“甲烷燃烧( Methane Combustion )”的原子重组与质量守恒定律。
整个创作过程分为三个标准阶段:
- 创意扩写
- 自动生产
- 多轮原位精修
阶段一:从一句话出发,先让模型完善你的想法,把你的一句话变成整段的 prompt
做科普视频最忌讳提示词过于简略,不过你可以把 codex 当作工作台,从一个宽泛的想法出发,利用配套 Skill 引导模型与你探讨细节,将其转化为具体的视频 Brief 和视觉概念;
也可以使用官方仓库 prompts/ 目录下的 Enhance Prompt 模板,把一句话想法扩写成详尽的 dense_prompt.md
1. 我们的初始想法(一句话):
做一个 12 秒的化学科普动画,展示 1 个甲烷分子和 2 个氧气分子燃烧反应生成二氧化碳和水,并体现原子个数守恒。
2. 转化为结构化科普 Brief:
Markdown
Make a 12-second chemistry explainer video titled "Methane Combustion: Atom by Atom" (1920x1080, 30fps, with procedural sound effects).
Core Pedagogical Idea:
Show how chemical reactions rearrange atoms without creating or destroying them.
Visual Structure & Timeline:
1. [0.0s - 3.0s] Introduce reactants on a dark slate background: one methane molecule (CH4: 1 central Carbon atom in charcoal-grey bonded to 4 Hydrogen atoms in white) and two oxygen molecules (2 O2: double-bonded Oxygen atoms in vibrant red).
2. [3.0s - 7.0s] Activation & Bond Breaking: A subtle thermal pulse triggers the molecules to vibrate. The C-H and O=O bonds smoothly stretch and snap with crisp acoustic clicks, pulling the molecules apart into free-floating individual atoms (1 C, 4 H, 4 O).
3. [7.0s - 10.0s] Atomic Rearrangement: The free atoms smoothly gravitate to new positions and form new bonds—creating one linear carbon dioxide molecule (CO2) and two bent water molecules (2 H2O).
4. [10.0s - 12.0s] Final Equation: Resolve into the balanced chemical equation at the bottom: "CH4 + 2O2 → CO2 + 2H2O".
Key Explainer Constraint:
Place a clean HUD "Atom Counter" in the top-right corner showing "C: 1 | H: 4 | O: 4". This counter must stay locked at the exact same values (1, 4, 4) across the entire 12 seconds to visually prove conservation of mass.
阶段二:agent 自动化生产第一版视频
准备好详细的 prompt 之后,进入任务目录启动 Codex ,调用 SenseNova 6.8 Code2Video 与 code-video Skill 开始制作:
此时 SenseNova 6.8 Code2Video 会在后台自动完成以下动作:
1. 加载科普专属工艺指南:模型识别到这是一个科学讲解任务且包含音效,自动读取 .codex/skills/code-video/crafts/explainer-diagrams.md 与 crafts/sound-design-and-narration.md 。
2. 编写 SPEC.md:规划 12 秒内每一秒的分子坐标、化学键断裂的缓动函数( Easing )、配色色号以及右上角原子计数器的固定布局。
3. 编写代码并生成粗渲染版本:遵循 Skill 中“先尽早跑通全长粗渲染,再逐步打磨细节”的原则,用代码精准画出的 CH4 正四面体投影结构与 CO2 的直线型结构,并用 Python 合成化学键断裂与结合的清脆音效
4. 多轮缩略图自检与修正:模型自动截取各时间节点的分镜图进行视觉审查——比如发现第 8 秒水分子的标签和化学键有轻微重叠,便自动修改坐标偏移量重新渲染,直到确认画面干净、右上角 C: 1 | H: 4 | O: 4 全程清晰无误,最终在 out/final.mp4 输出首版成片
首版成片大概长这样:

阶段三:用自然语言修改成片
首版视频生成出来后,往往只是创作的起点。SenseNova 6.8 Code2Video 最大的优势在于你可以直接用自然语言对现有工程进行多轮修改,而不用推倒重来,哪里错了改哪里,其他内容不变
官方示例中将“暗黑风机场翻页屏”改为“明亮马卡龙色系酒店大堂风”,再追加“飞过的小飞机与行人”一样,我们可以在同一个任务文件夹下使用 --continue 参数,对刚才生成的化学科普视频连提两轮修改需求:
第 1 轮修改:重构视觉风格与音效(暗黑实验室 -> 复古教科书)
提出需求:
Keep the molecular coordinates, bond-breaking timing, atom counter logic, and balanced equation unchanged. Restyle the video into a bright vintage science-textbook look: a warm cream paper background with a subtle dot grid, matte pastel spheres for the atoms (terracotta red for Oxygen, navy blue for Carbon, soft mint for Hydrogen) with clean dark-ink outlines, and serif typography for the chemical labels. Swap the harsh clicks for warm wooden marimba notes when bonds form. Edit the existing source in place and overwrite out/final.mp4.
效果:

第 2 轮修改:增补教学组件与物理细节(能量释放波纹 + 阶段进度条)
提出需求:
Keep the current textbook style, colors, timing, atom counter, and audio. Add two pedagogical details: 1) At 3.5s when bonds break, show a subtle inward blue ripple around the molecules labeled "Energy In"; at 7.5s when new bonds form, emit an expanding warm amber glow wave labeled "Heat Released (Exothermic)". 2) Add a minimalist step-progress bar along the very bottom edge indicating the three phases (Reactants → Transition → Products) without obscuring the equation. Edit the existing source in place and overwrite out/final.mp4.
效果

编写 Code2Video 精修 Prompt 的 3 个核心技巧
1. 第一句必须“锁死不变项”: 在官方《 Departures 》翻页屏案例中,每次修改开头的句式都是 Keep the messages, timing and flip mechanics... 或 Keep the current design, messages, timing, flip mechanics, and audio 。必须先明确告诉模型哪些动画逻辑已经达标,防止 Agent 在改样式时重新生成时间轴,导致原有逻辑丢失
2. 给时间点打上精确的时间戳: 对于动效增加需求,尽量指明具体的秒数(如 At 3.5s when bonds break...、at 7.5s when new bonds form...)。因为底层代码是基于时间函数 t 进行渲染的,带有具体秒数的指令能让模型精准插值入帧
3. 句尾锁定原地改写指令: 务必带上官方标准结束语:Edit the existing source in place and overwrite out/final.mp4.这行指令会强行约束 Agent 只能在原有代码文件上做增量补丁,避免 Agent 另起炉灶新建一份空白 HTML/JS ,从而实现几分钟内快速重渲染
进阶玩法:没有源码?丢个参考视频直接“扒片二创”
如果你在网上看到一段排版和动效极其惊艳的科普视频或产品演示片,想做成自己科目的科普视频,但手头只有一个成品.mp4 文件、没有任何工程源码怎么办?
你可以直接利用 SenseNova 6.8 Code2Video 的参考视频重构( Reference-video reconstruction )能力:
1. 将参考视频放入项目目录,不需要提供原代码
2. 让模型逐帧分析参考视频的画面布局、转场节奏与组件运动轨迹,从零编写代码将其重构为可编辑的代码工程
3. 在指令中直接要求它替换主题内容
我用了一段库克把苹果的库存周期缩短为 6 天的案例
原片:⬇️

要求把其中的故事替换成 costco 卖 1.5 美金热狗的故事,效果是:⬇️

官方开源地址汇总:
- GitHub 仓库 & Creation Skill: OpenSenseNova/SenseNova-6.8-Code2Video
- Hugging Face 模型权重: huggingface.co
3 comments
A code-driven video creation model with open model weights and Skill.
Want to try it yourself?
GitHub repo for the Skill and examples: OpenSenseNova/SenseNova-6.8-Code2Video
Hugging Face model page: huggingface.co
6 likes · 2,824 views
9b looped model ostensibly performing on par with qwen3.8-27b github.com/OpenSenseNov...
what the f*ck, a FREE model writes code that renders your video😳
- SenseNova 6.8 Code2Video, apache 2.0
- 27B open weights, 512K context
- builds SVG / Three.js / Manim videos
- the 90s launch film was made by the model
try it here: OpenSenseNova/SenseNova-6.8-Code2Video t.co
30 likes · 985 views
1,000 double pendulums, a billionth of a radian apart
Each one starts one billionth of a radian away from its neighbour. For about ten seconds they swing as one bright bundle, then split into a rainbow and go fully chaotic. The chart on the right is the gap between them on a log scale.
The motion is a real RK4 simulation, precomputed and checked (total energy drifts by about one part in a hundred million). The colours are additive, so the overlapping start looks white and the split looks like light through a prism.
SenseNova 6.8 Code2Video built it from a brief I wrote. My brief said the colours should be clearly separated by 12.5 seconds, and it pushed back: at that frame the pendulums are only about 3 px apart. The real split happens around 13 to 16 seconds, so it kept the physics and ignored my timing.
OpenSenseNova/SenseNova-6.8-Code2Video
81 points · 5 comments
Gradient descent, momentum and Adam racing down the same narrow valley, 80 steps each
The loss is f(x, y) = 0.01x² + y², so the valley curves 100 times more sharply across than along. All three start at (-4.6, 2.0) and get 80 steps.
Gradient descent (lr 0.9) overshoots the steep direction on every step, so it zigzags across the valley while creeping along it, and ends at a loss of 0.0116. Momentum (lr 0.12, beta 0.9) builds up speed along the valley and gets further, but swings wide on the way there (0.0032). Adam (lr 0.25) scales each direction by its own gradient size, so it cuts across, overshoots the minimum once and settles lowest (0.0006).
I wanted the textbook picture with real numbers behind it, so I simulated the 80 steps myself first. Then I had SenseNova 6.8 Code2Video animate it from the update rules and check its results against my numbers before rendering. Nothing is placed by hand.
OpenSenseNova/SenseNova-6.8-Code2Video
31 points · 2 comments
SenseNova 6.8 Code2Video: an open-sourced model that writes and revises code to make videos
Think of the animation workflows people use with Claude Opus 5.5: the model writes code, rendering tools turn it into video, and further instructions revise the result. SenseNova follows that same general approach, with a model and creation Skill focused on video creation
A few highlights:
Generates video through code, with a focus on motion graphics and other visuals that can be expressed programmatically.
Revises existing results through natural-language requests, including changes to styling, timing, and scene elements.
Supports reconstructing a reference video’s visual treatment as editable code.
Pairs the model with a creation Skill that guides brief development, previews, and revisions.
The release plan includes full model weights and the Skill. INT4 and INT8 weights are planned for later.
General-purpose coding models can already write animations. The interesting question is what a dedicated Code2Video model improves: fewer repair attempts, better motion, or more reliable edits that leave unrelated elements alone.
GitHub:
OpenSenseNova/SenseNova-6.8-Code2Video
Model:
huggingface.co
72 points · 8 comments
商汤发布 SenseNova 6.8 Code2Video:把动态字体、图形动画和知识讲解写成代码
做动态字体或讲解动画,画面里经常有明确的文字、位置和运动关系:小球从 A 点到 B 点,走什么线,速度多快
像这类需求,传统的 text to video 模型基本上实现不了,不是说能力不够,而是底层技术实现就不一样
无论是 Seedance 还是 runway ,都是生成一个一个像素点,很难工程化;
商汤最新发布的 SenseNova 6.8 Code2Video ( 27B )模型处理这类需求的方式是写代码,再用代码制作视频
有点类似于 Opus5.5 做的视频,还挺有意思,分享给大家:
GitHub
OpenSenseNova/SenseNova-6.8-Code2Video
在 HF 上模型权重也开源了:
huggingface.co
直接看案例:

这段是字体和图形之间的转换。对标题动画、产品介绍这类内容,文字本身就是画面的一部分,排版和时间安排都需要一起考虑。

模型特点可以概括为几条:
- 需求转代码:根据视频描述编写代码,制作动态字体、图形动画或讲解视频。
- 修改已有结果:通过自然语言调整颜色、运动、时间安排和场景元素。
- 参考视频重建:根据已有视频分析布局和运动,重建成可继续修改的代码。
- 创作 Skill:引导需求细化、预览和修改,把宽泛的想法变成具体视频方案。
时钟阵列对应的是元素协同。每根指针的动作都简单,合在一起才形成大数字。这类规则明确的动画,很适合拿来观察代码生成的效果。

甲烷燃烧这段把反应物和生成物的变化画出来,是知识讲解方向的例子。这里展示的是表达形式,具体科学内容仍需要单独核对。
比成片更值得展开的是:第一版出来之后,怎么继续改?下面是 brief 里的两组官方案例。
案例一:在已有翻页牌动画上连续修改。
第一版是 20 秒的复古机场提示牌,文字通过翻片切换出现。

第一次修改要求保留文字、时间安排和翻页机制,换成粉色墙面、金色边框、薄荷绿翻片的酒店大堂.成片效果如下⬇️

第二次修改在这个版本上增加飞机和旅客。要求保留已有设计,让飞机经过上方、旅客从前景走过,同时避开提示牌上的文字,效果如下⬇️

案例二:从参考片重新写代码,再改品牌和配色。
参考片是 Forma 的产品宣传视频,只输入 mp4 文件,别的一律没有

任务是分析参考片的布局与运动,再编写代码重建,并把名字换成 KITE 、画布换成浅绿色
也不用大段的其他的 prompt 和 skills ,成片直接如下⬇️

说实话挺震惊的,模型能很好的理解原视频的结构,特别是元素之间的层级关系
所以这里的 [复刻] 是重建一份新的代码实现,并不等于恢复原片的工程文件。对想参考某种产品演示节奏、再做自己版本的人,这个区别需要注意一下哈
通用代码模型也能写动画。Code2Video 是否更省修正次数、局部修改能否保住其他内容,还需要结合代码和完整记录比较。这些 GIF 展示的是官方案例的视觉结果。
INT4 、INT8 量化版本计划后续提供
1 comment
SenseTime open sourced SenseNova 6.8 Code2Video: video creation through code, with natural-language editing
SenseNova 6.8 Code2Video is here, a model that creates videos by writing code, just like Claude Opus 5.5
Its focus includes motion graphics, kinetic typography, animated illustrations, product presentations, and visual explainers
Main features:
Video through code. Describe what you want, and the model writes code to create the video.
Natural-language editing. Request changes to colors, timing, motion, or scene elements after the first version.
Reference-video reconstruction. Rebuild a reference video’s layout and motion as editable code, then make changes.
Motion graphics and more. Suited to kinetic typography, animated illustrations, product presentations, and visual explainers.
A creation Skill. Guides the process from an initial idea to a detailed brief, preview, and revision.
Model weights and Skill. Both are included in the release plan. INT4 and INT8 weights are planned for later.
GitHub:
OpenSenseNova/SenseNova-6.8-Code2Video
Model:
huggingface.co
89 points · 16 comments
How to make a scroll-driven ink painting website with sn-motion-html
It's a five-chapter journey through Shanghai, from a water town at dawn to the Pudong skyline at night and here's a compact workflow for recreating this kind of page.
1. Give Claude a specific sequence
For this demo, the visual route is:
Zhujiajiao → Wukang Mansion → Yuyuan Garden → the Bund → Lujiazui.
Each chapter has one main composition: a stone bridge and boat, the wedge-shaped mansion beneath plane trees, a garden framed by a moon gate, waterfront buildings at dusk, and finally the towers across the river.
Ask for a storyboard with the subject, camera movement, text position, and transition into the next chapter.
2. Establish the painting style before animating
Make a few sample stills first. For this look, specify warm paper texture, gray-green ink washes, soft architectural edges, mist, and restrained color.
Keep that treatment consistent as the lighting changes. The Bund introduces gold reflections and a darker sky; the final skyline still needs to belong to the same painting.
Approve the visual samples and shot plan before generating the full set.
3. Describe the connecting shots
The transitions deserve their own prompts. In the recording, the camera rises past trees, moves through the garden composition, and crosses mist over the river.
A concrete instruction could be:
>Move forward past the moon gate and across the garden pond. Let mist fill the frame, then reveal the Bund across the water. Keep the movement slow and preserve the ink-wash texture.
The skill's workflow generates scene clips first, then uses their actual boundary frames to build the connectors.
4. Place the text around the landmarks
Watch how the layout changes: text sits left of the water-town scene, right of Wukang Mansion and the Bund, and across the lower part of the final skyline.
Keep the text in HTML, leave the artwork visible beneath it, and fade the body copy out during transitions. Use one fixed full-screen stage with scroll progress controlling the media timeline.
A starting prompt:
Use sn-motion-html to build a five-chapter Shanghai ink-wash story.
Route: Zhujiajiao at dawn, Wukang Mansion, Yuyuan Garden, the Bund at dusk, and Lujiazui at night.
Use textured paper, gray-green ink, mist, serif typography,
and small red seal-style chapter markers.
Plan a continuous camera route between scenes.
Place text in each composition's empty space.
First show me sample stills and a storyboard. Wait for approval before full production, and confirm the cost before paid video generation.
Before sharing, check forward/backward scrolling, chapter jumps, and mobile cropping.
Repos: OpenSenseNova/SenseNova-Skills
Brief about the skills: github.com/OpenSenseNova/SenseNova-Skills/blob/ma…
You'll need image-generation access, a Seedance API account, Python, and FFmpeg
957 points · 19 comments
Mentions
Opus5.5 做视频太贵,国产开源平替来了! 大家都还在为 Claude Opus 5.5 写代码做一条 15 秒视频花掉近百美元而感到心疼的时候,开源社区已经把写代码生成视频的底座给掀了 商汤开源的 SenseNova 6.8 Code2Video ,是一个专门通过编写和修改代码来生成视频的模型,27B 参数 本次公开了全量参数模型权重和配套的创作 Skill ,还支持对生成结果进行多轮自然语言精细修改,甚至能把一段没有任何源码的参考视频直接逆向重构为可编辑的代码工程,还挺 impressive 的 项目地址: OpenSenseNova/SenseNova-6.8-Code2Video 一、SenseNova 6.8 Code2Video 是怎么做出视频的? 和 Sora 、Runway 等传统视频生成模型不同,SenseNova 6.8 Code2Video 不会去猜每一帧的像素,而是用代码将创意转化为视频,核心工作机制可以拆解为: 1. 底座:27B 专精模型 + 512K 超长上下文的代码生成 传统像素扩散模型在做科普视频、动态图形( Motion Graphics )或排版动画( Typography )时,经常出现文字拼写乱码、数学公式变形、物理碰撞穿模等问题,如果要精准渲染,这就不是模型能力或者参数的问题了,而是底层实现原理不一样 - 代码即画面:SenseNova 6.8 Code2Video 拥有 270 亿参数与 512K 上下文窗口,它通过编写可执行的前端与图形代码(涵盖 HTML/CSS 、Canvas 、SVG 、Three.js 、Manim 、p5.js 等)来构建视频  - 绝对精准:在代码的世界里,文字是原样排版的字符,公式和数据直接源自输入,坐标、时长、节拍和运镜路径都是精确的数字,运动、碰撞和光影则由物理与数学方程严格计算得出。 2.渲染机制:基于纯时间函数 f(t) 的确定性逐帧捕获 和 Opus 5.5 类似,它并不是靠 [录屏] 来抓画面,而是遵循一套严谨的渲染 workflow ,大概的原理是: 1.将画面写为时间的纯函数: 模型编写的代码中,每一帧画面都是时间参数 t 的纯函数,给定任意时间点 t ,程序就能唯一计算出那一毫秒所有元素的位置、形变与色彩。因为完全不依赖系统实时时钟,同一份代码无论运行多少次,渲染出的视频都分毫不差。 2.无头浏览器逐帧截图 + FFmpeg 合成: 后台通过 Playwright 启动无头 Chromium 浏览器,按设定的帧率依次步进调用时间函数并截取高清画面,最后交由 FFmpeg 将成百上千张序列帧与音轨合成为最终的 MP4 视频文件。 3. 程序化音频与卡点 配乐、环境音和动作音效同样可以通过 Python 脚本合成或对齐节拍,实现画面切镜与音乐节拍的严丝合缝  3. 用 spec.md 来驱动代码生成,而不是抽卡 为什么普通模型一句话生成的代码动画往往粗糙简陋,而 SenseNova 6.8 Code2Video 能产出完整成片?关键在于它与官方开源的 code video Skill 以及你的 coding agent 规定了一个严格的检验流程: - 先写规格书( SPEC.md ):接到需求后,模型不会上来就瞎写代码,而是先根据任务类型读取对应的 guide ,将需求转化为一份可核查的技术规格文档 SPEC.md ,确定构图、配色、缓动曲线与分镜时间轴。 这个 spec.md 简直太重要了,我们用自然语言修改的内容,本质上都是修改 spec 文件,而不是直接改代码 一个项目有了一个统一的 spec ,就能确保每次改动后的生成风格一致性,上下逻辑连贯 吴恩达在他的最新的 vibe coding 课里也提到了这一点的重要性 Spec.md 大概长这样:(有点长)  - 看缩略图挑刺( Contact Sheets 自检):模型写出初版代码并渲染后,会自动抽取关键帧生成“分镜缩略图联系表( Contact Sheets )”,模型会像真正的导演一样审阅这些预览画面,检查文字有没有重叠、元素有没有出画、动效节奏是否合理,然后自己改代码、重新渲染 - 超长程耐力:一条精品短片的打磨往往包含成百上千次“写代码 \rightarrow 渲染预览 \rightarrow 视觉检查 \rightarrow 修复问题”的循环。SenseNova 6.8 Code2Video 针对长程任务进行了专门训练,单次任务可稳定支撑 10 小时以上、超过 2,000 轮( Turns ) 的工具调用与迭代,直到通过全部验证并输出验证报告 VERIFY.md 与最终成片 out/final.mp4 二、环境搭建 在动手制作科普视频前,需要准备好本地渲染环境、模型推理服务以及官方的 code-video Skill 1. 安装基础依赖环境 确保你的机器上已安装以下 5 样基础工具(建议提前装好,避免 Agent 在首次运行时花费大量时间安装环境): - Codex (或者 Claude Code 等编程 agent ) - Node.js ( 18 及以上版本) - Python 3 (用于音频处理与辅助脚本,需安装仓库 requirements.txt 中的依赖) - FFmpeg / FFprobe (用于视频合成与媒体流校验) - Playwright (含 Chromium ) 及视频对应语言的系统字体 2. 部署模型服务(或接入 API ) 官方已在 Hugging Face 开源了 SenseNova 6.8 Code2Video 的全量参数权重( INT4 与 INT8 量化权重计划在后续发布,具体时间请以官方更新为准) Bash #1. 从 Hugging Face 下载模型权重 huggingface-cli download sensenova/SenseNova-6.8-Code2Video --local-dir /path/to/SenseNova-6.8-Code2Video # 2. 使用 vLLM 启动 OpenAI 兼容接口(示例采用 4 卡张量并行,开启 512K 上下文) docker run --rm --gpus all --ipc=host -p 8000:8000 \ -e VLLM_ALLOW_LONG_MAX_MODEL_LEN=1 \ -v /path/to/SenseNova-6.8-Code2Video:/model \ vllm/vllm-openai:latest \ --model /model \ --tensor-parallel-size 4 \ --max-model-len 524288 \ --reasoning-parser qwen3 \ --enable-auto-tool-choice \ --tool-call-parser qwen3_coder 3. 安装官方 code-video Skill 官方的 code-video Skill 包含了完整的制作工作流、验证脚本以及 8 大领域的工艺指南( Craft Guides ): - crafts/explainer-diagrams.md:教学与科普讲解(数学、科学、历史、流程图、数据可视化) - crafts/stylized-looks.md:特定艺术与视觉风格(水墨、像素风、剪纸风、水彩等) - crafts/simulations-and-generative.md:粒子系统、物理模拟、细胞自动机、Shader 生成艺术 - crafts/character-and-creature-motion.md:人物、动物或生物动作动画 - crafts/threejs-scenes-and-cameras.md:3D 场景、产品展示与三维运镜 - crafts/motion-graphics-and-promos.md:动态字体排版、UI 动效、Logo 演绎与品牌宣传片() - crafts/sound-design-and-narration.md:旁白配音、音乐、音效与环境音设计 - crafts/music-and-beat-sync.md:音乐驱动短片与节拍卡点 Bash # 1. 克隆官方 GitHub 仓库 git clone https://github.com/OpenSenseNova/SenseNova-6.8-Code2Video.git # 2. 创建你的视频任务文件夹(注意:Agent 会自动执行 Shell 命令,建议在独立隔离目录中运行) mkdir -p ~/video_tasks/methane_explainer/.claude/skills # 3. 将官方 code-video Skill 完整复制到任务目录的 .claude/skills 下 cp -r SenseNova-6.8-Code2Video/skills/code-video ~/video_tasks/methane_explainer/.claude/skills/code-video 4. 配置 Codex 长程运行参数 因为 Codex 默认通常将未识别的自定义模型按默认上下文(如 128K 或 200K )处理。为了充分利用 SenseNova 6.8 的 512K 超长上下文并支撑上千轮的长程自检迭代,需要在配置文件(如 ~/.codex/config.json 或 settings.json )或环境变量中显式声明 512K 上下文、自动压缩与单次最大输出: 环境变量配置: - CODEX_MAX_CONTEXT_TOKENS=524288 (显式开启 512K 上下文窗口) - CODEX_AUTOCOMPACT_PCT=80 (上下文占用达到 80% 时自动执行历史摘要压缩,防止长程交互爆显存) - CODEX_MAX_OUTPUT_TOKENS=64000 (单次最大输出 64K tokens ,保证单次生成完整代码工程) 三、实战,如何制作一个科普视频 假设我们要制作一条 12 秒的化学科普短片:微观视角拆解“甲烷燃烧( Methane Combustion )”的原子重组与质量守恒定律。 整个创作过程分为三个标准阶段: - 创意扩写 - 自动生产 - 多轮原位精修 阶段一:从一句话出发,先让模型完善你的想法,把你的一句话变成整段的 prompt 做科普视频最忌讳提示词过于简略,不过你可以把 codex 当作工作台,从一个宽泛的想法出发,利用配套 Skill 引导模型与你探讨细节,将其转化为具体的视频 Brief 和视觉概念; 也可以使用官方仓库 prompts/ 目录下的 Enhance Prompt 模板,把一句话想法扩写成详尽的 dense_prompt.md 1. 我们的初始想法(一句话): 做一个 12 秒的化学科普动画,展示 1 个甲烷分子和 2 个氧气分子燃烧反应生成二氧化碳和水,并体现原子个数守恒。 2. 转化为结构化科普 Brief: Markdown Make a 12-second chemistry explainer video titled "Methane Combustion: Atom by Atom" (1920x1080, 30fps, with procedural sound effects). Core Pedagogical Idea: Show how chemical reactions rearrange atoms without creating or destroying them. Visual Structure & Timeline: 1. [0.0s - 3.0s] Introduce reactants on a dark slate background: one methane molecule (CH4: 1 central Carbon atom in charcoal-grey bonded to 4 Hydrogen atoms in white) and two oxygen molecules (2 O2: double-bonded Oxygen atoms in vibrant red). 2. [3.0s - 7.0s] Activation & Bond Breaking: A subtle thermal pulse triggers the molecules to vibrate. The C-H and O=O bonds smoothly stretch and snap with crisp acoustic clicks, pulling the molecules apart into free-floating individual atoms (1 C, 4 H, 4 O). 3. [7.0s - 10.0s] Atomic Rearrangement: The free atoms smoothly gravitate to new positions and form new bonds—creating one linear carbon dioxide molecule (CO2) and two bent water molecules (2 H2O). 4. [10.0s - 12.0s] Final Equation: Resolve into the balanced chemical equation at the bottom: "CH4 + 2O2 → CO2 + 2H2O". Key Explainer Constraint: Place a clean HUD "Atom Counter" in the top-right corner showing "C: 1 | H: 4 | O: 4". This counter must stay locked at the exact same values (1, 4, 4) across the entire 12 seconds to visually prove conservation of mass. 阶段二:agent 自动化生产第一版视频 准备好详细的 prompt 之后,进入任务目录启动 Codex ,调用 SenseNova 6.8 Code2Video 与 code-video Skill 开始制作: 此时 SenseNova 6.8 Code2Video 会在后台自动完成以下动作: 1. 加载科普专属工艺指南:模型识别到这是一个科学讲解任务且包含音效,自动读取 .codex/skills/code-video/crafts/explainer-diagrams.md 与 crafts/sound-design-and-narration.md 。 2. 编写 SPEC.md:规划 12 秒内每一秒的分子坐标、化学键断裂的缓动函数( Easing )、配色色号以及右上角原子计数器的固定布局。 3. 编写代码并生成粗渲染版本:遵循 Skill 中“先尽早跑通全长粗渲染,再逐步打磨细节”的原则,用代码精准画出的 CH4 正四面体投影结构与 CO2 的直线型结构,并用 Python 合成化学键断裂与结合的清脆音效 4. 多轮缩略图自检与修正:模型自动截取各时间节点的分镜图进行视觉审查——比如发现第 8 秒水分子的标签和化学键有轻微重叠,便自动修改坐标偏移量重新渲染,直到确认画面干净、右上角 C: 1 | H: 4 | O: 4 全程清晰无误,最终在 out/final.mp4 输出首版成片 首版成片大概长这样:  阶段三:用自然语言修改成片 首版视频生成出来后,往往只是创作的起点。SenseNova 6.8 Code2Video 最大的优势在于你可以直接用自然语言对现有工程进行多轮修改,而不用推倒重来,哪里错了改哪里,其他内容不变 官方示例中将“暗黑风机场翻页屏”改为“明亮马卡龙色系酒店大堂风”,再追加“飞过的小飞机与行人”一样,我们可以在同一个任务文件夹下使用 --continue 参数,对刚才生成的化学科普视频连提两轮修改需求: 第 1 轮修改:重构视觉风格与音效(暗黑实验室 -> 复古教科书) 提出需求: Keep the molecular coordinates, bond-breaking timing, atom counter logic, and balanced equation unchanged. Restyle the video into a bright vintage science-textbook look: a warm cream paper background with a subtle dot grid, matte pastel spheres for the atoms (terracotta red for Oxygen, navy blue for Carbon, soft mint for Hydrogen) with clean dark-ink outlines, and serif typography for the chemical labels. Swap the harsh clicks for warm wooden marimba notes when bonds form. Edit the existing source in place and overwrite out/final.mp4. 效果:  第 2 轮修改:增补教学组件与物理细节(能量释放波纹 + 阶段进度条) 提出需求: Keep the current textbook style, colors, timing, atom counter, and audio. Add two pedagogical details: 1) At 3.5s when bonds break, show a subtle inward blue ripple around the molecules labeled "Energy In"; at 7.5s when new bonds form, emit an expanding warm amber glow wave labeled "Heat Released (Exothermic)". 2) Add a minimalist step-progress bar along the very bottom edge indicating the three phases (Reactants → Transition → Products) without obscuring the equation. Edit the existing source in place and overwrite out/final.mp4. 效果  编写 Code2Video 精修 Prompt 的 3 个核心技巧 1. 第一句必须“锁死不变项”: 在官方《 Departures 》翻页屏案例中,每次修改开头的句式都是 Keep the messages, timing and flip mechanics... 或 Keep the current design, messages, timing, flip mechanics, and audio 。必须先明确告诉模型哪些动画逻辑已经达标,防止 Agent 在改样式时重新生成时间轴,导致原有逻辑丢失 2. 给时间点打上精确的时间戳: 对于动效增加需求,尽量指明具体的秒数(如 At 3.5s when bonds break...、at 7.5s when new bonds form...)。因为底层代码是基于时间函数 t 进行渲染的,带有具体秒数的指令能让模型精准插值入帧 3. 句尾锁定原地改写指令: 务必带上官方标准结束语:Edit the existing source in place and overwrite out/final.mp4.这行指令会强行约束 Agent 只能在原有代码文件上做增量补丁,避免 Agent 另起炉灶新建一份空白 HTML/JS ,从而实现几分钟内快速重渲染 进阶玩法:没有源码?丢个参考视频直接“扒片二创” 如果你在网上看到一段排版和动效极其惊艳的科普视频或产品演示片,想做成自己科目的科普视频,但手头只有一个成品.mp4 文件、没有任何工程源码怎么办? 你可以直接利用 SenseNova 6.8 Code2Video 的参考视频重构( Reference-video reconstruction )能力: 1. 将参考视频放入项目目录,不需要提供原代码 2. 让模型逐帧分析参考视频的画面布局、转场节奏与组件运动轨迹,从零编写代码将其重构为可编辑的代码工程 3. 在指令中直接要求它替换主题内容 我用了一段库克把苹果的库存周期缩短为 6 天的案例 原片:⬇️  要求把其中的故事替换成 costco 卖 1.5 美金热狗的故事,效果是:⬇️  官方开源地址汇总: - GitHub 仓库 & Creation Skill: OpenSenseNova/SenseNova-6.8-Code2Video - Hugging Face 模型权重: huggingface.co
A code-driven video creation model with open model weights and Skill. Want to try it yourself? GitHub repo for the Skill and examples: OpenSenseNova/SenseNova-6.8-Code2Video Hugging Face model page: huggingface.co
9b looped model ostensibly performing on par with qwen3.8-27b github.com/OpenSenseNov...
what the f*ck, a FREE model writes code that renders your video😳 - SenseNova 6.8 Code2Video, apache 2.0 - 27B open weights, 512K context - builds SVG / Three.js / Manim videos - the 90s launch film was made by the model try it here: OpenSenseNova/SenseNova-6.8-Code2Video t.co
1,000 double pendulums, a billionth of a radian apart Each one starts one billionth of a radian away from its neighbour. For about ten seconds they swing as one bright bundle, then split into a rainbow and go fully chaotic. The chart on the right is the gap between them on a log scale. The motion is a real RK4 simulation, precomputed and checked (total energy drifts by about one part in a hundred million). The colours are additive, so the overlapping start looks white and the split looks like light through a prism. SenseNova 6.8 Code2Video built it from a brief I wrote. My brief said the colours should be clearly separated by 12.5 seconds, and it pushed back: at that frame the pendulums are only about 3 px apart. The real split happens around 13 to 16 seconds, so it kept the physics and ignored my timing. OpenSenseNova/SenseNova-6.8-Code2Video
Gradient descent, momentum and Adam racing down the same narrow valley, 80 steps each The loss is f(x, y) = 0.01x² + y², so the valley curves 100 times more sharply across than along. All three start at (-4.6, 2.0) and get 80 steps. Gradient descent (lr 0.9) overshoots the steep direction on every step, so it zigzags across the valley while creeping along it, and ends at a loss of 0.0116. Momentum (lr 0.12, beta 0.9) builds up speed along the valley and gets further, but swings wide on the way there (0.0032). Adam (lr 0.25) scales each direction by its own gradient size, so it cuts across, overshoots the minimum once and settles lowest (0.0006). I wanted the textbook picture with real numbers behind it, so I simulated the 80 steps myself first. Then I had SenseNova 6.8 Code2Video animate it from the update rules and check its results against my numbers before rendering. Nothing is placed by hand. OpenSenseNova/SenseNova-6.8-Code2Video
SenseNova 6.8 Code2Video: an open-sourced model that writes and revises code to make videos Think of the animation workflows people use with Claude Opus 5.5: the model writes code, rendering tools turn it into video, and further instructions revise the result. SenseNova follows that same general approach, with a model and creation Skill focused on video creation A few highlights: Generates video through code, with a focus on motion graphics and other visuals that can be expressed programmatically. Revises existing results through natural-language requests, including changes to styling, timing, and scene elements. Supports reconstructing a reference video’s visual treatment as editable code. Pairs the model with a creation Skill that guides brief development, previews, and revisions. The release plan includes full model weights and the Skill. INT4 and INT8 weights are planned for later. General-purpose coding models can already write animations. The interesting question is what a dedicated Code2Video model improves: fewer repair attempts, better motion, or more reliable edits that leave unrelated elements alone. GitHub: OpenSenseNova/SenseNova-6.8-Code2Video Model: huggingface.co
商汤发布 SenseNova 6.8 Code2Video:把动态字体、图形动画和知识讲解写成代码 做动态字体或讲解动画,画面里经常有明确的文字、位置和运动关系:小球从 A 点到 B 点,走什么线,速度多快 像这类需求,传统的 text to video 模型基本上实现不了,不是说能力不够,而是底层技术实现就不一样 无论是 Seedance 还是 runway ,都是生成一个一个像素点,很难工程化; 商汤最新发布的 SenseNova 6.8 Code2Video ( 27B )模型处理这类需求的方式是写代码,再用代码制作视频 有点类似于 Opus5.5 做的视频,还挺有意思,分享给大家: GitHub OpenSenseNova/SenseNova-6.8-Code2Video 在 HF 上模型权重也开源了: huggingface.co 直接看案例:  这段是字体和图形之间的转换。对标题动画、产品介绍这类内容,文字本身就是画面的一部分,排版和时间安排都需要一起考虑。  模型特点可以概括为几条: - 需求转代码:根据视频描述编写代码,制作动态字体、图形动画或讲解视频。 - 修改已有结果:通过自然语言调整颜色、运动、时间安排和场景元素。 - 参考视频重建:根据已有视频分析布局和运动,重建成可继续修改的代码。 - 创作 Skill:引导需求细化、预览和修改,把宽泛的想法变成具体视频方案。 时钟阵列对应的是元素协同。每根指针的动作都简单,合在一起才形成大数字。这类规则明确的动画,很适合拿来观察代码生成的效果。  甲烷燃烧这段把反应物和生成物的变化画出来,是知识讲解方向的例子。这里展示的是表达形式,具体科学内容仍需要单独核对。 比成片更值得展开的是:第一版出来之后,怎么继续改?下面是 brief 里的两组官方案例。 案例一:在已有翻页牌动画上连续修改。 第一版是 20 秒的复古机场提示牌,文字通过翻片切换出现。  第一次修改要求保留文字、时间安排和翻页机制,换成粉色墙面、金色边框、薄荷绿翻片的酒店大堂.成片效果如下⬇️  第二次修改在这个版本上增加飞机和旅客。要求保留已有设计,让飞机经过上方、旅客从前景走过,同时避开提示牌上的文字,效果如下⬇️  案例二:从参考片重新写代码,再改品牌和配色。 参考片是 Forma 的产品宣传视频,只输入 mp4 文件,别的一律没有  任务是分析参考片的布局与运动,再编写代码重建,并把名字换成 KITE 、画布换成浅绿色 也不用大段的其他的 prompt 和 skills ,成片直接如下⬇️  说实话挺震惊的,模型能很好的理解原视频的结构,特别是元素之间的层级关系 所以这里的 [复刻] 是重建一份新的代码实现,并不等于恢复原片的工程文件。对想参考某种产品演示节奏、再做自己版本的人,这个区别需要注意一下哈 通用代码模型也能写动画。Code2Video 是否更省修正次数、局部修改能否保住其他内容,还需要结合代码和完整记录比较。这些 GIF 展示的是官方案例的视觉结果。 INT4 、INT8 量化版本计划后续提供
SenseTime open sourced SenseNova 6.8 Code2Video: video creation through code, with natural-language editing SenseNova 6.8 Code2Video is here, a model that creates videos by writing code, just like Claude Opus 5.5 Its focus includes motion graphics, kinetic typography, animated illustrations, product presentations, and visual explainers Main features: Video through code. Describe what you want, and the model writes code to create the video. Natural-language editing. Request changes to colors, timing, motion, or scene elements after the first version. Reference-video reconstruction. Rebuild a reference video’s layout and motion as editable code, then make changes. Motion graphics and more. Suited to kinetic typography, animated illustrations, product presentations, and visual explainers. A creation Skill. Guides the process from an initial idea to a detailed brief, preview, and revision. Model weights and Skill. Both are included in the release plan. INT4 and INT8 weights are planned for later. GitHub: OpenSenseNova/SenseNova-6.8-Code2Video Model: huggingface.co
How to make a scroll-driven ink painting website with sn-motion-html It's a five-chapter journey through Shanghai, from a water town at dawn to the Pudong skyline at night and here's a compact workflow for recreating this kind of page. 1. Give Claude a specific sequence For this demo, the visual route is: Zhujiajiao → Wukang Mansion → Yuyuan Garden → the Bund → Lujiazui. Each chapter has one main composition: a stone bridge and boat, the wedge-shaped mansion beneath plane trees, a garden framed by a moon gate, waterfront buildings at dusk, and finally the towers across the river. Ask for a storyboard with the subject, camera movement, text position, and transition into the next chapter. 2. Establish the painting style before animating Make a few sample stills first. For this look, specify warm paper texture, gray-green ink washes, soft architectural edges, mist, and restrained color. Keep that treatment consistent as the lighting changes. The Bund introduces gold reflections and a darker sky; the final skyline still needs to belong to the same painting. Approve the visual samples and shot plan before generating the full set. 3. Describe the connecting shots The transitions deserve their own prompts. In the recording, the camera rises past trees, moves through the garden composition, and crosses mist over the river. A concrete instruction could be: >Move forward past the moon gate and across the garden pond. Let mist fill the frame, then reveal the Bund across the water. Keep the movement slow and preserve the ink-wash texture. The skill's workflow generates scene clips first, then uses their actual boundary frames to build the connectors. 4. Place the text around the landmarks Watch how the layout changes: text sits left of the water-town scene, right of Wukang Mansion and the Bund, and across the lower part of the final skyline. Keep the text in HTML, leave the artwork visible beneath it, and fade the body copy out during transitions. Use one fixed full-screen stage with scroll progress controlling the media timeline. A starting prompt: Use sn-motion-html to build a five-chapter Shanghai ink-wash story. Route: Zhujiajiao at dawn, Wukang Mansion, Yuyuan Garden, the Bund at dusk, and Lujiazui at night. Use textured paper, gray-green ink, mist, serif typography, and small red seal-style chapter markers. Plan a continuous camera route between scenes. Place text in each composition's empty space. First show me sample stills and a storyboard. Wait for approval before full production, and confirm the cost before paid video generation. Before sharing, check forward/backward scrolling, chapter jumps, and mobile cropping. Repos: OpenSenseNova/SenseNova-Skills Brief about the skills: github.com/OpenSenseNova/SenseNova-Skills/blob/ma… You'll need image-generation access, a Seedance API account, Python, and FFmpeg