
HommyandClaude Code
b772987d29
add_captions 新增文字背景与文字发光支持,均照剪映草稿实证实现。
两个功能都是剪映字幕面板里的文字装饰效果,用同一份 add_captions 接口暴露,
且都只做接口级(不做逐条覆盖)。
has_background / background_info:文字底下的一层纯色底板。草稿中表现为文本素材
自己的 background_* 字段,同时 check_flag 置第 16 位(7 → 23)。字段名与取值与草稿
一一对应,无需单位换算;唯一例外是偏移量用草稿坐标 [-1, 1](0 居中),而库的构造
函数收 UI 坐标 [0.5 居中],故构造后直接赋值,避免 *2-1 往返引入浮点噪声。背景色
不经 hex_to_rgb——草稿里存的就是 "#RRGGBB" 字符串,非法值会原样落进草稿,故新增
_normalize_hex_color 做宽松校验,非法时回退黑色并告警(而非像 text_color 回退白色)。
text_glow:剪映发光面板的预设(外发光 / 轮廓光)。草稿中表现为 materials.effects 里
一条 type="bloom" 的素材,由片段 extra_material_refs 引用(追加在 sticker_animation
之后),check_flag 置第 64 位(7 → 71)。除 check_flag 外,带发光的文本素材与普通
字幕逐字段完全相同。发光不做优先级:它既不掌管片段的素材身份(那是文字模板的事),
也不改动文字样式(那是花字的事),只是再挂一条素材,故与花字 / 文字模板 / 气泡都
可以叠加,花字叠加时记告警。
pyJianYingDraft 侧改动(文字背景那次库已支持,是纯穿参;发光这次必须动库):
- 新增 TextGlow 素材类与 TextSegment.add_glow(),check_flag 增加第 64 位。
export_json 写出草稿实证的整套字段,只去掉依赖创建者本机剪映缓存的 path
(与气泡一致,由剪映按 resource_id 自行拉取)。
- create_from_template 同步携带 glow,否则模板派生的片段会静默丢发光。
- script_file 的 filters 类型提示、add_segment 收集、inspect_material 新增 bloom
分支(用 .get 兜底,避免第三条 effect["type"] KeyError)。
- __init__ 导出 TextGlow,顺带补上一直漏在 __all__ 外的 TextBubble。
新增 config/glow.json 与 get_text_glows 解析器,结构照抄气泡那套:effect_id 与
resource_id 不是同一个值,故四种写法(名称 / resource_id / effect_id /
"effect_id:resource_id" 显式 ID 对),且不做纯数字透传。清单外发光的 bloom_params
无实证取值,落到默认值并告警——剪映不会按 resource_id 重新推导这些数值。
逐字段对拍参照草稿:背景的 8 个 background_* 字段与 check_flag 与草稿全等;发光的
bloom 素材只有 id(重新生成)与 path(刻意不导出)两个键不同,bloom_params 精确
相等,check_flag 同为 71。文本素材与草稿的 font_path / force_apply_line_max_width /
shadow_point 差异普通字幕也有,与本次改动无关。请求 → schema → router → service →
落盘草稿的全链路实跑通过;字幕相关测试 121 项通过,全量回归与改动前的失败基线
逐行相同(仓库本就有 51 项环境性失败)。
已知事项:两者的渲染效果均未在剪映里实测,文档已按仓库习惯标注;发光草稿里两条
字幕用了不同预设,接口级参数下复刻需调用两次 add_captions。
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-14 19:49:18 +08:00
..
2025-10-27 23:07:46 +08:00
2025-12-14 20:54:27 +08:00
2025-12-14 21:37:55 +08:00
2025-12-14 21:45:44 +08:00
2025-12-14 21:21:37 +08:00
2025-12-14 22:04:33 +08:00
2025-12-14 22:10:25 +08:00
2025-12-22 13:07:06 +08:00
2026-10-06 21:26:10 +08:00
2026-10-14 19:49:18 +08:00
2026-10-14 18:11:51 +08:00
2026-03-31 21:03:21 +08:00
2026-10-14 19:49:18 +08:00
2026-10-14 16:11:03 +08:00
2025-10-27 23:07:46 +08:00
2026-05-16 19:31:22 +08:00
2025-12-10 22:53:33 +08:00
2026-09-19 22:40:04 +08:00
2026-03-28 09:57:14 +08:00
2026-03-31 19:36:16 +08:00
2026-04-02 11:05:36 +08:00
2025-12-06 14:35:42 +08:00
2025-12-06 14:35:42 +08:00
2026-03-31 21:24:05 +08:00
2025-10-27 23:07:46 +08:00
2025-12-14 20:54:27 +08:00
2025-12-14 20:54:27 +08:00
2025-12-14 20:31:37 +08:00
2026-08-31 16:42:49 +08:00
2026-08-31 16:52:42 +08:00
2025-12-04 18:18:33 +08:00
2026-09-07 20:13:43 +08:00
2025-12-04 22:59:18 +08:00
2025-12-04 22:59:18 +08:00
2025-10-27 23:07:46 +08:00
2026-02-28 21:29:42 +08:00
2026-02-28 21:29:42 +08:00
2026-06-14 17:58:32 +08:00
2026-05-15 18:44:04 +08:00
2026-10-09 21:18:59 +08:00
2026-10-09 21:18:59 +08:00
2026-10-09 21:18:59 +08:00
2026-04-02 11:22:27 +08:00
2026-03-31 19:36:16 +08:00
2025-10-27 23:07:46 +08:00
2026-02-28 21:29:42 +08:00
2026-06-15 13:48:31 +08:00
2026-02-28 21:29:42 +08:00
2025-12-04 22:59:18 +08:00
2026-04-20 20:40:57 +08:00
2025-12-06 19:12:54 +08:00
2025-12-06 19:12:54 +08:00
2025-12-06 19:12:54 +08:00
2025-12-06 19:12:54 +08:00
2025-10-27 23:07:46 +08:00
2026-03-31 22:03:26 +08:00
2026-02-28 21:29:42 +08:00
2026-06-15 13:48:31 +08:00
2026-05-26 16:38:44 +08:00
2026-05-16 19:31:22 +08:00
2026-08-05 22:17:22 +08:00
2026-04-01 10:48:23 +08:00
2025-12-06 15:39:10 +08:00
2026-09-01 09:54:08 +08:00
2025-12-14 20:24:18 +08:00
2025-10-27 23:07:46 +08:00
2025-10-27 23:07:46 +08:00
2026-06-11 11:34:54 +08:00
2025-12-06 14:35:42 +08:00
2025-12-15 12:58:23 +08:00
2025-12-15 12:58:23 +08:00
2025-12-15 12:58:23 +08:00
2026-10-06 11:31:52 +08:00
2026-08-21 12:15:44 +08:00
2026-05-13 22:01:28 +08:00
2026-08-21 12:15:44 +08:00
2026-02-28 21:29:42 +08:00
2026-10-06 11:31:52 +08:00
2026-10-06 11:31:52 +08:00
2026-10-06 11:31:52 +08:00
2025-12-06 15:39:10 +08:00
2026-07-20 13:12:10 +08:00
2026-02-28 21:29:42 +08:00
2025-12-05 23:22:13 +08:00
2026-03-31 22:03:26 +08:00