Creating a Professional Favicon Pipeline on Arch Linux (orioninsist Method)
I never expected that something as small as a 16×16 icon could break the visual consistency of an entire website, but it did. It bothered me enough that I finally sat down and built a complete, reliable favicon workflow on Arch Linux—one that produces perfect PNGs, Apple icons, and a multi-size ICO file that works everywhere.
This guide comes from real trial-and-error. Every line is based on commands I actually run on my own Hugo PaperMod setup.
Why I Needed a Real Favicon Workflow
I’ve used Linux long enough to know that simple things break when you rely on shortcuts. A favicon seems trivial, but browser inconsistencies, compression issues, manifest icons, and Apple Touch requirements make it surprisingly easy to get wrong.
I wanted a single workflow that produced:
- Clean, optimized PNGs
- A single ICO file with multiple sizes
- Output compatible with modern browsers, older browsers, and mobile devices
- Files that Hugo and PaperMod can pick up automatically
So I turned my Arch Linux tools—ImageMagick and OptiPNG—into a reliable mini-pipeline.
Install the Required Tools
On Arch Linux it takes only a second to get the essentials:
sudo pacman -S imagemagick optipng
- ImageMagick handles resizing, centering, and transparent backgrounds.
- OptiPNG makes sure everything stays lightweight without losing quality.
The 512×512 Master Favicon
This is the most important size. Modern browsers look for it first, and it acts as the foundation for everything else.
magick logo.png \
-resize 512x512 \
-gravity center \
-background none \
-extent 512x512 \
-define png:compression-level=9 \
-define png:compression-filter=5 \
favicon-512.png
optipng -o7 favicon-512.png
I always start from a vector or a high-resolution PNG to avoid edge artifacts.
The 192×192 Icon (Android / Chrome)
Android Chrome and web app manifests both refer to this size. Without it, your site looks incomplete on mobile.
magick logo.png \
-resize 192x192 \
-gravity center \
-background none \
-extent 192x192 \
-define png:compression-level=9 \
-define png:compression-filter=5 \
favicon-192.png
optipng -o7 favicon-192.png
Apple Touch Icon (180×180)
Safari and iOS use this for the home-screen shortcut. If you skip it, Apple devices will try to upscale your smaller favicon—and it never looks clean.
magick logo.png \
-resize 180x180 \
-gravity center \
-background none \
-extent 180x180 \
apple-touch-icon.png
optipng -o7 apple-touch-icon.png
16×16 — The Tiny One
This one still matters. It’s the classic browser tab icon and gets rendered everywhere.
magick logo.png \
-resize 16x16 \
-gravity center \
-background none \
-extent 16x16 \
-define png:compression-level=9 \
-define png:compression-filter=5 \
favicon-16.png
optipng -o7 favicon-16.png
A Professional Multi-Size ICO (16→256 px)
The ICO format is old, but still required for Windows and many desktop browsers. I prefer generating all sizes inside one file.
These are the included dimensions:
16, 24, 32, 48, 64, 128, 256
magick logo.png \
\( -clone 0 -resize 16x16 -extent 16x16 \) \
\( -clone 0 -resize 24x24 -extent 24x24 \) \
\( -clone 0 -resize 32x32 -extent 32x32 \) \
\( -clone 0 -resize 48x48 -extent 48x48 \) \
\( -clone 0 -resize 64x64 -extent 64x64 \) \
\( -clone 0 -resize 128x128 -extent 128x128 \) \
\( -clone 0 -resize 256x256 -extent 256x256 \) \
-delete 0 \
-gravity center \
-background none \
favicon.ico
You can verify everything quickly:
mediainfo favicon.ico
Hugo + PaperMod Integration
Once the icons are generated, Hugo makes the process simple. Just drop them in:
/your-hugo-site/static/
For example:
cp favicon.ico /path/to/hugo-site/static/favicon.ico
cp favicon-512.png /path/to/hugo-site/static/favicon.png
cp favicon-192.png /path/to/hugo-site/static/favicon-192.png
cp apple-touch-icon.png /path/to/hugo-site/static/apple-touch-icon.png
PaperMod automatically detects these.
If you prefer explicit config:
[params.assets]
favicon = "favicon.png"
favicon16 = "favicon-16.png"
favicon32 = "favicon.ico"
favicon192 = "favicon-192.png"
apple_touch_icon = "apple-touch-icon.png"
My Recommended Minimal Set
After trying many combinations, I settled on a clean, long-term set that works everywhere:
favicon.icofavicon.png(512×512)favicon-192.pngapple-touch-icon.png
This covers modern browsers, legacy environments, mobile devices, and iOS home-screen icons.
Final Thoughts
A small icon shouldn’t break the identity of a website. By turning this into a repeatable Linux workflow, I never worry about favicon quality again. Everything is versioned, predictable, and integrated directly into my Hugo + PaperMod workflow.
If you’re building your own developer blog or portfolio, a clean favicon pipeline is one of those small details that makes the whole experience feel complete.
If you enjoyed this article, consider subscribing for future posts. https://orioninsist.medium.com/subscribe
