Shopify's image pipeline is forgiving about input formats but strict about color space and display dimensions. The wrong color profile turns white backgrounds pink or makes product colors look off. Oversized images slow storefronts and hurt Core Web Vitals. This guide covers exact specs, conversion commands, and the sRGB trap that catches most designers migrating from print workflows.
What Shopify requires: exact specifications
Per Shopify's media documentation, the rules are:
- Max dimensions: 2048 × 2048 px (recommended). Up to 4472 × 4472 px is accepted but Shopify scales down to 2048 anyway — no reason to upload larger.
- Formats accepted: JPG, PNG, WebP, GIF (static and animated), AVIF (newer themes). Shopify's CDN converts to WebP for supported browsers automatically — but uploading native WebP gives you smaller files and faster admin uploads.
- Max file size: 20 MB per image (practical limit — keep under 1–2 MB for fast storefronts).
- Color space: sRGB. CMYK images are accepted but rendered incorrectly — colors shift noticeably.
- Aspect ratio: Any ratio accepted, but square (1:1) is the commerce standard. Inconsistent ratios create misaligned grids in collection pages.
- Background: Pure white (#FFFFFF) for marketplace-style themes; transparent PNG works for modern themes that set their own background.
Recommended target: WebP, 2048×2048, sRGB, quality 85, under 500 KB. This is the sweet spot for speed and fidelity.
Recommended source-to-target pairs
| Source | Situation | Target | Notes |
|---|---|---|---|
| PNG (transparent) | Product on white bg | WebP | Preserves transparency if theme uses it; smaller than PNG |
| TIFF / PSD | Studio/print assets | JPG or WebP | Always check color space — print assets are often CMYK |
| HEIC | iPhone photos | JPG or WebP | HEIC not accepted by Shopify admin upload |
| RAW (CR2, NEF, ARW) | DSLR product shots | JPG | RAW not accepted; export from Lightroom at 2048px |
| GIF (animated) | Lifestyle motion | GIF | Shopify plays GIFs; WebP animated works in modern themes |
| BMP / ICO | Legacy assets | JPG or WebP | Neither format accepted by Shopify |
Conversion commands (curl + Python)
Using the ChangeThisFile API to convert a TIFF product image to WebP:
# curl — single image
curl -X POST https://changethisfile.com/v1/convert \
-H "Authorization: Bearer ctf_sk_your_key_here" \
-F "file=@product-shot.tif" \
-F "target=webp" \
-o product-shot.webp
import requests
from pathlib import Path
API_KEY = "ctf_sk_your_key_here"
def convert_for_shopify(in_path: str, out_path: str) -> bool:
with open(in_path, "rb") as f:
resp = requests.post(
"https://changethisfile.com/v1/convert",
headers={"Authorization": f"Bearer {API_KEY}"},
files={"file": f},
data={"target": "webp"},
timeout=60,
)
resp.raise_for_status()
Path(out_path).write_bytes(resp.content)
return True
convert_for_shopify("product-shot.tif", "product-shot.webp")
print("Converted to WebP")
Batch script: convert entire product folder
For a full catalog migration, this script converts every image in a directory to WebP and renames for Shopify import:
#!/usr/bin/env bash
# Usage: ./convert_shopify_batch.sh ./raw-images ./shopify-ready
API_KEY="ctf_sk_your_key_here"
INPUT_DIR="${1:-.}"
OUTPUT_DIR="${2:-./shopify-ready}"
mkdir -p "$OUTPUT_DIR"
for img in "$INPUT_DIR"/*.{jpg,jpeg,png,tif,tiff,bmp,heic,HEIC}; do
[ -f "$img" ] || continue
base=$(basename "$img" | sed 's/\.[^.]*$//')
out="$OUTPUT_DIR/${base}.webp"
echo -n "Converting $img → $out ... "
response=$(curl -s -o "$out" -w "%{http_code}" \
-X POST https://changethisfile.com/v1/convert \
-H "Authorization: Bearer $API_KEY" \
-F "file=@$img" \
-F "target=webp")
if [ "$response" = "200" ]; then
size=$(du -sh "$out" | cut -f1)
echo "done ($size)"
else
echo "FAILED (HTTP $response)"
fi
done
echo "Done. Files in: $OUTPUT_DIR"
Tip: run du -sh shopify-ready/ after. If any WebP exceeds 1MB, re-examine the source — it's likely an oversize TIFF or lossless PNG that needs quality tuning.
Common gotchas
- CMYK color shift. Print files (from Adobe InDesign, TIFF exports) are often in CMYK. Shopify renders CMYK images with shifted colors — whites look yellowish, product colors look dull. Always convert to sRGB before uploading. If you're converting via a local tool, use
convert input.tif -colorspace sRGB output.webpwith ImageMagick, or the API handles it automatically. - PNG transparency on Shopify. Transparent PNGs work fine in modern Shopify themes, but older themes (Debut, Brooklyn) render the alpha channel as black — not white. Test in your theme before bulk uploading transparent images.
- 2048px is the upload target, not the display size. Shopify generates thumbnails at multiple sizes (100px, 240px, 480px, 720px, 1024px, 2048px) from your upload. If you upload a 500px image, the 720px thumbnail will be upscaled and look pixelated. Always upload at 2048px.
- HEIC from iPhones not accepted. Shopify's admin upload silently fails or shows a format error for HEIC files. Convert to JPG or WebP first.
- Animated GIF size limits. Animated GIFs for product videos are capped at 20MB but practically should stay under 3MB — Shopify doesn't convert GIFs to video, so large GIFs cause slow page loads.
Shopify CSV bulk import tip
When using Shopify's product CSV import, the Image Src column must be a publicly accessible URL — you can't upload files via CSV. The recommended workflow:
- Convert all images to WebP using the batch script above.
- Upload to Shopify via Admin → Products → Import, or use the Shopify Files section for hosted URLs.
- Alternatively, host images temporarily on any public CDN (R2, S3, Cloudflare) and point the CSV to those URLs.
The Shopify Bulk Operations API (GraphQL) is the fastest path for catalogs over 1,000 products — it accepts image URLs and processes them asynchronously.
Related guides
For other platform-specific image requirements, see: Convert Images for Amazon Seller Central, Convert Images for Etsy Listings, and Convert Files for Google Merchant Center.
The two rules that matter most for Shopify are 2048px and sRGB. Get those right and the rest is optimization. Use WebP for sub-500KB product images that load fast on mobile. Free tier covers 1,000 conversions/month.