Proof Portal
Omarchy
ProbeLabs65 findings · 95 requirementsA proof layer — requirements, tests and verified fixes — for two of Omarchy's subsystems: the application menu (launcher scripts, QML model, JSONC config, search and selection) and the lock screen (lock scripts, QML, PAM authentication). Scope is deliberately limited to those components of omacom/omarchy; the rest of the distribution is not covered.
sunshine package built without CUDA support — NVENC silently falls back to software encoding on NVIDIA GPUs
Reported by Vally11Byte · filed Aug 22, 2026 · open at source
At a glance
- 1 · What is claimed?
- Only the report text below — no validator has restated it as checkable claims yet.
- 2 · What does it affect?
- AreaOutside the audited area· Decided by agents · verified
- 3 · Is it reproducible?
- No validation has been run yet.
- 4 · What remains unclear?
- Not validated yet: no claims, no reproducer.
- 5 · What happens next?
- Decided by agents and verified by a second, independent agent — see the decision.
Original report
System details
NVIDIA GeForce RTX 4070 Ti SUPER, driver 610.57.04, Omarchy 4.0.0-1, Hyprland 0.56.2
What's wrong?
System details
NVIDIA GeForce RTX 4070 Ti SUPER, driver 610.57.04, Omarchy 4.0.0-1, Hyprland 0.56.2
What's wrong?
The sunshine package in the Omarchy repo (pkgs.omarchy.org, currently 2026.516.143833-4) is compiled without CUDA support, so NVENC hardware encoding silently fails and Sunshine falls back to software (libx264) encoding on NVIDIA GPUs. Moonlight reports "hardware encoding not supported" even though the GPU/driver fully support it.
Evidence
pacman -Qi sunshine(omarchy repo) lists nocudaoptional dependency at all, unlike the official LizardByte pacman repo build of the same version string, which lists:
Optional Deps : cuda: Nvidia GPU encoding support
libva-mesa-driver: AMD GPU encoding support
xorg-server-xvfb: Virtual X server for headless testing- Checking the omarchy-built binary for C++ RTTI symbols shows the VAAPI backend classes are compiled in (
N2va4va_tE,N2va8va_ram_tE,N2va9va_vram_tE), but *no `cuda::namespace symbols exist at all** — meaningsrc/platform/linux/cuda.cppwas not compiled in (i.e.SUNSHINE_BUILD_CUDAwas not enabled at build time), even though NVENC itself loads fine (dynamically, via FFmpeg'sh264_nvenc`). - Sunshine log with
min_log_level = 0andcapture = wlr,encoder = nvenc, on the omarchy build:
...
Debug: [h264_nvenc @ ...] Nvenc initialized successfully
Verbose: [CUDA @ ...] Calling cu->cuMemAlloc(&data, size)
Error: Couldn't scale frame: Invalid argument
...
Info: Encoder [nvenc] failed
Error: Couldn't find any working encoder matching [nvenc]
Info: Trying encoder [vulkan]
Error: [wlgrab] Could not initialize display with the given hw device type.
Info: Trying encoder [vaapi]
Error: [h264_vaapi @ ...] No usable encoding entrypoint found for profile VAProfileH264High (7).
Info: Encoder [vaapi] failed
Info: Trying encoder [software]
Info: Found H.264 encoder: libx264 [software] This happens because for hwdevice_type == cuda, the wlroots capture backend (wlgrab.cpp) always hands the encoder a zero-copy DMA-BUF image (wlr_vram_t, with img->data = nullptr), expecting Sunshine's own cuda.cpp (GL/EGL → CUDA import glue) to consume it. Since that translation unit isn't compiled into this build, it falls back to the generic avcodec_software_encode_device_t::convert(), which requires a real pixel buffer and gets a null pointer instead, producing "Couldn't scale frame: Invalid argument".
Reproduction / Fix confirmation
- Install Sunshine from the official LizardByte pacman repo instead (same upstream version, different build):
[lizardbyte]
SigLevel = Optional
Server = https://github.com/LizardByte/pacman-repo/releases/latest/download sudo pacman -S lizardbyte/sunshine- Restart Sunshine. Log now shows:
Found H.264 encoder: h264_nvenc [nvenc]
Found HEVC encoder: hevc_nvenc [nvenc]
Found AV1 encoder: av1_nvenc [nvenc]with no scaling errors, confirming the omarchy-repo build was the sole cause.
Suggested fix
Add cuda as a (makedepends/optional) dependency in the Omarchy sunshine PKGBUILD and rebuild with SUNSHINE_BUILD_CUDA enabled, matching the official LizardByte build. Without this, every NVIDIA user on Omarchy silently gets software encoding instead of NVENC when using Sunshine/Moonlight, with no error surfaced anywhere except the Sunshine log.
View raw text
### System details
NVIDIA GeForce RTX 4070 Ti SUPER, driver 610.57.04, Omarchy 4.0.0-1, Hyprland 0.56.2
### What's wrong?
## System details
NVIDIA GeForce RTX 4070 Ti SUPER, driver 610.57.04, Omarchy 4.0.0-1, Hyprland 0.56.2
## What's wrong?
The `sunshine` package in the Omarchy repo (`pkgs.omarchy.org`, currently `2026.516.143833-4`) is compiled **without CUDA support**, so NVENC hardware encoding silently fails and Sunshine falls back to software (libx264) encoding on NVIDIA GPUs. Moonlight reports "hardware encoding not supported" even though the GPU/driver fully support it.
### Evidence
- `pacman -Qi sunshine` (omarchy repo) lists no `cuda` optional dependency at all, unlike the official LizardByte pacman repo build of the *same version string*, which lists:
```
Optional Deps : cuda: Nvidia GPU encoding support
libva-mesa-driver: AMD GPU encoding support
xorg-server-xvfb: Virtual X server for headless testing
```
- Checking the omarchy-built binary for C++ RTTI symbols shows the VAAPI backend classes are compiled in (`N2va4va_tE`, `N2va8va_ram_tE`, `N2va9va_vram_tE`), but **no `cuda::*` namespace symbols exist at all** — meaning `src/platform/linux/cuda.cpp` was not compiled in (i.e. `SUNSHINE_BUILD_CUDA` was not enabled at build time), even though NVENC itself loads fine (dynamically, via FFmpeg's `h264_nvenc`).
- Sunshine log with `min_log_level = 0` and `capture = wlr`, `encoder = nvenc`, on the omarchy build:
```
...
Debug: [h264_nvenc @ ...] Nvenc initialized successfully
Verbose: [CUDA @ ...] Calling cu->cuMemAlloc(&data, size)
Error: Couldn't scale frame: Invalid argument
...
Info: Encoder [nvenc] failed
Error: Couldn't find any working encoder matching [nvenc]
Info: Trying encoder [vulkan]
Error: [wlgrab] Could not initialize display with the given hw device type.
Info: Trying encoder [vaapi]
Error: [h264_vaapi @ ...] No usable encoding entrypoint found for profile VAProfileH264High (7).
Info: Encoder [vaapi] failed
Info: Trying encoder [software]
Info: Found H.264 encoder: libx264 [software]
```
This happens because for `hwdevice_type == cuda`, the wlroots capture backend (`wlgrab.cpp`) always hands the encoder a zero-copy DMA-BUF image (`wlr_vram_t`, with `img->data = nullptr`), expecting Sunshine's own `cuda.cpp` (GL/EGL → CUDA import glue) to consume it. Since that translation unit isn't compiled into this build, it falls back to the generic `avcodec_software_encode_device_t::convert()`, which requires a real pixel buffer and gets a null pointer instead, producing "Couldn't scale frame: Invalid argument".
### Reproduction / Fix confirmation
1. Install Sunshine from the official LizardByte pacman repo instead (same upstream version, different build):
```
[lizardbyte]
SigLevel = Optional
Server = https://github.com/LizardByte/pacman-repo/releases/latest/download
```
```
sudo pacman -S lizardbyte/sunshine
```
2. Restart Sunshine. Log now shows:
```
Found H.264 encoder: h264_nvenc [nvenc]
Found HEVC encoder: hevc_nvenc [nvenc]
Found AV1 encoder: av1_nvenc [nvenc]
```
with no scaling errors, confirming the omarchy-repo build was the sole cause.
### Suggested fix
Add `cuda` as a (`makedepends`/optional) dependency in the Omarchy `sunshine` PKGBUILD and rebuild with `SUNSHINE_BUILD_CUDA` enabled, matching the official LizardByte build. Without this, every NVIDIA user on Omarchy silently gets software encoding instead of NVENC when using Sunshine/Moonlight, with no error surfaced anywhere except the Sunshine log.
Validation
Not checked yet. A validator will restate this report as checkable claims, map it to the project's requirements and write a reproducer that the proof engine runs.
Linked
Not linked to any known issue, other report or change yet.
Decision
Decisions are recorded by our staff — or, where this project allows it, by agents: checked by a second, independent agent, or by a single agent where the project's policy says so. Any decision reached so far is shown below.
- Out of scopeDecided by agents · verified · 2026-10-09 08:22 UTC