Skip to content

Repository files navigation

XDRemux

简体中文 | English

把 OPPO、OnePlus、realme 的 ProXDR 照片转成通用的 HDR 照片格式(ISO/TS 21496-1),让 iPhone、Mac 和其他支持这个标准的地方都能正常显示。

ProXDR 的 HDR 信息存在厂商私有数据里,换个相册打开就是一张亮部被压平的普通照片。XDRemux 把它翻译成通用格式,画面数据一个字节都不动。

快速开始

需要 macOS 15 或更高版本,以及 Swift 6。

git clone https://github.com/21Z121Z1/XDRemux.git
cd XDRemux
swift build

转换单张:

.build/debug/xdremux convert --input IMG_001.heic --output IMG_001_hdr.heic

批量转换一个目录:

.build/debug/xdremux batch --input-dir photo_dump/ --output-dir converted/

Warning

convert 省略 --outputbatch 省略 --output-dir 时会直接覆盖原文件。请先备份原片。

能输出什么

想要的结果 加什么参数
标准 ISO HDR 默认,不加参数
OPPO 相册也能识别的 HDR --oppo-compatible
Apple Photos 摄影风格编辑 --apple-photographic-styles
Apple Photos 人像景深编辑 --apple-portrait
按拍摄模式归档 categorizebatch --categorize

默认只重写 HDR 那部分数据(业内叫 Gain Map,记录每个像素该提亮多少),画面、水印、大师模式这些一律原样保留。HDR 精度也保持原样;--oppo-compatible 必须把它降一档 OPPO 相册才认,降完回不去。

全部参数、默认值和退出码见 CLI 参考,或直接跑 swift run xdremux --help

按拍摄模式归档

读出照片里记录的拍摄模式,把照片复制进对应的中文目录(人像夜景大师模式 等)。只复制,不修改也不删除源文件:

swift run xdremux categorize --input photo_dump/ --output-dir categorized/ --dry-run

--dry-run 只打印计划。给 batch--categorize 可以让转换结果直接写进这些目录。Python 版本行为一致:

python3 xdremux/python/XDRemux.py categorize --input photo_dump/ --output-dir categorized/

读不出拍摄模式的照片会留在输出根目录,不算失败。

Apple 摄影风格与人像

让转换后的照片在 Apple Photos 里支持摄影风格和人像景深编辑。这些数据都由你这张照片本身算出来,不用另找一张 iPhone 照片当模板。人像功能要求源照片用人像模式拍摄、景深数据还在 —— 后期编辑过的可能已经丢了。两个功能可以同时开,但都不能和 --oppo-compatible 一起用。

Important

这两个功能尚未通过正式验收。检查只做到文件结构这一层:能打开、数据在。没有验证过导进真机 Photos 之后编辑、保存、再打开还撑不撑得住。详见 Apple 功能文档

生成摄影风格数据很吃 CPU。批量处理请用 release 构建,比默认的调试构建快数倍:

swift build -c release
.build/release/xdremux batch --apple-photographic-styles --input-dir photo_dump/ --output-dir styled/

macOS App

scripts/build_and_run.sh run

图形界面覆盖转换和按模式分类两条流程,支持拖入文件或目录、预览、并发设置、断点续传和在访达中显示结果。

Python CLI

跨平台,只做 HDR 转换,没有 Apple 功能。需要 Python 3.11 或更高版本。

pip install -e .
xdremux-py convert --input IMG_001.heic --output IMG_001_hdr.heic

不安装也可以,从仓库根目录用 python3 xdremux/python/XDRemux.pypython3 -m xdremux_py 调用同一套命令。

作为 Swift Package 使用

.package(url: "https://github.com/21Z121Z1/XDRemux.git", branch: "main")
import XDRemuxCore

let input = InputSource(url: inputURL)
let result = try ConversionEngine.convert(
    ConversionRequest(
        input: input,
        output: OutputTarget.file(outputURL).destination(for: input),
        configuration: ConversionConfiguration()
    )
)

Apple 功能在 XDRemuxAppleFeatures 产品里,入口是 AppleFeatureConversionEngine。详见开发文档

文档

文档 内容
CLI 参考 全部命令、参数、默认值、退出码
Apple 功能 摄影风格和人像能做什么、验证到了什么程度
支持设备 已知能拍 ProXDR 的机型
开发文档 模块结构、Swift Package 集成、构建流程
技术实现 HDR、HEIF 文件结构和 ISO 标准的实现细节

已知限制

  • 转换后的照片如果在 OPPO 相册里重新编辑并保存,HDR 数据可能会被抹掉。
  • 各家应用对 HDR 亮度和色彩的处理方式不一样,同一张照片在不同地方看起来可能有差别。
  • 设备在支持列表里,不代表它拍的每张照片都能转。实际取决于拍摄模式、固件版本和这张照片被编辑过没有。
  • 本项目用于技术研究。转换结果不要作为原始照片的唯一副本。

About

一个将 OPPO/OnePlus/realme 设备拍摄的 ProXDR HEIC 转换为 ISO 21496-1 HDR HEIC 的转换与分析工具。

Resources

Stars

21 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages