Skip to content

fix(canvas): 蒙版编辑改用红色高亮标注,修复视觉模型区域定位失败#174

Merged
lywaterman merged 3 commits into
mainfrom
fix/freezone-mask-edit-red-highlight
Jul 23, 2026
Merged

fix(canvas): 蒙版编辑改用红色高亮标注,修复视觉模型区域定位失败#174
lywaterman merged 3 commits into
mainfrom
fix/freezone-mask-edit-red-highlight

Conversation

@n7s4

@n7s4 n7s4 commented Jul 23, 2026

Copy link
Copy Markdown
Collaborator

Closes #173

背景

Erase/Redraw 蒙版旧做法导出「白底 + 透明孔洞」,待编辑区域只存在于 alpha 通道,视觉模型在 RGB 里看到的是整张纯白图,无法定位编辑区(详见 #173)。

改动

前端 EraseOverlay.tsx / RedrawOverlay.tsxbuildMaskBlob:

  • 蒙版改为导出「源图 + 涂抹区半透明红色高亮」
  • 源图打底 → 涂抹区经 source-in 归一为均匀的 rgba(255,0,0,0.6)(消除笔刷叠加深浅不均)→ 叠到源图上
  • EraseOverlay 新增 sourceImgRef 缓存已加载源图作为打底

后端 src/novelvideo/freezone/jobs.pyrun_freezone_mask_edit:

  • prompt 同步说明:Image 2 是涂了半透明红色高亮的源图,只编辑红色区域,红色高亮为标注、不得出现在结果中,红色区域外的像素(构图/身份/光照/纹理)尽量保留

测试 tests/test_freezone_image_backend.py:

  • 更新 test_mask_edit_job_uses_reference_edit_provider_routing 断言,匹配新 prompt(red-highlighted region / must NOT appear in the output)

验证

  • 前端 pnpm build(tsc -b && vite build)✓
  • 后端 pytest tests/test_freezone_image_backend.py -k mask_edit ✓ 1 passed

🤖 Generated with Claude Code

n7s4 and others added 2 commits July 23, 2026 15:41
Erase/Redraw 蒙版旧做法导出「白底 + 透明孔洞」,编辑区仅存在于 alpha
通道,视觉模型在 RGB 里看到的是整张纯白图,无法定位待编辑区域。

改为导出「源图 + 涂抹区半透明红色高亮」:源图打底,涂抹区经 source-in
归一为均匀半透明红后叠加。后端 run_freezone_mask_edit 的 prompt 同步说明
Image 2 的红色高亮仅为区域标注、不得出现在结果中,并更新对应测试断言。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: wen xin <1464521427@qq.com>
修复 #174 review 的两个问题:

P1 旧蒙版生产者被破坏: pipeline-import/MaskEditor 仍导出「白底+透明孔洞」,
但后端 /freezone/redraw 对所有 mask_url 一律套用红色高亮 prompt(不区分格式),
模型会去找 RGB 里不存在的红区 → 定位失败。将 MaskEditor 迁移成与
EraseOverlay/RedrawOverlay 一致的红色高亮格式;同步 schemas.py 的公开 API 文档。

P2 source-in 不产生均匀红: mask alpha 因笔刷叠加深浅不均(0.55/0.80),
source-in 的 Porter-Duff "in" 使输出 alpha = 0.6 × mask_alpha(0.33/0.48),
不均匀原样保留。改为先二值化 mask alpha 再写固定 rgba(255,0,0,0.6)。

三个 buildMaskBlob 抽出共用 lib/mask-highlight.ts(纯函数 binarizeMaskToRed
便于单测),各删 ~25 行重复合成代码。

验证: 新单测 6/6(单笔140与叠加203二值化后输出一致) / pnpm build ✓ /
pytest -k mask_edit ✓

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: wen xin <1464521427@qq.com>
@n7s4

n7s4 commented Jul 23, 2026

Copy link
Copy Markdown
Collaborator Author

已修复 review 的两个问题(3efda10):

P1 旧蒙版生产者被破坏pipeline-import/MaskEditor 仍导出「白底+透明孔洞」,而后端 /freezone/redraw 对所有 mask_url 一律套用红色高亮 prompt(不区分格式),模型会去找 RGB 里不存在的红区。已将 MaskEditor 迁移成与 EraseOverlay/RedrawOverlay 一致的红色高亮格式,并同步 schemas.py 的公开 API 文档。三个生产者现导出同一格式,后端保持单一契约。

P2 source-in 不产生均匀红 — mask alpha 因笔刷叠加深浅不均(0.55/0.80),source-in 的 Porter-Duff "in" 使输出 alpha = 0.6 × mask_alpha(0.33/0.48)。已改为先二值化 mask alpha 再写固定 rgba(255,0,0,0.6)

三处 buildMaskBlob 抽出共用 lib/mask-highlight.ts(纯函数 binarizeMaskToRed 便于单测),各删 ~25 行重复合成代码。

验证:新单测 6/6(单笔 alpha 140 与叠加 alpha 203 二值化后输出一致,证明消除了不均) / pnpm build ✓ / pytest -k mask_edit

新增的 frontend/src/lib/mask-highlight.ts 与其单测未登记,
test_license_inventory_covers_current_git_index(deps 关卡)失败。
按 frontend/src 聚合注解格式补两行。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: wen xin <1464521427@qq.com>
@lywaterman
lywaterman merged commit 3303045 into main Jul 23, 2026
16 checks passed
@lywaterman
lywaterman deleted the fix/freezone-mask-edit-red-highlight branch July 23, 2026 09:01
@NewYuee NewYuee mentioned this pull request Jul 23, 2026
11 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

画布蒙版编辑(擦除/重绘)区域定位失败:视觉模型无法识别透明孔洞蒙版

2 participants