v0.5.3 — Smoother animation + Intel support
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.
WindowAnimatornow 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
durationMsis 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_TARGETto 26.4 (the build machine's OS); reset to 14.0 to matchPackage.swiftand 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.shnow passesARCHS="arm64 x86_64". Xcode 26.x's Swift Release optimizer has an ICE at pre-26 deployment targets, so the script also setsSWIFT_OPTIMIZATION_LEVEL=-Ononeas 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.