 zycandClaude Fable 5
|
2fcd6d996c
|
fix(deploy): migrate 跨 pod 串行化 + rescale 迁移幂等守卫(测试环境×10⁶事故复盘)
事故:连推 3 commit 触发 3 轮 rolling 部署,多个新 pod 并发跑 migrate 且崩溃重跑,
积分 ×10 rescale 被交错重放——ai.0025 执行 6 次(单价/任务计价 ×10⁶),accounts.0008
执行 2 次(限额 ×100),billing.0003/0004 从未完成(django_migrations 漏记录)。
测试库数据已按精确倍率手工修复并补记迁移记录(备份于本机)。
两层防复发:
1. docker-entrypoint 用 MySQL GET_LOCK('airshelf_migrate') 串行化 migrate,
后到 pod 等锁,拿到时迁移已被记录 → 自然 no-op;
2. 三个 rescale 迁移加 airshelf_rescale_marker 幂等标记(与数据变更同事务提交):
记录丢失/崩溃重跑时,标记在 → 跳过,不会重复 ×10。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-07 11:25:40 +08:00 |
|
 zycandClaude Sonnet 5
|
d466bd60c6
|
feat(adminpanel): 任务监控「回收退款」手动兜底
新增 POST /api/admin/tasks/<id>/reap/:仅限卡在「已预留」超 10 分钟的僵尸任务(SUBMITTED/
POLLING 故意不许杀,视频合法耗时 5-10 分钟+,强杀会与轮询结算竞态),标失败 + 退还冻结积分,
与自动回收 _reap_stale_standalone_image_tasks 同款账务路径,幂等。
自动回收只在同团队下次提交时顺手触发,团队弃用某功能后冻结积分会永久躺着——这是给超管的
手动出口。序列化器加 reapable 字段(与端点闸同口径),任务监控行级「回收退款」按钮。
4 条测试(成功退款+审计/窗口内拒绝/非 RESERVED 拒绝/非超管 403)。
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
2026-07-07 10:38:45 +08:00 |
|
 zycandClaude Sonnet 5
|
bf20de956c
|
feat(billing): 计费商业化重构(积分制)+ 团队差异化调价
统一计价引擎 apps/billing/pricing.py:1积分=¥0.1,平台成本(¥)与用户价(积分)双记账,
视频按火山真实 usage.total_tokens 结算(true-up,终结¥1/段倒贴)+ 首发×1.5毛利系数。
Team.price_multiplier 差异化调价(jimeng同款):挂牌价×系数两步HALF_UP取整,视频类
按下单时的价格/汇率快照结算(中途改配不影响在途任务)。
BillingConfig 单例(汇率/毛利系数/预留buffer,admin可调即刻生效)。存量数据 ×10 rescale
迁移(RunPython+atomic,MySQL 迁移不可中断重跑)。开户赠送归零(DEFAULT_TRIAL_CREDITS=0,
商业决策)。audit_billing 加 I9(卖亏审计)。271 条测试 + tsc/build 全绿。
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
2026-07-07 10:04:00 +08:00 |
|
 zycandClaude Fable 5
|
c5f7eb2acc
|
feat(ai): 自由创作视频生成全量移植(/free-create)——Seedance 文/图生视频+按时长计费+人物素材库
后端:
- free_video.py: 提交/轮询/收藏/软删全链路,复用 AITask(新增 is_deleted/is_favorited, migration 0022)
- video_pricing.py: 按时长 token 计费(×1.10 buffer+clamp); video_errors.py 错误归一; media_probe.py 时长探测
- catalog/volcano: Seedance free-video 模型接入+seed(migration 0023)
- 素材库: FreeAssetGroup/FreeAsset(火山 Assets API 引用登记, migration 0009)+ 上传/轮询/删除接口
- settings: FREE_VIDEO_MAX_CONCURRENT 团队并发闸(默认3); CELERY_TASK_ALWAYS_EAGER 本地联调开关(生产恒关)
- 测试: test_free_video.py 新增; billing/products/projects tests 配套调整
前端:
- /free-create 页面+components/free-create/ 全套(输入栏/@mention 素材引用/生成卡/视频详情弹窗/素材库弹窗)
- api.ts/types.ts 扩展 free-video 与 free-assets 接口; 路由/侧边栏入口接入
bug/: 测试清单 (11)(12) 与截图归档
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-06 10:58:36 +08:00 |
|
 zycandClaude Fable 5
|
5ec69ad91f
|
fix: YYX测试清单16条收口——资产库弹窗层级/批次多选删/商品筛选/模特卡单卡化/垃圾桶清空等
- 资产库:批次弹窗降层(under-confirm 990<999)修单图删除确认弹窗被压;编辑态批次卡多选批删;facets 新增 products 关联商品筛选(前后端,+2 测试);视频成品 tab 补搜索/排序/分页
- 平台套图工作台:「更多」气泡与 icon 左对齐+鼠标移出自动收起;模特卡改单卡(空态「+」占位,点卡进模特库单选回填)
- 工作台:删余额条,冻结/共计移至小标题行右侧(.dash-funds-mono)
- 模特库:点模特卡弹详情(形象图/标签/三视图+灯箱放大)
- 垃圾桶:新增「全部恢复」/「清空垃圾桶」(清空二次确认)
- 视频项目页:字重/阴影等轻量对齐设计规范
- api.assetFacets 返回体逐键兜底:旧后端缺 products 键会致资产库整页 undefined.find 白屏(前后端部署时序防护,浏览器已复现验证)
验证:tsc --noEmit / vite build / apps.assets 测试全过;暂存树已独立编译验证,不依赖工作区其余在途改动
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-02 18:03:26 +08:00 |
|
 zycandClaude Fable 5
|
a048c32527
|
fix(ai): 图片创作重跑三连修——丢参考图/裂新批次/提示词矛盾
① 重跑丢参考图:「重跑这张/重跑整批」原来不带 refs → 后端收不到
reference_image_ids 落到纯文生图,出图与上传素材无关。现 GenBatch.refs
存 assetId(上传后回写;恢复批次由 tasks 接口新带的 id 还原),重跑原样带回。
② 重跑裂新聊天记录:enqueue 每次新铸 batch_id,后端没有「补进原批次」
概念,刷新/切对话后重跑图裂成新卡、原卡失败格还挂着。现生成接口收/回
batch_id(UUID 校验,非法兜底新铸),重跑沿用原批次并打 batch_append 标记;
前端批次卡存 backendBatchId(提交回调即落,整批全失败也不丢),重跑带回。
恢复分组时 rerun 任务不计入「应出张数」→ 补图成功后失败格自然收掉;
批次状态改按「有任务在跑」判定,已有好图+补图在途也能接续轮询。
③ 同批换装一半不换:带参考图模板「严格保留款式/不要换款」与用户要求
(如"生成现代服装的穿着")直接矛盾,模型每张随机听一边。改为只锁主体身份
(人物五官/发型/体型,商品品类/外形/Logo),用户明确要求改变的以用户要求
为最高优先级,未提及的才默认与参考图一致。
测试:apps 全量 214 过(需 --settings=airshelf.settings.test);
新增 test_rerun_with_batch_id_reuses_batch_and_marks_append。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-02 13:40:52 +08:00 |
|
 zycandClaude Fable 5
|
dcc5d7fe50
|
fix(billing): 删任务/删项目级联吞 ACTIVE 预留致 reserved_balance 永久冻结(审计 I2)
- 根因: CreditReservation.task 是 OneToOneField(CASCADE), AITask.project 也是 CASCADE
—— 删项目→级联删任务→ACTIVE 预留行被吞, 账户冻结份额永不归还(实测 4 账户漂移共 ¥42,
且随删项目持续增长)
- 修法: billing/signals.py 挂 AITask pre_delete, 删除前先 release_credit 释放(级联同样
触发, release 自带行锁+幂等); apps.py ready() 接线
- 回归测试 x3: 直删任务/删项目级联/已扣费不重复释放
- qa/repair_reserved_drift.py: 存量漂移回填脚本(dry-run 默认, --apply 落 RELEASE 流水),
已对线上 4 账户执行并复验清零
- qa/function-audit/output: 本轮 18 页模拟点击审计报告(0 真死按钮 0 JS 报错)
验证: 后端测试 213/213 通过, django check 无警告
补齐 aab4d7e: 该提交带走了 signals.py 之外的测试轮改动, 信号挂载点与回归测试在本提交收口
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-02 13:07:09 +08:00 |
|
 zycandClaude Fable 5
|
aab4d7ea4c
|
fix: 测试清单遗留bug批量修复(15条:商品库/消费/团队/设置/消息中心/平台套图/资产库)
- R6 商品图删除不生效: 封面asset移交+绕开prefetch缓存, 前端封面缩图补删除入口
- R48 消息中心长文本与UI框错位: 胶囊单行省略+优先级标签禁压缩
- R70 账单流水筛选: 后端加ledger_type过滤, count随筛选变化, 切筛选重置页码
- R72 月限额改后不刷新: 团队页/消费页自取最新teamSettings, 两页同源
- R83/R86 平台套图提示词框加大+模型胶囊嵌入输入框(复用Pill组件)
- R96 未读角标: 修KeyTextTransform注解过滤触发MySQL 3141致接口500
- R100 工作台记录丢失: 新增GET /api/ai/tasks/workbench/ 同源恢复, 废除localStorage方案
- R104 卖点添加按钮移出输入框, 新建抽屉+编辑态统一
- R106 商品库宽屏锁5列, 10个/页铺满两行
- R108 资产删除改软删+单张删除+回收站二次确认; trash页商品/资产双分区+restore/purge端点
- R109 生成图自动入资产库(person演员立绘除外), 迁移0008存量回填, 移除全部加入资产库入口
- R65 无需改动(22268d6已修, 测旧部署所致)
验证: tsc/build/check/makemigrations --check 通过, 后端测试210/210, perf-probe PASS
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-02 11:30:06 +08:00 |
|
 zycandClaude Opus 4.8
|
22268d608b
|
fix: 测试清单一轮bug修复(商品库/视频项目/设置/消费/平台套图)
- 商品库编辑删图假成功+悬停无删除图标;商品三视图错显角色三视图
- 视频项目演员删除入口;角色三视图防呆;故事板审核失败原因透出
- 设置:管理团队死按钮/通知未接入项屏蔽/邮箱验证链路
- 消费:账单流水切换类型重置分页+独立总页数
- 资产库上传按钮隐藏;月限额两处对齐
- 平台套图:提示词框放大/选模型胶囊内嵌/未读任务角标/工作台记录持久化
- 新建商品独立添加卖点按钮;商品库超1920自适应
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-30 19:46:35 +08:00 |
|
 zycandClaude Opus 4.8
|
b17a716c06
|
feat(ai): 生成失败落站内通知,正文带第三方 API 原始报错
故事板/视频之外,补齐 基础资产/商品三视图/图片创作 三条出图失败路径:
失败时落一条 priority=err 通知,正文 = 友好提示 + 第三方服务商 API 原始
报错(如 400 moderation_blocked),原始报错同存 metadata.api_error。
同任务 dedupe 去重,通知本身出错不影响主失败处理。
排查唐卡展故事板「随机失败」时发现:UI 显示的"胸罩/内衣"提示是写死的
误导文案,真因是 gpt-image-2 概率性 moderation_blocked,原始报错此前
只埋在 AITask.error_message 里用户看不到。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-30 16:05:47 +08:00 |
|
 zycandClaude Opus 4.8
|
438ec6aee0
|
fix(ai): 图片创作带参考图也改用 _FREE_VARIATIONS,堵住第2张广告文案
上一处只修了无参考图的裸文生图分支;带参考图走 build_free_reference_prompt,
index>0 仍复用套图 _COVER_VARIATIONS(含卖点文案/标题价签),致带参考图的
第2张同样凭空出广告文案。改为 _FREE_VARIATIONS 并显式禁止画面加文字。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-30 14:20:56 +08:00 |
|
 zycandClaude Opus 4.8
|
a020a3153a
|
fix(ai): 图片创作自由模式改用 _FREE_VARIATIONS,第2张起不再凭空出广告文案
纯文生图同批多张时复用了套图的 _COVER_VARIATIONS,其中"卖点文案分区/
留出标题价签区"等指令让模型在第2张起自己画出护肤广告文案。自由模式
新建 _FREE_VARIATIONS(只换视角/景别/光线/机位),并显式禁止画面加任何
文字/卖点/标题/价签。套图 mode=cover 仍用 _COVER_VARIATIONS,不受影响。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-30 13:34:44 +08:00 |
|
 zycandClaude Opus 4.8
|
4d2b9343b3
|
feat: 角色重跑参考当前立绘+提示词,保持人物一致 (row42)
原「重跑」立绘是纯文生图,每次重抽成另一个随机人。改为:角色已有当前立绘时,
重跑传该立绘作参考图 → 后端走 image_edit(参考立绘+提示词),保持同一人物相貌/发型/身份一致。
- generate_base_asset 新增 reference_asset_id;person 有参考图则 image_edit + build_person_portrait_prompt_refs
- run_base_asset_task image_edit size 按 kind 区分(person 立绘竖 1024x1536,商品三视图横)
- 全链路透传 reference_asset_id:pipeline.regenPortrait(传 viewPortraitAsset)→ genBaseAsset →
onGenerateBaseAsset → api.generateBaseAsset → generate-base-asset 端点
场景重跑不受影响(仍文生图);需部署生效(后端)。
构建: tsc=0/build=0; py_compile OK; projects+assets 测试无新增回归(基线 4 fail 2 err)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-30 13:20:47 +08:00 |
|
 zycandClaude Opus 4.8
|
16219a4132
|
feat: 图片创作每张图加「加入模特库」按钮 (row41)
图片工作台单图「更多」气泡新增「加入模特库」(与「加入资产库」并列):
把该生成图复用为模特形象图建 Model 条目,加入后变「已加入模特库」禁用。
后端新增 POST /api/models/enroll-asset/(ModelLibraryViewSet.enroll_asset):
复用已有资产作 portrait_asset 建 Model,不重新上传/不二次扣费;同一资产幂等返回。
需部署生效(后端)。
构建: tsc --noEmit=0, npm run build=0; 后端 py_compile OK。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-30 13:11:50 +08:00 |
|
 zycandClaude Opus 4.8
|
76d59d06fe
|
fix: 视频项目第二步复用商品库已生成的三视图,不再「缺三视图」(ZWQ#5 续2)
商品库三视图走 standalone Asset、视频项目走项目级 BaseAssetGroup,两套存储不互通 →
商品库生成/采用的商品三视图,进视频项目第二步基础资产读不到、显示「缺三视图」。
修:项目详情 retrieve 时惰性单向同步(幂等,沿用 settle_video_completion 同款自愈模式)——
若商品已有 standalone 三视图(metadata.view=three_view + product_id)但项目商品组尚无采用资产,
就 seed 进项目商品 BaseAssetGroup(candidate+adopted)。已在项目内生成过的不覆盖。
依赖上一commit给商品库三视图打的 view=three_view 标记。
projects 测试:基线已有 4 失败 2 错误(环境 provider 未配),本改动无新增回归。需部署生效。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-30 11:47:07 +08:00 |
|
 zycandClaude Opus 4.8
|
77759678a7
|
fix: 商品库生成的三视图打 view=three_view 标记,刷新不丢 (ZWQ#5 续)
真因:商品库点「AI生成三视图」走 reference_product 路径,产出资产 name=「图片创作」、
metadata 只有 mode/product_id —— 没有 view=three_view,也非 tri_view 类。导致:
①商品库详情三视图面板刷新后认不出(显示「尚未生成」、采用也丢);
②视频项目第二步基础资产读不到「商品已有三视图」。
修:reference_product 资产与视频项目基础资产阶段生成的商品三视图同款标记 ——
category=product_image + 名字含「商品三视图」+ metadata.view=three_view + product_id。
这样 products is_triview(排除 product_image 不误入角色区)、商品库前端回填(view===three_view)、
视频项目商品三视图判定都能认出。需部署生效;存量旧资产无标记不追溯。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-30 11:40:23 +08:00 |
|
 zycandClaude Opus 4.8
|
b0b3ac2348
|
fix(test-round): 测试清单一批 bug 修复 + 团队月限额持久化
后端:
- accounts: 团队级月限额持久化(Team.monthly_credit_limit 三态 + PATCH/GET
/api/auth/team/settings/,刷新不丢,PMC#12);头像上传 500→502 可读错误;
设备下线真失效(删并重建 token,旧 token 401)
- assets: 审核类目加 model_portrait,消除三视图"无需审核"误报
- ai/projects/products: 模特已有三视图复用、产品三视图同步回商品库
(metadata.view=three_view)、真人模特三视图回写
前端:
- 商品图删除判断改用真实图片数;团队成员弹窗禁点外部关闭
- 图片预览骨架铺满占位;平台套图左侧栏折叠改导航同款;收件箱长文换行对齐
- 团队月限额改真落库(乐观更新+失败回滚)
测试:新增 TeamSettingsTests(5 条),accounts 全套 36 tests 通过;前端 build 0 error
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-29 18:50:22 +08:00 |
|
 zycandClaude Opus 4.8
|
6f9b728ac3
|
fix(视频): 场景/商品也送火山审核, 避免含真人参考图被判「疑似真人」拒
场景图与商品图可能出现真人(模特出镜/上身), 此前从不送审, 视频路只能
传原始直链 → 火山报 InputImageSensitiveContentDetected.PrivacyInformation
→ 整批段失败。现按角色流程把 scene/product_image 也纳入送审:
- REVIEW_CATEGORIES 增加 scene + product_image(送审 + 轮询自动覆盖)
- 场景/商品基础资产生成后 on_commit 自动静默送审, 拿到 remote_id
→ 视频路 _seedance_ref_url 换成 asset:// 素材库引用即可放行
- 前端场景卡 + 商品三视图面板挂同款审核盾牌, 可查状态/手动补送审
未改动生成前硬性过审闸(避免无真人的场景/商品被误拦; asset:// 在
processing 态也能引用, 故不拦也能正常出片)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-29 17:01:16 +08:00 |
|
 zycandClaude Opus 4.8
|
ffada7caab
|
fix: 测试清单(8) 新一轮 — ZWQ/PMC/设置/团队 多项修复
视频/工作台/商品库(ZWQ):
- row19 视频阶段移除已取消的【上传视频】按钮 (pipeline.tsx)
- row20 工作台统计栏(总项目/进行中/成片)点击跳转视频项目对应 tab (dashboard/projects/route-config/App)
- row21 最新项目跳转改用真实 projectId, 不再跳到最近打开项目 (dashboard.tsx)
- row22+PMC28 网格/列表视图模式持久化(localStorage), 跨菜单记住用户选择 (projects/ai-tools + 新 hook use-view-mode.ts)
- row24 已有三视图的演员/模特直接复用, 不再强制点AI生成三视图 (pipeline.tsx)
图片生成/设置(PMC):
- row27 任务中心: 6个进行中状态补全归类, 不再把生成中误判为失败栏 (stage-config.ts)
- row29 头像上传500: avatar_url 存公读直链替代超长预签名URL(URLField max_length=200溢出) (accounts/views.py, 需部署)
- row30 显示名保存后回显: 改读 first_name 回退 username, 修刷新仍旧名 (settings.tsx)
- row31/32 隐藏【创作默认】【显示】两个设置模块 (settings.tsx)
平台套图(YYX):
- row3 图片预览铺满占位 (ai-tools-page.css)
团队:
- PMC25 充值/邀请成员/设置月限额三弹窗禁止点遮罩误关 (team.tsx)
含平台套图线上提示词优化(services.py/views.py/api.ts, 前序会话遗留一并提交)
构建: tsc --noEmit=0, npm run build=0 (1755模块); 后端 py_compile OK
注: row29 头像/后端项需部署生效
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-29 16:45:29 +08:00 |
|
 zycandClaude Opus 4.8
|
f3b89f3d49
|
fix: 测试清单(7) 第7轮修复 — ZWQ/PMC/团队 8处真bug
- ZWQ-1 商品库: 编辑删图真生效 + 刷新后悬停垃圾桶图标恢复 (products.tsx/css)
- ZWQ-2 工作台: 最近项目进度条 5→4 段对齐视频项目, 完成态末段红→绿 (dashboard.tsx)
- PMC-4 消息中心: 收件箱文字错位修正 (messages-page.css)
- PMC-5 图片生成: 平台套图费用预估漏乘平台数, 改为 平台数×候选数×单价 对齐实扣(仅改展示, 不动扣费) (ai-tools.tsx)
- PMC-10 火山生图: 失败不再吞 response body, 错误体上抛便于定位 (volcano.py)
- PMC-11 团队: 创建账户弹窗禁止点遮罩误关 (overlays.tsx + team.tsx)
构建: npm run build EXIT=0 (1754 模块); volcano.py AST OK
注: PMC-10/YYX-8角标 等后端项需部署生效
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-29 11:41:00 +08:00 |
|
 zycandClaude Opus 4.8
|
6e7425048c
|
fix: PMC 测试清单未完成项 + YYX#row22 未读角标
PMC#16 账户登录地址不正确:
- 写死的 https://airshelf.com/login(不存在的域名)改成 ${location.origin}/login,
与邀请链接同源,成员拿到的就是当前真实访问地址。
PMC#17/#18 成员三档额度只有月度生效、日/总纯装饰 → 列表显示与配置对不上:
- TeamMember 新增 daily_credit_limit / total_credit_limit(0=不限,迁移 0006);
- reserve_credit 逐档真实管控(每日/每月/累计总额),口径=窗口内 CHARGE 流水 + 在途预留;
- 成员列表"每日额度"由写死"不限"改成真实日额度+今日已用,并新增"总额度"列;
- 创建/编辑弹窗三档额度真入库真生效;补 3 个计费单测(日/总拦截、0=不限)。
PMC#24 同批生成的图片文字/内容雷同:
- 根因=套图/自由创作同批 N 张用同一 prompt 且无变化(只有模特上身图按 index 变);
- 给平台套图/自由参考/纯文生图都加按 index 的版式变体,避开传 seed(防中转站 400)。
PMC#25 重跑应在原任务上重跑而非新开任务:
- 全批"重跑"改为原地复位同一批次卡;"重跑这张/再生成"改为补图进原卡(不覆盖好图、不新开任务)。
YYX#row22 图片生成未读角标(本仓库既有改动一并提交):
- AITask 新增 read_at(迁移 0020 + 索引一致性迁移 0021);导航栏"图片生成"未读胶囊、
商品预览右下角未读分数;查看某商品即标记其生成任务已读、清零角标。
注:PMC#14/#15/#20/#22/#23 早前提交已修,需部署重测;PMC#13/#21 为 provider 侧
生成失败,代码侧重试/退费/僵尸回收/错误外露已就位,需部署后看真实 error_message 定位;
PMC#19 收件箱标记与设计稿逐字一致,待截图复现。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-27 18:27:15 +08:00 |
|
 zycandClaude Opus 4.8
|
2e1c28abea
|
fix(image-gen): YYX 测试清单未完成项一轮修复
- 加入资产库入口删错对调:恢复单图「更多」入口(单图粒度入库),
删掉整批底部气泡里与独立按钮重复的入口(cover/model/对话流)
- 新建商品抽屉补显式「添加卖点」按钮(原仅回车确认太隐晦)
- 平台套图筛选生效 → 结果区顶部「已开启筛选」提示栏,点清空退出
- 去掉结果批次卡白色容器/边框/内边距+底部分割线,图片区更大
- 未读生成任务角标:AITask 加 read_at 字段(迁移 0020)+ unread/
mark-read 接口;导航「图片生成」数字胶囊 + 工作台商品缩图右下未读分数;
30s 轮询,进任务中心全清、工作台看哪个商品清哪个
注:同区文件含上一轮未提交的 PMC#25 重跑/追加批次逻辑,一并带入。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-27 18:26:16 +08:00 |
|
 zycandClaude Opus 4.8
|
00e606a6a6
|
fix: 清单4 未完成项二轮(视频项目收口/选用角色/场景空镜/场景刷新 + 4:5 尺寸)
ZWQ#15 视频进度卡 3/4(真因补全):
- current_stage 没推到 VIDEO 时 settle 守卫直接返回 → 永不收口。
submit/poll/adopt 幂等补推 current_stage→VIDEO;进详情(retrieve)检测全段已出片即自愈收口。
存量卡死项目一打开就自动变「已完成」。+2 测试
ZWQ#7 演员库选用角色未自动「已过审/已采用」:
- 真实流程是 attach(选用),非详情弹窗按钮。attach 时显式置 adopt=adopted +
人物立绘自动送审(on_commit)。+1 测试
ZWQ#13 场景出真人致视频被拒(加强):
- 场景空镜约束改为显式压过脚本描述里的人物词(「即使上文提到人也只画环境」)。
ZWQ#17 场景生成中刷新跳新窗口:
- 正在生成的场景草稿不再落盘 → 生成中刷新页面不会与新实体卡并存成两个窗口。
附:平台套图 4:5 尺寸 1664x2080→1728x2160(≥Seedream 5.0 最小面积 3686400px,否则 ARK 退 400)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-27 17:03:17 +08:00 |
|
 zycandClaude Opus 4.8
|
8f32ad69d3
|
fix: 电商测试清单一轮 bug 修复(视频项目角色/场景 + 图片工作台 + 视频收口)
视频项目(ZWQ):
- 演员工作台保存后「我的演员」仍 0 个:保存时加入资产库(in_library=True)
- 资产详情「应用当前角色」自动送审(不再要手动点灰盾)
- 「我的演员」卡 + 待生成 seed 卡补删除入口(垃圾桶,两步确认)
- 新增场景未生成就刷新会丢:sceneDrafts 按项目持久化 localStorage
- 场景 AI 生成强制叠加「无真人」约束,避免出真人致视频被火山拒
- 进入项目默认落到当前阶段(不再恒显第 1 阶段)
- 视频已出但进度卡 3/4:submit/poll/adopt 幂等补推 current_stage→VIDEO,
否则 settle_video_completion 因阶段守卫直接返回、永不收口 completed
图片工作台(PMC):
- 生图走 action 全局单飞锁致并发重跑/多平台套图被拒成「失败/少出图」:
action 加 concurrent 选项,生图不占单飞锁
- 切模块再切回状态丢/数量少:每批各自落盘 pendingIds(onSubmitted 回传),
切回时全部批次各自续轮询
附:含一处早前未提交的图片创作改动(选火山+传参考图强制切 gpt-image-2 + gen 气泡溢出 CSS)。
新增/通过测试:AttachOfficialModel、商品图删除、视频卡阶段收口、参考图强切模型。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-27 15:11:29 +08:00 |
|
zyc
|
ce7eaefe1d
|
生图模型可选(火山/gpt-image)+ 模特上身图提示词强化 + 多会话等改动
本轮(生图模型选择 + 火山接入):
- 工作室新增「生图模型」选择器(模特上身图/平台套图头部 chip + 图片创作底部 Pill),
默认火山 Seedream,可切 gpt-image-2;选择写入 localStorage,下次进页面读回
- 后端 resolve_image_model 解析所选模型;enqueue_standalone_images 接 image_model
- worker 按模型能力分流:有 image_edit(gpt-image)走多图编辑;无(火山)走
image_generation(image=参考图);新增 _ratio_to_volcano_size 让火山按比例出图
→ 内衣等敏感品类用火山可绕开 gpt-image 的 sexual 内容审核
模特上身图提示词:
- 穿戴/非穿戴分流、按 index 变化动作场景镜头、负面词尾接、多图参考序号自适应
- _product_reference_urls:商品参考真实上传图优先、排除 AI 生成图、可多张
其他(并入此前各会话未提交改动):
- 图片创作多会话(ImageConversation + migration 0019)、任务中心按类型过滤
- accounts/projects/assets/team/auth 等零散调整、相关测试
- 测试脚本(tryon_*.py)、测试清单(core/bug/*.xlsx)
|
2026-06-27 14:00:28 +08:00 |
|
 zycandClaude Opus 4.8
|
0a519ca892
|
feat: 任务中心只展示生图任务(模特上身图/平台套图/图片创作)
- AITaskViewSet 支持 ?task_type=a,b,c 过滤
- 前端任务中心请求 task_type=person_image,product_image,过滤掉
entity_extraction/script_*/storyboard 等流水线内部任务,只留生图工作室产出
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-27 11:04:40 +08:00 |
|
 zycandClaude Opus 4.8
|
26577b99b1
|
feat: 生图模型可选(火山/gpt-image) + 工作台图「加入资产库」收纳 + 任务中心排序修复
- AI 工作室生图支持显式选模型:resolve_image_model 解析 volcano(Seedream 图生图,
无 image_edit 时走 image_generation 带参考图)/ gpt-image(image_edit 多图编辑),
未选回落系统默认;enqueue_standalone_images 透传 image_model
- 资产库收纳:Asset 加 in_library 字段(迁移 0007,既有资产 db_default=True 不动);
工作台生成图默认 in_library=False,只在工作台展示,用户「加入资产库」后才进库列表;
assets 视图/序列化器/library 页/types 配套
- 任务中心修复:AITaskViewSet 默认 order_by(-created_at),前端 aiTasks 取 page_size=200。
原因:列表无排序时 MySQL 按 UUID 主键乱序返回,把一批旧失败记录顶到首页,
前端又只取首页 20 条算 全部/已完成/失败 → 误显示「全部失败」(实为 421 成功/少量失败)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-27 10:34:12 +08:00 |
|
zyc
|
de4b20cc7b
|
模特上身图提示词重构 + 图片创作页 UI 调整
后端(模特上身图提示词):
- build_model_tryon_prompt_refs 重写:穿戴/非穿戴分流(穿戴=真实穿身替换原衣,
非穿戴=手持/佩戴/使用不动原衣)、每张按 index 变化动作/场景/镜头、负面词尾接、
多图参考序号自适应(参考图1~N=商品,参考图N+1=模特)
- 新增 _product_reference_urls:商品参考图真实上传图优先、排除 AI 生成图、可多张(≤3),
无真实图回落 cover
- worker run_standalone_image_task 模特分支改用多图取图 + 传 index/n_product
前端(图片创作/工作室):
- 生成数量改 1/2/4;图片比例新增「手动输入」(宽:高 两输入框)
- 临时隐藏「商品库」按钮
- 模特卡:去掉 // 真人模特,标题改图片底部白字遮罩层 + 单行省略
- 工作室壳负边距对齐 .content padding,修复上下被遮挡/裁切
其他:并入此前未提交的商品页改动、脚本 Agent/格式实测文档与 demo
|
2026-06-27 09:31:44 +08:00 |
|
 zycandClaude Opus 4.8
|
4c8b2d1902
|
feat: 出图报错捕获真因 + 翻成前端友好提示(故事板)
老板/研发要求:有报错时把真因抓出来,做成前端友好提示。
- 捕获真实错误体(openai_compatible._raise_with_body):取代 raise_for_status()。
yunqi 的真因(moderation_blocked / safety_violations=[sexual])只在 body 里,
原来只剩状态行「400 Bad Request for url」→ 真因长期不可见。现在完整抓出。
- friendly_generation_error():把原始报错翻成中文友好提示(内容审核/超时/限流/
凭证/参考图被拒…),前端直接展示;原始报错留 task.error_message 供研发排查。
- 故事板失败:友好提示存 shot.error_message;并撤回「重试 400」——审核拦截重试
也是白拦,改成快速失败+提示,引导用户改措辞(如避免「胸罩/内衣/抚摸/贴身」)。
- 前端:失败帧缩略图加红色「⚠失败」角标(hover 看原因),主视图显示完整友好提示;
不再灰着没反应。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-26 17:03:02 +08:00 |
|
 zycandClaude Opus 4.8
|
dea9dbb3ed
|
fix: 修复资产/视频/三视图三处 bug + 脚本模型切 YunQi gemini
1. 视频「全部生成」串行短路:任一段提交失败就 break 致后面段不提交
(4 个框只跑 2 个)→ 改 Promise.allSettled 并发,单段失败不拖累其余,
部分失败也刷新并如实报告。(App.tsx)
2. 基础资产/三视图 AI 出图偶发失败「生成不出来」:中转站瞬时抖动
(网络/5xx/429/空返回)一次失败即退费 → 加退避重试 3 次,永久错误
(4xx 内容违规)仍立即退费。(services.py run_base_asset_task/run_triview_task)
3. 商品三视图无法用已有素材:商品卡加「使用已有素材」,选商品已有图 /
上传本地图直接 attach 成三视图(不走平台 AI 生成、不计费)。(pipeline.tsx)
4. 脚本助手:tokenssr 欠费致 GPT-5.5/Gemini 全挂 → 文本模型切 YunQi。
实测 YunQi gpt-5.5 频道扛不住重型结构化任务(skill 全提示词仅 1/5 成功、
常吐空无 JSON),gemini-3.1-pro 5/5 稳定 → 默认改 gemini,停用 gpt-5.5。
按「一 provider 一 key」拆 yunqi_gpt / yunqi_gemini 两 provider。
(.env / settings / 迁移 0017+0018)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-25 12:00:03 +08:00 |
|
 zycandClaude Opus 4.8
|
8222a46202
|
fix(pipeline): 视频为末步时收口项目完成态 + 列表 5→4 步同步
V1 雪藏「拼接导出」第 5 阶段后,完成态(COMPLETED)只在 export.py 拼接成片时
才置,导致视频全部出片的项目永远卡在 videoing,列表末格一直闪烁。
- 后端:新增 settle_video_completion(幂等)+ VIDEO_IS_FINAL_STAGE 开关。
全部片段出片→项目 completed、video 阶段标成功;某段被重跑→退回 videoing。
挂 retrieve(自愈历史卡住项目)/poll-video-segment/submit-video-segment/
adopt-video-version 四入口;收口直接查库,不吃 prefetch 旧缓存致误判。
V2 恢复导出把 VIDEO_IS_FINAL_STAGE 置 False,完成判定交回 export.py。
- 前端:项目列表/网格进度从 5 步同步成 4 步(PROJ_STAGE_TOTAL=4),
export 阶段并入第 4;已完成项目末格走 done(绿)不再用闪烁的 cur。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-24 17:32:12 +08:00 |
|
 zycandClaude Opus 4.8
|
658aaa222f
|
feat(storyboard): 故事板改分镜制(单场独立重跑/历史)+ 视频过审闸 + 审核前端如实化
三块改动在 services/views/pipeline/App/api 等文件按行交织、且过审闸后端依赖故事板新
模型,无法拆成各自独立可编译的提交,故合并为一次:
· 故事板分镜制:新增 StoryboardShot/StoryboardShotVersion(对标 VideoSegment/Version)
+ 数据迁移(采用版每帧转一 shot+已采用版本)。每镜一个 shot,各自历史版本,可单场
重跑、逐场切换/采用,新增「开始生成故事板/单场重跑/采用某版」端点。重跑非阻塞(后台
静默轮询出图,不锁其它场按钮);历史「查看」与「采用」分离(切版本不丢在制重跑)。
视频取分镜图/删分镜清理/过审闸全部改读 storyboard_shots。
· 视频生成前过审闸:点生成校验含真人脸的人物立绘/故事板分镜是否过审,未过审弹窗列出
哪一镜/哪个,可一键送审,挡住不生成(collect_video_review_blockers + precheck 端点)。
· 审核前端如实化:不再 `|| "processing"` 伪造审核中;送审失败经 onNotify 如实提示;
审核轮询扩到视频阶段,送审后能看着盾变绿。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-24 17:11:55 +08:00 |
|
 zycandClaude Opus 4.8
|
d6cb280018
|
fix(assets): 手动送审如实回报,送不出去返回 503 而非空态
submit_asset_for_review 改为返回 bool(是否真进入审核);submit-review 端点据此:
当审核服务未启用/未配 SDK/火山未回 Id/调用异常导致没真正送出去,且素材非终态时,
返回 503「审核服务暂不可用」而不是空 review_status —— 否则前端会把「没送出去」
误显示成「审核中」,刷新就打回灰盾(待审核)。新增 503/200 两条回归测试。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-24 17:11:04 +08:00 |
|
 zycandClaude Opus 4.8
|
d2aa26248d
|
fix(video): 视频片段数对齐采用版分镜数,修「删分镜后视频步骤仍显示旧数量」
项目创建固定铺 4 段视频片段,而 _sync_video_segments_to_script 仅在
增删分镜且该脚本 is_adopted 时才收口。用户通常「采用前」就增删分镜,
那些编辑被 is_adopted 闸跳过;adopt_script 自身又不收口 → 视频步骤
一直停在 4 段,与故事板/采用版分镜对不上。
- adopt_script:采用时按这版分镜数收口视频片段
- poll/skip-storyboard:进入视频阶段前再收口一次(安全网)
- retrieve:视频阶段详情加载时自愈历史脏项目(只裁从未生成过的尾段)
- 已生成/生成中的段绝不动;新增 3 个回归测试
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-24 14:33:23 +08:00 |
|
 seaislee1209andClaude Opus 4.8
|
51d5010c43
|
fix(admin): Django 自带后台挪到 /django-admin/,/admin/* 回落 SPA,修后台刷新 404
前端平台后台用客户端路由 /admin/*,但 nginx 把 /admin/ 反代给了 Django(只有自带后台),
刷新 /admin/prompts 等 → Django 404。把 Django 后台挪 /django-admin/、nginx 同步改,
/admin/* 落到 try_files → index.html(SPA 路由)。Django admin 命名空间仍是 admin,reverse 不变。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-24 02:04:08 +08:00 |
|
 seaislee1209andClaude Opus 4.8
|
fd596776e2
|
feat(image): 支持真 16:9(1536x864)+ 人物/商品三视图/场景默认 16:9
- gpt-image-2 实测支持 16:9(宽高需被 16 整除):真 16:9 = 1536x864(长边封顶 1536);
原来「16:9」误给成 1536x1024(实为 3:2)。修正 _RATIO_TO_SIZE 与 _ratio_to_image_size
- admin「提示词」页比例按钮新增「宽 16:9」
- 迁移 0015/0016:scene + product_triview + person_triview 默认比例设为 16:9;
分镜图(storyboard_frame)/立绘/视频保持竖屏不动
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-24 00:56:33 +08:00 |
|
 seaislee1209andClaude Opus 4.8
|
ee842da19c
|
feat(video-prompt): 台词带说话人照脚本原样 + 时长/比例只走参数不写正文
- _segment_script_text:有结构化对白(dialogue)就按「说话人:台词」原样放(说话人 id 用 script_entities
解析成名字,如 室友/学生女主),回退扁平 narration;新增 with_dialogue/with_exposure 开关
- build_video_segment_prompt:视频脚本用带说话人台词、不带「商品露出」行(露出靠尾句统一要求);
正文去掉 {时长}s · 9:16 竖屏(时长/比例本就 API 参数 duration/ratio 传,不再重复写进文字)
- 尾句改为:电商带货短视频,商品露出清晰,节奏有转化感。不要字幕,不要背景音乐,但是要有音效,逼真的音效
- 迁移 0014 同步刷新 DB 里 video_segment 模板(DB 覆盖代码默认),admin「视频」卡随之更新
真渲染 v3·场1 与产品对齐版一致;后端测试通过。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-23 18:05:27 +08:00 |
|
 seaislee1209andClaude Opus 4.8
|
c2c2dfdc77
|
feat(review): 故事板分镜图挂火山人像审核盾 + 红盾可重新送审
- 后端 StoryboardFrameSerializer 暴露 review_status + 驳回原因(之前没给,前端画不出盾)
- 前端故事板趴:每张分镜图(缩略图角上只留盾 / 大图左上完整徽章)挂 ReviewBadge,
与人物/场景卡同款(审核中橙光 / 已过审绿 / 未过审红);故事板趴每 8s 轮询刷新审核态
- ReviewBadge:红盾(未过审)也可点「重新送审」——「审核超时」是误判(分镜图在 processing
卡太久被本地超时兜底标失败,非火山真违规),重提即可再审;灰盾/红盾两处(分镜图+人物卡)行为一致
- compact 模式:嵌在 overflow:hidden 容器里的盾(分镜图)改用原生 title 提示,避免 CSS 气泡被裁看不见
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-23 17:23:18 +08:00 |
|
 seaislee1209andClaude Opus 4.8
|
4074c13733
|
fix(video): 提交报错接住返 JSON 不再白屏 + 分镜图 processing 也走素材库 asset://
- submit-video-segment 视图接住 submit_video_segment 的异常 → 返回干净 JSON(真实火山报错文案),
不再让它变成 500 整页 HTML 报错栈 → 前端把 101KB HTML 怼进 toast 撑爆白屏
- 前端 request():非 JSON 错误体只显示状态行,绝不把整页 HTML 塞进 toast(白屏兜底)
- _seedance_ref_url:只要分镜图/人物已进素材库(有 remote_id)就走 asset://,不再卡 active —— 故事板
刚重生成时分镜图还是 processing,卡 active 会回落原始直链 → 火山以「疑似真人」拒。实测 processing
的素材 asset:// 照样可引用,根治「重生成故事板后重跑视频被人脸拒」
真机验证:场4 完整提交(人物/分镜图 asset:// + 场景/商品直链)ACCEPTED 出片;后端测试通过,tsc/build 过。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-23 16:57:37 +08:00 |
|
 seaislee1209andClaude Opus 4.8
|
f9c52a171c
|
feat(product): 商品图删除接通 + 至少保留一张
- 详情页编辑态的删除叉子原是纯 CSS ::after 装饰、没绑事件,且列表用的是 asset id 而非删除接口要的
ProductImage id —— 接通:编辑态点图真调删除接口、用 ProductImage id,非编辑态仍点击放大
- 商品至少保留一张图(与「创建必须带图」一致):后端删到最后一张返回 400;前端只剩一张时那张不显示
叉子 + 提示「商品至少保留一张图;要移除请删除整个商品」;封面无对应 ProductImage(如三视图采用为封面)
则只展示、不可删
- 加 2 个后端测试(多张可删 200 / 删最后一张 400)
真实接口验:两张删一张 200、再删最后一张 400 并保留一张;后端测试通过,tsc/build 通过。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-23 16:29:05 +08:00 |
|
 seaislee1209andClaude Opus 4.8
|
f02c8053a1
|
feat(product-create): upload-first 建商品 —— 图拖入即进桶,创建时带 asset 一块落库
- 抽屉拖入/选图 → 立刻 POST /api/assets/upload/ 传进 TOS 桶拿 asset id(每张带上传中/完成/失败态,
首图标「主图」=cover_asset);上传未完成禁用「创建商品」
- 点创建 → POST /api/products/ 直接带 cover_asset + images inline 落库,一步到位,不再「先建后传图」
(那条因传图接口需先有商品 ID,与「创建必须带图」校验天然冲突 → 建商品恒 400「商品创建失败」)
- 同步读取 File:addImages 一进来就 Array.from 取文件,避免 pickImage 紧接的 input.value="" 清空
input.files 导致「第一次点没反应、第二次才上传」;选好即发起上传,不靠会滞后的 effect
- 后端保留「创建必须带图」校验(upload-first 下可满足、且正确)
真实接口验:独立上传 201 → 带 cover+images 创建 201(落库)→ 无图创建 400;tsc/build/后端测试通过。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-23 16:28:53 +08:00 |
|
 seaislee1209andClaude Opus 4.8
|
6916f9c877
|
fix(video): 真人参考图走素材库 asset:// 引用,根治 Seedance 锁脸全错
根因:Seedance 2.0 对写实人脸的原始直链直接 400(InputImageSensitiveContentDetected),
旧代码静默退纯文生视频 → 任务假成功、人物/场景全错(脚本是文本所以对)。
- 视频参考图:已过审(active+素材库 ID)的人物 + 分镜图换成 asset://{review_remote_id},
场景/商品(无脸、未送审)保持原始直链(_video_reference_images / _seedance_ref_url)
- 临时:VIDEO_ARK_API_KEY 让 Seedance 借 AirDrama 火山账号,与真人素材库同账号 → asset:// 可解析;
仅覆盖 VIDEO 能力,图像/文本仍用自有 key。待自有账号开通素材库后删此项即回落
- 删掉静默文生兜底:火山报错经 _raise_volcano_error 抽出真实 code+message 抛出,
落 error_message → 前端如实显示,绝不再假装成功出没锁脸的视频
真实接口验证:同图旧路 400,新路(asset://+AirDrama key)Seedance ACCEPTED 正常出片。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-23 13:16:30 +08:00 |
|
 seaislee1209andClaude Opus 4.8
|
9c2a3bc365
|
feat(prompts): admin「提示词」页 —— 视频线 6 条生图/视频提示词正文+比例可在后台改,不再写死
诉求:生图/视频提示词全写死在代码里,产品方看不到也改不了(之前那版只做成「质量后缀」不是正文)。
现新增可编辑「提示词模板」体系,覆盖视频项目生产线 6 条:人物立绘 / 人物三视图 / 商品三视图 /
场景图 / 分镜图 / 视频。
后端:
- 新模型 PromptTemplate(key 固定 6 条 + template 正文 + ratio 比例 + enabled);迁移 0012/0013
种入默认正文(= 各 builder 现写死文本,零回归)。
- render_prompt(key, default, **字段):读 DB 模板,留空/停用回落默认;安全替换 {占位符}(中文名),
未知占位符原样保留(改错不致命)。prompt_ratio_size:比例→gpt-image 尺寸。
- 6 个 builder/调用点改走模板;5 条图比例可改(gpt-image 仅 1:1/竖/横),视频固定 Seedance 9:16。
场景图新增可编辑「场景风格」包装(默认仅 {场景描述},零回归)。人物/分镜/视频原质量后缀并入模板。
- adminpanel CRUD:GET /prompt-templates、PATCH /<id>(改正文/比例/启用,key 不可改、不增删,带审计)。
前端:admin 新增「提示词」侧栏页(/admin/prompts):6 卡,每卡=占位符提示+正文文本框+比例按钮+
启用开关+保存。复用 .btn/.card-hard 共享类,仅 token 配色,单橙锚点。
验证:Django 套件 102 全绿(含新模型/API/生成侧立即生效 + 人物提示词改读模板);tsc+vite build 绿;
无头(独立 sqlite 栈)真开 /admin/prompts:6 卡齐、文本框/比例/占位符齐、0 控制台错误。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-23 03:19:07 +08:00 |
|
 seaislee1209andClaude Opus 4.8
|
304a083184
|
fix(image): 图生图参考图过大时降采样,根治 yunqi 400 invalid_image_file
杂鱼煲商品三视图本地/线上都 400:主图 6000×4000 / 5.8MB,yunqi(gpt-image edits)拒收过大参考图
报 invalid_image_file(实测缩到 ≤2048 即过)。image_edit 发参考图前按需降采样:最长边 >2048
或 >4MB 才缩(否则原图直发不损质量);三视图成品 ≤1536px,2048 已 ≥ 成品分辨率 → 对成品无损。
保留透明通道(有 alpha 存 PNG,否则 JPEG q92),解析失败原样放行。商品三视图/故事板/模特上身等
所有 image_edit 路径一并受益。
验证:用真实 6000×4000 主图走打补丁的 provider.image_edit → 当场出图(原必 400);探测 yunqi 接受
≥4096、6000 拒;48 测全绿。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-23 03:18:42 +08:00 |
|
 seaislee1209andClaude Opus 4.8
|
a24dbb868a
|
refactor(extract): 写死契约瘦身为纯结构,craft 全交给 skill(消除重复/漂移、不降质)
承上轮讨论(商业级质量考量):写死的 _EXTRACT_OUTPUT_CONTRACT 原先掺了 craft 规则
(穿搭/空手/字数/visual_prompt 写法),与 skill 正文重复 → 有漂移、稀释质量之虞。
现只留「格式骨架」(JSON 形状 / character|scene 两类 / 不提商品 / id 规则 / segments
覆盖每镜 / 只输出 JSON);所有创作细则一律以 skill 正文为准。定位不变:skill 丢了也
保证出 JSON 不塌(流水线硬底线),质量则 100% 由 skill 单点驱动。
验证(全在瘦身版上):
- 完整 Django 套件 152/152 全绿。
- 真调豆包「瘦身前 vs 瘦身后」对比:角色/场景/segments 一致,visual_prompt 仍守住
空手/不提商品/空镜/字数(craft 由 skill 驱动)—— 质量零退步。
- 本地起后端(sqlite+eager+真ARK)+前端+无头 chromium 真点提取按钮:闸门→提取→
角色(女主/室友)场景(学生宿舍/大学教室)落库、entities_extracted=True、
任务 succeeded、system_chars=7482(非空)、0 控制台错误。
可回退:tag extract-ok-baseline(66778fa)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-23 00:47:01 +08:00 |
|
 seaislee1209andClaude Opus 4.8
|
66778fa2d3
|
harden(extract): 提取加写死的 JSON 输出契约兜底,消除"过度依赖 skill 文件"脆点
承上次定位:脚本生成空 skill 也能出 JSON,是因其 system 带写死的 _OUTPUT_PROTOCOL(进镜像、
永远在);提取没有这层兜底,只靠 skill 文件 → skill 一空就吐散文解析失败。本次对齐脚本做法:
给提取也加 _EXTRACT_OUTPUT_CONTRACT(写死的 entities/segments JSON 契约 + 不提商品等铁律),
拼在 skill 正文之后。即便将来 skill 再丢,提取也仍收到「只输出 JSON」硬指令,不会再退化。
真验证:用 dev 库里那条真实失败脚本,system 仅留写死契约(模拟 skill 全空)真调豆包 →
仍稳定出 JSON(角色/场景齐、商品不提)。
测试:152/152 全绿(新增契约兜底单测)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-23 00:24:29 +08:00 |
|
 seaislee1209andClaude Opus 4.8
|
8dab8b4921
|
fix(skills): skills 随后端打进镜像,根治线上提取「未返回有效 JSON」(系统提示词为空)
真因(查 dev 库 + 重放真实失败请求 + 真调 ARK 定位):线上提取的 system 提示词长度=0。
core-api 镜像由 `./core/backend` 构建,而 skills/ 在仓库根、不在构建上下文 → 镜像里没有
→ _load_skill_system_prompt 返回空串 → 模型收不到「只输出 JSON」铁律 → 吐 markdown/散文
→ 正则抽不到 {} → 「提取结果解析失败(模型未返回有效 JSON)」。本地有 skills 故一直没复现。
(脚本生成同样受影响,只是它有退化兜底提示词,质量打折但不报错。)
验证:用 dev 库里你那条失败请求的真实脚本重放——空 system→无 JSON;补上 skill 提示词
→ 立即出 JSON(角色/场景齐、商品不提)。
改动:
- skills/ → core/backend/skills/(git mv,进构建上下文,Dockerfile `COPY . .` 自动打包)。
- services._skills_root()/script_agent._skill_dir():优先 BASE_DIR/skills,回落仓库根(双兜底)。
- worker 失败时也落 response_payload(含 content / reasoning 预览 / system_chars),
以后再坏一眼就能定位(本次正是因为失败没存返回,白绕一圈)。
- 回归测试 2 条:skills 必须在 BASE_DIR 内(随镜像走)+ 提取提示词非空且含 JSON 铁律。
- CLAUDE.md 标注 skills 必须放 core/backend 内的原因。
验收:完整 Django 套件 151/151 全绿。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-23 00:12:46 +08:00 |
|
 seaislee1209andClaude Opus 4.8
|
c8cb6d3d51
|
fix(extract): 实体提取改异步(worker+轮询),根治 502 + 刷新丢 loading + 重复扣费
问题:进资产页点"提取人物/场景"——同步死等豆包思考模型(数十秒)→ 撞网关超时
502;"提取中"loading 是纯前端内存态,刷新即丢;且无幂等,刷新后重点会重复扣费。
改动(对齐全站异步三件套:出图/三视图/故事板同款):
- 后端 submit_extract_entities:Web 只建 RESERVED 任务 + 预留额度秒回(不再 502);
已有在途提取则复用,绝不二次预扣(防刷新后重点 / 并发重复扣费)。
- 后端 run_extract_entities_task(Celery worker):流式调豆包 + 解析 + 落库 + 扣费;
失败退费并把可读错误记进 task.error_message。
- 新增 AITask.Type.entity_extraction(迁移 0011)+ extract-status 端点(轮询进度/成败)。
- 前端 runExtract 改提交+轮询;进资产页自动认领在途提取,刷新后 loading 自己回来。
验收:完整 Django 套件 149/149 全绿(含新增 4 测:异步落库+计费一次 / content空
回退 reasoning / 在途防重复扣费 / 状态端点成败透出);tsc + vite build 全绿;
makemigrations --check 无遗漏。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-22 23:15:11 +08:00 |
|
 seaislee1209andClaude Opus 4.8
|
71af0ae166
|
fix(extract): 实体提取改走流式通道 + 锁定豆包2.0Pro,根治"未返回有效JSON"
问题:进资产阶段点"提取人物/场景"间歇报「提取结果解析失败(模型未返回有效
JSON)」。根因——提取走非流式只读 content,而默认文本模型是会思考的推理模型
(豆包2.0Pro think:True),思考期常把内容留在 reasoning_content、content 返空 →
正则抽不到 JSON。脚本生成不犯此病是因其走流式、早已分离思考/正文。
改动:
- 锁模型:提取固定用 doubao-seed-2-0-pro-260215(_resolve_extract_model_config),
取不到再回落默认,不再受各环境 DB 创建序漂移影响路由。
- 根治:提取复用与脚本生成同一条已验证稳定的流式通道(_collect_extract_text)——
丢弃 reasoning 事件、只收正文 delta;正文为空时兜底回退 reasoning 里的 JSON。
response_payload 改存精简流式存档(streamed/model/content/had_reasoning)。
- 测试:提取步原零测试,新增 2 个——流式正文JSON正确落库+计费一次、content空→
回退reasoning。其余链路(脚本生成/单镜重跑)未动。
验收:本机 Python3.9 跑不了 Django5 全套,核心逻辑(事件过滤/回退/JSON抽取)已
独立验证通过;py_compile 绿;完整套件由 CI 跑。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-22 20:12:11 +08:00 |
|
seaislee1209
|
612ab6864d
|
feat(pipeline): 基础资产页 A三视图手动 + B进故事板拦截 + C采用/未采用 + D删除
- A 三视图改手动:删"打开角色详情自动出三视图"逻辑、角色生成只出立绘(不再链式自动三视图);
详情弹窗保留「AI 生成三视图」按钮作手动入口(提示文案去掉"自动")
- B 进下一步拦截:「确认资产,进入故事板」按钮挂 guardGen —— 被引用角色/场景缺"已采用"参考图就弹窗拦
- C 采用/未采用:角色/场景卡加 toggle 徽章(已采用绿/未采用灰);默认按"实体名是否在脚本里"派生,
用户可点击覆盖并持久化(metadata.adopt);后端 set-base-asset-adopt 端点;下游 _storyboard_reference_images
只取已采用组(商品组永远保留、顺带排除未采用/三视图组的兜底误抓)
- D 删除:角色/场景卡 hover 显删除按钮(二次确认),商品主卡不给删;后端 delete-base-asset(连带三视图组)
- 顺手:提取闸门按钮去掉"不自动花钱"文案
验收:projects/assets/ai 全套(基线既有 7 失败零新增,新增 set-adopt/delete 3 测过);tsc+build 绿;
无头核对(采用 toggle/hover 删除/待审核盾齐活、0 console error)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-22 19:23:02 +08:00 |
|