Skip to content

v0.5.3 — Smoother animation + Intel support

Choose a tag to compare

@ChiFungHillmanChan ChiFungHillmanChan released this 22 Apr 14:29
· 22 commits to main since this release

Smoother animation + Intel support

Window animations on native apps now run at 60Hz (up from 30Hz). Electron apps (VS Code, Cursor, Chrome, Slack, etc.) keep the 30Hz throttle to avoid back-pressure stalls. Duration now scales with move distance — short nudges feel snappier, long moves feel less rushed. And the DMG is now a universal binary — Apple Silicon and Intel Macs install from the same file.

What's new

  • 60Hz animation for native apps. WindowAnimator now picks its AX-write ceiling per-animation: 30Hz when any window belongs to a known Electron app (VS Code, Cursor, Chrome, Brave, Slack, Discord, Figma, Notion, Obsidian, Teams), 60Hz when all windows are native (Safari, Finder, Xcode, Notes, Preview, System Settings, Mail, Messages). Native-app animations get roughly twice the frame count inside the same animation window, which reads as noticeably smoother on ProMotion displays.
  • Distance-proportional duration. The configured durationMs is now treated as a reference for a ~600pt diagonal move. Short moves contract toward ~70% of the base for a snappier feel; long moves expand toward ~140% so they don't feel rushed. Clamped both ways; AnimationConfig's own [100, 500]ms range remains the final safety net.
  • Tighter write de-dup. Per-window AX write dedup tolerance dropped from 0.5pt → 0.2pt, reclaiming a few frames at the end of easeOut curves.
  • Universal binary. Intel (x86_64) Macs now supported. One DMG ships both slices — macOS picks the native one at launch. No Rosetta required on Apple Silicon.
  • Deployment target restored to macOS 14. Xcode had silently bumped the project's MACOSX_DEPLOYMENT_TARGET to 26.4 (the build machine's OS); reset to 14.0 to match Package.swift and documented minimum.

Why this matters

Previous releases threw away 75% of frame rate capacity on ProMotion displays to protect a handful of slow-responding Electron apps. Native apps (most of what users actually reorganize — Finder windows, Safari, Notes, Preview, System Settings) respond to AX in 1–3ms and were happy to take more. Picking the throttle per-animation lets native apps breathe without regressing Electron.

And Intel users — macOS Tahoe (26) is the last Intel-supporting release, so this was a last-call window. Same DMG, same install flow, no Rosetta.

Under the hood

  • Three changes in SceneApp/SceneApp/Animation/WindowAnimator.swift: Electron bundle-ID detection + per-animation throttle selection, distance-proportional duration scaling, tightened dedup tolerance.
  • scripts/build-dmg.sh now passes ARCHS="arm64 x86_64". Xcode 26.x's Swift Release optimizer has an ICE at pre-26 deployment targets, so the script also sets SWIFT_OPTIMIZATION_LEVEL=-Onone as a workaround — removable once Apple ships a fixed toolchain.
  • No SceneCore changes. 177/177 unit tests still pass.
  • Hardened runtime, Developer ID signed, Apple notarized.

Install

Homebrew (recommended):

brew upgrade --cask scene                         # existing users
brew install --cask chifunghillmanchan/tap/scene  # new users

DMG: download Scene-0.5.3.dmg below, double-click, drag into Applications. Universal binary — works on Apple Silicon and Intel.

Upgrade notes

  • Existing users: your Accessibility grant survives this upgrade (v0.5.x is a notarized, Developer ID-signed chain).
  • Intel Mac users installing for the first time: same flow as Apple Silicon. After dragging into /Applications, grant Accessibility in System Settings → Privacy & Security → Accessibility.