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.
Grid result (4 images)
image_urls[0–3]
/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.
Upscaled Image
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
Grid (4 images)
image_urls[0–3]
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
| Endpoint | parent_task_id must be | Returns |
|---|---|---|
| /reroll | Grid task (/imagine) | New 2×2 grid |
| /variations (index 1–4) | Grid task (/imagine) | New 2×2 grid |
| /upscale-1x | Grid task (/imagine) | Single upscaled image |
| /variations (strong/subtle) | Upscaled task (/upscale-1x) | New 2×2 grid |
| /upscale-alt | Upscaled task (/upscale-1x) | Single hi-res image |
| /outpaint | Upscaled task (/upscale-1x) | New 2×2 grid |
| /inpaint | Upscaled task (/upscale-1x) | New 2×2 grid |
| /pan | Upscaled task (/upscale-1x) | New 2×2 grid |
| /seed | Any finished task (task_id) | Numeric seed value |
| /blend | None (takes image_urls[]) | New 2×2 grid |
| /describe | None (takes image_url) | Text prompts |
| /faceswap | None (takes face_url + target_url) | Single image |