App icon size set generator for iOS, Android and web
The app icon size set generator turns one source icon measurement into a practical export checklist for iOS, Android, or the web.
Run — free
Enter the source width and height in pixels, select the destination platform, and receive every required square output dimension together with a clear upscaling flag. It also reports whether the source is square and summarizes how many requested outputs exceed its usable dimensions. Designers can catch an undersized master before exporting, while build tools can use the deterministic JSON response to plan an icon pipeline without image uploads, network calls, or guesswork.
Start with the real dimensions of your master icon
Enter the pixel width and height of the source asset, not its CSS size, physical print dimensions, or the dimensions of a frame around it. The calculator deliberately accepts rectangular sources because real production pipelines sometimes receive one by mistake. Its source is square result lets you detect that problem without preventing a useful size analysis. Every requested platform icon is square, so an uneven source will still need cropping, padding, or redesign before final export. The upscaling decision uses both axes: a 1024 by 600 source needs upscaling for a 1024-pixel icon because its shorter edge cannot supply that square at native resolution. Dimensions must be positive whole pixels and remain within the published limit. This keeps the answer unambiguous and prevents fractional or implausibly large measurements from slipping into automated workflows. The capability examines dimensions only; it does not inspect, resize, crop, sharpen, or store an image. That separation makes it safe to use early, even before the final artwork file exists.
Choose the platform set that matches your release
Select iOS, Android, or web to receive the raster sizes commonly needed for that destination. The iOS set consolidates the pixel outputs used by current phone, tablet, settings, notification, Spotlight, and App Store placements, removing duplicates when several scale-and-point combinations produce the same pixels. Android returns the launcher density sizes from mdpi through xxxhdpi plus the 512-pixel store artwork size. Web covers small browser icons, a legacy 48-pixel icon, the 180-pixel Apple touch icon, and the 192- and 512-pixel manifest icons used by installable web applications. Each returned record contains equal width and height values and an upscaling boolean. Unknown platform names fail explicitly instead of silently selecting a default, which is important in build scripts where a typo could otherwise produce the wrong bundle. Platform requirements evolve, so treat this set as an export baseline and check any unusual store, device family, or organization-specific delivery rules alongside it. The result focuses on pixel dimensions, not filenames or directory conventions.
Interpret upscaling before you export assets
An output is marked for upscaling whenever either source dimension is smaller than the requested square size. That is a conservative and useful production rule: stretching a smaller raster cannot restore missing detail, and a large width does not compensate for insufficient height. The response includes an overall upscaling-required value and a count, so automation can fail a build, issue a warning, or request a larger master without scanning the records itself. A false flag means the source has enough pixels for that output, but it does not guarantee visual quality. You should still review edge sharpness, transparency, safe areas, corner treatment, color profiles, and platform-specific masking. When several outputs are required, resize each one from the best available master rather than repeatedly resizing an already reduced file; this avoids compounding interpolation artifacts. The calculation is deterministic and performs no network access, so the same input always yields the same JSON. Use the browser tool for quick planning or call the API for $0.002 when integrating the checklist into asset intake, release validation, continuous integration, or a design-system publishing workflow.
What you can do with it
Validate a design handoff
Check whether the delivered master is square and large enough for every icon in the release target.
Plan an export pipeline
Generate a deterministic list of output dimensions before invoking an image resizing tool.
Guard a release build
Fail or warn in continuous integration when any required platform icon would be enlarged from the source.
FAQ
Does this resize my icon?
No. It calculates required dimensions and upscaling flags; it does not receive or transform image pixels.
How is upscaling determined?
A size needs upscaling when either the source width or source height is smaller than that square output dimension.
Can the source be rectangular?
Yes. The result reports whether it is square, and the shorter dimension determines whether a square output needs enlargement.
Which platforms are supported?
The accepted platform values are ios, android, and web. Any other value returns an invalid-input error.
What does an API request cost?
Each API request costs $0.002. The browser version can run locally without uploading an image.
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/image/icon-set-sizes \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"width":1024,"height":1024,"platform":"ios"}'const res = await fetch("https://api.kit.forhosting.com/image/icon-set-sizes", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"width": 1024,
"height": 1024,
"platform": "ios"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/image/icon-set-sizes",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"width": 1024,
"height": 1024,
"platform": "ios"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/image/icon-set-sizes", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"width":1024,"height":1024,"platform":"ios"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"width":1024,"height":1024,"platform":"ios"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/image/icon-set-sizes", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"width": 1024,
"height": 1024,
"platform": "ios"
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "image.icon_set_sizes",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Limits
max_dimension | 100000 |
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |