live
MODEL IDminimax:h3@image

MiniMax H3 Image

MiniMax
by

MiniMax H3 Image is an open-weights image generation and editing model from MiniMax. It creates images from text or edits and combines up to 16 reference images, at 1K, 2K or 4K, or at a custom width and height up to 20 megapixels. It follows counts, positions and layouts closely and renders long, dense text, which suits product and marketing visuals, posters and infographics, concept art, and compositions that merge several subjects.

MiniMax H3 Image

Text and layouts

How to get exact copy and structured layouts from MiniMax H3 Image: quoted text, charts and figures, dense pages, app screens, and grids and storyboards.

Introduction

MiniMax H3 Image sets the copy you write into the prompt and arranges it the way the prompt describes. MiniMax built the model for long, dense text in English and other languages, and for counts, positions and layouts, which is the work behind posters, infographics, app screens and multi-panel pages. The conference poster below carries 25 quoted strings from a single request.

A repeated row is described once and then listed. The prompt sets the time, title and speaker columns in one clause, then gives the six talks as data in that order.

This guide covers quoting exact text, type hierarchy and line breaks, charts and educational figures, dense pages, app screens, grids and storyboards, and the size that suits each deliverable. Every request here leaves the prompt optimizer on, its default, and the prompt optimizer guide covers when to turn it off. Prompt structure and the two size fields are in the prompting guide, and changing the text of an image you already have is in editing images.

Quoting exact text

Put every string you want printed inside quotation marks, with its position on the image. Quoted text is copy to set as written, and everything outside the quotes describes the picture. When you want the model to write the copy itself, say so, and give it the facts the copy has to carry. The two posts below share one scene. The first prompt quotes four strings, and the second hands the model the same facts and asks it to word them.

The first post is the one to ship once the wording is approved, because the quoted strings print as written. The second gives you the model's own wording of the same offer, "DAWN RIDE" over a "Join Now" button, which is a starting point when you want headline options instead of one fixed line. Both prompts end with "No other text.", which tells the model that the copy it was given is all the copy there is.

Hierarchy and line breaks

A design with several strings needs a rank for each one. Give every string its own clause with a position, a size relative to the others and a weight, and where a string runs over more than one line, say where it breaks. The can below sets its flavor on two lines, "BLOOD ORANGE" on the first and "& YUZU" on the second.

Relative sizes set the ranking. "Large" and "small" say which line outranks which. A point size cannot do that on a product the model draws at a scale of its own choosing.

Charts and figures

An information graphic is only as accurate as the numbers in its prompt. Write every value with its unit, say how the values relate, and for anything that changes over time, state the time range in the title. When the numbers are placeholders, label them as example data in the prompt and on the graphic, so a mockup is never read as a real result.

Try in Playground
import { createClient } from '@runware/sdk'

const client = await createClient({ apiKey: process.env.RUNWARE_API_KEY })
await client.connect()

const [result] = await client.run({
  model: 'minimax:h3@image',
  positivePrompt: 'A 16:9 slide for a half-year business report, flat vector design on a white background with dark navy type and a single teal accent. Title at the top left in bold navy: "Online orders per month, January to June 2026". Below the title, a vertical bar chart filling most of the slide, with six teal bars, one per month from left to right, the month under each bar and its value above it: "Jan" with "1,240", "Feb" with "1,310", "Mar" with "1,580", "Apr" with "1,720", "May" with "1,950", "Jun" with "2,240". The y-axis on the left runs from 0 to 2,500 in steps of 500, labeled "Orders", with light gray gridlines. Each bar height matches its value on the axis, so the bars rise from January to June and June is the tallest. In the lower right corner, a small gray note: "Example data". No other text.',
  width: 3200,
  height: 1800
})
import asyncio
import os

from runware import Runware


async def main():
    async with Runware(api_key=os.environ["RUNWARE_API_KEY"]) as client:
        results = await client.run({
            "model": "minimax:h3@image",
            "positivePrompt": "A 16:9 slide for a half-year business report, flat vector design on a white background with dark navy type and a single teal accent. Title at the top left in bold navy: \"Online orders per month, January to June 2026\". Below the title, a vertical bar chart filling most of the slide, with six teal bars, one per month from left to right, the month under each bar and its value above it: \"Jan\" with \"1,240\", \"Feb\" with \"1,310\", \"Mar\" with \"1,580\", \"Apr\" with \"1,720\", \"May\" with \"1,950\", \"Jun\" with \"2,240\". The y-axis on the left runs from 0 to 2,500 in steps of 500, labeled \"Orders\", with light gray gridlines. Each bar height matches its value on the axis, so the bars rise from January to June and June is the tallest. In the lower right corner, a small gray note: \"Example data\". No other text.",
            "width": 3200,
            "height": 1800
        })


asyncio.run(main())
curl https://api.runware.ai/v1 \
  -H "Authorization: Bearer $RUNWARE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '[
    {
      "taskType": "imageInference",
      "taskUUID": "8d2f6a1e-4b7c-4e93-a5d0-3c9e1b7f2a64",
      "model": "minimax:h3@image",
      "positivePrompt": "A 16:9 slide for a half-year business report, flat vector design on a white background with dark navy type and a single teal accent. Title at the top left in bold navy: \"Online orders per month, January to June 2026\". Below the title, a vertical bar chart filling most of the slide, with six teal bars, one per month from left to right, the month under each bar and its value above it: \"Jan\" with \"1,240\", \"Feb\" with \"1,310\", \"Mar\" with \"1,580\", \"Apr\" with \"1,720\", \"May\" with \"1,950\", \"Jun\" with \"2,240\". The y-axis on the left runs from 0 to 2,500 in steps of 500, labeled \"Orders\", with light gray gridlines. Each bar height matches its value on the axis, so the bars rise from January to June and June is the tallest. In the lower right corner, a small gray note: \"Example data\". No other text.",
      "width": 3200,
      "height": 1800
    }
  ]'
runware run minimax:h3@image \
  positivePrompt="A 16:9 slide for a half-year business report, flat vector design on a white background with dark navy type and a single teal accent. Title at the top left in bold navy: \"Online orders per month, January to June 2026\". Below the title, a vertical bar chart filling most of the slide, with six teal bars, one per month from left to right, the month under each bar and its value above it: \"Jan\" with \"1,240\", \"Feb\" with \"1,310\", \"Mar\" with \"1,580\", \"Apr\" with \"1,720\", \"May\" with \"1,950\", \"Jun\" with \"2,240\". The y-axis on the left runs from 0 to 2,500 in steps of 500, labeled \"Orders\", with light gray gridlines. Each bar height matches its value on the axis, so the bars rise from January to June and June is the tallest. In the lower right corner, a small gray note: \"Example data\". No other text." \
  width=3200 \
  height=1800
{
  "taskType": "imageInference",
  "taskUUID": "8d2f6a1e-4b7c-4e93-a5d0-3c9e1b7f2a64",
  "model": "minimax:h3@image",
  "positivePrompt": "A 16:9 slide for a half-year business report, flat vector design on a white background with dark navy type and a single teal accent. Title at the top left in bold navy: \"Online orders per month, January to June 2026\". Below the title, a vertical bar chart filling most of the slide, with six teal bars, one per month from left to right, the month under each bar and its value above it: \"Jan\" with \"1,240\", \"Feb\" with \"1,310\", \"Mar\" with \"1,580\", \"Apr\" with \"1,720\", \"May\" with \"1,950\", \"Jun\" with \"2,240\". The y-axis on the left runs from 0 to 2,500 in steps of 500, labeled \"Orders\", with light gray gridlines. Each bar height matches its value on the axis, so the bars rise from January to June and June is the tallest. In the lower right corner, a small gray note: \"Example data\". No other text.",
  "width": 3200,
  "height": 1800
}
Response
[
  {
    "taskType": "imageInference",
    "taskUUID": "8d2f6a1e-4b7c-4e93-a5d0-3c9e1b7f2a64",
    "imageUUID": "c41b9e07-2d5a-4f68-9b3e-7a0d5c2e8f19",
    "imageURL": "https://im.runware.ai/image/os/a14d18/ws/2/ii/c41b9e07-2d5a-4f68-9b3e-7a0d5c2e8f19.jpg"
  }
]

Describe the shape of the data in words as well as in numbers. "The bars rise from January to June and June is the tallest" states the six values a second time as a relationship, and the order of the bars follows it. Bar heights are approximate, though. Every value prints exactly, but in two runs of this prompt the lower bars came out short of the axis, with January's 1,240 stopping near 1,060. Print the value on each bar, as here, so the chart reads correctly, and plot data that has to be measured with a charting tool.

Educational figures take the same care, with values from a source you trust. The classroom chart below quotes a depth range in kilometers for each layer of the Earth and says whether the layer is solid or liquid.

Relationships belong in the prompt next to the numbers, down to where each leader line starts. This prompt anchors every line inside the layer it labels, and the inner core's at the very center, so no label is left to land on a neighboring layer.

Dense layouts

For a page with many parts, describe the structure before the content. Open with the sections in reading order, then give each section a sentence of its own that says how its parts sit against each other, such as "on the left, two thirds of the width" or "three equal photos side by side". The listing flyer prompt is built that way:

A one-page real estate listing flyer, US Letter portrait, clean modern layout on white with charcoal type and a deep green accent, The page has four sections from top to bottom: a header band, a main row with a photo and key facts, a strip of three interior photos, and a footer with a description and the agent contact block, Header band: a deep green band across the full width with "JUST LISTED" in small white capitals on the left and the price "$685,000" in large bold white type on the right, and under the band the address "1428 Linden Avenue, Asheville, NC" in bold charcoal type, Main row: on the left, two thirds of the width, a large exterior photo of a two-story craftsman house with a covered front porch and a green lawn on a sunny afternoon. On the right, one third of the width, a column of four key facts, each a large bold number over a small label: "4" over "Bedrooms", "3" over "Bathrooms", "2,350" over "Sq ft", "0.28" over "Acres", Photo strip: three equal photos side by side, a bright kitchen with a white island, a living room with a stone fireplace and a bedroom with large windows, with the captions "Kitchen", "Living room" and "Primary suite" under them, Footer: on the left, the heading "About this home" over a short paragraph that you write yourself about the porch, the open kitchen and the quiet tree-lined street. On the right, a circular headshot of a smiling woman in her forties beside the name "Renee Castillo", the line "Castillo & Co. Realty" and the phone number "(828) 555-0142", Crisp print typography, no other text
DeliverableStructureHeaderMain rowPhoto stripFooterFinish

The structure sentence is the page in one line, and each sentence after it opens with the name of the section it fills. The paragraph under "About this home" is the one block of copy left unquoted, and the prompt asks the model to write it around the points it should cover. Quote it instead once the agent has approved the wording.

App screens

Treat a UI mockup as a dense layout with named regions. List the regions from top to bottom, then fill each one, quoting every label inside the region it belongs to.

Check the numbers before they go into the prompt. $25.98, $3.50 and $4.25 add up to the $33.73 total on the screen. The model sets the figures it is given, so a total or a percentage split has to be right in the prompt.

Grids and storyboards

Write a grid as rows and columns in words, as in "a grid of 2 rows and 3 columns". The shorthand "2×3" reads either way around, so if you use it, say which number is which: "2×3 (rows × columns)". Then fill the grid row by row, left to right, so every panel has an address.

Shared details are set only once. Everything the six panels have in common, from the model to the studio wall, stays out of the panel clauses, and each panel clause adds only the outfit. The captions are listed in the same row order, which pairs MONDAY with the first look and SATURDAY with the last.

For an irregular arrangement, describe it the way it looks: "3 panels on top and 2 wider panels below". The resort storyboard below uses that layout and gives each row a sentence of its own.

Number and time every shot. The five timings add up to the 20 seconds the prompt opens with, so the board doubles as a shot list for whoever edits the video.

Sizes per deliverable

Pick the size from the slot the image fills. Every example in this guide sends an exact width and height, and the model generates that size as given, so the file needs no crop or resize:

DeliverableSizeShape
Conference poster2400 × 36002:3 portrait
Social feed post2160 × 27004:5 portrait
Can packshot2048 × 20481:1
Report slide3200 × 180016:9
Classroom chart2400 × 32003:4 portrait
Listing flyer2550 × 3300US Letter at 300 dpi
App screen1440 × 25609:16
Lookbook grid3600 × 24003:2
Storyboard3840 × 216016:9

Print pieces take print pixels. A US Letter page at 300 dpi is 2550 × 3300, which is inside the model's limits, so the flyer comes back at the size a print shop works from. When no slot fixes the shape, send resolution instead. The model then picks the ratio from the prompt, so name the shape in words, the way these prompts do with "portrait 2:3" and "a 16:9 slide". The prompting guide covers both size fields and their limits.

Tips

  1. Quote every string that has to be exact. Text inside quotation marks is set as written, and text outside them describes the image.

  2. Ask outright for copy you want written. "Write the copy yourself", with the facts it has to carry, gets you the model's wording on purpose.

  3. End with "no other text". It marks the quoted strings as the full copy of the design.

  4. Give each string a position, a relative size and its line breaks. One clause per string, with words like "large" and "small" to set the ranking.

  5. Write values with their units and the time range. Check totals and percentages before they go into the prompt, label placeholder numbers as example data on the graphic, and print each value on its bar, since bar heights come out approximate.

  6. Name the sections before their content. Start with "four sections from top to bottom", then give each section a sentence that opens with its name.

  7. Spell out grids in rows and columns. Write "2 rows and 3 columns" or "2×3 (rows × columns)", and describe uneven layouts directly, such as "3 panels on top and 2 below".

  8. Size each piece for its slot. An exact width and height come back as sent, so match the slot the file goes into, from a feed post to a printed page.

  9. Proofread the small type. Every misspelling in this guide's runs fell in small text, such as a button label or a line of fine print, never in a headline. Read every string before the image ships, and regenerate when one is off.