Midjourney Workflow

Midjourney operates in stages. Most action endpoints (variations, zoom, pan, inpaint) require an upscaled image — you can't use them directly on a grid. Understanding this two-stage flow prevents the most common integration mistakes.

Stage 1 — Generate a Grid

Every Midjourney workflow starts with /imagine or /blend. The result is a 2×2 grid of four candidate images.

/imagine
text prompt → 4 images

Grid result (4 images)

0_0
0_1
0_2
0_3

image_urls[0–3]

Required: You must run /upscale-1x before using most action endpoints. Passing a grid task ID to pan, inpaint, outpaint, or strength variations will fail.

Stage 2 — Upscale a Single Image

/upscale-1x picks one image from the grid (index 1–4) and produces a full-resolution single image. This is the gateway to all refining actions.

grid task
from /imagine or /reroll
index 1–4
/upscale-1x
produces single upscaled image

Upscaled Image

image_url

Full-resolution · single image

Stage 3 — Refine or Enhance

Once you have an upscaled image, all of the following actions become available. Each returns a new grid or enhanced image as a separate task.

Complete Flow at a Glance

Standalone Endpoints

These endpoints don't depend on an existing task — they take their own inputs directly.

Common Mistakes

Using a grid task ID with action endpoints

Most action endpoints (pan, inpaint, outpaint, variations strong/subtle) require an upscaled parent. Passing a grid task ID returns an error. Always run /upscale-1x first.

Not polling after submission

Every mutating endpoint returns a task_id immediately — generation happens asynchronously. You must poll /fetch or listen for a webhook to get the final image URLs.

Chaining upscale-alt on itself

/upscale-alt (2x/4x) cannot be applied to its own output. Only upscale-1x outputs are valid parents for upscale-alt.

Variations index is 1-based

Positional variations use index 1–4 (matching the grid position labels). Index 0 does not exist.

Parent Requirements Quick Reference

Endpointparent_task_id must beReturns
/rerollGrid task (/imagine)New 2×2 grid
/variations (index 1–4)Grid task (/imagine)New 2×2 grid
/upscale-1xGrid task (/imagine)Single upscaled image
/variations (strong/subtle)Upscaled task (/upscale-1x)New 2×2 grid
/upscale-altUpscaled task (/upscale-1x)Single hi-res image
/outpaintUpscaled task (/upscale-1x)New 2×2 grid
/inpaintUpscaled task (/upscale-1x)New 2×2 grid
/panUpscaled task (/upscale-1x)New 2×2 grid
/seedAny finished task (task_id)Numeric seed value
/blendNone (takes image_urls[])New 2×2 grid
/describeNone (takes image_url)Text prompts
/faceswapNone (takes face_url + target_url)Single image