A Midjourney command starts with a slash. A parameter is a suffix at the end of a prompt, written with two dashes. They live on separate documentation pages and do different jobs, yet most cheat sheets merge them, which is how a reader ends up typing --ar where /imagine belongs. The names below come from the official Discord Command List, and where that page stops — it publishes no field table for any command — this article says so instead of inventing one.

What a command is, and what it is not

A slash command is how you talk to the bot. The Quick Start describes the loop in one sentence: “After submitting a text prompt, the Midjourney Bot processes your request, creating four unique image options within a minute.”

A parameter changes how one render behaves, and the split matters because the two fail differently. A misspelled command errors in the message box; a misspelled parameter silently produces a wrong image. The Midjourney prompt guide covers the parameter side, and the Midjourney API guide explains why neither interface is reachable from code. A subscription comes first.

The full list Midjourney publishes

A chat sidebar panel holding a list of blank command pills, beside a two by two grid of image thumbnails

This is the official Full Command List in the order the page prints it: twenty-eight commands.

CommandWhat the official list says
/askAsk a question
/blendBlend images together
/daily_themePings for #daily-theme
/describePrompts from an upload
/docsServer only: guide links
/fastFast Mode
/feedbackSend and rate ideas
/faqServer only: prompt craft FAQs
/helpInformation and tips
/imagineGenerate from a prompt
/infoAccount and running jobs
/inviteServer invite link
/list_tunersList your Style Tuners
/prefer option setManage a custom option
/prefer option listView custom options
/prefer remixToggle Remix mode
/prefer suffixSuffix on every prompt
/prefer variabilityStrong or Subtle for V#
/publicPro and Mega only: Public Mode
/relaxRelax Mode
/settingsView and adjust settings
/stealthPro and Mega only: Stealth Mode
/shortenShorter prompt suggestions
/showRegenerate from a Job ID
/subscribeLink to your account page
/synonymsServer only: related words
/turboTurbo Mode
/useridYour User ID

Three further names are marked deprecated: /private was replaced by /stealth, while /pixels and /idea carry no replacement.

/imagine in five documented steps

The Quick Start spells out five steps, and they apply to every command. Type / in the message box. Keep typing to narrow the pop-up list, the way a search field works. Click the command so it appears with the Midjourney logo. Fill the fields it offers. Press Enter or Send.

What the buttons do after a render

The page corrects an old assumption: “In earlier versions of Midjourney, the U buttons were used for upscaling images. With the latest version, images are immediately generated at 1024 x 1024 pixels size.” They now separate one image from the grid for download and editing.

V1 to V4 keep the general style and composition, and reroll reruns the same prompt. Separating an image unlocks Vary (Strong), Vary (Subtle), three Zoom Out options and four pan buttons.

Settings you change with a command

/settings and its stylize presets

/settings opens a panel only you can see, even in a public channel, and it is synced with the website: “Your website and Discord settings are synced.” Its four stylize presets carry published numbers — Low 50, Med 100 as the default, High 250, Very High 750 — alongside the default model version, RAW mode, personalization, stealth mode and the GPU speed mode.

Option sets and suffixes

An option set bundles parameters behind a name. The documented example creates mine, after which vibrant California poppies --mine behaves like the full parameter list. One detail matters when you move between interfaces: “Option sets can be used in prompts on midjourney.com, but can only be created and managed in Discord.” /prefer suffix does the same for every prompt, and is removed by sending the command with an empty value.

Fast, Relax and Turbo

Three commands switch the GPU pool. /fast spends the metered allowance, /turbo doubles the Fast cost for speed, and /relax is free but queued — and unavailable on Basic, where “Basic plan subscribers do not have access to Relax Mode.” The Midjourney pricing guide works out what the allowance buys.

Two offline checks for a command line

Neither script calls Midjourney, because no API exists to call. The first rejects a name that is not on the official list; it runs on the bash 3.2 that ships with macOS, so no associative arrays.

#!/usr/bin/env bash
# Offline check of a Midjourney slash command against the published list.
# Names and groups are transcribed from the official Discord Command List.
set -uo pipefail

read -r -d '' LIST <<'DATA' || true
/imagine generate
/blend generate
/describe generate
/shorten generate
/ask help
/help help
/feedback help
/info account
/subscribe account
/userid account
/invite account
/settings settings
/prefer remix settings
/prefer suffix settings
/prefer variability settings
/prefer option set settings
/prefer option list settings
/fast speed
/relax speed
/turbo speed
/public plans
/stealth plans
/daily_theme channels
/list_tuners tuners
/show jobs
/faq server-only
/docs server-only
/synonyms server-only
DATA

if (( $# != 1 )); then
  echo "usage: $0 /command" >&2
  exit 2
fi

name="$1"
[[ "$name" == /* ]] || { echo "rejected: commands start with a slash" >&2; exit 1; }

case "$name" in
  /private) echo "rejected: /private is deprecated, replaced by /stealth" >&2; exit 1 ;;
  /pixels | /idea) echo "rejected: $name is deprecated with no replacement" >&2; exit 1 ;;
esac

group=$(printf '%s\n' "$LIST" | awk -v want="$name" '$1 == want { print $2 }')
if [[ -z "$group" ]]; then
  echo "rejected: $name is not on the official command list" >&2
  exit 1
fi

echo "accepted: $name (group: $group)"
printf '%s\n' "$LIST" | awk '{ print $1 }' | sort

Run it with /pixels and it names the replacement.

The second script splits a command line into prompt and parameters. The parameter page publishes three format rules, and they are what it enforces: parameters go last, a space separates the prompt from the first pair of dashes, and no punctuation belongs inside a parameter.

"""Split a Midjourney command line into prompt and parameters, per the docs."""

COMMANDS = {
    "/ask", "/blend", "/daily_theme", "/describe", "/docs", "/fast",
    "/feedback", "/faq", "/help", "/imagine", "/info", "/invite",
    "/list_tuners", "/prefer option set", "/prefer option list",
    "/prefer remix", "/prefer suffix", "/prefer variability",
    "/public", "/relax", "/settings", "/stealth", "/shorten", "/show",
    "/subscribe", "/synonyms", "/turbo", "/userid",
}
DEPRECATED = {"/private": "/stealth", "/pixels": "", "/idea": ""}

# Commands whose entry on the official list carries a qualifier.
SERVER_ONLY = {"/docs", "/faq", "/synonyms"}
PRO_OR_MEGA = {"/public", "/stealth"}


def parse(line: str) -> tuple[str, str, dict[str, str]]:
    """Return (command, prompt, parameters). Raises ValueError on a rule break."""
    if not line.startswith("/"):
        raise ValueError("a command line starts with a slash")
    head, _, rest = line.partition(" ")
    if head in DEPRECATED:
        replacement = DEPRECATED[head]
        raise ValueError(f"{head} is deprecated" + (f", use {replacement}" if replacement else ""))
    if head not in COMMANDS:
        raise ValueError(f"{head} is not on the official command list")

    if " --" not in rest:
        # A prompt with no parameters is valid; a prompt glued to one is not.
        if "--" in rest:
            raise ValueError("a space must separate the prompt from the first --")
        return head, rest.strip(), {}

    prompt, _, tail = rest.partition(" --")
    tokens = ("--" + tail).split()
    if len(tokens) % 2:
        raise ValueError("every parameter needs a value")
    parameters: dict[str, str] = {}
    for flag, value in zip(tokens[::2], tokens[1::2]):
        if any(character in value for character in ",;"):
            raise ValueError(f"{flag}: no punctuation inside a parameter")
        parameters[flag] = value
    return head, prompt.strip(), parameters


print(parse("/imagine a harbour at dawn --ar 16:9 --stylize 250"))
print("server-only:", sorted(SERVER_ONLY), "plan-gated:", sorted(PRO_OR_MEGA))
for bad in ("/imagine a harbour --ar 16:9,", "/imagine a harbour--ar 16:9", "/pixels", "/imagen"):
    try:
        parse(bad)
    except ValueError as error:
        print("rejected:", error)

The script refuses to guess a range for --stylize or --chaos, because the parameter page publishes none — the discipline the style reference guide applies to --sw.

What the command pages do not publish

  • The argument schema of any command: field names, which are required, which take several values.
  • Rate limits, concurrency ceilings and timeouts.
  • What /ask runs on, and how far its answers reach.
  • The algorithm behind /shorten, and the compression it targets.
  • How many option sets an account may hold, and the naming rules.
  • The field-by-field meaning of the /info output.

Frequently asked questions

Is /imagine the only command that generates? It is the only one the list documents as generating an image. /blend combines uploaded images and /describe writes prompts from one.

Which commands are plan-gated? /public and /stealth need Pro or Mega, and Relax is unavailable on Basic.

Can these commands be automated? The terms prohibit automated tools for accessing the services, which the API guide quotes in full. Keep the list and the format rules in your test suite instead.