APIPro
网站首页
网站首页
  1. Midjourney 接口
  • (必读)使用说明
  • API Base URL地址
  • 列出模型
    • Models(列出模型)
      GET
  • OpenAI 接口 (兼容各大原厂模型)
    • OpenAI SDK使用指南
    • Responses API 接口使用指南
    • 对话(openai, gemini, claude, deepseek...)
      • 聊天(chat)
      • 流式返回(chat)
      • 思考模式(chat)
      • 结构化输出(chat)
      • 工具调用(chat)
      • MCP调用(chat)
      • web search(chat)
      • 聊天(responses)
      • 流式返回(responses)
      • 思考模式(responses)
      • web search(responses)
    • 图像(gpt, dalle, banana, jimeng,doubao)
      • 文生图(chat)
      • 图生图(chat)
      • 分析图片(chat)
      • 文生图(images)
      • 图生图(images)
    • 视频(sora, veo, 可灵)
      • VEO, SORA 接口参数信息说明
      • 文生视频-异步 (veo)
      • 图生视频-异步 (veo)
      • 首尾帧视频-异步 (veo)
      • 查询视频状态 (veo)
      • 获取视频内容 (veo)
      • 分镜模式-异步 (sora)
      • 角色创建-异步 (sora)
      • 文生视频-同步 (veo)
      • 图生视频-同步 (veo)
      • 首尾帧视频-同步 (veo)
      • 文生视频-异步 (可灵, 通义万象)
      • 图生视频-异步 (可灵, 通义万象)
      • 首尾帧生视频-异步 (可灵, 通义万象)
      • 查询视频状态 (可灵, 通义万象)
    • 语音
      • 语音回复(chat)
      • 语音识别(audio)
      • 语音合成(audio)
    • 向量化
      • 文本向量化
    • 音乐(suno接口)
      • 生成歌词lyrics接口
      • 生成音乐suno接口
      • 上传音乐接口
      • 歌曲拼接接口
      • 查询歌词/音乐任务
  • Anthropic 接口
    • Anthropic SDK使用指南
    • 聊天
      POST
    • 聊天(prompt cache)
      POST
    • 流式返回
      POST
    • 聊天(深度思考)
      POST
    • 工具调用(function call)
      POST
    • 分析图片
      POST
  • Gemini 接口
    • Gemini SDK使用指南
    • 聊天
    • 流式返回
    • 联网搜索
    • 文生图
    • 图生图(传file)
    • 图生图(传url)
    • 分析图片(传base64)
    • 分析图片(传url)
  • Midjourney 接口
    • 接口使用示例 (局部重绘)
    • 任务查询接口
      GET
    • 获取种子(Seed)
      GET
    • 文生图(Imagine)
      POST
    • 图片融合(Blend)
      POST
    • 图生文(Describe)
      POST
    • 换脸(FaceSwap)
      POST
    • 上传(upload)
      POST
    • 任务批量查询接口
      POST
    • 按钮点击(Action)
      POST
    • 窗口执行(Modal)
      POST
    • 刷新链接(Refresh)
      POST
    • 编辑图片(Edit)
      POST
  • 第三方接入
    • 问问接入各编程平台指南
    • OpenClaw接入APIPro
  • 数据模型
    • 示例数据模型
      • Pet
      • Category
      • Tag
  1. Midjourney 接口

接口使用示例 (局部重绘)

"""
mj_imagine → mj_modal 完整链路 demo(局部重绘)
依赖:pip install requests pillow
"""
import base64
import time
from io import BytesIO
import requests
from PIL import Image, ImageDraw
from pprint import pprint
API_KEY = "YOUR API KEY" # ←←← 换成你的
BASE_URL = "https://api.wenwen-ai.com/mj"

---------- 工具函数 ----------#

session = requests.Session()
session.headers.update({"Authorization": f"Bearer {API_KEY}"})
def _post(path, json):
resp = session.post(f"{BASE_URL}{path}", json=json)
resp.raise_for_status()
return resp.json()
def _get(path):
resp = session.get(f"{BASE_URL}{path}")
resp.raise_for_status()
return resp.json()
def wait_task(task_id: str):
"""轮询直到任务结束,返回最终 payload"""
while True:
data = _get(f"/task/{task_id}/fetch")
status = data["status"]
print(f"[{task_id}] status = {status}")
if status in ("SUCCESS", "FAILURE"):
return data
time.sleep(3)

---------- 1. imagine 提交 ----------#

prompt = "a cute steampunk cat, full body, high detail"
print("1️⃣ submitting imagine...")
r1 = _post("/submit/imagine", {"prompt": prompt})
print(r1)
task_id = r1["result"]
print(f" taskId = {task_id}")

---------- 2. 等待首次出图 ----------#

print("2️⃣ waiting for imagine result...")
task_data = wait_task(task_id)
if task_data["status"] != "SUCCESS":
raise RuntimeError("imagine 失败", task_data)
image_url = task_data["imageUrl"]
print(f" imageUrl = {image_url}")

---------- 3. 先选图(以 U1 为例) ----------#

buttons = task_data.get("buttons", [])
pprint(buttons)
u1_btn = next((b for b in buttons if b["label"] == "U1"), None)
if not u1_btn:
raise RuntimeError("未找到 U1 按钮,无法放大选图")
print("3️⃣ upscaling U1...")
r3 = _post("/submit/action", {"taskId": task_id, "customId": u1_btn["customId"]})
upscale_task_id = r3["result"]
upscale_data = wait_task(upscale_task_id) # 等待放大完成
if upscale_data["status"] != "SUCCESS":
raise RuntimeError("放大失败", upscale_data)

---------- 3. 找到局部重绘按钮 ----------#

buttons = upscale_data.get("buttons", [])
pprint(buttons)
inpaint_btn = next((b for b in buttons if "Inpaint" in b["customId"]), None)
if not inpaint_btn:
raise RuntimeError("放大后仍无 Vary (Region),图片分辨率可能仍不足")
custom_id = inpaint_btn["customId"]
print("4️⃣ triggering Vary (Region)...")
r4 = _post("/submit/action", {"taskId": upscale_task_id, "customId": custom_id})
modal_task_id = r4["result"]

---------- 4. 生成蒙版(简单画个白色矩形) ----------#

print("4️⃣ creating mask...")
img_resp = session.get(image_url)
img = Image.open(BytesIO(img_resp.content)).convert("RGB")
W, H = img.size
""" 局部重绘,选择区域
mask = Image.new("L", (W, H), 0) # 全黑
draw = ImageDraw.Draw(mask)#
draw.rectangle([0, 0, W, H], fill=255)
"""
mask = Image.new("L", (W, H), 255) # 全局重绘
buf = BytesIO()
mask.save(buf, format="PNG")
mask_b64 = base64.b64encode(buf.getvalue()).decode()

---------- 5. 提交 modal(局部重绘) ----------#

new_prompt = "a cute steampunk cat wearing futuristic VR goggles"
print("5️⃣ submitting modal...")
r5 = _post("/submit/modal", {
"taskId": modal_task_id,
"prompt": new_prompt,
"maskBase64": mask_b64
})
final_task_id = r5["result"]
print(f" final taskId = {final_task_id}")

---------- 6. 等待最终结果 ----------#

print("6️⃣ waiting for inpaint result...")
final_data = wait_task(final_task_id)
if final_data["status"] != "SUCCESS":
raise RuntimeError("inpaint 失败", final_data)
print("✅ Done! 最终图片地址:", final_data["imageUrl"])
修改于 2026-02-04 11:53:36
上一页
分析图片(传url)
下一页
任务查询接口
Built with