---
title: Rendering accurate text with Grok Imagine Image 2.0 — Grok Imagine Image 2.0 Preview | Runware Docs
url: https://runware.ai/docs/models/xai-grok-imagine-image-2-0/guides/text-rendering
description: "How to render accurate, readable text with Grok Imagine Image 2.0: quoting the exact words, directing typography and hierarchy, and holding up on small, dense layouts."
---
### [Introduction](https://runware.ai/docs/models/xai-grok-imagine-image-2-0/guides/text-rendering#introduction)

Text rendering is where most image models fall apart. They treat letters as texture rather than language, so words come out misspelled, doubled, or melting into nonsense past a few characters. Grok Imagine Image 2.0 was built the other way: it **plans typography and layout the way a designer would**, so a headline lands sharp, a price list stays aligned, and dense multi-part designs hold together instead of dissolving. It is what moves the model from "nice render" to a poster, a label, or a mockup you can actually use.

![A minimalist event poster on a deep navy background with a large coral circle, the title DESIGN SUMMIT in heavy white type, a line reading October 14-16, 2026, Lisbon, and a smaller Talks, Workshops, Networking line](https://runware.ai/docs/assets/hero.B1gGjHOq_ZRo5Vh.jpg)

*A finished poster from one prompt, type and layout intact*

> **Prompt**: A bold modern event poster, portrait orientation, clean minimalist layout on a deep navy background with one large bright coral circle. In a heavy white sans-serif the title reads "DESIGN SUMMIT", centred. Below it a line reads "October 14-16, 2026, Lisbon". Near the bottom a smaller line reads "Talks, Workshops, Networking". Crisp accurate typography, strong visual hierarchy, generous whitespace, high-resolution print quality, no other text.

This guide covers putting text in the prompt, quoting the exact words you want, directing the typography and hierarchy, and holding up on small, dense layouts. It builds on the [prompting guide](https://runware.ai/docs/models/xai-grok-imagine-image-2-0/guides/prompting), and you can drop text into an existing image with the [editing guide](https://runware.ai/docs/models/xai-grok-imagine-image-2-0/guides/editing).

### [The request](https://runware.ai/docs/models/xai-grok-imagine-image-2-0/guides/text-rendering#the-request)

Text is not a separate parameter. It lives in the `positivePrompt` alongside the rest of the scene, and the model renders the words you name. A design brief is a normal `imageInference` call.

TypeScriptPythoncURLCLIJSON

```typescript
import { createClient } from '@runware/sdk'

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

const [result] = await client.run({
  model: 'xai:grok-imagine@image-2.0',
  positivePrompt: 'A minimalist event poster on a deep navy background. In a heavy white sans-serif the title reads "DESIGN SUMMIT", with a smaller line below reading "October 14-16, 2026, Lisbon". Crisp accurate typography, generous whitespace, no other text.',
  width: 1776,
  height: 2368
})
```

```python
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": "xai:grok-imagine@image-2.0",
            "positivePrompt": "A minimalist event poster on a deep navy background. In a heavy white sans-serif the title reads \"DESIGN SUMMIT\", with a smaller line below reading \"October 14-16, 2026, Lisbon\". Crisp accurate typography, generous whitespace, no other text.",
            "width": 1776,
            "height": 2368
        })

asyncio.run(main())
```

```bash
curl https://api.runware.ai/v1 \
  -H "Authorization: Bearer $RUNWARE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '[
    {
      "taskType": "imageInference",
      "taskUUID": "d3b4c5e6-f7a8-4901-c234-56789abcdef0",
      "model": "xai:grok-imagine@image-2.0",
      "positivePrompt": "A minimalist event poster on a deep navy background. In a heavy white sans-serif the title reads \"DESIGN SUMMIT\", with a smaller line below reading \"October 14-16, 2026, Lisbon\". Crisp accurate typography, generous whitespace, no other text.",
      "width": 1776,
      "height": 2368
    }
  ]'
```

```bash
runware run xai:grok-imagine@image-2.0 \
  positivePrompt="A minimalist event poster on a deep navy background. In a heavy white sans-serif the title reads \"DESIGN SUMMIT\", with a smaller line below reading \"October 14-16, 2026, Lisbon\". Crisp accurate typography, generous whitespace, no other text." \
  width=1776 \
  height=2368
```

```json
{
  "taskType": "imageInference",
  "taskUUID": "d3b4c5e6-f7a8-4901-c234-56789abcdef0",
  "model": "xai:grok-imagine@image-2.0",
  "positivePrompt": "A minimalist event poster on a deep navy background. In a heavy white sans-serif the title reads \"DESIGN SUMMIT\", with a smaller line below reading \"October 14-16, 2026, Lisbon\". Crisp accurate typography, generous whitespace, no other text.",
  "width": 1776,
  "height": 2368
}
```

Response

```json
[
  {
    "taskType": "imageInference",
    "taskUUID": "d3b4c5e6-f7a8-4901-c234-56789abcdef0",
    "imageUUID": "9e3d4f5a-6b7c-8901-def0-123456789012",
    "imageURL": "https://im.runware.ai/image/os/a14d18/ws/2/ii/9e3d4f5a-6b7c-8901-def0-123456789012.jpg"
  }
]
```

### [Quoting the exact text](https://runware.ai/docs/models/xai-grok-imagine-image-2-0/guides/text-rendering#quoting-the-exact-text)

The single most important habit is to **wrap the exact words in quotation marks**. Quoted text tells the model these are literal characters to render, not a theme to interpret, and it is what gets spelling, spacing, and punctuation right. The granola box below carries three quoted strings, and each lands as written:

![A kraft-paper granola box on a wooden surface reading MORNING HARVEST across the top, Toasted Oat & Honey Granola below, and 500g in the lower corner](https://runware.ai/docs/assets/output-quote.DhruNy8f_ZFSKG1.jpg)

*Three quoted strings, each rendered exactly*

> **Prompt**: A clean product packshot of a rectangular kraft-paper granola box standing on a light wooden kitchen surface in soft morning light. The front of the box reads, in a warm bold serif, "MORNING HARVEST" across the top, then "Toasted Oat & Honey Granola" in a smaller line below, and "500g" in the lower corner. Crisp accurate legible packaging typography, realistic product photography, no other text.

Say **which words go where** and the model follows it: "MORNING HARVEST" across the top, the variety line below, the weight in the corner. Two rules keep it clean. Keep each string short, since a handful of words render far more reliably than a paragraph, and add "no other text" so the model doesn't invent extra labels to fill the design.

### [Typography, hierarchy, and layout](https://runware.ai/docs/models/xai-grok-imagine-image-2-0/guides/text-rendering#typography-hierarchy-and-layout)

Where the model pulls ahead is **treating text as design, not decoration**. Name the roles, a header, section titles, items, prices, and it builds a real hierarchy with the sizing and spacing to match, so a text-dense layout reads at a glance. This menu holds four dishes, two sections, and their prices in order:

![A printed restaurant menu headed THE GARDEN TABLE with a STARTERS section listing Heirloom Tomato Salad and Grilled Halloumi and a MAINS section listing Wild Mushroom Risotto and Pan-Seared Salmon, each with prices](https://runware.ai/docs/assets/output-typography._ZFingdY_kd1a4.jpg)

*A header, two sections, four items, and prices, all in hierarchy*

> **Prompt**: A photograph of a printed restaurant menu card on a dark slate table, portrait orientation, elegant editorial layout. The header reads "THE GARDEN TABLE" in a refined serif. A section headed "STARTERS" lists "Heirloom Tomato Salad" and "Grilled Halloumi" with the prices "9" and "11". A section headed "MAINS" lists "Wild Mushroom Risotto" and "Pan-Seared Salmon" with the prices "18" and "26". Clear typographic hierarchy between headings, items, and prices, generous spacing, crisp legible small text, realistic print detail, no other text.

Describe the structure the way you would brief a designer: what is the title, what are the section headings, which lines are items and which are prices. **Naming the hierarchy** is what keeps the header dominant and the prices aligned, instead of a flat wall of same-size text. The same approach carries a poster's headline and subhead, a label's name and fine print, or a slide's title and bullets.

### [Small text and dense designs](https://runware.ai/docs/models/xai-grok-imagine-image-2-0/guides/text-rendering#small-text-and-dense-designs)

The hard test for any text model is **small type at volume**: a UI packed with labels, a spec sheet, fine print on packaging. This is where the "plans the layout" difference shows, because each element has to stay legible and in place. The app mockup below keeps every label sharp:

![A fitness-tracker mobile app mockup with a Today heading, a progress ring showing 72% and Daily goal, rows reading Steps 8,432 and Water 6 of 8 glasses, and a Log activity button](https://runware.ai/docs/assets/output-ui.BV7fY6YT_Z10b0OR.jpg)

*A full app screen of small UI text, each label legible*

> **Prompt**: A clean modern mobile app UI mockup shown on a smartphone, a fitness tracker home screen on a soft off-white background. A large heading reads "Today". Below it a circular progress ring shows "72%" at its centre with the label "Daily goal". Two stat rows read "Steps 8,432" and "Water 6 of 8 glasses". A rounded button at the bottom reads "Log activity". Crisp legible UI typography, precise small text, flat modern design, no other text.

Two things hold small, dense text together. Render at **2K when the text is fine or crowded**, since the extra pixels give small glyphs room to stay sharp, and keep each string short and specific so the model spends its budget on legibility rather than guessing at long copy. When a design has more text than one pass renders cleanly, generate the base at 2K and set the smallest copy as separate elements you composite afterward.

### [Tips](https://runware.ai/docs/models/xai-grok-imagine-image-2-0/guides/text-rendering#tips)

1. **Quote the exact words.** Wrap literal text in quotation marks so the model renders characters rather than interpreting a theme. It is the single biggest lever on spelling and accuracy.
    
2. **Say which words go where.** "Title reads X, subheading reads Y, footer reads Z" gives the model the layout as well as the copy, so the hierarchy comes out right.
    
3. **Keep each string short.** A few words render far more reliably than a sentence. For long copy, split it into separate short elements.
    
4. **Add "no other text".** Without it the model tends to fill a design with invented labels. The clause keeps the frame to the words you asked for.
    
5. **Render fine or crowded text at 2K.** The extra resolution keeps small glyphs sharp. Iterate a layout at 1K, then re-render the keeper at 2K.
    
6. **Name the typographic roles.** Header, section titles, items, prices, captions. Briefing the hierarchy is what separates a designed layout from a flat block of text.