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-2883GitHub issuePublicReceived

[BUG] Hyprshot NVIDIA PBUFFER inconsistency and fix

Reported by ngodn · filed Sep 15, 2025Closed upstream on 2025-10-26 by ryanrhughes. GitHub close reason: completed. No closing PR or commit is recorded — "completed" alone is not evidence of a fix.

Received and recorded verbatim. Nothing has been checked yet.

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?
Not yet mapped to any requirement or component.
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?
Our staff decide whether the report is valid. Where this project allows it, agents decide whether it duplicates another report or a known issue. No decision has been recorded yet.

Original report

[BUG] Hyprshot NVIDIA PBUFFER inconsistency and fixrevision 1 · captured 2026-10-04 11:35 UTC via poll

System details

NVIDIA GeForce RTX 3060 Lite Hash Rate, Omarchy v2.1.2, Linux 6.16.7-1-cachyos-lto, Hyprland 0.51.0, hyprshot 1.3.0-4, satty 0.19.0

What's wrong?

Issue Summary

Hyprshot's --freeze flag produces inconsistent behavior on NVIDIA GPUs, causing [ERR] renderSurface: PBUFFER null errors.

Problem Details

  • Screenshots work ~60-70% of the time
  • When PBUFFER error occurs, satty receives invalid image data and fails with "Unrecognized image file format"
  • Error message: [ERR] renderSurface: PBUFFER null
  • Inconsistent user experience - sometimes works, sometimes doesn't

Root Cause

The PBUFFER (Pixel Buffer) error occurs when hyprshot's --freeze flag attempts to create an OpenGL pixel buffer on NVIDIA hardware under Wayland. This is related to NVIDIA driver compatibility issues with certain OpenGL operations.

Testing Results

# With --freeze flag (inconsistent)
$ hyprshot -m region --raw --freeze
[ERR] renderSurface: PBUFFER null  # Sometimes appears
�PNG... # Sometimes valid, sometimes corrupted

# Without --freeze flag (consistent)
$ hyprshot -m region --raw
�PNG... # Always works, but no freeze UX

Implemented Solution

Created a smart retry mechanism that:
1. First attempt: Uses --freeze flag for optimal user experience
2. Fallback attempt: Removes --freeze flag when PBUFFER errors occur
3. Result: 100% success rate with best possible UX

Environment Variables Added

# In ~/.config/hypr/hyprland.conf
env = GBM_BACKEND,nvidia-drm
env = WEBKIT_DISABLE_DMABUF_RENDERER,1

Script Modification

# Smart retry logic in omarchy-cmd-screenshot
for attempt in 1 2; do
  if [ $attempt -eq 1 ]; then
    # Try with freeze first (better UX)
    notify-send "Taking screenshot (freeze)..." -t 1500
    hyprshot_cmd="hyprshot -m ${1:-region} --raw --freeze"
  else
    # Fallback without freeze (PBUFFER workaround)
    notify-send "Retrying without freeze..." -t 1500
    hyprshot_cmd="hyprshot -m ${1:-region} --raw"
  fi

  if $hyprshot_cmd 2>/dev/null | satty --filename - [...]; then
    notify-send "Screenshot saved successfully" -t 2000
    break
  fi
done

Hardware Tested

  • NVIDIA GeForce RTX 3060 Lite Hash Rate
View raw text
### System details

NVIDIA GeForce RTX 3060 Lite Hash Rate, Omarchy v2.1.2, Linux 6.16.7-1-cachyos-lto, Hyprland 0.51.0, hyprshot 1.3.0-4, satty 0.19.0

### What's wrong?

## Issue Summary
Hyprshot's `--freeze` flag produces inconsistent behavior on NVIDIA GPUs, causing `[ERR] renderSurface: PBUFFER null` errors.

## Problem Details
- Screenshots work ~60-70% of the time
- When PBUFFER error occurs, satty receives invalid image data and fails with "Unrecognized image file format"
- Error message: `[ERR] renderSurface: PBUFFER null`
- Inconsistent user experience - sometimes works, sometimes doesn't

## Root Cause
The PBUFFER (Pixel Buffer) error occurs when hyprshot's `--freeze` flag attempts to create an OpenGL pixel buffer on NVIDIA hardware under Wayland. This is related to NVIDIA driver compatibility issues with certain OpenGL operations.

## Testing Results
```bash
# With --freeze flag (inconsistent)
$ hyprshot -m region --raw --freeze
[ERR] renderSurface: PBUFFER null  # Sometimes appears
�PNG... # Sometimes valid, sometimes corrupted

# Without --freeze flag (consistent)
$ hyprshot -m region --raw
�PNG... # Always works, but no freeze UX
```

## Implemented Solution
Created a smart retry mechanism that:
1. **First attempt**: Uses `--freeze` flag for optimal user experience
2. **Fallback attempt**: Removes `--freeze` flag when PBUFFER errors occur
3. **Result**: 100% success rate with best possible UX

### Environment Variables Added
```bash
# In ~/.config/hypr/hyprland.conf
env = GBM_BACKEND,nvidia-drm
env = WEBKIT_DISABLE_DMABUF_RENDERER,1
```

### Script Modification
```bash
# Smart retry logic in omarchy-cmd-screenshot
for attempt in 1 2; do
  if [ $attempt -eq 1 ]; then
    # Try with freeze first (better UX)
    notify-send "Taking screenshot (freeze)..." -t 1500
    hyprshot_cmd="hyprshot -m ${1:-region} --raw --freeze"
  else
    # Fallback without freeze (PBUFFER workaround)
    notify-send "Retrying without freeze..." -t 1500
    hyprshot_cmd="hyprshot -m ${1:-region} --raw"
  fi

  if $hyprshot_cmd 2>/dev/null | satty --filename - [...]; then
    notify-send "Screenshot saved successfully" -t 2000
    break
  fi
done
```

## Hardware Tested
- NVIDIA GeForce RTX 3060 Lite Hash Rate

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.

No decision has been recorded yet.