Director's Notes for the huashu-md-html v2.0 launch film 30 seconds · 1920×1080 · 25 fps · no voiceover Director: huashu-design (acting as Apple-tier launch film director) Composer: TBD (target: Max Richter / Ólafur Arnalds / Jóhann Jóhannsson minimal-cinematic register) Color base: ivory white #FAFAF6 · ink #1A1A1A · terracotta #C2410C Type: Newsreader (display + body) · JetBrains Mono (interface) · Noto Serif SC (中文)
绝大多数 SaaS 升级视频都犯同一个错——把镜头当成 PPT。打开 → 6 个功能滑过 → logo + slogan → 结束。每一秒都在「展示」,没有一秒在「讲」。观众离开时记住的不是产品,而是「又一个看着像 AI 做的页面」。
这支片不要做这个。
我们要讲一个故事。故事只有一行:
「md 是源代码,万物是产物。」
这不是 slogan,是世界观。Markdown 不是「一种轻量级文档格式」——它是写作的源头。一切下游的形式(html、docx、pdf、epub)都是从这同一个源头派生出的产物。huashu-md-html v2.0 把这条产物链从 4 条延长到 6 条——但延长的不是「功能列表」,是源头的影响力半径。
如果观众看完这支片只记住一件事,我希望那件事是:「原来 md 才是源代码」。功能列表能记多少都是 bonus。
每一部好的宣传片都在跟一组前作对话。我希望这支片对话的语境是:
Apple — "Designed by Apple in California" (2013)
那支片子是我心目中科技公司宣传片的天花板。导演 Mark Romanek 做对了三件事:
我们这支片没有 voiceover,所以前两个原则要被 typography 和 timing 强化到 200%。
Apple Silicon Launch Films (M1 / M2 / M3, 2020-2024)
这一系列短片教会我typography 也能跳舞。"M1" 三个字符可以从消失、到出现、到放大、到旋转、到爆炸成尘埃、再到重组——观众看着一个 logo 在 30 秒里成为一支舞剧的主角。
这支片的 hero 不是产品 UI,是 md. 这两个字符 + 一个橙色句点。它要在 30 秒里成为舞剧主角。
Anthropic 品牌语言(2024-2026)
Anthropic 把「赤陶橙 + 衬线 + 几何抽象」做成了 AI 公司的反 slop 样板。它告诉行业:你可以是科技公司,但你也可以看起来像 Penguin Classics 出版的一本哲学小书。
我们继承这套色彩。但要做得更克制——Anthropic 偶尔用纯赤陶橙作大色块;我们的赤陶橙永远只作 accent(占总画面 < 8% 面积),剩下 92% 留给象牙白和墨黑。
Penguin Classics(1947 起,Romek Marber 1961 grid 之后)
Penguin 教会我typography 的勇敢。一本书的封面可以是大字号衬线 + 一条黑横线 + 没有插图——读者反而会停下来。
第 25-29 秒的 slogan reveal 借这个语言:ONE SOURCE. 和 SIX FORMS. 不是「装饰文字」,它们就是画面本身。
Pentagram (Paula Scher / Michael Bierut)
Pentagram 的招牌是信息建筑——文字和文字之间的距离、文字和边界的距离、文字层级之间的字号比,都不是「凭直觉」,是数学。
我们的网格系统(Part II.3)来自这一传统。
Kenya Hara《白》(2008)
Hara 写过:「白不是颜色,是一种感受性。」(白は色彩ではなく、感受性なのだ)
这支片的真正主角不是 md.,是包围它的那片象牙白。每一个 shot 都要留出至少 60% 的负空间。负空间不是「还没填满」,是内容本身。
Massimo Vignelli — Modernism in design
Vignelli 的 8 字格言:「If you can design one thing, you can design everything.」(能设计好一件东西,你就能设计好一切)
我们的设计系统不允许「这一镜临时加一种字体」「这一镜临时加一个圆角值」。所有 12 个 shots 共享同一套 5 个色值、3 种字体、4 个 easing curves。
三类观众,按重要性排:
主受众 A · 已使用 v1 的 huashu-md-html 老用户(约占 60% 流量)
他们打开片子是为了知道「升级了啥」。我们对他们的承诺:30 秒之内,你必须明确知道——
→ Shot 08 和 Shot 09 各 3 秒,必须有「★ NEW」标签 + destination card 上必须能看到「印厂裁切标记」「Apple Books frame」这类看得见的专业级细节——让老用户秒懂「这不是凑数功能,是正经做了的」。
次受众 B · 听说过 huashu-md-html 但没用的 AI Native 创作者(约 25%)
他们关心的是「这个 skill 跟我有什么关系」。我们对他们的承诺:30 秒之内,你必须意识到——
→ Shot 04(any → md)要让他们看到 PDF/DOCX/PPTX/XLSX/HTML 一起被 md 吸收——这是「源头思维」的视觉具象化。
外受众 C · 完全不熟悉的设计师 / 编辑 / 出版人(约 15%)
他们看到的是一支「漂亮的科技短片」,不一定 follow up。我们对他们的承诺:30 秒之内,你必须留下印象——
→ 整支片的反 AI slop 自检(Part II.7)就是为他们做的。任何紫渐变、emoji 图标、SVG 手画人物——一律不出现。
苹果宣传片的节奏不是匀速的。它是慢拍 — 加速 — 顶峰 — 缓收的曲线(详见 Part III 情绪曲线图)。
具体到这支片:
关键决策:第 22 秒是这支片的高潮点(不是第 29 秒)。29 秒是 resolution,22 秒是 climax。这两个不要混。
按重要性排:
| 不做 | 原因 |
|---|---|
| 不用紫渐变 | 训练语料里「科技感」的万能公式,2026 年看是 cyber slop |
| 不用 emoji 作图标 | 「不专业就用 emoji 凑」的病 |
| 不画 SVG 人物 / 手 / 抽象人形 | AI 画的 SVG 人物永远五官错位、比例诡异 |
| 不用 Inter/Roboto/Arial 作 display | 太常见,撞 system fonts |
| 不用赛博霓虹 / 深蓝底 #0D1117 | GitHub dark mode 美学的烂大街复制 |
| 不堆 effects(blur/glow/particle) | 一个 effect 出现两次就是装饰,三次就是 slop |
| 不用 Lorem ipsum | 每一段假文都用真正能读的内容(含「md is the source. Anything else is product.」这种 hook) |
| 不用 stock photo | 整支片不出现任何真实照片(it's about typography, not lifestyle) |
| 不画进度条 + 时间码 + 版权署名条 | 这些是 player chrome,不是 content chrome——会和外部播放器撞 |
| 不让 md 字符在每个 scene 都长得一样 | 它要在 12 镜里有 12 种状态,但保持同一个核心字形 |
"Markdown is the new typewriter."
A 30-second film about source-of-truth thinking, made for designers who write and writers who design.
不是 3 色,是 10 色。每一色都有功能定义(不是「好看就用」)。
名称 HEX 作用 占画面比例上限
─────────────────────────────────────────────────────────────────────
Ivory paper #FAFAF6 主底色(象牙白,一抹温度) 60-70%
Mist #F2EDE4 次级背景层(card 阴影下的微暗) < 15%
Mica #E6E1D6 细线 / 分隔符 / 卡片边框 < 5%
Smoke #6B6B6B 次级文本 / metadata < 5%
Cinder #3D3530 次级深色(深褐黑,不是纯黑) < 10%
Ink #1A1A1A 主黑 / 主文本 20-25%
Charred #2A2620 极深褐黑(封面卡专用) < 5%
Terracotta #C2410C 主 accent(Anthropic 调) 5-8%
Terra Hot #E55D21 高光 variant(仅 NEW 标签亮起一瞬)< 1%
Terra Deep #8B2D08 阴影 variant(赤陶橙投影) < 1%
铁律:
字号层级 字体 weight 用途 字距 (em)
────────────────────────────────────────────────────────────────────────────────────
Display XXL Newsreader 700 slogan 顶字(200px) -0.035
Display XL Newsreader 700 capability number(48px) -0.020
Display L Newsreader 600 hero md 字符(300-480px) -0.040
Display M Newsreader 600 chapter title (32-44px) -0.015
Body L Newsreader 400 essay 正文 (18-22px) 0
Body M (zh) Noto Serif SC 500 中文 sub-line (20-26px) +0.04
Italic Newsreader italic 400 引语、副标 +0.01
Mono S JetBrains Mono 500 标签 / capability counter +0.18
Mono XS JetBrains Mono 700 NEW / version chip (11-14px) +0.22
Caret (block 3px wide) — typing cursor —
字体加载策略:
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link> 请求合并所有 weights,减少 round-tripdocument.fonts.ready 完成才开始计时(Stage 已实现)主画布:1920 × 1080
外边距(safe zone):80px 上下左右
主内容区:1760 × 920
12-column grid:column-width = 132px,gutter = 16px
Baseline grid:8px 基础律。所有 vertical position 必须是 8 的倍数(除非有特殊视觉理由)。
黄金分割锚点:
关键安全区:
Easing 库(共 4 条,禁用其他):
名称 曲线公式 用途
──────────────────────────────────────────────────────────────────
expoOut 1 - 2^(-10t) 默认 ease(90% 的入场用这个)
overshoot cubic-bezier(0.34, 1.56, 0.64, 1) NEW 标签弹出 / 按钮浮现
linear t 底色 fade / paper texture 移动
expoIn 2^(10(t-1)) 退场 ease(10% 的出场用这个)
Duration 字典:
事件类型 持续时间 备注
────────────────────────────────────────────────────────
字符 stagger 30-50ms 打字效果 / slogan 字符依次出现
小元素入场 300ms file card / pill / chip
中元素入场 500ms destination card / capability number
hero 元素入场 700-900ms md 字符 morph
slogan 字符入场 800ms "ONE SOURCE." 整体
scene 之间过渡 300ms 重叠 cross-dissolve + scale
退场 200-300ms 出场永远快于入场
Stagger 法则:
Scene 之间过渡:
这些是 持续在画面里的小东西,提供「这是一支完整的片子」的感觉。
Chrome A · top-left · capability counter(00-22s)
┌─────────────┐
│ ● CAP·01 │ pulse dot (terracotta) + label
│ ●●●●○○○○○ │ 6-dot progress (filled = current)
└─────────────┘
Chrome B · top-right · version chip(02-30s)
╔═════════════════════════╗
║ ● HUASHU-MD-HTML · v2.0 ║
╚═════════════════════════╝
Chrome C · bottom-center · timeline ticker(07-22s)
any→md ━━━━●━━━━━━━━━━━━ md→html ─ html→md ─ md→docx ─ md→pdf ─ md→epub
Chrome D · bottom-right · watermark(持续)
CREATED BY HUASHU-DESIGN
Chrome E · 极淡 paper texture(持续)
强度
│ ╱╲
1│ ╱╱ ╲╲
│ ╱╱ ╲╲
│ ╱╱ ╲
│ ╱╱ ╲
│ ╱╱ ╲
│ ╱╱ ╲
│ ╱╱ ╲
0└──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴
0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30s
│ │ │ │ │ │
入场│ 弦乐进 │ 节奏律动加入 │ 顶峰 │ decay
piano swell
层级(每层 30 秒持续,强度变化由 envelope 控制):
风格目标:Max Richter 的 On the Nature of Daylight + Ólafur Arnalds 的 Re:member + Jóhann Jóhannsson 的 Orphée
Cue 时间 类型 音量
────────────────────────────────────────────────────────────────────
keyboard click 00.5-02.0 keypress × 12 -18dB(每次 30ms)
cursor blink 02.0-02.8 subtle tick -28dB
md morph swell 02.8-03.2 soft whoosh + bloom -16dB
file card whoosh × 6 05.5-08.0 short whoosh -20dB(每次 200ms)
absorb / ink drop 08.0-08.4 "absorb" splash -16dB
paper rustle 08.5-09.0 paper turn -22dB
chime: capability 02 → 09.0 single chime tone -18dB
chime: capability 03 → 12.0 single chime tone -18dB
chime: capability 04 → 15.0 single chime tone -18dB
chime: NEW (05) 18.0 double chime + glow -14dB
chime: NEW (06) 21.0 double chime + glow -14dB
build sweep 22.0-22.6 ascending sweep -10dB
impact (slogan ONE) 22.6 deep impact -8dB
impact (slogan SIX) 23.4 deep impact -8dB
pen flourish 24.0-24.4 pen on paper -22dB
final stamp / sign-off 29.0-29.5 ink stamp -14dB
SFX 频段隔离(防止互相打架):
每一镜在执行前必须过这个 checklist:
□ 没有紫色(任何饱和度)
□ 没有圆角卡片 + 左 border accent 的组合(除了 destination card 的诚实 mica border)
□ 没有 emoji 作为图标
□ 没有 SVG 画的人物 / 抽象人形
□ 没有未在 Part II.1 色板里的颜色
□ 没有 Inter / Roboto / Arial 作为 display
□ 字距、行高、字号都来自 Part II.2 字体系统(没有「凭手感」加的值)
□ vertical position 是 8 的倍数(除了刻意的视觉理由)
□ 赤陶橙在本镜占画面 < 10%
□ 这一镜有至少一处「pause 暂停时值得截图」的细节(120% 签名)
□ 上一镜到这一镜的过渡是 cross-dissolve + scale,不是硬切
□ 本镜结束时为下一镜做了视觉「让位」(不是「全画面填满到最后」)
ACT I · SET-UP (00.0 — 06.0s)
观众进入画面。问题被提出:什么是 source of truth?
ACT II · ESCALATION (06.0 — 22.0s)
答案展开:md 是源头。它向外辐射 6 条产物链。
ACT III · PAYOFF (22.5 — 30.0s)
主题升华。slogan 出现。品牌印章。
情绪强度
│ ╔═══╗
│ ╔══╝ ╚══╗
│ ╔═════╝ ╚══╗
│ ╔═══╝ ╚══╗
│ ╔══╝ ╚══╗
│ ╔═══╝ ╚════════╗
│ ╔═════╝ ╚══╗
│ ╔═════╝ ╚══
│ ╔════╝
│══╝
0──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──>
0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30s
│ │ │ │ │ │ │ │ │
blank cursor morph gather cap 02-04 cap 05/06 ★ slogan slogan sign-off
ONE SIX
──────►
PEAK 24.5s
关键 emotional beats:
每一镜的格式:
SHOT NN · NAME
[TIMECODE] | FUNCTION
[VISUAL] 画面构图
[TYPE] 排版精确 spec
[ANIM] 每元素 in/out/easing/delay
[AUDIO] music beat + SFX cue
[CHROME] 四角元素状态
[ANTI-SLOP] 通过的自检项
[WHY] 承接 + 推进
[TIMECODE] 00.00 — 01.50s (1.5s) | FUNCTION 开场。引观众进入。给「空」一个时间。
[VISUAL]
整个 1920×1080 是 Ivory paper #FAFAF6。画面里什么都没有。
唯一的存在:一层极淡的 paper texture(SVG 噪点 + 0.3% scale 极慢呼吸),几乎看不见,但赋予画面「这是一张真的纸」的潜意识。
构图:完全空。这是 Kenya Hara 意义上的「白」——不是「还没画」,是「内容本身」。
[TYPE] 无文本。
[ANIM]
[AUDIO]
[CHROME] 全部隐藏。Chrome A/B/C/D/E 都还没显形。
[ANTI-SLOP]
[WHY]
苹果 "Designed by Apple in California" 也是这样开场——给空白一个时间。它告诉观众「这部片需要你慢下来」。如果开场就堆 logo 和 chrome,观众的注意力被分散,后面 30 秒都收不回。
这 1.5 秒是这支片最重要的 1.5 秒之一。
[TIMECODE] 01.50 — 03.00s (1.5s) | FUNCTION typewriter 诞生。第一个内容。
[VISUAL]
画面中央偏左(x=860, y=540),一个垂直的黑色 block(3px × 56px, Ink #1A1A1A)开始闪烁。这是 cursor。
闪烁两次(0.7s 一周期 × 2)后,cursor 后面开始逐字出现 # markdown.md,字体 JetBrains Mono 56px,颜色 Ink #1A1A1A,letter-spacing -0.01em。
每打一个字符,键盘 click 音响一次。打完最后一个字符(13 个字符总计),cursor 在 .md 之后继续闪烁 1 次。
[TYPE]
# markdown.md[ANIM]
[AUDIO]
[CHROME] 仍隐藏。
[ANTI-SLOP]
[WHY]
这一镜是 setup 的核心:markdown 不是一个名词,它是一个动作——它是「敲击键盘把字符变成结构」这件事本身。
cursor 是写作的最小单位。从一个 cursor 开始,是「源代码」的诞生。
下一镜的 morph 就建立在这个观众已经接受「我们在写 markdown」的前提上。
[TIMECODE] 03.00 — 05.00s (2.0s) | FUNCTION 揭示 hero。# markdown.md morph 成 hero md.
[VISUAL]
第 03.00 秒:# markdown.md(56px mono)开始向中央收拢、放大、变形。
morph 过程(详细解构):
# markdown.md 的 # 和 arkdown 部分淡出(opacity 1 → 0),同时 m 和 d.md 的 md 部分留下。md 从 mono 字体 morph 成 Newsreader serif,从 56px 放大到 480px,从 Ink 变成 Ink(不变色),位置不变(仍在画面中央)。md 字符的右下角,一个 Terracotta 句点 . 浮现(fade-in + scale 0.6 → 1 + overshoot easing)。结束帧:md.(Newsreader 600 weight, 480px, Ink with Terracotta dot)+ 下方一条赤陶橙细线。画面其他全空。
[TYPE]
md.(md Ink, . Terracotta)m+d Ink #1A1A1A, . Terracotta #C2410C[ANIM]
# arkdown md(中段)淡出 (opacity 1 → 0, expoOut)md morph:fontFamily 切换、fontSize 从 56 → 480、weight 从 500 → 600(800ms expoOut,注意 morph 不是 abrupt 切换,而是 ghost 残影叠加 + scale up + opacity 切换). 入场 (700ms overshoot, scale 0.6 → 1)[AUDIO]
[CHROME]
● HUASHU-MD-HTML · v2.0[ANTI-SLOP]
[WHY]
这是 hero shot。后面 25 秒整部片的「主角」(md.)在此诞生。
morph 的设计哲学:从 mono 到 serif,是从「我在打字」到「我在写作」的隐喻。mono 是 typewriter,serif 是 publishing。md 同时是两者——它在键盘上敲,但它是 publishing 的源代码。
下一镜进入 ACT II,hero 已经站住了——它会被推到画面上方,让出空间给「物质化的产物」。
[TIMECODE] 05.00 — 08.50s (3.5s) | FUNCTION CAPABILITY 01 揭示。万物 → md。建立「md 是源」的世界观。
[VISUAL]
05.00s:hero md. 从画面中央(y=540)向上滑到 y=280(即 1/4 高度位置),同时缩小到 220px。
随后画面下半部(y=520 ~ y=900 区域)出现 6 张文件 cards,按顺序从画面外(下方 y=1140)飞入,沿一条隐形的抛物线轨迹向 md hero 收拢。
6 张 cards 的设计(每张都是真实文件类型的迷你 demo,不是 fake bar lines):
.pdf │ 双栏布局 + 页眉 "doc.pdf" + 页码 "— 12 —" + 几行真实排版的小文字
.docx │ heading "On Markdown" + 副标 italic + 6 行段落 ascii
.pptx │ 标题 "MD AS SOURCE" + 一个简化的 bar chart 占位
.xlsx │ 6×4 的 spreadsheet 网格 + 一些数字
.epub │ Apple Books 风的页面 + 章节标题 "Chapter 01"
.html │ 一个浏览器 chrome(三个圆点 + URL bar "example.com")+ 标题 + 段落
每张 card 尺寸 130×180px,白底 + Mica 边框 + 24°右上角 fold。
飞行轨迹:从下方 y=1140 出发,沿抛物线向 md hero 的「.」位置(约 x=960+50, y=280+90)汇聚。中段(在画面中部时)6 张 cards 排成扇形,每相邻两张间隔 220px。最终所有 6 张被 md 「吸收」(scale 1 → 0.5 + opacity 1 → 0,同时 position 收拢到一个点)。
吸收时机:从 05.60s 开始,每隔 0.18s 一张 launch。每张飞行 1.1s 后被吸收。最后一张 absorb 完成时间约 07.60s。
吸收完成后(07.60-08.20s),下方 60px 处出现 tagline:「万物 → md」(中文衬线,36px,Ink,italic)
08.20-08.50s · 整体 hold,准备进入 Shot 05。
[TYPE]
md.:缩小到 220px(同 SHOT 03 字体规格)[ANIM]
[AUDIO]
[CHROME]
CAPABILITY · 01, 第一个 dot 实心[ANTI-SLOP]
[WHY]
这是 ACT II 的开门镜。如果观众看完这 3.5 秒没意识到「噢,md 是源」,后面的镜头就白做了。
3.5 秒里有 3 个 micro-narrative beats:
下一镜进入 md → html 的正向流动——观众已经接受「md 是源」,现在 ready to see「md 怎么变」。
[TIMECODE] 08.50 — 11.50s (3.0s) | FUNCTION CAPABILITY 02。第一次正向输出。建立 ScenePipeline 模式(后续 5 镜共用此结构)。
[VISUAL]
08.50s:hero md. 从中心上方位置滑到画面左侧(x=480, y=540),尺寸保持 220px。
同时画面右侧 (x=1400, y=540) 出现一个 destination card:模拟「Tufte CSS 风的 essay html」。
destination card 设计(真实可读的内容,不是 bar lines):
┌─────────────────────────────────┐
│ │
│ On Markdown │ ← Newsreader 600, 32px, Ink
│ AN ESSAY · 2026 │ ← Mono 11px, 0.18em, Smoke
│ ▬▬▬ │ ← Terracotta rule 60×3px
│ │
│ md is the source of truth. │ ← Newsreader 400, 18px, line-height 1.7
│ Anything else is product. │
│ We write once. Publish six │
│ ways. The river forks; the │
│ spring stays the same. │
│ │
│ ─ huashu, 2026.05.11 │ ← italic 14px, Smoke
│ │
│ article.html · TUFTE THEME │ ← Mono 10px, 0.18em, Smoke (bottom)
└─────────────────────────────────┘
宽 480px × 高 560px
白底 + Mica border + 24° 角折
md 字符与 destination card 之间用一条 terracotta 细线连接,从 md 的 dot 出发,向右生长 380px,箭头 head 触达 card 左边界。线上方 30px 处显示 label「md → html」(JetBrains Mono 14px Terracotta,letter-spacing 0.14em)。
09.80s 时:Chrome C(timeline ticker)首次入场,固定在 y=1000 处。
[TYPE]
[ANIM]
[AUDIO]
[CHROME]
CAPABILITY · 02, 第二个 dot 实心any→md ━━━━●━━━━━ md→html ─ html→md ─ md→docx ─ md→pdf ─ md→epub,进度点 ● 位于第二格上方[ANTI-SLOP]
[WHY]
这是 ScenePipeline 模式的首次建立。后续 5 个 capability shots 都会按这个结构推进:
观众看到第二次(SHOT 06)就会理解这个模式,看到第六次(SHOT 09)会有「啊,又来一次,但这次是 NEW」的感觉——这正是 ACT II 的节奏设计。
[TIMECODE] 11.50 — 14.50s (3.0s) | FUNCTION CAPABILITY 03。反向归档:html → md。建立「双向流」概念。
[VISUAL]
cross-dissolve 进入。前一镜的 destination card 在 11.50-11.80s 内缩小退场到右下角,新的 destination card(这次显示 markdown 源代码)从右侧入场。
新的 destination card 设计:深底 markdown source 视图(与 SHOT 05 的浅底 html 形成视觉对比)。
┌─────────────────────────────────┐
│ │ ← 背景 Charred #2A2620
│ # On Markdown │ ← Terracotta, mono 14px
│ │
│ An essay · 2026 │ ← Smoke, mono 14px
│ │
│ > md is the source. │ ← italic Smoke, mono 14px
│ > Anything else is **product**. │ `**product**` 高亮 mica + bold
│ │
│ - 1 source │ ← mono 14px Smoke
│ - 6 forms │
│ - ∞ outputs │
│ │
│ essay.md · CLEAN MARKDOWN │ ← bottom Mono 10px Smoke
└─────────────────────────────────┘
480×560px, Charred 底, 顶部 24° 角折是 Cinder
arrow direction 反向:从右侧 destination card 向左 md 字符方向(短 Terracotta 线 + 箭头 head 指向左)。label 改为「html → md」。
关键差异点(和 SHOT 05 形成 visual rhyme):
[TYPE]
# 标题 Terracotta,> 引用 italic Smoke,**bold** Mica + bold,列表 dash Smoke[ANIM]
[AUDIO]
[CHROME]
CAPABILITY · 03,第三个 dot 实心[ANTI-SLOP]
[WHY]
这一镜的真正作用不是「秀 capability 03」,是告诉观众这条管道是双向的。
如果整支片 6 个 capability 都是从 md 向外辐射,观众会以为「md 只是出去」。第 3 个 capability 让流动反向,建立「md 是一切的中枢」的世界观。
这是为什么 capability 顺序我选了 02 (md→html) → 03 (html→md) → 04 (md→docx) ——故意把反向 capability 卡在第 3 位,最大化「双向流」的认知 surprise。
[TIMECODE] 14.50 — 17.50s (3.0s) | FUNCTION CAPABILITY 04。出版社品位 docx。建立「md 不只是给程序员的」论点。
[VISUAL]
回到浅底,回到「md 在左、destination 在右」。
destination card 设计:出版社级 docx 章节首页(高密度信息,但完全克制)。
┌─────────────────────────────────┐
│ ON MARKDOWN│ ← page header, right-aligned, Smoke italic mono 9px
│ CHAPTER · 01 │ ← Terracotta mono 11px bold 0.22em
│ │
│ On Markdown │ ← Newsreader 700, 36px, Ink, lh 1.1
│ A short essay on source-of-truth│ ← Newsreader italic 14px, Smoke
│ thinking │
│ │
│ ━━━━━━━━━━━━━━━━━━━━━━━━━━━ │ ← Terracotta full-width rule 3px
│ │
│ ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬ │ ← 10 lines of mica bar paragraphs
│ ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬ │ (varied widths 76-95%)
│ ... │
│ │
│ — 1 — │ ← page number, centered, mono 10px Smoke
└─────────────────────────────────┘
480×580px, white card, Mica border, 24° corner fold
特别细节:
[TYPE]
[ANIM]
[AUDIO]
[CHROME]
CAPABILITY · 04, 第四个 dot 实心[ANTI-SLOP]
[WHY]
CAPABILITY 04 是承上启下的关键一镜:
观众看完这一镜,对「md → 印刷品」这条链条 ready。接下来两镜的 NEW 标签就有了承接。
[TIMECODE] 17.50 — 20.50s (3.0s) | FUNCTION CAPABILITY 05。NEW。md → 出版级 PDF。第一次「升级」标志亮起。
[VISUAL]
cross-dissolve 进入。这一镜的视觉强度显著高于 SHOT 05-07——因为这是「新东西」,需要被记住。
视觉差异点:
两张 PDF 内容:
PDF A(A4, 后面):
┌──────────────────────────┐
│ ┌ ┐ │ ← crop marks
│ A4 · 210×297mm │ ← Mono Bold 10px Terracotta
│ ─── (Terracotta rule) │
│ On Markdown │ ← Newsreader 22px
│ ────────────────── │
│ ▬▬▬▬▬▬▬▬▬▬▬ │ ← 7 lines mica bars
│ ▬▬▬▬▬▬▬▬▬▬▬▬ │
│ ... │
│ │
│ └ ┘ │ ← crop marks
└──────────────────────────┘
360×460px, white card, +5° rotation
PDF B(大32开,前面):
┌────────────────────┐
│ ┌ ┐ │ ← crop marks
│ 大32开 · 176×240mm│ ← Mono Bold 10px Terracotta
│ ─── │
│ On Markdown │ ← Newsreader 19px
│ ────────── │
│ ▬▬▬▬▬▬▬▬▬▬ │ ← 6 lines mica bars
│ ... │
│ └ ┘ │
└────────────────────┘
290×410px, white card, -3° rotation
[TYPE]
[ANIM]
[AUDIO]
[CHROME]
CAPABILITY · 05, 第五个 dot 实心[ANTI-SLOP]
[WHY]
这是 ACT II 高潮镜之一。两件事必须同时发生:
NEW 标签 + crop marks + 两张 PDF fan + 完整的 A4 / 大32开规格说明——四件事一起做到上面两件。
下一镜的 epub 是双 NEW 镜头里的第二个,节奏感、情绪强度要比这一镜再上一档。
[TIMECODE] 20.50 — 22.50s (2.0s) | FUNCTION CAPABILITY 06。NEW。md → 标准 EPUB3。第二个新功能。最后一个 capability。
[VISUAL]
cross-dissolve 进入。这一镜的镜头时长比前面短(只 2.0s 而不是 3.0s)——因为我们已经建立了「NEW + destination」的模式,第二次出现观众秒懂,节奏可以加速。
destination card 设计:Apple Books 风的 EPUB reader frame(强调「这本书已经在阅读器里了」的现实感)。
╔════════════════════════════════════╗
║ ● ● ● ║ ← window chrome (Apple Books)
╠════════════════════════════════════╣
║ ║
║ HUASHU · ORANGE BOOK ║ ← Mono Bold 10px Terracotta 0.22em
║ ║
║ ║
║ On ║ ← Newsreader 700, 30px, Ivory paper
║ Markdown ║ (on Charred bg)
║ ║
║ ─── ║ ← Terracotta rule 40×2px
║ ║
║ an essay · 花叔 ║ ← italic 14px Smoke on Charred
║ ║
╠════════════════════════════════════╣
║ Apple Books · 1 of 24 EPUB 3 ║ ← Mono 10px Smoke 0.14em
╚════════════════════════════════════╝
460×470px, ivory paper outer + Charred inner book cover area
2px Ink border, 22px border-radius (modern app frame)
关键视觉差异:
[TYPE]
[ANIM]
[AUDIO]
[CHROME]
CAPABILITY · 06, 第六个 dot 实心(全部实心 — 6/6)[ANTI-SLOP]
[WHY]
这一镜是 ACT II 的收尾。两件事必须完成:
镜头长度从 3.0 → 2.0s 是刻意的——节奏在加速,观众感知到「我们要到顶峰了」。
[TIMECODE] 22.50 — 24.00s (1.5s) | FUNCTION ACT II → ACT III 的过渡。所有元素归位。准备 slogan。
[VISUAL]
22.50s:所有之前的 destination card 已退场。Chrome A/C 开始 fade out(capability counter 已 6/6 完成,使命达成)。
画面中央,md 字符从左侧位置(x=480)滑回正中(x=960),同时尺寸从 220px → 300px。
md 周围的 6 个 capability label(any→md / md→html / html→md / md→docx / md→pdf / md→epub)从远处(圆周 r=380px)逐个浮现,环绕 md 字符成圆形,每 60° 一个,按顺时针顺序排列(顶部从「any→md」开始)。这些 label 是 Mono Bold 14px Smoke(非 active)+ Terracotta(actually new)的 mix。
整体效果:md 字符是太阳,6 个 capability 是行星。
但这一镜不需要让观众停留太久——这是过渡镜。
23.50-24.00s:6 个 capability label 缓慢 fade out(200ms 每个,inverse cascade),md 字符继续保持在中央,缩小到 180px,准备让位给 slogan。
[TYPE]
[ANIM]
[AUDIO]
[CHROME]
[ANTI-SLOP]
[WHY]
这是一座桥。
ACT II 结束在 22.50s(NEW (06) 刚做完),但 slogan 还需要在 24.00s 才入场——中间这 1.5s 不能是「空白等待」,必须有 narrative motion。
「convergence」的概念:6 条管道做完后,所有 capability 收拢回 md 这个源头。这正是这支片整个故事的 essence——所有的流,最终都回到源。
下一镜,让位给 slogan。md 字符缩小到 180px,准备成为 slogan 的「品牌印章」。
[TIMECODE] 24.00 — 26.50s (2.5s) | FUNCTION ACT III peak first half。slogan 上行入场。情绪 climax。
[VISUAL]
md 字符已缩小到 180px,停留在画面中央(y=540)。
24.00s:md 字符继续向画面 top-left 滑动到 (x=128, y=88),缩小到 56px——成为「品牌印章」固定在左上角。这是品牌的归位。
24.20s:画面中央偏上(y=460)开始浮现 hero slogan top line:
ONE SOURCE.
字体:Newsreader 700, 168px, letter-spacing -0.03em, line-height 0.95, Ink #1A1A1A 位置:水平居中(x=960),y=460(character baseline)
入场方式:staggered letter reveal——10 个字符(O-N-E-space-S-O-U-R-C-E-.)按 30ms stagger 依次入场,每个字符 fade + 12px y slide-down + scale 0.92 → 1.0(260ms expoOut each)。
26.00s:在 slogan 下方 30px 出现一条短 Terracotta rule(320×3px),从中央向两端展开(300ms expoOut)。
26.50s:进入下一镜。
[TYPE]
[ANIM]
[AUDIO]
[CHROME]
新增 chrome:
[ANTI-SLOP]
[WHY]
这是 emotional climax 的第一半。
「ONE SOURCE.」是这部片的 thesis。如果观众看完整支片只记住一句话,就是这一句。
让 md 字符在此刻退到 top-left 是策略性的——slogan 是主角,md 是品牌印章。两者不抢戏。
下一镜,SIX FORMS. 落下,thesis 完整。
[TIMECODE] 26.50 — 29.00s (2.5s) | FUNCTION ACT III peak second half。slogan 下行 + capability map 完整呈现。整支片的 emotional resolution。
[VISUAL]
26.50s:ONE SOURCE. 仍在画面上方位置(y=460)。
画面下半部分(y=720)开始入场 hero slogan bottom line:
SIX FORMS.
字体:Newsreader 700, 168px, letter-spacing -0.03em, line-height 0.95, Terracotta #C2410C 位置:水平居中(x=960),y=720(character baseline)
入场方式:与 SHOT 11 镜像——staggered letter reveal,9 个字符 + 1 个 .(共 10),每个 30ms stagger(更慢的 stagger 因为这是 climax)。
入场细节:每个字符是 fade + 12px y slide-up(而不是 SHOT 11 的 slide-down,方向对称)+ scale 0.92 → 1.0(260ms expoOut each)。
27.20s:SIX FORMS. 完成,整个 slogan 双行 typography 完整。
27.20-27.80s:在 SIX FORMS. 下方 30px 处,出现 6 个 capability pills,依次入场:
[any→md] [md→html] [html→md] [md→docx] [md→pdf ★NEW] [md→epub ★NEW]
每个 pill:
每个 pill 间距 14px。整组水平居中(x=960),y=820。
入场:从左到右 staggered,每个 80ms delay,fade-in + 4px y slide-up (300ms expoOut)。
27.80-28.30s:副标行入场(y=890):
md 是源代码,万物是产物。
字体:Noto Serif SC italic 26px, Ink, letter-spacing 0.04em 水平居中。
入场:fade-in + 8px y slide-up (400ms expoOut)。
28.30-29.00s:整体 hold。这是这部片最静态的一帧——所有元素到位,让观众"读完它"。
[TYPE]
[ANIM]
[AUDIO]
[CHROME]
[ANTI-SLOP]
[WHY]
这是 resolution 镜。
如果 SHOT 11 是 thesis(ONE SOURCE.),SHOT 12 就是 antithesis + synthesis(SIX FORMS. 加上完整 capability map)。
观众在这一帧 27.50s 时,应该一边听着弦乐 peak,一边视觉上 fully absorbed by typography——这是这部片最值得的 5 秒。
下一镜是收尾,让弦乐 decay,让 md 印章独自闪耀。
[TIMECODE] 29.00 — 30.00s (1.0s) | FUNCTION 结尾。让所有 slogan 元素退场,留下 md 印章独自闪耀。品牌印记。
[VISUAL]
29.00s:SIX FORMS. + 6 pills + 副标开始 hold-in-place。
29.20-29.60s:ONE SOURCE. + SIX FORMS. + 6 pills + 副标缓慢 fade out(每个 400ms linear,不要 stagger,是同步淡出——形成「画面在沉淀」的感觉)。
29.40s:top-left 的 md 印章字符从 56px 缓慢放大到 88px,同时位置从 (128, 88) 滑向画面中央 (960, 540)——这是 md 的「最后回归」。
29.40-29.80s:md 字符在画面中央 settle,size 88px, color Ink + Terracotta dot。
29.80-30.00s:md 字符下方 30px 出现一条短 Terracotta rule(120×2px,比 SHOT 03 短,更精致),从 0 长成。
30.00s:所有元素到位。最后一帧是:
● HUASHU-MD-HTML · v2.0
(top-right chrome)
md. ← Newsreader 600, 88px, Ink + Terracotta dot
─── ← Terracotta rule, 120×2px
CREATED BY HUASHU-DESIGN
(bottom-right watermark)
整个画面只有 4 个元素:md 印章、accent rule、top-right chrome、bottom-right watermark。所有其他全空。
[TYPE]
[ANIM]
[AUDIO]
[CHROME]
[ANTI-SLOP]
[WHY]
整部片始于一个空白页面,终于一个 md 印章 + 一抹赤陶橙。
这是首尾呼应(visual rhyme):
观众从「空」走到「满」,但「满」其实只是一个 md. 字符——这就是「source-of-truth」的视觉宣言:一切源于一个简单的 md。
如果整部片让观众记住一帧,我希望是这一帧。
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Newsreader:ital,wght@0,300;0,400;0,500;0,600;0,700;1,400;1,500&family=JetBrains+Mono:wght@400;500;700&family=Noto+Serif+SC:wght@400;500;700;900&display=swap" rel="stylesheet">
实测加载时长:约 800-1500ms 取决于 CDN 状态。document.fonts.ready 等待必须等到 returns true 才启动 Stage 计时器(Stage 已实现)。
:root {
--paper: #FAFAF6;
--mist: #F2EDE4;
--mica: #E6E1D6;
--smoke: #6B6B6B;
--cinder: #3D3530;
--ink: #1A1A1A;
--charred: #2A2620;
--terracotta: #C2410C;
--terra-hot: #E55D21;
--terra-deep: #8B2D08;
}
首选:自己用 Suno v6.0 / Udio v1.5 生成 30 秒 cinematic minimal piece,prompt 关键词:
minimal cinematic piano, slow tempo 60bpm, single piano notes,
sparse arpeggio, low cello drone, subtle sub-kick percussion,
swelling strings at climax, decay to silence,
in the style of Max Richter on the nature of daylight,
no vocals, 30 seconds duration, ivory paper mood
备选:搜索免版权库
最低标准:BGM 30 秒长度,44.1kHz 采样率,aim for -16 LUFS integrated loudness。
首选:用 huashu-design skill 的 assets/sfx/<category>/*.mp3 37 个预制资源:
事件 推荐 SFX 文件
─────────────────────────────────────────────────────
keyboard clicks sfx/ui/keyboard-click-*.mp3
cursor blink sfx/ui/tick-soft.mp3
md morph swell sfx/cinematic/whoosh-bloom.mp3
file card whoosh sfx/cinematic/whoosh-short-*.mp3
absorb / ink drop sfx/foley/ink-drop.mp3
paper rustle sfx/foley/paper-turn.mp3
chime capability sfx/melodic/chime-single-*.mp3
chime NEW (double) sfx/melodic/chime-double-warm.mp3
build sweep sfx/cinematic/ascending-sweep.mp3
impact (slogan) sfx/cinematic/deep-impact-*.mp3
pen flourish sfx/foley/pen-stroke.mp3
final stamp sfx/foley/ink-stamp.mp3
实施 HTML 后必须验证以下关键帧(用 Playwright + ?t=NN URL 参数):
t=0.5 ← SHOT 01 mid: blank ivory page (检验 paper texture 不抢戏)
t=2.5 ← SHOT 02 mid: typing in progress (检验 cursor blink + JetBrains Mono)
t=3.8 ← SHOT 03 mid: md morphing (检验 ghost residual + scale curve)
t=5.0 ← SHOT 03 end: hero md settled (检验 480px + Terracotta dot)
t=7.0 ← SHOT 04 mid: cards in flight (检验抛物线 + card 内容真实可读)
t=8.4 ← SHOT 04 tagline (检验「万物 → md」中文 italic)
t=10.5 ← SHOT 05 mid: html card complete (检验 essay 内容可读)
t=13.5 ← SHOT 06 mid: md source visible (检验 syntax highlighting)
t=16.5 ← SHOT 07 mid: docx page complete (检验 chapter title + page number)
t=19.0 ← SHOT 08 mid: PDFs fanned out (检验 crop marks 可见)
t=21.5 ← SHOT 09 mid: EPUB frame complete (检验 Apple Books chrome)
t=23.4 ← SHOT 10 mid: 6 capability orbit (检验完整 capability 全景)
t=25.0 ← SHOT 11 mid: ONE SOURCE. complete (检验字距 + Terracotta period)
t=27.5 ← SHOT 12 mid: SIX FORMS. + pills (检验完整 slogan 双行)
t=28.5 ← SHOT 12 marketing frame (检验整体 marketing-ready 一帧)
t=29.9 ← SHOT 13 final hold (检验 md 印章 + accent rule)
每帧必须满足:
node scripts/render-video.js \
--file file:///path/to/v5-six-forms.html \
--duration 30 \
--fps 25 \
--width 1920 \
--height 1080 \
--out v5-final-silent.mp4
关键 codec 参数:
后续插帧(可选,60fps 流畅版):
bash scripts/convert-formats.sh v5-final-silent.mp4 --fps 60
# Step 1: 加 BGM
bash scripts/add-music.sh v5-final-silent.mp4 \
--bgm assets/bgm/cinematic-minimal-30s.mp3 \
--bgm-volume -18dB \
--out v5-with-bgm.mp4
# Step 2: 加 SFX cues (按 Part II.6 SFX 字典逐 cue 加)
# 用 ffmpeg 的 -filter_complex amix 多路混合
ffmpeg -i v5-with-bgm.mp4 \
-i assets/sfx/ui/keyboard-click-1.mp3 \
-i assets/sfx/ui/keyboard-click-2.mp3 \
... \
-filter_complex "[1]adelay=500|500[s1];[2]adelay=550|550[s2];...;[0][s1][s2]...amix=inputs=N:duration=longest:dropout_transition=0[out]" \
-map 0:v -map "[out]" \
-c:v copy -c:a aac -b:a 192k \
v5-final.mp4
# Step 3: 验证 audio stream
ffprobe -i v5-final.mp4 -show_streams -select_streams a 2>&1 | grep -E "(codec_type|sample_rate|channels|duration)"
期望输出:
v5-final.mp4 主交付(30s, 1920×1080, 25fps, with audio, ~50MB)
v5-final-60fps.mp4 高帧率版(60fps 插帧, ~80MB, 用于 X / YouTube)
v5-final.gif 社交媒体版(30s, palette 优化, < 8MB, 用于公众号嵌入)
v5-final-silent.mp4 静音版(备份,方便后续重新配音/换 BGM)
v5-poster.png 海报版(截 t=28.5s 这一帧, 用于 X 卡片 / 公众号封面)
v5-director-notes.md 本文档(导演笔记)
v5-six-forms.html 源文件(HTML 动画)
v5-shot-list.csv shot 时间码 + 关键参数对照表(pause 验证用)
| 步骤 | 预计耗时 |
|---|---|
| Director's notes 撰写 | 已完成 |
| HTML 动画实施 | 4-6 小时 |
| 关键帧截图 + 视觉校验 | 1 小时 |
| 录制无声 MP4 | 5-10 分钟(含 Playwright 启动) |
| BGM 生成 / 选择 | 30 分钟 |
| SFX 配 cue + 混音 | 2-3 小时 |
| GIF 派生 | 5 分钟 |
| 海报截图 + 命名 | 10 分钟 |
| 最终交付 + git 提交 | 10 分钟 |
| 合计 | 8-11 小时 |
如果我作为导演只能保留这部片的一句话,那就是:
一支关于「源头」的 typographic film,主角是一个
md.字符。
所有其他设计决策——色板、字体、节奏、SFX、chrome、anti-slop checklist——都从这一句话推导而来。
如果某个具体决策无法 trace 回这一句话,就不要做。
Director's notes — end of document Total word count: 约 11500 中文字 Next: 用户 review 通过后,进入 HTML 实施阶段