- frontend/: Next.js 16 app (App Router, React 19, Tailwind v4) - skills/: project skills (seedance, automation, trae-agents, etc.) - Docs: PRD, UI-Design-System, DEV-LOG, seedance integration notes - skills-lock.json: skills version lock Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
29 KiB
Air Spark — 开发交互记录
记录开发者与 Claude Code 的协作过程,积累 AI 辅助开发的最佳实践。 持续更新中。
Session 1 — 项目基础搭建
日期:2026-03-03
用户需求
- 提供了产品 PRD 初稿,定义了 AI 驱动动画生产平台的完整功能
- 要求确定技术选型和项目架构
Claude 完成的工作
- 审阅 PRD,与用户讨论并迭代到 v0.4
- 确定技术栈:Next.js 14 + FastAPI + PostgreSQL + Celery/Redis
- 设计了七阶段流水线架构(剧本→规划→人设→分镜→切分→视频→拼接)
- 创建了三套自动化 Skill 提示词(storyboard / segmentation / json-schemas)
- 确定了关键设计决策(网格按场景分、PIL 精确裁切、Stage 6 全并发等)
关键决策
- 网格尺寸按场景时长决定(≤45s→4格, 45s-2min→9格, >2min→两个9格)
- JSON-only 输出用于自动化 Skill(区别于人用的 Markdown Skill)
- 移除 prev_frame 依赖,Stage 6 全部片段可并发提交
Session 2 — UI 设计系统 & 组件展示页
日期:2026-03-04
用户需求
- 要求建立完整的 UI 设计系统
- 风格关键词:liquid glass、glassmorphism、dark mode、premium、cinematic
- 使用 ui-ux-pro-max skill 生成设计建议
Claude 完成的工作
- 运行 ui-ux-pro-max 设计系统生成器,获得专业推荐(配色、字体、风格)
- 编写 UI-Design-System.md v0.3,包含:
- 色彩系统(影院暗色背景 + 品牌色 + 状态色)
- 玻璃拟态层级规范(标准/激活/悬停三层)
- 字体系统(Space Grotesk + DM Sans + JetBrains Mono)
- 按钮/表单/卡片/Toast 等组件规范
- 搭建 Next.js 14 前端项目(App Router + TypeScript + Tailwind CSS v4)
- 开发 21 节组件展示页(
/showcase),覆盖:- 色彩 & 玻璃层、字体排版、按钮、状态格子
- 流水线步骤条、审核卡片、骨架屏、剧本确认
- 日志面板、模态框、表单、Toast、空状态
- 徽章/标签、头像、导航路径、标签页
- 危险按钮 & 搜索框、提示气泡、文字对比度
- 添加全局环境背景动效(CSS 渐变光晕 + 动画)
用户反馈 & 迭代
- 用户要求添加中英文切换(i18n)
- Claude 实现了页面级
lang状态 +t翻译对象(~110 个键) - 用户指出多处翻译问题,逐一修正:
- 字体排版区域仍显示英文 → 添加中文示例文本
- "Stage 6" 未翻译 → 改为"第六阶段"
- "面包屑" 翻译生硬 → 改为"导航路径"
- "Air Spark 工作室" → 去掉"工作室"/"Studio"
- 补充了 Noto Sans SC(思源黑体) 中文字体支持
关键决策
- Showcase 页面用页面级
t对象做 i18n(临时方案) - 正式应用将来用 next-intl + URL 路由(
/zh/...,/en/...) - 品牌名统一为 Air Spark(不带 Studio / 工作室)
Session 3 — 开发策略讨论
日期:2026-03-04
用户需求
- 了解 Claude Code 2026 新功能(Swarm、Worktree、Batch 等)
- 考虑使用 Swarm 团队模式进行并行开发
- 要求 Claude 给出客观建议,以最快完成项目为目标
- 要求建立开发交互记录文档,积累协作经验
Claude 的建议
用户原有流程(先 UI → 再交互 → 再后端)本质正确。不建议为了用新功能而改变有效流程。
Swarm 现阶段不适合全面启用的原因:
- 缺少清晰的任务边界(核心页面 UI 未确定)
- 前后端 API 契约未定义(并行开发会导致接口不一致)
- 实验功能有额外协调开销
推荐路线:
- 阶段 A(串行):设计锁定 → 确定核心页面 UI → 反推 API 契约
- 阶段 B(并行/Swarm):前端交互 + 后端 API + 数据库同时推进
- 阶段 C:集成联调
经验总结
给团队的建议:AI 新功能(如 Swarm)应在任务边界清晰时才启用。 过早并行化 = 用协调开销换开发速度,得不偿失。 正确做法是先串行想清楚,再并行干活。
Session 4 — 核心页面开发(阶段 A:App Shell + 项目列表)
日期:2026-03-04
用户需求
- 要求后续每完成一步主动更新交互文档
- 开始开发核心页面,询问逐个做还是一起做
Claude 的建议
先做一个页面锁定 App Shell,再批量出剩余页面。 原因:
- 第一个页面确定布局骨架(侧边栏 + 内容区),所有页面共用
- Shell 确认后,剩余页面只是填内容,可以快速批量产出
Claude 完成的工作
1. App Shell 布局骨架
- Sidebar 组件(
components/layout/Sidebar.tsx):- 可折叠侧边栏(240px ↔ 68px),玻璃拟态背景
- 四个导航项:项目、资产库、Skills、设置
- 当前路由高亮(accent 紫色)
- 底部用户信息区 + 折叠按钮
- collapsed 状态由父组件控制,sidebar 和 main 内容区联动
- Dashboard Layout(
app/dashboard/layout.tsx):- 管理 collapsed 状态,传递给 Sidebar
- main 区域 margin-left 随 sidebar 折叠联动动画
2. 项目列表页(app/dashboard/page.tsx)
- 页面头部:标题 + 「创建项目」CTA 按钮
- 搜索栏 + 统计:实时搜索过滤 + 项目数/运行数统计
- 项目卡片网格:响应式(1/2/3/4 列)
- 每张卡片包含:类型标签、项目名、集数、运行状态
- 七阶段进度条:彩色条形图,直观展示流水线进度
- 当前阶段 + 最后更新时间
- Hover 效果 + 更多操作按钮
- 空状态:无项目时的引导界面
- 搜索无结果:提示换关键词
- 4 条 Mock 数据覆盖不同状态(running / completed / failed)
3. Build 验证
npx next build通过,无 TypeScript 错误
新增文件
| 文件 | 用途 |
|---|---|
components/layout/Sidebar.tsx |
可折叠侧边栏组件 |
app/dashboard/layout.tsx |
Dashboard 布局(sidebar + main) |
app/dashboard/page.tsx |
项目列表页 |
用户确认
- 用户确认项目列表页视觉方向 OK,要求继续做其他页面
- 发现左下角有黑色小圆球 → 是 Next.js Dev Indicator,在
next.config.ts中关闭
Session 4(续)— 批量产出核心页面
日期:2026-03-04
用户需求
- 确认 App Shell 视觉方向后,批量产出剩余核心页面
Claude 完成的工作
1. 项目详情页(app/dashboard/[projectId]/page.tsx)
- 面包屑导航:项目 > T仔的上班日记
- 项目信息卡:名称、类型标签、描述、Skill 标签列表
- 统计行:总集数、运行中、已完成
- 剧集列表:每行包含:
- 集数编号(大字)+ 标题 + 状态标签(草稿/运行中/已完成/失败/空闲)
- Mini 七阶段进度条
- 当前阶段 + 时长 + 更新时间
- Hover 显示操作按钮(剧本 / 流水线 / 开始写剧本)
- 5 条 Mock 剧集数据覆盖各种状态
2. 剧本对话页(app/dashboard/[projectId]/chat/page.tsx)
- 类 Claude.ai 风格的全屏对话界面
- 顶栏:返回按钮 + 项目/集数标题 + Skill 信息 + 「保存为正式剧本」按钮
- 消息区域:
- 用户消息(紫色气泡,右对齐)
- AI 回复(玻璃卡片,左对齐,带复制/重新生成按钮)
- 简单的 Markdown 渲染(加粗、分隔线)
- 输入区域:多行文本框 + 发送按钮(有内容时亮紫色)
- 剧本确认流程:点「保存为正式剧本」→ 顶部出现绿色 banner → 按钮变为「确认剧本,启动流水线」
- 4 条 Mock 对话,包含完整的剧本内容(T仔第一天上班的 7 个场景)
3. 流水线监控页(app/dashboard/[projectId]/pipeline/[episodeId]/page.tsx)
- 七阶段步骤条:可点击切换查看每个阶段,当前阶段高亮
- Stage 6 视频生成视图(主要展示):
- 渐变进度条 + 百分比 + 完成数
- 状态统计行(完成/生成中/失败/队列中)
- 8×4 片段状态网格(32 个格子,颜色编码 + 图标)
- 失败片段操作栏(编辑提示词 / 重跑)
- 「导出 Seedance 批次包」按钮
- Stage 3 人设审核视图:
- 4 张角色卡片(占位图 + 名称 + 通过/重跑按钮)
- 底部汇总 CTA(全部通过后可点击)
- 已完成阶段:绿色 ✓ + 描述 + 「查看输出详情」
- 待执行阶段:灰色时钟 + 等待提示
- 可折叠系统日志面板:时间戳 + 级别颜色 + 消息
4. Build 验证
所有 6 个路由编译通过:
/dashboard— 项目列表/dashboard/[projectId]— 项目详情/dashboard/[projectId]/chat— 剧本对话/dashboard/[projectId]/pipeline/[episodeId]— 流水线监控
新增文件
| 文件 | 用途 |
|---|---|
app/dashboard/[projectId]/page.tsx |
项目详情页(剧集列表) |
app/dashboard/[projectId]/chat/page.tsx |
剧本对话页(Claude.ai 风格) |
app/dashboard/[projectId]/pipeline/[episodeId]/page.tsx |
流水线七阶段监控页 |
页面导航路径
/dashboard → 项目列表(4 张卡片)
/dashboard/proj_001 → 项目详情(5 集剧集列表)
/dashboard/proj_001/chat?ep=1 → 剧本对话(AI 对话 + 剧本确认)
/dashboard/proj_001/pipeline/ep_01 → 流水线监控(七阶段 + 片段网格)
经验总结
批量产出的前提是 Shell 已锁定。 确认了侧边栏 + 布局后,三个页面只用了一轮就全部产出, 没有布局返工。这验证了「先串行锁定骨架,再批量出内容」的策略。
Session 5 — 用户反馈 & 迭代修复
日期:2026-03-04
用户反馈(4 个页面全部审阅后)
- 流水线监控页 — 片段网格是正方形,不符合设计规范(应为自然高度 + padding)
- 剧本对话页 — 纯对话模式不合理,需要改为左右分栏:
- 左:剧本文档(可查看/可编辑,类似 IDE 中的文件面板)
- 右:AI 对话(提需求、提修改意见)
- 用户原话:"如果把所有内容都堆在一个对话框里,我无法看到完整的剧本,也没办法手动微调"
- 路由 bug — 点击侧边栏「资产库」跳到了项目详情(
/dashboard/assets被[projectId]动态路由匹配了) - 项目列表 + 项目详情 — 暂无大问题
Claude 修复内容
1. 路由 bug 修复
根因:/dashboard/assets 没有对应的 page.tsx,被 [projectId] 动态路由吞掉。
修复:创建三个静态路由页面(优先级高于动态路由):
app/dashboard/assets/page.tsx— 资产库(空状态占位)app/dashboard/skills/page.tsx— Skills 管理(3 个 Skill 卡片)app/dashboard/settings/page.tsx— 设置(API Key、流水线模式配置)
2. 剧本对话页重设计 → 分栏式剧本工作台
核心改造:从纯对话布局改为左右分栏(可拖拽调整宽度):
- 左侧 — 剧本面板(55% 默认宽度):
- 预览模式:Markdown 渲染(标题、对话、舞台指示、分隔线)
- 编辑模式:纯文本 textarea,可手动修改
- 顶部切换按钮(预览 ↔ 编辑)
- 场景数 + 时长统计
- 中间 — 可拖拽分隔条(hover 显示拖拽图标)
- 右侧 — AI 对话面板:
- 更紧凑的气泡(7px avatar、更小的间距)
- AI 回复内容改为摘要式("已更新场景二和场景五"),而非全文
- 输入框 2 行高度,适配右侧窄面板
- 联动逻辑(Mock 演示):AI 修改剧本后左侧同步更新
3. 片段网格修复
移除 aspect-square,改为 showcase 标准:p-2.5 flex-col items-center gap-1.5,自然高度。
4. Build 验证
9 个路由全部编译通过。
新增文件
| 文件 | 用途 |
|---|---|
app/dashboard/assets/page.tsx |
资产库页面(空状态) |
app/dashboard/skills/page.tsx |
Skills 管理页面 |
app/dashboard/settings/page.tsx |
设置页面 |
经验总结
最有价值的反馈来自用户的使用场景描述。 用户没有说"把聊天框放左边",而是描述了 实际使用痛点:"无法看到完整剧本,也没办法手动微调"。从痛点推导出分栏式设计, 比纯视觉反馈更能驱动正确的产品决策。
动态路由的坑:Next.js App Router 中,
[projectId]会匹配所有未定义的子路径。 静态路由必须显式创建page.tsx才能优先匹配。
Session 6 — 用户深度反馈 & 功能完善
日期:2026-03-04
用户反馈(详细审阅全部页面后)
- 剧本对话页:需支持 3 种使用模式(引导生成 / 大纲辅助 / 优化已有剧本 + 文件上传)
- 发送按钮:与输入框不对齐、样式丑,需修复
- 剧本内容:用真实剧本
ep01.md替换 Mock 数据 - 资产库页:需要 Mock 画廊(角色立绘做缩略图,点击查看三视图)
- Skills 页:卡片需可点击进入详情/管理页
- 项目卡片:点击不跳转到项目详情(缺少路由链接)
- 全局路由:确保所有页面间跳转正确
Claude 完成的工作
1. 项目卡片导航修复(dashboard/page.tsx)
- 将
ProjectCard组件的容器从<div>改为<Link href={/dashboard/${project.id}} - 卡片现在可正确点击跳转到项目详情页
2. 真实剧本替换([projectId]/chat/page.tsx)
- 读取
skills/测试skills三件套/原创剧本-skill/scripts/ep01.md的完整内容 - 替换 MOCK_SCRIPT 为《恐龙也是打工龙》第1集完整剧本(4 场 + 片尾彩蛋)
- 更新 MOCK_MESSAGES 对话内容,匹配真实剧本场景
3. 发送按钮修复([projectId]/chat/page.tsx)
- 之前:
absolute定位在 textarea 内部,位置不准且样式突兀 - 修复:改为
flex items-end gap-2布局,按钮独立在输入框右侧- 固定
w-10 h-10 rounded-xl,与输入框底部对齐 - 有内容时紫色发光,无内容时半透明 + 边框
- 去掉
pr-12(不再需要为内嵌按钮留位置)
- 固定
4. 资产库画廊页(dashboard/assets/page.tsx)— 完整重写
- 搜索 + 分类筛选:全部 / 角色 / 场景 / 道具(带计数)
- 资产卡片网格(响应式 2-6 列):
- 缩略图用渐变色占位(角色=暖色、场景=冷色、道具=粉色)
- 类型标签(左上角)+ 关联剧集标签(右下角)
- 名称 + 更新时间 + 版本号
- Hover 效果(缩略图亮度提升)
- 资产详情弹窗(点击卡片打开):
- 角色:展示正面/侧面/背面三视图
- 场景/道具:展示大图预览
- 生成提示词(可编辑)
- 关联剧集列表 + 版本历史
- 操作按钮:重新生成 / 编辑提示词后重新生成
- Mock 数据:4 个角色 + 3 个场景 + 1 个道具(来自 ep01.md 剧本)
5. Skills 管理页(dashboard/skills/page.tsx)— 完整重写
- 列表视图:3 个 Skill 卡片(可点击进入详情)
- 显示名称 + 英文 ID + 描述 + 关联阶段 + 更新时间
- Hover 显示箭头指引
- 详情视图(点击卡片后展示):
- 左侧:系统提示词编辑器(预览/编辑切换,类似剧本面板)
- 右侧信息栏:
- 基本信息(描述、关联阶段、模型、类型标签、更新时间)
- 使用此 Skill 的项目列表
- 版本历史
- 操作:编辑 → 保存 → 版本自增
- Mock 数据包含真实的 Skill 提示词摘要
6. Build 验证
9 个路由全部编译通过,无 TypeScript 错误。
修改文件
| 文件 | 修改内容 |
|---|---|
dashboard/page.tsx |
ProjectCard 包裹 Link 实现点击导航 |
[projectId]/chat/page.tsx |
真实剧本 + 发送按钮修复 |
dashboard/assets/page.tsx |
完整重写 → 画廊 + 详情弹窗 |
dashboard/skills/page.tsx |
完整重写 → 卡片列表 + 详情编辑 |
经验总结
Mock 数据应尽早使用真实内容。 用真实的 ep01.md 剧本做 Mock,不仅让页面更有代入感, 还能验证 Markdown 渲染逻辑是否正确覆盖了实际格式(标题、角色表、舞台指示等)。
UI 组件要考虑不同数据类型的差异化展示。 资产库中角色(三视图)和场景(单张大图)的 展示方式不同,需要在组件层面做类型判断而非统一模板。
附录:交互模式总结
有效的交互习惯
| 习惯 | 说明 |
|---|---|
| 给出风格关键词 | "liquid glass, cinematic dark" 比 "好看一点" 有效 10 倍 |
| 即时指出翻译/文案问题 | 逐条修正比最后统一改效率高 |
| 要求客观建议 | 明确说"要冷静客观",避免 AI 一味附和 |
| 先确认视觉再写逻辑 | 减少返工,UI 是需求的最佳载体 |
| 描述使用场景而非UI指令 | "我无法看到完整剧本" > "把文本放左边" |
可以改进的地方
| 场景 | 建议 |
|---|---|
| 大批量文本替换 | 可以一次性提供所有翻译对照表,减少来回 |
| 品牌命名 | 尽早统一(我们到 Session 2 末尾才去掉 "Studio") |
| 设计规范 | 先锁定再开发,避免边开发边改规范 |
| 路由设计 | 动态路由旁的静态路由要提前占位,避免被吞 |
Session 7 — 深度迭代:命名修正 + Skills 架构重设计
日期:2026-03-04
用户反馈
- Stage 3 命名:"人设"不准确,只涵盖角色但该阶段生成所有参考图 → 改为"图片资产"
- 项目卡片三点菜单:三个点按钮无功能,应弹出操作菜单(设置/复制/归档/删除)
- 三视图展示:不应是三张分割图,而是一张横版 16:9 图(正面半身+正面全身+侧面+背面)
- Skills 架构根本问题:当前 UI 把 Skill 当成"单一系统提示词",但实际 Skill 是目录级知识包:
需要完全重设计为文件树 + 文件编辑器(IDE 风格)skill-name/.claude/skills/{name}/ ├── SKILL.md ← 入口文件 ├── references/ ← AI 按需读取的知识库 └── templates/ ← 输出模板 - Stage 2 命名:"规划"太模糊,用户不明白这步做什么 → 改为"提示词提取"
- 未来 Skill 安装:需要"安装 Skill"按钮,支持导入外部 Skill
Claude 完成的工作
1. 流水线阶段命名修正(全局 7 文件)
- Stage 2:
"规划"→"提示词提取"(6 个文件,描述更清楚地告诉用户此步做什么) - Stage 3:
"人设"→"图片资产"(5 个文件,覆盖角色/场景/道具所有参考图) - 涉及文件:
dashboard/page.tsx,[projectId]/page.tsx,pipeline/[episodeId]/page.tsx,showcase/page.tsx,skills/page.tsx - Showcase 页英文同步更新:
"Planning"→"Prompt Extract","Characters"→"Image Assets"
2. 项目卡片下拉菜单(dashboard/page.tsx)
- 新增
ProjectCardMenu组件,处理stopPropagation(菜单在 Link 包裹的卡片内) - 四个操作项:项目设置 / 复制项目 / 归档 / 删除(红色危险操作)
- 点击外部自动关闭(
useRef+useEffect监听mousedown) - 菜单样式:毛玻璃深色背景
rgba(15,15,25,0.95)+backdropFilter: blur(20px)
3. 三视图修复(dashboard/assets/page.tsx)
- 之前:3 列网格展示 3 张独立的正面/侧面/背面图
- 修复:单张
aspect-video横版 16:9 图,内部用flex等分 4 区域- 4 区域:正面半身 / 正面全身 / 侧面 / 背面
- 底部半透明标签标注每个区域
- 区域间白色分隔线
4. Skills 管理页完整重写(dashboard/skills/page.tsx)
架构级重设计,从"单一提示词编辑器"改为"目录级知识包管理器":
-
列表视图:
- 每张卡片显示文件统计(总文件数 / references / templates)
- 顶部新增"安装 Skill"按钮(为未来外部 Skill 导入预留)
-
详情视图(IDE 风格):
- 左侧文件树(260px 宽):
- 可折叠文件夹(SKILL.md、CLAUDE.md、references/、templates/)
- 文件类型图标区分(FileText / Folder)
- 当前选中文件高亮
- 右侧文件编辑器:
- 预览 / 编辑模式切换
- 文件路径面包屑
- 文件描述显示
- Mock 数据基于真实 Skill 目录结构
- 左侧文件树(260px 宽):
-
Mock 数据来源:
D:\Air spark\skills\测试skills三件套\的实际文件结构
5. Build 验证
9 个路由全部编译通过,零 TypeScript 错误。
修改文件
| 文件 | 修改内容 |
|---|---|
dashboard/page.tsx |
阶段命名修正 + ProjectCardMenu 下拉菜单 |
[projectId]/page.tsx |
阶段命名修正 |
pipeline/[episodeId]/page.tsx |
阶段命名修正("人设"→"图片资产" + "规划"→"提示词提取") |
showcase/page.tsx |
阶段命名修正(中英文 + toast) |
dashboard/assets/page.tsx |
三视图改为单张 16:9 横图 |
dashboard/skills/page.tsx |
完整重写 → 文件树 + 编辑器(IDE 风格) |
经验总结
命名即沟通。 "规划"对开发者清楚但用户困惑,"提示词提取"直接告诉用户这步做什么。 面向用户的阶段名应该用动词+名词结构描述动作,而非抽象名词。
Skill 不是 prompt。 把 Skill 简化为单一系统提示词是对其能力的阉割。 真实的 Skill 是一个目录结构化的知识包,模型根据用户需求选择性读取不同文件。 UI 设计必须反映这种目录结构,否则管理界面会误导用户。
Session 8 — 阶段 A 收尾:全流程页面补全
日期:2026-03-05
背景
用户确认了完整计划后,从 Step 0 到 Step 9 全部执行。核心目标:补全端到端流程链路 + 审核回退 + 剧本三栏工作台 + 所有管线阶段视图。
完成的工作
Step 0+1: Pipeline 组件拆分 + ReviewGate + 级联失效
- 提取
components/pipeline/目录,4 个核心组件:PipelineStepper、ReviewGate、SegmentGrid、LogPanel - PipelineStepper 新增
invalidated状态(amber ⚠️ + 删除线)+ 可点击跳转 - ReviewGate 通用审核门:3 种模式(review / auto_passed / invalidated)
- 级联失效逻辑:重跑/回退 → 下游全部标记
invalidated,旧数据保留 page.tsx瘦身:430 → ~200 行,纯布局 + 状态管理 + stage 分发
Step 2: 剧本工作台(三栏 IDE 布局)
chat/page.tsx从双栏改为三栏:文件树(200px) + 文件预览/编辑(flex-1) + AI Chat(380px)- 文件树反映 screenplay-skill 7 阶段产出:concept → outline → characters → world → synopsis → beats → scripts
- 4 种文件状态:✅ done / 📝 draft / ⏳ pending / ⚠️ outdated
- Markdown 预览 + 纯文本编辑模式切换
- 顶栏:剧本阶段指示器(① ② ③ ④ ⑤ ⑥ ⑦)+ "确认剧本,启动流水线" CTA
- 引导模式提示:当前进度、下一步建议
Steps 3-7: 五个阶段视图
| 文件 | 阶段 | 内容 |
|---|---|---|
StagePromptExtract.tsx |
Stage 2 | 三 Tab(角色/场景/Keyshot)+ 可展开编辑提示词 |
StageImageAssets.tsx |
Stage 3 | 三 Tab(角色/场景/道具)+ 总进度 + 单资产重跑 |
StageKeyshots.tsx |
Stage 4 | 按场景手风琴 + 宫格预览 + 裁切格子横滚画廊 |
StageSegments.tsx |
Stage 5 | 片段列表 + 时码 + 参考图引用 + Seedance 提示词预览 |
StageTimeline.tsx |
Stage 7 | 16:9 预览区 + 时间轴条 + 场景色编码 + 导出CTA |
Step 8: 流程串联
dashboard/page.tsx新增 CreateProjectModal(2步表单:名称+类型 → 集数+技能预览)- 项目详情"添加剧集"按钮 → Link 到 chat 页面
- 项目详情"设置"按钮 → Link 到项目设置页
- chat 页"确认剧本,启动流水线" → Link 到 pipeline 页面
Step 9: 设置 + 项目设置
dashboard/settings/page.tsx:完善 API Keys(Claude + Banana Pro + Seedance)+ 流水线模式(全自动/逐步审核/自定义)+ 自定义时 7 阶段审核开关- 新建
[projectId]/settings/page.tsx:项目名/描述/类型 + 技能配置 + 渲染风格(6选项)+ 视频参数(比例+模型)+ 危险区(归档/删除) - 首页
/重定向从/showcase改为/dashboard
文件变更清单
| 操作 | 文件 |
|---|---|
| 新建 | components/pipeline/PipelineStepper.tsx |
| 新建 | components/pipeline/ReviewGate.tsx |
| 新建 | components/pipeline/SegmentGrid.tsx |
| 新建 | components/pipeline/LogPanel.tsx |
| 新建 | components/pipeline/StagePromptExtract.tsx |
| 新建 | components/pipeline/StageImageAssets.tsx |
| 新建 | components/pipeline/StageKeyshots.tsx |
| 新建 | components/pipeline/StageSegments.tsx |
| 新建 | components/pipeline/StageTimeline.tsx |
| 新建 | dashboard/[projectId]/settings/page.tsx |
| 重写 | dashboard/[projectId]/pipeline/[episodeId]/page.tsx |
| 重写 | dashboard/[projectId]/chat/page.tsx |
| 重写 | dashboard/settings/page.tsx |
| 修改 | dashboard/page.tsx(添加 CreateProjectModal) |
| 修改 | dashboard/[projectId]/page.tsx(添加剧集→chat,设置→settings 链接) |
| 修改 | app/page.tsx(重定向 → /dashboard) |
经验总结
端到端先于细节。 用户最在意的不是单个页面的精美度,而是"从创建项目到导出成片"的完整链路是否畅通。 先把 ReviewGate + 步骤条跳转 + 页面间 Link 全部串起来,再逐个打磨阶段视图。
三栏布局是内容创作工具的正确范式。 剧本工作台从双栏升级为三栏后,"文件即产出"的概念变得清晰 —— 用户能看到 AI 生成了什么文件、当前在第几步、下一步做什么。
组件拆分的时机。 当一个文件超过 300 行且包含多个独立子组件时,就应该拆。Pipeline page 从 430 行拆到 ~200 行后,添加 5 个新阶段视图几乎零成本。
Session 9 — 用户预览反馈:流水线三阶段 UI 修复
日期:2026-03-12
背景
用户启动前端预览,对 Stage 4 / 6 / 7 三个阶段视图进行了详细审阅,提出了 3 类问题。
用户反馈
- Stage 4(宫格生成)内容重复:场景列表渲染了两遍 —— 上方
grid-cols-2卡片组展示宫格缩略图,下方 accordion 又列了同样的场景带可展开的格子描述。 - Stage 6(视频生成)无法预览视频:只有状态格子(完成/生成中/失败),点击完成的片段没有任何反馈。用户无法判断视频质量是否需要重跑。此外失败提示硬编码"片段 08",多个失败时不会动态列出。
- Stage 7(剪辑导出)布局问题:
- 视频预览窗口
max-w-2xl mx-auto偏小且居中,不符合剪辑软件操作直觉 - 时间轴片段下方出现一个 glass-card 展示"片段01 — 黑屏OS引入",用户标注"干嘛用的???"——该卡片是点击时间轴片段后显示的选中详情,与预览区信息完全重复
- 视频预览窗口
Claude 修复内容
1. StageKeyshots.tsx — 删除重复,合并视图
- 删除上方
grid grid-cols-2独立卡片组(4 个场景卡片 + 宫格缩略图) - 合并到 accordion 展开面板内:先展示宫格缩略图(mini grid),再展示格子描述横滚画廊
- 移除未使用的
Cameraimport
2. SegmentGrid.tsx — 新增视频预览 + 动态失败处理
- 新增
selectedId状态 + 点击"已完成"片段打开顶部预览面板(16:9 播放区 + 关闭按钮) - 选中态 ring 高亮,区分当前预览的片段
- 点击约束:只有
status === "done"的片段可点击预览,其余 cursor-default - 动态失败列表:
segments.filter(s => s.status === "failed").map(...)替代硬编码"片段 08",多个失败时逐行显示
3. StageTimeline.tsx — 全宽预览 + 删除重复信息卡
- 预览区:移除
max-w-2xl mx-auto,改为aspect-video全宽填充,尺寸与页面宽度一致 - 删除 "Selected Clip Info" glass-card(lines 147-164),该信息已在预览区内通过文字叠层展示
- 保留
Imageimport(预览区占位图标仍在使用)
修改文件
| 文件 | 修改内容 |
|---|---|
components/pipeline/StageKeyshots.tsx |
删除重复卡片组,宫格缩略图合并入 accordion |
components/pipeline/SegmentGrid.tsx |
新增视频预览面板 + 动态失败列表 |
components/pipeline/StageTimeline.tsx |
预览全宽 + 删除冗余信息卡 |
经验总结
重复信息 = 用户困惑。 同一份数据渲染两次(Stage 4 的卡片+手风琴、Stage 7 的预览区+详情卡), 用户不会认为"这是两种视角",只会觉得"为什么出现两遍"。宁可合并到一处,也不要拆成两个看起来类似的组件。
Mock 阶段也要考虑交互完整性。 Stage 6 只展示状态格子而没有点击预览,用户会认为功能缺失。 即使是占位 UI,也应该提供基本交互反馈(选中高亮、预览面板),让用户理解"这里将来能做什么"。
硬编码 Mock 的陷阱。 失败提示写死"片段 08"在单个失败时没问题,但用户会追问"如果 4/5/6/7/8 都失败呢?" 从一开始就用
.filter().map()动态渲染,成本几乎为零但避免了这个问题。