将 OPPO / OnePlus / realme 拍摄的 ProXDR HEIC,转换为 ISO 21496-1 HDR HEIC,并面向 OPPO 图库或 Apple 照片生成对应格式。
一帧影像,动用两台手机。
Rust 核心转换引擎 + Flutter 跨平台界面,支持 Windows、macOS、Android、iOS 和 HarmonyOS。 转换目标不是只得到一个“能亮起来的 HDR”,而是根据照片后续在哪里管理,分别保留 ColorOS 可编辑性,或接入 Apple 照片的摄影风格与人像模式流程。
已适配验证 OPPO / OnePlus / realme 的 ProXDR HEIC(LHDR + UHDR 两种容器),覆盖 Ace 3、Find X6 Pro、Find X7 Ultra、Find X8 Ultra 等样例。 如有其他机型或拍摄模式异常,欢迎提交 Issue,并附上机型、拍摄模式和原始 HEIC。
| 平台 | 最新文件 | 状态 | 说明 |
|---|---|---|---|
| Windows x64 | XDRemux-Windows-*-Setup.exe |
✅ 推荐 | 安装包,无需安装 ffmpeg |
| Windows ARM64 | XDRemux-Windows-arm64-*-Setup.exe |
✅ CI 自动发布 | Surface Pro X、骁龙本等 ARM64 设备 |
| macOS | XDRemux-macOS-*.dmg |
✅ 推荐 | 拖拽到 Applications;首次可能需右键打开 |
| Android | XDRemux-Android-*.apk |
✅ 推荐 | SAF 文件导入、保存图库、分享和后台转换 |
| iOS | XDRemux-iOS-*-unsigned.ipa |
未签名 IPA,需要自行签名安装 | |
| HarmonyOS | XDRemux-HarmonyOS-*-unsigned.hap |
未签名 HAP,需用 DevEco Studio 签名或本地调试安装 | |
| Linux | — | 未提供 | Flutter Linux 目标尚未创建 |
| Windows | macOS |
|---|---|
![]() |
![]() |
| Android | iOS |
|---|---|
![]() |
![]() |
面向 ColorOS 图库和 OPPO 生态:
- 保留 ColorOS 图库兼容性和继续编辑能力;
- 保留 OPPO 相机元数据和私有尾部数据;
- 支持恢复可见原机水印;
- 适合照片仍主要在 OPPO / 一加 / realme 设备上管理。
面向 Apple 照片和标准 HDR 生态:
- 生成标准 ISO 21496-1 HDR HEIC;
- 配合 Apple 摄影风格、人像模式等能力;
- 不追加 OPPO 私有尾部数据;
- 适合由 iPhone、Apple 照片或其他标准 HDR 应用继续处理。
旧版高级兼容策略仍然保留在设置中,普通使用只需要在“OPPO 兼容”和“Apple 标准”之间选择。
这是 0.3.0 的核心工作流:
- 选择 OPPO 原始照片,生成或复用 OPPO 兼容文件;
- 生成 Apple 照片摄影风格编辑副本,发送到 iPhone;
- 在 Apple 照片中继续调整摄影风格或人像相关效果;
- 将回传照片交给 XDRemux;
- 根据 OPPO 原始照片恢复可见原机水印、OPPO 元数据和私有尾部数据;
- 最终选择输出 OPPO 兼容 或 Apple 标准。
Windows 和 Android 使用 Rust 跨平台 HEIF 编解码器完成解码、水印合成和重新编码;macOS / iOS 继续保留 Apple ImageIO 原生路径。
v0.4.0 新增。导入 OPPO / Android 的 Motion Photo 后:
- 自动识别双码流结构(Android V1 / legacy MicroVideo / HEIF mpvd / OPPO LPEX),拆出静帧与视频;
- 默认合成 Live Photo:生成 HEIC + MOV 配对,可直接导入 Apple 照片播放实况与声音;也可选择仅静帧或拆分静帧 + 视频;
- 生成的元数据轨道符合 Apple Live Photo timed metadata 规范(
tref→cdsc); - 照片详情面板可检视实况照片的双码流规格、时长与音轨信息。
iPhone 上的实况播放与声音需按机型验收;普通照片不受影响。
两项功能仍属于实验性能力。目标是输出可以在 Apple 照片中继续编辑的文件,不承诺与 Apple 原生结果逐像素等价。
- Rust 全平台实现为默认路径;
- 输出可以在 Apple 照片中继续调节摄影风格;
- macOS / iOS 可切换到原版 Swift 后端;
- 自动生成结果后会进行结构与可编辑性检查。
- 新增独立开关,依据 iPhone 18 Pro 原生样本逆向的容器契约,为 Apple 输出注入
texture_styles元数据与 12 个语义分区 matte,在 Apple 照片(iOS 26/27)中解锁 质感 / 胶片颗粒 / 光晕 编辑; - 与普通摄影风格为依赖式互斥:开启摄影风格 3 自动连带普通摄影风格(原生契约要求两项共存);
- 任意照片输入均可输出摄影风格(v0.4.2 起):非 OPPO ProXDR 的照片不再「附加元数据到
原容器」(Photos 会拒绝缺 scaffold 的容器),而是在 Rust 中重编码为完整容器——解码
→ 重建标准容器 → 生成完整 styles scaffold(
styledeltamap/linearthumbnail/semanticmattes/ styles 项)→ 注入契约。因此普通摄影风格与摄影风格 3 都在任意照片上可用; - 解码全部在 Rust 内完成(HEIC/HEIF、JPEG、PNG),不依赖任何平台编解码器, 各平台行为一致;拍摄 EXIF(机型、时间、GPS 等)从原图恢复,方向归一化后不再二次旋转;
- 已知限制:
- HEVC 4:4:4 / 4:2:2 输入暂不支持(iPhone 截图等,见下);
- 非 OPPO 照片本身携带的 HDR 增益图不参与提升,输出为 SDR + 风格;
- 分区 matte 为纯黑占位,柔肤暂无效果(后续接入真实分割);
- 与 OPPO ProXDR 转换的关系:OPPO 输入走完整 HDR 转换管线(保留增益图),其它输入走 SDR 重建路径(恒等增益图,不做 HDR 提升)。
- iPhone 截图的 HEIC(HEVC Rext 4:4:4 10-bit)暂不能作为输入——内置的纯 Rust
解码器(
heif-oxide/rust_h265)目前只支持 4:2:0。相机照片通常为 4:2:0,不受影响。 后续计划:接入支持 4:2:0/4:2:2/4:4:4 的解码器,或按平台回退到系统解码器 (见 docs/plans/sdr-decode-platform-coverage.md); - 非 OPPO 照片若自带 HDR 增益图,转换后会丢失 HDR(输出 SDR + 摄影风格);
- 摄影风格 3 的柔肤仍为占位(无真实皮肤分割);
- 非 Standard 风格(如「鲜艳」「暖色」)的部分调节参数尚未支持。
- 支持带后置深度数据(尾部
rear.depth)的 OPPO 人像照片,HEIC 与 JPEG 导出均可; - 转换后的底图取自尾部
src.image(Ultra HDR JPEG),是未虚化、未裁切、不含品牌水印的相机原始帧;关闭人像效果时看到的就是这张干净原图,开启后由深度实时渲染虚化; - 输出方向统一:旋转烘焙进主图像素(
irot=0),最终 EXIF Orientation 归一为 1,iOS / OPPO / 鸿蒙图库显示方向一致(已真机验证); - 拍摄 EXIF(机型、镜头、时间、曝光、ISO、GPS 等)从原图恢复,不丢失;仅尺寸/ColorSpace 等渲染相关字段随输出更新,旧缩略图不沿用;
- 深度标定使用 OPPO 写在
rear.depth.config里的每张照片深度曲线,光圈拨杆在 Apple 照片中可用(实测 f/1.4 与 f/16 虚化差异明显);写入的SimulatedAperture即拍摄时的原始光圈值; - 默认不自动开启人像效果:实测补写 Apple 原生照片携带的
PortraitScore/PortraitScoreIsHigh无法改变默认状态;要默认开启需让主图本身即虚化结果,与「关闭时显示清晰原图」相互冲突,故由用户在照片 App 中手动开启; - 缺少
rear.depth的照片自动跳过;不自动 fallback,也不会伪造深度信息;源文件无可用src.image时回退到 OPPO 主图底图; - 独立人像实验室入口暂时关闭,设置中的人像模式开关保留。
实现细节与标定依据见 docs/modules/portrait-pipeline.md。
| 平台 | Rust 转换 | OPPO 兼容 | Apple 标准 | 原机水印恢复 | 备注 |
|---|---|---|---|---|---|
| Windows | ✅ | ✅ | ✅ | ✅ | x265 静态链接;WIC 预览依赖系统 HEIF/HEVC 扩展 |
| Android | ✅ | ✅ | ✅ | ✅ | SAF、分享导入、MediaStore、后台转换 |
| macOS | ✅ | ✅ | ✅ | ✅ | ImageIO 原生路径;可选 Swift 后端 |
| iOS | ✅ | ✅ 实验 | ✅ 实验 | ✅ 实验 | unsigned IPA,自签侧载;部分能力需真机验证 |
| HarmonyOS | ✅ | ✅ | ✅ | ✅ | unsigned HAP,DevEco 签名侧载;已真机验证转换/人像/方向/EXIF |
- 下载并安装
XDRemux-Windows-*-Setup.exe; - 拖入 HEIC 文件,或点击选择文件;
- 选择 OPPO 兼容 或 Apple 标准;
- 开始转换。
Windows 队列预览通过系统 WIC 解码 HEIC。若预览不可用,请安装 Microsoft Store 中的“HEIF 图像扩展”和“HEVC 视频扩展”;转换本身不依赖这两个扩展。
- 下载
XDRemux-macOS-*.dmg; - 将
XDRemux.app拖入 Applications; - 首次打开如被 Gatekeeper 拦截,右键选择“打开”;
- 选择照片或使用“一帧影像,动用两台手机”流程。
- 下载并安装
XDRemux-Android-*.apk; - 使用系统文件选择器导入,或从相册/文件管理器分享到 XDRemux;
- 转换后可保存到系统图库、分享或重新打开;
- 后台转换使用前台服务保持任务存活。
Android 使用 SAF,不默认索取完整存储权限。
Release 提供 unsigned IPA,需要自行签名安装:
- Xcode + 免费 Apple ID 可侧载;
- AltStore / SideStore / Sideloadly 等签名工具也可使用;
- 免费签名通常 7 天过期;
- 首次安装需在设置中信任开发者证书。
iOS 支持从相册、文件和分享扩展导入 HEIC;Apple 摄影风格、人像模式和 OPPO 写回仍以真机验证结果为准。
- 下载
XDRemux-HarmonyOS-*-unsigned.hap; - 用 DevEco Studio 签名后安装,或在设备开发者选项中允许调试安装;
- 支持系统文件选择器导入与转换;转换核心与输出结构已在鸿蒙真机验证(含人像、HDR、方向与 EXIF)。
展开查看高级能力与设置
- LHDR / UHDR 容器识别;
- ISO 21496-1 gain map 与 tmap 元数据写入;
- EXIF 方向感知;
- OPPO 拍摄模式分类;
- 源 SDR 画面位级保留,不重新编码;
- 输出结构验证;
- 可选严格 ISO tmap;
- 可选 GPU gain map 编码(Android MediaCodec / macOS VideoToolbox)。
- 多文件队列与并行转换;
- 转换进度和失败重试;
- 实况照片合成与 Motion Photo 识别;
- 照片详情检视(EXIF / HDR / 实况结构);
- 按拍摄模式分目录或分相册输出;
- 自动更新检查;
- 批量完成通知;
- 断点续传;
- Windows 原生拖拽;
- Android 分享接收与后台转换;
- iOS 相册 / 文件 / 分享扩展导入。
cargo build --workspace --release
./target/release/xdremux-conformance convert input.heic output.heicHEVC 编码默认使用 vendored x265,Windows / macOS / Android 同一路径,无需安装 ffmpeg。
# Windows(MSVC)
cmake -S xdremux/rust/vendor/x265/source -B xdremux/rust/vendor/x265/build_windows \
-G "Visual Studio 17 2022" -A x64 -DENABLE_SHARED=OFF -DENABLE_CLI=OFF \
-DXDREMUX_SKIP_RC=ON
cmake --build xdremux/rust/vendor/x265/build_windows --config Release --target x265-static
# macOS / Linux
cmake -S xdremux/rust/vendor/x265/source -B xdremux/rust/vendor/x265/build_desktop \
-DENABLE_SHARED=OFF -DENABLE_CLI=OFF
cmake --build xdremux/rust/vendor/x265/build_desktop --target x265-static -j如需回退到 ffmpeg 子进程编码,构建 Rust 时设置:
XDREMUX_USE_FFMPEG=1cargo build -p xdremux-core --releasecd apps/flutter
flutter build windows --release
flutter build macos --release
flutter build apk --releaseAndroid 原生库需要先交叉编译:
cd xdremux/rust
cargo ndk -t arm64-v8a -o "../../apps/flutter/android/app/src/main/jniLibs" build --releaseiOS 需要:
rustup target add aarch64-apple-ios
cd xdremux/rust
./build_ios.sh
cd ../../apps/flutter
flutter build ios --release更完整的 iOS 部署、签名和 Swift 后端说明见 apps/flutter/ios/ 相关配置。
- Rust 单元测试;
- Conformance 一致性验证;
- GitHub Actions CI / Release;
- Windows 与 Android 自动发布;
- macOS DMG 与 iOS unsigned IPA 资产;
- OPPO / Apple 真实设备兼容性仍需按机型验证。
python3 tests/conformance/driver.py \
--sample-dir <sample-dir> \
--out-report conformance_report.md- 转换前请保留原始文件;
- Apple 摄影风格和人像模式为实验性能力,不承诺与 Apple 原生逐像素等价;
- 人像模式要求照片包含后置深度数据;
- OPPO 图库对 OPPO 兼容文件进一步编辑后,HDR gain map 可能丢失;
- iOS 未走 App Store 或 TestFlight,需要自行签名;
- HarmonyOS HAP 未签名,需要 DevEco Studio 侧载,未上架应用市场;
- Linux 桌面目标尚未创建。
面向贡献者与逆向研究者的完整文档在 docs/README.md,按读者划分了阅读路径:
- 架构:系统总览、转换/写回数据流、平台后端矩阵、FFI 契约
- 格式逆向(本项目核心资产):OPPO ProXDR 容器与私有尾部、水印布局与边框带检测、Apple 摄影风格图结构、ISO 21496-1 增益映射、HEVC 色彩约定实测
- 模块:容器手术模板、x265 编码路径、风格/人像/水印恢复管线
- 运维:四平台构建、发版清单、CI 剖析
另附 ISO 标准中译(docs/standards/)与平台行为矩阵(docs/validation/)。
| 路径 | 用途 |
|---|---|
xdremux/rust/ |
Rust 核心、容器解析、水印编解码与 FFI |
apps/flutter/ |
Flutter App 与 Windows / Android / macOS / iOS 平台集成 |
tests/conformance/ |
一致性与结构验证 |
docs/ |
技术文档(架构、格式逆向、模块、运维)与标准中译 |
tools/installer/ |
Windows 安装包与发布说明 |
原版 Swift / Python 参考实现在上游仓库 21Z121Z1/XDRemux。
本项目用于照片格式转换、容器研究和个人设备间工作流。 Apple 私有框架相关内容仅用于 macOS / iOS 侧载研究,不用于 App Store 分发。




