{
  "openapi": "3.0.1",
  "info": {
    "title": "PSD to PNG Converter: Render Photoshop Files with Fonts",
    "description": "Convert Photoshop PSD/PSB files to PNG, JPG, WebP or AVIF without Photoshop. Text layers are redrawn with your fonts (upload, link or auto Google Fonts), effects and blend modes applied, layers shown/hidden. Batch + ZIP.",
    "version": "0.2",
    "x-build-id": "h9bGVZD6QBkqNgcsg"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapers_lat~psd-to-png-converter/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapers_lat-psd-to-png-converter",
        "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/scrapers_lat~psd-to-png-converter/runs": {
      "post": {
        "operationId": "runs-sync-scrapers_lat-psd-to-png-converter",
        "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/scrapers_lat~psd-to-png-converter/run-sync": {
      "post": {
        "operationId": "run-sync-scrapers_lat-psd-to-png-converter",
        "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",
        "properties": {
          "psdFiles": {
            "title": "Upload PSD / PSB files",
            "type": "array",
            "description": "Drop one or more Photoshop documents (.psd or .psb). ZIP archives full of PSDs work too. Each file is one conversion."
          },
          "psdUrls": {
            "title": "PSD / PSB links",
            "type": "array",
            "description": "Public links to .psd / .psb files or ZIP archives, one per line. Direct links work, and so do Google Drive, Dropbox, OneDrive/SharePoint and GitHub share links.",
            "items": {
              "type": "string"
            }
          },
          "fileStore": {
            "title": "…or a key-value store with your files",
            "type": "string",
            "description": "Optional. Pick one of your Apify key-value stores: every PSD/PSB, ZIP and font file stored in it is used (PSDs are converted, fonts are loaded). Handy for big batches you upload once and convert many times."
          },
          "linkedFiles": {
            "title": "Linked smart object files",
            "type": "array",
            "description": "Only needed for smart objects that are linked to outside files (Place Linked in Photoshop). Upload those files (PSD, PSB, PNG, JPG) or a ZIP of the folder; they are matched by file name. Files inside a ZIP you uploaded as a PSD are found automatically."
          },
          "linkedFileUrls": {
            "title": "Linked smart object file links",
            "type": "array",
            "description": "Links to the outside files of linked smart objects (or a ZIP of them).",
            "items": {
              "type": "string"
            }
          },
          "fontFiles": {
            "title": "Upload fonts",
            "type": "array",
            "description": "Your own font files (.ttf, .otf, .ttc, .woff, .woff2) or a ZIP with a whole font folder. Uploaded fonts always win over any other source, so the output matches your design exactly."
          },
          "fontUrls": {
            "title": "Font links",
            "type": "array",
            "description": "Links to font files or ZIP archives of fonts, one per line (direct, Google Drive, Dropbox or GitHub links).",
            "items": {
              "type": "string"
            }
          },
          "googleFonts": {
            "title": "Google Fonts to load",
            "type": "array",
            "description": "Optional. Google Fonts family names to load in every weight and style, e.g. \"Poppins\", \"Bebas Neue\", \"Noto Sans JP\". Usually not needed: missing Google fonts are found automatically.",
            "items": {
              "type": "string"
            }
          },
          "fontMap": {
            "title": "Font map (draw font A with font B)",
            "type": "array",
            "description": "Force a replacement font. Key: the font name stored in the PSD (as shown in \"fontsMissing\" or \"fontsResolved\", e.g. CCWildWords-Roman). Value: the font to draw it with: one of your uploaded fonts, a built-in font or a Google Fonts family (e.g. Anton-Regular or Anton).",
            "items": {
              "type": "object",
              "required": [
                "key",
                "value"
              ],
              "properties": {
                "key": {
                  "type": "string",
                  "title": "Key"
                },
                "value": {
                  "type": "string",
                  "title": "Value"
                }
              }
            }
          },
          "autoDownloadGoogleFonts": {
            "title": "Auto-download missing Google Fonts",
            "type": "boolean",
            "description": "When a text layer uses a font you didn't provide and it exists on Google Fonts (1,900+ families), download the right weight and style automatically and redraw the text with it.",
            "default": true
          },
          "fontSubstitution": {
            "title": "Replacement for commercial fonts",
            "enum": [
              "lookalike",
              "metric",
              "off"
            ],
            "type": "string",
            "description": "What to use when a font is neither provided nor on Google Fonts. \"Look-alike\" uses metric-compatible fonts where possible (Arial, Helvetica, Times New Roman, Courier, Calibri, Cambria, Georgia keep the same letter widths and line breaks) and close free look-alikes for others (Gotham, Proxima Nova, Futura, Avenir, Myriad, Segoe, SF Pro, comic lettering fonts…). \"Metric-compatible only\" skips the look-alikes. \"Off\" uses a generic fallback face.",
            "default": "lookalike"
          },
          "useBuiltInFonts": {
            "title": "Use the built-in font library",
            "type": "boolean",
            "description": "Include the built-in free fonts (Noto incl. Chinese/Japanese/Korean, DejaVu, Liberation, Roboto, Open Sans, Inter, Carlito, Arimo, Tinos, Cousine) for matching and for characters your fonts don't cover. Turn off for strictly your-fonts-only output.",
            "default": true
          },
          "textReplacements": {
            "title": "Replace text (applies to every file)",
            "type": "array",
            "description": "Key: the text layer to change, by name (case-insensitive, * and ? wildcards), group path (Card/Name), index (#12) or Smart object/Layer for text inside a smart object. Value: the new text; use \\n for a new paragraph. Font, size, color and effects of the layer are kept.",
            "items": {
              "type": "object",
              "required": [
                "key",
                "value"
              ],
              "properties": {
                "key": {
                  "type": "string",
                  "title": "Key"
                },
                "value": {
                  "type": "string",
                  "title": "Value"
                }
              }
            }
          },
          "variants": {
            "title": "Variants: several images per PSD",
            "type": "array",
            "description": "Produce one image per variant from the same PSD, e.g. one per language, product or person. Each variant is an object: {\"name\": \"es\", \"texts\": {\"Headline\": \"Hola\"}, \"show\": [\"Badge\"], \"hide\": [\"Draft*\"], \"files\": [\"banner*.psd\"]}. Every key is optional: \"name\" is added to the output file name, \"files\" limits the variant to matching PSD names. Each variant image counts as one conversion."
          },
          "variantsFile": {
            "title": "…or variants from a CSV / JSON file",
            "type": "string",
            "description": "A CSV (or JSON array) with one row per image. Columns named after text layers set their text; optional columns: name, file (PSD name filter), show, hide (several layers separated by | or ;). Empty cells keep the original text. A public link to the file works too."
          },
          "textRendering": {
            "title": "Text layers",
            "enum": [
              "rerender",
              "original"
            ],
            "type": "string",
            "description": "\"Redraw\" lays every text layer out again from its text, so edited or translated text that was never re-saved in Photoshop shows correctly. \"Original pixels\" keeps the text exactly as Photoshop last saved it (fonts not needed).",
            "default": "rerender"
          },
          "hideLayers": {
            "title": "Hide layers",
            "type": "array",
            "description": "Layer or group names to hide before rendering, one per line. Case-insensitive; * and ? wildcards work; match a nested layer with its path (\"Header/Logo\") or by index (\"#12\"). Example: \"Watermark\", \"Draft*\", \"Guides/*\".",
            "items": {
              "type": "string"
            }
          },
          "showLayers": {
            "title": "Show layers",
            "type": "array",
            "description": "Layer or group names to switch ON even if they are hidden in the file (their parent groups are switched on too). Same matching rules as \"Hide layers\". Great for exporting variants of a template.",
            "items": {
              "type": "string"
            }
          },
          "hideTextLayers": {
            "title": "Hide all text layers",
            "type": "boolean",
            "description": "Render the artwork without any text, e.g. clean backgrounds for comic/manga translation or template previews.",
            "default": false
          },
          "exportTextMasks": {
            "title": "Export text masks",
            "type": "boolean",
            "description": "Also save one grayscale PNG per text layer showing exactly where its letters land on the canvas (handy for translation, inpainting and QA). Free extra.",
            "default": false
          },
          "renderSmartObjects": {
            "title": "Re-render smart objects",
            "type": "boolean",
            "description": "Draw smart objects again from their embedded or linked contents (with perspective, warps and supported smart filters) instead of the preview saved in the file. Smart objects whose text you replace are always re-rendered.",
            "default": false
          },
          "outputFormat": {
            "title": "Output format",
            "enum": [
              "png",
              "jpeg",
              "webp",
              "avif",
              "tiff"
            ],
            "type": "string",
            "description": "Image format of the result. PNG keeps transparency and is lossless; JPEG is smallest for photos; WebP and AVIF are modern web formats with transparency.",
            "default": "png"
          },
          "quality": {
            "title": "Quality (JPEG / WebP / AVIF / TIFF)",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "1-100. Higher = better looking and larger files. Ignored for PNG.",
            "default": 90
          },
          "pngCompression": {
            "title": "PNG compression level",
            "minimum": 0,
            "maximum": 9,
            "type": "integer",
            "description": "0 (fastest, biggest file) to 9 (smallest file, slower). PNG is always lossless.",
            "default": 6
          },
          "backgroundColor": {
            "title": "Background color",
            "type": "string",
            "description": "Fill transparent areas with this color, e.g. \"#FFFFFF\" or \"black\". Leave empty to keep transparency (JPEG always gets white unless you set a color)."
          },
          "scalePercent": {
            "title": "Scale (%)",
            "minimum": 1,
            "maximum": 400,
            "type": "integer",
            "description": "Resize the result relative to the PSD canvas, e.g. 50 for half size or 200 for double. 100 = original size.",
            "default": 100
          },
          "maxWidth": {
            "title": "Max width (px)",
            "minimum": 0,
            "type": "integer",
            "description": "Optional. Shrink the image to fit this width (keeps proportions, never enlarges). 0 = no limit.",
            "default": 0
          },
          "maxHeight": {
            "title": "Max height (px)",
            "minimum": 0,
            "type": "integer",
            "description": "Optional. Shrink the image to fit this height (keeps proportions, never enlarges). 0 = no limit.",
            "default": 0
          },
          "trimTransparentEdges": {
            "title": "Trim empty edges",
            "type": "boolean",
            "description": "Crop away transparent (or uniform) borders around the artwork. Useful for stickers, logos and product cut-outs.",
            "default": false
          },
          "thumbnailWidth": {
            "title": "Thumbnail width (px)",
            "minimum": 0,
            "maximum": 4000,
            "type": "integer",
            "description": "Also create a small preview image of this width (same format). 0 = no thumbnail. Free extra.",
            "default": 0
          },
          "fileNamePrefix": {
            "title": "File name prefix",
            "type": "string",
            "description": "Optional text added in front of every output file name, e.g. \"es-\" gives es-banner.png."
          },
          "createZip": {
            "title": "Bundle all images in a ZIP",
            "type": "boolean",
            "description": "When more than one file is converted, also provide a single ZIP download with every image.",
            "default": true
          },
          "includeLayerDetails": {
            "title": "Include layer details",
            "type": "boolean",
            "description": "Add the full layer list of each PSD to the results: name, group path, type, visibility, opacity, blend mode, position, size and text content.",
            "default": true
          },
          "saveEditedPsd": {
            "title": "Also save the edited PSD",
            "type": "boolean",
            "description": "When text was replaced, also save an editable PSD/PSB with the new text (layers stay editable in Photoshop). Free of charge. Visibility rules (show/hide) only apply to the images.",
            "default": false
          },
          "maxConversions": {
            "title": "Max conversions per run",
            "minimum": 1,
            "type": "integer",
            "description": "Safety cap on how many PSD files this run converts (and charges). Free Apify plans are limited to 10 per run.",
            "default": 1000
          },
          "maxFileSizeMb": {
            "title": "Max file size (MB)",
            "minimum": 1,
            "type": "integer",
            "description": "Files bigger than this are skipped (not charged). Large PSB files need more run memory: use 4096 MB or more for files above ~500 MB.",
            "default": 2048
          },
          "renderTimeoutSecs": {
            "title": "Time limit per file (seconds)",
            "minimum": 10,
            "maximum": 3600,
            "type": "integer",
            "description": "Stop working on a single file after this long and move on (not charged).",
            "default": 300
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}