ICOForgeON YOUR DEVICE

Favicon ICO

ICO image sizes — Microsoft’s typical Windows icon entries, not universal browser requirements
PlatformUseSizeFormatSource / status
WindowsTypical icon image16×16ICO entryMicrosoft · read
WindowsTypical icon image32×32ICO entryMicrosoft · read
WindowsTypical icon image48×48ICO entryMicrosoft · read
WindowsTypical icon image256×256ICO entryMicrosoft · read

For the favicon ICO built here, include 16×16, 32×32 and 48×48 images. The 256×256 row is a Windows icon option, not a browser-tab requirement.

With Python and Pillow installed, place a square image named source.png in your working directory, large enough for each requested output, and run:

python -c "from PIL import Image; im=Image.open('source.png').convert('RGBA'); im.save('favicon.ico',format='ICO',sizes=[(16,16),(32,32),(48,48)])"

This command was run with Pillow 12.3.0. The saved file decoded to three image sizes. Requested sizes larger than the source are ignored by Pillow; its default ICO payload encoding is PNG. Pillow official ICO documentation.

Verify the saved sizes

python -c "from PIL import Image; im=Image.open('favicon.ico'); s=sorted(im.ico.sizes()); print('Image sizes:',len(s)); print([(p,im.ico.getimage(p).size) for p in s])"

Actual output for the provided source:

Image sizes: 3
[((16, 16), (16, 16)), ((32, 32), (32, 32)), ((48, 48), (48, 48))]

An independent directory-header check counted three entries too. This verifies file contents, not browser frame selection or toolbar appearance.

Download source PNG · Download measured ICO · Read the local measurement record

Choose the ICO payload encoding explicitly

Pillow saves ICO image payloads as PNG by default. To request BMP/DIB payloads instead, specify bitmap_format="bmp":

python -c "from PIL import Image; im=Image.open('source.png').convert('RGBA'); im.save('favicon-bmp.ico',format='ICO',sizes=[(16,16),(32,32),(48,48)],bitmap_format='bmp')"

The BMP option also ran locally and produced three entries. Each payload began with a DIB header-size value of 40. This controls encoding; it does not certify compatibility with every legacy Windows application. No old Windows rendering test was performed. Official parameter reference.

Download BMP-payload ICO

Separate Home Screen assets

PlatformUseSizeFormatSource / status
iOSArchived iPhone Retina Web Clip example180×180PNGApple archived guide · read
Web-app manifestInstalled application iconsNo fixed Android dimensions prescribed by this sectionManifest image resourceW3C icons member · read

Apple’s row is an archived example, not a claim of a current mandatory 180-pixel specification. The W3C icons section does not establish a 192×192 or 512×512 Android requirement.

Connect the files

Place the files at the paths below, or change each URL to its actual location:

<link rel="icon" href="/favicon.ico" sizes="16x16 32x32 48x48">
<link rel="apple-touch-icon" href="/apple-touch-icon.png" sizes="180x180">
<link rel="manifest" href="/site.webmanifest">

The ICO and separate PNG serve different destinations: the icon link identifies browser icon resources, while the Apple touch link identifies the Home Screen PNG. HTML does not require every site to supply competing ICO and PNG browser-tab icons. HTML Standard: icon.

In site.webmanifest, include your separately generated PNGs. The following dimensions are this example’s file declarations, not fixed dimensions imposed by W3C:

{"icons":[{"src":"/icons/icon-192.png","sizes":"192x192","type":"image/png"},{"src":"/icons/icon-512.png","sizes":"512x512","type":"image/png"}]}

Inspect the saved ICO before describing what it contains. The file’s directory and decoded images provide checkable results; a large preview alone does not identify the browser’s chosen entry.

Need browser-based conversion? PNG to favicon. For the broader platform checklist, read favicon size.

Sources and command output checked 2026-11-05. No native browser-tab or legacy Windows rendering claim is made.