Favicon ICO
| Platform | Use | Size | Format | Source / status |
|---|---|---|---|---|
| Windows | Typical icon image | 16×16 | ICO entry | Microsoft · read |
| Windows | Typical icon image | 32×32 | ICO entry | Microsoft · read |
| Windows | Typical icon image | 48×48 | ICO entry | Microsoft · read |
| Windows | Typical icon image | 256×256 | ICO entry | Microsoft · 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.
Separate Home Screen assets
| Platform | Use | Size | Format | Source / status |
|---|---|---|---|---|
| iOS | Archived iPhone Retina Web Clip example | 180×180 | PNG | Apple archived guide · read |
| Web-app manifest | Installed application icons | No fixed Android dimensions prescribed by this section | Manifest image resource | W3C 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.