MODEL IDxai:grok-imagine@image-2.0
live

Grok Imagine Image 2.0 Preview

xAI
by xAI

Grok Imagine Image 2.0 Preview is xAI's next-generation image generation and editing model for both text-to-image and prompt-guided image transformation. It keeps the same core workflow as the current Grok Imagine image family, including aspect-ratio control and image-based editing, while adding a dedicated quality parameter so teams can tune output fidelity within the same API shape. It is a strong fit for creative production pipelines that want one Grok image endpoint for generation, editing, and quality-sensitive iteration without switching to a separate model family.

Grok Imagine Image 2.0 Preview

Rendering accurate text with Grok Imagine Image 2.0

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

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.

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, and you can drop text into an existing image with the editing guide.

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.

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
})
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())
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
    }
  ]'
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
{
  "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
[
  {
    "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

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:

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

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:

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

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:

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

  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.