Files
ViGent2/Docs/task_complete.md
Kevin Wong 0e3502c6f0 更新
2026-02-27 16:11:34 +08:00

24 KiB
Raw Blame History

ViGent2 开发任务清单 (Task Log)

项目: ViGent2 数字人口播视频生成系统 进度: 100% (Day 28 - CosyVoice FP16 加速 + 文档全面更新) 更新时间: 2026-02-27


📅 对话历史与开发日志

这里记录了每一天的核心开发内容与 milestone。

Day 28: CosyVoice FP16 加速 + 文档全面更新 (Current)

  • CosyVoice FP16 半精度加速: AutoModel() 开启 fp16=TrueLLM 推理和 Flow Matching 自动混合精度运行,预估提速 30-40%、显存降低 ~30%。
  • 文档全面更新: README.md / DEPLOY_MANUAL.md / SUBTITLE_DEPLOY.md / BACKEND_README.md 补充 MuseTalk 混合唇形同步方案、性能优化、Remotion 并发渲染等内容。

Day 27: Remotion 描边修复 + 字体样式扩展 + 混合唇形同步 + 性能优化

  • 描边渲染修复: 标题/副标题/字幕从 textShadow 4 方向模拟改为 CSS 原生 -webkit-text-stroke + paint-order: stroke fill,修复描边过粗和副标题重影问题。
  • 字体样式扩展: 标题样式 4→12 个(+庞门正道/优设标题圆/阿里数黑体/文道潮黑/无界黑/厚底黑/寒蝉半圆体/欣意吉祥宋),字幕样式 4→8 个(+少女粉/清新绿/金色隶书/楷体红字)。
  • 描边参数优化: 所有预设 stroke_size 从 8 降至 4~5配合原生描边视觉更干净。
  • TypeScript 类型修复: Root.tsx Composition 泛型与 calculateMetadata 参数类型对齐Video.tsx VideoProps 添加索引签名兼容 Record<string, unknown>VideoLayer.tsx 移除 OffthreadVideo 不支持的 loop prop。
  • 进度条文案还原: 进度条从显示后端推送消息改回固定 正在AI生成中...
  • MuseTalk 混合唇形同步: 部署 MuseTalk 1.5 常驻服务 (GPU0, 端口 8011),按音频时长自动路由 — 短视频 (<120s) 走 LatentSync长视频 (>=120s) 走 MuseTalkMuseTalk 不可用时自动回退。
  • MuseTalk 推理性能优化: server.py v2 重写 — cv2 直读帧(跳过 ffmpeg→PNG)、人脸检测降频(每5帧)、BiSeNet mask 缓存(每5帧)、cv2.VideoWriter 直写(跳过 PNG 写盘)、batch_size 8→32预估 30min→8-10min (~3x)。
  • Remotion 并发渲染优化: render.ts 新增 concurrency 参数,从默认 8 提升到 16 (56核 CPU),预估 5min→2-3min。

Day 26: 前端优化:板块合并 + 序号标题 + UI 精细化

  • 板块合并: 首页 9 个独立板块合并为 5 个主板块(配音方式+配音列表→三、配音;视频素材+时间轴→四、素材编辑;历史作品+作品预览→六、作品)。
  • 中文序号标题: 一十编号(首页一六,发布页七~十),移除所有 emoji 图标。
  • embedded 模式: 6 个组件支持 embedded prop嵌入时不渲染外层卡片/标题。
  • 配音列表两行布局: embedded 模式第 1 行语速+生成配音(右对齐),第 2 行配音列表+刷新。
  • 子组件自渲染子标题: MaterialSelector/TimelineEditor embedded 时自渲染 h3 子标题+操作按钮同行。
  • 下拉对齐: TitleSubtitlePanel 标签统一 w-20,下拉 w-1/3 min-w-[100px],垂直对齐。
  • 参考音频文案简化: 底部段落移至标题旁,简化为 (上传3-10秒语音样本)
  • 账户手机号显示: AccountSettingsDropdown 新增手机号显示。
  • 标题显示模式对副标题生效: payload 条件修复 + UI 下拉上移至板块标题行。
  • 登录后用户信息立即可用: AuthContext 暴露 setUser,登录成功后立即写入用户数据,修复登录后显示"未知账户"的问题。
  • 文案微调: 素材描述改为"上传自拍视频最多可选4个";显示模式选项加"标题"前缀。
  • UI/UX 体验优化: 操作按钮移动端可见opacity-40、手机号脱敏、标题字数计数器、时间轴拖拽抓手图标、截取滑块放大。
  • 代码质量修复: 密码弹窗 success 清空、MaterialSelector useMemo + disabled 守卫、TimelineEditor useMemo。
  • 发布页响应式布局: 平台账号卡片单行布局,移动端紧凑(小图标/小按钮),桌面端宽松(与其他板块风格一致)。
  • 移动端刷新回顶部: scrollRestoration = "manual" + 列表 scroll 时间门控(scrollEffectsEnabled ref1 秒内禁止自动滚动)+ 延迟兜底 scrollTo(0,0)
  • 移动端样式预览缩小: FloatingStylePreview 移动端宽度缩至 160px位置改为右下角不遮挡样式调节控件。
  • 列表滚动条统一隐藏: 所有列表BGM/配音/作品/素材/文案提取)滚动条改回 hide-scrollbar
  • 移动端配音/素材适配: VoiceSelector 按钮移动端缩小(px-2 sm:px-4修复克隆声音不可见MaterialSelector 标题行移除 whitespace-nowrap,描述移动端隐藏,修复刷新按钮溢出。
  • 生成配音按钮放大: 从辅助尺寸(text-xs px-2 py-1)升级为主操作尺寸(text-sm font-medium px-4 py-2),新增阴影。
  • 生成进度条位置调整: 从"六、作品"卡片内部提取到右栏独立卡片,显示在作品卡片上方,更醒目。
  • LatentSync 超时修复: httpx 超时从 1200s20 分钟)改为 3600s1 小时),修复 2 分钟以上视频口型推理超时回退问题。
  • 字幕时间戳节奏映射: whisper_service.py 从全程线性插值改为 Whisper 逐词节奏映射,修复长视频字幕漂移。

Day 25: 文案提取修复 + 自定义提示词 + 片头副标题

  • 抖音文案提取修复: yt-dlp Fresh cookies 报错,重写 _download_douyin_manual 为移动端分享页 + 自动获取 ttwid 方案。
  • 清理 DOUYIN_COOKIE: 新方案不再需要手动维护 Cookie.env/config.py/service.py 全面删除。
  • AI 智能改写自定义提示词: 后端 rewrite_script() 支持 custom_prompt 参数;前端 checkbox 旁新增折叠式提示词编辑区localStorage 持久化。
  • SSR 构建修复: useState 初始化 localStorage 访问加 typeof window 守卫,修复 npm run build 报错。
  • 片头副标题: 新增 secondary_title后端/Remotion/前端全链路AI 同时生成独立样式配置20 字限制。
  • 前端文案修正: "AI 洗稿结果"→"AI 改写结果"。
  • yt-dlp 升级: 2025.12.082026.2.21
  • 参考音频中文文件名修复: sanitize_filename() 将存储路径清洗为 ASCII 安全字符,纯中文名哈希兜底,原始名保留为展示名。

Day 24: 鉴权到期治理 + 多素材时间轴稳定性修复

  • 会员到期请求时失效: 登录与鉴权接口统一执行 expires_at 检查;到期后自动停用账号、清理 session并返回“会员已到期请续费”。
  • 画面比例控制: 时间轴新增 9:16 / 16:9 输出比例选择,前端持久化并透传后端,单素材/多素材统一按目标分辨率处理。
  • 标题/字幕防溢出: Remotion 与前端预览统一响应式缩放、自动换行、描边/字距/边距比例缩放,降低预览与成片差异。
  • 标题显示模式: 标题行新增“短暂显示/常驻显示”下拉默认短暂显示4 秒),用户选择持久化并透传至 Remotion 渲染链路。
  • MOV 方向归一化: 新增旋转元数据解析与 orientation normalize修复“编码横屏+旋转元数据”导致的竖屏判断偏差。
  • 多素材拼接稳定性: 片段 prepare 与 concat 统一 25fps/CFRconcat 增加 +genpts,缓解段切换处“画面冻结口型还动”。
  • 时间轴语义对齐: 打通 source_end 全链路;修复 sourceStart>0 且 sourceEnd=0 时长计算;生成时以时间轴可见段 assignments 为准,超出段不参与。
  • 交互细节优化: 页面刷新回顶部;素材/历史列表首轮自动滚动抑制,减少恢复状态时页面跳动。

Day 23: 配音前置重构 + 素材时间轴编排 + UI 体验优化 + 声音克隆增强

第一阶段:配音前置

  • 配音生成独立化: 新增 generated_audios 后端模块router/schemas/service5 个 API 端点,复用现有 TTSService / voice_clone_service / task_store。
  • 配音管理面板: 前端新增 useGeneratedAudios hook + GeneratedAudiosPanel 组件,支持生成/试听/改名/删除/选中。
  • UI 面板重排序: 文案 → 标题字幕 → 配音方式 → 配音列表 → 素材选择 → BGM → 生成视频。
  • 素材区门控: 未选中配音时素材区显示遮罩,选中后显示配音时长 + 素材均分信息。
  • 视频生成对接: workflow.py 新增预生成音频分支(generated_audio_id),跳过内联 TTS向后兼容。
  • 持久化: selectedAudioId 加入 useHomePersistence刷新页面恢复选中配音。

第二阶段:素材时间轴编排

  • 时间轴编辑器: 新增 TimelineEditor 组件wavesurfer.js 音频波形 + 色块可视化素材分配,拖拽分割线调整各段时长。
  • 素材截取设置: 新增 ClipTrimmer 模态框HTML5 视频预览 + 双端滑块设置源视频截取起点/终点。
  • 后端自定义分配: 新增 CustomAssignment 模型,prepare_segment 支持 source_startworkflow 多素材/单素材流水线支持 custom_assignments
  • 循环截取修复: stream_loop + source_start 改为两步处理(先裁剪再循环),确保从截取起点循环而非从视频 0s 开始。
  • MaterialSelector 精简: 移除旧的时长信息栏和拖拽排序区(功能迁移到 TimelineEditor

第三阶段UI 体验优化 + TTS 稳定性

  • TTS SoX PATH 修复: run_qwen_tts.sh export conda env bin 到 PATH (Qwen3-TTS 已停用,已被 CosyVoice 3.0 替换)。
  • TTS 显存管理: 每次生成后 torch.cuda.empty_cache()asyncio.to_thread 避免阻塞事件循环 (CosyVoice 沿用相同机制)。
  • 配音列表按钮统一: Play/Edit/Delete 按钮右侧同组 hover 显示,与 RefAudioPanel 一致,移除文案摘要。
  • 素材区解除配音门控: 移除 MaterialSelector 的 selectedAudio 遮罩,素材随时可上传管理。
  • 时间轴拖拽排序: TimelineEditor 色块支持 HTML5 Drag & Drop 调换素材顺序。
  • 截取设置 Range Slider: ClipTrimmer 改为单轨道双手柄(紫色起点+粉色终点),替换两个独立滑块。
  • 截取设置视频预览: 视频区域可播放/暂停,从 sourceStart 到 sourceEnd 自动停止,拖拽手柄时实时 seek。

第四阶段:历史文案 + Bug 修复

  • 历史文案保存与加载: 新增 useSavedScripts hook手动保存/加载/删除历史文案,独立 localStorage 持久化。
  • 时间轴拖拽修复: reorderSegments 从属性交换改为数组移动splice修复拖拽后时长不跟随素材的 Bug。
  • 按钮视觉统一: 文案编辑区 4 个按钮统一为固定高度 h-7,移除多余 <span> 嵌套。
  • 底部栏调整: "保存文案"按钮移至底部右侧,移除预计时长显示。

第五阶段:字幕语言不匹配 + 视频比例错位修复

  • 字幕用原文替换 Whisper 转录: align() 新增 original_text 参数,字幕文字永远用配音保存的原始文案。
  • Remotion 动态视频尺寸: calculateMetadata 从 props 读取真实尺寸,修复标题/字幕比例错位。
  • 英文空格丢失修复: split_word_to_chars 遇到空格时 flush buffer + pending_space 标记。

第六阶段:参考音频自动转写 + 语速控制

  • Whisper 自动转写 ref_text: 上传参考音频时自动调用 Whisper 转写内容作为 ref_text不再使用前端固定文字。
  • 参考音频自动截取: 超过 10 秒自动在静音点截取ffmpeg silencedetect末尾 0.1 秒淡出避免截断爆音。
  • 重新识别功能: 新增 POST /ref-audios/{id}/retranscribe 端点 + 前端 RotateCw 按钮,旧音频可重新转写并截取。
  • 语速控制: 全链路 speed 参数(前端选择器 → 持久化 → 后端 → CosyVoice inference_zero_shot(speed=)5 档:较慢(0.8)/稍慢(0.9)/正常(1.0)/稍快(1.1)/较快(1.2)。
  • 缺少参考音频门控: 声音克隆模式下未选参考音频时,生成配音按钮禁用 + 黄色警告提示。
  • Whisper 语言自动检测: transcribe() language 参数改为可选(默认 None = 自动检测),支持多语言参考音频。
  • 前端清理: 移除固定 ref_text 常量、朗读引导文字,简化为"上传任意语音样本,系统将自动识别内容并克隆声音"。

Day 22: 多素材优化 + AI 翻译 + TTS 多语言

  • 多素材 Bug 修复: 6 个高优 Bug边界溢出、单段 fallback、除零、duration 校验、Whisper 兜底、空列表检查)。
  • 架构重构: 多素材从"逐段 LatentSync"重构为"先拼接再推理",推理次数 N→1。
  • 前端优化: payload 安全、进度消息、上传自动选中、Material 接口统一、拖拽修复、素材上限 4 个。
  • AI 多语言翻译: 新增 /api/ai/translate 接口,前端 9 种语言翻译 + 还原原文。
  • TTS 多语言: EdgeTTS 10 语言声音列表、翻译自动切换声音、声音克隆 language 透传、textLang 持久化。

Day 21: 缺陷修复 + 浮动预览 + 发布重构 + 架构优化 + 多素材生成

  • Remotion 崩溃容错: 渲染进程 SIGABRT 退出时检查输出文件,避免误判失败导致标题/字幕丢失。
  • 首页作品选择持久化: 修复 fetchGeneratedVideos 无条件覆盖恢复值的问题,新增 preferVideoId 参数控制选中逻辑。
  • 发布页作品选择持久化: 根因为签名 URL 不稳定,全面改用 video.id 替代 path 进行选择/持久化/比较。
  • 预取缓存补全: 首页预取发布页数据时加入 id 字段,确保缓存数据可用于持久化匹配。
  • 浮动样式预览窗口: 标题字幕预览改为 position: fixed 浮动窗口,固定左上角,滚动时始终可见。
  • 移动端适配: ScriptEditor 按钮换行、预览默认比例改为 9:16 竖屏。
  • 多平台发布重构: 平台配置独立化DOUYIN_/WEIXIN_)、用户隔离 Cookie 管理、抖音刷脸验证二维码、微信发布流程优化。
  • 前端结构微调: ScriptExtractionModal 迁移到 features/、contexts 迁移到 shared/contexts/、清理空目录。
  • 后端模块分层: materials/tools/ref_audios 三个模块补全 router+schemas+service 分层。
  • 开发规范更新: BACKEND_DEV.md 新增渐进原则、DOC_RULES.md 取消 TASK_COMPLETE.md 手动触发约束。
  • 文档全面更新: BACKEND_DEV/README、FRONTEND_DEV、DEPLOY_MANUAL、README.md 同步更新。
  • 多素材视频生成(多机位效果): 支持多选素材 + 拖拽排序,按素材数量均分音频时长(对齐 Whisper 字边界)自动切换机位。逐段 LatentSync + FFmpeg 拼接。前端 @dnd-kit 拖拽排序 UI。
  • 字幕开关移除: 默认启用逐字高亮字幕,移除开关及相关死代码。
  • 视频格式扩展: 上传支持 mkv/webm/flv/wmv/m4v/ts/mts 等常见格式。
  • Watchdog 优化: 健康检查阈值提高到 5 次,新增重启冷却期 120 秒,避免误重启。
  • 多素材 Bug 修复: 修复标点分句方案对无句末标点文案无效(改为均分方案)、音频时间偏移导致口型不对齐等缺陷。

Day 20: 代码质量与安全优化

  • 功能性修复: LatentSync 回退逻辑、任务状态接口认证、User 类型统一。
  • 性能优化: N+1 查询修复、视频上传流式处理、httpx 异步替换、GLM 异步包装。
  • 安全修复: 硬编码 Cookie 配置化、日志敏感信息脱敏、ffprobe 安全调用、CORS 配置化。
  • 配置优化: 存储路径环境变量化、Remotion 预编译加速、LatentSync 绝对路径。
  • 文档更新: 更新 DOC_RULES.md 清单,补齐后端与部署文档;更新 SUBTITLE_DEPLOY.md, FRONTEND_DEV.md, implementation_plan.md。
  • 缺陷修复: 修复 Remotion 路径解析、发布页持久化竞态、首页选中回归、素材闭包陷阱。

Day 19: 自动发布稳定性与发布体验优化 🚀

  • 抖音发布稳定性: 上传入口、封面流程、发布重试、登录失效识别与网络失败快速返回全面增强。
  • 视频号发布修复: 标题+标签统一写入“视频描述”,post_create 成功信号快速判定,超时改为失败返回。
  • 成功截图闭环: 抖音/视频号发布成功截图接入前端,支持用户隔离存储与鉴权访问。
  • 截图观感优化: 成功截图延后 3 秒并改为视口截图,修复“截图内容仅占 1/3”问题。
  • 调试能力开关化: 新增视频号录屏配置,默认可按环境变量开关,失败排障更直观。
  • 启动链路统一: 合并为 run_backend.shxvfb + headful统一端口 8006,减少多进程混淆。
  • 发布页防误操作: 发布中按钮提示“请勿刷新或关闭网页”,并启用刷新/关页二次确认拦截。
  • 后续优化: 发布任务状态恢复机制(任务化 + 状态持久化 + 前端轮询恢复)。

Day 18: 后端模块化与规范完善

  • 模块化迁移: 路由透传 modules/*,业务逻辑集中到 service/workflow。
  • 视频生成拆分: 生成流程下沉 workflow任务状态统一 TaskStore。
  • Redis 任务存储: Redis 优先,不可用自动回退内存。
  • 仓储层抽离: Supabase 访问统一 repositories/*deps/auth/admin 全面替换。
  • 响应规范: 统一 success/message/data/code + 全局异常处理。
  • 素材重命名: 新增重命名接口与 Storage move_file
  • 平台顺序调整: 抖音/微信视频号/B站/小红书,移除快手。
  • 后端开发规范: 新增 BACKEND_DEV.mdREADME 同步模块化结构。
  • 发布管理体验: 首页预取路由 + 发布页骨架与缓存,进入更快。
  • 素材加载优化: 素材列表并发签名 URL骨架数量动态。
  • 预览加载优化: preload="metadata" + hover 预取。

Day 17: 前端重构与体验优化

  • UI 组件拆分: 首页拆分为独立组件,降低 page.tsx 复杂度。
  • 轻量 FSD 迁移: app 页面轻量化,逻辑集中到 features/*/model,通用能力下沉 shared/*
  • Controller Hooks: Home/Publish 页面逻辑集中到 Controller HookPage 仅组合渲染。
  • 通用工具抽取: media.ts 统一 API Base / URL / 日期格式化。
  • 交互优化: 选择项持久化、列表内定位、刷新回顶部、最新作品优先预览。
  • 发布页改造: 作品列表卡片化 + 搜索 + 预览弹窗。
  • 预览体验: 预览弹窗统一头部样式与提示文案。
  • 预览一致性: 标题/字幕预览按素材分辨率缩放。
  • 标题同步与限制: 片头标题同步发布标题,输入法合成态兼容,限制 15 字。
  • 样式默认与持久化: 默认样式与字号调整,刷新保留用户选择。
  • 性能微优化: 列表渲染优化 + 并行请求 + localStorage 防抖。
  • 资源能力: 字体/BGM 资源库 + /api/assets 接入。
  • 音频与字幕修复: BGM 混音稳定性与字幕断句优化。
  • 持久化修复: 接入 useHomePersistence,恢复 isRestored 逻辑并通过构建。
  • 预览与选择修复: 发布预览兼容签名 URL音频试听路径解析素材/BGM 回退有效项。
  • 体验细节优化: 录音预览 URL 回收,预览弹窗滚动恢复,全局任务提示挂载。

Day 16: 深度性能优化

  • Qwen-TTS 加速: 集成 Flash Attention 2 (已停用,被 CosyVoice 3.0 替换)。
  • 服务守护: 开发 Watchdog 看门狗机制,自动监控并重启僵死服务。
  • LatentSync 性能确认: 验证 DeepCache + 原生 Flash Attn 生效。
  • 文档重构: 全面更新 README、部署手册及后端文档。

Day 15: 手机号认证迁移

  • 认证系统升级: 从邮箱迁移至 11 位手机号注册/登录。
  • 账户管理: 新增修改密码、有效期显示、安全退出功能。
  • AI 文案助手: 升级 GLM-4.7-Flash支持 B站/抖音链接提取与洗稿。

Day 14: AI 增强与体验优化

  • AI 标题/标签: 集成 GLM-4API 自动生成视频元数据。
  • 字幕升级: Remotion 逐字高亮字幕 (卡拉OK效果) 及动画片头。
  • 模型升级: 声音克隆已迁移至 CosyVoice 3.0 (0.5B)。

Day 13: 声音克隆集成

  • 声音克隆微服务: 封装 CosyVoice 3.0 为独立 API (8010端口替换 Qwen3-TTS)。
  • 参考音频管理: Supabase 存储桶配置与管理接口。
  • 多模态 TTS: 前端支持 EdgeTTS / Clone Voice 切换。

Day 12: 移动端适配

  • iOS 兼容: 修复 Safari 安全区域、状态栏颜色、Cookie 拦截问题。
  • 响应式 UI: 移动端 Header 与发布页重构。

Day 11: 上传架构重构

  • 直传优化: 前端直传 Supabase Storage解决 Nginx 30s 超时问题。
  • 数据隔离: 用户素材/视频按 UserID 物理隔离。

Day 10: HTTPS 与安全

  • HTTPS 部署: 配置 SSL 证书与 Nginx 反向代理。
  • 安全加固: Supabase Studio 增加 Basic Auth 保护。

Day 9: 认证系统与发布闭环

  • 用户系统: 基于 Supabase Auth 实现 JWT 认证。
  • 发布闭环: 验证 B站/抖音/小红书 自动发布流程。
  • 服务自愈: 配置 PM2 进程守护。

Day 1-8: 核心功能构建

  • Day 8: 历史记录持久化与文件管理。
  • Day 7: 社交媒体自动登录与多平台发布。
  • Day 6: LatentSync 1.6 升级与服务器部署。
  • Day 5: 前端视频上传与进度反馈。
  • Day 4: MuseTalk (旧版) 口型同步修复。
  • Day 3: 服务器环境配置与模型权重下载。
  • Day 1-2: 项目基础框架 (FastAPI + Next.js) 搭建。

🛤️ 后续规划 (Roadmap)

🔴 优先待办

  • 配音前置重构 — 第二阶段: 素材片段截取 + 语音时间轴编排 Day 23 已完成
  • 批量生成架构: 支持 Excel 导入,批量生产视频。
  • 定时任务后台化: 迁移前端触发的定时发布到后端 APScheduler。
  • 发布任务恢复机制: 发布任务化 + 状态持久化 + 前端断点恢复,解决刷新后状态丢失。

🔵 长期探索

  • 容器化交付: 提供完整的 Docker Compose 一键部署包。
  • 分布式队列: 引入 Celery + Redis 处理超高并发任务。

📊 模块完成度

模块 进度 状态
核心 API 100% 稳定
Web UI 100% 稳定 (移动端适配)
唇形同步 100% LatentSync 1.6
TTS 配音 100% EdgeTTS + CosyVoice 3.0 + 配音前置 + 时间轴编排 + 自动转写 + 语速控制
自动发布 100% 抖音/微信视频号/B站/小红书
用户认证 100% 手机号 + JWT
付费会员 100% 支付宝电脑网站支付 + 自动激活
部署运维 100% PM2 + Watchdog

📎 相关文档