小鱼开发
12625a830d
fix: model_router.py 缺失 VolcengineProvider 导入
...
_load_from_config() 中直接使用了 VolcengineProvider 类方法,
但文件顶部未导入,导致 NameError 使 initialize() 失败。
_model_router 处于半成品状态,后续调用返回无 gateway 的实例,
最终触发 'PlatformGateway 未初始化' 错误。
2026-05-05 21:11:29 +08:00
小鱼开发
4076f316f8
fix: ModelRouter 初始化失败安全机制
...
- get_model_router() 增加 _initialized 检查,之前初始化失败时自动重试
- 防止 lifespan 中 initialize() 抛异常后,_model_router 处于半成品状态
2026-05-05 21:08:58 +08:00
小鱼开发
c38e67ce08
fix: ModelHealth 导入路径 + Pydantic protected_namespaces 警告
...
- model_router.py: ModelHealth 从 adapters.base 移至 providers.base
- script.py: TestModelRequest 添加 ConfigDict(protected_namespaces=()) 消除 Pydantic 警告
2026-05-05 21:00:35 +08:00
小鱼开发
30536276ba
refactor(scheduler): 统一异步任务调度架构
...
核心变更:
- 统一第三方接口架构:所有服务走 PlatformGateway(call_sync/submit_task/query_task/handle_webhook)
- 视频生成(Vidu 对口型)纳入 Async Engine,与 script/subtitle/tts 统一为 POST /tasks/{task_type} 模式
- 新增 VideoHandler、TTSHandler,完善 ScriptHandler/SubtitleHandler
- PlatformGateway 生成 internal_task_id,建立 Redis 双向映射,callback 场景传入 Async Engine task_id 保证映射一致
- SlotManager 新增 acquire_ctx 上下文管理器,所有 Handler 统一使用
- ViduAdapter 状态映射归一化(normalize_state/denormalize_state)
- 移除 ViduService Semaphore 和 tenacity 重试,并发控制完全交予 SlotManager
- nonce 防重放下沉到 CallbackCapable 协议
- Service 层错误统一为 PlatformError,路由层错误信息脱敏
- 废弃 /voice/lip-sync,清理 vidu.py 遗留路由
Bug 修复:
- VideoHandler 轮询阶段后添加 continue,防止已提交任务重复创建
- voice.py synthesize_to_file 变量名冲突(request vs request_body)
- PlatformGateway.submit_task 空 data 防护
- ScriptHandler 动态导入 asyncio 改为模块级导入
- SubtitleHandler 完成时补充 progress=100
文档:
- 更新 AGENTS.md 核心功能、运行时架构、异步调度描述
2026-05-05 20:53:18 +08:00
小鱼开发
f32c1c7703
refactor: 删除 video 任务类型
...
产品无云端视频生成功能,Scheduler 也未注册 VideoHandler,
删除遗留的 video 任务类型及相关代码:
- tasks.py: VideoParams、video 分支
- schemas/task.py: VideoTaskParams
- schemas/__init__.py: VideoTaskParams 导出
2026-05-05 16:56:49 +08:00
小鱼开发
c98cb72598
chore: 更新火山字幕 QPS 配额 2 -> 5(以控制台为准)
2026-05-05 12:01:30 +08:00
小鱼开发
6c1aef276b
refactor: 删除所有流式生成代码
...
项目已明确不做 SSE/流式输出,清理后端所有流式相关代码:
- 删除 Provider 层 generate_stream、generate_stream_with_progress
- 删除 ModelRouter 层 _try_generate_stream、generate_stream_with_progress
- 删除 LLMGateway chat_stream
- 删除 Adapter 层 CHAT_STREAM 常量/分支
- 删除 platform-config.yaml chat_stream 方法配置
- 同步清理 base.py 抽象接口和未使用的导入
2026-05-04 20:27:19 +08:00
小鱼开发
59fd9ea4ea
chore: 升级火山方舟 SDK 5.0.24 -> 5.0.25
...
同步更新 uv.lock 和 requirements.lock。
2026-05-04 20:19:14 +08:00
小鱼开发
af9e8f5d9b
refactor: reasoning_effort 从 extra_body 改为直接传递
...
与官方 curl 示例对齐:reasoning_effort 作为顶层参数直接传递,
不再通过 extra_body 透传。统一三个方法(generate、generate_stream、
generate_stream_with_progress)的传参方式。
2026-05-04 20:14:20 +08:00
小鱼开发
015dfade11
chore: 删除 doubao-seed-2-0-pro 无效的 temperature 配置
...
doubao-seed-2-0-pro 强制固定 temperature=1、top_p=0.95,
API 请求中传入的值会被系统忽略。删除避免配置误导。
2026-05-04 20:11:14 +08:00
小鱼开发
0e5bef64b8
fix: 移除 response_format=json_object,改为依赖 prompt 约束
...
回退上一条推断式修复(模型名匹配没有官方依据)。
改为在 script_service 调用层直接移除该参数:
- system prompt 已明确要求'只输出纯 JSON'
- safe_parse_ai_json_response 已做容错解析和 markdown 清洗
- 不依赖特定模型对 response_format 的支持
2026-05-04 20:05:38 +08:00
小鱼开发
f10d78f63e
fix: 豆包模型不支持 response_format=json_object,添加兼容性判断
...
doubao-seed-2-0-pro 等豆包系列模型不支持 OpenAI 风格的
response_format.type=json_object 参数,会导致 400 错误。
改为仅对非豆包模型(如 DeepSeek、GPT)传递该参数。
2026-05-04 20:03:38 +08:00
小鱼开发
431c54c258
refactor: 前端脚本生成改为异步任务轮询,精简LLM模型,删除图片生成代码
...
- 前端:ScriptCreation SSE 流式改为 createTask + pollTask 轮询
- 后端:LLM 仅保留 doubao-seed-2-0-pro,删除降级链及相关模型
- 后端:删除所有图片生成代码(ImageParams/ImageTaskParams/generate_image)
- 更新 platform-config.yaml、model_router、volcengine_provider、tasks 等
2026-05-04 19:58:32 +08:00
小鱼开发
4c683bec52
docs: 更新 AGENTS.md,同步近期架构变更
2026-05-04 19:40:05 +08:00
小鱼开发
6c0f240369
chore: 删除脚本生成 SSE 流式相关废弃代码
2026-05-04 19:37:30 +08:00
小鱼开发
52ba99e11d
refactor: Scheduler 层统一命名 job → task
2026-05-04 19:18:22 +08:00
小鱼开发
82657c2d65
chore: 删除形象克隆相关代码、配置及注释
2026-05-04 19:06:45 +08:00
小鱼开发
7a858caa01
chore: 删除 MockProvider 及相关 mock 代码
2026-05-04 18:58:40 +08:00
小鱼开发
d466539928
fix: 补全 task_defaults 配置,避免脚本生成误走 MockProvider
2026-05-04 18:56:06 +08:00
小鱼开发
a58b2d1f49
chore: 测试环境 docker-compose 显式配置 CORS_ORIGINS
2026-05-04 18:47:05 +08:00
小鱼开发
e58159fc42
refactor: 第三方平台架构改造(Adapter Protocol + Gateway)
...
Phase 1: 异常体系统一
- 新增 PlatformError / PlatformErrorType 标准定义
- 改造所有 Provider 异常抛出为 PlatformError
- 注册全局 PlatformError exception handler
Phase 2: Adapter Protocol
- 新增 app/ai/adapters/base.py(PlatformAdapter + SyncCapable + TaskCapable + CallbackCapable)
- 新增 app/ai/adapters/constants.py(Method 常量)
- 新增 PlatformConfigLoader(config/platform-config.yaml)
Phase 3: HTTP Client 统一
- ViduProvider 从 aiohttp 迁移到 httpx(注入方式)
- VolcengineCaptionService 改为注入 http_client
- lifespan 统一管理所有 Client 创建和关闭
Phase 4: Gateway 骨架 + Adapter 实现
- 新增 ViduAdapter / VolcengineArkAdapter / VolcengineCaptionAdapter
- 新增 PlatformGateway(call_sync / submit_task / query_task / handle_webhook)
- 新增 LLMGateway(带 Fallback 降级链)
- lifespan 注册所有 Adapter 和 Gateway
Phase 6: 清理与验证
- 从 Settings 移除 VIDU_BASE_URL / VOLCENGINE_BASE_URL
- Provider 改为从 PlatformConfigLoader 读取 base_url
- 清理 volcengine_caption_service 全局单例
- config_loader 默认路径改为 platform-config.yaml
- Scheduler 注入共享 HTTP client
- vidu.py 回调路由使用 Adapter 验签和解析
- ruff 全量通过,应用启动测试通过
2026-05-04 16:07:16 +08:00
小鱼开发
0c921aca11
chore: 清理废弃代码和文档
...
- 删除 anytocopy 相关文件(service、handler、文档)
- 删除 KlingAI / MiniMax 开发文档
- 删除 database-design、mvp-lip-sync-replacement 等过时文档
- 删除旧的 docker-compose.yml(已拆分为 dev/test/prod)
- 删除 config/ai_models.yaml(已合并到 platform-config.yaml)
- 从 .env.example 移除 anytocopy 配置
- 从 tasks.py、schemas 移除 copy 任务类型
2026-05-04 16:06:25 +08:00
小鱼开发
d28227f779
chore: 同步 uv.lock,补全 tenacity 依赖
2026-05-02 23:17:25 +08:00
小鱼开发
e262134148
refactor: 移除 KlingAI 和 MiniMax 相关代码
...
删除内容:
- KlingAI Provider、MiniMax Provider
- Kling 视频/图片/TTS/语音克隆/形象克隆 Service 和 Scheduler Handler
- 已废弃的 TTSService、VoiceCloneService
- config 中 KLINGAI_*/MINIMAX_* 配置项
- ai_models.yaml 中 klingai 平台和模型配置
- docker-compose 中相关环境变量
- .env.example 中相关配置示例
- deploy-test.sh 中相关检查
- Makefile 中 klingai 语义检查排除规则
- KlingTaskStatus 枚举
修改内容:
- model_router.py 移除 KlingAI 平台分支
- voice.py 重写,修复批量合成/文件保存中 service 未定义的 Bug
- vidu_service.py 移除 MiniMax 相关注释
- script_handler.py 更新注释
2026-05-02 23:16:14 +08:00
小鱼开发
70a87465b5
chore: unregister unused KlingAI/MiniMax handlers and imports
...
- Remove KlingAI handlers (video, avatar, image, tts) from scheduler registration
- Remove MiniMaxTTSService import from voice.py (deprecated, migrated to Vidu)
- Keep source files for future reference
2026-05-02 22:47:33 +08:00
小鱼开发
9299891a7f
fix: merge duplicate ViduService class definitions
...
- Remove redundant second ViduService class that shadowed __init__
- Clean up unnecessary fallback code in get_vidu_service and global exception handler
2026-05-02 22:26:37 +08:00
小鱼开发
22057f27fa
fix(vidu): move get_preset_voices to module level
2026-05-02 22:05:23 +08:00
小鱼开发
68e354b5a3
chore(deps): add tenacity for retry logic
2026-05-02 21:56:37 +08:00
小鱼开发
ab9962d333
refactor(vidu): reusable session, semaphore, retry, lifespan management
...
- vidu_provider: single ClientSession with TCP connector pool and explicit timeouts
- vidu_service: Semaphore(10) concurrency limit + tenacity retry (3 attempts, exponential backoff)
- voice/vidu routes: use FastAPI Depends injection instead of new Service() per request
- main.py: initialize Vidu Provider & Service in lifespan, close on shutdown
- add tenacity to dependencies
- remove vidu_tts_service.py
2026-05-02 21:55:20 +08:00
小鱼开发
02b5a89eaf
refactor(script): add timeout and error handling for polish/title
...
- Add 15s asyncio.timeout() to polish_content and generate_title
- Add try/except to /polish route for unified error response
- Add asyncio.TimeoutError handling to /generate-title route
2026-05-02 21:23:50 +08:00
小鱼开发
feddeed950
refactor(script): remove sync endpoint, add thread-pool & timeout
...
- Remove unused POST /script/generate sync endpoint and frontend generate()
- Move JSON parsing/validation to asyncio.to_thread() to avoid event-loop blocking
- Add 60s asyncio.timeout() around entire script generation pipeline
- Migrate volcengine_provider to unified AsyncArk client
2026-04-30 23:51:30 +08:00
小鱼开发
08a430ad9d
refactor: type-driven project meta persistence & remove fallback code
...
Frontend:
- Extract ProjectMeta to types/project.ts as single source of truth
- Add utils/projectMeta.ts with buildProjectMeta(), migrateMeta(), BLANK_META_OVERRIDES
- Refactor saveMetaToLocalFile() from 50+ lines to ~10 lines
- Refactor initProjectStore() with BLANK_META_OVERRIDES to prevent field leakage
- Fix createNewProject() reset logic using BLANK_META_OVERRIDES
- Remove all actualDuration/audioStartTime/audioEndTime fallback in VideoGeneration.tsx
- Add strict assertions in computeAssignedIntervals() (missing data throws)
- Remove 4 lines of dead code (commented imports, redundant disabled, dangling JSDoc)
- Pre-fill actualDuration in adaptScriptShots() and ScriptCreation handleFieldChange()
- Fix fs:allow-exists permission scope for external file paths
Backend:
- Fix extract_project_id_from_filename() rsplit bug (always returned None)
- Fix utils.rs path casing ("Projects" -> "projects")
- Add Vidu callback HMAC-SHA256 signature verification with nonce replay protection
- Update docs/vidu-tts-api.md with callback verification chapter
2026-04-30 18:34:22 +08:00
小鱼开发
737d07587b
fix: useCoverFabric 注册本地字体,修复文字换行计算偏差
...
问题:useCoverFabric.ts 直接使用 'DouyinSans' 字体名渲染封面,
但从未调用 loadCustomFont() 将字体注册到浏览器 document.fonts。
导致 Canvas 测量和实际渲染一直使用 fallback 字体(PingFang SC),
wrapTextByWidth 计算的行宽和 Fabric.js 实际渲染宽度不一致。
修复:在 renderCover 开头调用 loadCustomFont(),
该函数内部有 document.fonts.check() 缓存,不会重复加载。
失败时 catch 并降级到 fallback 字体,不阻塞渲染。
2026-04-30 16:29:16 +08:00
小鱼开发
8cb9e2da12
feat: reload_config 返回错误详情 + 远程配置增加 schema 校验
...
6. reload_config() 吞掉异常详情:
- 返回类型从 bool 改为 tuple[bool, str],包含具体错误信息
- API 层将错误详情返回给前端,便于排查
- 异常统一记录到日志
8. 远程配置无 schema 校验:
- 后端新增 MaterialsConfig Pydantic Model 校验 materials.json 结构
- load_config() 远程/本地配置均先校验再应用,格式错误时抛出明确异常
- 前端 CoverDesign 新增 isValidBgConfig() 运行时校验 bg-config.json
- 校验失败时优雅降级到本地配置,避免页面白屏
2026-04-30 16:20:32 +08:00
小鱼开发
75b1e20633
fix: 删除 AboutUs.tsx 未使用的 setApiBaseUrl 导入,修复 TS6133
2026-04-30 16:10:51 +08:00
小鱼开发
92c6bcec9b
fix: catch 块类型安全 + 视频合成路径分隔符跨平台兼容
...
1. SubtitleBurning.tsx:
- catch 参数显式标注 :unknown
- fallback 从 '压制失败' 改为 String(error),保留原始错误信息
2. VideoComposite.tsx:
- 路径分隔符从单 '/' 检查改为同时检查 '/' 和 '\'
- 修复 Windows 下 '打开文件夹' 按钮变成 '打开文件' 的问题
2026-04-30 16:09:03 +08:00
小鱼开发
35a9eb89ce
fix: 修复 material_service 规范问题 + 背景图 fetch 超时 + CSS 死代码
...
1. material_service.py:
- 删除未使用的 get_settings 导入
- 将 import logging 从函数内移到模块顶部
2. CoverDesign.tsx:
- 远程 bg-config.json fetch 增加 5 秒 AbortController 超时
- 超时后自动 fallback 到本地配置
3. CoverDesign.css:
- 删除 .cover-title-overlay/.cover-title-line(旧版 assjs 遗留)
- 删除 .template-selector/.template-btn 系列(旧版模板选择器)
- 删除 .cover-bg-options/.cover-bg-option(旧版背景卡片)
- 删除 .title-input-section/.cover-hint(已废弃样式)
2026-04-30 16:04:52 +08:00
小鱼开发
bdd582bd76
feat: 标题生成提示词区分视频画面与封面场景
...
后端:
- GenerateTitleRequest 新增 usage 字段(video/cover)
- 根据 usage 渲染不同的场景描述、风格要求、创作注意
- title_system.txt / title.txt 增加 等变量
前端:
- scriptApi.generateTitle 新增 usage 参数
- SubtitleBurning 传 usage: 'video'(视频画面标题)
- CoverDesign 传 usage: 'cover'(封面标题)
2026-04-30 15:55:25 +08:00
小鱼开发
580b39747f
fix: 修复 useCoverFabric 本地路径误判为 HTTP URL 的问题
...
原逻辑 startsWith('/') 将 macOS/Linux 本地绝对路径(/Users/...)
误判为网络请求,导致 404。改为精确匹配 http:// / https:// / //,
其余路径(含 Windows C:\...、UNC \server\...)均走 Tauri fs 本地读取。
2026-04-30 15:47:26 +08:00
小鱼开发
1c31e8126b
fix: 合并 materials.json 中重复的 tiling key
...
JSON 对象中 tiling key 出现两次,后者覆盖前者导致 8 个素材丢失。
合并后共 33 个 tiling 素材,无重复 URL。
2026-04-30 15:44:03 +08:00
小鱼开发
588c2236e6
feat: 封面制作优化 + 素材配置远程化
...
- 背景图配置改为从七牛云 CDN 远程拉取,支持不发版新增图片
- 删除本地 public/bg/ 图片副本,减小包体积
- 封面制作:'换一组'按钮移至标签右侧、优化按钮样式、删除冗余提示
- 封面制作/视频合成右侧预览区分别添加'封面预览'/'视频预览'标题
- 素材匹配服务支持远程 fetch materials.json + reload API
2026-04-30 15:32:10 +08:00
小鱼开发
518b097897
style: 背景图缩略图网格缩小到90%
2026-04-30 14:51:58 +08:00
小鱼开发
2cfcee7d5b
chore: 替换封面背景图为1080x1920高清版本(7张)
2026-04-30 14:49:44 +08:00
小鱼开发
755e84b4d4
feat: 封面背景图改为随机3个展示+换一组
...
- 背景图从 public/bg-config.json 配置文件读取
- 每次随机展示3个背景图
- 新增【换一组】按钮,尽量不与上次重复
- 背景图网格保持3列布局
2026-04-30 14:39:00 +08:00
小鱼开发
937bbfb6e7
feat: 封面制作支持智能生成标题
...
- 主标题/副标题各新增【智能生成】按钮
- 输入框改为单行 input(maxLength: 主标题6字/副标题26字)
- 状态独立(isGeneratingMainTitle / isGeneratingSubTitle)
- 添加 title-input-row / title-generate-btn CSS 样式
2026-04-30 14:33:18 +08:00
小鱼开发
17587b1a35
style: 封面副标题字号 64→72px
2026-04-30 14:27:41 +08:00
小鱼开发
3e20327e55
style: 封面字号调整 主标题144px/副标题64px
2026-04-30 14:26:26 +08:00
小鱼开发
215d1cfa8f
style: 封面导出尺寸改为1080x1920,参数等比例放大
...
- CANVAS_WIDTH/HEIGHT: 720x1280 → 1080x1920
- 主标题: fontSize 110→165, top 320→480, shadow blur 20→30
- 副标题: fontSize 56→84, top 1050→1575, shadow blur 8→12
- 副标题描边: strokeWidth 3→5
- 预览尺寸保持337x600(比例一致)
2026-04-30 14:25:06 +08:00
小鱼开发
d15321596e
chore: 删除 assjs 相关死代码 applyAssJsCompensation
2026-04-30 14:18:46 +08:00
小鱼开发
3a3cd80ade
fix: 标题生成状态独立 + 提示词优化
...
- 大标题/小标题生成状态分离(isGeneratingMainTitle / isGeneratingSubTitle)
- 修复按钮状态联动问题
- 提示词明确区分主标题(抓眼)与副标题(留人)角色
2026-04-30 13:58:56 +08:00