Some macOS apps (audio plugins, vendor tools, cross-platform apps) ship icons that fill the whole canvas or use hard square corners, so they look too big or off-shape next to Apple's. This resizes them to the native proportion — and can round square ones into the native squircle.
Resized to the native size, and (for square icons) rounded to the native squircle — the same shape macOS uses for Tahoe's Liquid Glass icons.
Fix your icons now — nothing gets installed:
git clone https://github.com/danielh989/macos-icon-normalizer.git
cd macos-icon-normalizer
./run.shThat's it. (./run.sh --dry-run first if you want to preview.) Run it again
whenever you install or update apps.
Keep them fixed automatically (the watcher) — optional. Installs a background service that re-applies after every app update:
sudo ./install.sh # installs & starts the watcher (launchd daemon)Needs macOS + Xcode Command Line Tools (the first run offers to install them if
missing). You'll be asked for your password because most apps in /Applications
are owned by root.
- Resizes any icon that fills ≥ 92% of the canvas down to the native ~82%.
- Rounds flat-cornered square icons to Apple's squircle shape (skips ones with a border — rounding would clip it).
- Applies them as a custom icon — never edits the app bundle or its code
signature, and it's fully reversible (
./run.sh --revert). - Only touches user-facing, non-Apple apps.
Pass to run.sh (e.g. ./run.sh --squircle) or set as env vars:
| Setting | Default | Meaning |
|---|---|---|
ICON_NORMALIZER_THRESHOLD |
0.92 |
Min canvas fill to count as oversized (lower = more apps). |
ICON_NORMALIZER_SQUIRCLE |
auto |
auto rounds only safe flat-cornered squares; on always; off never. |
--revert |
Restore original icons (and stop the watcher). | |
--force |
Re-apply even to already-customized apps. |
An unsigned personal tool that needs admin — so it's built to be easy to audit and does the least it can:
- Admin is only to write icons on
root-owned apps and (optionally) install the watcher. Nothing else needs it. - No network, except
pipfetching Pillow/pyobjc into a local venv on first run. It never phones home. - Never edits app bundles or code signatures. Icons are a separate custom
resource;
--revertremoves them. - Provided as-is, no warranty (MIT). Read the source first — it's small.
- macOS 15 Sequoia — primary target (likely fine on earlier releases).
- macOS 26 Tahoe — works. To decide which apps are real third-party apps
(vs. Apple apps, installers, helpers, background agents) it normally reads the
Launchpad database; Tahoe removed that, so it falls back to
Info.plistheuristics for the same "is this a user-facing app?" check. Resizing and squircle rounding both still apply. - macOS 27 Golden Gate — inherits Tahoe's icon system; not directly tested.
Tahoe's Liquid Glass drops non-conforming icons into a gray "icon jail". Giving an icon the native shape/margin lets it render as a clean squircle instead:
sudo ./uninstall.sh # remove the watcher, restore original icons
sudo ./uninstall.sh --keep-icons # remove the watcher but keep normalized iconsMIT.