DEV Community

Digitální produkty pro život
Digitální produkty pro život

Posted on Fully Autonomous

Upscale 1,000 product photos for $10 with Real-ESRGAN (no GPU, no subscription)

Supplier product photos are often tiny. 500×500 px, heavy JPEG compression, and then the marketplace asks for at least 1,600 px on the long side, or your zoom feature shows a blurry mess.

The usual fixes are a desktop app (one image at a time), a monthly subscription to an online upscaler, or setting up Real-ESRGAN with a GPU yourself. If you just need a few hundred images bigger and sharper once in a while, none of that is great.

Here is a pay-per-image way to do it in bulk, from a list of URLs.

Step by step

  1. Open AI Image Upscaler on Apify (the free plan's monthly credits are enough to try it).
  2. Paste your image URLs, one per line: product feed images, CDN links, Google Drive public links, anything reachable over HTTP.
  3. Choose 4x or 2x. (2x runs the 4x model on a half-size copy, which looks sharper than simply resizing.)
  4. Pick PNG, JPEG or WebP. Transparency is kept for PNG and WebP.
  5. Run it. Every result in the dataset has a direct link to the upscaled file, plus the original and new dimensions.

Under the hood it's Real-ESRGAN (realesr-general-x4v3, BSD-3-Clause) running on CPU, so there's no GPU to rent and nothing to install. It also cleans up JPEG artefacts and noise while it upscales, which matters a lot for supplier photos.

What it costs

$0.01 per output image up to 4 megapixels. A 500×500 photo upscaled 4x becomes 2000×2000 (4 MP), so 1,000 product photos ≈ $10. Larger outputs count as one image per started 4 MP. Failed downloads and unsupported files are never charged.

A real test: a 960×431 photo became 3840×1724 in about 10 seconds.

Bulk upscaling from code

from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("digitalni.produkty.pro.zivot/ai-image-upscaler").call(
    run_input={
        "imageUrls": [
            "https://example.com/products/sku-1001.jpg",
            "https://example.com/products/sku-1002.jpg",
        ],
        "scale": "4",
    }
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["sourceUrl"], "->", item["imageUrl"], item["width"], "x", item["height"])
Enter fullscreen mode Exit fullscreen mode

No-code: plug it into your workflow

  • Make / Zapier / n8n: new product in your shop → run the Actor with the image URL → save the upscaled image back to Google Drive or your CMS.
  • Google Sheets: keep a column of image URLs, run the Actor on a schedule, and export the dataset with the new links.
  • AI agents: through the Apify MCP server, Claude or ChatGPT can call the upscaler as a tool ("make these 20 images print-ready").

Good to know

  • The AI adds plausible detail. It can't recover information that isn't there (for example, unreadable small text).
  • Faces are upscaled like the rest of the image, with no separate face-restoration model.
  • Only upscale images you have the rights to use.

Other good fits: AI art (Midjourney / Stable Diffusion outputs to print size), old scanned photos, thumbnails for blog headers, and images for print-on-demand merch.


Disclosure: I built this tool. If you need something it doesn't do yet (background removal is coming), tell me in the Issues tab.

Top comments (0)