Favicon Generator – One Source Image, the Whole Icon Set
A modern website no longer ships a single favicon.ico. A desktop browser wants a crisp 16 or 32 pixel tab icon, iOS wants a 180 pixel apple-touch-icon, Android and installable web apps want 192 and 512 pixel PNGs listed in a manifest, and Windows shortcuts still reach for a real ICO container. This favicon generator takes one image, letter or emoji and produces every one of those files in your browser, along with the site.webmanifest, browserconfig.xml and the <head> snippet that ties them together.
What the tool actually does to your image
Each output size gets its own canvas at exactly that pixel count — the 16 pixel icon really is drawn as sixteen pixels, not a large icon shrunk with CSS. Before the artwork lands on that canvas it is downscaled in halving steps: 512 to 256, 256 to 128, and so on until it is within twice the target size. That matters more than it sounds. A single 512-to-16 draw discards thirty-one of every thirty-two pixels and turns fine detail into speckle, while repeated halving averages neighbouring pixels at every stage and keeps the shape readable.
SVG sources skip that chain entirely. A vector is re-rasterised at each target size, so a logo drawn from paths stays sharp at 512 and legible at 16 instead of inheriting the artefacts of a single bitmap render.
Why a real ICO still matters
Renaming logo.png to favicon.ico produces a file that many Windows shells and older user agents will not read. A genuine ICO is a container: a six-byte ICONDIR header holding the image count, then one sixteen-byte ICONDIRENTRY per image recording its width, height, byte length and offset, and finally the image payloads themselves. This tool writes that structure directly, embedding PNG data for each resolution, so a single favicon.ico can carry 16, 32 and 48 pixel versions at once and the system picks whichever it needs.
One quirk of the format is worth knowing: the width and height fields are a single byte each, and a value of 0 means 256. That is why 256 pixels is the largest image an ICO can hold.
Which sizes you actually need
The honest short list is smaller than most tutorials suggest. A favicon.ico plus a 32 pixel PNG covers desktop browsers. A 180 pixel apple-touch-icon.png covers iOS home screens. A 192 and a 512 pixel PNG cover Android and installable apps — Chrome looks for icons at both of those sizes before it will offer to install a site. Everything else, including the 96 pixel and Windows tile assets, is an optional extra costing a couple of kilobytes.
Transparency, and where it disappears
Transparency survives in the ordinary PNG set, so a logo sits cleanly on a light or dark tab bar. Two places do not keep it. iOS does not preserve alpha on home-screen icons, so this tool always fills apple-touch-icon.png with the Apple background colour you pick rather than letting the platform decide. Android maskable icons are cropped to a shape the device chooses, so they must be opaque right to the edge, and the guidance for those is to keep the meaningful content inside a centred circle covering about eighty percent of the icon's width. The tool's safe-zone overlay draws that circle for you.
Text and emoji icons
No logo yet? Type one to three characters and the tool renders them centred on a coloured tile. Centring uses the measured ink box of the glyphs rather than the font baseline, so letters sit optically centred instead of drifting low, and the glyph shrinks automatically if it would otherwise overflow the padding box. A contrast readout warns when foreground and background fall below a ratio of 3:1, the point at which a shape becomes hard to distinguish at tab size. Emoji work the same way, with one caveat: they are rasterised with the emoji font installed on your machine, so the result is a snapshot of how it looks here, not everywhere.
Installing the files
For Next.js, Vite and most static hosts, copy everything into the public folder so the files are served from the site root, then paste the generated snippet into your <head>. If your icons live somewhere else, set the base path first and every link, plus the manifest entries, is rewritten to match. The snippet only ever references files that were genuinely produced, so switching sizes off cannot leave you pointing at an icon that does not exist.
Everything runs client-side using the File API, canvas and Blob. Your source image is never uploaded, which means the tool works offline and an unreleased brand asset stays on your own machine.