Favicon API
Перетворіть одне зображення на повний набір фавіконок — усі розміри, усі платформи, готовий HTML-фрагмент і ZIP для розгортання — одним POST-запитом.
Завантажте одне зображення й отримайте повний набір фавіконок: усі розміри, яких вимагають сучасні браузери, а також site.webmanifest, HTML-фрагмент, готовий до вставлення в <head>, і URL для завантаження ZIP.
# Generate a favicon package
curl -X POST https://jinero.online/api/v1/favicon/generate \
-F "[email protected]" \
-F "app_name=My App" \
-F "theme_color=#0ea5e9"
const form = new FormData();
form.append("image", file);
form.append("app_name", "My App");
form.append("theme_color", "#0ea5e9");
const r = await fetch("https://jinero.online/api/v1/favicon/generate", { method: "POST", body: form });
const { download_url, html_snippet } = await r.json();
Усі ендпоінти публічні — ключ не потрібен. Генерація фавіконок запускає Node-інструменти (sharp) для кожного розміру, тож ліміт суворий.
# Anonymous limits (per IP):
# POST /favicon/generate 3 req/min
# GET /favicon/download/{id} 10 req/min
# Max source image: 10 MB
# Session TTL after generation: 60 minutes
Надішліть вихідне зображення й прапорці для платформ. У відповідь — ID сесії, мініатюри для перегляду, HTML-фрагмент і URL для завантаження ZIP. Фавіконки Apple, Android і стандартні генеруються за замовчуванням; Windows і Yandex — за запитом.
https://jinero.online/api/v1/favicon/generate
| Параметр | Тип | Опис |
|---|---|---|
image |
файл (multipart) | Вихідне зображення — png, jpg, jpeg, svg або webp. До 10 МБ. Найкращий результат дають квадратні зображення. |
app_name |
string | Назва застосунку для site.webmanifest. До 100 символів. |
theme_color |
string | CSS-колір (hex або rgb) для адресного рядка / метатегу theme-color. |
background |
string | Колір фону для непрозорих PNG-плиток там, де прозорість не підтримується. |
display |
string | Режим відображення в маніфесті: standalone (за замовчуванням), browser, fullscreen або minimal-ui. |
orientation |
string | Орієнтація в маніфесті: any (за замовчуванням), portrait або landscape. |
apple_icon |
boolean | Генерувати apple-touch-icon-*.png. За замовчуванням: true. |
android |
boolean | Генерувати android-chrome-*.png. За замовчуванням: true. |
windows |
boolean | Генерувати mstile-*.png + browserconfig.xml. За замовчуванням: false. |
yandex |
boolean | Генерувати yandex-browser-50x50.png + yandex-browser-manifest.json. За замовчуванням: false. |
curl -X POST https://jinero.online/api/v1/favicon/generate \
-F "[email protected]" \
-F "app_name=Jinero" \
-F "theme_color=#0ea5e9" \
-F "background=#ffffff" \
-F "apple_icon=true" \
-F "android=true" \
-F "windows=true"
const form = new FormData();
form.append("image", logoFile);
form.append("app_name", "Jinero");
form.append("theme_color", "#0ea5e9");
form.append("background", "#ffffff");
form.append("apple_icon", "true");
form.append("android", "true");
const r = await fetch("https://jinero.online/api/v1/favicon/generate", { method: "POST", body: form });
const data = await r.json();
document.querySelector("head").insertAdjacentHTML("beforeend", data.html_snippet);
window.location = data.download_url;
$response = Http::attach(
"image",
file_get_contents("logo.png"),
"logo.png"
)->post("https://jinero.online/api/v1/favicon/generate", [
"app_name" => "Jinero",
"theme_color" => "#0ea5e9",
"apple_icon" => true,
"android" => true,
]);
$package = $response->json();
{
"success": true,
"session_id": "8c1f2e7a-4b5d-4dca-9c3e-1d6f7a0b2c5e",
"file_count": 27,
"html_snippet": "<link rel=\"icon\" type=\"image/x-icon\" href=\"/favicon.ico\">\n<link rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/favicon-32x32.png\">\n<link rel=\"apple-touch-icon\" sizes=\"180x180\" href=\"/apple-touch-icon.png\">\n<link rel=\"manifest\" href=\"/site.webmanifest\">\n<meta name=\"theme-color\" content=\"#0ea5e9\">",
"preview": [
{"label": "favicon-16x16", "url": "..."},
{"label": "favicon-32x32", "url": "..."},
{"label": "apple-touch-icon", "url": "..."},
{"label": "android-chrome-192", "url": "..."}
],
"download_url": "https://jinero.online/api/v1/favicon/download/8c1f2e7a-…",
"expires_in_minutes": 60
}
Віддає згенерований favicon-package.zip. Сесії дійсні 60 хвилин, потім файл видаляється з тимчасового сховища.
https://jinero.online/api/v1/favicon/download/{session}
curl -L -o favicon-package.zip https://jinero.online/api/v1/favicon/download/8c1f2e7a-…
// Trigger a browser download
window.location.href = data.download_url;
Типовий набір із параметрами за замовчуванням (apple + android увімкнено, windows + yandex вимкнено) містить 16–18 файлів; з усім увімкненим — ~27.
favicon.ico # classic multi-resolution ICO
favicon-16x16.png # browser tabs
favicon-32x32.png # browser tabs (retina)
favicon-48x48.png # taskbar
favicon-96x96.png # Chrome desktop shortcut
favicon-192x192.png # PWA / android
favicon-512x512.png # PWA splash
apple-touch-icon.png # iOS home screen (180×180)
apple-touch-icon-152x152.png # iPad
apple-touch-icon-120x120.png # iPhone retina
apple-touch-icon-precomposed.png
android-chrome-192x192.png
android-chrome-512x512.png
android-chrome-maskable-512x512.png
mstile-150x150.png # Windows Start tile (windows=true)
browserconfig.xml # Windows config (windows=true)
yandex-browser-50x50.png # Yandex.Browser (yandex=true)
yandex-browser-manifest.json # Yandex meta (yandex=true)
site.webmanifest # PWA manifest
snippet.html # paste-into-<head> markup
Стандартна семантика HTTP. Помилки повертають JSON із полем "message", що описує збій.
// 400 — malformed session id on /download
{ "message": "Invalid session id" }
// 404 — session expired or unknown
{ "message": "Result not found or expired" }
// 422 — validation (unsupported file type, oversize image, invalid color)
{ "message": "The image field must be a file of type: png, jpg, jpeg, svg, webp." }
// 429 — rate limit exceeded (/generate = 3 req/min)
{ "message": "Too Many Attempts." }
// 422 — generator crashed (rare; original error is forwarded)
{ "message": "Failed to load source image (corrupt input?)" }
Про Favicon API jinero.online
Безкоштовний REST API, що перетворює одне зображення на готовий до розгортання набір фавіконок — усі розміри іконок, PWA-маніфест і готовий HTML-фрагмент за один виклик.
Одне зображення — повний набір
Завантажте PNG/JPG/SVG/WebP і отримайте всі розміри, яких вимагають браузери, — класичний favicon.ico, Apple Touch, Android Chrome, PWA, плитки Windows, Yandex.
Готовий HTML-фрагмент
Відповідь містить точні теги <link> і <meta>, готові до вставлення в <head> документа, — без здогадок.
Маніфест, готовий для PWA
site.webmanifest генерується з назвою вашого застосунку, кольором теми, фоном, режимом відображення й орієнтацією — встановлення як застосунку працює з першого дня.
Ключ не потрібен
Публічний ендпоінт, 3 генерації/хв з одного IP. Для вищих лімітів отримайте API-токен.
Часті запитання
Ні. Favicon API публічний. /generate обмежено 3 запитами/хв з одного IP, бо кожен виклик запускає sharp для кожного розміру. Якщо потрібно більше, зареєструйтеся й отримайте API-токен.
Найкращий результат в усіх розмірах дає квадратний PNG чи SVG від 512×512. Усе, що менше за 192×192, виглядатиме розмито на головному екрані Android. Приймаємо png, jpg, jpeg, svg і webp до 10 МБ.
Класична фавіконка (ico + 6 розмірів PNG), Apple Touch Icon (180/152/120 + precomposed) і Android Chrome (192/512 + maskable). Плитки Windows та іконки Yandex.Browser вмикаються прапорцями windows=true і yandex=true — більшості сучасних стеків вони не потрібні.
60 хвилин від генерації. Потім ZIP і мініатюри видаляються з тимчасового сховища. Якщо набір знадобиться пізніше, згенеруйте його знову.
Фрагмент у html_snippet свідомо мінімальний — рівно ті теги, які читають сучасні браузери. Якщо вашій CMS потрібні додаткові метатеги (іконки Open Graph тощо), додайте їх самі; шляхи до іконок у ZIP збігаються з тими, що у фрагменті.