Convert WebP to ICO

Converting a WebP to ICO produces a favicon from the logo a site is already serving: the image is reduced to icon sizes — 16, 32 and 48 pixels in one container by default — and each is stored as a PNG, so the transparency comes through. The catch is the source. A WebP off a page is small and often lossy, and neither improves at icon size.

  • Where it runs In your browser. The file is never uploaded.
  • Lossy Some detail is traded for size. ICO cannot hold everything a WebP can.
  • File size limit Up to 100 MB per file, free, without an account.
  • Worth knowing Scaled down to icon sizes; detail beyond 256 pixels is discarded.

Up to 100 files at once. Mixed formats are fine.

What WebP to ICO actually does

A generated landscape with a low sun and three ridges, used to show what JPEG does to continuous tone. Shown as WebP.

WebP14 KB

A generated landscape with a low sun and three ridges, used to show what JPEG does to continuous tone. Shown as ICO.

ICO139 KB9.7× larger

A photographic scene — smooth gradients, soft edges, grain. This is the case ICO is designed for or against, and the figures show which. Both images are drawn in code and encoded by the same converter that runs on this page, so the sizes are this site's own output.
A generated badge: a circular gradient on a transparent background with a white bar across it, used to show what each format does with transparency and with hundreds of shades. Shown as WebP.

WebP4 KB

A generated badge: a circular gradient on a transparent background with a white bar across it, used to show what each format does with transparency and with hundreds of shades. Shown as ICO.

ICO7 KB62% larger

A transparent background and a gradient across the shape. ICO either keeps both, keeps one, or fills the transparency with a solid colour — which is the difference that catches people out. Both images are drawn in code and encoded by the same converter that runs on this page, so the sizes are this site's own output.
A generated application window with a sidebar, a table and a bar chart, used to show what JPEG does to flat colour and hard edges. Shown as WebP.

WebP11 KB

A generated application window with a sidebar, a table and a bar chart, used to show what JPEG does to flat colour and hard edges. Shown as ICO.

ICO3 KB4.1× smaller

Flat colour and hard edges, as in an interface, a chart or a logo. Very different behaviour from the photograph above, and the reason the answer is "it depends what is in the file". Both images are drawn in code and encoded by the same converter that runs on this page, so the sizes are this site's own output.

The WebP is the only copy you can reach, and that is fine

Almost everybody on this page is working backwards. The design files are with an agency that no longer answers, on a closed Figma account, or on a laptop that was replaced two jobs ago, and the only surviving copy of the logo is the one the site serves — as WebP, because a build step or an image CDN converted it on the way out.

That is a reasonable place to start and produces a perfectly usable favicon. It is worth thirty seconds of looking for something better first, because a better source makes a better icon and the alternatives are often right there: try /favicon.svg on the domain, search the page source for ".svg", or check whether the same asset is served as PNG in a picture element fallback. If any of those exists, the SVG to ICO or PNG to ICO pages will do better than this one.

A served WebP is usually too small rather than too large

The ICO written here is capped at 256 pixels on its longest edge — that is the format’s own limit, because the directory stores each dimension in a single byte and 256 is recorded as zero. On most icon pages that cap is the main event, because the source is a print file or a camera photograph thousands of pixels across.

Here it usually is not. Sites serve logos at the size the layout needs, often through a resizing service, and 240 to 400 pixels wide is entirely normal for a header mark — comfortably more than the 48 the default set tops out at. The risk runs the other way, and it only bites if you ask for sizes the source cannot supply: a 120-pixel logo converted with "All common sizes" is enlarged to fill the 256 and 128 entries, which adds bytes and no detail. Before converting, try requesting the same URL with a larger width parameter, or look for an @2x asset.

Lossy compression in the WebP shows up at icon size

WebP comes in two kinds and the extension does not say which. A lossless WebP of a flat logo is as clean as a PNG. A lossy one has been through a transform that smooths flat areas and rings along hard edges, and while that is invisible at 400 pixels it is not invisible after the icon has been shrunk to 32 and drawn next to a page title.

The symptom is a faint grey halo hugging the mark and a slight muddiness in what should be a solid fill. Nothing on this page removes it, because the information is gone. What helps is starting larger — a 400-pixel lossy source scaled to 256 averages some of the ringing away, where a 128-pixel one has nothing to average — and cropping to the symbol so that the remaining detail is spent on something that reads.

Transparency is the reason to use ICO rather than a flat image

The ICO produced here contains a PNG rather than a raw bitmap. That is the modern convention, every Windows since Vista reads it, and the file is a fraction of the size of the raw-bitmap alternative. More importantly it brings a real 8-bit alpha channel, and WebP has one too, so a cut-out logo arrives cut out with soft anti-aliased edges.

A favicon needs that more than most images do. It sits on the browser’s tab strip, which is a different colour in light and dark themes and different again between browsers; a mark baked onto an opaque white square looks like a bug in dark mode and like a sticker in light mode. If the WebP does not have a transparent background but the logo sits on flat white, removing that background before converting is the single highest-value edit available.

An animated WebP is refused rather than flattened

WebP can hold an animation, and the decoder used here reads still images only. An animated file is rejected with a readable message instead of being quietly reduced to its first frame — the better failure of the two, and consistent with how the rest of this site handles the same situation.

It is also not a loss in this particular case. Browsers do not animate ICO favicons, so an animated source was never going to produce an animated icon. If you want one frame of it, open the file in a browser, pause it, screenshot the frame and convert that. If the animation matters for some other purpose, WebP to GIF is the page that keeps it.

What a logo has to lose to read at 32 pixels

This is a design problem rather than a conversion one and it decides most of the outcome. A favicon is seen at 16 or 32 pixels in practice, and at that size a tagline is a grey smear, an outlined typeface fills in, a thin rule disappears, and a mark with more than about three distinct elements becomes a blob.

Crop the WebP to the symbol alone before converting: drop the wordmark, drop the margin, drop anything thinner than a fortieth of the width. If the brand is a wordmark with no symbol, a single letter set in the brand typeface is what nearly every well-known site does, and it reads at 16 pixels where the full name does not. Five minutes in any image editor beats every option on this page.

Several sizes out, and no metadata either way

The ICO container was designed to hold several sizes of the same artwork at once, which is why the comparison table on this page reports it as multi-image, and that is what this writes: one directory entry per size, three by default at 48, 32 and 16 pixels. A browser drawing a tab reads the 16 rather than reducing a 256 with its own filter, which is the difference the format exists for. What none of it does is redraw the mark — a purpose-drawn 32-pixel icon is still sharper than a 32 reduced from your logo.

Metadata does not travel. Every image conversion here decodes to raw pixels and re-encodes, so any EXIF, XMP or ICC profile in the WebP is dropped, and that happens whatever you do — it is not something the page offers to turn off. For a favicon that is entirely welcome: the file ends up a kilobyte or two of PNG behind a directory of a few dozen bytes — and the three-size default is normally smaller than the single 256, since three small PNGs of a flat mark cost less than one large one.

Installing the ICO once it exists

Put the file at the root of the site as /favicon.ico. Browsers request that exact path on their own, whether or not the HTML mentions it, which is why the 404 shows up in the log even on sites that already declare an icon in the head. Adding a link element as well makes the intention explicit and lets you point at a different file if you want.

Then wait, and clear the cache before concluding anything. Favicons are cached aggressively by every browser and by intermediate proxies, and a new one routinely takes a day or a hard reload to appear. Modern browsers will also accept a PNG or an SVG through a link element, so the ICO is strictly needed only for the bare /favicon.ico request and for Windows shortcuts — which is still reason enough to have one.

The conversion happens in the tab, on somebody’s logo

libwebp compiled to WebAssembly decodes the file, the image is scaled and encoded as a PNG with oxipng applied once per size, and the ICO header and its directory are written around the results. All of that runs in your browser: nothing is uploaded, there is no account and there is no daily allowance.

On this page that is worth saying rather than assuming, because the file is a logo somebody owns — quite possibly a client’s, quite possibly one that is not public yet. The free limit is 100 MB per file, which no logo will approach. Batches work if a project has several brands in it: drop a folder, take a ZIP, and the codec downloads once for the whole run.

How to turn a WebP logo into an ICO favicon

  1. Look once for a larger or lossless source — /favicon.svg, a PNG fallback, or an @2x asset.
  2. Crop the WebP to the symbol alone so it still reads at 32 pixels.
  3. Drop it here, put the ICO at the root as /favicon.ico, and hard-reload before judging it.

WebP against ICO: a delivery format against an icon container

WebP compared with ICO
WebPICO
Full nameWebP ImageWindows Icon
File extension.webp.ico
Media typeimage/webpimage/x-icon
CompressionEither, depending on the settingLossless — nothing is discarded
First published20101985
Published byGoogleMicrosoft
SpecificationRFC 9649
LicensingOpen standardPublished, not standardised
Standing todayCurrentNiche
Bit depth88
Colour it can describeRGB, YCbCrRGB, indexed palette
Largest image16,383 px per side256 px per side
Opens in a browserEvery browserEvery browser
Considered insteadAVIF, JPG, PNGPNG, SVG

What survives

Transparency survives. Both WebP and ICO store an alpha channel, so a cut-out stays cut out and nothing is filled in behind it.

Opening the result

GIMP reads both WebP and ICO, so there is a way to check the result against the original without a second tool.

What each format is for

WebP is Google's format, published in 2010. It records 8 bits per channel.

ICO comes from Microsoft and dates from 1985. GIMP and IcoFX all read it.

ICO was published in 1985 and WebP in 2010. The older one is generally the safer file to hand to somebody; the newer one usually does the job in fewer bytes.

WebP to ICO: sizes, transparency and sharpness

Are my WebP files uploaded anywhere?

No. This conversion runs entirely inside your browser, so the file never leaves your device. You can confirm it yourself: open the network tab of your browser's developer tools and convert something. You will see the page load, plus the analytics and advertising the site is paid for with — and nothing carrying your file. The engine behind this particular pair is jSquash, WebAssembly builds of the reference image codecs; your browser fetches it once and caches it.

What size icon comes out?

The sizes the "Icon sizes" control asks for, none above 256 pixels. The default writes 16, 32 and 48 — all of which a served logo of 240 pixels or more can supply comfortably, which is the usual case on this page.

Can I get 16, 32 and 48 pixel versions in one file?

Yes, and it is the default. Each size is a separate image in the same file, so a browser drawing a 16-pixel tab reads one made at 16 rather than reducing a 256 on the fly. That is worth more here than on most icon pages, because a served WebP is small and lossy and has nothing spare to lose to a second reduction.

Does the transparency survive?

Yes. The ICO written here wraps a PNG, which has a full alpha channel, so a cut-out logo stays cut out. That matters more for a favicon than almost anywhere else, because the tab strip changes colour between light and dark themes.

My WebP is animated and will not convert.

The decoder reads still images only and refuses animated files rather than silently taking frame one. An animated favicon is not a thing browsers support in an ICO anyway, so pick a frame with a screenshot and convert that.

The icon looks fuzzy at 32 pixels. Why?

Two likely reasons. The WebP was lossy, so it already had faint ringing along the edges and shrinking concentrates it; and the logo may simply be too detailed to read at that size. Cropping to the symbol alone, without the wordmark, fixes far more of this than any setting.

Where does the file go?

At the root of the site as /favicon.ico. Browsers request that exact path whether or not anything in the HTML points at it, which is why the 404 appears in the log in the first place. A link element in the head as well does no harm.

More about these formats

Where these figures come from

The claims this page makes about WebP and ICO are checkable, and these are the documents that settle them.