Loading...
Loading...
Generate and install a complete favicon / app-icon / PWA-icon stack directly into a project — favicon.ico, every PNG size, apple-touch-icon, Android icons, theme-aware light/dark favicons, per-environment (dev/staging/prod) variants, and manifest.json — from an emoji, a named icon, a logo file, or an image URL. No browser, no zip download, no manual unzip: files land in the repo and the <head> gets patched. Use whenever a user wants a favicon, site icon, tab icon, app icon, or PWA icons, or says "make me a favicon", "add a favicon", "add app icons", "generate icons for this site", or "I want a <emoji>/<logo> as the favicon". A new app with no icon looks unfinished — this fixes it in one shot. Powered by favicontools.com.
npx skill4agent add drmrduck/skills appiconsSD--badges --theme-aware--no-badges--no-theme-aware--source| User gave you… | Use | Example |
|---|---|---|
| A local logo/image | the file path | |
| A URL to an image/logo | the URL | |
| A vibe / emoji / brand name | an Iconify name | |
prefix:namenoto:twemoji:fluent-emoji:noto:rocketnoto:foxnoto:purple-heartsimple-icons:logos:simple-icons:reactlogos:github-iconsimple-icons:stripelucide:mdi:tabler:lucide:camerascripts/favicon-gen.sh --source <file|url|prefix:name> --out <public-dir> [options]--out--bg none|white|blacknonewhite--shape circular--shape square|circular--variant badge|color--primary "#7c3aed"badgecolor--primary--no-badges--no-theme-aware# Default: emoji favicon, polished, with theme-aware + per-stage variants
scripts/favicon-gen.sh --source noto:fox --bg white --shape circular --out ./public
# From the project's own logo (still per-stage by default)
scripts/favicon-gen.sh --source ./public/logo.svg --out ./public
# Brand mark, color-tinted stage variants instead of letter badges
scripts/favicon-gen.sh --source simple-icons:react --variant color --primary "#61dafb" --out ./public
# Just a single plain icon, no stages
scripts/favicon-gen.sh --source ./logo.png --no-badges --out ./publicfavicon.icofavicon-16/32/48/96apple-touch-icon.pngandroid-icon-192x192.pngmanifest.jsonstaging-*dev-*staging-manifest.jsondev-manifest.json--out<head><out>/.favicon-head.html<head>--out ./publicapppublicapp/layout.tsx<head><link>manifest.jsonmetadata.manifest<link rel="manifest">--out ./public.favicon-head.html<head>index.html_documentapp.html/favicon.ico./public--outfavicon.ico<link rel="icon">app/app/favicon.icopublic///staging-/dev-app/layout.tsx<FaviconHead>const isStaging = process.env.NEXT_PUBLIC_APP_ENV === "staging";
const isDev = process.env.NODE_ENV === "development";
const prefix = isDev ? "/dev-" : isStaging ? "/staging-" : "/";
const manifest = isDev
? "/dev-manifest.json"
: isStaging
? "/staging-manifest.json"
: "/manifest.json";
// <link rel="icon" href={`${prefix}favicon.ico`} />
// <link rel="icon" type="image/png" sizes="32x32" href={`${prefix}favicon-32x32.png`} />
// <link rel="apple-touch-icon" href={`${prefix}apple-touch-icon.png`} />
// <link rel="manifest" href={manifest} />const prefix = import.meta.env.DEV ? '/dev-' : import.meta.env.VITE_APP_ENV === 'staging' ? '/staging-' : '/'import.meta.env.PUBLIC_APP_ENV+layout.sveltestaging-manifest.jsondev-manifest.jsonnameshort_name"Acme""Acme (Staging)""Acme (Dev)"start_url//dashboardfavicon.icofavicon-32x32.pngapple-touch-icon.pngmanifest.jsonstaging-*dev-*<head>favicontools.com--apiFAVICON_APIcurlunzippython3jq{ "mcpServers": { "favicontools": { "type": "http", "url": "https://favicontools.com/api/mcp" } } }search_inputsgenerate_iconsetgenerate_iconsetPOST https://favicontools.com/api/faviconshttps://api.iconify.design/<prefix>/<name>.svgmewc/favicon-generator