What happened
On a Blackwell / RTX 50-series GPU, the BNR panel offers the NVIDIA AFX denoiser and its Download button, but the download never completes — nothing lands in the cache and there's no clear error in the UI ("not sure if it's working"). The app detects the GPU arch as sm_120 and tries to fetch a sm_120 AFX pack that doesn't exist in the afx-bits-2.1.0 release (only sm_89 is published), so the fetch 404s.
Net effect: BNR is advertised as available on RTX 50-series but can never install, with no graceful "unsupported / use DFNR" fallback.
Environment
- AetherSDR: built from source,
main @ 9e7009c1, Linux x86_64, -DENABLE_NVIDIA_AFX=ON, Qt 6.8.3
- OS: Ubuntu 24.04
- GPU: NVIDIA GeForce RTX 5060 Laptop GPU — Blackwell, compute capability 12.0 (
sm_120), 8 GB, driver 595.71.05 (CUDA 13.2), PCI 10de:2d59. (Optimus laptop; Intel Raptor Lake iGPU alongside.)
Steps to reproduce
- On a
sm_120 (RTX 50-series) machine, enable BNR in the AetherDSP panel.
- Accept the NVIDIA license, click Download.
- Observe: the download dead-ends;
~/.local/share/AetherSDR/nvidia-afx/ stays empty; no clear failure message.
Root cause
The GPU gate accepts the card, but no matching pack is published, and the URL is built unconditionally from the detected arch:
NvidiaAfxPack::hasSupportedGpu() gates on cc >= 89 (src/core/NvidiaAfxPack.cpp:152), so sm_120 (cc 120) passes → the panel offers BNR + Download.
NvidiaAfxPack::manifest() (src/core/NvidiaAfxPack.cpp:200) builds the AFX-bits URL as
.../releases/download/afx-bits-2.1.0/afx-bits-2.1.0-linux-x86_64-<arch>.tar.zst
with arch = sm_120 (:204-205).
- Release
afx-bits-2.1.0 only publishes sm_89 (Linux) — no sm_120 (nor sm_100) Linux asset. So the fetch 404s.
- The pack-build script only recognizes
sm_75 / sm_86 / sm_89 / sm_100 (scripts/build/build-afx-bits-windows.ps1:56) — consumer Blackwell sm_120 isn't a buildable target, and the per-arch denoiser model is pulled from NGC (denoiser_48k.trtpkg), so an sm_120 NGC Maxine model has to exist upstream first.
Verification
$ curl -s -o /dev/null -w "%{http_code}" -L \
https://github.com/aethersdr/AetherSDR/releases/download/afx-bits-2.1.0/afx-bits-2.1.0-linux-x86_64-sm_120.tar.zst
404
Release afx-bits-2.1.0 assets: …-linux-x86_64-sm_89.tar.zst, …-windows-x86_64-sm_89.zip, …-windows-x86_64-tensorrt-10.9.0.34.zip. No sm_120.
Impact
Every RTX 50-series (consumer Blackwell, sm_120) owner: BNR looks supported, Download silently fails, and there's no message telling them it isn't available for their GPU or steering them to DFNR.
This is a GPU-coverage regression on this hardware. The previous container ("Service (NIM)") backend worked on this exact RTX 5060 (confirmed end-to-end: audible denoising, RTX utilization rising) — because the NIM shipped a full Triton/TensorRT/CUDA stack that built/adapted the denoiser engine for the GPU present at runtime, so it was architecture-portable to new cards. The in-process AFX path instead loads a pre-serialized, arch-locked denoiser_48k.trtpkg from NGC (no on-device build, no PTX JIT), so it only runs on the specific compute capabilities NVIDIA has pre-published — which excludes consumer Blackwell (sm_120) today. So dropping the container (reasonable for the no-container UX win) silently removed BNR support for RTX 50-series until an sm_120 pack ships.
Suggested fixes
- Graceful handling regardless of NVIDIA timeline (client-side): don't advertise BNR as installable for an arch with no published pack. Gate on the set of archs actually shipped (or HEAD-check the asset), and when the detected arch has no pack, show a clear message ("No BNR pack for your GPU (
sm_120) yet — using DFNR") instead of a dead-end Download. This is the part fully in AetherSDR's control.
- Publish an
sm_120 pack once NVIDIA has a consumer-Blackwell Maxine AFX denoiser model on NGC — then add sm_120 to the build script's ValidateSet + arch→NGC-tag map and upload afx-bits-…-sm_120 (linux + windows) to the release.
- Minor: surface the actual download error (404 / no-pack) in the panel + log so the failure isn't silent.
- Optional hybrid fallback (heavier, more complex): since the removed container (NIM) backend did work on this GPU by building the engine on-device, an opt-in "Service (NIM)" path could be retained/offered specifically for GPUs the AFX packs don't yet cover (e.g.
sm_120), with in-process AFX remaining the default where a pack exists. This reintroduces the container dependency the rewrite intentionally dropped, so it'd be an advanced opt-in, not the default — but it would restore BNR coverage on bleeding-edge cards without waiting on an NGC sm_120 model.
Notes
- Verified the GPU identity is genuinely
sm_120 (not a detection error): nvidia-smi reports "RTX 5060 Laptop GPU", Product Architecture "Blackwell", compute_cap 12.0.
- Not urgent for me personally — happy to test an
sm_120 pack whenever one is built. Filing so Blackwell owners aren't left with a silently-failing BNR button.
What happened
On a Blackwell / RTX 50-series GPU, the BNR panel offers the NVIDIA AFX denoiser and its Download button, but the download never completes — nothing lands in the cache and there's no clear error in the UI ("not sure if it's working"). The app detects the GPU arch as
sm_120and tries to fetch asm_120AFX pack that doesn't exist in theafx-bits-2.1.0release (onlysm_89is published), so the fetch 404s.Net effect: BNR is advertised as available on RTX 50-series but can never install, with no graceful "unsupported / use DFNR" fallback.
Environment
main@9e7009c1, Linux x86_64,-DENABLE_NVIDIA_AFX=ON, Qt 6.8.3sm_120), 8 GB, driver 595.71.05 (CUDA 13.2), PCI10de:2d59. (Optimus laptop; Intel Raptor Lake iGPU alongside.)Steps to reproduce
sm_120(RTX 50-series) machine, enable BNR in the AetherDSP panel.~/.local/share/AetherSDR/nvidia-afx/stays empty; no clear failure message.Root cause
The GPU gate accepts the card, but no matching pack is published, and the URL is built unconditionally from the detected arch:
NvidiaAfxPack::hasSupportedGpu()gates oncc >= 89(src/core/NvidiaAfxPack.cpp:152), sosm_120(cc 120) passes → the panel offers BNR + Download.NvidiaAfxPack::manifest()(src/core/NvidiaAfxPack.cpp:200) builds the AFX-bits URL as.../releases/download/afx-bits-2.1.0/afx-bits-2.1.0-linux-x86_64-<arch>.tar.zstwith
arch = sm_120(:204-205).afx-bits-2.1.0only publishessm_89(Linux) — nosm_120(norsm_100) Linux asset. So the fetch 404s.sm_75 / sm_86 / sm_89 / sm_100(scripts/build/build-afx-bits-windows.ps1:56) — consumer Blackwellsm_120isn't a buildable target, and the per-arch denoiser model is pulled from NGC (denoiser_48k.trtpkg), so ansm_120NGC Maxine model has to exist upstream first.Verification
Release
afx-bits-2.1.0assets:…-linux-x86_64-sm_89.tar.zst,…-windows-x86_64-sm_89.zip,…-windows-x86_64-tensorrt-10.9.0.34.zip. Nosm_120.Impact
Every RTX 50-series (consumer Blackwell,
sm_120) owner: BNR looks supported, Download silently fails, and there's no message telling them it isn't available for their GPU or steering them to DFNR.This is a GPU-coverage regression on this hardware. The previous container ("Service (NIM)") backend worked on this exact RTX 5060 (confirmed end-to-end: audible denoising, RTX utilization rising) — because the NIM shipped a full Triton/TensorRT/CUDA stack that built/adapted the denoiser engine for the GPU present at runtime, so it was architecture-portable to new cards. The in-process AFX path instead loads a pre-serialized, arch-locked
denoiser_48k.trtpkgfrom NGC (no on-device build, no PTX JIT), so it only runs on the specific compute capabilities NVIDIA has pre-published — which excludes consumer Blackwell (sm_120) today. So dropping the container (reasonable for the no-container UX win) silently removed BNR support for RTX 50-series until ansm_120pack ships.Suggested fixes
sm_120) yet — using DFNR") instead of a dead-end Download. This is the part fully in AetherSDR's control.sm_120pack once NVIDIA has a consumer-Blackwell Maxine AFX denoiser model on NGC — then addsm_120to the build script'sValidateSet+ arch→NGC-tag map and uploadafx-bits-…-sm_120(linux + windows) to the release.sm_120), with in-process AFX remaining the default where a pack exists. This reintroduces the container dependency the rewrite intentionally dropped, so it'd be an advanced opt-in, not the default — but it would restore BNR coverage on bleeding-edge cards without waiting on an NGCsm_120model.Notes
sm_120(not a detection error):nvidia-smireports "RTX 5060 Laptop GPU", Product Architecture "Blackwell", compute_cap 12.0.sm_120pack whenever one is built. Filing so Blackwell owners aren't left with a silently-failing BNR button.