@acedatacloud/skills 2026.622.4 → 2026.627.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +0 -1
- package/README.md +2 -4
- package/package.json +1 -2
- package/skills/_shared/mcp-servers.md +0 -1
- package/skills/acedatacloud-api/SKILL.md +1 -1
- package/skills/google-drive/SKILL.md +25 -115
- package/skills/midjourney-image/SKILL.md +0 -170
package/AGENTS.md
CHANGED
|
@@ -12,7 +12,6 @@ Skills are located in the `skills/` directory (also mirrored to `.agents/skills/
|
|
|
12
12
|
- **fish-audio** — Text-to-speech and voice synthesis with Fish Audio
|
|
13
13
|
|
|
14
14
|
### AI Image Generation
|
|
15
|
-
- **midjourney-image** — Generate, edit, blend, describe, and upscale images with Midjourney
|
|
16
15
|
- **flux-image** — Generate and edit images with Flux (Black Forest Labs)
|
|
17
16
|
- **seedream-image** — Generate and edit images with ByteDance Seedream
|
|
18
17
|
- **nano-banana-image** — Generate and edit images with Google Gemini (NanoBanana)
|
package/README.md
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
|
|
13
13
|
Compatible with **30+ AI coding agents** via the [agentskills.io](https://agentskills.io/) open standard: Claude Code, GitHub Copilot, Gemini CLI, OpenAI Codex, Cursor, Roo Code, Goose, and more.
|
|
14
14
|
|
|
15
|
-
## Available Skills (
|
|
15
|
+
## Available Skills (29)
|
|
16
16
|
|
|
17
17
|
### AI Music & Audio
|
|
18
18
|
|
|
@@ -26,7 +26,6 @@ Compatible with **30+ AI coding agents** via the [agentskills.io](https://agents
|
|
|
26
26
|
|
|
27
27
|
| Skill | Description |
|
|
28
28
|
|-------|-------------|
|
|
29
|
-
| [midjourney-image](skills/midjourney-image/) | Generate, edit, blend, describe, and upscale images with Midjourney |
|
|
30
29
|
| [flux-image](skills/flux-image/) | Generate and edit images with Flux (Black Forest Labs) |
|
|
31
30
|
| [seedream-image](skills/seedream-image/) | Generate and edit images with ByteDance Seedream |
|
|
32
31
|
| [nano-banana-image](skills/nano-banana-image/) | Generate and edit images with Google Gemini (NanoBanana) |
|
|
@@ -92,7 +91,7 @@ export ACEDATACLOUD_API_TOKEN="your-token-here"
|
|
|
92
91
|
npx skills add acedatacloud/skills --skill '*' --yes
|
|
93
92
|
|
|
94
93
|
# Install specific skills only
|
|
95
|
-
npx skills add acedatacloud/skills --skill suno-music --skill
|
|
94
|
+
npx skills add acedatacloud/skills --skill suno-music --skill flux-image --yes
|
|
96
95
|
```
|
|
97
96
|
|
|
98
97
|
The [`skills` CLI](https://github.com/vercel-labs/skills) auto-detects your agent and installs to the correct path.
|
|
@@ -197,7 +196,6 @@ Skills provide **knowledge** (when to use, parameters, gotchas). MCP servers pro
|
|
|
197
196
|
| Skill | MCP Server | Install | Hosted Endpoint |
|
|
198
197
|
|-------|-----------|---------|-----------------|
|
|
199
198
|
| suno-music | [mcp-suno](https://pypi.org/project/mcp-suno/) | `pip install mcp-suno` | `https://suno.mcp.acedata.cloud/mcp` |
|
|
200
|
-
| midjourney-image | [mcp-midjourney](https://pypi.org/project/mcp-midjourney/) | `pip install mcp-midjourney` | `https://midjourney.mcp.acedata.cloud/mcp` |
|
|
201
199
|
| google-search | [mcp-serp](https://pypi.org/project/mcp-serp/) | `pip install mcp-serp` | `https://serp.mcp.acedata.cloud/mcp` |
|
|
202
200
|
| flux-image | [mcp-flux-pro](https://pypi.org/project/mcp-flux-pro/) | `pip install mcp-flux-pro` | `https://flux.mcp.acedata.cloud/mcp` |
|
|
203
201
|
| luma-video | [mcp-luma](https://pypi.org/project/mcp-luma/) | `pip install mcp-luma` | `https://luma.mcp.acedata.cloud/mcp` |
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@acedatacloud/skills",
|
|
3
|
-
"version": "2026.
|
|
3
|
+
"version": "2026.627.1",
|
|
4
4
|
"description": "Agent Skills for AceDataCloud AI services — music, image, video generation, LLM chat, web search. Compatible with Claude Code, GitHub Copilot, Gemini CLI, OpenAI Codex, and 30+ AI coding agents.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"agent-skills",
|
|
@@ -12,7 +12,6 @@
|
|
|
12
12
|
"openai-codex",
|
|
13
13
|
"ai-tools",
|
|
14
14
|
"suno",
|
|
15
|
-
"midjourney",
|
|
16
15
|
"flux",
|
|
17
16
|
"luma",
|
|
18
17
|
"sora",
|
|
@@ -8,7 +8,6 @@ Each AceDataCloud service has a corresponding MCP server that provides tool-use
|
|
|
8
8
|
|-------|---------|-----------------|
|
|
9
9
|
| suno-music | `pip install mcp-suno` | `https://suno.mcp.acedata.cloud/mcp` |
|
|
10
10
|
| producer-music | — | — |
|
|
11
|
-
| midjourney-image | `pip install mcp-midjourney` | `https://midjourney.mcp.acedata.cloud/mcp` |
|
|
12
11
|
| google-search | `pip install mcp-serp` | `https://serp.mcp.acedata.cloud/mcp` |
|
|
13
12
|
| flux-image | `pip install mcp-flux-pro` | `https://flux.mcp.acedata.cloud/mcp` |
|
|
14
13
|
| luma-video | `pip install mcp-luma` | `https://luma.mcp.acedata.cloud/mcp` |
|
|
@@ -112,7 +112,7 @@ Error response format:
|
|
|
112
112
|
| Category | Services | Base Path |
|
|
113
113
|
|----------|----------|-----------|
|
|
114
114
|
| **AI Chat** | GPT, Claude, Gemini, Kimi, Grok | `/v1/chat/completions` |
|
|
115
|
-
| **Image Gen** |
|
|
115
|
+
| **Image Gen** | Flux, Seedream, NanoBanana | `/flux/*`, `/seedream/*`, etc. |
|
|
116
116
|
| **Video Gen** | Luma, Sora, Veo, Kling, Hailuo, Seedance, Wan | `/luma/*`, `/sora/*`, etc. |
|
|
117
117
|
| **Music Gen** | Suno, Producer, Fish Audio | `/suno/*`, `/producer/*`, `/fish/*` |
|
|
118
118
|
| **Search** | Google Search (web/images/news/maps) | `/serp/*` |
|
|
@@ -1,14 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: google-drive
|
|
3
|
-
description: Read,
|
|
3
|
+
description: Read, export, upload, rename, move and delete Google Drive files explicitly selected or shared with the app via the Drive v3 REST API. Use when the user provides a Drive file ID/link or has selected files for the Google Drive connector.
|
|
4
4
|
when_to_use: |
|
|
5
|
-
Trigger when the user wants to
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
trashing files. The installed connector always grants `drive.readonly`;
|
|
10
|
-
the user opts in to the broader `drive` scope (full read + write)
|
|
11
|
-
at install time — confirm before performing destructive writes.
|
|
5
|
+
Trigger when the user wants to read, download, export or modify Google
|
|
6
|
+
Drive files they explicitly selected, created, opened, or shared with
|
|
7
|
+
this app. The installed connector currently grants only `drive.file`,
|
|
8
|
+
so do not browse, search, or summarize the user's entire Drive.
|
|
12
9
|
connections: [google/drive]
|
|
13
10
|
allowed_tools: [Bash]
|
|
14
11
|
license: Apache-2.0
|
|
@@ -19,17 +16,21 @@ metadata:
|
|
|
19
16
|
|
|
20
17
|
Drive Google Drive via `curl + jq`. The user's OAuth bearer token is
|
|
21
18
|
in `$GOOGLE_DRIVE_TOKEN`; every call needs it as
|
|
22
|
-
`Authorization: Bearer $GOOGLE_DRIVE_TOKEN`.
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
time it also carries the broader `drive` scope (full read + write).
|
|
19
|
+
`Authorization: Bearer $GOOGLE_DRIVE_TOKEN`. The token carries
|
|
20
|
+
`drive.file` plus identity scopes (`openid email profile`) and can only
|
|
21
|
+
access files the user selected, opened, created, or shared with this app.
|
|
26
22
|
|
|
27
23
|
The Drive API returns standard JSON; failures surface as
|
|
28
24
|
`{"error": {"code": 401|403|..., "message": "..."}}` — show that
|
|
29
25
|
error verbatim to the user. `401` means the token expired and the
|
|
30
26
|
user must re-install the connector. `403 insufficientPermissions`
|
|
31
|
-
|
|
32
|
-
|
|
27
|
+
means the file was not shared with this app, or the action needs a
|
|
28
|
+
broader Drive scope that is temporarily disabled during Google review.
|
|
29
|
+
|
|
30
|
+
Do not use this skill for broad Drive discovery: no "list my recent
|
|
31
|
+
files", full-text search across Drive, shared-with-me scans, root-folder
|
|
32
|
+
cleanup, or bulk moves based on a Drive-wide query. Ask the user to pick
|
|
33
|
+
or paste the exact file/folder IDs first.
|
|
33
34
|
|
|
34
35
|
**Before any destructive write** (renaming, moving, trashing, or
|
|
35
36
|
bulk-mutating files) show the exact target list and ask the user to
|
|
@@ -52,8 +53,8 @@ upload protocol.
|
|
|
52
53
|
hand-formatted `multipart/related` body with a JSON metadata part and a
|
|
53
54
|
binary file part separated by a boundary string — easy to get wrong from
|
|
54
55
|
curl. `gws drive +upload` does it correctly. **For everything else**
|
|
55
|
-
(
|
|
56
|
-
|
|
56
|
+
(get, export, rename, move, trash, delete) the curl recipes below are
|
|
57
|
+
equivalent and shorter — stay on those.
|
|
57
58
|
|
|
58
59
|
### Install
|
|
59
60
|
|
|
@@ -90,9 +91,7 @@ gws drive files create \
|
|
|
90
91
|
```
|
|
91
92
|
|
|
92
93
|
Both exit non-zero with a structured JSON error on stderr if Google
|
|
93
|
-
rejects the request — surface that verbatim.
|
|
94
|
-
`drive` scope; on `403 insufficientPermissions` ask the user to
|
|
95
|
-
re-install the connector with read+write checked.
|
|
94
|
+
rejects the request — surface that verbatim.
|
|
96
95
|
|
|
97
96
|
## Recipes
|
|
98
97
|
|
|
@@ -104,56 +103,9 @@ curl -sS -H "Authorization: Bearer $GOOGLE_DRIVE_TOKEN" \
|
|
|
104
103
|
| jq '{user, quota: .storageQuota}'
|
|
105
104
|
```
|
|
106
105
|
|
|
107
|
-
### List
|
|
108
|
-
|
|
109
|
-
```sh
|
|
110
|
-
curl -sS -H "Authorization: Bearer $GOOGLE_DRIVE_TOKEN" \
|
|
111
|
-
"https://www.googleapis.com/drive/v3/files?orderBy=modifiedTime%20desc&pageSize=20&fields=files(id,name,mimeType,modifiedTime,owners(emailAddress),webViewLink,parents)" \
|
|
112
|
-
| jq '.files[] | {id, name, mimeType, modified: .modifiedTime, owner: .owners[0].emailAddress, webViewLink}'
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
`pageSize` max is 1000; default is 100. Use `pageToken` from the
|
|
116
|
-
response (`nextPageToken`) for follow-up pages.
|
|
117
|
-
|
|
118
|
-
### Search by name / fulltext
|
|
119
|
-
|
|
120
|
-
```sh
|
|
121
|
-
# Exact-name fragments — note "name contains" supports tokens, not regex
|
|
122
|
-
Q='name contains "季度复盘" and trashed = false'
|
|
123
|
-
curl -sS -H "Authorization: Bearer $GOOGLE_DRIVE_TOKEN" \
|
|
124
|
-
--get "https://www.googleapis.com/drive/v3/files" \
|
|
125
|
-
--data-urlencode "q=$Q" \
|
|
126
|
-
--data-urlencode 'fields=files(id,name,mimeType,modifiedTime,webViewLink,owners(emailAddress))' \
|
|
127
|
-
--data-urlencode 'pageSize=20' \
|
|
128
|
-
| jq '.files[] | {id, name, modified: .modifiedTime, owner: .owners[0].emailAddress}'
|
|
129
|
-
|
|
130
|
-
# Full-text search (body + title)
|
|
131
|
-
Q='fullText contains "OKR 2026Q2" and trashed = false'
|
|
132
|
-
curl -sS -H "Authorization: Bearer $GOOGLE_DRIVE_TOKEN" \
|
|
133
|
-
--get "https://www.googleapis.com/drive/v3/files" \
|
|
134
|
-
--data-urlencode "q=$Q" \
|
|
135
|
-
--data-urlencode 'fields=files(id,name,modifiedTime,webViewLink)' \
|
|
136
|
-
| jq '.files[]'
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
The `q` param uses [Drive's mini query language](https://developers.google.com/drive/api/guides/search-files):
|
|
140
|
-
`name`, `fullText`, `mimeType`, `parents`, `'<email>' in owners`,
|
|
141
|
-
`'<email>' in writers`, `modifiedTime > '2026-01-01T00:00:00'`,
|
|
142
|
-
`sharedWithMe`, `trashed`, joined by `and` / `or` / `not`.
|
|
143
|
-
|
|
144
|
-
### List files shared with me
|
|
106
|
+
### List children of a selected folder
|
|
145
107
|
|
|
146
|
-
|
|
147
|
-
curl -sS -H "Authorization: Bearer $GOOGLE_DRIVE_TOKEN" \
|
|
148
|
-
--get "https://www.googleapis.com/drive/v3/files" \
|
|
149
|
-
--data-urlencode 'q=sharedWithMe and trashed = false' \
|
|
150
|
-
--data-urlencode 'orderBy=sharedWithMeTime desc' \
|
|
151
|
-
--data-urlencode 'fields=files(id,name,mimeType,sharedWithMeTime,owners(displayName,emailAddress))' \
|
|
152
|
-
--data-urlencode 'pageSize=30' \
|
|
153
|
-
| jq '.files[] | {name, sharedAt: .sharedWithMeTime, sharedBy: .owners[0]}'
|
|
154
|
-
```
|
|
155
|
-
|
|
156
|
-
### List children of a folder
|
|
108
|
+
Only use this after the user explicitly selected or provided the folder ID.
|
|
157
109
|
|
|
158
110
|
```sh
|
|
159
111
|
FOLDER_ID='1A2B3CdEfGhIjKlMn'
|
|
@@ -234,28 +186,11 @@ curl -sS -H "Authorization: Bearer $GOOGLE_DRIVE_TOKEN" \
|
|
|
234
186
|
| jq '.permissions[] | {who: (.emailAddress // .domain // .type), role}'
|
|
235
187
|
```
|
|
236
188
|
|
|
237
|
-
### Pagination boilerplate
|
|
238
|
-
|
|
239
|
-
```sh
|
|
240
|
-
PAGE_TOKEN=''
|
|
241
|
-
while : ; do
|
|
242
|
-
RESP=$(curl -sS -H "Authorization: Bearer $GOOGLE_DRIVE_TOKEN" \
|
|
243
|
-
--get "https://www.googleapis.com/drive/v3/files" \
|
|
244
|
-
--data-urlencode 'q=trashed = false' \
|
|
245
|
-
--data-urlencode 'fields=files(id,name),nextPageToken' \
|
|
246
|
-
--data-urlencode 'pageSize=200' \
|
|
247
|
-
${PAGE_TOKEN:+--data-urlencode "pageToken=$PAGE_TOKEN"})
|
|
248
|
-
echo "$RESP" | jq -c '.files[]'
|
|
249
|
-
PAGE_TOKEN=$(echo "$RESP" | jq -r '.nextPageToken // empty')
|
|
250
|
-
[ -z "$PAGE_TOKEN" ] && break
|
|
251
|
-
done
|
|
252
|
-
```
|
|
253
|
-
|
|
254
189
|
## Write recipes
|
|
255
190
|
|
|
256
|
-
These
|
|
257
|
-
|
|
258
|
-
|
|
191
|
+
These only work for files and folders available through `drive.file`.
|
|
192
|
+
If Google returns `403 insufficientPermissions`, surface the error and
|
|
193
|
+
ask the user to select/share the target file with the app.
|
|
259
194
|
**Always echo the target name + path back to the user before
|
|
260
195
|
trashing or bulk-moving anything.**
|
|
261
196
|
|
|
@@ -365,39 +300,14 @@ Prefer `trashed:true` over `DELETE` — `DELETE` is permanent and the
|
|
|
365
300
|
user can't undo it. Only use `DELETE` when they explicitly say
|
|
366
301
|
"permanently delete".
|
|
367
302
|
|
|
368
|
-
### Bulk "move every PDF in the root to /Documents/PDF" (confirmation pattern)
|
|
369
|
-
|
|
370
|
-
```sh
|
|
371
|
-
# 1. List candidates and show the user before doing anything
|
|
372
|
-
DST_FOLDER_ID='1XYZdocsPdfFolder'
|
|
373
|
-
ROOT_ID='root'
|
|
374
|
-
|
|
375
|
-
CANDS=$(curl -sS -H "Authorization: Bearer $GOOGLE_DRIVE_TOKEN" \
|
|
376
|
-
--get "https://www.googleapis.com/drive/v3/files" \
|
|
377
|
-
--data-urlencode "q='$ROOT_ID' in parents and mimeType='application/pdf' and trashed=false" \
|
|
378
|
-
--data-urlencode 'fields=files(id,name,webViewLink)' \
|
|
379
|
-
| jq '.files')
|
|
380
|
-
echo "$CANDS" | jq -r '.[] | "- \(.name)"'
|
|
381
|
-
|
|
382
|
-
# 2. (after user confirms) actually move
|
|
383
|
-
echo "$CANDS" | jq -r '.[] | .id' | while read FID; do
|
|
384
|
-
curl -sS -X PATCH -H "Authorization: Bearer $GOOGLE_DRIVE_TOKEN" \
|
|
385
|
-
--data '' \
|
|
386
|
-
"https://www.googleapis.com/drive/v3/files/$FID?addParents=$DST_FOLDER_ID&removeParents=$ROOT_ID&fields=id,name,parents" \
|
|
387
|
-
| jq -c '{id, name, parents}'
|
|
388
|
-
done
|
|
389
|
-
```
|
|
390
|
-
|
|
391
303
|
## Common error codes
|
|
392
304
|
|
|
393
305
|
| HTTP | meaning | what to tell the user |
|
|
394
306
|
|---|---|---|
|
|
395
307
|
| `401 UNAUTHENTICATED` | token expired / revoked | "Reconnect the Google Drive connector on the Connections page." |
|
|
396
|
-
| `403 insufficientPermissions` |
|
|
308
|
+
| `403 insufficientPermissions` | target not shared with app / broader Drive scope disabled | "This file isn't available to the app under the current `drive.file` permission. Select or share the exact file with the Google Drive connector, then try again." |
|
|
397
309
|
| `403 userRateLimitExceeded` | quota | retry once after 5–10s; if it persists, tell the user. |
|
|
398
|
-
| `404 notFound` | wrong file id OR file isn't visible to this
|
|
310
|
+
| `404 notFound` | wrong file id OR file isn't visible to this app | double-check the id; ask the user to select or share the file with the connector. |
|
|
399
311
|
| `400 invalidQuery` | malformed `q` | print the `q` you sent + the error message back to the user. |
|
|
400
312
|
|
|
401
313
|
Never log or echo `$GOOGLE_DRIVE_TOKEN` — treat it as a secret.
|
|
402
|
-
|
|
403
|
-
Never log or echo `$GOOGLE_DRIVE_TOKEN` — treat it as a secret.
|
|
@@ -1,170 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: midjourney-image
|
|
3
|
-
description: Generate, edit, blend, upscale, and describe images with Midjourney via AceDataCloud API. Use when creating AI images from text prompts, editing existing images, generating 2x2 grids, upscaling, creating variations, blending multiple images, reverse-prompting from images, or generating video from images. Supports versions 5.2 through 8.
|
|
4
|
-
license: Apache-2.0
|
|
5
|
-
metadata:
|
|
6
|
-
author: acedatacloud
|
|
7
|
-
version: "1.0"
|
|
8
|
-
compatibility: Requires ACEDATACLOUD_API_TOKEN in .env file (see _shared/authentication.md). Optionally pair with mcp-midjourney for tool-use.
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
# Midjourney Image Generation
|
|
12
|
-
|
|
13
|
-
Generate and manipulate AI images through AceDataCloud's Midjourney API.
|
|
14
|
-
|
|
15
|
-
> **Setup:** See [authentication](../_shared/authentication.md) for token setup.
|
|
16
|
-
|
|
17
|
-
## Quick Start — Generate an Image
|
|
18
|
-
|
|
19
|
-
```bash
|
|
20
|
-
curl -X POST https://api.acedata.cloud/midjourney/imagine \
|
|
21
|
-
-H "Authorization: Bearer $ACEDATACLOUD_API_TOKEN" \
|
|
22
|
-
-H "Content-Type: application/json" \
|
|
23
|
-
-d '{"prompt": "a futuristic city at sunset, cyberpunk style --ar 16:9", "callback_url": "https://api.acedata.cloud/health"}'
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
> **Async:** See [async task polling](../_shared/async-tasks.md). Poll via `POST /midjourney/tasks` with `{"id": "..."}`.
|
|
27
|
-
|
|
28
|
-
## Generation Modes
|
|
29
|
-
|
|
30
|
-
| Mode | Speed | Cost | Best For |
|
|
31
|
-
|------|-------|------|----------|
|
|
32
|
-
| `fast` | Fast | Standard | Most tasks (default) |
|
|
33
|
-
| `relax` | Slow | Cheaper | Batch generation |
|
|
34
|
-
| `turbo` | Fastest | Premium | Time-sensitive work |
|
|
35
|
-
|
|
36
|
-
## Midjourney Versions
|
|
37
|
-
|
|
38
|
-
| Version | Notes |
|
|
39
|
-
|---------|-------|
|
|
40
|
-
| `8` | Latest, best quality |
|
|
41
|
-
| `7` | Great quality, fast |
|
|
42
|
-
| `6.1` | Stable, well-tested |
|
|
43
|
-
| `6` | Previous generation |
|
|
44
|
-
| `5.2` | Legacy |
|
|
45
|
-
|
|
46
|
-
## Core Workflows
|
|
47
|
-
|
|
48
|
-
### 1. Generate Images (Imagine)
|
|
49
|
-
|
|
50
|
-
Creates a 2x2 grid of 4 image variations.
|
|
51
|
-
|
|
52
|
-
```json
|
|
53
|
-
POST /midjourney/imagine
|
|
54
|
-
{
|
|
55
|
-
"prompt": "a serene mountain lake at dawn, photorealistic --ar 16:9 --v 7",
|
|
56
|
-
"mode": "fast",
|
|
57
|
-
"translation": true,
|
|
58
|
-
"split_images": true
|
|
59
|
-
}
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
Set `translation: true` to auto-translate non-English prompts. Set `split_images: true` to get individual images besides the grid.
|
|
63
|
-
|
|
64
|
-
### 2. Upscale / Vary / Pan / Zoom
|
|
65
|
-
|
|
66
|
-
After generating a grid, use transform actions on individual images:
|
|
67
|
-
|
|
68
|
-
```json
|
|
69
|
-
POST /midjourney/imagine
|
|
70
|
-
{
|
|
71
|
-
"action": "upscale1",
|
|
72
|
-
"image_id": "grid-image-id"
|
|
73
|
-
}
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
**Available actions:**
|
|
77
|
-
- `upscale1`–`upscale4`: Upscale individual quadrant
|
|
78
|
-
- `variation1`–`variation4`: Create variation of a quadrant
|
|
79
|
-
- `variation_subtle` / `variation_strong`: Subtle/strong variation of full image
|
|
80
|
-
- `reroll`: Re-generate with same prompt
|
|
81
|
-
- `zoom_out_2x` / `zoom_out_1_5x`: Zoom out
|
|
82
|
-
- `pan_left` / `pan_right` / `pan_up` / `pan_down`: Extend canvas
|
|
83
|
-
|
|
84
|
-
### 3. Edit an Image
|
|
85
|
-
|
|
86
|
-
Modify an existing image using a text prompt, optionally with a mask.
|
|
87
|
-
|
|
88
|
-
```json
|
|
89
|
-
POST /midjourney/edits
|
|
90
|
-
{
|
|
91
|
-
"image_url": "https://example.com/photo.jpg",
|
|
92
|
-
"prompt": "add a rainbow in the sky",
|
|
93
|
-
"mode": "fast"
|
|
94
|
-
}
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
### 4. Blend Images
|
|
98
|
-
|
|
99
|
-
Combine 2–5 images into a new composition.
|
|
100
|
-
|
|
101
|
-
```json
|
|
102
|
-
POST /midjourney/imagine
|
|
103
|
-
{
|
|
104
|
-
"action": "blend",
|
|
105
|
-
"image_urls": [
|
|
106
|
-
"https://example.com/image1.jpg",
|
|
107
|
-
"https://example.com/image2.jpg"
|
|
108
|
-
]
|
|
109
|
-
}
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
### 5. Describe an Image (Reverse Prompt)
|
|
113
|
-
|
|
114
|
-
Get AI-generated text descriptions of an image (returns 4 options).
|
|
115
|
-
|
|
116
|
-
```json
|
|
117
|
-
POST /midjourney/describe
|
|
118
|
-
{"image_url": "https://example.com/photo.jpg"}
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
### 6. Generate Video from Image
|
|
122
|
-
|
|
123
|
-
Create a video with a reference image and text prompt.
|
|
124
|
-
|
|
125
|
-
```json
|
|
126
|
-
POST /midjourney/videos
|
|
127
|
-
{
|
|
128
|
-
"image_url": "https://example.com/photo.jpg",
|
|
129
|
-
"prompt": "the city comes alive with moving traffic",
|
|
130
|
-
"resolution": "720p"
|
|
131
|
-
}
|
|
132
|
-
```
|
|
133
|
-
|
|
134
|
-
## Prompt Parameters
|
|
135
|
-
|
|
136
|
-
Append these to your prompt text:
|
|
137
|
-
|
|
138
|
-
| Parameter | Example | Description |
|
|
139
|
-
|-----------|---------|-------------|
|
|
140
|
-
| `--ar` | `--ar 16:9` | Aspect ratio |
|
|
141
|
-
| `--v` | `--v 7` | Midjourney version |
|
|
142
|
-
| `--q` | `--q 2` | Quality (0.25, 0.5, 1, 2) |
|
|
143
|
-
| `--s` | `--s 750` | Stylization (0–1000) |
|
|
144
|
-
| `--c` | `--c 50` | Chaos/variety (0–100) |
|
|
145
|
-
| `--no` | `--no text, watermark` | Negative prompt |
|
|
146
|
-
| `--seed` | `--seed 12345` | Reproducible generation |
|
|
147
|
-
|
|
148
|
-
## API-Level Parameters (Billing Impact)
|
|
149
|
-
|
|
150
|
-
These top-level fields on `POST /midjourney/imagine` affect billing and are separate from inline prompt parameters:
|
|
151
|
-
|
|
152
|
-
| Parameter | Type | Description |
|
|
153
|
-
|-----------|------|-------------|
|
|
154
|
-
| `version` | string | Midjourney version (`"8"`, `"7"`, `"6.1"`, etc.) — used for billing calculation |
|
|
155
|
-
| `hd` | boolean | Enable HD 2K resolution (V8 only) — costs 4× GPU time |
|
|
156
|
-
| `quality` | string | Quality level: `".25"`, `".5"`, `"1"`, `"2"`, `"4"` — quality `"4"` is V8 only and costs 4× GPU time |
|
|
157
|
-
| `style_reference` | boolean | Whether prompt uses `--sref` style references (V8: costs 4× GPU time) |
|
|
158
|
-
| `moodboard` | boolean | Whether prompt uses moodboard image references (V8: costs 4× GPU time) |
|
|
159
|
-
|
|
160
|
-
## Gotchas
|
|
161
|
-
|
|
162
|
-
- Imagine returns a **2x2 grid** — use upscale/variation actions to work with individual images
|
|
163
|
-
- Use `split_images: true` to also receive individual cropped images alongside the grid
|
|
164
|
-
- Prompt parameters (`--ar`, `--v`, etc.) go **inside the prompt string**, not as separate fields
|
|
165
|
-
- `translation: true` auto-translates Chinese/other languages to English before sending to Midjourney
|
|
166
|
-
- Video generation requires a reference `image_url` — it cannot generate from text alone
|
|
167
|
-
- Available transform actions depend on the image — check `available_actions` in the response
|
|
168
|
-
- Get the seed with `POST /midjourney/seed` using the image_id for reproducible results
|
|
169
|
-
|
|
170
|
-
> **MCP:** `pip install mcp-midjourney` | Hosted: `https://midjourney.mcp.acedata.cloud/mcp` | See [all MCP servers](../_shared/mcp-servers.md)
|