Skip to content

About

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

Topics

Resources

Stars

61 stars

Watchers

0 watching

Forks

 
 

Repository files navigation

XDRemux

让照片跨越设备,也保留继续创作的可能。

XDRemux 是一款跨平台照片格式转换工具。它将 OPPO、一加、realme 拍摄的 ProXDR 照片转换为标准 HDR HEIC,并根据后续使用场景选择「OPPO 兼容」或「Apple 标准」输出。

除了 HDR 转换,还支持符合条件的 OPPO / 华为人像转换、Apple 摄影风格数据写入,以及动态照片拆分与 Live Photo 配对。你可以在不同设备之间管理、编辑和回传照片,而不只是得到一张能显示的图片。

Flutter 跨平台版采用 Flutter 界面 + Rust 图像处理引擎,覆盖 Windows、macOS、Linux、Android、iOS 和 HarmonyOS。HarmonyOS 另有共用 Rust 引擎的 ArkUI 原生预览版。

官网 xdremux.app · 下载最新版本 · 问题反馈 · 技术文档 · 鸿蒙原生版

当前已发布跨平台版本:v0.4.5(0.4.5+39)。鸿蒙原生版:0.5.2,使用独立发布标签与安装包。 本轮包含 JPEG HDR / ICC 色彩修复、iPhone Duo 布局、Apple HDR 缩略图修复与 Linux 桌面预览,见 0.4.5 更新说明。 Apple 摄影风格、人像及 Live Photo 等能力包含实验性实现,实际效果取决于原始照片结构、系统版本和目标设备。请保留原图,先用少量照片验证自己的工作流。

下载与安装

v0.4.5 发布页同时提供 Flutter 跨平台版和鸿蒙原生 0.5.2;原生版的独立发布页仍保留。请选择对应平台的文件,侧载和 macOS 授权步骤见安装说明:

平台 / 版本 安装包 安装方式
Windows x64 · Flutter 0.4.5 Setup.exe 运行安装器,无需另装 ffmpeg
macOS · Apple Silicon · Flutter 0.4.5 DMG 将应用拖入 Applications;当前包不支持 Intel Mac 转换
Linux x64 · Flutter(预览) 0.4.5 AppImage · tar.gz AppImage 赋予执行权限后运行;tar.gz 解压后运行 ./run.sh 或 ./install.sh(用户级安装)。需 GTK3 与 glibc ≥ 2.35(Ubuntu 22.04+)
Android ARM64 · Flutter 0.4.5 APK Android API 24+,相同签名可覆盖升级;不支持 32 位或 x86_64 设备
iOS · Flutter 0.4.5 未签名 IPA iOS 15+,需自行签名侧载;Duo 功能要求相应新系统
HarmonyOS · Flutter 0.4.5 未签名 HAP Profile / AOT、debug:true,需开发自签;注意下方导出限制
HarmonyOS · ArkUI 原生版 0.5.2 未签名 HAP Debug / debug:true,Rust 核心保持 Release 优化,需开发自签

当前发布不提供 Windows ARM64 安装包。Linux x64 随 v0.4.5 提供 AppImage / tar.gz,已纳入统一构建与发布资产检查,但仍按预览支持发布,不代表所有发行版和桌面功能已完整验收;构建与打包方式见构建指南的 Linux 小节。请从上述官方发布页下载安装包。

iOS 与 HarmonyOS 安装包未签名,不能直接按普通商店应用安装。HarmonyOS 两个当前附件都供开发自签使用,证书与 Profile 需匹配包名和目标设备,且受设备范围与有效期约束;它们不是免签包或应用市场上架包。Flutter 与原生版包名不同,签名配置不能直接混用。iOS 请使用适合自己设备的签名与侧载方式。

macOS 包未做 Developer ID 签名与公证。将应用拖入「应用程序」并确认下载来源可信后,在 Mac 终端执行,再打开应用:

sudo xattr -rd com.apple.quarantine "/Applications/XDRemux.app"

此命令仅清除该 App 的下载隔离标记;照片、文件访问权限仍需按系统提示单独授权。也可在「系统设置 → 隐私与安全性」中选择「仍要打开」。完整步骤见安装与侧载说明。

0.4.5 / 原生 0.5.2 本轮更新

  • JPEG HDR 与色彩:兼容部分小米/红米 JPEG 的 ISO HDR 元数据版本差异,并保留受支持的 P3、sRGB 等 RGB ICC 配置,避免转换时丢失源色彩声明。
  • iPhone Duo 布局:接入系统 trailing vertical bar,优化侧栏和主操作可达性;iOS 使用 Xcode 27.1 / iOS 27.1 SDK 构建,最低系统仍为 iOS 15.0。
  • Apple HDR 缩略图:修复部分 HDR HEIC 的 iOS 黑色缩略图,macOS 同步规范化预览;新增 iOS 模拟器构建支持并修复部署目标链接问题。
  • Linux 与 Android 出包:Linux x64 预览包纳入统一流程;Android 收紧为与 Rust 核心匹配的 ARM64-only APK,正式签名与 0.4.4 一致。
  • 鸿蒙原生 0.5.2:独立版本已同步 JPEG HDR / ICC 核心修复,保留原生照片管理与开发自签用 Debug HAP;Flutter 鸿蒙继续提供独立 profile AOT 包。

完整变化与验证范围见 Flutter 0.4.5 更新记录和鸿蒙原生 0.5.2 发布说明。

选择照片的输出方式

应用提供两种主要输出模式。它们面向不同的照片管理生态,不是画质高低的选择。

输出模式 适用场景
OPPO 兼容 继续在 OPPO / 一加 / realme 图库管理照片,可按设置保留相机元数据、私有尾部数据与继续编辑所需的信息。
Apple 标准 面向 Apple 照片与标准 HDR 工作流,不追加 OPPO 私有尾部数据,并可按照片条件写入摄影风格或人像编辑数据。

ProXDR 转换支持 LHDR / UHDR 容器,将原有增益图转换为 ISO 21496-1 HDR 数据。HDR 能否显示、图库是否允许继续编辑,仍取决于目标应用与设备。

从导入到导出

Flutter 版以转换队列为主要入口:导入照片、查看详情、选择选项,再集中处理和导出。

  1. 添加照片:通过系统选择器导入 HEIC、HEIF 或 JPEG;支持的平台也可通过系统分享或桌面拖放添加。
  2. 查看详情:检查文件格式、尺寸、EXIF、HDR 类型、拍摄模式,以及识别到的动态照片信息。
  3. 选择转换方式:在设置中选择输出模式,按需开启摄影风格、人像或动态照片处理。
  4. 开始转换:在队列中查看进度与结果,失败项目可重试,也可调整设置后重新转换。
  5. 导出结果:桌面端使用输出目录;Android / iOS 可保存到相册或分享原文件。Live Photo 的系统保存方式因平台而异,见下方说明;鸿蒙 Flutter 当前仍有导出限制。

应用还提供队列检查点恢复、分类输出、完成通知和中英文界面。移动端采用紧凑队列与底部操作栏,桌面端提供更宽的队列和详情布局;文件访问与后台运行能力按平台有所不同。

界面预览

Windows macOS Linux(本地开发目标)
Windows 主界面 macOS 主界面 Linux 主界面
Android iOS
Android 主界面 iOS 主界面

iPhone Duo 适配

iPhone Duo(iPhone19,4,iOS 27.1)在屏幕右侧保留了 84pt 宽的系统竖栏区(UITraitCollection.verticalBarEdge == trailing)。应用把工具操作放进这条区域,内容仍按 382pt 排版,并按列表长度与折叠状态切换主操作位置;展开后队列改为网格(竖屏 2 列、横屏 3 列)。横屏时竖栏若转到左侧,工具操作随之移到左侧,内容同样避开该区域。

合上 · 空队列 合上 · 队列 ≥ 4
合上竖屏 合上竖屏,主操作浮动
展开 · 竖屏(669×951) 展开 · 横屏(951×669)
展开竖屏 展开横屏

Apple 摄影风格:让照片可以继续编辑

选择 Apple 标准输出后,可为支持的照片生成摄影风格编辑数据,让照片在支持的 Apple 照片版本与设备上继续调整。

  • 摄影风格:写入完整的风格编辑结构,而不只是改变照片的显示效果。
  • 摄影风格 3(质感 + 颗粒):在基础摄影风格上加入用于质感、胶片颗粒与光晕编辑的数据;开启时会同时启用基础摄影风格。
  • 普通照片也可使用:支持的普通 HEIC / HEIF / JPEG 可通过重编码生成完整风格容器,不限于 OPPO ProXDR。

当前产品转换统一使用 Rust 引擎,不再提供 Swift 转换后端切换。仓库中的 Apple 平台原生接口与研究代码不等于另一个可选产品引擎。

需要注意:

  • OPPO ProXDR 走 HDR 转换路径;已验证的华为原生 HDR 走专用保留路径。其他普通照片的风格重建路径输出 SDR + 风格,不保证保留原有 HDR 增益图。
  • 普通照片的语义分区蒙版仍包含占位实现,柔肤效果尚未完整实现;不代表具有与 Apple 原生照片相同的主体分割能力。
  • 部分非 Standard 风格的调节参数尚未支持,效果不承诺与 Apple 原生逐像素等价。

人像:保留景深,交给 Apple 照片继续调整

人像转换依赖原始照片中真实存在、且可读取的深度信息。应用不会从普通照片中自动生成景深,也不会伪造人像数据。

OPPO 人像

支持带 rear.depth 的 OPPO 后摄人像照片,以及带受支持 front.depth / 标定信息的前摄人像原图(0.4.4 新增),包括受支持的 HEIC 与 JPEG 结构。后摄转换优先使用尾部 src.image 中未虚化、未裁切、无品牌水印的相机底图,结合每张照片的深度标定数据生成 Apple 人像结构。前摄与后摄结构不同,并非所有导出或重编码后的照片都保留所需数据。

在 Apple 照片中关闭人像效果时可查看清晰底图,开启后由景深数据渲染虚化。人像效果通常需要在 Apple 照片中手动开启。缺少可用 src.image 时会回退到 OPPO 主图;缺少受支持深度数据则跳过人像转换。

华为人像

支持已验证的 Mate 70 人像 HEIC → Apple 人像 路径,包含视差、对焦区域、人像光效与主体蒙版,并支持在该路径上追加摄影风格数据。

这项支持以现有 Mate 70 原始样片为依据,不代表所有华为机型与拍摄模式都已适配。实现与验证范围见人像管线和设备兼容矩阵。

动态照片:拆分资源,或生成 Live Photo 配对

XDRemux 可识别受支持的 OPPO / Android Motion Photo,以及华为 OpenHarmony 动态照片,查看其中可读取的视频规格、时长和音轨信息。

你可以按后续使用需求选择:

  • 仅静帧:提取并处理照片画面。
  • 静帧 + 视频:拆分资源,分别保存和使用。
  • Live Photo 配对:生成带配对标识与封面时刻的同名 HEIC + MOV,供 Apple 照片导入。

已支持的结构包括 Android V1 / legacy MicroVideo、HEIF mpvd、OPPO LPEX,以及已验证的华为追加视频结构。

Live Photo 配对包含 HEIC + MOV 两份资源,不是一张 HEIC。 「拆分静帧 + 视频」只是提取资源,不等于生成 Apple 配对标识。

平台 当前保存与传输方式
iOS · Flutter 在应用内「保存到相册」通过 PhotoKit 将照片与配对视频写入同一个 Live Photo 资产;需要相册添加权限。
Android · Flutter 保存 HEIF + MOV 两个独立媒体文件,或一起分享配对原文件;不承诺 Android 图库将其显示为本机实况。
Windows / macOS · Flutter 保留输出目录中的配对文件,一起导入 macOS「照片」;文件存在不代表任意接收软件都会识别配对。
HarmonyOS · Flutter 当前统一相册保存入口尚未接入(包括普通静图),双文件分享也未实现;成对文档导出建议使用鸿蒙原生版。
HarmonyOS · 原生 可从队列导出配对 HEIC + MOV 文档;与 Flutter 的 iOS PhotoKit 保存不是同一机制。

向 iPhone 传输时不要只发静图,也不要经会压缩、重编码或丢弃元数据的途径。iPhone「文件」App 中选中两个文件后保存,不保证自动合成 Live Photo;已验证可通过 macOS「照片」导入配对后再 AirDrop 到 iPhone。实际播放、声音与编辑能力仍以目标设备验收为准。

华为 HDR:已经兼容的照片,不必重复转换

已验证的 Mate 70 系列原生 HDR 照片包含标准增益图,默认会提示「无需转换」,保留原文件。需要添加 Apple 摄影风格、转换人像或处理动态照片时,再使用相应功能。

华为照片的识别、风格附加、人像及动态照片处理共用 Rust 管线,在五个平台上使用同一套核心逻辑。共用逻辑不等于所有设备都已完成真机验收,具体样片与平台验证记录见华为支持计划。

XMAGE xtstyle 目前用于只读诊断,尚未实现华为色彩风格到 Apple 摄影风格的语义映射。

一帧影像,动用两台手机

如果你希望用 OPPO 拍摄、在 iPhone 上编辑,再把照片带回 OPPO,应用提供独立的往返工作流:

  1. 保留 OPPO 原始照片,生成 Apple 照片编辑副本。
  2. 将副本发送到 iPhone,在 Apple 照片中调整摄影风格或人像效果。
  3. 将编辑后的照片回传 XDRemux,并配对原始照片。
  4. 按需恢复原机水印、OPPO 元数据和私有尾部数据,选择 OPPO 兼容或 Apple 标准输出。

一帧影像,动用两台手机

原图是恢复信息的依据,请不要只保留编辑副本。OPPO 图库对兼容文件再次编辑后,HDR 增益图仍可能丢失,建议先确认目标设备的表现。

平台差异与鸿蒙原生版

跨平台版共用 Rust 核心,导入、预览、导出与后台运行则使用各平台的集成方式:

  • Windows:支持原生拖放;缩略图涉及系统 WIC,另有 Rust 主图预览与编解码诊断。预览失败不等于转换一定失败,系统预览解码能力与 Rust 转换能力应分别检查。
  • macOS:使用 Rust 转换核心,并通过 ImageIO 等原生接口集成预览;当前发布包的转换核心仅支持 Apple Silicon。
  • Android:使用系统文件选择器导入,支持分享接收、保存图库与前台服务后台转换;系统省电策略仍可能影响任务运行。
  • iOS:支持相册、文件与分享扩展导入,使用 Rust 转换核心,PhotoKit 保存 Live Photo;提供自行签名的 IPA,未通过 App Store / TestFlight 分发。
  • HarmonyOS(Flutter):通过独立鸿蒙 Flutter 引擎与插件接入系统选择器和单文件分享,使用 Rust 转换核心;当前统一相册保存与配对双文件分享仍未接入。
  • Linux(本地开发 / 预览):使用 GTK 拖放与命令行参数导入照片,Rust FFI + 静态链接 x265 完成转换;文件选择走 XDG Desktop Portal。已提供 AppImage 与 tar.gz 预览包;系统托盘与完成通知暂未接入。

鸿蒙原生预览版在 feat/harmony-native 分支开发,采用 ArkTS / ArkUI,围绕「图库、队列、设置」组织界面。它共用 Rust 引擎,提供 HDR、摄影风格、人像与动态照片等核心能力;图库浏览、任务管理和导出交互则采用原生实现。

原生版使用独立包名 io.github.beetman.xdremux.arkui,可与 Flutter 版 io.github.beetman.xdremux 共存。当前版本为 0.5.2,独立标签 harmony-v0.5.2 不代表跨平台主线已经升级到 0.5.2。两端共享转换核心,但界面、预览、相册和文件导出分别集成,不能把一端的验收视为另一端已经通过。原生界面、构建方式与兼容边界请以原生版 README为准。

使用前需要了解

  • 保留原始照片:尽量导入未经社交软件压缩或图库重编码的原文件,私有尾部、深度或动态资源可能在转存时丢失。
  • 输入受照片结构限制:当前 App 选择器接受 HEIC / HEIF / JPEG,不等于所有这些扩展名的照片都可完成所有转换。
  • 部分 HEVC 输入尚不支持:纯 Rust 解码路径暂不支持 4:2:2 / 4:4:4,部分 iPhone HEIC 截图可能失败。进展见解码平台覆盖计划。
  • Apple 编辑能力属于实验功能:以支持的系统、设备与照片结构为准,不保证与原生拍摄结果完全等价。
  • 设备兼容性按样片增量验证:已有样片通过并非整个平台或品牌的全面背书。

反馈问题时,请附上运行平台、设备型号、系统与应用版本、转换选项、错误信息,以及可用于复现的原始样片。照片可能包含位置等隐私信息,分享前请确认授权与隐私范围。

开发与技术文档

当前主线常规 Flutter 构建固定 Flutter 3.47.7 / Dart 3.13.5,与 CI 一致;版本记录在 apps/flutter/.fvmrc。鸿蒙 Flutter 仍使用独立适配 SDK,不直接替换为官方 SDK。国内开发沿用 PUB_HOSTED_URL=https://pub.flutter-io.cn、FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn。

Linux 桌面本地开发使用同一 Flutter 3.47.7。系统依赖为 clang、cmake、ninja、pkg-config、GTK3、libayatana-appindicator 与 libnotify;Rust 核心按 CI 方式静态链接 x265 4.2,再由 apps/flutter/linux/CMakeLists.txt 打包进 bundle/lib。构建与运行步骤见构建指南的 Linux 小节;发布用 AppImage / tar.gz 由 tools/linux/package_linux.sh 生成(详见 tools/linux/README.md),产物保持 glibc 2.35(Ubuntu 22.04+)基线。

产品说明与工程细节分开维护,构建和研究资料请从以下入口查阅:

主线仓库结构:

路径 用途
xdremux/rust/ Rust 图像处理核心、容器解析、风格 / 人像 / 动态照片与 FFI
apps/flutter/ Flutter App 与各平台集成
tests/conformance/ 一致性与结构验证
docs/ 技术文档、研究计划与验证记录
tools/ 平台构建、安装器与发布工具

鸿蒙原生工程 apps/harmony/ 位于原生开发分支,并非当前主线的 Flutter 应用目录。

致谢与许可

本项目基于 21Z121Z1/XDRemux 的研究与原版 Swift / Python 实现开展跨平台移植,感谢上游作者及提供样片、验证与反馈的贡献者。

仓库许可见 LICENSE,第三方组件遵循各自许可证。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

61 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages