Files
vibe-motion/index.html
2026-04-25 23:10:25 +08:00

858 lines
36 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Vibe Motion — AI 动效革命深度解析</title>
<style>
/* ===== Reset & Base ===== */
*, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }
:root {
--bg: #08090d;
--bg2: #0d0f15;
--surface: rgba(255,255,255,0.04);
--surface2: rgba(255,255,255,0.07);
--border: rgba(255,255,255,0.08);
--text: #e8e8ec;
--text2: rgba(255,255,255,0.55);
--accent: #00ff8c;
--accent2: #00ccff;
--purple: #a855f7;
--pink: #ff44aa;
--orange: #ff9500;
--glow: 0 0 60px rgba(0,255,140,0.15);
}
html { scroll-behavior: smooth; }
body {
font-family: -apple-system, 'SF Pro Display', 'Inter', system-ui, sans-serif;
background: var(--bg);
color: var(--text);
line-height: 1.7;
overflow-x: hidden;
}
a { color: var(--accent); text-decoration: none; transition: opacity .2s; }
a:hover { opacity: .8; }
/* ===== Ambient Background ===== */
.ambient {
position: fixed; inset: 0; z-index: 0; pointer-events: none;
background:
radial-gradient(ellipse 800px 600px at 20% 30%, rgba(0,255,140,0.04) 0%, transparent 70%),
radial-gradient(ellipse 600px 500px at 80% 60%, rgba(0,200,255,0.03) 0%, transparent 70%),
radial-gradient(ellipse 500px 400px at 50% 80%, rgba(168,85,247,0.03) 0%, transparent 70%);
}
.grid-bg {
position: fixed; inset: 0; z-index: 0; pointer-events: none;
background-image:
linear-gradient(rgba(255,255,255,0.02) 1px, transparent 1px),
linear-gradient(90deg, rgba(255,255,255,0.02) 1px, transparent 1px);
background-size: 60px 60px;
mask-image: radial-gradient(ellipse 80% 60% at 50% 40%, black, transparent);
}
/* ===== Layout ===== */
.container { max-width: 1200px; margin: 0 auto; padding: 0 24px; position: relative; z-index: 1; }
section { padding: 100px 0; }
/* ===== Hero ===== */
.hero {
min-height: 100vh; display: flex; flex-direction: column;
align-items: center; justify-content: center; text-align: center;
position: relative;
}
.hero-badge {
display: inline-flex; align-items: center; gap: 8px;
padding: 6px 16px; border-radius: 100px;
background: rgba(0,255,140,0.08); border: 1px solid rgba(0,255,140,0.2);
font-size: 13px; color: var(--accent); letter-spacing: 2px;
text-transform: uppercase; margin-bottom: 32px;
animation: fadeInUp .8s ease both;
}
.hero-badge::before { content: ''; width: 6px; height: 6px; border-radius: 50%; background: var(--accent); animation: pulse 2s infinite; }
.hero h1 {
font-size: clamp(48px, 8vw, 96px); font-weight: 800;
letter-spacing: -3px; line-height: 1.05;
background: linear-gradient(135deg, #fff 0%, var(--accent) 50%, var(--accent2) 100%);
-webkit-background-clip: text; -webkit-text-fill-color: transparent;
animation: fadeInUp .8s .1s ease both;
}
.hero p {
font-size: clamp(16px, 2vw, 22px); color: var(--text2);
max-width: 680px; margin: 24px auto 0;
animation: fadeInUp .8s .2s ease both;
}
.hero-cta {
display: flex; gap: 16px; margin-top: 48px;
animation: fadeInUp .8s .3s ease both;
}
.btn {
padding: 14px 32px; border-radius: 12px; font-size: 15px; font-weight: 600;
cursor: pointer; border: none; transition: all .3s;
}
.btn-primary {
background: var(--accent); color: #000;
box-shadow: 0 0 30px rgba(0,255,140,0.3);
}
.btn-primary:hover { box-shadow: 0 0 50px rgba(0,255,140,0.5); transform: translateY(-2px); }
.btn-ghost {
background: var(--surface2); color: var(--text);
border: 1px solid var(--border);
}
.btn-ghost:hover { background: rgba(255,255,255,0.1); transform: translateY(-2px); }
.scroll-hint {
position: absolute; bottom: 40px;
display: flex; flex-direction: column; align-items: center; gap: 8px;
color: var(--text2); font-size: 12px; letter-spacing: 2px;
animation: bounce 2s infinite;
}
.scroll-hint svg { width: 20px; height: 20px; stroke: var(--text2); }
/* ===== Section Headers ===== */
.section-tag {
display: inline-flex; align-items: center; gap: 8px;
font-size: 12px; letter-spacing: 3px; text-transform: uppercase;
color: var(--accent); margin-bottom: 16px;
}
.section-tag::before { content: ''; width: 24px; height: 1px; background: var(--accent); }
.section-title {
font-size: clamp(32px, 4vw, 52px); font-weight: 800;
letter-spacing: -1.5px; margin-bottom: 16px;
}
.section-desc { color: var(--text2); font-size: 17px; max-width: 640px; margin-bottom: 48px; }
/* ===== Paradigm Shift Section ===== */
.paradigm-grid {
display: grid; grid-template-columns: 1fr 80px 1fr; gap: 24px; align-items: stretch;
}
.paradigm-card {
background: var(--surface); border: 1px solid var(--border);
border-radius: 20px; padding: 36px; position: relative; overflow: hidden;
}
.paradigm-card::before {
content: ''; position: absolute; inset: 0; opacity: 0;
transition: opacity .4s;
}
.paradigm-card:hover::before { opacity: 1; }
.paradigm-card.old::before { background: radial-gradient(circle at 50% 0, rgba(255,68,68,0.06), transparent 60%); }
.paradigm-card.new::before { background: radial-gradient(circle at 50% 0, rgba(0,255,140,0.08), transparent 60%); }
.paradigm-card h3 { font-size: 22px; margin-bottom: 20px; display: flex; align-items: center; gap: 12px; }
.paradigm-card ul { list-style: none; }
.paradigm-card li {
padding: 10px 0; border-bottom: 1px solid var(--border);
font-size: 14px; color: var(--text2); display: flex; align-items: center; gap: 10px;
}
.paradigm-card li:last-child { border-bottom: none; }
.paradigm-card.old li::before { content: '✕'; color: #ff4444; font-size: 12px; font-weight: 700; }
.paradigm-card.new li::before { content: '✓'; color: var(--accent); font-size: 14px; font-weight: 700; }
.vs-divider {
display: flex; align-items: center; justify-content: center;
font-size: 18px; font-weight: 900; color: var(--text2);
background: var(--surface); border-radius: 50%;
width: 56px; height: 56px; margin: auto;
border: 1px solid var(--border);
}
/* ===== How It Works ===== */
.flow-steps {
display: grid; grid-template-columns: repeat(4, 1fr); gap: 2px;
}
.flow-step {
background: var(--surface); padding: 32px 24px; position: relative;
border: 1px solid var(--border); overflow: hidden;
transition: all .3s;
}
.flow-step:first-child { border-radius: 16px 0 0 16px; }
.flow-step:last-child { border-radius: 0 16px 16px 0; }
.flow-step:hover { background: var(--surface2); transform: translateY(-4px); border-color: rgba(0,255,140,0.2); }
.flow-step .step-num {
font-size: 48px; font-weight: 900;
background: linear-gradient(135deg, var(--accent), var(--accent2));
-webkit-background-clip: text; -webkit-text-fill-color: transparent;
opacity: .3; position: absolute; top: 16px; right: 16px;
}
.flow-step h4 { font-size: 16px; margin-bottom: 8px; }
.flow-step p { font-size: 13px; color: var(--text2); line-height: 1.6; }
.flow-arrow { color: var(--accent); font-size: 20px; margin: 0 -8px; z-index: 1; align-self: center; }
/* ===== Ecosystem ===== */
.eco-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; }
.eco-card {
background: var(--surface); border: 1px solid var(--border);
border-radius: 16px; padding: 28px; transition: all .4s;
position: relative; overflow: hidden;
}
.eco-card:hover {
transform: translateY(-6px);
border-color: rgba(0,255,140,0.25);
box-shadow: var(--glow);
}
.eco-card .eco-icon {
width: 48px; height: 48px; border-radius: 12px;
display: flex; align-items: center; justify-content: center;
font-size: 22px; margin-bottom: 16px;
}
.eco-card h3 { font-size: 18px; margin-bottom: 4px; }
.eco-card .eco-tag {
font-size: 11px; color: var(--accent); letter-spacing: 1px;
text-transform: uppercase; margin-bottom: 12px; display: block;
}
.eco-card p { font-size: 13px; color: var(--text2); line-height: 1.6; margin-bottom: 16px; }
.eco-card .eco-meta {
display: flex; gap: 16px; font-size: 12px; color: var(--text2);
border-top: 1px solid var(--border); padding-top: 12px;
}
.eco-card .eco-meta span { display: flex; align-items: center; gap: 4px; }
.eco-card .eco-meta .stars { color: var(--orange); }
/* ===== Comparison Table ===== */
.compare-table {
width: 100%; border-collapse: separate; border-spacing: 0;
background: var(--surface); border-radius: 16px; overflow: hidden;
border: 1px solid var(--border);
}
.compare-table th, .compare-table td {
padding: 16px 20px; text-align: left; border-bottom: 1px solid var(--border);
}
.compare-table th {
font-size: 12px; text-transform: uppercase; letter-spacing: 2px;
color: var(--text2); background: rgba(255,255,255,0.02);
}
.compare-table td { font-size: 14px; color: var(--text2); }
.compare-table tr:last-child td { border-bottom: none; }
.compare-table td:first-child { color: var(--text); font-weight: 600; }
.compare-table .check { color: var(--accent); }
.compare-table .cross { color: rgba(255,255,255,0.2); }
.highlight-row { background: rgba(0,255,140,0.03); }
/* ===== Use Cases ===== */
.use-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 20px; }
.use-card {
background: var(--surface); border: 1px solid var(--border);
border-radius: 16px; padding: 28px; transition: all .3s;
display: flex; gap: 20px;
}
.use-card:hover { border-color: rgba(0,255,140,0.2); transform: translateY(-3px); }
.use-icon {
width: 52px; height: 52px; border-radius: 14px; flex-shrink: 0;
display: flex; align-items: center; justify-content: center;
font-size: 24px;
}
.use-card h4 { font-size: 16px; margin-bottom: 6px; }
.use-card p { font-size: 13px; color: var(--text2); }
/* ===== Timeline ===== */
.timeline { position: relative; padding-left: 40px; }
.timeline::before {
content: ''; position: absolute; left: 14px; top: 0; bottom: 0;
width: 2px; background: linear-gradient(to bottom, var(--accent), var(--purple), transparent);
}
.timeline-item {
position: relative; margin-bottom: 36px; padding: 20px 24px;
background: var(--surface); border: 1px solid var(--border);
border-radius: 14px;
}
.timeline-item::before {
content: ''; position: absolute; left: -33px; top: 24px;
width: 10px; height: 10px; border-radius: 50%;
background: var(--accent); box-shadow: 0 0 12px rgba(0,255,140,0.5);
}
.timeline-item .date {
font-size: 12px; color: var(--accent); letter-spacing: 1px;
text-transform: uppercase; margin-bottom: 4px;
}
.timeline-item h4 { font-size: 16px; margin-bottom: 6px; }
.timeline-item p { font-size: 13px; color: var(--text2); }
/* ===== Code Demo ===== */
.code-block {
background: #0a0c12; border: 1px solid var(--border);
border-radius: 14px; overflow: hidden; margin: 32px 0;
}
.code-header {
display: flex; align-items: center; gap: 8px; padding: 14px 20px;
background: rgba(255,255,255,0.02); border-bottom: 1px solid var(--border);
}
.code-dot { width: 12px; height: 12px; border-radius: 50%; }
.code-dot.r { background: #ff5f57; }
.code-dot.y { background: #febc2e; }
.code-dot.g { background: #28c840; }
.code-filename { margin-left: 12px; font-size: 13px; color: var(--text2); font-family: 'SF Mono', monospace; }
.code-content {
padding: 20px 24px; font-family: 'SF Mono', 'Fira Code', monospace;
font-size: 13px; line-height: 1.8; overflow-x: auto;
color: #abb2bf;
}
.code-content .kw { color: #c678dd; }
.code-content .fn { color: #61afef; }
.code-content .str { color: #98c379; }
.code-content .num { color: #d19a66; }
.code-content .cm { color: #5c6370; font-style: italic; }
.code-content .tag { color: #e06c75; }
.code-content .attr { color: #d19a66; }
/* ===== Quick Start ===== */
.quickstart-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; }
.qs-card {
background: var(--surface); border: 1px solid var(--border);
border-radius: 16px; padding: 28px; text-align: center;
transition: all .3s;
}
.qs-card:hover { border-color: rgba(0,255,140,0.25); transform: translateY(-4px); }
.qs-card .qs-num {
width: 40px; height: 40px; border-radius: 50%;
background: rgba(0,255,140,0.1); border: 1px solid rgba(0,255,140,0.2);
display: flex; align-items: center; justify-content: center;
font-size: 16px; font-weight: 800; color: var(--accent);
margin: 0 auto 16px;
}
.qs-card h4 { font-size: 16px; margin-bottom: 8px; }
.qs-card code {
display: inline-block; padding: 8px 16px; border-radius: 8px;
background: rgba(0,0,0,0.4); border: 1px solid var(--border);
font-family: 'SF Mono', monospace; font-size: 13px; color: var(--accent);
margin-top: 12px;
}
/* ===== Footer ===== */
footer {
border-top: 1px solid var(--border); padding: 48px 0;
text-align: center; color: var(--text2); font-size: 13px;
}
footer .footer-links { display: flex; justify-content: center; gap: 32px; margin-bottom: 24px; }
/* ===== Animations ===== */
@keyframes fadeInUp {
from { opacity: 0; transform: translateY(30px); }
to { opacity: 1; transform: translateY(0); }
}
@keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: .4; } }
@keyframes bounce {
0%, 100% { transform: translateY(0); }
50% { transform: translateY(8px); }
}
/* IntersectionObserver reveal */
.reveal { opacity: 0; transform: translateY(40px); transition: all .7s cubic-bezier(.22,1,.36,1); }
.reveal.visible { opacity: 1; transform: translateY(0); }
/* ===== Responsive ===== */
@media (max-width: 768px) {
.paradigm-grid { grid-template-columns: 1fr; }
.vs-divider { margin: -8px auto; }
.flow-steps { grid-template-columns: 1fr; }
.flow-step { border-radius: 12px !important; }
.eco-grid, .quickstart-grid { grid-template-columns: 1fr; }
.use-grid { grid-template-columns: 1fr; }
.compare-table { font-size: 12px; }
.compare-table th, .compare-table td { padding: 10px 12px; }
section { padding: 60px 0; }
}
/* ===== Floating Lizard ===== */
.float-lizard {
position: fixed; bottom: 24px; right: 24px; z-index: 100;
width: 60px; height: 60px; border-radius: 50%;
background: rgba(0,255,140,0.1); border: 1px solid rgba(0,255,140,0.3);
display: flex; align-items: center; justify-content: center;
font-size: 28px; cursor: pointer; transition: all .3s;
backdrop-filter: blur(12px);
}
.float-lizard:hover {
transform: scale(1.1); box-shadow: 0 0 30px rgba(0,255,140,0.3);
}
</style>
</head>
<body>
<div class="ambient"></div>
<div class="grid-bg"></div>
<!-- ===== HERO ===== -->
<section class="hero">
<div class="hero-badge">2026 新范式</div>
<h1>Vibe Motion</h1>
<p>不再逐帧调关键帧,不再等 AI 生成模糊像素。用自然语言描述动画意图AI 生成确定性代码,渲染出 4K/60fps 专业级动效视频。</p>
<div class="hero-cta">
<a href="#ecosystem" class="btn btn-primary">开源生态 ↓</a>
<a href="#quickstart" class="btn btn-ghost">快速开始</a>
</div>
<div class="scroll-hint">
<svg viewBox="0 0 24 24" fill="none" stroke-width="2"><path d="M12 5v14M19 12l-7 7-7-7"/></svg>
SCROLL
</div>
</section>
<!-- ===== PARADIGM SHIFT ===== -->
<section id="paradigm">
<div class="container">
<div class="section-tag">范式转移</div>
<h2 class="section-title reveal">从像素预测到代码生成</h2>
<p class="section-desc reveal">传统 AI 视频逐帧预测像素,文字会糊、元素会飘、不可编辑。<br>Vibe Motion 让 AI 生成 Remotion 代码——数学定义运动,确定性渲染,每一帧都精确。</p>
<div class="paradigm-grid reveal">
<!-- Old Way -->
<div class="paradigm-card old">
<h3><span style="font-size:28px">🎬</span> 传统方式</h3>
<ul>
<li>After Effects 手动调关键帧,学习曲线陡峭</li>
<li>AI 视频生成器Sora/Kling预测像素文字变形</li>
<li>输出不可编辑,修改需重新生成</li>
<li>分辨率受限,放大即模糊</li>
<li>数万元 + 数周制作周期</li>
<li>品牌一致性难以保证</li>
</ul>
</div>
<div class="vs-divider">VS</div>
<!-- New Way -->
<div class="paradigm-card new">
<h3><span style="font-size:28px"></span> Vibe Motion</h3>
<ul>
<li>自然语言描述 → AI 生成 React 动画代码</li>
<li>确定性渲染,文字永远清晰锐利</li>
<li>代码可编辑,迭代只需追加对话</li>
<li>原生支持 4K UHD / 60fps</li>
<li>10 分钟完成,成本趋近于零</li>
<li>代码即品牌规范100% 一致</li>
</ul>
</div>
</div>
</div>
</section>
<!-- ===== HOW IT WORKS ===== -->
<section id="howitworks" style="background: var(--bg2);">
<div class="container">
<div class="section-tag">工作原理</div>
<h2 class="section-title reveal">四步生成专业动效</h2>
<p class="section-desc reveal">从自然语言到 MP4 视频,中间是可审查、可编辑、可版本控制的代码。</p>
<div class="flow-steps reveal">
<div class="flow-step">
<div class="step-num">01</div>
<h4>描述意图</h4>
<p>用自然语言描述你想要的动画效果。"一只绿色蜥蜴从左侧滑入,尾巴摆动,舌头弹射捕捉萤火虫"</p>
</div>
<div class="flow-step">
<div class="step-num">02</div>
<h4>AI 生成代码</h4>
<p>Claude / GPT 将创意意图翻译为 Remotion React 组件代码,包含 spring 动画、插值、序列编排</p>
</div>
<div class="flow-step">
<div class="step-num">03</div>
<h4>实时预览</h4>
<p>Remotion Studio 在浏览器中实时预览,可拖拽时间轴、逐帧检查、热更新代码修改</p>
</div>
<div class="flow-step">
<div class="step-num">04</div>
<h4>渲染输出</h4>
<p>一行命令渲染为 MP4/GIF/WebM支持 4K 分辨率、60fps、透明通道可批量生成万级变体</p>
</div>
</div>
</div>
</section>
<!-- ===== CODE DEMO ===== -->
<section id="code">
<div class="container">
<div class="section-tag">代码即动画</div>
<h2 class="section-title reveal">一段对话,一个动画</h2>
<p class="section-desc reveal">你说"蜥蜴摆尾"AI 生成这样的代码——数学精确、完全可控。</p>
<div class="code-block reveal">
<div class="code-header">
<span class="code-dot r"></span>
<span class="code-dot y"></span>
<span class="code-dot g"></span>
<span class="code-filename">LizardScene.tsx</span>
</div>
<div class="code-content">
<span class="cm">// 弹簧物理入场</span>
<span class="kw">const</span> scaleSpring = <span class="fn">spring</span>({
fps, frame: localFrame,
config: { damping: <span class="num">12</span>, stiffness: <span class="num">80</span> }
});
<span class="cm">// 尾巴正弦摆动</span>
<span class="kw">const</span> tailWag = Math.<span class="fn">sin</span>(localFrame * <span class="num">0.15</span>) * <span class="num">8</span>;
<span class="cm">// 舌头弹射 — 每80帧触发一次</span>
<span class="kw">const</span> tonguePhase = (localFrame % <span class="num">80</span>) / <span class="num">80</span>;
<span class="kw">const</span> tongueOut = tonguePhase > <span class="num">0.3</span> && tonguePhase < <span class="num">0.5</span>
? <span class="fn">interpolate</span>(tonguePhase, [<span class="num">0.3</span>, <span class="num">0.4</span>, <span class="num">0.5</span>], [<span class="num">0</span>, <span class="num">1</span>, <span class="num">0</span>])
: <span class="num">0</span>;
<span class="cm">// SVG 路径 + 渐变 + 发光</span>
&lt;<span class="tag">path</span> <span class="attr">d</span>=<span class="str">{LIZARD_TAIL}</span>
<span class="attr">transform</span>=<span class="str">{`rotate(${tailWag}, 200, 33)`}</span>
<span class="attr">filter</span>=<span class="str">{`drop-shadow(0 0 ${glow}px ${color})`}</span> /&gt;
</div>
</div>
</div>
</section>
<!-- ===== ECOSYSTEM ===== -->
<section id="ecosystem" style="background: var(--bg2);">
<div class="container">
<div class="section-tag">开源生态</div>
<h2 class="section-title reveal">六大核心项目</h2>
<p class="section-desc reveal">Vibe Motion 不是一个工具,而是一个由开源项目构成的创作范式。以下是你需要关注的核心项目。</p>
<div class="eco-grid">
<!-- Remotion -->
<div class="eco-card reveal">
<div class="eco-icon" style="background: rgba(0,255,140,0.1); color: var(--accent);">🎥</div>
<h3>Remotion</h3>
<span class="eco-tag">核心引擎 · Vibe Motion 底层</span>
<p>用 React 编程式生成视频。支持 CSS/Canvas/SVG/WebGL确定性逐帧渲染可本地或云端批量生成。Higgsfield Vibe Motion 就是基于它。</p>
<div class="eco-meta">
<span class="stars">★ 25,000+</span>
<span>TypeScript</span>
<span><a href="https://github.com/remotion-dev/remotion">GitHub ↗</a></span>
</div>
</div>
<!-- Motion -->
<div class="eco-card reveal">
<div class="eco-icon" style="background: rgba(168,85,247,0.1); color: var(--purple);"></div>
<h3>Motion (Framer Motion)</h3>
<span class="eco-tag">网页动画之王</span>
<p>npm 月下载 3000万+,最主流的 React 动画库。已官方支持 AI Vibe Coding 工作流Motion Studio 插件可在 VS Code 中实时编辑动画。</p>
<div class="eco-meta">
<span class="stars">★ 26,000+</span>
<span>TypeScript</span>
<span><a href="https://github.com/motiondivision/motion">GitHub ↗</a></span>
</div>
</div>
<!-- Motion Canvas -->
<div class="eco-card reveal">
<div class="eco-icon" style="background: rgba(0,200,255,0.1); color: var(--accent2);">🎨</div>
<h3>Motion Canvas</h3>
<span class="eco-tag">TypeScript 版 Manim</span>
<p>用 TypeScript 创建教育动画和解释视频,类似 3Blue1Brown 的 Manim 但基于 Web 技术栈。内置可视化编辑器和时间轴。</p>
<div class="eco-meta">
<span class="stars">★ 16,000+</span>
<span>TypeScript</span>
<span><a href="https://github.com/motion-canvas/motion-canvas">GitHub ↗</a></span>
</div>
</div>
<!-- Open-Sora -->
<div class="eco-card reveal">
<div class="eco-icon" style="background: rgba(255,149,0,0.1); color: var(--orange);">🎞️</div>
<h3>Open-Sora</h3>
<span class="eco-tag">像素级 AI 视频生成</span>
<p>开源复现 OpenAI Sora11B 参数,支持 text/image/video-to-video。与 Vibe Motion 代码生成互补——适合真实场景视频,不适合精确图形动画。</p>
<div class="eco-meta">
<span class="stars">★ 25,000+</span>
<span>Python</span>
<span><a href="https://github.com/hpcaitech/Open-Sora">GitHub ↗</a></span>
</div>
</div>
<!-- Manim -->
<div class="eco-card reveal">
<div class="eco-icon" style="background: rgba(255,68,170,0.1); color: var(--pink);"></div>
<h3>Manim</h3>
<span class="eco-tag">数学动画传奇</span>
<p>3Blue1Brown 创造的数学动画引擎Python 编写。适合数学公式推导、数据可视化、教育内容。社区版 MIT 协议。</p>
<div class="eco-meta">
<span class="stars">★ 70,000+</span>
<span>Python</span>
<span><a href="https://github.com/3b1b/manim">GitHub ↗</a></span>
</div>
</div>
<!-- Rive -->
<div class="eco-card reveal">
<div class="eco-icon" style="background: rgba(255,255,255,0.06); color: #fff;"></div>
<h3>Rive</h3>
<span class="eco-tag">交互式状态机动画</span>
<p>可视化编辑器 + 状态机驱动,适合做 App 内交互动画(按钮微动效、加载动画、游戏 UI。运行时开源编辑器免费使用。</p>
<div class="eco-meta">
<span>跨平台</span>
<span><a href="https://rive.app">rive.app ↗</a></span>
</div>
</div>
</div>
</div>
</section>
<!-- ===== COMPARISON ===== -->
<section id="compare">
<div class="container">
<div class="section-tag">对比分析</div>
<h2 class="section-title reveal">选择适合你的工具</h2>
<p class="section-desc reveal">不同场景用不同工具,以下是核心维度对比。</p>
<div class="reveal" style="overflow-x: auto;">
<table class="compare-table">
<thead>
<tr>
<th>维度</th>
<th>Remotion</th>
<th>Motion Canvas</th>
<th>Motion (Framer)</th>
<th>Open-Sora</th>
<th>After Effects</th>
</tr>
</thead>
<tbody>
<tr class="highlight-row">
<td>AI Vibe Coding</td>
<td><span class="check">★★★</span></td>
<td><span class="check">★★☆</span></td>
<td><span class="check">★★★</span></td>
<td><span class="check">★☆☆</span></td>
<td><span class="cross"></span></td>
</tr>
<tr>
<td>输出格式</td>
<td>MP4/GIF/WebM</td>
<td>MP4</td>
<td>网页动画</td>
<td>MP4</td>
<td>全格式</td>
</tr>
<tr>
<td>分辨率</td>
<td>无限制 (4K+)</td>
<td>无限制</td>
<td>N/A (实时)</td>
<td>720p</td>
<td>无限制</td>
</tr>
<tr class="highlight-row">
<td>文字精度</td>
<td><span class="check">像素级精确</span></td>
<td><span class="check">像素级精确</span></td>
<td><span class="check">像素级精确</span></td>
<td><span class="cross">模糊/变形</span></td>
<td><span class="check">精确</span></td>
</tr>
<tr>
<td>学习曲线</td>
<td>React 基础</td>
<td>TypeScript</td>
<td>React 基础</td>
<td>Python/GPU</td>
<td>数月~年</td>
</tr>
<tr>
<td>批量生成</td>
<td><span class="check">✓ 参数化</span></td>
<td><span class="check"></span></td>
<td><span class="cross"></span></td>
<td><span class="check"></span></td>
<td><span class="cross">手动</span></td>
</tr>
<tr class="highlight-row">
<td>GPU 需求</td>
<td>不需要</td>
<td>不需要</td>
<td>不需要</td>
<td>A100 级</td>
<td>推荐有</td>
</tr>
<tr>
<td>开源协议</td>
<td>个人免费</td>
<td>MIT</td>
<td>MIT</td>
<td>Apache 2.0</td>
<td>商业</td>
</tr>
</tbody>
</table>
</div>
</div>
</section>
<!-- ===== USE CASES ===== -->
<section id="usecases" style="background: var(--bg2);">
<div class="container">
<div class="section-tag">应用场景</div>
<h2 class="section-title reveal">从营销视频到教育内容</h2>
<p class="section-desc reveal">Vibe Motion 的代码生成模式在以下场景尤其强大:</p>
<div class="use-grid">
<div class="use-card reveal">
<div class="use-icon" style="background: rgba(0,255,140,0.1);">📱</div>
<div>
<h4>社交媒体营销</h4>
<p>10 分钟生成品牌一致的动效视频,支持批量生成万级个性化变体。传统制作需数万元 + 数周。</p>
</div>
</div>
<div class="use-card reveal">
<div class="use-icon" style="background: rgba(168,85,247,0.1);">🎓</div>
<div>
<h4>教育解释视频</h4>
<p>类似 3Blue1Brown 的数学动画,用 Remotion/Manim + AI 快速生成算法可视化、物理模拟、概念讲解。</p>
</div>
</div>
<div class="use-card reveal">
<div class="use-icon" style="background: rgba(0,200,255,0.1);">📊</div>
<div>
<h4>数据可视化</h4>
<p>将报表数据转化为动态图表视频,支持 API 驱动自动更新。年报、季度汇报、实时仪表盘录制。</p>
</div>
</div>
<div class="use-card reveal">
<div class="use-icon" style="background: rgba(255,149,0,0.1);">🚀</div>
<div>
<h4>产品发布视频</h4>
<p>Replit 等公司已用 Vibe Motion 制作产品 launch 视频。终端打字动画、代码高亮、截图飞入——10 分钟搞定。</p>
</div>
</div>
<div class="use-card reveal">
<div class="use-icon" style="background: rgba(255,68,170,0.1);">🎮</div>
<div>
<h4>游戏 UI & App 微动效</h4>
<p>Rive 状态机 + Motion 弹簧动画,做按钮反馈、加载指示器、成就解锁动画。运行时开源跨平台。</p>
</div>
</div>
<div class="use-card reveal">
<div class="use-icon" style="background: rgba(255,255,255,0.06);">🔄</div>
<div>
<h4>CI/CD 自动化视频</h4>
<p>代码即视频——纳入 Git 版本控制PR review 审查动画变更CI 自动渲染输出。视频生产变成 git commit。</p>
</div>
</div>
</div>
</div>
</section>
<!-- ===== TIMELINE ===== -->
<section id="timeline">
<div class="container">
<div class="section-tag">发展脉络</div>
<h2 class="section-title reveal">Vibe Motion 简史</h2>
<div class="timeline reveal">
<div class="timeline-item">
<div class="date">2021</div>
<h4>Remotion 1.0 发布</h4>
<p>Jonny Burger 在苏黎世创建 Remotion提出"用 React 写视频"的理念。开源社区开始关注代码生成视频的可能性。</p>
</div>
<div class="timeline-item">
<div class="date">2023</div>
<h4>Motion Canvas 开源</h4>
<p>TypeScript 版的 Manim 问世,填补了 Web 开发者制作教育动画的空白。</p>
</div>
<div class="timeline-item">
<div class="date">2025.02</div>
<h4>Andrej Karpathy 提出 "Vibe Coding"</h4>
<p>OpenAI 联合创始人定义了这个概念:用自然语言和 AI 协作写代码,而不是手动逐行编写。</p>
</div>
<div class="timeline-item">
<div class="date">2025.12</div>
<h4>Remotion Claude Skill 爆发</h4>
<p>Remotion Agent Skill 上线 8 周达到 15 万安装量,成为 skills.sh 上 #1 视频技能。视频制作变成了 "git commit"。</p>
</div>
<div class="timeline-item">
<div class="date">2026.02</div>
<h4>Higgsfield 发布 Vibe Motion</h4>
<p>将 Claude + Remotion 包装成无代码产品,$17.4/月起。正式定义了 "Vibe Motion" 这个品类——AI 驱动的代码生成动效。</p>
</div>
<div class="timeline-item">
<div class="date">2026.03</div>
<h4>生态爆发</h4>
<p>Replit 推出 Vibe Code Videos、Motion.dev 集成 AI Vibe Coding、Cursor 内置 Motion Studio。代码生成动效从小众走向主流。</p>
</div>
</div>
</div>
</section>
<!-- ===== QUICK START ===== -->
<section id="quickstart" style="background: var(--bg2);">
<div class="container">
<div class="section-tag">快速开始</div>
<h2 class="section-title reveal">三步在你的电脑上运行</h2>
<p class="section-desc reveal">不需要 GPU不需要 After Effects只需要 Node.js + 你的想象力。</p>
<div class="quickstart-grid reveal">
<div class="qs-card">
<div class="qs-num">1</div>
<h4>创建项目</h4>
<p style="color: var(--text2); font-size: 13px;">一行命令初始化 Remotion 项目</p>
<code>pnpm create video@latest</code>
</div>
<div class="qs-card">
<div class="qs-num">2</div>
<h4>让 AI 写动画</h4>
<p style="color: var(--text2); font-size: 13px;">用 Claude Code 描述你想要的效果</p>
<code>"做一只蜥蜴摆尾动画"</code>
</div>
<div class="qs-card">
<div class="qs-num">3</div>
<h4>预览 & 渲染</h4>
<p style="color: var(--text2); font-size: 13px;">浏览器预览,一键导出 MP4</p>
<code>pnpm build → out/video.mp4</code>
</div>
</div>
<div class="code-block reveal" style="margin-top: 40px;">
<div class="code-header">
<span class="code-dot r"></span>
<span class="code-dot y"></span>
<span class="code-dot g"></span>
<span class="code-filename">Terminal</span>
</div>
<div class="code-content">
<span class="cm"># 安装依赖</span>
pnpm add remotion @remotion/cli @remotion/player react react-dom
<span class="cm"># 启动 Studio浏览器实时预览</span>
pnpm remotion studio src/index.ts
<span class="cm"># 渲染为 MP4</span>
pnpm remotion render src/index.ts MyAnimation out/video.mp4
<span class="cm"># 渲染为 GIF</span>
pnpm remotion render src/index.ts MyAnimation out/video.gif --image-format png
</div>
</div>
</div>
</section>
<!-- ===== FOOTER ===== -->
<footer>
<div class="container">
<div class="footer-links">
<a href="https://github.com/remotion-dev/remotion">Remotion</a>
<a href="https://github.com/motiondivision/motion">Motion</a>
<a href="https://github.com/motion-canvas/motion-canvas">Motion Canvas</a>
<a href="https://higgsfield.ai/vibe-motion">Higgsfield</a>
<a href="https://www.remotion.dev/docs/ai/claude-code">Remotion × Claude</a>
</div>
<p>Built with Remotion + Claude Code · 2026</p>
<p style="margin-top: 8px; opacity: .4;">源码已下载至 repos/ — Remotion / Motion / Motion Canvas</p>
</div>
</footer>
<!-- Floating lizard -->
<a href="#" class="float-lizard" title="回到顶部">🦎</a>
<script>
// IntersectionObserver for reveal animations
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.classList.add('visible');
}
});
}, { threshold: 0.1, rootMargin: '0px 0px -40px 0px' });
document.querySelectorAll('.reveal').forEach(el => observer.observe(el));
// Smooth scroll for float lizard
document.querySelector('.float-lizard').addEventListener('click', (e) => {
e.preventDefault();
window.scrollTo({ top: 0, behavior: 'smooth' });
});
</script>
</body>
</html>