fix: 标题默认位置 fallback 改为 bottom,与前端 DEFAULT_TITLE_SETTINGS 对齐 #1691

Merged
xiaoxia merged 1 commits from fix/title-position-fallback-wrap-consistency into develop 2026-09-04 15:19:37 +08:00
Owner

改动内容

后端修改(3 处)

  1. position_to_ass_alignment() fallback 从 8(top) 改为 2(bottom)

    • 文件:packages/domain/ass_subtitle_builder.py
    • 与前端 DEFAULT_TITLE_SETTINGS.position = "bottom" 对齐
    • docstring 同步更新
  2. build_ass_content() title 默认 position 从 "top" 改为 "bottom"

    • 文件:packages/domain/ass_subtitle_builder.py
    • 当前端不传 position 时,后端默认走底部对齐
  3. subtitle_generator.generate_ass_from_timeline() title 默认 position 同步

    • 文件:apps/worker/video_processing/subtitle_generator.py
    • title_cfg.get("position", "top")title_cfg.get("position", "bottom")

关于 Task 5(换行一致性)

_wrap_title_text 已使用 available_width = video_width - margin_l - margin_r 作为固定宽度约束,与前端基于百分比的约束逻辑一致。换行计算使用原始 font_size(不做 1.35x 补偿),与 CSS 预览保持一致。

测试更新

  • 更新 6 个测试文件中 fallback 断言(alignment 8→2)
  • 新增 TestDefaultPositionBottom 测试类(3 个测试)
  • 351 个标题/字幕相关测试全通过

关联

与前端工程师的 PR 配合使用,确保预览和最终生成视频标题位置一致。

## 改动内容 ### 后端修改(3 处) 1. **`position_to_ass_alignment()` fallback 从 8(top) 改为 2(bottom)** - 文件:`packages/domain/ass_subtitle_builder.py` - 与前端 `DEFAULT_TITLE_SETTINGS.position = "bottom"` 对齐 - docstring 同步更新 2. **`build_ass_content()` title 默认 position 从 `"top"` 改为 `"bottom"`** - 文件:`packages/domain/ass_subtitle_builder.py` - 当前端不传 position 时,后端默认走底部对齐 3. **`subtitle_generator.generate_ass_from_timeline()` title 默认 position 同步** - 文件:`apps/worker/video_processing/subtitle_generator.py` - `title_cfg.get("position", "top")` → `title_cfg.get("position", "bottom")` ### 关于 Task 5(换行一致性) `_wrap_title_text` 已使用 `available_width = video_width - margin_l - margin_r` 作为固定宽度约束,与前端基于百分比的约束逻辑一致。换行计算使用原始 `font_size`(不做 1.35x 补偿),与 CSS 预览保持一致。 ### 测试更新 - 更新 6 个测试文件中 fallback 断言(alignment 8→2) - 新增 `TestDefaultPositionBottom` 测试类(3 个测试) - **351 个标题/字幕相关测试全通过** ### 关联 与前端工程师的 PR 配合使用,确保预览和最终生成视频标题位置一致。
xiaoxia added 1 commit 2026-09-04 15:14:36 +08:00
fix: 标题默认位置 fallback 改为 bottom,与前端 DEFAULT_TITLE_SETTINGS 对齐
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 2s
CI/CD Pipeline / Check push changed paths (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 2s
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build Web Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 24s
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 24s
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Has been skipped
AI Code Review / AI Code Review (pull_request) Successful in 45s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m29s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 1m26s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m42s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Successful in 1m48s
CI/CD Pipeline / Validate - Style (pull_request) Successful in 2m10s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 2m53s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 53s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 14s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 33s
CI/CD Pipeline / Validate - Security (pull_request) Successful in 7m39s
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / CI Gate (pull_request) Successful in 3s
15e429ffb1
- position_to_ass_alignment() fallback 从 8(top) 改为 2(bottom)
- build_ass_content() title 默认 position 从 'top' 改为 'bottom'
- subtitle_generator.generate_ass_from_timeline() title 默认 position 同步
- 更新 6 个测试文件中 fallback 断言(8→2)
- 新增 TestDefaultPositionBottom 测试类(3 个测试)
- 351 个标题/字幕相关测试全通过
Collaborator

【阻塞级判定】

  • 是否存在阻塞级问题:否
  • 阻塞级问题数量:0 个

📊 审查概览

  • 整体评价:通过
  • 建议级问题数量:0 个

🔴 阻塞级问题(必须修复)

💡 改进建议(不阻塞合并)

良好实践

  1. 测试覆盖全面:在修改默认对齐方式从 topbottom 时,同步更新了所有相关单元测试(包括 unknownempty stringNone 等边界情况),并新增了 TestDefaultPositionBottom 测试类,确保了行为变更的一致性和可靠性。
  2. 文档同步更新:修改了 packages/domain/ass_subtitle_builder.pyposition_to_ass_alignment 函数的文档字符串,明确指出了新的默认值及其与前端配置的对齐关系,有助于后续维护。
  3. 逻辑一致性:代码变更在 subtitle_generator.pyass_subtitle_builder.py 之间保持了逻辑一致,统一将默认位置参数调整为 "bottom",避免了潜在的配置冲突。

🤖 由 AI 代码审查机器人自动生成 | 2026-09-04 07:15:20 | 模型:

### 【阻塞级判定】 - 是否存在阻塞级问题:否 - 阻塞级问题数量:0 个 ### 📊 审查概览 - 整体评价:通过 - 建议级问题数量:0 个 ### 🔴 阻塞级问题(必须修复) 无 ### 💡 改进建议(不阻塞合并) 无 ### ✅ 良好实践 1. **测试覆盖全面**:在修改默认对齐方式从 `top` 到 `bottom` 时,同步更新了所有相关单元测试(包括 `unknown`、`empty string`、`None` 等边界情况),并新增了 `TestDefaultPositionBottom` 测试类,确保了行为变更的一致性和可靠性。 2. **文档同步更新**:修改了 `packages/domain/ass_subtitle_builder.py` 中 `position_to_ass_alignment` 函数的文档字符串,明确指出了新的默认值及其与前端配置的对齐关系,有助于后续维护。 3. **逻辑一致性**:代码变更在 `subtitle_generator.py` 和 `ass_subtitle_builder.py` 之间保持了逻辑一致,统一将默认位置参数调整为 `"bottom"`,避免了潜在的配置冲突。 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-09-04 07:15:20 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->

🚀 预览环境已部署

项目 详情
PR号 #1691
预览链接 https://pr-1691.preview.xiaoxiajianji.com
API环境 staging

💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。

🔄 每次提交新代码后预览环境会自动更新。

🗑️ PR 关闭或合并后,预览环境会自动清理。

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #1691 | | 预览链接 | [https://pr-1691.preview.xiaoxiajianji.com](https://pr-1691.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
xiaoxia reviewed 2026-09-04 15:19:18 +08:00
xiaoxia left a comment
Author
Owner

LGTM CI 全绿,改动正确。

LGTM ✅ CI 全绿,改动正确。
xiaoxia merged commit e86f137c3d into develop 2026-09-04 15:19:37 +08:00

🗑️ 预览环境已清理

PR #1691 已关闭或合并,对应的预览环境已被清理。

如有需要,可以重新打开 PR 来重新生成预览环境。

🗑️ **预览环境已清理** PR #1691 已关闭或合并,对应的预览环境已被清理。 > 如有需要,可以重新打开 PR 来重新生成预览环境。
Sign in to join this conversation.