BRUT DOCS getbrut.app ↗

Image generation

The core image nodes. All of them take a prompt (and, where relevant, images) and produce an image on a provider of your choice.

Text → Image

Generate an image from a prompt. Pick a provider and model, set the aspect ratio and (on Gemini) the resolution, wire a prompt in, run. This is the starting point of most graphs — see Your first image. A ratio a model does not render at the chosen size is greyed in place with the reason (Ideogram 4.5 has no 21:9 at 1K: pick 2K).

Providers: Gemini (Nano Banana family), OpenAI (GPT Image 2, plus GPT Image 2.5 Flare and Sunburst; the 2.5 pair unlocks two extra quality steps, xhigh and max, on the quality select) and Seedream (BytePlus's Seedream 5.0 Pro, Flash and Lite, on the Seedance key: 1K / 1.5K / 2K, Lite 2K / 3K / 4K, from $0.018 per image; you get exactly the size you pick).

Every image node's footer shows its result's resolution (2048 × 1152, · ×4 on a batch) at the bottom left, on the output pin's row, the real pixel size of the file, not the preview's. Every image node's title bar has ▶ (run this node and what it needs; unchanged inputs replay the last result, free), 🕘 (history: every past result, pin one) and ↻ re-roll (a fresh take with the same inputs: bills again, the current take stays in history). See Never pay twice.

Image → Image

Edit or transform an existing image with a prompt. Wire an Image In (or any upstream image) into the image inlet and a prompt into prompt. Good for variations, retouching, and style changes.

With nothing wired into image, the node renders the prompt as text-to-image on the same model (when the model offers it) and says so in the activity log; an aspect of auto then falls back to the model's own default aspect, since there is no input to follow.

Size on Seedream: Same as the picture. On the Seedream models the Size menu of this node, of Inpaint, of Compose and of Annotate & Correct opens with Same as the picture, and it is the default when you switch the node to Seedream: the edit comes back at the input's own pixel dimensions (on Compose, the scene's), so nothing has to be scaled or cropped when it is laid over the original in a Layers or Compare node. (The model still redraws the frame: the result can sit a few pixels off, see Annotate & Correct.) The model's range decides how far that holds: Pro and Flash render 0.9 to 4.6 MP, Lite 3.7 to 16.8 MP; a picture below the range comes back at the model's smallest size, one above it at its largest, with the proportions kept. Pick a size from the menu to resample on purpose. See Seedream.

Gemini gotcha: Gemini sometimes sends back no picture and no reason: that is a silent refusal (shown as OTHER or IMAGE_OTHER), usually triggered by an input image (a real person's name in facade lettering, a face, a logo), not the prompt. It happens again every time, so Brut doesn't retry it. Fix by removing or cropping the offending image.

Inpaint

Steer an edit to a painted region of an image. The mask tells the model where the change goes; it doesn't lock the rest of the picture (see what the mask does and does not do below). The mask editor works like the Layers editor: wheel zooms at the cursor (up to 12×), middle-drag pans, Fit (or 0) resets, the brush circle under the pointer shows the real size, [ / ] and Alt+right-drag resize it, B / E switch brush and eraser. On OpenAI the output comes back at the input's own size (a 2K render stays 2K).

  1. Wire an image into the Inpaint node and run upstream once so it has an output.
  2. Click 🖌 Paint mask to open the mask editor. Brush over what should change (red overlay), at the image's native resolution. Erase to correct.
  3. Type a prompt describing the change and run.
Paint the region, write what changes, run: the change lands where you painted
Painting works like the Sketchpad:

↳ Inpaint result (under the result) starts the next pass on that result. It places a new Inpaint node wired to this node's output, with its own Prompt node holding a copy of this prompt, and opens the mask editor on the result. Paint the next region, edit the new prompt, run. The first pass stays as it is and is not billed again, and each pass keeps its own mask and its own 🕘 history.

What the mask does and does not do

The mask steers the edit; it doesn't lock the rest. Every provider redraws the whole image, so the area outside the mask comes back close to the original but not pixel-identical: fine texture changes everywhere, and sometimes structural changes near the edit (a window mullion redrawn, a door frame half kept). This is true of every provider, OpenAI included, and OpenAI's own guide says so: "Masking with GPT Image is entirely prompt-based."

Annotate & Correct

Point at things on the image and say what changes — Inpaint's smarter sibling, and the way clients already brief: markup on a picture.

  1. Wire an image into the Annotate node and run upstream once so it has an output.
  2. Click ✏ Annotate to open the editor. Draw arrows (point at the exact object), boxes / circles (hold Alt to draw from the center), a freehand lasso or a click-placed polygon (click corners; close on the first corner or double-click — Backspace undoes a corner, Esc cancels), or drop a numbered point marker. Give each mark a note ("change this chair to a deep red", "remove this lamp") and, optionally:
    • a color chip — pick on the color wheel, browse the RAL Classic swatch grid (216 colors with search, the archviz-native vocabulary clients actually speak; screen colors approximate the physical RAL chips), or use the eyedropper to sample a color straight from the image ("make it THIS color");
    • a reference image — drop or browse an image onto the mark's card: "replace THIS with the object shown". References are lettered (A, B, …) in the editor. Exotic formats (AVIF from a Google Images drag, for instance) are converted automatically.
A box with its note and a reference image, an arrow with its note; Seedream Flash applies the two edits where they were drawn
**Wheel zooms, middle-drag pans** — for detailed work at native resolution. In **Select**, a selected lasso or polygon shows a handle on every corner, so the outline can be refined point by point. 3. Run. No prompt needed — the marks *are* the prompt. A wired `prompt` is optional and rides along as a global instruction ("keep the late-afternoon light").

Each model gets your marks in the form it reads best, and the result always comes back clean, with no markers in it.

Seedream on this node

Pick Seedream (BytePlus) as the provider: Pro and Flash are on the menu (Lite doesn't follow marks and stays off). On a test interior with five marks, one of each kind (recolor the sofa to a RAL green, remove the coffee table, hang a painting at a point on the wall, lay a rug inside a circle, fill a shelf outlined with a lasso), then with a reference armchair placed in a box:

Seedream 5.0 Flash Seedream 5.0 Pro Nano Banana 2
The five edits all five, each at its mark all five, each at its mark all five, but the painting on another wall and the rug three times the circle
Size of the result 2048 × 1143, the input's own 2048 × 1143, the input's own 2752 × 1536
Sofa color vs the RAL asked (#114232) #264933 #164335 #344d41
Cost and time $0.018, 21 s $0.045, 41 s $0.10, 16 s

One scene is not a ranking, and Nano Banana Pro was not in that run. What it does show: on Seedream an edit lands where you marked it, the result comes back at the picture's own dimensions, and a correction pass on Flash costs under two cents.

Notes:

Reconcile with input

A generative edit redraws the whole picture. Even when the result has the same size as the input, everything in it has moved a little (a few pixels) and has been re-rendered in detail, with small tone shifts on top. 🗇 Reconcile with input, under the node's result, gives you the picture you actually wanted: the original, pixel for pixel, with only the edits in it.

One click spawns a Layers node, already set up and composited:

  1. The original is the base. Everything the edit did not touch stays the original's own pixels.
  2. The result sits on top, lined up with the original, so an edit meets its surroundings without a step. The layer's row says aligned.
  3. A mask shows only the edits you asked for: the new object, the opened door, with a little room for a shadow. Everything else stays the original's.
Reconcile with input: the Layers node opens with the original as base, the result aligned on top and masked to the two edits; a brush stroke reveals a little more
Then the Layers editor opens on that mask, an ordinary one: paint white to show more of the edit (a longer shadow, a reflection), black to give an area back to the original. **✓ Use this stack** composites again, free.

Layers

Photoshop-style compositing, local and free — the node never calls a provider.

Wire two or more images in (the bottom wire is the base), then open 🗇 Edit layers & masks. The layer tray speaks Photoshop:

Why it matters beyond convenience: generative edits keep "everything else unchanged" only approximately — the whole frame regenerates and untouched regions drift subtly. Layers clamps every unpainted region back to the source pixels. Stack the original under a generation, mask in just the part you wanted changed, and the deliverable is pixel-faithful everywhere else.

Paint the original back wherever the model overreached, feathered, local and free
Notes:

Compose

Blend a scene with one or more reference images. Wire the base image into scene, the sources you want to pull from into reference, and a prompt describing the blend. Compose is handy for dropping entourage, materials or mood from references into a render.

Scene, reference and prompt in; the reference rendered into the scene, not pasted
Scene, reference and prompt in; the reference rendered into the scene, not pasted
It is also the house tool for **grade transfer**: scene = your shot, reference = the image whose look you want, prompt = the built-in **Grade match** preset (in the Prompt node's Presets menu) — the palette, tones and mood carry over while the architecture stays untouched. This is the recommended finishing pass after a Multi-Shot exploration.

The same pass can borrow the reference's camera too: the Grade & camera match preset asks for its "filmic point of view" as well, and the shot is reframed to the reference's way of seeing — angle, symmetry, distance — while the building stays yours. For example, a daytime pool shot became a frontal mirror composition in one call.

Choosing a model

The menu always lists the current models, each with its default settings. Cheapest-to-richest on Gemini: Nano Banana 2 Lite ($0.03, text-to-image only: it can't edit) → Nano Banana 2.1 ($0.034 at 1K, up to 4K, edits and up to 14 references) → Nano Banana Pro (up to 4K). Nano Banana 2 is still on the menu but retires on 29 October 2026; Nano Banana 2.1 replaces it. For edits, the original Nano Banana (~$0.04) is still the cheapest and stays on the edit menus. On the BytePlus key, Seedream 5.0 undercuts all of them: Flash at $0.018 per image for exploration, Pro at $0.045 (2K $0.09) for photoreal keepers, Lite at $0.035 up to 4K. A text-to-image picture of people from any of the three (Pro, Flash or Lite, the whole picture) is accepted by Seedance as a start frame or reference; Seedream edits and crops are refused. On an Ideogram key, Ideogram 4.5 is the pick for lettering and layout, and Ideogram 4.5 Precise Edit for a correction that must leave the rest of the picture exactly as it was. See Providers for the full list and billing notes.

Next

→ Multi-Shot & boards — explore many viewpoints at once.