# Favicon & PWA Generator — Icons from Text/Image (`perryay/favicon-generator`) Actor

Generate favicons and PWA asset packages from uploaded images or text. Output multi-size ICO, PNG icons, SVG vector, and complete manifest.json + icon set.

- **URL**: https://apify.com/perryay/favicon-generator.md
- **Developed by:** [Perry AY](https://apify.com/perryay) (community)
- **Categories:** Developer tools
- **Stats:** 2 total users, 1 monthly users, 50.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.01 / actor start

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Favicon & PWA Generator — Apify Actor

### What does it do?

**Favicon & PWA Generator** creates favicons and Progressive Web App asset packages from uploaded images or plain text. It outputs multi-size PNGs, bundled ICO files, scalable SVG vectors, and complete PWA manifests with icon sets — all via a single API call.

Whether you need a quick `F` favicon for your dev site, a full set of 48×48 to 512×512 PWA icons for your progressive web app, or a batch of branded favicons from a CSV list, this actor delivers production-ready files with public download URLs.

### Who is it for?

| Persona | What they use it for |
|---|---|
| Web Developer | Generating favicon sets (16–128px PNG + ICO + SVG) from logos |
| PWA Engineer | Creating complete manifest.json + icon packages for progressive web apps |
| CI/CD Pipeline | Integrating favicon generation into automated build workflows |
| Designer | Producing consistent branded favicons from text or uploaded assets |
| Product Manager | Bulk-generating favicons from a CSV of app names for multiple projects |
| Site Owner | Making a quick text-based favicon for a personal or staging site |

### Why use this?

- **4 modes in one actor** — image→favicon, text→favicon, full PWA package, or batch generation. One API endpoint for all your favicon needs.
- **Multi-format output** — get PNGs at every standard size (16×16, 32×32, 48×48, 64×64, 128×128), bundled ICO (16+32+48), and SVG vector — all from the same input.
- **API-first design** — provide an image URL or base64 data, get back public download URLs. Perfect for build pipelines, CI/CD, and headless workflows.
- **Custom colors and styling** — set background and foreground hex colors, adjust border radius, control file prefixes.
- **PWA-ready** — generate a complete asset package with all required icon sizes and a spec-compliant `manifest.json`.
- **Batch processing** — pass a CSV or JSON array and generate 50 favicons in one run.

### Input

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `mode` | select | `generate-from-image` | Operation mode. See mode details below. |
| `imageData` | string | — | Base64-encoded image data (alternative to imageUrl) |
| `imageUrl` | string | — | URL to download source image |
| `text` | string | `F` | Text to render on the favicon (text mode) |
| `backgroundColor` | string | `#333333` | Hex background color |
| `foregroundColor` | string | `#FFFFFF` | Hex text/foreground color |
| `borderRadius` | int | `16` | Rounded corner radius (px) |
| `outputFormats` | array | `["png", "ico"]` | Formats to generate: png, ico, svg |
| `filePrefix` | string | `favicon` | Prefix for generated file names |
| `appName` | string | `My PWA App` | App name for PWA manifest |
| `shortName` | string | — | Short name for manifest (falls back to appName) |
| `description` | string | — | Description for manifest |
| `themeColor` | string | `#FFFFFF` | Theme color for manifest |
| `display` | select | `standalone` | PWA display mode |
| `scope` | string | `/` | PWA navigation scope |
| `startUrl` | string | `/` | PWA start URL |
| `batch` | array/string | — | Batch items array or CSV/JSON string |

#### Modes

| Mode | Description | Required Fields |
|------|-------------|-----------------|
| `generate-from-image` | Upload image → multi-size PNG/ICO/SVG favicons | imageData or imageUrl |
| `generate-from-text` | Text → styled favicon with custom colors | text |
| `generate-pwa` | Complete PWA asset package (icons + manifest.json) | imageData/imageUrl, or falls back to text from appName |
| `batch-generate` | Generate favicons from multiple items | batch (array or CSV/JSON) |

### Output

Each generated file produces one dataset item with:

| Field | Type | Description |
|-------|------|-------------|
| `fileName` | string | File name in key-value store |
| `format` | string | File format (png, ico, svg, json) |
| `size` | int | Image size in pixels (0 for ICO/multi-size) |
| `sizeBytes` | int | File size in bytes |
| `sizeHuman` | string | Human-readable size |
| `downloadUrl` | string | Public download URL |
| `iconSizes` | string | Included icon sizes (ICO only) |
| `batchIndex` | int | Index in batch (batch mode only) |
| `label` | string | Item label (batch mode only) |
| `_packageSummary` | object | PWA package summary (first item only, PWA mode) |

#### Key-Value Store

Generated files are stored in the default key-value store with public URLs accessible for download. File key patterns:

- `favicon-{size}x{size}.png` — Multi-size PNG favicons
- `favicon.ico` — Bundled ICO (16×16, 32×32, 48×48)
- `favicon.svg` — SVG vector wrapper
- `icon-{size}x{size}.png` — PWA icons
- `manifest.json` — Web app manifest

### Examples

#### Generate a text favicon

```json
{
  "mode": "generate-from-text",
  "text": "F",
  "backgroundColor": "#4A90D9",
  "foregroundColor": "#FFFFFF",
  "outputFormats": ["png", "ico", "svg"],
  "borderRadius": 32
}
````

#### Generate PWA assets from an image URL

```json
{
  "mode": "generate-pwa",
  "imageUrl": "https://example.com/logo.png",
  "appName": "My Awesome App",
  "themeColor": "#4A90D9",
  "backgroundColor": "#FFFFFF",
  "borderRadius": 24
}
```

#### Batch generate from CSV

```csv
text,backgroundColor,foregroundColor,format
F,#4A90D9,#FFFFFF,png
|A,#E74C3C,#FFFFFF,ico
|M,#2ECC71,#FFFFFF,svg
|X,#9B59B6,#EEEEEE,png

### FAQ

#### What image formats are supported for input?

You can provide images as a **URL** (JPEG, PNG, GIF, WebP, SVG) or as **Base64-encoded data** (same formats). The actor automatically detects and decodes the input to generate favicon outputs.

#### Can I generate a favicon from text without uploading an image?

Yes. Set `mode: "generate-from-text"` and provide a `text` value (e.g. `"F"`, `"AC"`, `"MyLogo"`). The actor renders the text on a colored background using your chosen `backgroundColor`, `foregroundColor`, and `borderRadius`.

#### Does this actor generate PWA icons?

Yes. Set `mode: "generate-pwa"` and provide an image or text input. The actor produces a complete PWA asset package including all required icon sizes (48×48, 72×72, 96×96, 128×128, 144×144, 152×152, 192×192, 384×384, 512×512) and a spec-compliant `manifest.json`.

#### What favicon sizes are produced?

| Format | Sizes |
|--------|-------|
| PNG | 16×16, 32×32, 48×48, 64×64, 128×128 |
| ICO | Bundled 16×16 + 32×32 + 48×48 |
| SVG | Scalable vector (any size) |
| PWA PNGs | 48×48 through 512×512 (9 sizes) |

#### Can I get SVG output?

Yes. Add `"svg"` to the `outputFormats` array. The actor generates a standalone SVG file that wraps the favicon as a scalable vector — perfect for use in modern browsers and design tools.

#### What is the batch CSV format?

Each row specifies a batch item. Example header row:
```

text,backgroundColor,foregroundColor,format,label

````
- `text` — the text to render on the favicon
- `backgroundColor` — hex background color (e.g. `#4A90D9`)
- `foregroundColor` — hex text color (e.g. `#FFFFFF`)
- `format` — output format (`png`, `ico`, `svg`)
- `label` — (optional) friendly name for identification in results

You can also pass a JSON array directly if you prefer.

#### Where are generated files stored?

Files are saved to the **default key-value store** (KVS) of your actor run. They remain accessible via public download URLs as long as the KVS store exists.

#### Do the download URLs expire?

Public download URLs are valid for the lifetime of the key-value store. Actor-run KVS stores persist for a limited time after the run completes (typically days, depending on Apify store retention policy). For permanent hosting, download and serve the files from your own storage.

#### Is an Apify API token required?

Yes — for API/programmatic access you need an [Apify API token](https://console.apify.com/account/integrations). The token is passed via the `Authorization: Bearer` header or the `token` query parameter.

#### Can I use this in CI/CD pipelines?

Absolutely. The actor is designed for headless automation. Pass input as JSON via the Apify API, get back public download URLs, and integrate into any build pipeline (GitHub Actions, GitLab CI, Jenkins, etc.).

#### Does this work with static site generators (Jekyll, Hugo, Astro, Next.js)?

Yes. Generate your favicon and PWA assets programmatically during the build step and reference the downloaded files in your site config.

### MCP Integration

Connect this actor to MCP (Model Context Protocol) clients via the Apify MCP server:

```json
{
  "mcpServers": {
    "apify": {
      "type": "oauth",
      "command": "npx",
      "args": [
        "-y",
        "@apify/mcp-server"
      ],
      "env": {
        "APIFY_TOKEN": "<your-api-token>"
      }
    }
  }
}
````

Once connected, your MCP client can discover and invoke the Favicon & PWA Generator actor directly. Supported operations include running the actor with any mode (image, text, PWA, batch) and retrieving generated file download URLs from the run output.

### SEO Keywords

favicon generator, PWA icon generator, favicon from text, multi-size favicon, ICO converter, SVG favicon, progressive web app assets, manifest generator, favicon API, batch favicon generator, Apify favicon actor, web app manifest generator

### Related Tools

- [Favicon Downloader & Converter](https://apify.com/perryay/favicon-downloader-converter) — Download and convert favicons from any website
- [OG Preview Generator](https://apify.com/perryay/og-preview-generator) — Generate Open Graph preview images for social sharing
- [Website Screenshot Generator](https://apify.com/perryay/website-screenshot-generator) — Take full-page screenshots of any URL
- [Image Metadata Analyzer](https://apify.com/perryay/image-metadata-analyzer) — Extract metadata from images including EXIF, XMP, and IPTC
- [All perryay actors](https://apify.com/perryay) — Browse the full collection of developer tools

# Actor input Schema

## `mode` (type: `string`):

Operation mode for the actor.

## `imageData` (type: `string`):

Base64-encoded image data. Used in 'generate-from-image' and 'generate-pwa' modes. Provide this OR imageUrl.

## `imageUrl` (type: `string`):

URL to download the source image from. Alternative to imageData. Used in 'generate-from-image' and 'generate-pwa' modes.

## `text` (type: `string`):

Text or letter to render on the favicon background. Used in 'generate-from-text' mode (and as fallback for batch). First letter is used for SVG generation.

## `backgroundColor` (type: `string`):

Hex color for the favicon background (e.g. #333333). Used in 'generate-from-text' and batch modes.

## `foregroundColor` (type: `string`):

Hex color for the text (e.g. #FFFFFF). Used in 'generate-from-text' and batch modes.

## `borderRadius` (type: `integer`):

Rounded corner radius for favicon edges. 0 = square. Used in image and text modes.

## `outputFormats` (type: `array`):

Which favicon formats to generate. PNG produces multiple sizes (16–128px). ICO bundles 16/32/48. SVG is a vector wrapper.

## `filePrefix` (type: `string`):

Prefix for generated file names. Files will be named like '{prefix}-16x16.png'.

## `appName` (type: `string`):

Full application name for manifest.json. Used in 'generate-pwa' mode.

## `shortName` (type: `string`):

Short application name (max 12 chars recommended). Falls back to app name.

## `description` (type: `string`):

Description for the web app manifest.

## `themeColor` (type: `string`):

Theme color hex for manifest.json and browser UI chrome.

## `display` (type: `string`):

Display mode for the PWA manifest.

## `scope` (type: `string`):

Navigation scope for the PWA manifest. Defaults to '/'.

## `startUrl` (type: `string`):

Start URL for the PWA manifest. Defaults to '/'.

## `batch` (type: `array`):

Array of items for batch generation. Each item can have: text, backgroundColor, foregroundColor, borderRadius, format (png/ico/svg), filePrefix. Also accepts CSV or JSON string.

## Actor input object example

```json
{
  "mode": "generate-from-text",
  "text": "F",
  "backgroundColor": "#333333",
  "foregroundColor": "#FFFFFF",
  "borderRadius": 16,
  "outputFormats": [
    "png",
    "ico"
  ],
  "filePrefix": "favicon",
  "appName": "My PWA App",
  "shortName": "",
  "description": "",
  "themeColor": "#FFFFFF",
  "display": "standalone",
  "scope": "/",
  "startUrl": "/",
  "batch": [
    {
      "text": "F",
      "backgroundColor": "#4A90D9",
      "foregroundColor": "#FFFFFF",
      "format": "png"
    },
    {
      "text": "A",
      "backgroundColor": "#E74C3C",
      "foregroundColor": "#FFFFFF",
      "format": "ico"
    },
    {
      "text": "M",
      "backgroundColor": "#2ECC71",
      "foregroundColor": "#FFFFFF",
      "format": "svg"
    }
  ]
}
```

# Actor output Schema

## `generatedFiles` (type: `string`):

Generated favicon and PWA asset files in the key-value store

## `results` (type: `string`):

Per-file metadata in the default dataset — each dataset item represents one generated file

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "mode": "generate-from-text",
    "imageData": "",
    "imageUrl": "",
    "text": "F",
    "backgroundColor": "#333333",
    "foregroundColor": "#FFFFFF",
    "outputFormats": [
        "png",
        "ico"
    ],
    "filePrefix": "favicon",
    "appName": "My PWA App",
    "shortName": "",
    "description": "",
    "themeColor": "#FFFFFF",
    "scope": "/",
    "startUrl": "/",
    "batch": [
        {
            "text": "F",
            "backgroundColor": "#4A90D9",
            "foregroundColor": "#FFFFFF",
            "format": "png"
        },
        {
            "text": "A",
            "backgroundColor": "#E74C3C",
            "foregroundColor": "#FFFFFF",
            "format": "ico"
        },
        {
            "text": "M",
            "backgroundColor": "#2ECC71",
            "foregroundColor": "#FFFFFF",
            "format": "svg"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("perryay/favicon-generator").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "mode": "generate-from-text",
    "imageData": "",
    "imageUrl": "",
    "text": "F",
    "backgroundColor": "#333333",
    "foregroundColor": "#FFFFFF",
    "outputFormats": [
        "png",
        "ico",
    ],
    "filePrefix": "favicon",
    "appName": "My PWA App",
    "shortName": "",
    "description": "",
    "themeColor": "#FFFFFF",
    "scope": "/",
    "startUrl": "/",
    "batch": [
        {
            "text": "F",
            "backgroundColor": "#4A90D9",
            "foregroundColor": "#FFFFFF",
            "format": "png",
        },
        {
            "text": "A",
            "backgroundColor": "#E74C3C",
            "foregroundColor": "#FFFFFF",
            "format": "ico",
        },
        {
            "text": "M",
            "backgroundColor": "#2ECC71",
            "foregroundColor": "#FFFFFF",
            "format": "svg",
        },
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("perryay/favicon-generator").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "mode": "generate-from-text",
  "imageData": "",
  "imageUrl": "",
  "text": "F",
  "backgroundColor": "#333333",
  "foregroundColor": "#FFFFFF",
  "outputFormats": [
    "png",
    "ico"
  ],
  "filePrefix": "favicon",
  "appName": "My PWA App",
  "shortName": "",
  "description": "",
  "themeColor": "#FFFFFF",
  "scope": "/",
  "startUrl": "/",
  "batch": [
    {
      "text": "F",
      "backgroundColor": "#4A90D9",
      "foregroundColor": "#FFFFFF",
      "format": "png"
    },
    {
      "text": "A",
      "backgroundColor": "#E74C3C",
      "foregroundColor": "#FFFFFF",
      "format": "ico"
    },
    {
      "text": "M",
      "backgroundColor": "#2ECC71",
      "foregroundColor": "#FFFFFF",
      "format": "svg"
    }
  ]
}' |
apify call perryay/favicon-generator --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=perryay/favicon-generator",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Favicon & PWA Generator — Icons from Text/Image",
        "description": "Generate favicons and PWA asset packages from uploaded images or text. Output multi-size ICO, PNG icons, SVG vector, and complete manifest.json + icon set.",
        "version": "1.0",
        "x-build-id": "UMnHjiJlQmerDr6WM"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/perryay~favicon-generator/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-perryay-favicon-generator",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/perryay~favicon-generator/runs": {
            "post": {
                "operationId": "runs-sync-perryay-favicon-generator",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/perryay~favicon-generator/run-sync": {
            "post": {
                "operationId": "run-sync-perryay-favicon-generator",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "mode"
                ],
                "properties": {
                    "mode": {
                        "title": "Mode",
                        "enum": [
                            "generate-from-image",
                            "generate-from-text",
                            "generate-pwa",
                            "batch-generate"
                        ],
                        "type": "string",
                        "description": "Operation mode for the actor.",
                        "default": "generate-from-image"
                    },
                    "imageData": {
                        "title": "Image data (base64)",
                        "type": "string",
                        "description": "Base64-encoded image data. Used in 'generate-from-image' and 'generate-pwa' modes. Provide this OR imageUrl."
                    },
                    "imageUrl": {
                        "title": "Image URL",
                        "type": "string",
                        "description": "URL to download the source image from. Alternative to imageData. Used in 'generate-from-image' and 'generate-pwa' modes."
                    },
                    "text": {
                        "title": "Text to render",
                        "type": "string",
                        "description": "Text or letter to render on the favicon background. Used in 'generate-from-text' mode (and as fallback for batch). First letter is used for SVG generation.",
                        "default": "F"
                    },
                    "backgroundColor": {
                        "title": "Background color",
                        "type": "string",
                        "description": "Hex color for the favicon background (e.g. #333333). Used in 'generate-from-text' and batch modes.",
                        "default": "#333333"
                    },
                    "foregroundColor": {
                        "title": "Foreground/text color",
                        "type": "string",
                        "description": "Hex color for the text (e.g. #FFFFFF). Used in 'generate-from-text' and batch modes.",
                        "default": "#FFFFFF"
                    },
                    "borderRadius": {
                        "title": "Border radius (px)",
                        "minimum": 0,
                        "maximum": 256,
                        "type": "integer",
                        "description": "Rounded corner radius for favicon edges. 0 = square. Used in image and text modes.",
                        "default": 16
                    },
                    "outputFormats": {
                        "title": "Output formats",
                        "type": "array",
                        "description": "Which favicon formats to generate. PNG produces multiple sizes (16–128px). ICO bundles 16/32/48. SVG is a vector wrapper.",
                        "default": [
                            "png",
                            "ico"
                        ],
                        "items": {
                            "type": "string"
                        }
                    },
                    "filePrefix": {
                        "title": "File name prefix",
                        "type": "string",
                        "description": "Prefix for generated file names. Files will be named like '{prefix}-16x16.png'.",
                        "default": "favicon"
                    },
                    "appName": {
                        "title": "PWA — App name",
                        "type": "string",
                        "description": "Full application name for manifest.json. Used in 'generate-pwa' mode.",
                        "default": "My PWA App"
                    },
                    "shortName": {
                        "title": "PWA — Short name",
                        "type": "string",
                        "description": "Short application name (max 12 chars recommended). Falls back to app name.",
                        "default": ""
                    },
                    "description": {
                        "title": "PWA — Description",
                        "type": "string",
                        "description": "Description for the web app manifest.",
                        "default": ""
                    },
                    "themeColor": {
                        "title": "PWA — Theme color",
                        "type": "string",
                        "description": "Theme color hex for manifest.json and browser UI chrome.",
                        "default": "#FFFFFF"
                    },
                    "display": {
                        "title": "PWA — Display mode",
                        "enum": [
                            "standalone",
                            "fullscreen",
                            "minimal-ui",
                            "browser"
                        ],
                        "type": "string",
                        "description": "Display mode for the PWA manifest.",
                        "default": "standalone"
                    },
                    "scope": {
                        "title": "PWA — Scope path",
                        "type": "string",
                        "description": "Navigation scope for the PWA manifest. Defaults to '/'.",
                        "default": "/"
                    },
                    "startUrl": {
                        "title": "PWA — Start URL",
                        "type": "string",
                        "description": "Start URL for the PWA manifest. Defaults to '/'.",
                        "default": "/"
                    },
                    "batch": {
                        "title": "Batch items",
                        "type": "array",
                        "description": "Array of items for batch generation. Each item can have: text, backgroundColor, foregroundColor, borderRadius, format (png/ico/svg), filePrefix. Also accepts CSV or JSON string."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
