Skip to content

Commit 90a7f04

Browse files
committed
Merge branch 'wt/v0.2.0'
2 parents 4a9d1c1 + aec1dd1 commit 90a7f04

36 files changed

Lines changed: 1150 additions & 151 deletions

‎.github/workflows/ci.yml‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ jobs:
2222
run: pip install -e '.[dev]'
2323
- name: Test
2424
run: python -m pytest -v
25+
- name: Upstream check selftest
26+
run: python scripts/upstream_check.py --selftest
2527
- name: Review repro audit (all issues must stay fixed)
2628
shell: bash
2729
run: python docs/reviews/2026-09-20-repro.py

‎.github/workflows/release.yml‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,8 @@ jobs:
7171
"$BIN" install "$SGAME" --kit-dir "$SMK" --arch sm86 --mfg 4x
7272
test -f "$SGAME/dlssg_sm86.ini" && test -f "$SGAME/version.dll"
7373
"$BIN" doctor "$SGAME"
74+
"$BIN" report "$SGAME"
75+
"$BIN" --check-update
7476
"$BIN" uninstall "$SGAME"
7577
test ! -e "$SGAME/version.dll" && test ! -e "$SGAME/dlssg_sm86.ini"
7678
test -f "$SGAME/game.exe"
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
name: upstream-check
2+
3+
on:
4+
schedule:
5+
- cron: "17 6 * * *"
6+
workflow_dispatch:
7+
push:
8+
branches: [main]
9+
paths: ["scripts/upstream_check.py", ".github/workflows/upstream-check.yml"]
10+
11+
permissions:
12+
contents: read
13+
issues: write
14+
15+
jobs:
16+
check:
17+
runs-on: ubuntu-latest
18+
steps:
19+
- uses: actions/checkout@v4
20+
- uses: actions/setup-python@v5
21+
with:
22+
python-version: "3.13"
23+
- name: Upstream structure smoke
24+
id: smoke
25+
run: |
26+
set +e
27+
set -o pipefail
28+
python scripts/upstream_check.py | tee upstream-check.log
29+
code=$?
30+
echo "exit=$code" >> "$GITHUB_OUTPUT"
31+
exit $code
32+
- name: Manage drift issue
33+
if: always()
34+
env:
35+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
36+
EXIT_CODE: ${{ steps.smoke.outputs.exit }}
37+
RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
38+
run: |
39+
gh label create upstream-check --color d73a4a --force || true
40+
LABEL="upstream-check"
41+
TITLE="[upstream-check] upstream structure drift"
42+
ISSUE=$(gh issue list --label "$LABEL" --state open --json number --jq '.[0].number')
43+
if [ "$EXIT_CODE" != "0" ]; then
44+
BODY="Daily upstream smoke failed. Details and run: $RUN_URL"$'\n'$'\n'"$(cat upstream-check.log)"
45+
if [ -n "$ISSUE" ]; then gh issue comment "$ISSUE" --body "$BODY"
46+
else gh issue create --title "$TITLE" --label "$LABEL" --body "$BODY"; fi
47+
elif [ -n "$ISSUE" ]; then
48+
gh issue close "$ISSUE" --comment "Upstream smoke green again: $RUN_URL"
49+
fi

‎.gitignore‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,4 @@ __pycache__/
77
build/
88
dist/
99
.worktrees/
10+
.superpowers/

‎CHANGELOG.md‎

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,53 @@ All notable changes to this project are documented here. The format follows
55
[SemVer](https://semver.org/) with a `0.x` experimental prefix. Evidence links
66
point to files in this repository (`docs/`) so the trail is auditable offline.
77

8+
## [0.2.0] — 2026-09-29
9+
10+
### Added
11+
12+
- Daily upstream-structure watch: the scheduled `upstream-check` workflow
13+
verifies the upstream shape this toolkit depends on (dlssg_for_sm86 main
14+
commit resolves, kit files still exist at that commit, generated INI keys
15+
stay accepted, DLSS5-Swapper still publishes a selectable portable asset)
16+
and opens/updates an auto-labeled issue on drift, closing it when green
17+
again. Evidence: `.github/workflows/upstream-check.yml`,
18+
`scripts/upstream_check.py`, selftest `tests/test_upstream_check.py`.
19+
- `report` command: prints a paste-ready, offline, read-only game-test
20+
report (GPU landscape with the selected card, manifest summary, routing
21+
verdict, and an explicit "does NOT contain" section) for the game-test
22+
issue template. Evidence: `src/dlss_combo/report.py`, `tests/test_report.py`.
23+
- `--check-update`: non-blocking check for a newer dlss-combo release before
24+
any command — prints one line and continues; network failures degrade to a
25+
skip notice. Evidence: `src/dlss_combo/update.py`, `tests/test_update.py`.
26+
- Multi-GPU enumeration: all NVIDIA cards are parsed and the **first card
27+
with a supported architecture (RTX 20/30)** is selected; `doctor` lists
28+
multi-card rigs and names the primary. `--arch` still overrides.
29+
Evidence: `src/dlss_combo/gpu.py`, `tests/test_gpu_multi.py`.
30+
- Recommended test-games list for RTX 20/30 testers, with native-FG
31+
evidence links and a verify-in-game disclaimer. Evidence:
32+
`docs/TEST-GAMES.md`.
33+
34+
### Changed
35+
36+
- **CLI is now English-only** — help text, diagnostics and error messages.
37+
Internal source comments are unchanged. Guarded by
38+
`tests/test_english_cli.py` (CJK scan over user-facing strings).
39+
- Doctor session diagnostics hardened (see Fixed).
40+
41+
### Fixed
42+
43+
- Unreadable route logs are reported as problems instead of crashing
44+
`doctor`; the session verdict is now the **last route event of the newest
45+
log** (a later failure is never hidden by an earlier success), and
46+
image-layer files count as evidence only, never as layer activation.
47+
Evidence: `tests/test_doctor_last_event.py`.
48+
- Manifest schema/path validation error messages are now English — translated
49+
wording only, failure behavior is unchanged — and a bare invocation prints
50+
usage again (guarded in `tests/test_english_cli.py`).
51+
- Proxy fallback order regression-locked to the upstream tool-class order
52+
(`version → winmm → dbghelp → dinput8` before `d3d12`/`dxgi`).
53+
Evidence: `tests/test_proxy_order.py`.
54+
855
## [0.1.3] — 2026-09-20
956

1057
### Fixed
@@ -132,6 +179,7 @@ The nine reproduced problem behaviors are pinned by
132179
`docs/reviews/2026-09-20-repro.py` (all report fixed) and migrated into
133180
regression tests (`tests/test_review2.py`).
134181

182+
[0.2.0]: https://github.com/ztwzeroo/DLSS5-FrameGen/releases/tag/v0.2.0
135183
[0.1.3]: https://github.com/ztwzeroo/DLSS5-FrameGen/releases/tag/v0.1.3
136184
[0.1.2]: https://github.com/ztwzeroo/DLSS5-FrameGen/releases/tag/v0.1.2
137185
[0.1.1]: https://github.com/ztwzeroo/DLSS5-FrameGen/releases/tag/v0.1.1

‎README.md‎

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,11 @@
1414
[![Target: Windows](https://img.shields.io/badge/target-Windows_10%2F11-334234?style=flat-square)](#will-it-work-with-my-setup)
1515
[![GPU: RTX 20 / 30](https://img.shields.io/badge/GPU-RTX_20_%2F_30-5b713b?style=flat-square)](#will-it-work-with-my-setup)
1616
[![License: MIT](https://img.shields.io/badge/license-MIT-334234?style=flat-square)](LICENSE)
17+
[![upstream-check](https://github.com/ztwzeroo/DLSS5-FrameGen/actions/workflows/upstream-check.yml/badge.svg)](https://github.com/ztwzeroo/DLSS5-FrameGen/actions/workflows/upstream-check.yml)
1718

1819
> **Developer preview.** Best suited to contributors and experienced modders using disposable test copies. The file-safety, rollback and checksum issues from the [2026-09-20 review](docs/reviews/2026-09-20-project-review.md) are fixed and pinned by regression tests (the review's repro script now reports all nine behaviors fixed). No verified in-game benchmarks yet. **Read the [current limitations](docs/STATUS.md) before installing.**
1920
20-
**Have an RTX 20/30 and a single-player D3D12 game with native frame-generation support?** We are looking for early testers. [Download the Windows developer preview](../../releases/latest), try it on a backed-up test copy, and [share a success or failure report](https://github.com/ztwzeroo/DLSS5-FrameGen/issues/new?template=game-test.yml). We have not yet verified the combined setup in a real Windows game; your report helps establish which configurations actually work.
21+
**Have an RTX 20/30 and a single-player D3D12 game with native frame-generation support?** We are looking for early testers. See the [recommended test games](docs/TEST-GAMES.md), [download the Windows developer preview](../../releases/latest), try it on a backed-up test copy, and [share a success or failure report](https://github.com/ztwzeroo/DLSS5-FrameGen/issues/new?template=game-test.yml). We have not yet verified the combined setup in a real Windows game; your report helps establish which configurations actually work.
2122

2223
<p>
2324
<a href="../../releases"><img src="https://img.shields.io/badge/Download-Releases_(exe_/_linux)-d3ff6a?style=for-the-badge&amp;labelColor=263021" alt="Download from Releases"></a>
@@ -55,6 +56,10 @@ flowchart LR
5556

5657
*Setup workflow only. This diagram is not a gameplay demonstration or performance result.*
5758

59+
<p align="center"><img src="assets/demo.svg" alt="dlss-combo workflow demo" width="640"></p>
60+
61+
*Animated CLI walkthrough: `fetch` → `install` → `doctor` → `report`. Illustrative output, not measured game results.*
62+
5863
## Will it work with my setup?
5964

6065
These are the **target requirements**, not a verified compatibility list.
@@ -70,6 +75,8 @@ These are the **target requirements**, not a verified compatibility list.
7075

7176
RTX 40/50, Vulkan games and games without native frame-generation support are outside this project's current target. Other mods may conflict. **Do not use this with anti-cheat or competitive multiplayer games.**
7277

78+
**Multiple NVIDIA GPUs:** when several cards are present, the tool picks the **first card with a supported architecture** (RTX 20/30) and `doctor` lists every card in the rig so you can confirm which one was selected; `install DIR --arch sm75|sm86` overrides the choice. Looking for a suitable game? See [Recommended test games](docs/TEST-GAMES.md).
79+
7380
## Get started
7481

7582
Use an independently backed-up or disposable game copy. Uninstall validates its manifest, skips externally modified files and restores pre-existing user configs — but no restore is a substitute for a backup. See the [known issues](docs/STATUS.md#known-issues).
@@ -92,6 +99,8 @@ py -m dlss_combo fetch
9299

93100
Prefer Git? Clone `https://github.com/ztwzeroo/DLSS5-FrameGen.git`, open that folder, and run the same commands. The Python package and CLI retain the original names `dlss_combo` and `dlss-combo`.
94101

102+
Add `--check-update` to any command (for example `py -m dlss_combo --check-update doctor DIR`) for a non-blocking check that a newer dlss-combo release exists — it prints one line and never interrupts the run, and it is skipped silently when offline.
103+
95104
### 2. Configure the image layer
96105

97106
Open the downloaded **DLSS5-Swapper portable EXE** in `~/dlss-combo-kit/swapper/`. Use its interface and upstream instructions to configure your **test copy** of the game. If the asset is a ZIP, follow the upstream extraction instructions first.
@@ -114,7 +123,11 @@ Enable frame generation in the game's graphics settings if available. After a te
114123
py -m dlss_combo doctor "C:/Games/TestCopy/Binaries/Win64"
115124
```
116125

117-
A successful file installation or detected ReShade folder does **not** prove either rendering layer is active. Diagnostics have known limitations; [report your observed result](https://github.com/ztwzeroo/DLSS5-FrameGen/issues/new?template=game-test.yml), including failures.
126+
A successful file installation or detected ReShade folder does **not** prove either rendering layer is active. Diagnostics have known limitations; [report your observed result](https://github.com/ztwzeroo/DLSS5-FrameGen/issues/new?template=game-test.yml), including failures. To make that easy, `report` generates a paste-ready offline game-test report:
127+
128+
```powershell
129+
py -m dlss_combo report "C:/Games/TestCopy/Binaries/Win64"
130+
```
118131

119132
<details>
120133
<summary><strong>More commands and tuning options</strong></summary>
@@ -131,6 +144,8 @@ Use `py -m dlss_combo --help` or `py -m dlss_combo install --help` for the full
131144
| `install DIR --arch sm86` | Override the GPU-architecture check; driver checks still run. |
132145
| `install DIR --proxy winmm.dll` | Pin a specific proxy DLL name (default order follows the upstream tool-class proxies first). |
133146
| `install DIR --launch-swapper` | Launch the downloaded DLSS5-Swapper portable after installing (checksum-verified). |
147+
| `report DIR` | Print a paste-ready markdown game-test report (offline, read-only). Add `--out FILE` to save it. |
148+
| `--check-update` (before any command) | Non-blocking check for a newer dlss-combo release; skipped when offline. |
134149
| `uninstall DIR` | Remove managed files. Read the file-safety and restoration issues first. |
135150

136151
6X requires a compatible 310.9 build **and** game. Setting 6X with 310.1 does not make that runtime support it. Some optimization tiers are also runtime-dependent. Consult the [upstream INI](https://github.com/sdli1995/dlssg_for_sm86/blob/main/dlssg_sm86.ini) for meanings and constraints.
@@ -162,7 +177,7 @@ WINEDLLOVERRIDES="version=n,b" PROTON_ENABLE_NVAPI=1 PROTON_NVIDIA_NVCUDA=1 %com
162177

163178
| Evidence | Current state |
164179
|---|---|
165-
| Offline Python tests | 122 passing at v0.1.3; CI runs the suite on Windows/Linux/macOS on every push |
180+
| Offline Python tests | 155 passing at v0.2.0; CI runs the suite on Windows/Linux/macOS on every push |
166181
| Review regression | The 2026-09-20 repro script reports all nine fixed behaviors |
167182
| Release binaries | Windows EXE + Linux x64 built by GitHub Actions from each tagged commit |
168183
| Windows game sessions | Not yet validated by this project |
@@ -197,9 +212,9 @@ There are no verified performance results for this combined toolkit yet. GPU, ga
197212
</details>
198213

199214
<details>
200-
<summary><strong>Why are some command-line messages in Chinese?</strong></summary>
215+
<summary><strong>What language is the CLI output in?</strong></summary>
201216

202-
The English documentation covers setup, but the CLI currently includes Chinese messages. English CLI output is on the roadmap. Include the original output when reporting a problem.
217+
Since v0.2.0 the CLI is English-only — help text, diagnostics and errors (internal source comments remain Chinese). If you see output from an older release that mixes languages, include the original output when reporting a problem, or update to the latest release.
203218

204219
</details>
205220

@@ -214,8 +229,8 @@ We will add them when reproducible Windows/NVIDIA tests are available. The banne
214229

215230
- [x] Add regression protection for externally modified files and original configuration recovery.
216231
- [x] Re-verify cached files and keep the previous kit usable if refresh fails.
232+
- [x] Make the CLI English-only (help, diagnostics, errors), guarded by a regression test.
217233
- [ ] Add an installation preview and improve per-session diagnostics with real game evidence.
218-
- [ ] Add English CLI messages and clearer error guidance.
219234
- [ ] Validate Windows behavior and publish reproducible RTX 20/30 game results.
220235

221236
See the [English status and known issues](docs/STATUS.md), [detailed audit (Chinese)](docs/reviews/2026-09-20-project-review.md), and [contributor guide](CONTRIBUTING.md).

‎README.zh-CN.md‎

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
[![Python 3.10+](https://img.shields.io/badge/python-3.10%2B-blue)](https://www.python.org/downloads/)
1515
[![Target: Windows](https://img.shields.io/badge/target-Windows-0078D6)](#requirements--运行条件)
1616
[![License: MIT](https://img.shields.io/badge/license-MIT-green)](LICENSE)
17+
[![upstream-check](https://github.com/ztwzeroo/DLSS5-FrameGen/actions/workflows/upstream-check.yml/badge.svg)](https://github.com/ztwzeroo/DLSS5-FrameGen/actions/workflows/upstream-check.yml)
1718

1819
**下载 / Download**: [Releases](https://github.com/ztwzeroo/DLSS5-FrameGen/releases) 提供
1920
Windows EXE 与 Linux x64 二进制(GitHub Actions 从打 tag 的提交构建,未签名),
@@ -73,11 +74,14 @@ Target environment: **Windows 10/11 x64, RTX 20 or RTX 30**, and a D3D12 game wi
7374
**Single-player testing only. Do not use with anti-cheat or competitive multiplayer games.**
7475
**仅限单机测试,不要用于带反作弊的游戏或竞技多人游戏。**
7576

77+
**Multiple NVIDIA GPUs / 多张 NVIDIA 显卡:** with several cards present, the tool picks the **first card with a supported architecture** (RTX 20/30) and `doctor` lists every card so you can confirm the selection; `install DIR --arch sm75|sm86` overrides the choice. 不知选哪款游戏?See [Recommended test games / 推荐测试游戏](docs/TEST-GAMES.md)(英文 / English).
78+
多卡环境下,工具自动选择**第一张受支持架构**(RTX 20/30)的显卡,`doctor` 会列出全部显卡供确认;可用 `install DIR --arch` 覆盖。
79+
7680
## Getting started / 开始使用
7781

78-
The commands below are for experimental testing. Read the known issues and keep an independent backup before writing to any game directory.
82+
The commands below are for experimental testing. Read the known issues and keep an independent backup before writing to any game directory. Not sure which game to start with? See [Recommended test games / 推荐测试游戏](docs/TEST-GAMES.md)(英文 / English).
7983

80-
以下命令供实验测试使用。向游戏目录写入前,请先阅读已知问题并保留独立备份。
84+
以下命令供实验测试使用。向游戏目录写入前,请先阅读已知问题并保留独立备份。不知从哪款游戏开始?参考[推荐测试游戏列表](docs/TEST-GAMES.md)(英文)。
8185

8286
```powershell
8387
git clone https://github.com/ztwzeroo/DLSS5-FrameGen.git
@@ -96,8 +100,16 @@ dlss-combo install "C:/Games/TestCopy/Binaries/Win64" --mfg 4x
96100
97101
# After playing, inspect logs / 运行游戏后读取诊断
98102
dlss-combo doctor "C:/Games/TestCopy/Binaries/Win64"
103+
104+
# Generate a paste-ready game-test report / 生成可直接粘贴的测试报告
105+
dlss-combo report "C:/Games/TestCopy/Binaries/Win64"
99106
```
100107

108+
<p align="center"><img src="assets/demo.svg" alt="dlss-combo workflow demo" width="640"></p>
109+
110+
*Animated walkthrough: `fetch` → `install` → `doctor` → `report` — illustrative output, not measured results.*
111+
*动画演示:下载 → 安装 → 诊断 → 报告(示意输出,非实测结果)。*
112+
101113
The command remains **`dlss-combo`**; the public project name is **DLSS5-FrameGen**. Use `py -m dlss_combo` after installation if the command is not on your PATH.
102114

103115
公开项目名为 **DLSS5-FrameGen**,现有命令保持 **`dlss-combo`**。如果找不到命令,安装后可使用 `py -m dlss_combo`。
@@ -106,15 +118,19 @@ The command remains **`dlss-combo`**; the public project name is **DLSS5-FrameGe
106118
|---|---|
107119
| `fetch [--runtime 310.9\|310.1] [--kit-dir DIR] [--refresh]` | Download components; default cache is `~/dlss-combo-kit` / 下载组件 |
108120
| `install DIR [--mfg 2x\|3x\|4x\|6x] [--tier 0-3] [--runtime 310.9\|310.1] [--kit-dir DIR]` | Install the frame-generation layer / 安装插帧层 |
109-
| `install DIR --arch sm75\|sm86` | Override GPU detection; currently also bypasses driver detection / 覆盖 GPU 探测,当前也会跳过驱动探测 |
121+
| `install DIR --arch sm75\|sm86` | Override GPU-architecture detection; driver version checks still run / 覆盖 GPU 架构探测;驱动版本检查仍会执行 |
110122
| `install DIR --launch-swapper` | Open the cached Swapper asset; launch validation improvements are pending / 打开缓存的 Swapper,启动校验待完善 |
111123
| `doctor DIR` | Inspect files and available logs / 读取文件与日志状态 |
124+
| `report DIR [--out FILE]` | Print a paste-ready offline game-test report / 生成可直接粘贴的游戏测试报告(离线、只读) |
125+
| `--check-update`(加在任意命令前 / prepend to any command) | Non-blocking newer-release check, skipped silently when offline / 非阻塞检查新版本,离线自动跳过 |
112126
| `uninstall DIR` | Remove managed files; restoration limitations remain / 卸载本工具文件,还原能力存在已知限制 |
113127

114128
ReShade, RenoDX or Feeder file markers alone do not prove DLSS 5 is active. Coexistence with other mods depends on the game and installation route. Measure the base frame rate before raising the frame-generation multiplier.
115129

116130
检测到 ReShade、RenoDX 或 Feeder 文件不代表 DLSS 5 已生效。与其他 mod 是否兼容取决于具体游戏和安装路线;提高插帧倍数前,请先测不插帧时的基础帧率。
117131

132+
`--check-update` 可加在任意命令前(如 `dlss-combo --check-update doctor DIR`),非阻塞检查是否有新版本,只打印一行、离线自动跳过。/ Prepend `--check-update` to any command for a non-blocking newer-release check — it prints one line and is skipped silently when offline.
133+
118134
## Roadmap / 改善路线
119135

120136
- [ ] Safe file ownership, bounded uninstall paths and original configuration restoration / 文件归属、卸载范围和原始配置还原。

0 commit comments

Comments
 (0)