FH Forza HDR JXR Wallpaper Converter
Static project showcase(靜態專案展示頁)

Forza HDR JXR to SDR Wallpaper Converter

將 NVIDIA App 產生的 Forza `.jxr` HDR screenshots(HDR 截圖)保留下來, 並透過 `hdrfix.exe` 轉成 SDR `.png`,讓 Windows wallpaper slideshow(桌布幻燈片)使用穩定、清晰的 SDR 圖片。

Preserve originals原始 `.jxr` 預設保留,不刪除。
SDR output桌布資料夾只放轉換後 SDR 圖片。
Private images stay localShowcase 不嵌入真實截圖。
Wallpaper-readyWindows 桌布幻燈片指向輸出資料夾。

Dynamic Pipeline(水管流程)

資料只從本機截圖資料夾流向 SDR 桌布資料夾;展示頁不讀取、不掃描、不嵌入真實圖片。

NVIDIA App JXR Input hdrfix Tone Map SDR PNG Windows Wallpaper
NVIDIA App screenshot Forza HDR `.jxr` `hdrfix.exe` wrapper `D:\桌布\Forza Horizon 6` Wallpaper slideshow

System Architecture(系統架構)

Repo 只負責 workflow wrapper(工作流程包裝);核心 HDR 轉換交給外部 `hdrfix.exe`。

Interface(介面)

  • README usage(使用說明)
  • config.example.json
  • Scheduled Task(工作排程)

Workflow(工作流)

  • test-presets.ps1
  • convert-once.ps1
  • watch-folder.ps1
  • common.ps1

Conversion(轉換)

  • hdrfix.exe
  • preset exposure test
  • SDR PNG output

Boundary(邊界)

  • 不提交 `.jxr`
  • 不提交桌布輸出
  • 不提交 `config.json`

User Architecture(使用者架構)

使用者只要安裝 `hdrfix.exe`、設定資料夾,之後可手動批次轉換或讓監控腳本常駐。

1

安裝

下載 `hdrfix.exe`,放到 `tools\hdrfix.exe`。

2

試片

執行 `test-presets.ps1`,用肉眼挑最接近遊戲內 HDR 觀感的 exposure(曝光)。

3

設定

把選好的 `exposure` 寫回 `config.json`,確認輸入與輸出資料夾。

4

批次

執行 `convert-once.ps1`,先處理現有 `.jxr`。

5

監控

執行 `watch-folder.ps1`,新 `.jxr` 寫入完成後自動轉換。

6

桌布

Windows 桌布幻燈片指向 `D:\桌布\Forza Horizon 6`。

使用者如何使用此功能

這段是日常操作手順:第一次先完成設定,之後只要批次轉換或讓監控常駐,Windows 桌布就固定吃 SDR 輸出資料夾。

First run

第一次設定

把 `hdrfix.exe` 放到 `tools\hdrfix.exe`,複製 `config.example.json` 成 `config.json`,確認 `inputFolder` 與 `outputFolder`。

Copy-Item .\config.example.json .\config.json
notepad .\config.json
Preset test

先挑主觀最接近 HDR 的 exposure

選一張代表性的 `.jxr`,輸出多組 exposure(曝光)試片;比較後把最喜歡的值寫回 `config.json`。

.\scripts\test-presets.ps1 -InputPath "C:\Users\邢弘軒\Videos\NVIDIA\Forza Horizon 6\sample.jxr" -ConfigPath .\config.json

# output:
# sample_exp-2.png
# sample_exp-1.png
# sample_exp0.png
# sample_exp1.png
Apply preset

把選好的 exposure 寫回設定

例如你覺得 `sample_exp1.png` 最接近遊戲內 Forza HDR 觀感,就把 `config.json` 的 `exposure` 設為 `1`。

{
  "exposure": 1
}
Batch convert

先轉換現有截圖

當資料夾裡已經有一批 Forza `.jxr`,先跑一次批次轉換;已存在的 `.png` 會依 `overwrite=false` 跳過。

.\scripts\convert-once.ps1 -ConfigPath .\config.json
Watch mode

之後監控新截圖

玩遊戲時讓監控腳本開著,新 `.jxr` 寫入完成後會自動輸出 SDR `.png`,原始 `.jxr` 預設保留。

.\scripts\watch-folder.ps1 -ConfigPath .\config.json
Auto start

登入後自動啟動

不想手動開監控時,建立 Windows Scheduled Task(Windows 工作排程);未來可用 `-Uninstall` 移除。

.\scripts\install-scheduled-task.ps1 -ConfigPath .\config.json
.\scripts\install-scheduled-task.ps1 -Uninstall
Wallpaper

設定 Windows 桌布

到 Windows Settings(Windows 設定)→ Personalization(個人化)→ Background(背景),選 Slideshow(幻燈片),資料夾指向 SDR 輸出位置。

D:\桌布\Forza Horizon 6
Troubleshooting

常見狀況

如果腳本不能執行,改用 `-ExecutionPolicy Bypass`;如果沒有輸出,先確認 `hdrfix.exe` 路徑、input folder(輸入資料夾)與 log(紀錄)。

powershell -NoProfile -ExecutionPolicy Bypass -File .\scripts\convert-once.ps1 -ConfigPath .\config.json
Get-Content .\logs\converter-*.log
Private Data Boundary

不提交真實截圖

`.jxr` 原始檔、轉出的桌布、log(紀錄)、`config.json` 與 `hdrfix.exe` 都留在本機。

Error handling

失敗不中斷整批

單張失敗會寫 log,下一張繼續處理;已存在輸出檔會依 `overwrite=false` 跳過。

Future path

保留升級路徑

GUI(圖形介面)、JPG quality(JPG 品質)、多 input folder(多輸入資料夾)與 Toast notification(Toast 通知)留待未來。

Verification Panel(驗證面板)

先跑 repo verification(儲存庫驗證),再用一張測試 `.jxr` 做人工轉換驗收。

.\scripts\verify.ps1
.\scripts\test-presets.ps1 -InputPath ".\sample.jxr" -ConfigPath .\config.json
.\scripts\convert-once.ps1 -ConfigPath .\config.json
.\scripts\watch-folder.ps1 -ConfigPath .\config.json