Recraft V4 on Sume returns WebP only: convert to PNG with Pillow

Recraft V4 on Sume lists webp as its only output format at $0.05 per image. Download the file and convert to PNG or JPEG with Pillow in six lines.

4 min readSume
All posts

Answer

Sume's Recraft V4 row (recraft/recraft-v4) lists webp as its only output_format value and costs $0.05 per image, so a request for png or jpeg is outside what the model advertises. Download the WebP from the Sume-hosted data[].url and convert it with Pillow if your destination needs PNG or JPEG.

The row is text-to-image only: input_references is 0 to 0. It lists 13 aspect ratios and n up to 4.

Convert

Pillow reads WebP when it is built with WebP support, which the standard wheels are. This script fetches a result URL and writes a PNG.

import io, sys
import requests
from PIL import Image

url = sys.argv[1]  # data[0].url from the Sume response
raw = requests.get(url, timeout=60)
raw.raise_for_status()
img = Image.open(io.BytesIO(raw.content))
print(img.format, img.size, img.mode)
img.convert("RGB").save("out.jpg", quality=92)
img.save("out.png")
Recraft V4 row in the Sume image catalog (read 2026-10-04)
FieldValue
Model idrecraft/recraft-v4
Price per image$0.05
Output formatwebp only
References0, text-to-image only
Aspect ratios13, from 1:2 to 21:9 and 9:21
n1 to 4

Notes

  • Convert to RGB before saving a JPEG, since JPEG has no alpha channel.
  • Lossless conversion keeps the WebP quality; it cannot add detail. Do not upscale by saving to PNG.
  • Ideogram 4.5 and Soul show an empty format list because the provider picks the format. Check the extension of the returned URL, not the request.
  • If you need a PNG straight from the API, use a row that lists png, such as Seedream, Flux or Nano Banana.

Sume bills a completed generation in full, and the conversion happens on your side at no charge. See the Sume Image API docs.

Before a large run

Prices and descriptors change when the catalog changes, so confirm them before you spend. Call GET /v1/images/models/{id}/endpoints for the row you plan to use and read its pricing line and supported_parameters; both come back in one response.

Then run a pilot of three to five images and read usage.cost on each response. Multiply by your planned count for a forecast you can trust. Completed generations are billed in full and failed or cancelled ones are not, so a pilot that errors costs nothing.

For big batches, use mode: "async" or mode: "webhook" with a public HTTPS webhook_url, so no request waits on the 30-second sync limit. Poll GET /v1/jobs/{id}/status and fetch GET /v1/jobs/{id}/result when the job completes.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume