graph LR subgraph Traditional["传统视频工具"] direction LR A1["🎬 Premiere Pro"] A2["🎬 Final Cut Pro"] A3["🎬 DaVinci Resolve"] end subgraph WebTech["Web 技术栈"] direction LR B1["📝 HTML / CSS"] B2["🎭 GSAP 动画"] B3["🖼️ Canvas / WebGL"] end subgraph HyperFrames["✨ HyperFrames"] direction LR C1["🧩 合成系统"] C2["⏱️ 时间轴引擎"] C3["🎞️ MP4 渲染器"] end WebTech --> HyperFrames HyperFrames --> Traditional style HyperFrames fill:#5e81ac,stroke:#88c0d0,color:#eceff4 style Traditional fill:#4c566a,stroke:#88c0d0,color:#d8dee9 style WebTech fill:#4c566a,stroke:#88c0d0,color:#d8dee9
graph TD subgraph HTML["index.html — 主合成"] direction TD A["🖼️ 1920×1080 画布"] --> B["⏱️ 时间线引擎"] B --> C["🎭 GSAP 动画"] B --> D["🎵 音频轨道"] B --> E["📺 视频轨道"] end subgraph Output["渲染输出"] F["🎬 MP4 视频文件"] end HTML -->|"npx hyperframes render"| Output style A fill:#5e81ac,stroke:#88c0d0,color:#eceff4
graph TD subgraph Timeline["时间轴 (0-25s)"] T1["🎯 标题\n0-5s"] --> T2["🌍 形状\n5-10s"] T2 --> T3["⛵ 地平线\n10-15s"] T3 --> T4["⭐ 星座\n15-20s"] T4 --> T5["🏁 结论\n20-25s"] end style T1 fill:#5e81ac,stroke:#88c0d0,color:#eceff4 style T2 fill:#b48ead,stroke:#c79bc7,color:#eceff4 style T3 fill:#5e81ac,stroke:#88c0d0,color:#eceff4 style T4 fill:#b48ead,stroke:#c79bc7,color:#eceff4 style T5 fill:#a3be8c,stroke:#b1d5a0,color:#2e3440
graph LR subgraph EasingCurves["缓动曲线类型"] P2["power2.out\n平滑减速"] --> B["back.out(1.7)\n弹性弹入"] B --> P1["power2.in\n平滑加速\n(出场)"] end style P2 fill:#5e81ac,stroke:#88c0d0,color:#eceff4 style B fill:#b48ead,stroke:#c79bc7,color:#eceff4 style P1 fill:#bf616a,stroke:#d08770,color:#eceff4
graph LR A["📝 编辑 index.html"] --> B["🏃 npm run dev\n预览"] B --> C{"修改?"} C -->|"✅ 是"| A C -->|"❌ 否"| D["🔍 npm run check\n校验"] D -->|"❌ 有错误"| A D -->|"✅ 通过"| E["🎬 npm run render\n渲染MP4"] E --> F["🌐 npm run publish\n分享"] style A fill:#5e81ac,stroke:#88c0d0,color:#eceff4 style B fill:#b48ead,stroke:#c79bc7,color:#eceff4 style D fill:#5e81ac,stroke:#88c0d0,color:#eceff4 style E fill:#a3be8c,stroke:#b1d5a0,color:#2e3440 style F fill:#88c0d0,stroke:#81a1c1,color:#2e3440
graph LR subgraph Slides["5 个场景 · 25 秒"] direction LR S1["🎯 标题\n0-5s"] --> S2["🌍 形状\n5-10s"] S2 --> S3["⛵ 地平线\n10-15s"] S3 --> S4["⭐ 星座\n15-20s"] S4 --> S5["🏁 结论\n20-25s"] end subgraph Animations["动画技术"] A1["back.out(1.7)\n弹性弹入"] A2["scale: 0.4 → 1.0\n缩放动画"] A3["rotation\n旋转动画"] A4["x: ±60 → 0\n漂移入场"] end style S1 fill:#5e81ac,stroke:#88c0d0,color:#eceff4 style S5 fill:#a3be8c,stroke:#b1d5a0,color:#2e3440 style A1 fill:#b48ead,stroke:#c79bc7,color:#eceff4
graph LR subgraph Project["🎬 Hadlock MAX-CUT · 24:11"] A["index.html\n603 行 · 12 场景"] --> B["assets/narration.m4a\n46.5 MB 音频"] A --> C["hadlock.srt\n760 段字幕"] end subgraph Tech["技术栈"] D["GSAP 3.14\n弹性动画"] E["60+ 行 CSS\n卡片 / 表格 / 动画"] F["12 组 fromTo\n入场 + 出场"] end Project --> Tech style A fill:#5e81ac,stroke:#88c0d0,color:#eceff4 style B fill:#b48ead,stroke:#c79bc7,color:#eceff4 style D fill:#a3be8c,stroke:#b1d5a0,color:#2e3440
graph LR A["📄 hadlock.srt\n760 段"] --> B["🔍 分析\n主题分组"] B --> C["🎯 12 场景\n时间映射"] C --> D["🏷️ data-start\ndata-duration"] D --> E["🎬 合成输出"] subgraph SRT["SRT 示例"] S1["00:00:00,000 → 00:00:03,000\n'Imagine…'"] S2["00:00:03,040 → 00:00:05,920\n'you're trying to divide…'"] end style A fill:#bf616a,stroke:#d08770,color:#eceff4 style E fill:#a3be8c,stroke:#b1d5a0,color:#2e3440 style S1 fill:#4c566a,stroke:#88c0d0,color:#d8dee9 style S2 fill:#4c566a,stroke:#88c0d0,color:#d8dee9
graph TD subgraph Pitfalls["常见错误"] P1["❌ 缺少 data-composition-id"] --> F1["🔴 linter 报错\nroot_missing_composition_id"] P2["❌ 媒体元素无 id"] --> F2["🔴 渲染无声音\nmedia_missing_id"] P3["❌ 子合成加 .clip"] --> F3["⚠️ 子合成不显示"] P4["❌ KaTeX 渲染顺序错"] --> F4["⚠️ 公式闪烁"] end style P1 fill:#bf616a,stroke:#d08770,color:#eceff4 style P2 fill:#bf616a,stroke:#d08770,color:#eceff4 style P3 fill:#b48ead,stroke:#c79bc7,color:#eceff4 style P4 fill:#b48ead,stroke:#c79bc7,color:#eceff4
graph LR subgraph Now["现在"] N1["✅ 基本合成系统"] N2["✅ GSAP 动画"] N3["✅ 音频/视频支持"] N4["✅ MP4 渲染"] end subgraph Soon["即将到来"] S1["🔄 流式编码"] S2["🎨 可视化编辑器"] S3["🤖 AI 辅助合成"] S4["⚡ GPU 加速渲染"] end subgraph Future["未来"] F1["🌐 实时协作"] F2["📺 直播输出"] F3["🎵 AI 语音合成"] F4["🧩 社区组件市场"] end Now --> Soon --> Future style N1 fill:#a3be8c,stroke:#b1d5a0,color:#2e3440 style N2 fill:#a3be8c,stroke:#b1d5a0,color:#2e3440 style S1 fill:#88c0d0,stroke:#81a1c1,color:#2e3440 style S2 fill:#88c0d0,stroke:#81a1c1,color:#2e3440 style F1 fill:#b48ead,stroke:#c79bc7,color:#eceff4 style F2 fill:#b48ead,stroke:#c79bc7,color:#eceff4