Skip to content
 
 

Repository files navigation

XDRemux

将 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
Windows 主界面 macOS 主界面
Android iOS
Android 主界面 iOS 主界面

核心能力

两种输出模式

OPPO 兼容

面向 ColorOS 图库和 OPPO 生态:

  • 保留 ColorOS 图库兼容性和继续编辑能力;
  • 保留 OPPO 相机元数据和私有尾部数据;
  • 支持恢复可见原机水印;
  • 适合照片仍主要在 OPPO / 一加 / realme 设备上管理。

Apple 标准

面向 Apple 照片和标准 HDR 生态:

  • 生成标准 ISO 21496-1 HDR HEIC;
  • 配合 Apple 摄影风格、人像模式等能力;
  • 不追加 OPPO 私有尾部数据;
  • 适合由 iPhone、Apple 照片或其他标准 HDR 应用继续处理。

旧版高级兼容策略仍然保留在设置中,普通使用只需要在“OPPO 兼容”和“Apple 标准”之间选择。


一帧影像,动用两台手机

这是 0.3.0 的核心工作流:

  1. 选择 OPPO 原始照片,生成或复用 OPPO 兼容文件;
  2. 生成 Apple 照片摄影风格编辑副本,发送到 iPhone;
  3. 在 Apple 照片中继续调整摄影风格或人像相关效果;
  4. 将回传照片交给 XDRemux;
  5. 根据 OPPO 原始照片恢复可见原机水印、OPPO 元数据和私有尾部数据;
  6. 最终选择输出 OPPO 兼容Apple 标准

一帧影像,动用两台手机

Windows 和 Android 使用 Rust 跨平台 HEIF 编解码器完成解码、水印合成和重新编码;macOS / iOS 继续保留 Apple ImageIO 原生路径。


实况照片(Live Photo / Motion Photo)

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 规范(trefcdsc);
  • 照片详情面板可检视实况照片的双码流规格、时长与音轨信息。

iPhone 上的实况播放与声音需按机型验收;普通照片不受影响。


Apple 摄影风格与人像模式

两项功能仍属于实验性能力。目标是输出可以在 Apple 照片中继续编辑的文件,不承诺与 Apple 原生结果逐像素等价。

Apple 摄影风格

  • Rust 全平台实现为默认路径;
  • 输出可以在 Apple 照片中继续调节摄影风格;
  • macOS / iOS 可切换到原版 Swift 后端;
  • 自动生成结果后会进行结构与可编辑性检查。

摄影风格 3(质感 + 颗粒,v0.4.1 新增,实验性)

  • 新增独立开关,依据 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 风格(如「鲜艳」「暖色」)的部分调节参数尚未支持。

Apple 人像模式

  • 支持带后置深度数据(尾部 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

使用说明

Windows

  1. 下载并安装 XDRemux-Windows-*-Setup.exe
  2. 拖入 HEIC 文件,或点击选择文件;
  3. 选择 OPPO 兼容Apple 标准
  4. 开始转换。

Windows 队列预览通过系统 WIC 解码 HEIC。若预览不可用,请安装 Microsoft Store 中的“HEIF 图像扩展”和“HEVC 视频扩展”;转换本身不依赖这两个扩展。

macOS

  1. 下载 XDRemux-macOS-*.dmg
  2. XDRemux.app 拖入 Applications;
  3. 首次打开如被 Gatekeeper 拦截,右键选择“打开”;
  4. 选择照片或使用“一帧影像,动用两台手机”流程。

Android

  1. 下载并安装 XDRemux-Android-*.apk
  2. 使用系统文件选择器导入,或从相册/文件管理器分享到 XDRemux;
  3. 转换后可保存到系统图库、分享或重新打开;
  4. 后台转换使用前台服务保持任务存活。

Android 使用 SAF,不默认索取完整存储权限。

iOS

Release 提供 unsigned IPA,需要自行签名安装:

  • Xcode + 免费 Apple ID 可侧载;
  • AltStore / SideStore / Sideloadly 等签名工具也可使用;
  • 免费签名通常 7 天过期;
  • 首次安装需在设置中信任开发者证书。

iOS 支持从相册、文件和分享扩展导入 HEIC;Apple 摄影风格、人像模式和 OPPO 写回仍以真机验证结果为准。

HarmonyOS

  1. 下载 XDRemux-HarmonyOS-*-unsigned.hap
  2. 用 DevEco Studio 签名后安装,或在设备开发者选项中允许调试安装;
  3. 支持系统文件选择器导入与转换;转换核心与输出结构已在鸿蒙真机验证(含人像、HDR、方向与 EXIF)。

高级功能

展开查看高级能力与设置

转换与容器

  • LHDR / UHDR 容器识别;
  • ISO 21496-1 gain map 与 tmap 元数据写入;
  • EXIF 方向感知;
  • OPPO 拍摄模式分类;
  • 源 SDR 画面位级保留,不重新编码;
  • 输出结构验证;
  • 可选严格 ISO tmap;
  • 可选 GPU gain map 编码(Android MediaCodec / macOS VideoToolbox)。

App 功能

  • 多文件队列与并行转换;
  • 转换进度和失败重试;
  • 实况照片合成与 Motion Photo 识别;
  • 照片详情检视(EXIF / HDR / 实况结构);
  • 按拍摄模式分目录或分相册输出;
  • 自动更新检查;
  • 批量完成通知;
  • 断点续传;
  • Windows 原生拖拽;
  • Android 分享接收与后台转换;
  • iOS 相册 / 文件 / 分享扩展导入。

Rust CLI

cargo build --workspace --release
./target/release/xdremux-conformance convert input.heic output.heic

从源码构建

准备 x265 静态库

HEVC 编码默认使用 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=1

Rust 核心

cargo build -p xdremux-core --release

Flutter App

cd apps/flutter

flutter build windows --release
flutter build macos --release
flutter build apk --release

Android 原生库需要先交叉编译:

cd xdremux/rust
cargo ndk -t arm64-v8a -o "../../apps/flutter/android/app/src/main/jniLibs" build --release

iOS 需要:

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 分发。

About

Cross-platform ProXDR HEIC → ISO 21496-1 HDR converter. Rust core + Flutter UI. Rewrite of 21Z121Z1/XDRemux.

Topics

Resources

Stars

38 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages