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-777GitHub issuePublicDecided· Out of scope

Screen recordings with audio are written at 96 kHz AAC (loudnorm missing -ar)

Reported by davidstillson · filed Sep 9, 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

Screen recordings with audio are written at 96 kHz AAC (loudnorm missing -ar)revision 1 · captured 2026-09-28 21:23 UTC via poll

What happened

Every screen recording made with audio is written at 96 kHz AAC instead of the 48 kHz that gpu-screen-recorder captured.

96 kHz AAC is unusual enough to be poorly supported downstream. DaVinci Resolve reads the container metadata correctly (reports AAC, 2ch, Sample Rate 96000) but decodes no samples — the clip imports and the video scrubs and plays fine, while the audio is silent and the timeline waveform is a blank rectangle. It also costs bitrate for no benefit, since the source audio was 48 kHz.

What I expected

Recordings keep the 48 kHz sample rate they were captured at.

Root cause

bin/omarchy-capture-screenrecording, in finalize_recording() (line 271):

args+=(-af "volume=enable='lt(t,0.4)':volume=0,afade=t=in:st=0.4:d=0.05,loudnorm=I=-14:TP=-1.5:LRA=11")

ffmpeg's loudnorm analyses at 192 kHz and declares that as its output rate. With no -ar on the command, ffmpeg negotiates that rate with the AAC encoder, which caps at its own 96 kHz ceiling — so the finalize pass silently resamples 48 kHz up to 96 kHz.

gpu-screen-recorder is not at fault; the file is correct until finalize_recording() runs.

Steps to reproduce

Independent of the recorder — this reproduces with plain ffmpeg:

# stand in for a gsr recording: 48 kHz AAC
ffmpeg -y -f lavfi -i testsrc=size=320x240:rate=60 \
       -f lavfi -i "sine=frequency=440:sample_rate=48000" \
       -t 3 -c:v libx264 -c:a aac -ar 48000 gsr_sim.mp4

# exactly what finalize_recording() runs
ffmpeg -y -ss 0.1 -i gsr_sim.mp4 -c:v copy \
  -af "volume=enable='lt(t,0.4)':volume=0,afade=t=in:st=0.4:d=0.05,loudnorm=I=-14:TP=-1.5:LRA=11" \
  gsr_finalized.mp4

ffprobe -v error -select_streams a -show_entries stream=codec_name,sample_rate -of csv=p=0 gsr_sim.mp4
ffprobe -v error -select_streams a -show_entries stream=codec_name,sample_rate -of csv=p=0 gsr_finalized.mp4

Result:

gsr output (before finalize):  aac,48000
after finalize_recording():    aac,96000
same chain minus loudnorm:     aac,48000   # isolates loudnorm as the cause

Or end to end: omarchy screenrecord --fullscreen --with-desktop-audio, stop it, then ffprobe the file.

Suggested fix

Pin the output rate — add -ar 48000 to that invocation. Loudness normalization is unaffected; a -21.1 dB source still lands at -13.6 dB against the -14 LUFS target.

Happy to open a PR.

System details

  • Omarchy 4.0.2-1
  • gpu-screen-recorder 6.0.1
  • ffmpeg n9.0.1
  • Arch Linux, kernel 7.1.9-arch1-2
  • AMD Radeon RX 7900 XTX (amdgpu)
View raw text
### What happened

Every screen recording made with audio is written at **96 kHz AAC** instead of the 48 kHz that `gpu-screen-recorder` captured.

96 kHz AAC is unusual enough to be poorly supported downstream. DaVinci Resolve reads the container metadata correctly (reports `AAC`, `2ch`, `Sample Rate 96000`) but decodes no samples — the clip imports and the video scrubs and plays fine, while the audio is silent and the timeline waveform is a blank rectangle. It also costs bitrate for no benefit, since the source audio was 48 kHz.

### What I expected

Recordings keep the 48 kHz sample rate they were captured at.

### Root cause

`bin/omarchy-capture-screenrecording`, in `finalize_recording()` (line 271):

```bash
args+=(-af "volume=enable='lt(t,0.4)':volume=0,afade=t=in:st=0.4:d=0.05,loudnorm=I=-14:TP=-1.5:LRA=11")
```

ffmpeg's `loudnorm` analyses at 192 kHz and declares that as its output rate. With no `-ar` on the command, ffmpeg negotiates that rate with the AAC encoder, which caps at its own 96 kHz ceiling — so the finalize pass silently resamples 48 kHz up to 96 kHz.

`gpu-screen-recorder` is not at fault; the file is correct until `finalize_recording()` runs.

### Steps to reproduce

Independent of the recorder — this reproduces with plain ffmpeg:

```bash
# stand in for a gsr recording: 48 kHz AAC
ffmpeg -y -f lavfi -i testsrc=size=320x240:rate=60 \
       -f lavfi -i "sine=frequency=440:sample_rate=48000" \
       -t 3 -c:v libx264 -c:a aac -ar 48000 gsr_sim.mp4

# exactly what finalize_recording() runs
ffmpeg -y -ss 0.1 -i gsr_sim.mp4 -c:v copy \
  -af "volume=enable='lt(t,0.4)':volume=0,afade=t=in:st=0.4:d=0.05,loudnorm=I=-14:TP=-1.5:LRA=11" \
  gsr_finalized.mp4

ffprobe -v error -select_streams a -show_entries stream=codec_name,sample_rate -of csv=p=0 gsr_sim.mp4
ffprobe -v error -select_streams a -show_entries stream=codec_name,sample_rate -of csv=p=0 gsr_finalized.mp4
```

Result:

```
gsr output (before finalize):  aac,48000
after finalize_recording():    aac,96000
same chain minus loudnorm:     aac,48000   # isolates loudnorm as the cause
```

Or end to end: `omarchy screenrecord --fullscreen --with-desktop-audio`, stop it, then ffprobe the file.

### Suggested fix

Pin the output rate — add `-ar 48000` to that invocation. Loudness normalization is unaffected; a -21.1 dB source still lands at -13.6 dB against the -14 LUFS target.

Happy to open a PR.

### System details

- Omarchy 4.0.2-1
- gpu-screen-recorder 6.0.1
- ffmpeg n9.0.1
- Arch Linux, kernel 7.1.9-arch1-2
- AMD Radeon RX 7900 XTX (amdgpu)

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

  • Related PRpr/8809· confirmed

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 11:18 UTC