MiniMax H3 Image

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.

Complete technical specification for integration
Ready-to-use code snippets for common workflows
Step-by-step tutorials for advanced use cases
← All GuidesText 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.

An event poster for a one-day product design conference, portrait 2:3, Swiss-style typographic layout on a warm off-white background with black type and a single tomato-red accent. The poster has three sections from top to bottom: a title block, a program, and a footer. Title block: a large tomato-red circle in the upper right corner, partly behind the type. The title set on two lines in a huge black condensed sans serif, "FORM &" on the first line and "FUNCTION" on the second. Under the title in medium tomato-red type, "A one-day conference on product design". Program: the heading "PROGRAM" in small bold black capitals above a thin black rule, then six rows with a thin rule between them, each row with the time on the left in bold, the talk title in the middle and the speaker name on the right in a lighter weight: "09:30", "Opening keynote: Designing for trust", "Dana Whitfield"; "10:30", "Prototyping with real data", "Marcus Ode"; "11:30", "Accessibility from day one", "Priya Raman"; "13:30", "Design systems at scale", "Leo Navarro"; "14:30", "Research that ships", "Hannah Brooks"; "15:30", "Panel: The next interface", "All speakers". Footer: a thin black rule across the full width, with "SATURDAY, MAY 15, 2027" on the left and "HARBOR HALL, PORTLAND" on the right in small bold capitals, and below them, centered, "TICKETS ON SALE MARCH 1" in tomato red. Generous margins, strict alignment to a grid, crisp print typography, no other text.
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.

A 4:5 social feed post for an indoor cycling studio announcing a new early-morning class. A woman in her thirties in a black sports top rides a stationary bike in a dim studio lit with warm amber light, shot from a low side angle, filling the lower two thirds of the frame. The top third is a dark area with white text. At the top in a heavy condensed sans serif, the headline "SUNRISE RIDE". Under it in a lighter weight, "Weekdays at 6:15 AM". Below that in amber, "Your first class is free". In the lower right corner, a white rounded button with black text "BOOK NOW". No other text.

A 4:5 social feed post for an indoor cycling studio announcing a new early-morning class. A woman in her thirties in a black sports top rides a stationary bike in a dim studio lit with warm amber light, shot from a low side angle, filling the lower two thirds of the frame. The top third is a dark area with white text. Write the copy yourself: a short, energetic headline that names the class, in a heavy condensed sans serif at the top, then one line in a lighter weight saying it runs on weekdays at 6:15 AM, then one line in amber saying the first class is free. In the lower right corner, a white rounded button with a two-word call to action in black text that you choose. No other text.
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.

A studio packshot of a slim aluminum can of sparkling water standing on a pale peach backdrop, the can printed in matte coral with white type, facing the camera and filling most of the frame height. Top of the can: the brand "TALLWATER" in small widely spaced capitals. Middle of the can: the flavor name in a large bold rounded sans serif, set on two lines, "BLOOD ORANGE" on the first line and "& YUZU" on the second. Below the flavor name, a thin white band with "ZERO SUGAR · ZERO CALORIES" in small coral capitals. Bottom of the can: "12 FL OZ (355 mL)" in small white type. Soft even studio light, a gentle highlight along the curve of the can, a soft shadow to the right. No other text on the can or the backdrop.
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.

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.
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.

An educational wall chart for a middle school science classroom, portrait 3:4, clean flat illustration on a light cream background with dark charcoal type. Title across the top in bold capitals: "LAYERS OF THE EARTH". Under it in a lighter weight: "Depth below the surface, in kilometers". The center of the chart is a cutaway of the Earth with one quarter removed, showing four concentric layers from the outside in: a thin brown crust, a thick orange mantle, a deep yellow outer core and a pale yellow inner core at the center. Each layer has a thin leader line that starts inside that layer and runs to a label on the right side of the chart, the inner core line starting at the very center of the cutaway, with the layer name in bold and one line below it: "Crust" with "5 to 70 km thick · solid rock"; "Mantle" with "down to 2,900 km · solid rock that flows slowly"; "Outer core" with "2,900 to 5,150 km · liquid iron and nickel"; "Inner core" with "5,150 to 6,371 km · solid iron and nickel". At the bottom, one line in small type: "The crust is thinnest under the oceans and thickest under mountains." No other text.
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.
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.

A high-fidelity mobile app screen for a food delivery app, shown flat as a full-screen UI design with no phone frame, light theme with a white background and a tangerine accent color. The screen has four regions from top to bottom: a header, a map, an order status card, and a bottom button. Header: a back arrow on the left and the title "Order #4821" centered in bold. Map: the top third of the screen is a simplified street map with a tangerine route line from a small restaurant pin to a home pin, and a scooter icon partway along the route. Order status card: a white rounded card overlapping the bottom of the map. At the top of the card, "Arriving in 12 min" in large bold type, with "Estimated 7:42 PM" in small gray type under it. Below, a horizontal progress tracker with four steps labeled "Placed", "Preparing", "On the way" and "Delivered", the first three filled in tangerine. Below the tracker, a courier row with a small circular avatar, the name "Jamal" and the line "4.9 rating · 1,200 deliveries". Below that, the heading "Your order" and three item rows, each with the item on the left and the price on the right: "2× Chicken tikka bowl" with "$25.98", "1× Garlic naan" with "$3.50", "1× Mango lassi" with "$4.25", then a thin rule and "Total" with "$33.73" in bold. Bottom button: a wide rounded tangerine button with white text "Contact Jamal". Clean modern sans serif, consistent spacing, crisp interface design, no other text.
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.

A fashion lookbook page for an online clothing store, laid out as a grid of 2 rows and 3 columns, six equal panels separated by thin white gutters on a white background. Every panel shows the same woman in her late twenties with shoulder-length dark curly hair, photographed full length against a plain light gray studio wall, wearing the same camel wool trench coat styled a different way. Top row, left to right: with a white T-shirt, straight blue jeans and white sneakers; with a black turtleneck, tailored black trousers and loafers; with a striped top, a denim skirt and ankle boots. Bottom row, left to right: with a gray hoodie, black leggings and running shoes; with a cream knit dress and knee-high brown boots; with a navy suit and a white shirt. Under each panel, a caption in small black capitals naming a day: "MONDAY", "TUESDAY" and "WEDNESDAY" under the top row, "THURSDAY", "FRIDAY" and "SATURDAY" under the bottom row. Above the grid, the title "ONE COAT, SIX WAYS" in bold black capitals. Soft even studio light, the same framing in every panel, no other text.
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.

A storyboard sheet for a 20-second promo video for a beach resort, landscape, on white paper. Five panels drawn as loose gray pencil sketches with light blue watercolor washes, arranged as 3 panels on top and 2 wider panels below, each with a thin black border, the shot number and timing in bold black type above it and a one-line caption in small black type under it. Top row, left to right: "SHOT 1 · 0-4 s" over a wide aerial view of the resort on a curved bay at sunrise, caption "Aerial push-in over the bay"; "SHOT 2 · 4-8 s" over a woman opening white curtains onto a sea view, caption "Curtains open on the sea"; "SHOT 3 · 8-12 s" over breakfast for two on a balcony table, caption "Breakfast on the balcony". Bottom row, left to right: "SHOT 4 · 12-16 s" over a couple swimming in an infinity pool at the edge of the sea, caption "Slow pan along the pool"; "SHOT 5 · 16-20 s" over an end card with the resort name "SEAGLASS BAY" in the center, caption "End card, hold 4 s". No other text.
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:
| Deliverable | Size | Shape |
|---|---|---|
| Conference poster | 2400 × 3600 | 2:3 portrait |
| Social feed post | 2160 × 2700 | 4:5 portrait |
| Can packshot | 2048 × 2048 | 1:1 |
| Report slide | 3200 × 1800 | 16:9 |
| Classroom chart | 2400 × 3200 | 3:4 portrait |
| Listing flyer | 2550 × 3300 | US Letter at 300 dpi |
| App screen | 1440 × 2560 | 9:16 |
| Lookbook grid | 3600 × 2400 | 3:2 |
| Storyboard | 3840 × 2160 | 16: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
-
Quote every string that has to be exact. Text inside quotation marks is set as written, and text outside them describes the image.
-
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.
-
End with "no other text". It marks the quoted strings as the full copy of the design.
-
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.
-
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.
-
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.
-
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".
-
Size each piece for its slot. An exact
widthandheightcome back as sent, so match the slot the file goes into, from a feed post to a printed page. -
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.