参数是后缀,不是命令:写在提示词末尾,只影响这一次任务怎么渲染。官方逐项列出参数的地方是 Parameter List 页,而它是一份索引,不是手册——30 项,每项一句描述加参数写法,整页没有一个「取值」列。

缺的那一列,正是网上各种「默认值表」的自信来源。取值范围写在每个参数自己的页面上,好几个比清单站转述的窄。下面内容全部来自 Parameter List 页和四份单参数页面;哪一页没写就说没写。

官方参数索引里到底有什么

这一页回答两个问题。参数是什么:「Parameters are like special instructions you can use to guide how your images turn out.」写在哪里:「Parameters always go at the end of your text prompt.」第三个问题不回答:哪些取值合法,交给对应的单参数页。

三条格式规则,和四行会让参数失效的写法

三条规则决定参数是否真的生效:放在提示词末尾、破折号前留一个空格、参数内部不用标点。官方在下面附了四个反例,它们都不报错,只让参数悄悄失效。

vibrant California poppies--ar 2:3
vibrant California poppies - - ar 2:3
vibrant California poppies --ar 2:3,
vibrant California --ar 2:3 poppies

四个反例分别是:破折号前没空格、两个破折号被拆开、参数末尾多一个逗号、参数后面又写提示词。前三种界面上毫无提示,第四种一眼能看出来。提示词指南讲的是破折号之前那半段。

官方索引的 30 项,逐条照抄

下面是 Full Parameter List 的原始顺序,描述按页面原文压缩照抄。

条目官方索引的说法
--aspect / --ar默认是方形
--chaos / --c让结果更丰富
--oref长相或物体形态;V8.X 已被 Edit Model 取代
--no排除不想要的元素
--profile / --p个性化档案与 moodboard
--quality / --q细节与处理时长
--repeat / --r一条提示词跑多组图
--seed测试与实验
--stealth作品不公开
--raw对画面控制更多
--stylize / --s画面的艺术化程度
--sref匹配另一张图的外观
--tile无缝平铺图案
--version / --v切换模型版本
--draftV7 下以一半 GPU 成本出草稿图
--weird / --w古怪非常规的画面
--fastGPU 速度切到 Fast
--iw图像提示词的影响
--relaxGPU 速度切到 Relax
--turboGPU 速度切到 Turbo
--niji动漫与东方美学模型
--public作品公开
--motion low / high视频运动幅度
--loop / --end循环视频与自定义尾帧
--bs每条提示词的视频数
--sw风格参考强度
--sv风格参考版本
--video在 Discord 生成视频
--hd / --sd2048px 与 1024px
--edit文字指令加最多四张参考图

30 项里 4 项只服务视频,出静态图能用 26 项,--hd--sd 只切分辨率。索引是封闭清单:参数不在上面这一列,就不在官方清单里;斜杠命令那一半在 Discord 命令清单里。

文档真正公布了取值的参数

把 Midjourney 主要参数按行叠放,从上到下依次是宽高比、stylize、chaos、weird、seed、quality 与图像权重

30 项里只有 6 项在文档里带着数字:2 项给了默认值,4 项给了范围,剩下 24 项两个都没有。

参数官方公布的取值
--ar默认 1:1;不能带小数,写 139:100 而不是 1.39:1
--stylize / --s0 到 1000,默认 100
--chaos / --c0 到 100,默认 0
--weird / --w最大 3000,默认 0,V5 及以后可用
--seed0 到 4294967295 之间的整数
--hd / --sd2048px 与 1024px

--ar 那页还补了参数本身不会做的换算:给它像素,它自己约分,1920x1080 变成 --ar 16:9。最终像素还取决于版本和放大工具。

一个参数两种写法的八个条目

八个条目同时接受长写法和短写法,同一条提示词里混用没问题:--ar--c--p--q--r--s--v--w。其余只有一种写法,--seed--sref 都在其中。一条同时满足三条规则的提示词:

street market at dawn, one vendor arranging fruit, muted palette --ar 16:9 --s 100 --c 0 --seed 12345

官方页写明互斥的组合

四对参数不是彼此独立的,每条只写在某一页上,没有兼容表汇总。--tile 与 Edit Model 不兼容:参数仍在清单里,组合不在。Edit Model 的结果不能再用 Remix。Turbo 与 --seed 不能一起用,因为追求速度时 seed 锁定不可靠。--weird 与 seed 不完全兼容。

清单的第 30 项在 Discord 里写成 --edit 加图片地址,官方要求图片必须已经在线。

make the jacket red --edit https://your-public-host.example/portrait.png

两段离线校验脚本

两段脚本都不访问 Midjourney,官方没有公开 API;也都不编造范围。第一段编码 30 个参数名、8 个别名和已公布范围,文档没给数字的一律返回 RANGE_NOT_PUBLISHED

"""Check a parameter name and value against the published documentation only."""

# The long forms the official list prints alongside a short one.
ALIASES = {
    "--aspect": "--ar", "--chaos": "--c", "--profile": "--p",
    "--quality": "--q", "--repeat": "--r", "--stylize": "--s",
    "--version": "--v", "--weird": "--w",
}

# Every flag the Full Parameter List prints, in the order its entries appear.
OFFICIAL = [
    "--ar", "--c", "--oref", "--no", "--p", "--q", "--r", "--seed",
    "--stealth", "--raw", "--s", "--sref", "--tile", "--v", "--draft",
    "--w", "--fast", "--iw", "--relax", "--turbo", "--niji", "--public",
    "--motion", "--loop", "--end", "--bs", "--sw", "--sv", "--video",
    "--hd", "--sd", "--edit",
]

# Ranges quoted from single-parameter pages. Nothing else is guessed.
INTEGER_RANGES = {"--s": (0, 1000), "--c": (0, 100), "--w": (0, 3000)}
SEED_RANGE = (0, 4294967295)

# Entries the list writes as a bare flag, with no value after them.
FLAGS = {"--hd", "--sd", "--tile", "--raw", "--fast", "--relax", "--turbo",
         "--stealth", "--public", "--draft"}


def check_integer(name, raw, low, high):
    try:
        value = int(raw)
    except ValueError:
        return "rejected", f"{raw} is not a whole number"
    if low <= value <= high:
        return "accepted", f"inside the published range {low}-{high}"
    return "rejected", f"outside the published range {low}-{high}"


def check_ratio(raw):
    parts = raw.split(":")
    if len(parts) != 2 or not all(part.isdigit() for part in parts):
        return "rejected", "use two whole numbers, as in 16:9"
    return "accepted", "no decimals in an aspect ratio"


def check(name, value=None):
    """Return (verdict, detail) for one parameter. Never guesses a range."""
    name = ALIASES.get(name, name)
    if name not in OFFICIAL:
        return "rejected", "not on the official parameter list"
    if value is None:
        if name in FLAGS:
            return "accepted", "flag, no value"
        return "rejected", "this entry needs a value"
    if name in FLAGS:
        return "rejected", "this entry is written without a value"
    if name == "--seed":
        return check_integer(name, value, *SEED_RANGE)
    if name in INTEGER_RANGES:
        return check_integer(name, value, *INTEGER_RANGES[name])
    if name == "--ar":
        return check_ratio(value)
    return "unchecked", "RANGE_NOT_PUBLISHED"


if __name__ == "__main__":
    for flag, val in (("--ar", "16:9"), ("--ar", "1.39:1"), ("--s", "100"),
                      ("--s", "1200"), ("--c", "0"), ("--w", "3000"),
                      ("--seed", "12345"), ("--seed", "4300000000"),
                      ("--hd", None), ("--quality", "1"),
                      ("--stylize", "250")):
        verdict, detail = check(flag, val)
        print(f"{flag:>12} {str(val):>10}  {verdict:<9} {detail}")

跑起来会看到 --stylize 250 经别名表通过,--quality 1 返回 unchecked,因为本文引用的页面都没写 --quality 接受什么值。第二段脚本审计整组参数:归一化别名、按官方索引顺序重排,再报告官方写明的冲突。

"""Audit a parameter set for the combinations the docs rule out."""

from itertools import combinations

ORDER = ["--ar", "--c", "--oref", "--no", "--p", "--q", "--r", "--seed",
         "--stealth", "--raw", "--s", "--sref", "--tile", "--v", "--draft",
         "--w", "--fast", "--iw", "--relax", "--turbo", "--niji", "--public",
         "--motion", "--loop", "--end", "--bs", "--sw", "--sv", "--video",
         "--hd", "--sd", "--edit"]

ALIASES = {"--aspect": "--ar", "--chaos": "--c", "--profile": "--p",
           "--quality": "--q", "--repeat": "--r", "--stylize": "--s",
           "--version": "--v", "--weird": "--w"}

# Each pair is stated on one page; no page collects them.
CLASHES = {
    frozenset({"--tile", "--edit"}):
        "the Edit model is not compatible with --tile",
    frozenset({"--turbo", "--seed"}):
        "seed locking is not reliable in Turbo mode",
    frozenset({"--w", "--seed"}):
        "weird is not fully compatible with seeds",
}


def audit(job):
    """job: {"--s": "250", ...} -> (ordered flags, clash messages, off-list)."""
    canonical = {ALIASES.get(key, key): value for key, value in job.items()}
    ordered = [flag for flag in ORDER if flag in canonical]
    clashes = [
        CLASHES[frozenset(pair)]
        for pair in combinations(ordered, 2)
        if frozenset(pair) in CLASHES
    ]
    if "--edit" in canonical:
        clashes.append("an edit result cannot be remixed afterwards")
    return ordered, clashes, sorted(set(canonical) - set(ORDER))


for job in ({"--stylize": "250", "--seed": "12345", "--v": "8.2"},
            {"--edit": "url", "--tile": None, "--turbo": None, "--seed": "7"}):
    ordered, clashes, off_list = audit(job)
    print("order:", " ".join(ordered))
    print("flags:", "; ".join(clashes) or "none documented")
    print("off-list:", ", ".join(off_list) or "none")
    print("---")

有两件事刻意不做:脚本不碰提示词的文字部分,也不给页面没量化的条目补范围——风格参考指南--sw 用的是同一套纪律。

官方索引没有公布的部分

  • 默认值:整页没有取值列。
  • 版本可用性:没有一行说明参数在 V8.2 上能不能用。
  • 兼容表:四条互斥关系散在四个页面里。
  • --no--tile--fast--relax--turbo 的取值写法:只有描述,没有规定。
  • 上限:能带几个参数、参数最长多少、写错报什么错。
  • --stop--cref--cw--exp:: 权重、--style raw:都不在 30 项之内,官方把它们交给 Legacy Features 页。

还有一个坑:搜索摘要可能来自缓存。某个缓存的 Parameter List 把 Omni Reference 那条写成「replaces Character Reference in V7」,线上正文已改成「replaced by the Edit Model in V8.X」。参数没变,接替者变了。

常见问题

一共多少个参数? 官方 Full Parameter List 有 30 项,其中 4 项只服务视频,出静态图可用 26 项。

--ar 能写任意比例吗? 官方只公布 1:1 为默认值、五个常见取值,禁止小数;极端宽高比称为实验性,没有上限。

--chaos 写多少合适? 官方只写了 0 到 100、默认 0,以及值越偏离提示词越远。没有推荐档位。

--edit 现在是什么? 它是索引第 30 项、也是最新一项,在 V8.X 里取代 Omni Reference;四个入口和官方示例提示词在编辑模型实操里。