
Midjourney 和 Stable Diffusion 常被放在一起比较,但专业团队从不二选一。MJ 强在审美先验、构图直觉和出图速度;SD 强在可控性、局部编辑和批量自动化。真正的生产力,是把两者放进同一条管线:MJ 做创意探索与氛围定调,SD 做精修、一致性与规模化输出。
环节 | 推荐工具 | 原因 |
|---|---|---|
概念探索 | Midjourney | 风格多样、构图大胆、迭代快 |
角色/风格锁定 | SD + LoRA | 可训练、可复现、一致性强 |
构图控制 | SD + ControlNet | 姿态、线稿、深度精确控制 |
局部修改 | SD Inpainting | 蒙版级重绘,不破坏整体 |
批量放大 | SD + ESRGAN | 本地免费、可脚本化 |
核心原则:MJ 产出参考图,SD 产出可交付资产。
Midjourney 官方无公开 API,专业团队通常通过 Discord 机器人或第三方网关调用。以下用 Discord Webhook 思路演示参数拼装与任务记录。
import requests, json, time, os
WEBHOOK = os.getenv("DISCORD_WEBHOOK")
def build_prompt(subject, style, aspect="16:9", version="6.1"):
return (
f"{subject}, {style}, cinematic lighting, highly detailed "
f"--ar {aspect} --v {version} --style raw --q 2"
)
def send_imagine(prompt):
payload = {
"content": f"/imagine prompt: {prompt}",
"username": "MJ-Bot"
}
r = requests.post(WEBHOOK, json=payload, timeout=15)
r.raise_for_status()
record = {"prompt": prompt, "ts": time.time()}
with open("mj_log.jsonl", "a", encoding="utf-8") as f:
f.write(json.dumps(record, ensure_ascii=False) + "\n")
send_imagine(build_prompt(
"a lone astronaut standing on a neon-lit rooftop",
"cyberpunk, volumetric fog, blade runner mood"
))关键点:每次生成必须记录 prompt、版本、宽高比、seed(MJ 可通过 --seed 固定),否则无法复现。
确定方向后,用 SD 锁定风格。以下调用本地 AUTOMATIC1111 WebUI API。
import requests, base64, os
API = "http://127.0.0.1:7860"
def txt2img(prompt, negative, lora, seed=42, steps=30):
payload = {
"prompt": f"{prompt}, <lora:{lora}:0.8>",
"negative_prompt": negative,
"seed": seed,
"steps": steps,
"width": 1024,
"height": 576,
"cfg_scale": 6.5,
"sampler_name": "DPM++ 2M Karras"
}
r = requests.post(f"{API}/sdapi/v1/txt2img", json=payload, timeout=300)
r.raise_for_status()
img = r.json()["images"][0]
with open("sd_output.png", "wb") as f:
f.write(base64.b64decode(img.split(",", 1)[-1]))
txt2img(
"astronaut on rooftop, neon city, cyberpunk",
"low quality, watermark, extra limbs, blurry",
lora="cyberpunk_style_v3"
)LoRA 的价值在于:同一个触发词,跨批次产出高度一致的视觉语言,这是 MJ 难以稳定做到的。
当客户要求“人物必须站在画面左侧,姿势参考这张图”,就用 ControlNet。
import requests, base64
API = "http://127.0.0.1:7860"
def with_controlnet(prompt, ref_image_b64, seed=123):
payload = {
"prompt": prompt,
"negative_prompt": "low quality, deformed",
"seed": seed,
"steps": 28,
"width": 1024,
"height": 1024,
"cfg_scale": 7,
"sampler_name": "DPM++ 2M Karras",
"alwayson_scripts": {
"ControlNet": {
"args": [{
"input_image": ref_image_b64,
"module": "openpose",
"model": "control_v11p_sd15_openpose",
"weight": 0.9,
"resize_mode": "Crop and Resize"
}]
}
}
}
r = requests.post(f"{API}/sdapi/v1/txt2img", json=payload, timeout=300)
r.raise_for_status()
return r.json()["images"][0]
with open("pose_ref.png", "rb") as f:
ref = base64.b64encode(f.read()).decode()
result = with_controlnet(
"female warrior, silver armor, cinematic, full body",
ref
)ControlNet 是 SD 相对 MJ 最大的工程优势:把不可控的“生成”变成可控的“合成”。
MJ 与 SD 不是竞争关系,而是探索与交付的分工。MJ 负责“想到”,SD 负责“做到”。把 prompt、seed、LoRA、ControlNet 全部纳入版本管理,AI 绘画才能从灵感游戏变成可复现的生产力。先从一条 MJ→SD 的小管线跑通,再逐步扩展成团队级工作流。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。