Skip to content

v0.33

Choose a tag to compare

@github-actions github-actions released this 11 Jun 15:58

PyGoose v0.33

Performance — before and after

The goose used to consume ~12.5% of a CPU core constantly on our low power testing PC, regardless of what it was doing. Now typical mixed sessions sit well under 1% or 2% of total system CPU on our low power testing PC. This has been addressed across several targeted optimizations:

State Before (single core) After (single core)
Sitting / sleeping / idle ~10.5-12.5% ~0.5%
Mixed normal use ~12.5% ~5–8%
Running / charging ~12.5% ~9–11%

What was done:

  • 60 Hz render / 120 Hz simulation decoupling — physics still runs at 120 Hz but the screen only repaints at 60 Hz
  • Identical-frame skip — when the goose hasn't moved and nothing has changed, the repaint is skipped entirely. Sitting and sleeping now cost almost nothing
  • Music PCM cache — the background music was being decoded from MP3 on every loop, costing ~2% of a core constantly. It's now decoded once on first run and cached as a WAV file
  • Render object caching — pens, brushes, and Qt enum lookups are cached instead of rebuilt on every draw call (~20% off render cost)

What's new in 0.33

Multi-window notes and memes
The goose now keeps up to 2 notepad windows and 2 meme windows on screen at the same time. They no longer disappear when he goes to fetch another one.

Eviction drag
When 2 of a type are already up and the goose wants to bring another, he walks over to a random existing window, grabs it by the edge, and drags it back offscreen before fetching the new one.

Smarter placement
Windows are dropped with more spread across the screen — further from the edge, more vertical range. The second window of a type gets an extra messy offset so they overlap but aren't neatly stacked.

No more repeated first meme/note
The meme and notepad decks now persist across windows in a session, so the goose cycles through all your content before repeating anything.

Notes fetched more often
Notepad delivery is now 3× more likely in the task rotation.


macOS fixes

Click-through overlay
The overlay wasn't properly passing mouse events through to the desktop on macOS. Fixed by calling setIgnoresMouseEvents_ on the NSWindow directly after launch.

Mouse stealing
The goose can now actually steal your mouse on macOS once Accessibility permission is granted. Previously the steal logic ran but had no effect.

macOS one-file build
The macOS release is now a single binary. The previous one-folder build required approving every dylib individually through Gatekeeper — one file means one approval.

Startup prompts
PyGoose now tells you on launch if pyobjc-framework-Quartz is missing (pip install pyobjc-framework-Quartz) or if Accessibility permission hasn't been granted yet. The goose still runs without either — mouse stealing just won't work.


Linux build is untested.