SudoMock
Mockups
DocsPricing
Request a demo
Get Started

Start rendering mockups in minutes

From PSD to product mockup in one API call.

Get Free API Key→Browse Templates
Public status pagePublished API pricingProduct mockup API500 one-time API credits

Site Navigation

SudoMock

Turn reusable PSD templates, artwork, and editable text into production-ready product images through REST API, no-code workflows, native storefront apps, or AI.

SudoMock is a registered DBA
1209 Mountain Rd Pl NE, Ste N
Albuquerque, NM 87110, USA

Product

  • Pricing
  • Dashboard
  • PSD Mockups
  • Changelog
  • Start Free

Developers

  • API Overview
  • MCP Server
  • Quick Start
  • Render API
  • Upload PSD
  • Authentication
  • Error Handling
  • PSD Preparation
  • Integrations

Mockups & Tools

  • All Mockups
  • Apparel Mockups
  • Drinkware Mockups
  • Wall Art Mockups
  • Home & Living
  • By Platform
  • Search Mockups
  • Background Remover
  • Free Tools

Resources

  • All Use Cases
  • T-Shirt Mockup Generator for Print on Demand
  • Tote Bag Mockup Generator for Sustainable Brands
  • Automate Mug at Scale with SudoMock
  • Blog
  • Roadmap
  • All Alternatives
  • vs Placeit
  • vs DynamicMockups
  • vs Adobe Photoshop API
  • vs Static Mockup Generators

Company

  • About
  • Contact
  • Brand Assets
  • System Status (opens in new tab)
  • Feature Requests (opens in new tab)
Blog

Latest Articles

View all →
  • 01Etsy Listing Photo Size: Etsy's Rules and Files That Meet Them
  • 02Product Mockups With ChatGPT or Claude From One Product Photo
  • 03WooCommerce Variation Image Galleries: Fill Each Color by API
  • 04Etsy Listing Generator: Build Your Own With Claude and SudoMock

© 2026 SudoMock. All rights reserved.

PrivacyTermsRefundsCookies[email protected]
  1. Blog
  2. /
  3. Guide

Etsy Listing Photo Size: Etsy's Rules and Files That Meet Them

Etsy recommends listing photos at least 2000 pixels wide and tall, a landscape or square first photo of at least 635 pixels, and JPG, PNG, GIF, SVG or HEIC files, with uploads over 1 MB at risk. A SudoMock render of a 4800 x 3584 photo at width 2679 came back at 2679 x 2000 pixels, 408,734 bytes as a JPG at quality 80.

Published Oct 8, 2026·7 min read·Beck

Framed botanical print rendered at 2679 by 2000 pixels beside the export options that made it and Etsy's photo rules it meets: both sides 2000 pixels or more, landscape first photo, JPG under 1 MB

Key takeaways

  • A photo that looks 4:3 can miss 2000 px: compute the width from the template's real size.
  • Set the format to JPG: WebP is not on Etsy's list, and transparent PNG areas turn black.
  • Link one render per colour: Etsy takes variation photos for up to 20 options.

On this page

  • What size Etsy listing photos should be
  • Numbers that come from older Etsy pages
  • Pick the width from your template's shape
  • The render request
  • What the files measured
  • Keep one shape and one image per variation
  • Next step
  • Frequently asked questions
  • Sources

What size Etsy listing photos should be

Etsy's 2000 pixel figure is a recommendation for image quality: the listing form warns below 2000 pixels wide, and Etsy says that warning "is only a suggestion and you should be able to continue publishing". The 635 pixel floor on the first photo is the number tied to search placement.

These are Etsy's own lines, read on 8 October 2026 at three help articles, with the date each article was last edited:

RuleWhat Etsy's help page saysPage, last edited
Recommended size"a width and height of at least 2000 pixels or more"Requirements and Best Practices for Images, 4 May 2026
First photo minimum"at least 635 pixels to avoid showing up lower in searches"Same page
First photo shape"horizontal (landscape) or square"Same page
Shape of the other photosthe first photo "dictates the shape of the photos that follow"Same page
File types".jpg, .gif, .png, .svg, or .heic", and transparent parts of a PNG "will appear black"Same page
File sizeover 1 MB "may not finish uploading", and "Files bigger than 300k may time out"Same page, and How to Create a Listing, 29 June 2026
Photos per listing"up to 20 photos and 2 videos"How to Create a Listing, 29 June 2026
Photos on variationsphotos for 20 options of a variation at mostHow to Add Variations, 28 August 2026

Numbers that come from older Etsy pages

Several figures that circulate as Etsy rules are not on the current image article. The 72 PPI line and "2000px for the shortest side" come from Etsy's community announcement of 24 July 2023, which read: "Recommended size is 2000px for the shortest side, and a resolution of 72PPI."

The current article sets no PPI and no aspect ratio number. PPI is a tag inside the file and does not change its pixels: the render docs describe SudoMock's dpi option the same way, as metadata that leaves the pixel size to image_size. A file of 2679 by 2000 pixels is the same image at 72 or at 300 PPI.

Etsy's own pages also differ in two places. The variations article still says "You can add up to ten photos" in its photo step, while the listing article says 20. The upload warning is 1 MB on the image article and 300k on the listing article.

Pick the width from your template's shape

In a SudoMock render, image_size sets the output width and the height follows the template's own shape. So the width that gives 2000 pixels on both sides depends on the template: 2000 for square templates, more for landscape ones.

For a landscape template, multiply 2000 by the template's width divided by its height and round up. A PSD mockup returns its size as data.width and data.height, a photo mockup as data.source_width and data.source_height. The photo rendered for this page is 4800 by 3584 pixels. It looks like 4:3, but a width of 2667 returned 2667 by 1991 pixels, nine short of 2000 in height. The same rule gives 2679, and 2679 returned exactly 2679 by 2000.

Template shapeTemplate sizeimage_sizeOutput
Square 1:13000 x 300020002000 x 2000
Landscape 5:43000 x 240025002500 x 2000
Landscape 4:33200 x 240026672667 x 2000
The photo on this page4800 x 358426792679 x 2000
Landscape 3:23000 x 200030003000 x 2000
Landscape 16:93840 x 216035563556 x 2000

The render request

One request renders the design on the template in a format Etsy lists, at the width you set. This is the photo mockup render that made the files below, with the IDs and the design URL as placeholders:

curl -X POST https://api.sudomock.com/api/v1/photo-mockups/YOUR_PHOTO_MOCKUP_ID/render \
-H "x-api-key: $SUDOMOCK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"print_areas": [
{ "uuid": "YOUR_PRINT_AREA_UUID",
"artwork_url": "https://example.com/designs/botanical-print.png",
"adjustments": { "blend_mode": "normal" } }
],
"export_options": { "image_format": "jpg", "image_size": 1024, "quality": 80 }
}'
const response = await fetch('https://api.sudomock.com/api/v1/photo-mockups/YOUR_PHOTO_MOCKUP_ID/render', {
method: 'POST',
headers: {
'x-api-key': process.env.SUDOMOCK_API_KEY,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"print_areas": [
{
"uuid": "YOUR_PRINT_AREA_UUID",
"artwork_url": "https://example.com/designs/botanical-print.png",
"adjustments": {
"blend_mode": "normal"
}
}
],
"export_options": {
"image_format": "jpg",
"image_size": 1024,
"quality": 80
}
}),
});
const data = await response.json();
console.log(data);
import os
import requests
response = requests.post(
"https://api.sudomock.com/api/v1/photo-mockups/YOUR_PHOTO_MOCKUP_ID/render",
headers={
"x-api-key": os.environ["SUDOMOCK_API_KEY"],
"Content-Type": "application/json",
},
json={
"print_areas": [
{
"uuid": "YOUR_PRINT_AREA_UUID",
"artwork_url": "https://example.com/designs/botanical-print.png",
"adjustments": {
"blend_mode": "normal",
},
},
],
"export_options": {
"image_format": "jpg",
"image_size": 1024,
"quality": 80,
},
},
)
print(response.json())
package main
import (
"bytes"
"fmt"
"io"
"net/http"
"os"
)
func main() {
payload := []byte(`{
"print_areas": [
{
"uuid": "YOUR_PRINT_AREA_UUID",
"artwork_url": "https://example.com/designs/botanical-print.png",
"adjustments": {
"blend_mode": "normal"
}
}
],
"export_options": {
"image_format": "jpg",
"image_size": 1024,
"quality": 80
}
}`)
req, err := http.NewRequest("POST", "https://api.sudomock.com/api/v1/photo-mockups/YOUR_PHOTO_MOCKUP_ID/render", bytes.NewBuffer(payload))
if err != nil {
panic(err)
}
req.Header.Set("x-api-key", os.Getenv("SUDOMOCK_API_KEY"))
req.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
<?php
$payload = <<<'JSON'
{
"print_areas": [
{
"uuid": "YOUR_PRINT_AREA_UUID",
"artwork_url": "https://example.com/designs/botanical-print.png",
"adjustments": {
"blend_mode": "normal"
}
}
],
"export_options": {
"image_format": "jpg",
"image_size": 1024,
"quality": 80
}
}
JSON;
$ch = curl_init('https://api.sudomock.com/api/v1/photo-mockups/YOUR_PHOTO_MOCKUP_ID/render');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'x-api-key: ' . getenv('SUDOMOCK_API_KEY'),
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => $payload,
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;

For the listing files, set image_size to the width the table gives for your template: the files below used 2679. The image URL comes back in data.print_files[0].export_path.

Set image_format to jpg in every request. The API returns WebP when the format is left out, and WebP is not on Etsy's list of supported image types. A PSD template takes the same export_options in Render a PSD mockup.

What the files measured

All three files below are SudoMock renders made on 8 October 2026 from one photo mockup at image_size 2679, and each came back at exactly 2679 by 2000 pixels. At quality 90 the JPG is 799,805 bytes, under Etsy's 1 MB line, and quality 80 is about half that size.

Framed botanical art print in a thin oak frame on a warm plaster wall above an oak sideboard, rendered by SudoMock at 2679 by 2000 pixels as a JPGA SudoMock render on a photo mockup, shown here at 1600 px. The product photo was made with an image model for this example.

JPG qualityPixelsFile sizeFull file
902679 x 2000799,805 bytesquality 90
802679 x 2000408,734 bytesquality 80
702679 x 2000308,529 bytesquality 70

At full size the three files are hard to tell apart. The crop below shows the same 700 by 520 pixel area of the quality 90 and quality 70 files at 100 percent.

Two crops of the same framed botanical print at 100 percent, the left from the quality 90 JPG and the right from the quality 70 JPG, with leaf edges and frame grain equally sharpThe same area of the quality 90 and quality 70 renders at 100 percent.

Etsy compresses uploads again on its side: "Images may appear less sharp after being uploaded due to compression of the image files." Quality 80 keeps the file well under 1 MB with room to spare, and quality 70 sits just above the 300k line of the listing article.

Keep one shape and one image per variation

Etsy's first photo sets the shape of the photos after it, so render the whole set from templates of one shape. For colour or style variations, render one image per option: Etsy lets a seller link photos to 20 options of a variation.

  1. Choose templates of one shape for the listing, landscape or square for the first photo.
  2. Keep the product centred with space around it. Etsy crops the first photo "to square, portrait, and landscape thumbnails" and asks for "enough of a border" so none of the product is lost.
  3. Render each design on each template, one request per colour, with image_format jpg and the width from the table. Send the requests in parallel: the average SudoMock render finishes in under a second.
  4. Upload the files in listing order, then link each colour's photo to its variation option.

To send the photos to Etsy by script, Etsy's Open API takes the image file per listing: Etsy listing generator shows the draft and upload calls, and How to Automate Etsy Product Mockups runs the render loop over a catalogue.

Next step

Render one listing photo with the request above at the width your template needs, check its pixels and bytes, then render the rest of the set. With a product photo, create a mockup from a product photo: its print area is found automatically. With no template yet, start from the mockup templates for Etsy sellers. Without code, the SudoMock node in n8n takes the same format, width and quality settings for a PSD template (PSD Mockup: Render): see the n8n integration guide. The Etsy mockups use case covers the rest of a listing workflow.

Frequently asked questions

What size should Etsy listing photos be?

Etsy recommends at least 2000 pixels on both the width and the height. The first photo should be at least 635 pixels on each side, or the listing may show lower in search. The listing form warns below 2000 pixels wide, but the warning does not block publishing.

Does Etsy accept WebP images?

No. Etsy's image help article lists .jpg, .gif, .png, .svg and .heic as the only supported image types. Export listing photos as JPG, or as PNG without transparency, because transparent areas show as black on Etsy.

Should Etsy listing photos be square or landscape?

Etsy asks for a first photo that is horizontal or square, and that first photo sets the shape of the photos after it. Its thumbnail guidance leans to landscape and asks for a border around the product, because the first photo is cropped into square, portrait and landscape thumbnails.

How large can an Etsy photo file be?

Etsy's image article says files over 1 MB may not finish uploading on a slower connection, and its listing article says files over 300k may time out. These are upload warnings, and neither page states a hard maximum. A SudoMock render at 2679 x 2000 pixels, JPG quality 80, measured 408,734 bytes.

How many photos can an Etsy listing have?

Etsy's listing help article allows up to 20 photos and 2 videos per listing. Photos can also be linked to the options of a variation, for at most 20 options.

Sources

  1. Requirements and Best Practices for Images in Your Etsy Shop (opens in new tab), Etsy Help Center
  2. How to Create a Listing (opens in new tab), Etsy Help Center
  3. How to Add Variations to Your Listings (opens in new tab), Etsy Help Center
  4. We're making updates to size and ratio for listing images (opens in new tab), Etsy Community
  5. Render a photo mockup (opens in new tab)
  6. Render a PSD mockup (opens in new tab)
  7. Create a mockup from a product photo (opens in new tab)
B

Beck

CTO

View all posts

On this page

  • What size Etsy listing photos should be
  • Numbers that come from older Etsy pages
  • Pick the width from your template's shape
  • The render request
  • What the files measured
  • Keep one shape and one image per variation
  • Next step
  • Frequently asked questions
  • Sources

Related articles

One mushroom design run through the TEMPLATES loop into four renders: black tee, white tee, 11oz mug and 24x36 framed poster
Tutorial

How to Automate Etsy Product Mockups in 2026

Step-by-step guide to automating your Etsy listing mockups with SudoMock API. Save hours of manual work.

Dec 3, 2025 · 2 min read

The moonlit campsite design next to three SudoMock renders of it on a hoodie, a framed poster and a canvas tote, beside the Etsy title, 13 tags and alt text Claude wrote for the hoodie
Tutorial

Etsy Listing Generator: Build Your Own With Claude and SudoMock

One design in, a full Etsy listing out: photos rendered on your own templates, then the title, tags and alt text Claude writes from them.

Oct 5, 2026 · 10 min read

A plain canvas tote product photo turned into a mockup with POST /api/v1/photo-mockups, with mushroom, sunset and botanical designs rendered on the same bag
Tutorial

How to Make Your Own Mockup from Any Product Photo

One photo of your own product becomes a reusable mockup: the create call, the render call and real renders of four designs on a canvas tote.

Oct 2, 2026 · 7 min read

Your own PSD, rendered via API

Render your own PSD through the API. Start with 500 one-time credits, no card.

Start Free View Docs

Render your own PSD via API with 500 one-time credits.

Start Free · 500 credits, no card