Fileicon
macOS CLI for managing custom icons for files and folders
Install / Use
/learn @mklement0/FileiconREADME
Contents
<!-- END doctoc generated TOC please keep comment here to allow auto update -->fileicon — introduction
fileicon is a macOS CLI for managing custom icons for files and folders, as
a programmatic alternative to interactively using Finder.
fileicon allows assigning a custom icon to any file or folder,
using any image file whose format is recognized by the system.
Caveats:
-
Custom icons rely on extended attributes of the macOS filesystems, HFS+ and APFS. Therefore, custom icons are lost when copying files or folders to filesystems that don't support these attributes; for instance, custom icons cannot be stored in a Git repository.
-
v0.3.2+ supports custom icons for volumes (folders that act as volume mountpoints) in principle, but, as of macOS 13.1 (Ventura), this often fails in practice, for reasons unknown to me; see this Ask Different question, for instance.
When assigning an image file with fileicon set, a set of icons in several
resolutions is created and stored in the resource fork of the target file itself
/ of a hidden Icon\r file inside the target folder / as the content of a hidden .VolumeIcon.icns file for folders that are volume mountpoints. Addtionally, a com.apple.FinderInfo extended attribute with the custom-icon attribute (flag) is set on the target file or folder itself.
The icon with the highest resolution measures 512 x 512 pixels, and the input
image is scaled accordingly.
Note that input images that aren't square can result in distorted icons;
for best results, provide square images.
If you supply an input path to a symlink, it is invariably its target that is used for the operation; symlinks themselves cannot have icons associated with them.
See also: Icon Changer, a GUI utility that uses fileicon behind the scenes.
Examples
# Assign custom icon derived from image file 'img.png' to file 'foo':
fileicon set foo img.png
# Remove previously assigned custom icon from folder 'foodir':
fileicon rm foodir
# Extract custom icon from file 'foo' to icon file 'foo.icns':
fileicon get foo
# Test if folder 'foodir' has custom icon:
fileicon test foodir
Installation
Supported platforms:
- macOS
Important:
- If you're running macOS 12 (Monterey) or higher, be sure to install at least version 0.3.1 of this utility, as it no longer relies on Python (which no longer ships with macOS).
- Unfortunately, a bug beyond
fileicon's control causes thegetsub-command (for extracting an existing icon) to be excessively slow on macOS 12 (Monterey); this has been fixed in macOS 13 (Ventura).
Installation via Homebrew
With Homebrew installed, run the following:
brew install fileicon
<sup>Tip of the hat to @danielbayley for creating and submitting the formula.</sup>
Installation from the npm registry
With Node.js installed, install the package as follows:
[sudo] npm install fileicon -g
Note:
- Whether you need
sudodepends on how you installed Node.js and whether you've changed permissions later; if you get anEACCESerror, try again withsudo. - The
-gensures global installation and is needed to putfileiconin your system's$PATH.
Manual installation
- Download the CLI as
fileicon. - Make it executable with
chmod +x fileicon. - Move it or symlink it to a folder in your
$PATH, such as/usr/local/bin(requiressudo).
Usage
Find concise usage information below; for complete documentation, read the manual online, or, once installed, run man fileicon (fileicon --man if installed manually).
$ fileicon --help
Manage custom icons for files and folders on macOS.
SET a custom icon for a file or folder:
fileicon set <fileOrFolder> [<imageFile>]
REMOVE a custom icon from a file or folder:
fileicon rm <fileOrFolder>
GET a file or folder's custom icon:
fileicon get [-f] <fileOrFolder> [<iconOutputFile>]
-f ... force replacement of existing output file
TEST if a file or folder has a custom icon:
fileicon test <fileOrFolder>
All forms: option -q silences status output.
Standard options: --help, --man, --version, --home
<!-- DO NOT EDIT THE NEXT CHAPTER and RETAIN THIS COMMENT: The next chapter is updated by `make update-readme/release` with the contents of 'LICENSE.md'. ALSO, LEAVE AT LEAST 1 BLANK LINE AFTER THIS COMMENT. -->
License
Copyright (c) 2015-2022 Michael Klement mklement0@gmail.com (http://same2u.net), released under the MIT license.
Acknowledgements
This project gratefully depends on the following open-source components, according to the terms of their respective licenses.
npm dependencies below have optional suffixes denoting the type of dependency; the absence of a suffix denotes a required run-time dependency: (D) denotes a development-time-only dependency, (O) an optional dependency, and (P) a peer dependency.
npm dependencies
<!-- DO NOT EDIT THE NEXT CHAPTER and RETAIN THIS COMMENT: The next chapter is updated by `make update-readme/release` with the contents of 'CHANGELOG.md'. ALSO, LEAVE AT LEAST 1 BLANK LINE AFTER THIS COMMENT. -->Changelog
Versioning complies with semantic versioning (semver).
<!-- NOTE: An entry template for a new version is automatically added each time `make version` is called. Fill in changes afterwards. -->-
** v0.3.4 == v0.3.3** (2023-03-02):
-
v0.3.2 (2022-12-29):
- [enhancement] Support for volume icons, at least in principle; caveat: as of macOS 13.1, this often fails in practice; see https://apple.stackexchange.com/q/451965/28668 for an example.
-
v0.3.1 (2022-04-07):
- [compatibility] Removed dependency on Python in favor of AppleScript with its ObjC bridge, courtesy of @scriptingosx
-
v0.3.0 (2022-02-11):
- [compatibility] Added support for using an available
python3on macOS 12.3+, where the system v2.x/usr/bin/pythonwill no longer be avaialble.
- [compatibility] Added support for using an available
-
v0.2.4 (2019-12-10):
- [installation] Thanks to @danielbayley, there is now an official Homebrew formula.
-
v0.2.3 (2019-11-01):
- [enhancement] Installation via Homebrew is now possible on macOS.
- [doc]
README.mdupdated with Homebrew installation instructions. - [dev] Updated dev-time-only packages to fix security issues.
-
v0.2.2 (2018-03-05):
- [enhancement]
filecon set <file>is now short forfilecon set <file> <file>; that is, you can now more conveniently make an image file use itself as its icon.
- [enhancement]
-
v0.2.1 (2018-01-13):
- [doc] Read-me improvements re supported image formats.
- [enhancement] Improved wording of error message on attempting to use a pipe
such as via a process subsitution (
<(...)) in lieu of an actual image file, which is not supported.
-
v0.2.0 (2017-10-14):
- [compatibility] macOS 10.13 (High Sierra) is now supported.
- [enhancement] Switched from using
sips -ifor icon creation to a Python-based Cocoa call
Related Skills
node-connect
337.4kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
83.2kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
337.4kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
83.2kCommit, push, and open a PR
