FLUX 3 Image 0-1000 boxes to pixels on a 1920x1080 canvas

FLUX 3 Image boxes are [top, left, bottom, right] on a 0-1000 grid. The BFL example [250, 50, 850, 650] becomes x 96, y 270, 1152x648 pixels on 1920x1080.

4 min readSume
All posts

The BFL example box [250, 50, 850, 650] is [top, left, bottom, right] on a 0-1000 grid, so on a 1920x1080 canvas it covers x 96 to 1248 and y 270 to 918, a 1152x648 pixel rectangle. The pixel values are writer-derived: value / 1000 x canvas size. FLUX 3 Image is not in the Sume image catalog today; check GET /v1/images/models for the live list. The catalog lists FLUX.2 Pro and FLUX.2 Flex.

The format

BFL's bounding-box page says the grid is normalized from 0 to 1000 on both axes, and the model page repeats the 0-1000 layout grid. The order is y first. Three box kinds exist: new generates content at tgt_bbox, move relocates from src_bbox to tgt_bbox, and anchor preserves a region at the same position.

FLUX 3 Image bounding boxes, read 2026-10-05
ItemValue on the BFL page
Grid0-1000 on both axes
Order[top, left, bottom, right]
Kindsnew, move, anchor
Example[250, 50, 850, 650]

The arithmetic for 1920x1080

Each coordinate scales by its own axis: top and bottom by height, left and right by width. Because the canvas is not square, a box that looks square on the grid will not be square in pixels.

Worked conversion, writer-derived from the BFL example
EdgeGrid valueFormulaPixels
Top250250 / 1000 x 1080270
Left5050 / 1000 x 192096
Bottom850850 / 1000 x 1080918
Right650650 / 1000 x 19201248

Check the result

Width is 1248 - 96 = 1152 and height is 918 - 270 = 648. The ratio 1152:648 is 16:9, the same as the canvas, because the grid box spans 60 percent of each axis.

A converter

The helper below converts a FLUX 3 box to an x, y, width, height rectangle.

def box_to_pixels(box, width, height):
    top, left, bottom, right = box  # FLUX 3 order: [top, left, bottom, right]
    return {
        "x": round(left / 1000 * width),
        "y": round(top / 1000 * height),
        "w": round((right - left) / 1000 * width),
        "h": round((bottom - top) / 1000 * height),
    }

print(box_to_pixels([250, 50, 850, 650], 1920, 1080))
# {'x': 96, 'y': 270, 'w': 1152, 'h': 648}

On Sume

Sume has no bounding-box field. On Sume, mask_url is accepted only on ChatGPT Image 2.5 (openai/gpt-image-2.5 and openai/gpt-image-2.5-sunburst), so a box would need to be painted into a mask image yourself, using the pixel rectangle above.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume