Low-Res Supplier Photos? Upscale Them to Marketplace Quality Automatically

6 min read Image Transformation

The Supplier Image Problem

Every e-commerce team knows this story. A supplier sends a product catalog with 500 SKUs. The images are 300x300 pixels. Your marketplace listing requires 1000x1000 minimum. Amazon wants 1600 on the longest side. Shopify recommends 2048x2048.

You have three options. Ask the supplier for better images — and wait weeks for a response that might never come. Hire someone to reshoot 500 products — and blow your budget. Or resize the images you have — and watch them turn into blurry mush on the listing page.

Traditional resizing (bicubic, Lanczos) doesn’t add detail. It just spreads the same 300x300 worth of information across 1000x1000 pixels. The result looks soft. On a marketplace where shoppers compare products side by side, soft images lose to sharp ones.

AI upscaling is the fourth option. The upscale operation in the Image Transformation API uses a super-resolution model to generate real detail — fabric texture, product edges, surface patterns — that makes the output look like it was shot at the higher resolution. A 300x300 supplier photo at 4x becomes 1200x1200 with actual sharpness.

The Pipeline

The workflow is a single API call to the Image Transformation API. The upscale operation runs first to boost the resolution, then subsequent operations transform the image to the exact marketplace spec.

import { IterationLayer } from "iterationlayer";
const client = new IterationLayer({ apiKey: "YOUR_API_KEY" });

const result = await client.transform({
  file: { type: "url", name: "product.jpg", url: supplierImageUrl },
  operations: [
    { type: "upscale", factor: 4 },
    { type: "resize", width_in_px: 1600, height_in_px: 1600, fit: "contain" },
    { type: "remove_transparency", hex_color: "#ffffff" },
    { type: "convert", format: "jpeg", quality: 90 },
  ],
});

A 300x300 image at 4x becomes 1200x1200. The AI model generates texture and edge detail that wasn’t in the original. Then the pipeline resizes to 1600x1600 with contain fit (so the product sits inside the frame without cropping), flattens any transparency to white, and converts to JPEG at 90% quality. That’s Amazon-ready.

Marketplace Requirements at a Glance

Different marketplaces have different image specs. The pipeline adapts by changing the transformation operations:

  • Amazon — 1600px minimum on longest side. JPEG or PNG. White background preferred. Use resize with contain fit and remove_transparency with white.
  • Shopify — 2048x2048 recommended. All major formats. Use resize with contain and 2048x2048 target.
  • eBay — 500px minimum on longest side, 9000px max. JPEG preferred. Use resize with inside fit to constrain without upscaling images that are already large enough.
  • Etsy — 2000px minimum on shortest side. Use resize with outside fit to guarantee minimum dimensions.

The upscale operation is the same for all of them — get the image to a high enough resolution. The remaining operations adapt to the specific marketplace.

Batch Processing a Catalog

A real catalog import processes hundreds or thousands of images. The pattern is the same per-image; you just need to handle concurrency:

import { IterationLayer } from "iterationlayer";
const client = new IterationLayer({ apiKey: "YOUR_API_KEY" });

const CONCURRENCY_LIMIT = 5;

const processProductImage = async (imageUrl: string): Promise<Buffer> => {
  const { data: { buffer } } = await client.transform({
    file: { type: "url", name: "product.jpg", url: imageUrl },
    operations: [
      { type: "upscale", factor: 4 },
      { type: "resize", width_in_px: 1600, height_in_px: 1600, fit: "contain" },
      { type: "remove_transparency", hex_color: "#ffffff" },
      { type: "convert", format: "jpeg", quality: 90 },
    ],
  });

  return Buffer.from(buffer, "base64");
};

Run processProductImage for each SKU in the catalog. Limit concurrency to avoid overwhelming your network or the API. Five parallel requests is a reasonable starting point.

Choosing the Right Factor

Not every supplier image needs 4x. If the source is 600x600 and the target is 1000x1000, 2x (producing 1200x1200) is enough — and faster.

The rule: use the smallest factor that gets the image above the marketplace minimum. Upscaling beyond what you need wastes processing time and produces a larger intermediate result that you’ll just downscale in a subsequent resize operation anyway.

  • Source 300x300, target 1000x1000 — use 4x (1200x1200)
  • Source 400x400, target 1000x1000 — use 3x (1200x1200)
  • Source 600x600, target 1000x1000 — use 2x (1200x1200)
  • Source 1200x1200, target 1000x1000 — skip the upscale operation, just resize and convert

What About Images That Are Already Good?

Not every image in a supplier catalog is low-res. Some suppliers provide a mix — a few high-quality hero shots alongside dozens of low-res variants. Your pipeline should check before it upscales:

const shouldUpscale = (width_in_px: number, height_in_px: number, targetInPx: number): boolean =>
  width_in_px < targetInPx || height_in_px < targetInPx;

If the image already meets the marketplace spec, omit the upscale operation from the operations array. This saves processing time on images that don’t need enhancement.

The Quality Difference

The reason this pipeline works — and simple resizing doesn’t — is the difference between interpolation and generation.

Bicubic interpolation calculates each new pixel as a weighted average of its neighbors. The result is smooth but lacks detail. Zoom in on a bicubic-upscaled product photo and you’ll see soft edges, mushy textures, and no fine detail.

AI super-resolution generates new pixels based on learned patterns. The model knows what fabric looks like up close, what a product edge should look like at high resolution, what surface texture looks like when the camera is nearer. It fills in that information. The result holds up under zoom and looks natural on a high-DPI product listing page.

For e-commerce, this difference directly affects conversion. Shoppers zoom in on product images. If the zoom reveals blur, they move on. If the zoom reveals detail, they buy.

Get Started

Check the docs for the full Image Transformation API reference, including all available operations. The TypeScript and Python SDKs handle file encoding and response parsing.

Sign up for a free account — no credit card required. Try the pipeline with one supplier image and compare the result to a simple bicubic resize. The difference is visible immediately.

Start building in minutes

Free trial included. No credit card required.