feat(#642): 一键生成支持自定义BGM #763
Reference in New Issue
Block a user
Delete Branch "feat/custom-bgm-generation"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
变更内容
一键生成支持用户自定义BGM配置,全链路透传并与模板配置智能合并。
核心改动
bgm_config: dict字段bgm_config JSON字段(migration 005)合并规则(packages/domain/bgm_utils.py)
enabled特殊处理:用户显式传才覆盖,否则保留模板状态测试
代码审查结果 - PR #763
⚠️ 问题(1个需要修改)
plan_cfg = virtual_plan.config or {}获取了virtual_plan.config的引用(假设它是一个字典),随后直接修改plan_cfg["bgm"] = merged_bgm。如果virtual_plan对象是被缓存的单例(例如模板对象在多个任务间复用),这个修改会污染共享对象,导致其他并发任务使用了错误的 BGM 配置。virtual_plan在每次任务执行时都是全新创建的实例。建议修改为plan_cfg = copy.deepcopy(virtual_plan.config) if virtual_plan.config else {},或者确保virtual_plan的来源是线程安全的独立副本。💡 建议(2个可选)
apps/api/app/schemas/generation_task.py 第56行:建议使用更严格的 Pydantic 模型进行字段校验。
bgm_config定义为dict,允许任意 JSON 结构通过。建议定义一个具体的BgmConfig模型(包含enabled: bool,volume: float等字段),以便在 API 入口处就拦截非法数据(如 volume 超出 0-1 范围),避免错误传递到 Worker 环节。packages/domain/bgm_utils.py 第13-32行:建议在文档中明确“空字典”的合并行为。
user_bgm为空字典{},函数会直接返回模板配置的副本。这符合“稀疏更新”的语义,但建议在 Docstring 中显式说明“传入空字典视为无更新,不会清空模板配置”,防止调用者误以为可以通过传{}来清空 BGM。✅ 格式检查通过 | ❌ 逻辑审查需修改 | ✅ 性能无明显问题
🤖 由 AI 代码审查机器人自动生成 | 2026-07-23 10:31:05 | 模型:
🗑️ 预览环境已清理
PR #763 已关闭或合并,对应的预览环境已被清理。