FLUX 3 Image's New, Anchor and Move elements as Sume edit prompts
BFL's FLUX 3 Image tags every box as New, Anchor or Move. Sume has no box field, so here is how each tag maps to a prompt, a mask or a two-pass edit.

FLUX 3 Image labels every element in a layout as New, Anchor or Move, and Sume's Image API has no field for any of them. You get the same three jobs done differently: New becomes an instruction in the prompt, Anchor becomes a preserve list plus, on GPT Image 2.5, a mask, and Move becomes two edits because no Sume model has a move operation.
That is the honest answer to "can I do FLUX 3 style box edits on Sume": the effects are reachable for most edits, but the control is looser. BFL's docs describe a structured request. Sume's current docs describe a prompt, up to 10 reference images on most edit models (16 on ChatGPT Image 2.5) and an optional mask_url for ChatGPT Image 2.5 edits.
What BFL's three tags mean
From BFL's FLUX 3 Image documentation: New is generated content added to the image, Anchor is content preserved unchanged from a reference, and Move is content repositioned from a source location to a target location. Boxes use [y0, x0, y1, x1] coordinates on a 0 to 1000 grid. The docs also show recolor and replace edits, including several replacements in one request.
| BFL element | Meaning | Closest thing on Sume | How close |
|---|---|---|---|
| New | Generated content placed in a box | Add X in the left third, plus mask_url on GPT Image 2.5 | Close for placement, loose on exact size |
| Anchor | Kept unchanged from a reference | A preserve list in the prompt; a mask that leaves the region opaque | Guidance, not a guarantee |
| Move | Repositioned source to target | Erase pass, then place pass | Two paid jobs, drift risk |
| Recolor / Replace | Edit one element, keep the rest | One masked edit per element | Good on a clean mask |
Writing the three as a prompt
A small builder keeps the wording consistent across edits. Anchors become one closing sentence listing what to keep, which is the form the habit our GPT Image 2.5 edit-drift post recommends repeating on every turn, because edits drift over several rounds. It deliberately refuses move rather than pretending the prompt can do it.
def edit_prompt(elements):
"""elements: list of dicts with kind new|anchor|move|replace|recolor, name, and optional where/to."""
keep = [e["name"] for e in elements if e["kind"] == "anchor"]
steps = []
for e in elements:
k = e["kind"]
if k == "new":
steps.append(f"Add {e['name']} {e.get('where', '')}".strip())
elif k == "replace":
steps.append(f"Replace {e['name']} with {e['to']}")
elif k == "recolor":
steps.append(f"Recolor {e['name']} to {e['to']}")
elif k == "move":
raise ValueError("no move operation: run an erase pass, then a place pass")
prompt = ". ".join(steps) + "."
if keep:
prompt += " Keep exactly as in the input: " + ", ".join(keep) + ". Change nothing else."
return prompt
print(edit_prompt([
{"kind": "recolor", "name": "the sofa", "to": "forest green"},
{"kind": "new", "name": "a floor lamp", "where": "in the left third"},
{"kind": "anchor", "name": "the window and curtains"},
{"kind": "anchor", "name": "the rug"},
]))Where the mapping breaks
A mask on Sume is guidance. The docs for GPT Image 2.5 list mask_url as an optional public HTTPS URL and no other model accepts it; a request that sets an unsupported parameter is rejected with 400 unsupported_parameter. Reports of edits leaking outside a mask are the reason to verify unchanged areas yourself instead of trusting the label "Anchor".
Move is the weakest mapping. FLUX 3 Image takes it as an element type. On Sume you erase the object at the old location with a masked edit, then place it at the new one with a second masked edit that takes the object as a reference. Each pass is a paid generation that can shift pixels, so check the result against the original before you ship.
Which one to reach for
If your edits are recolor, replace and add on a stable photo, GPT Image 2.5 with a mask and a preserve list gets you most of the way. If your core need is a layout of many labelled boxes with exact pixel preservation, that is what BFL built FLUX 3 Image for, and it is not something Sume lists today. Both facts can be true in one pipeline: keep Sume for the generation and edit steps it serves and decide on BFL separately.
For the box-to-mask conversion itself, see FLUX 3 bounding box to mask URL in Python. For the Sume side of mask edits, the Image API docs list the fields.
Sources
Related posts
More in Developers
- FLUX 3 Image on OpenRouter: n=1, seed, base64 vs Sume
OpenRouter lists FLUX.3 Image with one image per call, a seed and base64 PNG output. How each differs from Sume's POST /v1/images, where FLUX 3 is not listed.
- FLUX 3 Image on Replicate: safety_tolerance 0-4 vs Sume
Replicate's FLUX 3 Image form has safety_tolerance 0-4, grounding, output_quality and 768sq-4k. Which of those inputs Sume's image API has, and what it returns.
- Format contents PUT 409 format_content_sha_required: send the sha
PUT on a Format file that already exists needs its blob sha. Read the sha with GET, retry, and tell the three 409 codes apart from the package If-Match guard.
- Format 404 format_not_found: five causes, including a pending grant
A Sume 404 format_not_found can mean a typo, an archived Format, the wrong workspace, a team handle you are not in, or a shared Format whose grant is pending.
Written by Sume