Skip to content

v1.2.6

Choose a tag to compare

@knightynite knightynite released this 15 Aug 18:42
· 10 commits to main since this release

Resolution now wins over refresh rate

Before mirroring, G9 Helper pins your monitor to a mode at the refresh rate you picked. It was choosing that mode by refresh rate alone, with no floor on resolution. On a link with bandwidth to spare that is harmless, which is why it went unnoticed on DisplayPort. On a link that cannot carry your panel's native resolution at that rate it is not: the largest mode at that rate is smaller than native, so the app pinned the panel below native and the monitor upscaled the entire desktop.

Reported in #11 on a 7680x2160 panel connected over HDMI to a base M4, where 120Hz at native sits right at the port's ceiling and runs out of headroom once HDR is on.

What changed:

  • The rate picker and the mirror pin both work from the panel's native pixel grid. When the requested rate is not available there, the app uses the fastest rate that is, instead of shrinking the desktop to reach it.
  • A custom refresh rate is snapped to one the panel actually offers at native, not just clamped to the maximum, so the virtual display and the panel cannot end up running at different rates.
  • Every setup writes the panel's native size and the refresh rates it offers there to /tmp/g9helper.log, on a line starting with Panel. That one line answers most reports of a soft or low-resolution picture.

Signed and notarized

The app bundle is now notarized by Apple and carries its own stapled ticket, so it opens without a security prompt even on a Mac that is offline right after install. Earlier releases only stapled the disk image, which left the copy in /Applications relying on Gatekeeper reaching Apple.

Note on sharpness

Mirroring resamples unless the preset's framebuffer matches your panel exactly. On a 7680x2160 panel, 5120x1440 renders a 10240x2880 framebuffer and scales it down, so it will not look quite as crisp as native 7680x2160 at 1:1. Only the 3840x1080 (2.0x) preset is a 1:1 mirror on that panel. This is inherent to the approach, not a bug, but it is worth knowing when comparing against native.


SHA-256: ea2c67c326b3c46c961e723fb5dd3d81d22e2e78be62b6fd4f270b08dc65577b