GitHub - kylebshr/decant: Liquid Glass icons, decanted for your enjoyment · GitHub
/" data-turbo-transient="true" />
Skip to content
Search or jump to...
Search code, repositories, users, issues, pull requests...
-->
Search
Clear
Search syntax tips
Provide feedback
--><br>We read every piece of feedback, and take your input very seriously.
Include my email address so I can be contacted
Cancel
Submit feedback
Saved searches
Use saved searches to filter your results more quickly
-->
Name
Query
To see all available qualifiers, see our documentation.
Cancel
Create saved search
Sign in
/;ref_cta:Sign up;ref_loc:header logged out"}"<br>Sign up
Appearance settings
Resetting focus
You signed in with another tab or window. Reload to refresh your session.<br>You signed out in another tab or window. Reload to refresh your session.<br>You switched accounts on another tab or window. Reload to refresh your session.
Dismiss alert
{{ message }}
kylebshr
decant
Public
Notifications<br>You must be signed in to change notification settings
Fork
Star<br>21
main
BranchesTags
Go to file
CodeOpen more actions menu
Folders and files<br>NameNameLast commit message<br>Last commit date<br>Latest commit
History<br>3 Commits<br>3 Commits
.gitignore
.gitignore
README.md
README.md
build-icon.py
build-icon.py
decant
decant
icon-extract.m
icon-extract.m
View all files
Repository files navigation
decant
Decant reverse-engineers Apple's "Liquid Glass" app icons (the iOS/macOS 26+ .icon format) back into an editable .icon bundle you can open in Icon Composer — pouring a sealed, compiled icon back out into editable source. It reads the compiled icon straight out of an installed iOS simulator runtime (or a mounted IPSW) using the private CoreUI framework, recovers every layer (vector SVG / raster PNG) and its full material treatment — blend mode, opacity, translucency, specular, shadow, blur, refraction, glass, per-appearance (light/dark/tinted) fills, layer transforms, and the canvas background — then reassembles a faithful icon.json + Assets/ folder. Every export is verified by re-compiling it with actool.
It was built by reverse-engineering and then round-trip–calibrated : for each property the rebuilt icon is recompiled and re-extracted, and the values are diffed against Apple's original until they match exactly.
Quick start
git clone https://github.com/kylebshr/decant<br>cd decant<br>./decant # export ALL runtime icons → ./icons/<br>./decant --list # list every extractable icon in your iOS runtime<br>./decant Maps # just one → ./Maps.icon, then: open Maps.icon
The runtime location is discovered automatically — you only need an iOS 26+ simulator installed in the standard place (Xcode › Settings › Components). The extractor binary is compiled on first run.
Simulator or IPSW?
By default decant reads icons out of your installed iOS simulator runtime , which is the easy path and all you need for the great majority of system apps (Maps, Photos, Safari, Settings, Weather, …). No download, no mounting.
But Apple thins a handful of apps out of the simulator — their icons simply aren't in the runtime. The notable ones are App Store and Podcasts , plus some others that ship only on device. For those, the icon lives in an IPSW (the device restore image) instead. Point decant at a mounted IPSW with --root to pull them — and in fact to export everything a real device ships, including apps the simulator omits.
So: reach for an IPSW when you want an app the simulator doesn't have (App Store, Podcasts, …) or a complete device-accurate set; otherwise the simulator path is simpler and faster.
Extracting from an IPSW
Mount the IPSW's filesystem with blacktop's ipsw tool (brew install blacktop/tap/ipsw), which decrypts it and keeps it mounted while it runs:
ipsw mount fs MyDevice_27.0_Restore.ipsw # prints a /tmp/NNN.dmg.mount path; leave running
Then in another shell, point decant at that mountpoint:
./decant --root /tmp/NNN.dmg.mount --list # list every app in the image<br>./decant --root /tmp/NNN.dmg.mount AppStore # one icon → ./AppStore.icon<br>./decant --root /tmp/NNN.dmg.mount # export ALL → ./icons/
Press Ctrl-C on the ipsw mount when you're done to unmount. --root takes any mounted iOS filesystem; decant looks in private/var/staged_system_apps, System/Applications, and Applications.
Usage
[Stack] [out.icon] [--preview]<br>./decant --root … # source from a mounted IPSW (see above)">./decant # export ALL → ./icons<br>./decant --all [outdir] # export ALL → outdir<br>./decant --list # list available icons + stack names<br>./decant [Stack] [out.icon] [--preview]<br>./decant --root … # source from a mounted IPSW (see above)
AppName is a system app by name (Maps, Photos, Safari, Settings, …), resolved automatically inside the newest installed iOS simulator runtime; common friendly names are aliased to their real bundles (Safari→MobileSafari, Settings→Preferences, Messages→MobileSMS, Calendar→MobileCal, Wallet→Passbook), and --list shows the exact...