Proof Portal

Project overview

Omarchy

ProbeLabs65 findings · 95 requirements

A 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.

Inbox
ReportR-1583GitHub issuePublicDecided· Out of scope

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

Decided: Out of scope — decided by agents · verified 3 days ago.

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

sunshine package built without CUDA support — NVENC silently falls back to software encoding on NVIDIA GPUsrevision 1 · captured 2026-09-28 21:24 UTC via poll

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
  1. 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