Output Types Migration Guide

Overview

Adobe Photoshop API v2 introduces significant changes to output format specifications. This guide covers the structural changes, field renaming, and quality/compression parameter transformations for all output types: JPEG, PNG, PSD, and TIFF.

Summary of changes

All output formats in v2 share common structural changes:

Change
v1
v2
Location URL
outputs[].href
outputs[].destination.url
Format Type
outputs[].type
outputs[].mediaType
Storage Type
outputs[].storage (required)
outputs[].destination.storageType (optional)
Quality (JPEG)
Numeric 1-7 (or 1-12)
String enum
Compression (PNG)
"small", "medium", "large"
Detailed string enum
ICC Profile
Not available
Optional iccProfile for color management (see ICC Profile Migration)

Structural changes (all output types)

Key structural changes:

  1. Destination Object: URLs are now nested in a destination object.

  2. Storage Type:

    • v1: storage field required for all outputs.
    • v2: storageType only needed for Azure Blob Storage and Dropbox.
    • AWS S3 presigned URLs don't require storageType.
  3. Media Type: Renamed from type to mediaType for clarity.

V1 output structure

{
  "outputs": [
    {
      "href": "https://example.com/output.jpg",
      "storage": "external",
      "type": "image/jpeg",
      "width": 1920,
      "quality": 7
    }
  ]
}

V2 output structure

{
  "outputs": [
    {
      "destination": {
        "url": "https://example.com/output.jpg"
      },
      "mediaType": "image/jpeg",
      "width": 1920,
      "quality": "maximum"
    }
  ]
}

Common output fields

All output types support these common fields:

Field
Type
Description
Required
mediaType
string
Output format (e.g., "image/jpeg")
Yes
destination
object
Output destination configuration
Yes
width
integer
Output width in pixels (≥ 0)
No
height
integer
Output height in pixels (≥ 0)
No
maxWidth
integer
Maximum width in pixels (≥ 0)
No
resample
string
Resampling algorithm when resizing to width/maxWidth. Values: nearest_neighbor, bilinear, bicubic, bicubic_smoother, bicubic_sharper. Defaults to bicubic. Applies to JPEG, PNG, and TIFF only.
No
shouldTrimToCanvas
boolean
Trim transparent pixels
No
iccProfile
object
ICC color profile for color management (JPEG, PNG, TIFF, PSD only; not PSDC)
No

Format support: color mode and bit depth

When exporting to different formats, the API automatically converts source images when the color mode or bit depth is not supported by the target format. The following tables describe supported values and fallback behavior for each export path.

data-variant=info
data-slots=text
Export paths: Full document = whole document export (e.g., /v2/create-composite with no layer selection). Single layer = exporting one layer. Layers composite = exporting a composite of multiple selected layers.
data-variant=info
data-slots=text
With ICC Profile = whether an ICC profile is specified in the output's iccProfile option. When an ICC profile is specified for full document export, format-specific conversion is skipped; the ICC transformation handles color management.
data-variant=info
data-slots=text
Layers composite: Format-specific conversion is not applied for layers composite export; the composite is written as-is.

Bit depth validation

Export path
Target format
Supported depths
Fallback
ICC profile specified
Full document
JPEG
8-bit only
Convert to 8-bit if needed
No
Full document
JPEG
8-bit only
No conversion
Yes
Full document
PNG
8-bit, 16-bit
Convert to 8-bit if needed
No
Full document
PNG
8-bit, 16-bit
No conversion
Yes
Full document
TIFF
8, 16, 32-bit
No conversion
N/A
Full document
PSD
8, 16, 32-bit
No conversion
N/A
Full document
PSDC
8, 16, 32-bit
No conversion
N/A
Single layer
JPEG
8-bit only
Convert to 8-bit if needed
N/A
Single layer
PNG
8-bit, 16-bit
Convert to 8-bit if needed
N/A
Single layer
TIFF
8, 16, 32-bit
No conversion
N/A
Single layer
PSD
8, 16-bit
Convert to 8-bit if needed
N/A
Layers composite
JPEG
No conversion
N/A
Layers composite
PNG
No conversion
N/A
Layers composite
TIFF
No conversion
N/A

Color mode validation

Export path
Target format
Supported modes
Fallback
ICC profile specified
Full document
JPEG
RGB, Grayscale, CMYK
Convert to RGB if needed
No
Full document
JPEG
RGB, Grayscale, CMYK
No conversion
Yes
Full document
PNG
RGB, Grayscale
Convert to RGB if needed
No
Full document
PNG
RGB, Grayscale
No conversion
Yes
Full document
TIFF
All
No conversion
N/A
Full document
PSD
All
No conversion
N/A
Full document
PSDC
All
No conversion
N/A
Single layer
JPEG
RGB, Grayscale, CMYK
Convert to RGB if needed
N/A
Single layer
PNG
RGB, Grayscale
Convert to RGB if needed
N/A
Single layer
TIFF
All
No conversion
N/A
Single layer
PSD
RGB, Grayscale, CMYK
Convert to RGB if needed
N/A
Layers composite
JPEG
No conversion
N/A
Layers composite
PNG
No conversion
N/A
Layers composite
TIFF
No conversion
N/A

JPEG output migration

Quality parameter changes

The most significant change for JPEG outputs is the quality parameter transformation from numeric to descriptive string values.

V1 JPEG quality (numeric)

{
  "type": "image/jpeg",
  "quality": 7
}

In the v1 API, you can use numeric values:

V2 JPEG quality (string enum)

{
  "mediaType": "image/jpeg",
  "quality": "maximum"
}

In the v2 API, you use descriptive string values:

JPEG quality mapping table

v2 Quality
v1 Quality
Use Case
"very_poor"
N/A
Smallest files (v2 only)
"poor"
N/A
Very small files (v2 only)
"low"
1-2
Thumbnails, small previews
"medium"
3-4
Standard web images
"high"
5-6
High-quality web images
"maximum"
7
Print, production
"photoshop_max"
N/A
Professional print, highest quality (recommended)

The quality parameter is optional. If not specified, the API uses different defaults based on the operation type:

Complete JPEG migration example

Key Transformations:

  1. inputs[].hrefimage.source.url
  2. outputs[].hrefoutputs[].destination.url
  3. outputs[].typeoutputs[].mediaType
  4. quality: 7quality: "maximum"
  5. storage: "external" removed (implicit for S3 URLs)

V1 Request:

{
  "inputs": [
    {
      "href": "https://my-bucket.s3.amazonaws.com/input.psd",
      "storage": "external"
    }
  ],
  "outputs": [
    {
      "href": "https://my-bucket.s3.amazonaws.com/output.jpg",
      "storage": "external",
      "type": "image/jpeg",
      "quality": 7,
      "width": 2000
    }
  ]
}

V2 Request:

{
  "image": {
    "source": {
      "url": "https://my-bucket.s3.amazonaws.com/input.psd"
    }
  },
  "outputs": [
    {
      "destination": {
        "url": "https://my-bucket.s3.amazonaws.com/output.jpg"
      },
      "mediaType": "image/jpeg",
      "quality": "maximum",
      "width": 2000
    }
  ]
}

PNG output migration

Compression parameter changes

PNG outputs have expanded compression options in V2, offering more granular control over file size and compression speed.

V1 PNG compression

{
  "type": "image/png",
  "compression": "medium"
}

In the v1 API, you can use three compression levels:

V2 PNG compression

{
  "mediaType": "image/png",
  "compression": "medium"
}

In the v2 API, you can use ten compression levels (following zlib/libpng standards):

PNG compression mapping table

v1 Compression
v2 Recommended
v2 Alternatives
Notes
"small"
"maximum"
"very_high", "high"
Smallest file size, slower
"medium"
"medium"
"default", "medium_high", "medium_low"
Balanced performance
"large"
"low"
"very_low", "none"
Fastest, larger files

The compression parameter is optional. If not specified, the API uses default (level 6) for both Create Composite and Generate Manifest operations, which provides a good balance between file size and processing speed.

Complete PNG migration example

Key Transformations:

  1. inputs[].hrefimage.source.url
  2. outputs[].hrefoutputs[].destination.url
  3. outputs[].typeoutputs[].mediaType
  4. compression: "medium" stays the same (but more options available)
  5. storage field removed

V1 Request:

{
  "inputs": [
    {
      "href": "https://my-storage.com/input.psd",
      "storage": "external"
    }
  ],
  "outputs": [
    {
      "href": "https://my-storage.com/output.png",
      "storage": "external",
      "type": "image/png",
      "compression": "medium",
      "width": 1920
    }
  ]
}

V2 Request:

{
  "image": {
    "source": {
      "url": "https://my-storage.com/input.psd"
    }
  },
  "outputs": [
    {
      "destination": {
        "url": "https://my-storage.com/output.png"
      },
      "mediaType": "image/png",
      "compression": "medium",
      "width": 1920
    }
  ]
}

PSD output migration

PSD format changes

Photoshop document (PSD) outputs have no format-specific parameters, like quality or compression. The only changes are the structural field renaming.

V1 PSD output

{
  "type": "image/vnd.adobe.photoshop",
  "href": "https://example.com/output.psd",
  "storage": "external"
}

V2 PSD output

{
  "mediaType": "image/vnd.adobe.photoshop",
  "destination": {
    "url": "https://example.com/output.psd"
  }
}

Supported media types for PSD

V2 accepts both media type formats:

Complete PSD migration example

Key Transformations:

  1. Field renaming (same as other formats)
  2. optionsedits
  3. No quality or compression parameters needed

V1 Request:

{
  "inputs": [
    {
      "href": "https://storage.example.com/document.psd",
      "storage": "external"
    }
  ],
  "options": {
    "layers": [
      {
        "name": "Background",
        "locked": false
      }
    ]
  },
  "outputs": [
    {
      "href": "https://storage.example.com/modified.psd",
      "storage": "external",
      "type": "image/vnd.adobe.photoshop"
    }
  ]
}

V2 Request:

{
  "image": {
    "source": {
      "url": "https://storage.example.com/document.psd"
    }
  },
  "edits": {
    "layers": [
      {
        "name": "Background",
        "protection": ["none"]
      }
    ]
  },
  "outputs": [
    {
      "destination": {
        "url": "https://storage.example.com/modified.psd"
      },
      "mediaType": "image/vnd.adobe.photoshop"
    }
  ]
}

TIFF output migration

TIFF format changes

TIFF outputs in the v2 API do not have compression options. Like PSD, the changes are purely structural.

V1 TIFF output

{
  "type": "image/tiff",
  "href": "https://example.com/output.tiff",
  "storage": "external"
}

V2 TIFF output

{
  "mediaType": "image/tiff",
  "destination": {
    "url": "https://example.com/output.tiff"
  }
}

Complete TIFF migration example

Key Transformations:

  1. Standard field renaming
  2. No compression parameters in v2
  3. Common output fields still supported (width, height, etc.)

V1 Request:

{
  "inputs": [
    {
      "href": "https://storage.example.com/input.psd",
      "storage": "external"
    }
  ],
  "outputs": [
    {
      "href": "https://storage.example.com/output.tiff",
      "storage": "external",
      "type": "image/tiff",
      "width": 3000
    }
  ]
}

V2 Request:

{
  "image": {
    "source": {
      "url": "https://storage.example.com/input.psd"
    }
  },
  "outputs": [
    {
      "destination": {
        "url": "https://storage.example.com/output.tiff"
      },
      "mediaType": "image/tiff",
      "width": 3000
    }
  ]
}

Multiple outputs

V2 supports generating multiple outputs in different formats from a single request (up to 25 outputs).

Multiple output example

V2 Request:

{
  "image": {
    "source": {
      "url": "https://storage.example.com/input.psd"
    }
  },
  "outputs": [
    {
      "destination": {
        "url": "https://storage.example.com/output-hq.jpg"
      },
      "mediaType": "image/jpeg",
      "quality": "maximum",
      "width": 2400
    },
    {
      "destination": {
        "url": "https://storage.example.com/output-preview.jpg"
      },
      "mediaType": "image/jpeg",
      "quality": "medium",
      "width": 800
    },
    {
      "destination": {
        "url": "https://storage.example.com/output.png"
      },
      "mediaType": "image/png",
      "compression": "maximum",
      "width": 1920
    },
    {
      "destination": {
        "url": "https://storage.example.com/output.psd"
      },
      "mediaType": "image/vnd.adobe.photoshop"
    }
  ]
}

This generates four outputs in a single API call:

  1. High-quality JPEG at 2400px width
  2. Medium-quality preview JPEG at 800px width
  3. PNG with maximum compression at 1920px width
  4. Original PSD with any edits applied

Storage type considerations

When to use storageType

In v2, the storageType field is optional and only required for specific storage providers:

Storage Provider
storageType Required
Value
AWS S3 (presigned URLs)
❌ No
Not needed
Azure Blob Storage
✅ Yes
"azure"
Dropbox
✅ Yes
"dropbox"
Frame.io
❌ No
Not needed
Google Drive
❌ No
Not needed

Azure Blob Storage example

{
  "destination": {
    "url": "https://myaccount.blob.core.windows.net/container/output.jpg",
    "storageType": "azure"
  },
  "mediaType": "image/jpeg",
  "quality": "high"
}

Dropbox example

{
  "destination": {
    "url": "https://dropbox.com/path/to/output.jpg",
    "storageType": "dropbox"
  },
  "mediaType": "image/jpeg",
  "quality": "high"
}

Common migration errors

Using V1 field names

Problem:

{
  "outputs": [{
    "href": "https://...",
    "type": "image/jpeg"
  }]
}

Error:

Required field 'destination' is missing
Required field 'mediaType' is missing

Solution:

{
  "outputs": [{
    "destination": {
      "url": "https://..."
    },
    "mediaType": "image/jpeg"
  }]
}

Numeric JPEG quality

Problem:

{
  "mediaType": "image/jpeg",
  "quality": 7
}

Error:

Invalid value '7' at path 'outputs[0].quality'.
Accepted values are: very_poor, poor, low, medium, high, maximum, photoshop_max

Solution:

{
  "mediaType": "image/jpeg",
  "quality": "maximum"
}

Invalid PNG compression

Problem:

{
  "mediaType": "image/png",
  "compression": "small"
}

Error:

Invalid value 'small' at path 'outputs[0].compression'.

Solution:

Use V2 compression values:

{
  "mediaType": "image/png",
  "compression": "maximum"
}

Using JPEG quality for PNG

Problem:

{
  "mediaType": "image/png",
  "quality": "high"
}

Error:

'quality' parameter is not supported for PNG format

Solution:

Use compression for PNG:

{
  "mediaType": "image/png",
  "compression": "high"
}

Missing storage type for Azure

Problem:

{
  "destination": {
    "url": "https://myaccount.blob.core.windows.net/..."
  }
}

Error:

Azure Blob Storage URL requires 'storageType': 'azure'

Solution:

{
  "destination": {
    "url": "https://myaccount.blob.core.windows.net/...",
    "storageType": "azure"
  }
}

Migration checklist

Use this checklist when migrating output configurations:

All Output Types

JPEG specific

PNG specific

PSD specific

TIFF specific

Quick reference

Field name changes (all formats)

v1 Field
v2 Field
Notes
outputs[].href
outputs[].destination.url
Nested in destination object
outputs[].type
outputs[].mediaType
Renamed for clarity
outputs[].storage
outputs[].destination.storageType
Optional in V2

JPEG quality quick reference

v1
v2
When to Use
7
"maximum"
Default for production
5-6
"high"
High-quality web
3-4
"medium"
Standard web
1-2
"low"
Thumbnails

PNG compression quick reference

v1
v2
When to Use
"small"
"maximum"
Smallest files
"medium"
"medium"
Balanced
"large"
"low"
Fastest processing

Additional resources

Related migration guides: