seaislee1209
1d40e89418
feat(product-detail): 素材区重做为结构化 — 角色逐个 / 商品图平铺 / 图片成品平铺 / 场景分镜视频按项目打包
...
按"东西的性质"分,不再一锅炖:
- 后端 /api/products/{id}/materials/:角色=立绘+配对三视图(triview_of)逐个、带「被几个项目引用」
(BaseAssetGroup 去重计数);商品图平铺;图片成品(上身图/套图/创作)平铺;场景/分镜/视频素材按视频项目打包
- 前端商品详情素材区重做:角色卡(左上标签+左下「N 个项目引用」/「// 暂未引用」,点开看形象图+三视图)、
商品图平铺、图片成品平铺带类型标签、项目包卡(点开看该项目场景+分镜+视频素材);通用明细弹窗
- 单测 ProductMaterialsTests(角色配对+引用数=1 / 商品图 / 图片成品 / 项目包2素材)
验收:products+assets 22 测绿;tsc+build 绿;无头核对(角色卡「1 个项目引用」+商品图平铺、0 console error)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-22 13:34:39 +08:00
seaislee1209
708b9ea572
feat(review): 全站统一「审核盾」徽章 + 灰盾点击手动提交兜底
...
火山人像审核状态此前三处文案各异(已审核/通过/审核✓…)。统一成一个共享 ReviewBadge:
全色填充盾(无对勾叉)+ 文案 + hover 气泡说明,4 态:
🟢 已过审(active) / 🔴 未过审(failed) / 🟠 审核中(processing,橙盾光扫动画) / ⚪ 待审核(空)
灰盾(未送审)可点 → 提交审核(兜底,不加固定按钮):后端新增 POST /api/assets/{id}/submit-review/
(团队级,仅送审三类),前端点击乐观置 processing。气泡组件顺带成为全站首个统一 tooltip。
- 后端 submit-review 端点 + 单测(送审类 200 / 非送审类 400)
- 共享 components/review-badge.{tsx,css}(盾用 SVG 蒙版填色 + 橙态 rv-sweep 光扫)
- 资产库详情弹窗 / 商品详情素材组弹窗 / 视频流程基础资产 三处全换成它(各自接 onSubmit)
验收:assets 16 测绿;tsc+build 绿;无头核对四态(灰可点+气泡/绿已过审/橙审核中不可点)、0 console error
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-21 22:46:51 +08:00
seaislee1209
4571991deb
feat(library): 资产库重做为「成品库」— 图片成品三类 + 视频成品按项目素材包
...
定义:资产 = 平台产出的成品。原料(商品/模特)归各自的库、半成品(角色/三视图/场景/分镜)归项目,
资产库只装成品 —— tab 从 9 个收成 5 个。
- 后端 /api/assets/video-packs/:视频成品按项目素材包(与「导出全部」同源,取 VideoSegment.adopted_version
真实视频资产,给 TOS 直链 url 供 <video> 播放/取首帧);summary 改只数成品(tryon/kits/creations/others)
- 资产库 _tab_q 加 others(我的上传+未归类兜底);角色/场景/商品图/素材 tab 移除(各回各家)
- 前端 library:tab→模特上身图/平台套图/自由创作/视频成品/其他;视频成品=项目包卡(<video>首帧封面)
→ 点开弹窗看该项目所有片段(可播);图片成品/其他复用原网格
- 单测 VideoPacksTests:按项目分组 + 软删片段排除
验收:后端单测绿(基线 4 失败零新增);tsc+build 绿;无头 0 报错(5 tab + 视频包弹窗 3 段)
注:图片成品「按生成批次成组」待图片趴有真实数据时接线(当前 demo 已清空)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-21 20:54:42 +08:00
seaislee1209
a39d2b8603
feat(video): 视频页「导出全部」— 把项目所有视频片段打包成 zip 下载
...
- 后端 ProjectViewSet 加 export-clips action:逐段从 TOS 拉取已采用视频片段、内存 zip 打包返回下载
(单段失败跳过不毁整包;空项目 400);文件名走 RFC5987 UTF-8 编码兼容中文
- 前端视频阶段 queue-bar 在「上传视频」旁加「导出全部」按钮(下载图标 + 导出中/失败态),
api.exportProjectClips 取 blob → 触发浏览器下载;仅有已完成片段时可点
- 单测 ExportClipsTests:打包全部片段 + 空项目 400
验收:后端单测绿(基线 4 失败零新增);tsc+build 绿;真打包 补水面膜 项目得 950KB zip;无头 0 报错
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-21 20:38:31 +08:00
seaislee1209 and Claude Opus 4.8
9e791a4db9
fix(projects+assets): 项目封面引用真实商品图 + 资产库排除软删资产
...
- 项目卡封面:废弃「项目名关键词→静态 mock 假图」映射(与真实数据脱节,导致全是假面膜图),
改用后端 cover_preview_url(取商品 cover_asset 主图);无商品图 → 干净占位
- 资产库 queryset/summary/facets 补 is_deleted=False:软删资产不再出现在资产库与 tab 计数
(此前 is_deleted 字段在资产库未生效,软删无效)
- 单测 AssetSoftDeleteTests:列表 + 计数均排除软删
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-21 19:44:45 +08:00
seaislee1209 and Claude Opus 4.8
c6e9c7e77b
feat(video): 期3 视频趴 — 人物→角色 + 引用模特库/自动入库 + 分镜合规归类 + 资产库素材
...
后端:
- B 路:视频流程新生成角色立绘+三视图成套 → 自动入模特库(run_triview_task,幂等 additive)
- 合规闭合:三视图 person→tri_view、分镜图 scene→storyboard,两者均加 on_commit 送审(此前只有角色立绘送审,三视图/分镜图漏审 = 合规缺口)
- 资产库 _tab_q:成片 finals→素材 materials(所有视频排除最终成片;最终成片隐藏不列)
- 单测 TriviewAutoEnrollTests:自动入库 + 幂等 + 三视图落审核范围
前端:
- 视频项目资产趴「人物」→「角色」(KIND_LABEL,区块名/新增/空态/详情弹窗一处全改;向导人设 persona 不动)
- A 路:演员库收编模特库 —— 顶部「模特库」tab 取自模特库实体(含官方跨团队模特),选一个即用其形象图作角色参考
- 资产库 library:人物→角色、成片 tab→素材、分类标签补全(模特上身图/平台套图/自由创作/视频素材/最终成片)
- vite.config:端口与后端代理目标可用 VITE_PORT/VITE_API_TARGET 覆盖(默认不变),避免多实例撞车
验收:后端单测全绿(基线既有 7 失败零新增);tsc+build 全绿;无头 0 console error
(资产库角色/素材改名、最终成片隐藏;pipeline 资产趴显角色;演员库模特库 tab 含 5 模特)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-21 19:27:23 +08:00
seaislee1209 and Claude Opus 4.8
c8f3f91d38
feat(images): 期2 图片趴三类 — 模特上身图/平台套图/自由创作 归类+成组+接模特库
...
后端:
- 独立生图三类归类:model+product→model_tryon(模特上身图,引用模特库,不送审) / cover→platform_kit(平台套图) / image→free_create(自由创作);生成演员(model 无 product)仍→person(视频角色,留期3)
- 成组:每次提交一个 batch_id 串起整批,落 asset.metadata;另记 mode + model_entity_id(上身图溯源模特库)
- generate-image 端点透传 model_entity_id;资产库 _tab_q+summary 加 tryon/kits/creations 三类桶
- 单测 StandaloneCategoryTests 直跑 worker 验四态归类全绿(绕开异步 .delay)
前端:
- 资产库 library.tsx 加三类 tab(模特上身图/平台套图/自由创作)+ 计数 + 筛选维度
- ai-tools 模特选择器数据源 person→模特库(listModels 映射,选中传形象图当参考 = 引用模特库),ActorLibrary 同源
- api.ts submitGenerateImage 加 model_entity_id
验收:tsc+build 全绿;无头 0 console error(资产库三类 tab 各归类正确、模特选择器 5 张取自模特库)
基线既有 3 失败(StandaloneImageReferenceTests 异步漂移)零新增
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-21 16:36:29 +08:00
seaislee1209 and Claude Opus 4.8
44e90233ff
feat(models): 期1 模特库地基 — Model 顶级实体 + 模特库页 + 审核范围扩展
...
后端:
- 新增 Model(模特)团队级实体:形象图+三视图+声线(声线尾期),官方模板标签,软删
- Asset.Category 枚举一次加全(model_portrait/tri_view/voice/model_tryon/platform_kit/free_create/storyboard),逐期接线
- 送审范围 person → REVIEW_CATEGORIES{person,tri_view,storyboard}(review.py + adminpanel 队列),图片趴不送审;当前行为不变(forward-compat)
- /api/models/ ModelLibraryViewSet:本团队∪官方模板、官方/我的 tab、真人上传、软删(官方不可删)、跨团队资产引用防越权
- backfill_models 命令把历史成套模特(kind=model + 项目流命名配对)归集成 Model,dry-run 默认
前端:
- 左菜单新增「模特库」顶级入口(person 图标)+ 路由 /models
- 模特库页:全部/官方模板/我的模特 tab + 真人上传 + 模特卡(形象图+三视图缩略+官方标签),仅用 design token
测试:assets 10/10 绿;tsc+build 全绿;无头走查 0 console error(全部5/官方3/我的2,官方标签达标)
基线既有 7 失败(ai/projects provider mock 漂移)零新增
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-20 22:53:46 +08:00
seaislee1209 and Claude Opus 4.8
3469799da5
feat(trash): 商品删除→垃圾桶(软删可恢复)+ 左侧垃圾桶入口
...
后端(无需迁移,复用 Product.status active/archived):
- destroy 改软删(status→archived);正常列表/详情只看 active
- 新增 /products/trash(列已删)、/products/{id}/restore(恢复)、/{id}/purge(彻底删)
- tests.py:软删/列表隐藏/回收站/恢复/彻底删/拒绝彻底删 active —— 5 测试全过
前端:
- api:productsTrash / restoreProduct / purgeProduct
- 左侧导航加「垃圾桶」(新增 trash 图标);route-config 接 /trash 路由
- 新页 routes/trash.tsx + trash-page.css(仅 token):已删商品列表 + 恢复 + 彻底删(二次确认)
- 删除确认文案「不可撤销」→「移至垃圾桶可恢复」;toast「商品已删除」→「已移至垃圾桶」
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-20 19:16:28 +08:00
seaislee1209 and Claude Opus 4.8
cdfcffcecd
feat(admin): Phase 9 收尾治理 — 全局项目监控 + 数据完整性体检
...
后端:adminpanel projects(全局项目流水线监控+状态筛)+ integrity(数据体检:无账户团队/无图商品/过期邀请码/
无文件资产/失败项目/卡 reserved 计数 + totals);AdminProjectSerializer;IsPlatformAdmin。
前端:adminApi adminProjects/integrity;Admin 治理页(体检卡片超0高亮 + 项目监控表状态筛)。
测试:adminpanel 53 单测过(项目列/筛/体检报告);无头 e2e _admin-p9.mjs 4 断言过 + 0 console error(全只读);tsc+build 绿。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-19 22:51:49 +08:00
seaislee1209 and Claude Opus 4.8
4ce7e957d2
feat(admin): Phase 8 模型供应商管理 — provider/model CRUD + 启停 + 定价 + 设默认
...
后端:ModelConfig.is_default + migration;get_default_model 优先 is_default 否则回落最早 active(零回归);
adminpanel providers CRUD(api_key write-only 不回传)+ models CRUD(?provider/capability 筛)+ set-default(同 capability 清旧);
IsPlatformAdmin + 审计。
前端:adminApi providers/models/setDefault;Admin 模型供应商页(供应商表+模型表+启停+定价+设默认+供应商/模型弹窗)。
测试:adminpanel 51 单测过(api_key 隐藏+入库/CRUD/set-default 改 get_default_model);
apps.ai 仍仅 3 个进场前既有失败(零回归);无头 e2e _admin-p8.mjs 5 断言过 + 0 console error
(用一次性禁用 provider+model capability=export,无副作用,跑完删);tsc+build 绿。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-19 22:45:14 +08:00
seaislee1209 and Claude Opus 4.8
39b4467258
feat(admin): Phase 7 计费审计+4层额度策略 — 流水浏览/手动调额/额度策略CRUD+拦截
...
后端:adminpanel ledgers(全局流水+筛)+ adjust(手动调额,落 ADJUSTMENT)+ quota-policies CRUD;
额度拦截 _enforce_quota_policy(单任务/月度/项目)接入 reserve_credit,仅团队有 active 策略才生效(无策略零回归);
adjust_credit helper。修真 bug:log_admin_action 加 savepoint + JSON 安全化(UUID/Decimal),
修复传 serializer.data 致审计报错污染外层事务 → TransactionManagementError。
前端:adminApi 计费/额度系列;计费审计页(流水表+手动调额弹窗)+ 额度策略页(CRUD 弹窗,团队下拉+三类上限+启用)。
测试:adminpanel 44 + billing + accounts = 70 单测过(调额±/超额拒/额度拦截 per_task+monthly/无策略零回归);
无头 e2e _admin-p7.mjs 6 断言过 + 0 console error(一次性团队,不动 demo 余额);tsc+build 绿。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-19 22:33:52 +08:00
seaislee1209 and Claude Opus 4.8
ca1e50d32c
feat(admin): Phase 6 AI任务监控+成本异常 — 全局任务列/筛/详情抽屉/失败重投
...
后端:adminpanel tasks(全局 AITask + status/type/team/anomaly 筛分页)+ detail(payload)+ retry(失败重投,
仅图像类 best-effort 否则 400);is_cost_anomaly(实际>预估×1.5)+ F() 异常筛;IsPlatformAdmin + 审计。
前端:adminApi tasks 系列;Admin 任务监控页(状态 tab + 仅成本异常 chip + 表格成本预估→实际+异常标 + 详情抽屉 payload + 失败重投)。
修真 bug:抽屉缺 .show 类停屏外,补上正常滑入。
测试:adminpanel 36 单测过(筛/异常/详情/重投 mock celery + 非失败/不支持/权限拒);
无头 e2e _admin-p6.mjs 6 断言过 + 0 console error(不点真重投);tsc+build 绿。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-19 22:19:24 +08:00
seaislee1209 and Claude Opus 4.8
5aab8a568f
feat(admin): Phase 5 火山人像审核队列 — 跨团队 person 资产审核(列/筛/批量送审/轮询)
...
后端:adminpanel asset-reviews(列跨团队 person + 状态筛分页)+ submit(批量送审/重试)+ poll(轮询 processing),
复用 assets/review.py,IsPlatformAdmin + 审计;AdminReviewAssetSerializer;修 N+1(prefetch 缓存取首图,列表 5s→1s)。
前端:adminApi 审核系列;Admin 资产审核页(状态筛 + 多选表格 + 绿/红/灰状态盾 + 重试 + 吸底 bulk-bar 批量送审 + 刷新状态)。
测试:adminpanel 28 单测过(mock 火山:队列只列 person/状态筛/批量送审计数/poll 只轮 processing);
无头 e2e _admin-p5.mjs 5 断言过 + 0 console error(只读 poll,不点真送审);tsc+build 绿。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-19 22:07:11 +08:00
seaislee1209 and Claude Opus 4.8
01d4f235ed
feat(admin): Phase 4 质量词 Admin(平台单层) — QualityWord + 生成侧读配置(无配置回落) + 质量词页
...
后端:apps/ai QualityWord(stage/slot/text/sort/enabled)+ migration;services.py quality_words/quality_suffix,
4 个 builder 接入(person/model_tryon/storyboard/video)无配置回落原写死值零回归;adminpanel CRUD + 审计。
前端:adminApi quality 系列;Admin 质量词页(按 stage 分组卡 + 编辑模式开关 + 行内增改删 chip)。
测试:adminpanel 23 + accounts 22 = 45 单测过(CRUD/权限/生成读配置+回落/停用词不取);
无头 e2e _admin-p4.mjs 4 断言过 + 0 console error + live 库零残留;tsc+build 绿。
注:apps.ai 3 个 image_edit 路由测试失败为进场前既有(已 stash 比对 HEAD 同样失败),非本 Phase 引入。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-19 21:52:41 +08:00
seaislee1209 and Claude Opus 4.8
6560633959
feat(admin): Phase 3 平台团队+用户管理 — 列/启停/详情/强制改密 + 团队停用拦登录
...
后端:adminpanel 增 teams(列/详情/启停)+ users(列/启停/强制改密),AdminTeam/User 序列化器;
login 校验团队 status,停用团队成员拒登;停用用户清 token、禁停平台超管;全程 IsPlatformAdmin + 审计。
前端:adminApi teams/users 系列;Admin 团队页(筛选+搜索+详情弹窗+启停)、用户页(启停+改密弹窗,超管行禁操作)。
测试:adminpanel 19 + accounts 22 = 41 单测过;无头 e2e _admin-p3.mjs 7 断言过 + 0 console error
(UI 停用团队→成员登录 400→启用→200;UI 改密→新密码登录 200);tsc+build 绿。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-19 21:39:15 +08:00
seaislee1209 and Claude Opus 4.8
45a4ceae51
feat(admin): Phase 2 邀请码发放管理 — apps/adminpanel 跨团队端点 + Admin 邀请码页
...
后端:新建 apps/adminpanel(跨团队后台容器,/api/admin/);GET/POST invitations(列跨团队码+筛选分页 /
平台发 create_team 开团队码,写审计)+ revoke(写审计),全程 IsPlatformAdmin。
前端:adminApi 分层;Admin 邀请码页(类型筛选段控 + 表格 + 发码弹窗 + 复制邀请链接 + 撤销)接入 AdminApp toast;
Invitation 类型补 kind/team_name;admin-page.css 补段控/表格/弹窗(仅 token)。
测试:adminpanel 9 + accounts 22 = 31 单测过;无头 e2e _admin-p2.mjs 6 断言过 + 0 console error
+ 端到端凭 UI 发的码注册开团队 201;tsc+build 绿。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-19 21:29:55 +08:00
seaislee1209 and Claude Opus 4.8
3f8547564c
feat(admin): Phase 1 注册邀请码逻辑 — 码必填 + kind 分流 + validate-invite + 注册页码优先重做
...
后端:Invitation.kind(join_team/create_team)+ team 可空 + migration;RegisterSerializer 邀请码必填,
create_team 开新团队当 owner+发试用额度、join_team 幂等入伙不重复发额度,删「空码开团队」;
validate-invite 免登录验码端点;团管发码恒 join_team;InvitationSerializer 增 kind/team_name。
前端:注册页码优先(验过才展开;create_team 填团队名 / join_team 只读团队名,不暴露团队列表)、
邀请链接 ?invite= 自动验码、api.validateInvite、验码行/状态提示样式(仅 token)。
测试:accounts 22/22 单测过(RegisterInviteCodeTests + ValidateInviteTests);
无头 e2e _admin-p1.mjs 全断言过 + 0 console error;tsc+build 绿。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-19 21:07:03 +08:00
seaislee1209 and Claude Opus 4.8
443023a1a9
feat(admin): Phase 0 平台超管基础 — is_platform_admin + IsPlatformAdmin + create_platform_admin(admin/admin123) + AdminAuditLog + Admin 后台外壳与路由 gating
...
后端:User.is_platform_admin + migration;权限类 IsPlatformAdmin;管理命令建 admin/admin123(幂等);
AdminAuditLog 模型 + log_admin_action() helper;me/login 对无团队超管优雅返回 team=null;UserSerializer 暴露标志。
前端:routes/admin 后台外壳(分组侧栏 + 概览 + 占位)、/admin 路由解析与 gating(超管直落、非超管纠回)、
侧栏平台入口、admin-page.css(仅 token)、IconKitSvg 补图标。
测试:accounts 11/11 单测过;无头 e2e _admin-p0.mjs 全断言过 + 0 console error;tsc+build 绿。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-19 20:49:34 +08:00
seaislee1209 and Claude Opus 4.8
69163a8f7f
fix(pipeline): 提取闸门按「是否走过正式提取步」显隐,而非 script_entities 存在性
...
脚本生成期有时也会吐 entities(就是那个不稳的旧来源),若按 script_entities 存在性判断,
闸门会被误隐藏、用户看不到三按钮。改为提取步落库时打 metadata.entities_extracted 标记,
前端据此显隐:没走过正式提取 → 盖蒙版露三按钮;走过 → 露卡片。「重新提取」按钮在有实体或
有资产时显示(老项目也能重提)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-19 18:04:45 +08:00
seaislee1209 and Claude Opus 4.8
827fa7fa54
feat(ai): 实体提取解耦 — 定稿剧本后独立提取角色/场景 + 商品参考图永远带上
...
根因:实体跟脚本生成耦合,模型不稳(尤其改稿 revise)常丢实体 → 角色提不出、
参考图全空 → 故事板/视频退化纯文生图(用户 demo 全错的真因)。
- 新 skill ecommerce-entity-extract(按 skill-creator 法写):只提角色+场景,
角色铁律=穿整套衣服/空手/不带与商品同类物/不暴露;商品不提。4 项目实测稳定产出。
- extract_entities_for_project + /extract-entities 端点:读定稿剧本→提实体→
落库覆盖 metadata + 回填每镜 entity_refs(提取为唯一权威来源,脚本生成完全不动)。
- 商品参考图永远带上:_storyboard_reference_images(视频继承)改为无条件带
商品三视图→主图兜底,不再依赖 entity_refs 里有没有商品实体。
- 创建商品后端强制要主图(堵兜底洞:无图商品会让下游参考图彻底落空)。
实测:杂鱼煲(原实体0)→6实体,每镜参考图齐(角色+商品+场景),不再文生图。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-19 17:37:18 +08:00
seaislee1209 and Claude Opus 4.8
e9626d943f
fix(core): 管线参考图 #1 — 商品参考图走主图兜底(原先无商品基础资产组就丢)
...
诊断:实测 _storyboard_reference_images,资产齐全的项目 3/3 全中,链路本身对;
断点在上游资产没配齐/标签错。其中商品最明确:系统非要"商品基础资产组"才认,
但商品天生有真实主图 → 匹配不到商品组时直接用 _product_cover_url(project.product) 当参考。
实测:项目 37197c57 镜0 从 2/3 → 3/3(商品参考图补上);有商品组的项目不重复加。
回归:apps.ai+projects 测试仍 7 个预存 image-provider 失败,零新增。未碰脚本 agent。
附完整诊断 docs/todo/管线参考图链路诊断-2026-06-19.md(根因 #1商品兜底 / #2实体没全生成 / #3标签对齐)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-19 14:04:28 +08:00
seaislee1209 and Claude Opus 4.8
ba855cc219
feat(core): Wave 3.5 邀请制后端 — Invitation 模型 + 端点 + register 改造(只生成迁移不apply)
...
- Invitation 模型:team/code(TEAM-XXXX-XXXX唯一)/role/email/月额度/created_by/expires_at(7天)/
used_by/used_at/status(pending/used/revoked/expired);迁移 accounts/0003(未 apply 远程库,rule 3)
- RegisterSerializer 加 invite_code:有效码→幂等 get_or_create 成员+标used+跳过额度发放;
无码→开新团队当 owner+试用额度(原逻辑);邀请 role 不许 OWNER 降级 ADMIN;不存在/已用/过期→400
- 端点 /api/auth/team/invitations/(GET列/POST生成)+ <id>/revoke/;权限复用 can_manage_team(超管/团管)
验证: django check 0;apps.accounts 测试 5/5 OK —— 含「凭码加入同团队/角色额度对/不重复发额度/
未知码400/普通成员生成403」。认证定调:username 为主标识、不用邮箱注册。
⚠️ Invitation 迁移需用户低峰 apply 到远程 MySQL,前端生成码 e2e 才能跑(逻辑已被测试证)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-19 12:31:14 +08:00
seaislee1209 and Claude Opus 4.8
99a442e883
perf(core): Wave 2 part1 — 复合索引(只生成不apply) + 消息中心 N+1 治理
...
索引(只 makemigrations 看 SQL,远程 MySQL apply 留用户低峰 / rule 3):
- Asset (team,category,-created_at)+(team,asset_type)、CreditLedger (team,-created_at)+
(team,ledger_type,created_at)、Project (team,-updated_at)、AITask (team,-created_at)、
Product (team,-created_at);迁移 assets0005/billing0002/projects0004/ai0008/products0002
消息中心 N+1(ops/views.py):
- type_counts 原 6 次 count(每请求)→ 一次 aggregate(Count(filter=...)) 条件聚合
- ensure_team_notifications 项目花费原逐项目 aggregate(N+1)→ 一次 values('project').annotate(Sum)
验证: apps.ops 测试 3/3 OK;全量 6fail+1err 均为预存 image provider 路由失败(stash 跑 baseline
复现)= 零新增回归;索引迁移在 sqlite 测试库成功 apply
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-19 04:18:30 +08:00
seaislee1209 and Claude Opus 4.8
8a0ae6a19d
perf(core): Wave 0 性能根因 — 连接复用/视频轮询脏检查/图懒加载/隐藏tab停轮询
...
- settings/base.py: MySQL 加 CONN_MAX_AGE=300 + 健康检查 + connect_timeout=5
(development/production 共用,production 经 from .base import * 继承);development 去重
- App.tsx pollVideosQuiet: 收尾 setProjectDetail 改 JSON 脏检查,在途段未变化时
跳过 setState,整棵管线不再每 5 秒空重渲染(纯前端,不碰生成业务)
- ai-tools.tsx: 任务历史网格+列表两处 img 补 loading=lazy/decoding=async
- pipeline.tsx: 审核(8s)+在途资产(4s)纯读轮询加 document.hidden 守卫
(视频5s轮询驱动生成,保守不加;详见进度文档)
验证: tsc 0 · django check 0 · 14 路由 headless boot 0 报错 · 登录 726ms 无假延迟无邮箱
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-19 03:36:07 +08:00
zyc and Claude Opus 4.8
4399da2090
feat(ai): 图像主力从 tokenssr 切到 yunqi(支持 images/edits 图生图)
...
TOKENSSR 余额将尽,切换图像默认 provider 到 yunqi。yunqi 的图生图
端点需 Azure 风格 ?api-version=2025-04-01-preview,不带会 404。
- provider 加 api_version 字段,OpenAICompatible 生图/改图端点自动附加
?api-version=(配了才加,tokenssr 等零影响)
- build_provider 解析 api_version:DB(ModelProvider.metadata)优先 → .env 回退
- 迁移 0007:启用 yunqi:gpt-image-2 为唯一 active 图像模型,禁用其余
- 摘除死代码 YunqiProvider 导出(旧类写死"不支持图生图"会误导)
端到端验证:图生图(三视图,36s)+文生图(14s)均正常出图。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-18 18:15:34 +08:00
seaislee1209 and Claude Opus 4.8
a71be19500
feat(core): 脚本 agent 体感打磨 — skill松绑/对白去重/模型自写收尾/品牌遮罩/删除提速
...
- skill:旁白/对白每镜交给模型按内容判断(去掉「默认旁白·对白按门槛」);visual 加厚撑满15秒
- 脚本 agent:输出协议加收尾交付语 + _closing_summary → summary 事件(替写死的「已生成」)
- 前端:有对白的镜不再重复显旁白;summary 当 AI 气泡;进度时间轴 @keyframes 嵌套失效→移顶层(动画真跑起来)
- 生成遮罩改品牌生成卡(icon-box转圈+标题+动态点+橙扫光条);AI全生确定后不再闪三菜单
- 删除分镜:不再误显改写罩子(拆 rewriteShot);放开「至少保留一个分镜」可删空;删除提速(后端 bulk_update + 前端 liteRefresh)
- 去掉脚本助手标题旁冗余的模型名
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-18 14:54:33 +08:00
seaislee1209 and Claude Opus 4.8
4c21d85ba1
feat(core): 脚本 agent 真流式思考动画 + 场景图16:9 + 资产卡/审核标修复 + 模型收敛
...
- 进度区改竖线时间轴:推理模型 reasoning_content 逐字转发(volcano),状态字=模型实时最新一句+秒数+折叠展开思考全文(替代旧 ProgressStream/ThinkingStream)
- 场景基础资产出图改 16:9(run_base_asset_task size + 提取提示词横屏)
- 已出图立绘主卡不再被在途轮询任务误盖转圈
- 审核态随项目详情持久下发(BaseAssetGroup.adopted_asset_review),刷新不丢徽章
- 设定卡加「← 返回」回三选项;模型选择器固定按 created_at 排序(默认豆包2.0Pro)
- 新增 reasoning 转发回归测试
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-18 11:25:13 +08:00
zyc and Claude Opus 4.8
675b4db0aa
fix(core): 故事板单帧网络超时自动重试 + 在途锁放宽防重复扣费
...
中转站(tokenssr)偶发 Read timeout 会掐掉单帧,4 镜出 3 张卡住不收尾。
出图调用加瞬时错误有界重试(超时/502/连接重置才重试,审核拦截等确定性失败立即抛)。
配套把 poll 在途锁窗口 3min→12min(可配 STORYBOARD_INFLIGHT_STALE_MINUTES),
覆盖 worker 最坏重试时长,避免重试期间任务被判僵尸 → 同镜重复起线程 + 重复扣费。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-18 11:02:17 +08:00
zyc and Claude Opus 4.8
326c34ecd1
fix(core): 资产详情大图随数据显示,缩略图已出大图不再卡转圈
...
- 三视图/立绘大图改为跟数据(url)走,出图完成即显示,不再被在途轮询的
busy 标志挡住——根治「小缩略图已出、大图一直转圈」
- 一并带上工作区其余改动(script_agent / services / tests / ai-tools / actor-library / App)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-18 10:57:02 +08:00
seaislee1209 and Claude Opus 4.8
c3306bcac3
fix(core): 交叉验证修复 — 单镜改稿按 DB 真实镜数(防截镜误扣)+ 模型框点外关闭选择器
...
critical:regenerate_segment_via_agent 改用 _draft_from_version 从 DB ScriptSegment 行重建基准稿(原读 stale content,用户增删镜后 normalize 会按 stale total_duration 截掉真实镜还照扣费)。低危:模型框容器补 chat-model-pick class,点外关闭选择器生效。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-17 22:17:47 +08:00
seaislee1209 and Claude Opus 4.8
03e7949307
feat(core): 模型选择框换 restraint chip 下拉 + worker 并发出图(修 -P solo 串行)
...
UI:脚本助手模型框从『原生 select + inline style』换成复用设计系统的 chip 下拉(向上展开,新增共享 .align-up 变体),去 inline、合规范。并发:本地 worker 从 -P solo(单任务串行=一次只生成一张)改 -P threads -c 4;生产 k8s worker --concurrency 2→4。基础资产/故事板/视频出图可并行。loading 动画基础设施(卡内+全局 spinner)已验证存在。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-17 22:17:47 +08:00
seaislee1209 and Claude Opus 4.8
edaa314261
feat(core): 故事板/视频提示词改用户钦定 @图N 模板拼装
...
故事板:撤『分镜表』回『一镜=一张导演故事板』;refs 版出【设定】@图N是角色/商品/场景 + 导演故事板指令 + 【分镜脚本】(本段约X秒) + 该镜脚本;_storyboard_reference_images 按 角色→商品→场景 排序,@图N 与 image_edit 传图顺序锁死。视频:_video_reference_images 收齐 角色/场景/商品 基础资产 + 本镜故事板帧(四类带类型,角色→场景→商品→分镜图);build_video_segment_prompt 出【设定】@图N…【分镜】根据@图N分镜图…【脚本】该镜脚本;submit_video_segment 传图顺序与 @图N 对齐。新增 _segment_script_text 复用。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-17 22:17:47 +08:00
seaislee1209 and Claude Opus 4.8
016c859004
feat(core): 人物正面氛围图按统一模板后端拼装(全身/纯色背景)
...
新增 build_person_frontal_prompt:电商真人模特,氛围正面全身照,<脚本提取/用户描述>,自然妆容,柔和影棚光,真实质感,单人,纯色背景。管线人物立绘(generate_base_asset kind=person)与模特库 seed(model_library)都改走它,不再把原始描述裸丢生图、不再半身/简洁背景。三视图 THREE_VIEW_PROMPT 保持不变。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-17 22:17:47 +08:00
seaislee1209 and Claude Opus 4.8
1ecb186ddf
refactor(core): 脚本收口——只留 agent 出稿,删旧散文路 + 单镜重跑改走 agent
...
删 /generate-script/ 端点 + generate_project_script + build_script_prompt + 旧单镜 build_segment_rerun_prompt;前端删静默兜底(agent 失败明确报错,不再掉回旧路)+ onGenerateScript prop/api。rerun-script-segment 改用 agent 单镜逻辑(regenerate_segment_via_agent:读全脚本上下文/保留其余镜/落新版本)。根因:旧路不产 script_entities/entity_refs,下游故事板/视频参考图断线→图飘。测试:删 3 个旧 generate 用例 + 重写 rerun 为 agent 版,ai+projects 23 测试除 4 个既有 base-asset 失败外全绿。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-17 22:16:01 +08:00
zyc and Claude Opus 4.8
0695c36f4c
fix(ai): 平台套图改走商品主图参考 image_edit · 模特上身图锁商品+模特双图
...
- 平台套图(cover)以前纯文生图,不参考真实商品主图 → 出图与商品对不上;
现以商品主图为参考图1走 image_edit,锁包装一致性,有模特则参考图2=模特
- 新增 build_platform_cover_prompt_refs;model_url 解析对 cover 模式同样生效
- 补回归测试:cover 传商品主图、model 传商品主图+模特图、无主图回落文生图
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-17 21:58:39 +08:00
seaislee1209 and Claude Opus 4.8
6e73fb53dd
fix(core/backend): review_* 列容忍漏带字段插入,根治上传 1364(防复发)
...
review_status/review_remote_id 加 db_default='';review_error(TEXT,MySQL 不许默认值)改可空。根因:旧代码插入 Asset 不带 review_* 列 → NOT NULL 无默认 → MySQL 1364。迁移已应用到 dev 共享库,补提交迁移文件保持库/代码一致。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-17 21:02:13 +08:00
zyc and Claude Opus 4.8
b714976d38
feat(core): 消息中心对齐设计稿 · 处理记录(真实数据)+ 字号/搜索框/页脚 + 归档接活
...
- ops/views.py: 通知 metadata 写入真实 timeline(项目/资产/计费/欢迎,真时间戳),create_once 给旧通知补齐 timeline
- messages.tsx/css: 新增「处理记录」区块(读 metadata.timeline)+ 补回 .msg-timeline/.msg-step/.msg-log 样式;搜索框结构回设计稿 .msg-search;mono 字号对齐 10.5/10px;空态图标色 token 化
- 归档按钮接活:api.archiveNotification + App 装配 onArchive + 详情页脚归档(后端落 archived_at + 本地乐观移除/扣计数)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-17 20:13:32 +08:00
zyc and Claude Opus 4.8
a0ed8666df
perf(core): 项目列表改轻量序列化 + 计数走真实 count,根治刷新 2-3s
...
/api/projects/ 列表此前与详情共用重序列化器(嵌套 阶段/片段/故事板/时间线 + 每资产算 url),
20 个项目把全套关联拉出 → 实测 ~2-3s,正是每次刷新慢的主因。
- 新增 ProjectListSerializer(轻:名/状态/阶段/product/封面/脚本数/镜数);
ProjectViewSet.get_serializer_class 列表用轻的、详情用全量;
get_queryset 列表走轻查询(select_related product + annotate 计数,不做那串 12 个重 prefetch)。
实测 /api/projects/ 2-3s → 0.48s。
- 新增 /api/projects/summary/(total + by_status,只跑 COUNT,不拉项目对象)。
- 计数显示(侧栏徽标 / 仪表盘 总项目·SKU·N 个)改用分页响应的真实 count(productTotal/projectTotal),
不再用「已加载 20 条」的长度;projects 列表页脚本状态/镜数改读 *_count 字段。
闸:9 页全绿、无瀑布、API 全过;projects 端点提速 ~5x。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-17 19:27:10 +08:00
zyc and Claude Opus 4.8
c62abed536
fix(core): 删脚本分镜联动删故事板帧 + 演员库自取 person + 分镜编辑行抽组件
...
- views.py: delete-script-segment 同步删对应 StoryboardFrame(原 SET_NULL 留孤儿帧致故事板仍显示已删的场),并重排剩余帧 sort_order
- actor-library.tsx: 演员库改自取 person 资产(全局 assets 已懒加载不再全量预载,否则演员库全空),保存后 reload 即时入列
- pipeline.tsx: 抽出 EditableShotField 组件、PromptBox 参数化
- 附 perf-report 产物
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-17 19:18:15 +08:00
zyc and Claude Opus 4.8
f1bc5933ef
perf(core): 非资产全局态也改按页懒加载,bootstrap 从 ~10 接口瘦到 ~6
...
启动只保留「每页 shell 都要」的全局数据:商品/项目(侧栏+导航)、余额(顶栏)、
模型配置(多生成页+pipeline 共用)、未读数(侧栏徽标,page_size=1 轻量)。其余移到各页按需:
- 账户页:流水(本就服务端分页)+ 趋势 + 团队成员 本页自取,充值后刷新。
- 团队页:成员 + 团队动态 本页自取,增删成员/充值后刷新。
- 生图工厂:任务历史 + 任务缩略图本页自取。
- 通知:bootstrap 只取 page_size=1 拿未读数(notificationsBadge),列表由消息中心/团队页各自拉。
- 全局默认分页改 DefaultPagination(支持 ?page_size 覆盖,默认 20 上限 200):
根治 projects/products 等列表端点忽略 page_size、数据过 20 即被迫翻页(同 assets 旧病)。
闸:9 页功能正常、无瀑布、API 检查全过;首屏接口数 5~8(原 8~13)。perf 预算下调到新基线。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-17 18:58:53 +08:00
zyc and Claude Opus 4.8
d959543d43
feat(core): 故事板改为「一场=分镜表」+ 确认故事板按钮气泡引导
...
- ai/services.py: 故事板单帧提示词改为按场拆多分镜、纵向排成竖屏分镜表(不同景别/运镜),并锁人物脸/商品一致性
- pipeline.tsx: 底栏统一「确认故事板」,未生成时点击弹气泡引导先生成(不再假装跳过)
- pipeline-page.css: 配套 sb-confirm-pop 气泡样式
- 附测试截图与流程文档/perf 产物
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-17 18:32:06 +08:00
zyc and Claude Opus 4.8
2f6d3f5823
perf(core): 全站资产改服务端懒加载,撤掉 bootstrap 全量 allAssets
...
不再在启动时一次性拉全部资产(数据多时随之变慢/串多页),各页按需服务端分页/过滤:
- 生图(ImageWorkbench 模特库按 category=person、AssetFactory 按 ai 生成图)页面内懒加载。
- 商品库/项目向导封面图改用后端内嵌 cover_preview_url / images[].preview_url,不再反查全局 assets。
- 商品详情 AI 素材按 ?product 懒加载(上传/生成/采用三视图后刷新)。
- 工作台资产总数走轻量 /assets/summary/。
- App bootstrap 删除 api.allAssets() 与全局 assets state;loadData 仅留必要全局数据。
- 后端 ?product 过滤并集补上 ProductImage 关联资产,等价前端原 belongsToProduct。
- pipeline 用项目详情已内嵌的 *_url 显示,调用处传空 assets(不再依赖全局全量)。
闸验证:9 页功能正常、无分页瀑布、无接口报错;首屏不再含资产全量拉取。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-17 18:25:05 +08:00
zyc and Claude Opus 4.8
ce809b2d32
feat(core): 资产端点加服务端过滤/计数/facets + 商品嵌 preview_url(为前端按页懒加载铺路)
...
- /api/assets/ get_queryset 支持 tab(对齐前端 assetTab 分桶)/category/asset_type/source/
product(metadata.product_id 或 origin_task→project→product)/q 搜索/m_<key> metadata 过滤,
默认 -created_at 排序(无 ORDER BY 分页会重/漏)。
- 新增 /api/assets/summary/(各 tab 计数,供 tab 徽标)+ /api/assets/facets/
(某 tab 下真实存在的 来源/类型/指定 metadata 键取值,供下拉「只列真有的」)。
- ProductSerializer 内嵌 cover_preview_url + images[].preview_url,products/项目向导/pipeline
缩略图不再依赖全局 assets 全量数组反查;product 视图 prefetch 图片/封面资产文件防 N+1。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-17 18:03:07 +08:00
zyc and Claude Opus 4.8
200871847a
fix(core): 商品详情卖点可编辑+去假数据 / 出图后不再整页重载 / 图片长效缓存
...
- 商品详情页核心卖点:编辑态原是纯静态文本、且 save 不提交 selling_points,
既改不了也存不了;改为可改/删/回车增,save 带 selling_points 一起 PATCH。
- 去掉详情页 name/cat/target/卖点 的「设计稿假数据」fallback —— 商品没卖点
时不再凭空显示护肤品卖点,空值显示「未填写」。
- 出图成功后 submitAndPollAsset 不再整页全量 loadData(十几个 setState 触发
全页大重渲染),只刷当前项目详情 + 轻量刷余额。
- TOS 上传对象加 Cache-Control: immutable 长效强缓存,重渲染不再重拉图。
- products 序列化器内嵌商品图/封面 preview_url(并修回错位的 read_only_fields)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-17 18:01:29 +08:00
zyc and Claude Opus 4.8
8ba76e5bb7
perf(core): 资产预览改 TOS 公读直链 + 通知只取首页,减刷新开销与缓存失效
...
- 资产 preview_url 从「逐图签发预签名 URL」改为虚拟主机式公读直链
(https://{bucket}.{host}/{key} )。桶公读已验证免签可访问;直链稳定可被浏览器/CDN
缓存,而签名链每次都变、1h 过期反而打不到缓存。boto3 也移出序列化热路径。
- allNotifications 不再逐页翻全部(原 O(N) 随消息增长拖慢每次刷新),只取首页 100 条
(侧边栏徽标 unread_count + 团队动态仅展示最近 6 条已足够);「共 N」改用后端真实 count。
- perf-probe:page_size 由 API 级硬闸确定性守住后,浏览器端「资产翻页」降为提示
(翻 1~2 页是资产真超 200 的合法分页,仅 ≥3 页才疑似 page_size 失效)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-17 16:58:48 +08:00
zyc and Claude Opus 4.8
1ff7be2b56
perf(core): assets/ledgers 列表 defer 掉 AITask 巨型 payload 列,根治取全部资产 60s+ 慢查询
...
- /api/assets/ 列表 select_related('origin_task__project') 为解析资产归属商品,
会把每个资产关联 AITask 的 request_payload/response_payload(完整 AI 请求/响应 JSON)
整行拖出 → 取全部 200 资产实测 >60s 超时,数据越多越慢(用户报的「刷新越来越卡」)。
加 .defer 这两列后 0.76s,product 仍正常解析、序列化 0 额外查询。
- billing/ledgers 同模式补 .defer(task payload)。ai/billing.summary 早已 defer,assets/ledgers 本是漏网。
- 附 qa/function-audit/perf-probe.mjs 性能验证闸 + PERF-GATE.md(API 确定性断言+浏览器功能守护)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-17 16:48:15 +08:00
zyc and Claude Opus 4.8
9bdd0683f8
fix(core): 商品详情页三视图改走 image_edit 参考真实主图 + 该商品 AI 素材归属
...
- 商品详情页「AI 生成三视图」原走独立生图老链路(纯文生图),只凭商品名脑补,
出来通用图不像真品。改:前端传 reference_product;后端 run_standalone_image_task
据此取商品主图走 image_edit(复用 build_product_triview_prompt_refs 锁包装),
取不到主图优雅回落文生图。图片创作页(自由创作)不带标记,不受影响。
- 商品详情页素材区改为只显示「该商品」AI 素材(asset.product 归属)而非全团队。
- 首登水合带重试,失败不再静默(否则页面卡在全 0,要刷新才好)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-17 15:54:04 +08:00
zyc and Claude Opus 4.8
0d1fce1cc1
fix(core): 基础资产「生成中」占位卡刷新后从后端认领恢复(出图本在 worker 跑,只是前端 loading 丢了)
...
问题:立绘/商品图出图是异步(worker),但 loading 占位只活在前端内存 genBusy + 当前页轮询 Promise,
刷新即丢 → 占位卡退回「待生成」,虽 worker 仍在跑、跑完手动刷新才见。
修复:
- 后端 GET /api/projects/{id}/pending-assets/ 返回在途出图任务(id/kind/label/status,读 request_payload)
- 前端进基础资产趴轮询该端点,据 (kind,label) 用 pendingHas 把对应占位卡置「生成中」;
在途数减少=有任务完成 → onRefreshProject 把占位卡换成真卡。离开该趴停止轮询。
tsc + py_compile + 21 测试通过。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-17 15:36:30 +08:00
zyc and Claude Opus 4.8
296888f0bf
feat(core): 基础资产 Agent 化 — 商品三视图(image_edit 参考主图)+ 人物立绘/三视图异步生成 + 演员库/详情
...
- 商品三视图:有真实商品主图时走 image_edit,以主图为参考锁包装一致(品牌字/配色/外形/Logo)
- 人物:据「某一版立绘」异步生成配套三视图(image_edit,worker 内跑),立绘/三视图各存版本可切换
- 基础资产出图改异步(run_base_asset_task / generate_triview_task),Web 层不被慢出图占住
- 前端:演员库浏览/新增、人物详情(立绘+三视图+版本切换/下载/查看大图)、按 busyKey 的单卡并发 loading(genBusy,替代全局 genBusyKey,各按钮互不阻塞)
- dev:本地连云端 MySQL 复用连接(CONN_MAX_AGE/health check/connect_timeout),仅 development 生效
- 含 projects 测试补充
tsc + py_compile + 26 后端测试通过。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-17 15:10:22 +08:00