Files
to-live-photo/TASK.md
empty bf3f9d9eb2 docs: 更新 TASK.md 任务状态和决策备忘
- M4 更新:TiledImageProcessor 描述为"真正的分块处理"
- M5 新增:AI 增强质量优化(已完成)、高级合成功能规划
- 决策备忘已完成:HDR 策略、编码兜底策略、高级合成功能延后

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 21:05:17 +08:00

153 lines
7.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# TASKto-live-photo
> 说明:本清单按阶段拆解研发事项,默认最低支持 iOS/iPadOS 16+,先完成 MVP 闭环,再逐步完善。
## M0技术预研 / POC以"系统可识别 Live Photo"为第一目标)✅
- [x] 建立 Xcode 工程骨架SwiftUI 优先),设置 Deployment Target = iOS/iPadOS 18.0
- [x] 补齐权限与 Info.plist 文案:
- [x] NSPhotoLibraryUsageDescription
- [x] NSPhotoLibraryAddUsageDescription
- [x] POC最小链路跑通不做复杂编辑
- [x] 从相册导入视频PHPicker视频过滤
- [x] 以默认参数(~0.917s、1080x1920、60fps 策略)生成 photo + pairedVideo
- [x] 写入相册PHAssetCreationRequest 同时写入 .photo 与 .pairedVideo
- [x] 校验:保存后按 assetId 取回并验证 Live 识别(相册 Live 标识 + 长按可播 + **可设置为动态壁纸**
- [x] 约束与策略确认(写入代码常量/配置):
- [x] 时长限制:标准化为 ~0.917s(与 iPhone 原生 Live Photo 一致)
- [x] 分辨率上限:竖屏 1080x1920横屏 1920x1080
- [x] 帧率策略:统一转换为 60fps
- [x] HDR 策略:默认转 SDRExportParams.hdrPolicy = .toneMapToSDR
- [x] 编码策略:默认 H.264ExportParams.codecPolicy = .fallbackH264
- [x] 设计基础设施:
- [x] WorkItem / ExportParams 数据模型(与 TECHSPEC 对齐)
- [x] CacheManager按 workId 建目录
- [x] LoggerLivePhotoLogger 阶段化日志
### M0 完成定义
- [x] 能在至少 1 台 iPhone + 1 台 iPad 上生成并保存 Live Photo且系统相册可识别有 Live 标识,长按可播放)。
- [x] **额外达成**:生成的 Live Photo 可设置为动态壁纸,动态效果正常。
## M1MVP导入→编辑→生成→保存→引导
### 1) UI 页面闭环
- [x] HomeView首页导入入口最近作品功能移至 M2
- [x] EditorView时长裁剪、预览比例裁剪/封面帧选择移至下方编辑能力)
- [x] ProcessingView进度条 + 阶段文案 + 返回重试
- [x] ResultView保存到相册、进入壁纸引导、继续制作
- [x] WallpaperGuideView按系统版本展示步骤卡片、FAQ、打开照片 App、完成确认
### 2) 编辑能力MVP 版)
- [x] 比例模板iPhone 锁屏 / 全面屏 / 4:3 等(先做 2~3 个核心模板)
- [x] 裁剪手势:缩放 + 拖拽,保持比例
- [x] 时长裁剪slider1~1.5s 范围)
- [x] 封面帧:滑杆选择 keyFrameTime实时刷新封面预览
### 3) 生成与保存(与 TECHSPEC 阶段枚举对齐)
- [x] 生成管线normalize → extractKeyFrame → writePhotoMetadata → writeVideoMetadata → saveToAlbum → validate
- [x] 取消策略:取消时终止任务并清理未写入相册的中间文件
- [x] 错误码与可行动建议:覆盖 LPB-001/101/201/301/401/901
### 4) 引导内容MVP 版)
- [x] 版本检测iOS/iPadOS 16 显示"系统限制/不支持锁屏 Live 动效"的明确文案
- [x] iOS/iPadOS 17+:展示步骤卡片(照片 App → 分享 → 用作壁纸 → 开启 Live
- [x] FAQMotion not available、低电量模式、找不到 Live 按钮等
### 5) 基础埋点(可先打印日志,后续再接 SDK
- [x] home_import_video_click / import_video_success
- [x] editor_generate_click / build_livephoto_start / build_livephoto_fail
- [x] save_album_success / save_album_fail
- [x] guide_open / guide_complete
### 6) MVP QA手工为主
- [x] 测试矩阵iPhone 1~2 台 + iPad 1 台iOS/iPadOS 17+ 与 16 各至少 1 台
- [x] 素材覆盖H.264/HEVC、30/60fps、竖/横、SDR/HDR
- [x] 验收点:生成成功率、保存成功率、相册识别率、引导文案准确性
- [x] 测试文档docs/TEST_MATRIX.md包含 13 个测试用例)
### M1 完成定义
- [x] 按 PRD 的 MVP 验收标准打通闭环:生成 Live Photo → 保存相册可识别 → 可进入引导并在不同系统版本下给出正确提示。
## M2完善体验提升 + 失败率降低)
- [x] 兼容模式开关UI 可见):降分辨率/30fps/H.264/SDR
- [x] 自动诊断与建议:根据素材参数提示"建议缩短/建议兼容模式/建议转 SDR"等
- [x] iPad 编辑页布局优化:左右分栏(预览/参数)
- [x] 最近作品列表完善:持久化(仅存参数与缩略图/assetId不重复存媒体
- [x] 设置页(可选):权限状态、清理缓存、反馈入口
- [x] 错误反馈包导出可选builder.log + 参数(不包含媒体内容)
## M3稳定性 / 上线准备
- [x] 性能与内存优化:大视频处理、峰值内存控制
- [x] 崩溃与异常收敛:日志脱敏、错误归因完善(按 stage 统计)
- [x] App Store 合规检查:权限文案、引导表述(不承诺一键设置壁纸)、隐私说明
- [x] 产出核心文档补齐(按需要最小化):
- [x] 测试文档MVP 测试矩阵与用例
- [x] 用户手册:导入/生成/保存/设置引导与常见问题
## M4AI 增强(差异化功能)
- [x] Real-ESRGAN Core ML 集成架构
- [x] AIEnhancer 模块:公共 API 和配置
- [x] RealESRGANProcessorCore ML 推理逻辑
- [x] TiledImageProcessor真正的分块处理512×512 tiles64px 重叠,加权混合拼接)
- [x] WholeImageProcessor小图处理≤512×512 使用整图缩放)
- [x] ImageFormatConverter格式转换工具
- [x] LivePhotoCore 集成
- [x] ExportParams 扩展 aiEnhanceConfig
- [x] LivePhotoBuildStage 新增 .aiEnhance 阶段
- [x] resolveKeyPhotoURL 集成 AI 增强(失败静默降级)
- [x] UI 集成
- [x] EditorView AI 超分辨率开关
- [x] ProcessingView 新阶段文案
- [x] 设备能力检查isAvailable
- [x] 模型准备
- [x] 使用预转换的 Real-ESRGAN x4plus Core ML 模型来源john-rocky/CoreML-Models
- [x] 将 RealESRGAN_x4plus.mlmodel 放入 Resources 目录66.9MB,编译后 64MB
- [x] Package.swift 已配置模型资源打包
- [x] 模型输入 512x512输出 2048x2048实际放大约 2.25x
## M5未来优化可选
- [ ] 包体积优化
- [ ] 使用 INT8 量化模型(预估可从 64MB 降至 ~16MB
- [ ] 或使用 On-Demand Resources 按需下载模型
- [x] AI 增强质量优化(已完成 ✅)
- [x] 真正的分块处理:将大图拆分为 512×512 tiles分别推理后拼接
- [x] 64px 重叠区域 + 线性权重混合,消除接缝
- [x] 自动选择处理器:大图用 TiledImageProcessor小图用 WholeImageProcessor
- [x] 信息损失从 ~86% 降至 0%1080×1920 图像不再压缩)
- [ ] 高级合成功能(照片+视频合成 Live Photo
- [ ] 双导入入口:支持分别选择静态照片和视频
- [ ] 尺寸对齐逻辑:照片自动 match 视频尺寸
- [ ] resolveKeyPhotoURL 扩展:支持外部照片输入
- [ ] UI 设计:照片裁剪/对齐预览
- [ ] 其他性能优化
- [ ] 尝试使用支持灵活输入尺寸的模型EnumeratedShapes
- [ ] 探索 Metal Performance Shaders 替代方案
---
## 决策备忘(已完成 ✅)
- [x] **HDR 默认策略**:✅ 保持默认转 SDR
- 理由Live Photo 壁纸场景下 SDR 显示更稳定,避免 HDR 在不同设备/亮度下显示不一致
- 后续M5 可在设置页添加"高级选项"供专业用户切换
- [x] **编码兜底策略**:✅ 保持完全自动兜底
- 理由:符合"Just Works"理念,诊断系统已能提前识别风险并建议兼容模式
- 可选改进ProcessingView 显示"使用兼容模式编码中..."提升透明度
- [x] **高级合成功能**(照片+视频):✅ 延后到 M5 或 M6
- 理由:属于高级功能,非核心需求,当前专注上线 M0-M4
- 技术要点双导入入口、尺寸对齐逻辑、resolveKeyPhotoURL 扩展