Photo to woodcut print: Flux 2 Flex edit, then a 1-bit threshold

Make a woodcut from a photo with Flux 2 Flex on Sume at $0.0625, then force true 1-bit black and white in Pillow so the file is ready for print.

5 min readSume
All posts

To turn a photo into a woodcut on Sume, send it as an input_references entry to black-forest-labs/flux.2-flex with a prompt for bold black carved lines on white, pin an aspect ratio the row lists, then threshold the result in Pillow with convert("L").point(...) and convert("1") so every pixel is pure black or white. The Sume catalog price for this row is $0.0625 per image, so three candidate cuts cost $0.1875.

Why add a threshold after the model?

A model can return a woodcut-like picture with soft gray anti-aliasing, and gray is the thing a block print does not have. Thresholding is the step that turns "looks like a woodcut" into a file a laser cutter, a vinyl cutter or a screen-print shop can use. It also exposes weak images: if the threshold turns faces into black blobs, the cut had too little contrast, and a rerun with a stronger prompt is cheaper than fixing it by hand.

from PIL import Image

CUT = 140  # raise for thinner black, lower for heavier black

im = Image.open("woodcut.png").convert("L")
bw = im.point(lambda v: 255 if v > CUT else 0).convert("1")
bw.save("woodcut_1bit.png")

black = sum(1 for v in bw.getdata() if v == 0)
share = 100 * black / (bw.width * bw.height)
print(f"black coverage: {share:.1f}%")

What goes wrong after the threshold?

Mid-tone areas turn into noise, because a single cutoff splits every gray into black or white. If the sky or skin breaks into speckles, run ImageOps.autocontrast on the grayscale before the point call, or blur by a pixel first. If the whole picture goes black, raise CUT; if the lines vanish, lower it. Print the black coverage for each candidate cut and keep the one whose coverage matches the ink density you want, since that number is comparable across all three renders.

What does Flux 2 Flex accept on Sume?

The catalog lists it as edit-capable with up to 10 references and 1 to 4 images per call. Its ratios are 1:1, 16:9, 9:16, 4:3, 3:4, 4:5, 5:4, 3:2, 2:3, 21:9, 9:21, 1:2 and 2:1, with no auto. This row also accepts custom pixels through image_size, and when you send image_size it takes priority over aspect_ratio, so send one of the two, not both. Sume's docs say fields a model does not list, such as quality here, return 400 unsupported_parameter.

Flux 2 Flex settings for a woodcut edit, from Sume's Image API docs and catalog descriptors, read 2026-10-11.
SettingValue
Model idblack-forest-labs/flux.2-flex
Catalog price$0.0625 per image
Aspect ratios13 values, no auto
Custom pixelsimage_size accepted; wins over aspect_ratio
qualityNot listed, returns 400

Which prompt works for carved lines?

Describe the process, not the subject: "woodcut print, bold black carved lines, hatching for shadow, white paper, no gray, no gradients." Keep the subject from the photo implicit by sending it as the reference, and say what to preserve, such as the pose and the horizon line.

The edit path returns the image directly when it finishes inside 30 seconds and a 202 job envelope otherwise. Check the status code first, as described in Jobs and results.

Sources

Related posts

More in Use cases

All Use cases posts

Written by Sume