Feather CLI: Feather in Terminal
Coming soon Feather CLI isn’t out yet. This page shows what it will do; the install command comes here on release day.
Feather CLI is Feather's command-line tool: the feather command in Terminal. It makes photos, videos, PDFs and documents smaller with the same engine as the app, for scripts, whole folders and automation. It comes with Feather Pro.
Everything happens on your Mac. Feather CLI doesn't upload files, doesn't need an account, and sends nothing anywhere.
What you need
- A Mac with Apple silicon and macOS 15 Sequoia or later.
- Feather from the Mac App Store, with Feather Pro on this Mac.
- Homebrew, to install it.
Install
Feather CLI isn't out yet. It will install with Homebrew, and the command will be on this page on the day it's released.
Once it's installed, feather pro tells you whether it finds Feather Pro on this Mac. If it doesn't, open Feather and go to Settings › Feather Pro: buy Pro there, or choose Restore Purchase if you already have it.
Try it
feather photo.jpg
This writes photo-min.jpg next to the original, lossless: the pixels stay exactly the same, and the private data inside is removed (location, author, camera serial numbers). Some more:
# every PNG on the Desktopfeather ~/Desktop/*.png# a folder and its subfolders, smaller stillfeather -m lossy -r ~/Pictures/Export# the smallest format for each photo, into a folderfeather -m best -o ~/Sites/img ~/Export# the size and format Instagram showsfeather -t instagram holiday.jpg# under 2 MBfeather --max-size 2mb scan.jpg video.mov# every image to WebPfeather convert --to webp -r ./assets# a video to MP4feather convert --to mp4 clip.mov
feather --help lists every option.
How much smaller
| Mode | What it does |
|---|---|
lossless (the default) | Same pixels, smaller file. Nothing you can see changes. |
lossy | Smaller still, at the quality you set with --quality (80 by default). |
best | Tries JPEG, PNG, WebP and AVIF (JPEG XL too where the destination takes it) and keeps the smallest. |
Where the files are going
-t (--target) prepares files for where they're going. It covers:
- design tools: Figma, Miro, Mural, Canva, Notion;
- social media: Instagram, Threads, Facebook, LinkedIn, X, Bluesky, Mastodon, Pinterest, TikTok, Discord;
- purposes: website, slides, avatar;
- file sizes: under 500 KB up to under 100 MB.
feather targets shows them all, with their limits. Your own limits work too: --long-side 2000, --megapixels 12, --max-size 1mb.
Your own presets
The presets you made in Feather also work in Feather CLI:
- In Feather, go to Settings › Presets › Export Presets….
- Save the file as
~/.config/feather/presets.json. - Use a preset by its name:
feather -t "Client website" ~/Export
A file somewhere else works with --presets <file>. Run the export again after you change a preset.
Where results go
- Next to the original (the default), with
-minin the name. Change it with--suffixand--prefix. - Into a folder:
-o <folder>, with the original names. - In place of the original:
--replace. The original is overwritten. It goes to the Trash only when the file was resized, watermarked or converted to another format. Try your command on a copy first.
In a folder, Feather CLI skips hidden files and its own earlier results. Running it twice doesn't compress the copies again.
Privacy
By default, Feather CLI removes the private data inside a file: location, author, camera details and serial numbers, dates, and editing history.
- To keep camera and exposure data, use
--keep-metadata camera(JPEG only: other formats can't carry it). - To keep everything, use
--keep-metadata all.
To see what's inside a file before you share it:
feather inspect photo.jpg report.pdf
inspect is free and changes nothing.
Watermark
feather --watermark "© Studio Max Redecker" --position bottom-right ~/Export
feather --logo logo.png --tile ~/Export
In scripts
--json prints one JSON document with every file, its sizes, what was removed and where the result went:
feather --json -o out ~/Export | jq '.totals'
Exit codes:
| Code | Meaning |
|---|---|
| 0 | Done |
| 1 | One or more files couldn't be compressed |
| 2 | The command wasn't right |
| 3 | Feather Pro is needed |
| 130 | Stopped with Ctrl-C |
Feather CLI works on up to four photos at a time, and one video at a time, so it never takes more memory than your Mac can spare. -j 1 makes it work on one file at a time. Ctrl-C stops: files being made are finished or dropped, and your originals stay as they are.
Questions
Why isn't Feather CLI in the App Store with Feather?
Apps from the App Store run in a sandbox. A sandboxed command-line tool can't open the files you name in Terminal, so Feather CLI is installed separately. It will be signed with our Developer ID and notarised by Apple.
How does Feather CLI know I have Feather Pro?
It reads the App Store receipt of Feather on this Mac: it checks Apple's signature, and that the receipt belongs to this Mac. This happens offline, and nothing is sent.
Does it work on a server or in CI?
Not at the moment. Feather CLI needs Feather with Feather Pro on the same Mac.
Does it work on an Intel Mac?
No. Feather 2 is made for Apple silicon.
Questions or ideas? Get in touch through studiomaxredecker.com.