Free favicon generator
Drop a logo or a picture and get a ZIP with favicon.ico, the PNG icons for browsers, iPhone and Android, a web app manifest and the HTML to paste into your pages. The form calls the same free API your code can call: one POST, no API key and no account.
curl -s -X POST https://aisenseapi.com/services/v1/image_favicon \
-F "file=@logo.png" \
-F "crop=trim" \
-F "name=Example site"
{
"storage_id": "4b4a8449-d135-4bfb-b1c3-e763093e07ab",
"storage_url": "https://aisenseapi.com/services/v1/storage/4b4a8449-d135-4bfb-b1c3-e763093e07ab",
"sha256_hash": "d39531425ba15d2512a04e53b5385d02db4f1d034abc9786b54dc0e1355cff76",
"bytes": 63564,
"expire_timestamp": 1790778560,
"expire_datetime": "2026-09-30T14:29:20+00:00",
"content_type": "application/zip",
"filename": "favicon.zip",
"operation": "image_favicon",
"files": [
"favicon.ico",
"favicon-16x16.png",
"favicon-32x32.png",
"apple-touch-icon.png",
"icon-192.png",
"icon-512.png",
"site.webmanifest",
"head.html"
],
"crop": "trim",
"upscaled": true
}Try it in the browser
This form posts your image to the same endpoint and shows the stored result. The image is sent to aisenseapi.com, and the result is kept for 24 hours at a link that anyone with the link can open.
What is in the ZIP
| File | Size | For |
|---|---|---|
favicon.ico | 16, 32 and 48 pixels | Every browser, and anything that asks for /favicon.ico |
favicon-16x16.png, favicon-32x32.png | 16 and 32 pixels | Browser tabs |
apple-touch-icon.png | 180 pixels, on white | The home screen of an iPhone or iPad, which shows no transparency |
icon-192.png, icon-512.png | 192 and 512 pixels | Android and installed web apps |
site.webmanifest | The web app manifest, with the name you give and the two large icons | |
head.html | The tags to paste into the <head> of your pages |
Put the files in the root of your site and paste the tags from head.html:
<link rel="icon" href="/favicon.ico" sizes="48x48">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
<link rel="apple-touch-icon" href="/apple-touch-icon.png">
<link rel="manifest" href="/site.webmanifest">
Fit, trim or center
- fit, the default, shows all of the picture on a transparent square.
- trim first cuts away a border of one colour, such as the white around a logo, and then fits what is left.
- center cuts a square from the middle and fills the whole icon with it, which suits a photo.
Icons look best from a square picture of at least 512 pixels. When the picture, or what is left after trimming, is smaller, the largest icons are enlarged and the answer says upscaled: true. The picture is turned upright first, and its metadata is not copied into the icons.
The API
POST https://aisenseapi.com/services/v1/image_favicon with multipart/form-data.
| Field | Required | Meaning |
|---|---|---|
file | yes | The picture: JPEG, PNG or WebP. |
crop | no | fit, trim or center. fit when left out. |
name | no | The site name for the manifest, at most 60 characters of plain text. |
The icons are stored as favicon.zip, and the answer holds the Storage fields and what the ZIP holds:
| Field | Meaning |
|---|---|
storage_id, storage_url | Where the result is. A GET on the URL returns it. |
sha256_hash, bytes | The digest and size of the stored result. |
expire_timestamp, expire_datetime | When the result is removed, 24 hours after it was stored. |
content_type, filename | application/zip and favicon.zip. |
operation, crop | image_favicon, and the crop that was used. |
files | The names of the files in the ZIP. |
upscaled | true when the picture was smaller than 512 pixels, so the largest icons are enlarged. |
The example at the top of the page comes from a test run with a logo of 600 x 200 pixels, crop=trim and name=Example site. What was left after trimming was 301 pixels wide, so the answer says it was enlarged.
Anyone with the link can download the ZIP until it expires. Stored results count against the Storage budget of 80 MB per IP address per day.
Limits
- The upload is a JPEG, PNG or WebP of at most 10 MB and 25 megapixels.
- One request may take at most 45 seconds.
- At most two images are worked on at a time, together with the image converter and image compression. A third waits up to ten seconds and is then answered 503 with
Retry-After.
Errors
A refused request stores nothing and answers with error. The endpoint's own refusals also carry fix, a sentence saying what to send instead.
| Status | When |
|---|---|
400 | A field is unknown or out of range, the upload is not one whole file, or ImageMagick cannot read the image. |
405 | The method is not POST. |
413 | The upload, its number of pixels or the result is over a limit. |
415 | The body is not multipart/form-data, or the file is not a JPEG, PNG or WebP. |
429 | More than 5000 requests from one IP address in 24 hours, or the day's Storage budget is used up. |
503 | Two images are being worked on already, the work took more than 45 seconds, or the service cannot do it right now. |
Questions
Is the favicon generator API free?
Yes. No API key, no account and no sign up. The limit is 5000 requests per IP address per 24 hours, and stored results count against the Storage budget of 80 MB per IP address per day.
What size should my logo be?
Square and at least 512 pixels. A smaller one works, but the largest icons are then enlarged.
Do I need to give a name?
No. Without one the manifest has an empty name, which you can fill in yourself.
Does it make an SVG favicon?
No. The icons are PNG, and favicon.ico holds the three small sizes as PNG images.
Related tools
- Image converter, which also reads HEIC, and image compression
- Image metadata viewer and EXIF remover
- Colour palette and favicon generator
- JSON to CSV, CSV to JSON and table matching
- JSON formatter and JSON validator
- File uploader and the Temporary Storage API, where every result is kept for 24 hours