Highlights
The big themes this cycle: sharper and smoother display scaling, brightness control, signing and notarization, and a broad round of fixes and polish throughout.
- Sharper external displays, no password. Crisp now surfaces and applies the clean HiDPI ("Retina") scaled resolutions macOS hides on 2K+ externals, with no override file, admin prompt, or screen blank on panels that already carry them (the password-gated override stays as a fallback for panels that lack HiDPI).
- Smooth scaling. An opt-in, per-display toggle installs a dense HiDPI ladder so the Resolution slider fine-tunes size in small steps, well beyond the default scaled sizes: the flexible scaling people install BetterDisplay for, built in.
- Brightness keys drive your external monitors. The Mac's brightness keys can now dim any DDC external: follow the pointer, all displays, or a chosen subset. Opt-in, requests Accessibility only when you enable it, no restart.
- Signed and notarized. Crisp is now signed with a Developer ID and notarized by Apple, so it opens with a normal double-click: no Gatekeeper warning, no right-click-to-open.
Added
- Auto Brightness rework: the built-in slider tracks system brightness live and externals follow it. A "Keep display offsets" mode preserves your per-monitor differences; with it off, a manual change holds 30s before syncing resumes.
- Brightness Keys: drive external displays from the Mac's brightness keys (pointer, all, or a subset). Opt-in, no launch prompt; grant Accessibility to enable, no restart. (#8)
- Color profile picker lists only display-safe profiles, per display.
- Smooth scaling (opt-in per external display): a dense HiDPI ladder for fine-grained scaling; off by default. (#9)
- Keep Awake (in Tools): holds a power assertion so the display and system don't idle-sleep. Session-only.
- Toggle macOS "Automatically adjust brightness" (ambient light) from Crisp, on displays with a light sensor.
Fixed
- Freshly connected monitors now show their real model name and real brightness level instead of a stale value or a generic "Display 4".
- Multiple externals no longer cross-talk: the Apple Silicon DDC-to-display matching was rewritten to pair each channel with the correct display. (#14, #13)
- Built-in brightness keys no longer go dead for ~30s after leaving clamshell mode. (#12)
- Color profile name updates immediately on switch. (#11)
- Brightness sliders handle monitors that report stale or garbage DDC data. (#13)
- "Invert Colors" now works (applied as a lookup table). (#17)
- Image Adjustment: the Gain and Contrast sliders now take effect above 0.
- HiDPI modes that share a size with a low-refresh timing now run at full refresh instead of dropping to 50Hz.
- After sleep/wake, displays no longer land on a wrong (stretched, 60Hz) resolution.
- Scaling to native now lands on the crisp 1:1 mode, not a soft same-size HiDPI variant.
- The panel no longer twitches on open: Dark Mode / Night Shift / True Tone, brightness, and Launch at Login read correctly on the first frame.
- Resolution and refresh-rate switches are serialized so they can't fire conflicting configs at once.
- Changing resolution keeps the current refresh rate, even on NTSC (59.94Hz) timings.
- Mirrored displays get their saved resolution restored after sleep/wake.
Changed
- Resolution list mirrors System Settings: native-style labels, off-spec modes hidden, grouped under HiDPI / Non-HiDPI, and presented as a slider (full list behind "Show all resolutions").
- Refresh-rate rows keep two decimals on NTSC timings so they don't collapse; the built-in's top rate reads "ProMotion".
- Brightness sliders glide to clicked values on every display type, with DDC writes paced to ~20/sec to prevent flicker. (#13)
- Combined brightness restyled to match the per-display rows, and shown only when more than one slider exists.
- Menu icons follow the native state rule: colored only while active, gray otherwise (like Wi-Fi and Battery).
- Update checks now run automatically; the "Check for Updates at Launch" toggle was removed (still throttled to once an hour).
- HiDPI scaled resolutions appear on capable 2K+ externals with no admin prompt or screen blank; the override plist is now only a fallback.
- Chinese localization polished to Apple's established terminology, with previously unlocalized strings now translated. I don't speak Chinese myself, so corrections are very welcome as a PR. (我本人不懂中文,若译文仍有不自然之处,欢迎提交 PR 指正。)
- Secondary text in the popover now meets WCAG AA contrast in light mode; VoiceOver announces preset color names and Auto Brightness sync state.
- Smaller polish: smoother section reveals, tighter spacing, removed the notch-height row, Afdian row localized for Chinese.
Dev / build
dev.shsigns with a stable identity so the Accessibility grant survives rebuilds; added aMakefile. (#13)- Release DMGs are signed with a Developer ID and notarized via
release.sh(ad-hoc fallback when no cert is configured).
Supporting Crisp
Starting with 1.3.0, Crisp is signed with a Developer ID and notarized by Apple. No more of the security warning from 1.2.0 and earlier, the one that sent you into System Settings to open it anyway: Crisp now opens with a normal double-click.
The easiest way to support Crisp costs nothing: if it made your displays better, star the repo on GitHub or tell a friend. Word of mouth is how most people find it.
The signing runs on an Apple Developer membership ($99/year). Crisp is free and will stay completely free, but if you'd like to chip in toward keeping it signed and notarized, I've set up GitHub Sponsors, Ko-fi, and Afdian (爱发电), also in the app under Settings, "Support Crisp". Completely optional, but you'll have my heartfelt thanks.
Contributors
- @shaw-baobao: color profile subtitle sync (#11)
- @caicaiks: multi-display DDC matching and reply-frame hardening (#13)