Photo to cyanotype print: Qwen Image edit or a Pillow colorize?

A cyanotype look is two tones, so Pillow can do it free. Use qwen/qwen-image at $0.025 only when you want paper texture and brushed edges. Both steps here.

5 min readSume
All posts

A cyanotype is a two-tone image, white highlights on Prussian blue, so you can make one from any photo with Pillow alone: grayscale, autocontrast, then ImageOps.colorize with a dark blue black point and a pale blue-white white point. That costs nothing. Use an image model, qwen/qwen-image at $0.025 per image in the Sume catalog I read, only when you want what Pillow cannot add: uneven brush edges, a paper border and visible exposure streaks.

What does the free Pillow route give me?

A clean, even, digital cyanotype. The mapping is deterministic, so every photo in a batch gets the same two inks. It will not invent a hand-coated border or fibre texture, which is why people reach for an edit model.

Pick the two colors once and reuse them. The script below also loops over a folder so a set of photos stays consistent.

from pathlib import Path
from PIL import Image, ImageOps

INK = "#0b2a5b"    # deep Prussian blue
PAPER = "#e8f1fb"  # pale blue-white

Path("cyano").mkdir(exist_ok=True)
for src in Path("photos").glob("*.jpg"):
    gray = ImageOps.grayscale(Image.open(src))
    gray = ImageOps.autocontrast(gray, cutoff=2)
    out = ImageOps.colorize(gray, black=INK, white=PAPER)
    out.save(Path("cyano") / f"{src.stem}.png")
    print("wrote", src.stem)

When is the Qwen edit worth the 2.5 cents?

When the print should look hand-made. Send the photo as one input_references entry to qwen/qwen-image and ask for a cyanotype with a rough brushed border and visible paper fibre. Sume's catalog lists this row as edit-capable with up to 10 references, PNG, JPEG or WebP output, and 1 to 4 images per call. It has no quality or resolution field, so a request that sends one gets 400 unsupported_parameter.

The aspect list for this row has no auto value, so pin the ratio yourself: 3:4 for a portrait photo, 4:3 for landscape. Sume's docs warn that leaving the field off on an edit is not the same as auto, and this row does not offer auto to begin with.

Cyanotype routes compared, using Sume's Image API docs and the catalog's flat endpoint rate for qwen/qwen-image, read 2026-10-11.
RouteCost per photoBorder and textureRepeatable?
Pillow colorize$0None, flat two-toneIdentical every time
qwen/qwen-image edit$0.025Prompted, variesDiffers per run
Edit, then Pillow colorize$0.025Prompted, ink forced to your two colorsInk identical, texture varies

Should I run both?

Yes, if the edit comes back with a greenish or purple blue. Run the model's output through the same colorize step to force your two inks, and keep its texture. Qwen's own newer checkpoint, Qwen-Image-2.1-Turbo, is described on its model card as a 7B model that runs in 8 steps, but Sume does not say which Qwen version its qwen/qwen-image row runs, so judge it on the output, not the model card.

If a request exceeds the 30-second wait it returns 202; read the picture from the job result as described in Jobs and results.

Sources

Related posts

More in Use cases

All Use cases posts

Written by Sume