🎯 핵심 개념 이해하기
MidJourney API는 Discord 버튼 상호작용을 시뮬레이션합니다. 일반적인 REST API와 달리, 각 작업이 다음 단계에 사용할 새로운 버튼을 반환하는 상태 머신처럼 동작합니다.4가지 핵심 API
| API | 용도 | 사용 시점 |
|---|---|---|
POST /mj/submit/imagine | 텍스트-이미지 생성 | 모든 워크플로의 시작점 |
GET /mj/task/\{id\}/fetch | 작업 상태 조회 및 버튼 가져오기 | 매 submit 이후(완료될 때까지 폴링) |
POST /mj/submit/action | 버튼 클릭(upscale, vary, zoom 등) | 이미지에 작업을 수행하고 싶을 때 |
POST /mj/submit/modal | 추가 입력 제출 | status가 MODAL일 때만 |
📊 전체 워크플로 다이어그램
🔑 핵심 개념: Buttons와 customId
성공한 모든 작업은buttons 배열을 반환합니다. 각 버튼에는 다음 작업을 실행할 때 사용하는 customId가 있습니다.
/mj/task/\{id\}/fetch의 응답 예시:
customId는 고정된 값이 아닙니다. 작업마다 바뀝니다. 항상 buttons 배열에서 가져오세요.
📋 단계별 버튼 참조
IMAGINE 이후(4분할 그리드 이미지)
초기 이미지 생성이 완료되면 다음 버튼이 반환됩니다:| Button | customId Pattern | Action | Result |
|---|---|---|---|
| U1-U4 | MJ::JOB::upsample::1::xxx | 단일 이미지 업스케일 | 고해상도 단일 이미지 |
| V1-V4 | MJ::JOB::variation::1::xxx | 변형 생성 | 새로운 4분할 그리드 |
| 🔄 | MJ::JOB::reroll::0::xxx::SOLO | 전체 재생성 | 새로운 4분할 그리드 |
UPSCALE 이후(단일 이미지)
업스케일 후에는 편집 도구를 사용할 수 있습니다:| Label | Needs Modal? |
|---|---|
| Upscale (Subtle) / Upscale (2x) | ❌ 아니요 |
| Upscale (Creative) / Upscale (4x) | ❌ 아니요 |
| Vary (Subtle) 🪄 | ❌ 아니요 |
| Vary (Strong) 🪄 | ❌ 아니요 |
| Vary (Region) 🖌️ | ✅ 예(마스크) |
| Zoom Out 2x / 1.5x 🔍 | ❌ 아니요 |
| Custom Zoom 🔍 | ✅ 예(프롬프트) |
| ⬅️➡️⬆️⬇️ Pan | ❌ 아니요 |
| Animate 🎞️ | ❌ 아니요 |
| 🔄 Reroll | ❌ 아니요 |
참고: 버튼 라벨과⚠️ Inpaint (Vary Region) 버튼은 Upscale 이후에만 표시됩니다!customId형식은 프롬프트에 지정한 MJ 버전(예:--v 6.1vs--v 5.2)에 따라 달라질 수 있습니다. 항상 API 응답에서 버튼을 확인하세요.
⚡ 전체 예제: 생성 & 업스케일
1단계: Imagine 요청 제출
2단계: 작업 상태 폴링
3단계: U1 클릭하여 업스케일
4단계: 새 작업 폴링 및 결과 가져오기
⚠️ Modal은 언제 필요한가요?
/mj/submit/action을 호출했을 때 작업 상태가 SUCCESS가 아니라 MODAL이 되면, 추가 입력을 제공하기 위해 /mj/submit/modal을 호출해야 합니다.
확인된 Modal 작업
| Operation | Button | What to Submit |
|---|---|---|
| Inpaint | Vary (Region) | maskBase64 (PNG 마스크) + prompt |
| Custom Zoom | 🔍 Custom Zoom | prompt (예: “your prompt —zoom 2”) |
🚀 속도 모드 선택
경로에 속도 접두사를 추가하세요:| 모드 | 경로 접두사 | 예시 |
|---|---|---|
| Fast | /mj-fast | /mj-fast/mj/submit/imagine |
| Turbo | /mj-turbo | /mj-turbo/mj/submit/imagine |
| Relax | (기본값) | /mj/submit/imagine |
🔗 기타 진입점
이 API들은 imagine → action 흐름을 따르지 않는 독립적인 진입점입니다:| API | 용도 |
|---|---|
POST /mj/submit/blend | 2~5개의 이미지를 하나로 블렌드 |
POST /mj/submit/describe | 이미지에서 프롬프트(Prompt) 생성 |
POST /mj/submit/video | 이미지를 비디오로 변환 |
POST /mj/submit/edits | 마스크를 사용해 이미지 편집 |
❓ 문제 해결 팁
API 설계와 워크플로를 기준으로, 다음은 자주 발생할 수 있는 문제들입니다:| 문제 | 가능한 원인 | 해결 방법 |
|---|---|---|
| Vary (Region) 버튼을 찾을 수 없음 | 4분할 그리드 이미지를 보고 있음 | 먼저 업스케일(U1-U4 클릭)한 뒤 버튼 확인 |
작업 상태가 MODAL에 멈춤 | 작업에 추가 입력이 필요함 | 필요한 데이터와 함께 /mj/submit/modal 호출 |
customId가 작동하지 않음 | 오래되었거나 하드코딩된 값을 사용 중 | 항상 /mj/task/\{id\}/fetch 응답에서 최신 customId를 가져오세요 |
buttons 배열이 비어 있음 | 작업이 아직 진행 중임 | 버튼에 접근하기 전에 status: "SUCCESS"를 기다리세요 |