## 现象 序列帧播放时角色整体左右摆动,肉眼可见。 ## 实测(2026-08-11,512 画布,16 帧走路) | 量的对象 | 横向摆动幅度 | |---|---| | 包围盒中心 | **0.5 px** | | 脚部中心 | 29 px(步幅,正常) | | 头部中心 | **24.5 px(4.8% 画布宽)** | 包围盒中心几乎不动 = 对齐**确实生效了**,但它对齐的是错的东西:**身体在摆,包围盒不摆。** ## 根因 `ai_engine/postprocess/pack.py`: ```python canvas.alpha_composite(crop, (cw // 2 - w // 2, int(ch * foot_line) - h - lift)) ``` `cw // 2 - w // 2` = 把**包围盒**水平居中。 包围盒包含所有延展物。实测该序列左边界(披挂侧)摆动 15 px,于是对齐为了"把包围盒摆正",反过来把身体推走约 8 px —— **延展物摆多少,身体就被反向推多少。** ## 与既有规则冲突 项目工作规则第 6 条原文: > 画布漂移是真问题、必须逐帧对齐。生成的每帧角色位置/尺寸都不同,按"脚底线 + **躯干中心**"锚点对齐(**忽略剑/围巾等延展物,否则包围盒被撑大导致身体横跳**)。这是产品差异化内核之一。 规则是踩坑后写下的,但实现用的是包围盒中心,与规则相反。 ## 影响面 不只是披风。任何在身体一侧摆动或延伸的东西都会触发:背负大件、长柄武器、尾巴、飘带。角色越有辨识度,偏移越明显。 纵向不受影响(脚线在 16 帧上恒为同一 y)。 ## 修改方向 横向锚点从包围盒中心改为躯干中心,延展物不参与定位。 躯干的判定方式需要设计,可选:主体像素的水平中位数(对细长延展物天然稳健)、按行加权、或只取躯干高度区间。**需要在多个角色上验证再定**,包括四足与背负大件的形态。 ## 验收 同一批帧,改前改后对照头部中心的横向摆动幅度;人形角色期望降到步幅同级(个位数 px)。同时确认脚线纵向不受影响、无延展物的角色产物逐像素不变。 ## 相关 与 #195(提示词凭空加斗篷)叠加:那件不该存在的斗篷正是当前偏移的来源之一,但**即使去掉斗篷,本问题依然存在**——背负大件、长柄武器同样会触发。两条需要分别修。 代码在 #180 / #181 的范围内,本 Issue 独立跟踪。
Activity
fix(postprocess): 定标按本体跨度,不按包围盒
fix(postprocess): 定标按本体跨度,不按包围盒
johnnyzhang-eng commentedon Aug 13, 2026
同根因的尺度那一半在 #280 已修(定标改用本体跨度)。本 issue 的横向锚点还没做,可以复用 #280 引入的 core_span 取本体列中位——注意别用「取躯干高度区间」那个方案,实测零效果(披风背包恰恰挂在躯干高度上)。
fix(postprocess): 定标按本体跨度,不按包围盒 (#280)
johnnyzhang-eng commentedon Aug 17, 2026
按 #334 收敛 issue 颗粒度,本条判据已折进 #278 的子项清单,原文与实测数据保留在此备查。关闭理由:被 #278 取代。