# Account & Data Deletion
Source: https://docs.meigen.ai/en/account
Delete your MeiGen account and personal data from the web or mobile app, with an email fallback if you cannot sign in.
You can permanently delete your MeiGen account and the personal data associated with it at any time.
## Delete Your Account Yourself
The fastest way is to do it yourself — it takes effect immediately:
1. Sign in and open [**www.meigen.ai/account-deletion**](https://www.meigen.ai/account-deletion).
2. Type `DELETE` to confirm, then submit.
In the MeiGen mobile app, go to **Profile → Delete Account**. This works for accounts created on the website and in our iOS / Android apps.
## Can't Sign In?
Email **[support@meigen.ai](mailto:support@meigen.ai)** from the email address registered on your account, with the subject **"Account Deletion Request"**.
To help us verify and process your request quickly, please include:
* The email address (or sign-in method) used for your account
* A short confirmation that you want the account and its data permanently deleted
We verify that the request comes from the account owner before any data is removed. Verified requests are processed within 30 days.
## What Gets Deleted
* Your account, profile, and login credentials
* All images and videos you generated, and their files on our storage
* Reference images, characters, favorites, boards, and API tokens
* AI assistant logs tied to your account
## What We Retain
* **Community submissions that were accepted and published to the public gallery.** Under [Terms §5.5](https://www.meigen.ai/terms), the content license you granted survives account deletion — these artworks stay in the gallery with all of your personal information (name, avatar, social links) removed, the paid-creator badge cleared, and the author shown as "MeiGen Community". To request removal of a specific submission, email [support@meigen.ai](mailto:support@meigen.ai) **before** deleting your account. See [the gallery guide](/en/features/gallery) for how submissions work.
* Payment and billing records, kept in an archived form disconnected from your identity, as required for tax and accounting compliance.
* Security and anti-abuse logs (e.g. signup IP records), retained for fraud prevention.
Deletion is **permanent and cannot be undone**. Remaining credits are forfeited and are not refundable upon account deletion.
## Just Want to Stop Emails?
If you only want to stop receiving marketing emails (not delete your account), click the **unsubscribe** link at the bottom of any MeiGen email. Your account and generations stay intact.
[support@meigen.ai](mailto:support@meigen.ai) — account deletion, data requests, billing, and other help
# Generate Image or Video
Source: https://docs.meigen.ai/en/api-reference/endpoint/generate
Submit an image or video job with model options, reference media, and idempotent retries.
```
POST /api/generate/v2
```
Submits a generation request. The output is generated asynchronously — use the [status endpoint](#check-generation-status) to poll for completion. The same endpoint serves both image models (GPT Image 2.5, GPT Image 2, Nanobanana, Seedream, Midjourney, etc.) and video models (Seedance 2.5, Seedance 2.0, Veo 3.1, Grok Video, etc.) — select via `modelId`.
## Request
### Headers
| Header | Value |
| - | - |
| Authorization | `Bearer meigen_sk_YOUR_API_KEY` |
| Content-Type | `application/json` |
### Body Parameters
Long prompts for GPT Image 2 and 2.5 are automatically shortened to fit model limits. Keep essential instructions and preservation constraints explicit.
The text description of the image or video to generate. To reference a saved character, include `[character:]` inline — e.g. `"[character:550e8400-e29b-41d4-a716-446655440000] standing in a neon-lit alley, cinematic lighting"`. Up to 3 character references per generation.
Supported on image models that accept reference images (all except Flux 2 Klein) and on **Seedance 2.5 / 2.0** for video. Character images consume the same content-reference image budget as user-uploaded images. An unsupported model, a nonexistent or inaccessible character, or too many references returns `400` (`characters_not_supported`, `character_not_found`, `too_many_characters`); some characters require a higher `tier` (`character_tier_required`).
**Asset tokens** — write `[image1]`, `[video1]` or `[audio1]` inline to tell the model which reference asset a sentence is about: *"Match the grade of \[image1] and continue the motion of \[video1], scored to \[audio1]"*. Numbering is **1-based and per kind**, following the order of `referenceImages` / `referenceVideos` / `referenceAudios` in this request body — `[video2]` is the second entry of `referenceVideos`, not the second asset overall. The two kinds are resolved differently before the request reaches the model:
* **`[videoN]` / `[audioN]`** are rewritten to the vendor's own wording — `Video 1`, `Audio 1`. A token whose index exceeds the number of clips you actually sent is **dropped**, so `[video3]` with two clips attached leaves nothing behind. Writing the vendor wording directly — `"Video 1"` — works too, and is what MCP and REST callers usually do.
* **`[imageN]` and `[character:]`** are expanded into a descriptive phrase naming the position of the reference image the token resolves to — `[image1]` becomes *"the subject in reference image 1"*, a character token becomes *"the character in reference image 2"*. The reference planner may merge or reorder images before they reach the model, so the position in the phrase is the one the model actually sees and need not equal `N`. An `[imageN]` pointing past the images you sent is **left in the prompt as-is** rather than dropped — keep image indexes within the images you send.
Only the copy sent to the model is rewritten. The prompt stored on the generation keeps your original tokens, so reopening it in the editor still shows the mentions you typed.
The model to use for generation. If omitted, the platform default is used (may change over time).
**[List Models](/en/api-reference/endpoint/models) is the authoritative source for valid IDs.** Models are added and retired over time, so resolve IDs at runtime rather than hard-coding a copy of the catalogue. Every model that endpoint returns can be used here, including with an API token.
Frequently used values: `gpt-image-2.5`, `gpt-image-2`, `nanobanana-2.1`, `nanobanana-2`, `midjourney-v8.1` (images); `seedance-2-5`, `seedance-2-0`, `veo-3.1` (video).
Nanobanana 2.1 uses `modelId: "nanobanana-2.1"` and `resolution: "2K"` (5 credits) or `"4K"` (8 credits). It is separate from `nanobanana-2`, which remains available at 5 credits for either resolution.
> `rhart-1.5` (GPT image 1.5) was retired on 2026-04-22 — use `gpt-image-2` instead. `midjourney-v7` was replaced by `midjourney-v8.1` on 2026-05-09 (upgraded in place to V8.2 on 2026-09-02, same ID) (legacy `midjourney-v7` requests still accepted for backward compatibility).
The aspect ratio for the generated output.
* Default `auto` (recommended): a suitable ratio is picked for you.
* Or pass an explicit value — must be one of the ratios returned in `supported_ratios` from the [List Models](/en/api-reference/endpoint/models) endpoint. Common image ratios: `1:1`, `3:4`, `4:3`, `16:9`, `9:16`, `21:9`, `5:4`, `4:5`.
* Seedance 2.5 and 2.0 also accept `adaptive`, which follows the input media. Use it for first/last-frame and `referenceVideos` requests.
* For Seedance 2.5 text-to-video or `referenceMode: content`, pass an explicit supported ratio when you need a specific frame shape.
* **On Seedance 2.0, an omitted or unrecognised `aspectRatio` resolves to `adaptive`.** Pure text-to-video has nothing to adapt to, so always pass an explicit ratio when generating without a reference image or reference video.
The final ratio used is returned both in this endpoint's response and in the status endpoint's `aspectRatio` field.
The output resolution. Availability depends on the model. If omitted, the selected model's default is used.
Available values depend on the model: image models use `1K` / `2K` / `3K` / `4K`; video models use `480p` / `720p` / `1080p` / `4k` (note the lowercase `k` on video). Seedance 2.5 supports 480p / 720p / 1080p. Seedance 2.0 adds 1080p / 4k on `pro`; Veo 3.1 also supports 4k. With Seedance 2.0 `referenceVideos`, the ceiling is 1080p. See [Models](/en/features/models) for the complete matrix.
Quality is model-specific. GPT Image 2.5 accepts `low` (Standard), `medium` (Medium), `high` (High), `xhigh` (Extra High), and `max` (Max). GPT Image 2 accepts only `low` / `medium` / `high`. For GPT Image models, omit the field or use `auto` to follow the model's configured default (currently `low`).
Grok Imagine Image 2.0 accepts `low` (Standard, default) / `medium`. Read `extra_config.qualities` and `extra_config.pricing` from [List Models](/en/api-reference/endpoint/models). Unsupported GPT quality values return `400` / `unsupported_quality`.
GPT Image 2.5 only: `sunburst` (quality priority, configured default) or `flare` (speed priority). Both support generation and reference-image editing, with the same price for the same resolution and quality. References do not change this setting automatically.
Use `modelId: "gpt-image-2.5"` with this field. Do not use the variant names as separate model IDs or pass `modelVariant` with GPT Image 2 or another model. Invalid combinations return `400` / `unsupported_model_variant`.
Array of reference images. Each entry must be either a publicly accessible HTTP(S) URL, or inline base64 data in the form `data:image/png;base64,...`. Local file paths (e.g. `C:/Users/...`) and `file://` URIs are rejected with `400` / `invalid_reference_url`.
**Agnes Video 2.5 Flash — image-to-video ignores `aspectRatio`.** (This model has been
temporarily unavailable since 2026-09-22; the rule below applies whenever it is enabled.)
This model derives the
output ratio from the first frame itself. For images hosted on `images.meigen.ai`
(anything you generated or uploaded on MeiGen) we crop the frame to your requested
`aspectRatio` at the CDN edge first, so the output matches what you asked for. For any
other source — an external URL or `data:` base64 — the image is passed through as-is and
**the output ratio follows your image, not `aspectRatio`**.
If the exact output ratio matters for an external image, pre-crop it to that ratio before
sending, or pass the `imageUrl` of an earlier generation (already on our CDN).
Maximum count is per-model. For image models and video first/last-frame input, read `max_reference_images` from [List Models](/en/api-reference/endpoint/models). Seedance `content` mode instead uses `extra_config.maxContentReferenceImages`. At the time of writing:
| Limit | Models |
| - | - |
| 16 | GPT Image 2.5, GPT Image 2.0 |
| 14 | Nanobanana 2 / 2.1, Nanobanana Pro |
| 10 | Seedream 5.0 Pro, Seedream 4.5 |
| 3 | Grok Imagine Image 2.0 |
| 2 | Seedance 2.5, Seedance 2.0, Veo 3.1 — default `frame` mode (first/last frame), see `referenceMode` below |
| 1 | Midjourney V8.2, Agnes Image 2.5 Flash, Agnes Video 2.5 Flash, Grok Video 1.5 (**required** — image-to-video only) |
| 0 | Flux 2 Klein |
In `content` mode, Seedance 2.5 accepts up to 30 images and Seedance 2.0 accepts up to 9. When character tokens are present, their resolved images count toward the same limit.
Optional structured Seedance input for the first and last frame, in that order. Maximum 2. Use this together with `contentReferenceImages` when you need frame control and content guidance in the same request. Structured fields take precedence over the legacy `referenceImages` / `referenceMode` pair.
Optional structured Seedance content references: up to 30 for Seedance 2.5 or 9 for Seedance 2.0. These can coexist with `frameReferenceImages`, `referenceVideos`, `referenceAudios`, and saved-character references. Image, video and audio limits are three independent budgets; saved-character images count toward this image limit.
Seedance 2.5 and Seedance 2.0 only. Controls how those providers interpret `referenceImages`.
* `frame` (default) — first/last-frame reference, up to 2 images.
* `content` — content reference, not tied to a frame position. Read the current API limit from `extra_config.maxContentReferenceImages` (30 for Seedance 2.5 and 9 for Seedance 2.0).
Do not send this field for Veo, Grok, or Agnes video models; their providers do not implement content-reference mode and keep their normal frame behavior. Exceeding a supported limit returns `400` — `frame_reference_limit` in Seedance frame mode or `too_many_references` for content/other per-model limits.
Advanced parameters for Midjourney V8.2. Ignored for other models. (Field name preserved for backward compatibility.)
| Field | Type | Default | Range | Notes |
| - | - | - | - | - |
| stylize | number | 100 | 0–1000 | |
| chaos | number | 5 | 0–100 | |
| raw | boolean | false | — | |
| iw | number | 1 | 0–2 | |
| sref | string | — | URL or text | |
| sw | number | 100 | 0–1000 | |
| profile | string | — | Alphanumeric code | Midjourney personalization profile; works alongside `sref` |
| quality | string | `4` | `1` or `4` | Defaults to High (4× compute, no extra cost) |
For Midjourney V8.2 only. How to interpret the reference image.
* `content` — use as subject matter reference
* `style` — extract visual style only
Video duration in seconds. If omitted, the model renders and bills at its own default length:
| Model | Accepted values | Default |
| - | - | - |
| Seedance 2.5 | 4–30 | 4 |
| Seedance 2.0 | 4–15 | 4 |
| Veo 3.1 | 4, 6, 8 only | 4 |
| Grok Video 1.5 | 4–15 | 4 |
| Agnes Video 2.5 Flash (temporarily unavailable) | 5 only (fixed) | 5 |
The amount actually deducted is always returned as `creditsUsed` — treat that field as authoritative rather than computing the cost yourself.
Quality tier for models that expose multiple tiers.
* Seedance 2.0: `mini` (default), `fast` or `pro`
* Veo 3.1: `fast` (default) or `pro`
Seedance 2.5 has no tier; omit this field. Higher tiers render at higher fidelity for a higher price. If omitted, the model's own default tier is used — Seedance 2.0 defaults to `mini`. See [Models](/en/features/models) for the full pricing matrix.
Array of reference videos for Seedance 2.5 or Seedance 2.0 continuation. Every entry must be an `https://images.meigen.ai/...` URL — either a previous MeiGen generation's `videoUrl`, or a file you uploaded through the [reference-media upload endpoint](#upload-reference-videos-and-audio). Arbitrary public URLs are **not** accepted: any other host is rejected with `400` / `invalid_reference_video` before any credits are deducted. Each URL may appear only once — a duplicate entry is rejected with `400` / `invalid_input` rather than probed and billed twice.
| Model | Clips | Per clip | Total across clips | Size per clip | With-video rates |
| - | - | - | - | - | - |
| Seedance 2.5 | up to 10 | 2–30s | ≤30s | ≤200MB | 480p 11 / 720p 24 / 1080p 54 credits/sec |
| Seedance 2.0 | up to 3 | 2–15s | ≤15s | ≤50MB | Mini 480p 7 / 720p 13, Fast 480p 8 / 720p 14, Pro 720p 16 / 1080p 28 credits/sec (with a reference video, Pro is limited to 720p / 1080p) |
The server probes every clip and its detected duration is authoritative — any duration you send is only a diagnostic hint. If probing the reference videos or audio cannot finish in its budget, the request fails with `503` / `reference_probe_timeout` and `retryable: true` **before any charge**: resubmit the same request under the same `idempotencyKey`. Billing uses the **sum** of all reference video durations:
`billable seconds = max(sum of reference video durations + output duration, minimum-billable floor)`
See [Models](/en/features/models) for the complete rate tables and examples. Reference videos, reference audio and content-reference images are three independent budgets.
**Legacy alias.** The singular `referenceVideo` (a plain string) is still accepted and is treated as a one-element `referenceVideos` array; it will keep working indefinitely. If you send both, `referenceVideo` must be the first element of `referenceVideos` — any other combination returns `400` / `invalid_input`.
Array of reference audio clips for Seedance 2.5 or Seedance 2.0. Every entry must be an `https://images.meigen.ai/...` URL from the [reference-media upload endpoint](#upload-reference-videos-and-audio), in **wav** or **mp3**, at most **15MB** per clip. Arbitrary public URLs are **not** accepted: any other host is rejected with `400` / `invalid_reference_audio` before any credits are deducted. The format is verified from the file's own bytes, not from its extension or `Content-Type`.
| Model | Clips | Per clip | Total across clips | Audio-only request |
| - | - | - | - | - |
| Seedance 2.5 | up to 10 | 2–30s | ≤30s | Allowed |
| Seedance 2.0 | up to 3 | 2–15s | ≤15s | Not allowed — needs at least 1 reference image or 1 reference video |
**Reference audio is free.** It never enters the billable-seconds sum, and adding audio to a request never changes its price. A request that carries reference audio but no reference video is billed at the model's **direct** (no-video) per-second rate, not the discounted with-video rate.
Rejections are pre-charge `400`s: `reference_audio_not_supported`, `too_many_reference_audios`, `reference_audio_total_seconds_exceeded`, `reference_audio_requires_visual`, or `invalid_reference_audio` for a clip that can't be read, isn't wav/mp3, or falls outside the per-clip duration range.
Deprecated compatibility hint; omit it in new integrations. If supplied, it must be a finite non-negative number and may be compared with the detected value for diagnostics, but it does not control billing or clipping. The server-probed duration is authoritative for Seedance 2.5 / 2.0 continuation, and with `referenceVideos` the billed total is the sum of every probed clip. There is no audio equivalent of this field — audio durations are always probed and never billed.
Optional UUID; strongly recommended for composed workflows. Persist it with the exact inputs before submission. MCP calls expose this ordinary-generation handle as `requestId`.
For new API-token requests, the key identifies one logical attempt in the owning account. Reusing it with identical caller inputs recovers that attempt; an existing generation returns `deduped: true` without another charge. Changed inputs return `409 idempotency_conflict`; a different billing context can return `request_id_collision`. Do not automatically allocate a new key to bypass either conflict. Object-key order is ignored, but other caller values are compared before model defaults. Older jobs may lack the full input fingerprint, so this is not a retroactive guarantee for all legacy receipts. See [request-ID recovery](/en/api-reference/endpoint/requests).
## Response
Whether the request was accepted.
The unique ID of the generation request. Use this to poll for status.
Initial status, always `"processing"`.
The number of credits deducted for this generation.
The model used for this generation.
The aspect ratio applied to this generation. Default `auto` picks a suitable ratio, returned here immediately — no need to wait for the first status poll. Useful for reserving a correctly-shaped placeholder in your UI.
This is the ratio **requested** for the generation. It matches the delivered media in
every case except one: **Agnes Video 2.5 Flash image-to-video with a first frame we
can't pre-crop** (an external URL or `data:` base64) — there the output follows your
first frame's own ratio instead. If exact framing matters for that case, read the
dimensions from the returned video rather than trusting this field.
Present and `true` when this response is for a resubmission that matched an earlier request's `idempotencyKey` — no additional credits were deducted.
Updated credit balances after deduction.
| Field | Type | Description |
| - | - | - |
| daily | number | Remaining daily free credits |
| purchased | number | Remaining purchased credits |
| unlimited | boolean | Whether user has unlimited credits |
```json theme={null}
{
"success": true,
"generationId": "550e8400-e29b-41d4-a716-446655440000",
"status": "processing",
"creditsUsed": 6,
"modelId": "gpt-image-2.5",
"aspectRatio": "1:1",
"credits": {
"daily": 2,
"purchased": 50,
"unlimited": false
}
}
```
## Check Generation Status
```
GET /api/generate/v2/status/:generationId
```
Poll this endpoint to check if your image is ready.
### Response (Processing)
```json theme={null}
{
"jobId": "550e8400-e29b-41d4-a716-446655440000",
"status": "processing",
"imageUrl": null,
"imageUrls": null,
"videoUrl": null,
"mediaType": "image",
"error": null,
"aspectRatio": "16:9",
"expectedWaitSeconds": 25,
"pollHintSeconds": 20
}
```
* **`expectedWaitSeconds`** — estimated total wait for this model and resolution, from submission.
* **`pollHintSeconds`** — how much longer to keep polling; counts down toward `0`, at which point you can stop. Use it to drive your polling loop instead of a fixed timeout — reference-video continuation and higher tiers can take longer than a plain text-to-video request.
* Both fields are only present while `status` is `"processing"`.
### Response (Image Completed)
```json theme={null}
{
"jobId": "550e8400-e29b-41d4-a716-446655440000",
"status": "completed",
"imageUrl": "https://images.meigen.ai/generations/xxx.png",
"imageUrls": ["https://images.meigen.ai/generations/xxx.png"],
"videoUrl": null,
"mediaType": "image",
"error": null,
"aspectRatio": "16:9"
}
```
### Response (Video Completed)
```json theme={null}
{
"jobId": "550e8400-e29b-41d4-a716-446655440000",
"status": "completed",
"imageUrl": null,
"imageUrls": null,
"videoUrl": "https://images.meigen.ai/generations/xxx.mp4",
"mediaType": "video",
"error": null,
"aspectRatio": "16:9"
}
```
* **`aspectRatio`** is the final ratio applied to this generation (if you passed `auto`, this is the value that was actually used).
* **`mediaType`** is `image` or `video`. For video generations `imageUrl/imageUrls` are `null`, and vice versa.
* Midjourney V8.2 returns 4 candidate images per generation. `imageUrls` contains all candidates; `imageUrl` always points to the first one. Other image models return a single image.
### Response (Failed)
```json theme={null}
{
"jobId": "550e8400-e29b-41d4-a716-446655440000",
"status": "failed",
"creditsStatus": "refunded",
"imageUrl": null,
"imageUrls": null,
"videoUrl": null,
"mediaType": "image",
"error": "Content policy violation",
"aspectRatio": "16:9"
}
```
When a generation fails, credits are automatically refunded. Poll `creditsStatus` to confirm the outcome: `pending` (deducted, not yet settled), `confirmed` (charged), `refunded` (returned to your balance).
## Upload Reference Videos and Audio
```
POST /api/upload/reference-video
```
`referenceVideos` and `referenceAudios` only accept files hosted on `images.meigen.ai`. Use this endpoint to get a presigned URL for a local file, then upload the bytes yourself. It accepts **either** an API token (`Bearer meigen_sk_...`) **or** a logged-in session access token — Bearer header only, cookies are not read. The same endpoint serves both kinds; pick with `kind`.
An API-token call also requires a **positive purchased-credit balance** on the owning account. Presigning itself costs nothing, but a zero balance returns `402` — top up the same account and retry. Session calls are not gated this way.
### Body Parameters
The original file name. It must be a non-empty string, but that is the only check: the server neither stores it nor echoes it back, so it never reaches the stored object or the response. The stored object's extension is derived **only** from `contentType`: `video/mp4` → `mp4`, `video/quicktime` → `mov`, `audio/wav` / `audio/x-wav` / `audio/wave` / `audio/vnd.wave` → `wav`, `audio/mpeg` / `audio/mp3` → `mp3`. A file named `clip.mov` but declared as `video/mp4` is still stored as `.mp4`, so send the `contentType` that matches the file's real container — vendors read the container from the stored URL's extension.
The MIME type of the file, and the only thing that decides the stored extension. Video accepts `video/mp4` and `video/quicktime`; audio accepts `audio/wav`, `audio/x-wav`, `audio/wave`, `audio/vnd.wave`, `audio/mpeg` and `audio/mp3`. It must agree with `kind` — an audio type sent as `kind: "video"` (or the reverse) is rejected with `400`. Use the exact same value on the follow-up `PUT`.
The file's exact byte length. It is checked against the selected model's cap before a URL is issued: reference video is ≤200MB on Seedance 2.5 and ≤50MB on Seedance 2.0; reference audio is ≤15MB on both.
The model you intend to generate with. It selects which size cap applies. If omitted, a legacy fallback of 15MB is used for audio.
`video` or `audio`. Defaults to `video` for backward compatibility with existing integrations.
### Response
A short-lived URL to `PUT` the raw file bytes to. Send the same `Content-Type` you declared above, and no `Authorization` header.
The `https://images.meigen.ai/...` URL to pass in `referenceVideos` or `referenceAudios` once the upload completes.
The stored object key, `ref-videos/YYYY-MM-DD/{id}.{mp4|mov|wav|mp3}`. Audio and video share this prefix.
```bash theme={null}
# 1. Ask for a presigned URL
curl -X POST https://www.meigen.ai/api/upload/reference-video \
-H "Authorization: Bearer meigen_sk_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"filename": "theme.mp3",
"contentType": "audio/mpeg",
"size": 1843200,
"modelId": "seedance-2-5",
"kind": "audio"
}'
# 2. Upload the bytes to the returned presignedUrl
curl -X PUT "" \
-H "Content-Type: audio/mpeg" \
--data-binary @theme.mp3
# 3. Use the returned publicUrl in referenceAudios
```
Uploaded reference objects are deleted automatically **7 days** after upload. Keep the source file if you need to resubmit later — a generation that already started is unaffected, but a stale `publicUrl` will fail validation on a new request.
## Workflow examples
For N scripts → frames → videos, persistent IDs, in-flight budget reservations and bounded concurrency, see [composable workflows](/en/mcp/composable-workflows). HTTP uses `idempotencyKey`; MCP uses `requestId`. New IDs represent new attempts, not timeout recovery.
## Examples
### Basic generation
Omit `modelId` to use the current image default. Read `is_default` from [List Models](/en/api-reference/endpoint/models); the default can change:
```bash theme={null}
curl -X POST https://www.meigen.ai/api/generate/v2 \
-H "Authorization: Bearer meigen_sk_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "A minimalist logo of a mountain, vector style, blue gradient",
"aspectRatio": "1:1"
}'
```
### GPT Image 2.5 with explicit settings
Use this example when `gpt-image-2.5` appears in the active [model list](/en/api-reference/endpoint/models).
```bash theme={null}
curl -X POST https://www.meigen.ai/api/generate/v2 \
-H "Authorization: Bearer meigen_sk_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "A studio product photo of a ceramic coffee mug, soft window light",
"modelId": "gpt-image-2.5",
"aspectRatio": "4:5",
"resolution": "2K",
"quality": "low",
"modelVariant": "sunburst"
}'
```
This 2K Standard request costs **6 credits**. For 4K Max with speed priority, set `resolution: "4K"`, `quality: "max"`, and `modelVariant: "flare"` (**88 credits**). Add `referenceImages` to edit or use visual references without an extra reference-image charge. The authoritative charge is `creditsUsed`.
Reuse the same `idempotencyKey` only when retrying the same request. A changed quality or variant is a new request and needs a new key.
### With reference image
```bash theme={null}
curl -X POST https://www.meigen.ai/api/generate/v2 \
-H "Authorization: Bearer meigen_sk_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "Similar style landscape but with autumn colors",
"modelId": "seedream-4.5",
"aspectRatio": "16:9",
"referenceImages": ["https://example.com/reference.jpg"]
}'
```
### Midjourney V8.2 with style reference
```bash theme={null}
curl -X POST https://www.meigen.ai/api/generate/v2 \
-H "Authorization: Bearer meigen_sk_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "a warrior princess in an enchanted forest",
"modelId": "midjourney-v8.1",
"aspectRatio": "3:4",
"referenceImages": ["https://example.com/style-ref.jpg"],
"referenceType": "style",
"niji7Options": {
"stylize": 300,
"sw": 500
}
}'
```
### Seedance 2.5 video (text-to-video)
```bash theme={null}
curl -X POST https://www.meigen.ai/api/generate/v2 \
-H "Authorization: Bearer meigen_sk_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "A majestic eagle soaring over a misty mountain valley at sunrise, cinematic camera movement",
"modelId": "seedance-2-5",
"aspectRatio": "16:9",
"resolution": "720p",
"duration": 5
}'
```
Pricing: Seedance 2.5 has no tier. 720p costs 39 credits/sec × 5 sec = **195 credits**.
### Seedance 2.5 continuation (with reference video)
```bash theme={null}
curl -X POST https://www.meigen.ai/api/generate/v2 \
-H "Authorization: Bearer meigen_sk_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "Continue the scene as the eagle dives toward a river below",
"modelId": "seedance-2-5",
"aspectRatio": "adaptive",
"resolution": "480p",
"duration": 5,
"referenceVideos": ["https://images.meigen.ai/generations/eagle-clip.mp4"]
}'
```
Pricing: 480p with-reference-video rate is 11 credits/sec. Assuming the uploaded reference is 2 seconds long (detected automatically), billable seconds = max(2 + 5, 9) = 9 sec, total **99 credits**. Output length remains `duration` = 5 seconds.
### Seedance 2.5 with two reference videos and one reference audio
```bash theme={null}
curl -X POST https://www.meigen.ai/api/generate/v2 \
-H "Authorization: Bearer meigen_sk_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "Continue the dive from [video1], then cut to the river camera move of [video2], scored to the rhythm of [audio1]",
"modelId": "seedance-2-5",
"aspectRatio": "adaptive",
"resolution": "480p",
"duration": 5,
"referenceVideos": [
"https://images.meigen.ai/generations/eagle-dive.mp4",
"https://images.meigen.ai/ref-videos/2026-09-17/river-pan.mp4"
],
"referenceAudios": ["https://images.meigen.ai/ref-videos/2026-09-17/theme.mp3"]
}'
```
Pricing: the two clips are probed at 3s and 4s, so the reference sum is **7 seconds**. Billable seconds = max(7 + 5, 9) = 12 sec at the 480p with-video rate of 11 credits/sec, total **132 credits**. The reference audio adds **0** — it is never billed, and its length does not enter the sum. `[video1]` / `[video2]` / `[audio1]` are rewritten to `Video 1` / `Video 2` / `Audio 1` before the request reaches the model.
### Auto ratio selection
Omit `aspectRatio` or pass `"auto"` to let MeiGen pick a suitable ratio:
```bash theme={null}
curl -X POST https://www.meigen.ai/api/generate/v2 \
-H "Authorization: Bearer meigen_sk_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "Blog hero banner image, abstract gradient background with code snippets"
}'
```
The actual ratio used is returned as `aspectRatio` — both in the response to this request and on the status endpoint.
# Get Gallery Image
Source: https://docs.meigen.ai/en/api-reference/endpoint/images
Fetch details of a curated gallery image by ID
```
GET /api/images/:id
```
Returns a single curated gallery image (not your own generation result). The `id` is what the gallery's search returns. Public endpoint, no authentication required, briefly cached.
To get **your own** generation result, poll the [status endpoint](/en/api-reference/endpoint/generate#check-generation-status). This endpoint only serves curated gallery items.
## Path Parameters
Gallery image ID.
## Response
Gallery image fields:
| Field | Type | Description |
| - | - | - |
| `id` | string | Gallery image ID |
| `text` | string | The original prompt — may be plain text or a structured JSON prompt; parse on your side if you intend to reuse it |
| `prompt_ready` | boolean | Whether a usable prompt is available for this image |
| `prompt_segments` | array \| null | When the prompt has multiple labelled parts, the structured segments; `null` for single-part prompts |
| `media_urls` | string\[] | Full-size image URLs |
| `thumbnail_url` | string | Thumbnail URL (often the same as `media_urls[0]`) |
| `image_width` | number \| null | Width in pixels |
| `image_height` | number \| null | Height in pixels |
| `model` | string \| null | Label for the model the source artwork was made with. Granularity is mixed: some values are coarse family names (`"nanobanana"`, `"gptimage"`, `"midjourney"`, `"other"`), others are exact model IDs (e.g. `"flux2-klein"`, `"seedream-4.5"`). New values appear as new models are added. Treat it as a display / filter label — don't assume it can be passed straight to `/api/generate/v2`; resolve generation IDs from [List Models](/en/api-reference/endpoint/models) |
| `sref` | string \| null | Midjourney style reference code, when present — reuse it to apply the same style; `null` for non-Midjourney images |
| `profile` | string \| null | Midjourney personalization profile code, when present — independent of `sref` and can be combined with it; `null` when not set |
| `created_at` | string | ISO 8601 timestamp (informational) |
| `likes` / `views` / `retweets` | number | Engagement metrics from the original source post |
| `author_username` / `author_display_name` / `author_avatar_url` | string | Original author info — include if you display attribution, otherwise ignore |
## Example
```bash theme={null}
curl https://www.meigen.ai/api/images/2009629483448627597
```
```json theme={null}
{
"success": true,
"data": {
"id": "2009629483448627597",
"text": "A serene Japanese garden with cherry blossoms",
"media_urls": ["https://images.meigen.ai/tweets/2009629483448627597/0.jpg"],
"thumbnail_url": "https://images.meigen.ai/tweets/2009629483448627597/0.jpg",
"image_width": 1650,
"image_height": 2048,
"model": "midjourney",
"created_at": "2026-01-09T14:13:00+00:00",
"likes": 113,
"views": 9266,
"retweets": 8,
"author_username": "creator",
"author_display_name": "Creator Name",
"author_avatar_url": "https://pbs.twimg.com/profile_images/.../normal.jpg"
}
}
```
### 404 Not Found
```json theme={null}
{ "success": false, "error": "Image not found" }
```
# List Models
Source: https://docs.meigen.ai/en/api-reference/endpoint/models
Read available model IDs, defaults, pricing, and generation capabilities.
```
GET /api/models
```
Returns a list of all active AI models available for generation. Public endpoint, no authentication required.
The default active list contains public generation models. Skill-specific billing entries are excluded; use the Skills interface for those workflows. Read `is_default` for the current image default. GPT Image 2.5 can be requested only after it appears in this active list.
## Query Parameters
Filter by output type: `image` or `video`. Omit to get both.
Pass `false` to include inactive models as well, including retired or not-yet-enabled models. Their presence in this expanded list does not make them callable; use the default active list for generation.
## Response
`{ success: true, models: [...] }`. Each model object contains:
The unique model identifier. Use this as `modelId` when generating.
Whether this model is the current platform default for its media type. Do not infer the default from ordering, the model name, or a documentation example.
Display name.
Model provider family (e.g. `OpenAI`, `Google`, `ByteDance`, `Midjourney`). Display only — not a request parameter.
A nominal fallback value. **Do not use it as the price for every configuration.** For GPT Image 2.5 and GPT Image 2, read `extra_config.pricing[resolution][quality]`. Use `extra_config.pricingPerSec` × `duration`, `extra_config.pricingPerCall[tier][duration]` for Veo 3.1, or the reference-video rules below. The authoritative charge is `creditsUsed` in the generate response.
Aspect ratios accepted by `aspectRatio`. Seedance additionally accepts `"adaptive"`.
For image models, the maximum number of reference images accepted (`0` means none). For video models, this is the first/last-frame slot limit. Seedance content-reference mode uses `extra_config.maxContentReferenceImages` instead.
`"image"` or `"video"`.
Estimated generation time for this model's default tier/resolution, in seconds: `{ p50, p90 }`. Calibrated from production data — use it to set user expectations, not as a hard deadline. Actual time still varies by resolution, tier, and duration.
Stable, forward-compatible capability contract. `capabilities.video` is always an object: check `capabilities.video.valid` to distinguish video models (`true`) from image models (`false`). When valid, it describes output duration options, reference-video and reference-audio limits, billing mode, and whether a first frame is required. **Do not test `if (capabilities.video)`** because the object is also present on image models. New integrations should read this contract instead of reconstructing it from `extra_config`.
`capabilities.video.referenceVideo` carries `enabled`, `minSeconds` and `maxSeconds` (per clip), plus `maxCount` and `maxTotalSeconds` for the whole array — Seedance 2.5 allows 10 clips totalling 30s, Seedance 2.0 allows 3 clips totalling 15s. `capabilities.video.referenceAudio` has the same shape plus `formats` (`["wav", "mp3"]`) and `requiresVisualReference`: when it is `true` (Seedance 2.0) the request must also carry at least one reference image or reference video, so audio-only generation is rejected. Current responses always include both objects. A response body cached before 2026-09 may still lack them, so treat a missing `referenceVideo` or `referenceAudio` as `{ "enabled": false }` rather than as "unlimited". Reference audio never affects billing.
Model-specific configuration, kept for backward compatibility. New integrations should prefer `capabilities.video` for video-capability shape (see above); the pricing keys below are still only available here. Keys you may rely on:
| Key | Used by | Description |
| - | - | - |
| `resolutions` | Image / video | Allowed values for `resolution` (`"1K"` / `"2K"` / `"3K"` / `"4K"` for image, `"480p"` / `"720p"` / `"1080p"` / `"4k"` for video) |
| `qualities` | Image models with quality options | Accepted `quality` values; GPT Image 2.5 has `low`, `medium`, `high`, `xhigh`, `max` |
| `defaultQuality` | Image models with quality options | Used when `quality` is omitted or `auto`; GPT Image 2.5 is configured as `low` |
| `variants` / `defaultVariant` | GPT Image 2.5 | Accepted `modelVariant` values (`sunburst`, `flare`) and the configured default (`sunburst`) |
| `defaultResolution` | Image / video | Resolution used when the request omits `resolution` |
| `pricing` | Image models with variable prices | Credits by resolution then quality, for example `pricing["2K"]["low"]`; some models expose a number per resolution |
| `tierResolutions` | Seedance 2.0 | Resolutions actually available in each tier, keyed by tier. Takes precedence over the top-level `resolutions` |
| `tiers` | Seedance 2.0 / Veo 3.1 | Available tiers, selected via `tier` (Seedance 2.0: `mini` / `fast` / `pro`; Veo 3.1: `fast` / `pro`) |
| `durations` | Video models | Allowed values for `duration` (seconds) |
| `pricingPerSec` | Seedance 2.5 / Seedance 2.0 / Grok Video 1.5 / Agnes Video 2.5 Flash | Per-second direct-generation rate, keyed by resolution — or by tier then resolution on models that expose tiers |
| `pricingPerCall` | Veo 3.1 | Credits per generation, looked up by tier then `duration`. Mutually exclusive with `pricingPerSec`; when present it takes precedence |
| `pricingPerSecWithVideo` | Seedance 2.5 / Seedance 2.0 | Per-second rate used when **any** reference video is present, keyed by resolution — or by tier then resolution. Reference audio alone does not switch to this rate; an audio-only request bills at `pricingPerSec` |
| `minBillableTable` | Seedance 2.5 / Seedance 2.0 | Minimum billable seconds keyed by output `duration`; bill `max(sum of reference video durations + output, minimum)`. Reference audio durations are never included |
| `maxContentReferenceImages` | Seedance 2.5 / Seedance 2.0 | Maximum images accepted when `referenceMode` is `content`; separate from the first/last-frame slots in `max_reference_images` |
The pricing-related keys above are part of the contract. Other keys may appear and are informational.
## Example
```bash theme={null}
curl https://www.meigen.ai/api/models
```
```json theme={null}
{
"success": true,
"models": [
{
"id": "gpt-image-2.5",
"name": "GPT Image 2.5",
"provider": "OpenAI",
"is_default": false,
"credits_per_generation": 6,
"supported_ratios": ["1:1", "3:2", "2:3", "16:9", "9:16", "4:3", "3:4", "5:4", "4:5", "21:9", "9:21", "3:1", "1:3"],
"max_reference_images": 16,
"media_type": "image",
"extra_config": {
"resolutions": ["1K", "2K", "4K"],
"defaultResolution": "2K",
"qualities": ["low", "medium", "high", "xhigh", "max"],
"defaultQuality": "low",
"variants": ["sunburst", "flare"],
"defaultVariant": "sunburst",
"pricing": {
"1K": { "low": 4, "medium": 6, "high": 12, "xhigh": 18, "max": 28 },
"2K": { "low": 6, "medium": 9, "high": 22, "xhigh": 30, "max": 48 },
"4K": { "low": 12, "medium": 16, "high": 36, "xhigh": 50, "max": 88 }
}
},
"capabilities": {
"video": {
"outputDuration": null,
"referenceVideo": { "enabled": false, "minSeconds": 0, "maxSeconds": 0, "maxCount": 0, "maxTotalSeconds": 0, "maxUploadBytes": 0 },
"referenceAudio": { "enabled": false, "minSeconds": 0, "maxSeconds": 0, "maxCount": 0, "maxTotalSeconds": 0, "maxUploadBytes": 0, "formats": [], "requiresVisualReference": false },
"billing": null,
"requiresFirstFrame": false,
"valid": false
}
}
},
{
"id": "seedance-2-5",
"name": "Seedance 2.5",
"provider": "ByteDance",
"credits_per_generation": 72,
"supported_ratios": ["adaptive", "16:9", "4:3", "1:1", "3:4", "9:16", "21:9"],
"max_reference_images": 2,
"media_type": "video",
"extra_config": {
"resolutions": ["480p", "720p", "1080p"],
"durations": [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30],
"maxContentReferenceImages": 30,
"pricingPerSec": { "480p": 18, "720p": 39, "1080p": 90 },
"pricingPerSecWithVideo": { "480p": 11, "720p": 24, "1080p": 54 },
"minBillableTable": { "4": 7, "5": 9, "6": 10, "7": 12, "8": 14, "9": 15, "10": 17, "11": 19, "12": 20, "13": 22, "14": 24, "15": 25, "16": 27, "17": 29, "18": 30, "19": 32, "20": 34, "21": 35, "22": 37, "23": 39, "24": 40, "25": 42, "26": 44, "27": 45, "28": 47, "29": 49, "30": 50 }
},
"estimatedTiming": { "p50": 118, "p90": 165.2 },
"capabilities": {
"video": {
"outputDuration": { "kind": "range", "min": 4, "max": 30, "step": 1, "default": 4 },
"referenceVideo": {
"enabled": true,
"minSeconds": 2,
"maxSeconds": 30,
"maxCount": 10,
"maxTotalSeconds": 30,
"maxUploadBytes": 209715200,
"resolutions": ["480p", "720p", "1080p"]
},
"referenceAudio": {
"enabled": true,
"minSeconds": 2,
"maxSeconds": 30,
"maxCount": 10,
"maxTotalSeconds": 30,
"maxUploadBytes": 15728640,
"formats": ["wav", "mp3"],
"requiresVisualReference": false
},
"billing": { "mode": "per_second", "requestDefaultSeconds": 4, "referenceSeconds": "reference_plus_output_with_minimum_table" },
"requiresFirstFrame": false,
"valid": true
}
}
}
]
}
```
Example shows two representative model configurations with a partial `extra_config` for brevity. It does not assert that either model is currently enabled or the default. Timing values are an illustrative production snapshot and may change as estimates are recalibrated. The live endpoint returns all active models with their current full configuration. Responses are cached for 1 hour (plus stale-while-revalidate), so newly added or retired models can take up to an hour to appear.
# Recover a Generation Request
Source: https://docs.meigen.ai/en/api-reference/endpoint/requests
Look up an ordinary image/video attempt by its persisted UUID without creating another job.
```text theme={null}
GET /api/generate/v2/requests/{requestId}
```
`requestId` is the UUID sent as `idempotencyKey` in [POST /api/generate/v2](/en/api-reference/endpoint/generate). It is different from the returned `generationId`. This authenticated read-only endpoint never dispatches generation. Any active API key belonging to the same owning account can recover an API-token attempt, including after a host restart or key replacement. It cannot adopt a Web-session free-credit task into API-token billing.
Keep the UUID and exact input in durable workflow state before submitting. If the submission response is lost, look up that UUID; do not allocate a fresh one. MCP wraps this endpoint with `check_generation(requestId=...)` and adds its common structured envelope. The native HTTP body below is a receipt, not the MCP envelope.
## Request
Set `REQUEST_ID` from the saved workflow step and keep the token in private environment/credential settings:
```bash theme={null}
curl --fail-with-body --silent --show-error \
"https://www.meigen.ai/api/generate/v2/requests/$REQUEST_ID" \
-H "Authorization: Bearer $MEIGEN_API_TOKEN"
```
## Receipt and recovery states
HTTP 200 can include `success`, `requestId`, `generationId`, `deduped`, `status` (`processing`, `completed`, `failed`), `modelId`, `creditsUsed`, `creditsStatus`, `aspectRatio`, `mediaType`, `imageUrl`, `imageUrls`, `videoUrl`, `error` and `failureCode`. Availability depends on the job state. Only completed media URLs are usable artifacts. Confirm refunds from `creditsStatus`, not a generic failure message.
| HTTP / code | Meaning and next step |
| - | - |
| 200 / processing | Existing job is running. Preserve its handle and continue status observation. |
| 503 / `in_progress` | Submission reservation still exists. Follow `retryAfterSeconds`. A value of 0 permits retrying the original ID and identical inputs; this GET has not submitted anything. |
| 404 / `request_not_found` | Verify the account and saved ID. An interrupted first submission can be retried with that same ID and exact inputs. |
| 503 / `request_interrupted` | Read/recovery state is temporarily uncertain. Query again after waiting; never create a replacement ID. |
| 402 / insufficient credits | No generation was charged. Top up the owning account, then resubmit the same ID and identical inputs within the approved scope. Polling alone will not restart it. |
| 400 / invalid input | Correct inputs intentionally. Changed parameters require a new authorized attempt and ID. |
| 409 / `idempotency_conflict` or `request_id_collision` | Do not bypass the conflict with a new ID automatically. Inspect the original attempt and intended inputs/billing context. |
| 410 / `generation_unavailable` | The original generation is unavailable or deleted. This ID cannot be reused to create another job. |
Other saved pre-charge rejections can retain their original HTTP status. Follow the specific error rather than polling a rejected request indefinitely. Real `Retry-After`/retry timing remains authoritative.
This behavior is for ordinary image/video generation. The five [Skills APIs](/en/api-reference/skills/overview) retain their own original-key receipts and `check_skill` recovery rules, including their different handling of a rejected payment attempt.
## Input consistency and legacy requests
New API-token attempts compare caller inputs before defaults: object-key order does not matter, but other values must match. A changed model, prompt, image URL, duration or quality is not a retry of the same inputs. Persist resolved reference URLs so an unchanged source is not re-uploaded under a different URL during recovery.
Legacy jobs may not contain the full original input fingerprint. Compatibility lookup can recover them, but cannot retroactively prove every historical parameter match. Use a persistent UUID for each new logical attempt. See [N scripts → frames → videos](/en/mcp/composable-workflows) for budget and scheduling boundaries.
# API Tokens
Source: https://docs.meigen.ai/en/api-reference/endpoint/tokens
Create and manage API tokens in your MeiGen account
Create and revoke tokens at [API Keys](https://www.meigen.ai/profile/api-keys) using a desktop browser. Each account supports up to 5 active tokens.
Token format: `meigen_sk_` followed by 32 characters. The full value is shown only at creation — copy it immediately.
Pass the token as a Bearer credential on any authenticated endpoint:
```bash theme={null}
curl -X POST https://www.meigen.ai/api/generate/v2 \
-H "Authorization: Bearer meigen_sk_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"prompt": "a minimalist logo"}'
```
Token management itself (`POST` / `GET` / `DELETE /api/tokens`) is authenticated with a logged-in browser session, not with an API key — an API key cannot create or revoke tokens. Manage them from account settings.
**API tokens can only spend purchased credits.** Daily free credits are not available via the API.
Use the same account that owns the key to choose **Top Up** on [Profile](https://www.meigen.ai/profile), or use [mobile checkout](https://www.meigen.ai/m/premium). API Skills have no free attempts, including cutouts. Store the key privately; do not paste it into chat, URLs or shared files. [Skills authentication and recovery](/en/api-reference/skills/overview) require the original key for `check_skill`.
# REST API Overview
Source: https://docs.meigen.ai/en/api-reference/introduction
Authenticate, discover models, submit asynchronous jobs, and retrieve generation results.
The MeiGen API lets you generate images and videos programmatically, plus [five dedicated image Skills](/en/api-reference/skills/overview). The Skills guide has its own upload, batch and requestId recovery contract; use it for those endpoints.
**Prefer natural language?** If you use Claude Code, Cursor, or OpenClaw, try the [MCP Server](/en/mcp/overview) for AI-native image generation without writing HTTP code.
## Authentication
API requests require a Bearer token. There are two authentication methods:
### API Token (Recommended)
Use an API key that starts with `meigen_sk_`. Create one in a desktop browser on the [API Keys page](https://www.meigen.ai/profile/api-keys).
```bash theme={null}
Authorization: Bearer meigen_sk_YOUR_API_KEY
```
API tokens can only use **purchased credits**. Daily free credits are not available for API calls. Ensure your account has purchased credits before making API requests.
### Session Token
For meigen.ai's own browser integration, a logged-in session access token is accepted. Daily free credits cover **basic models only** (currently Flux 2 Klein and Agnes Image 2.5 Flash; Agnes Video 2.5 Flash has been temporarily unavailable since 2026-09-22, so no video model is on the basic tier right now); every other model always requires welcome or purchased credits. Third-party integrations should always use the API Token above.
## Base URL
```
https://www.meigen.ai/api
```
Before choosing a model, call [List Models](/en/api-reference/endpoint/models). The following example requires `gpt-image-2.5` to be active. GPT Image 2 remains available under its own ID and pricing when returned by that endpoint.
## Request Format
All request bodies must be sent as JSON with the `Content-Type: application/json` header.
```bash theme={null}
curl -X POST https://www.meigen.ai/api/generate/v2 \
-H "Authorization: Bearer meigen_sk_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"prompt": "a minimalist logo", "modelId": "gpt-image-2.5", "resolution": "2K", "quality": "low", "modelVariant": "sunburst"}'
```
## Response Format
All responses return JSON. Successful responses include a `success: true` field:
```json theme={null}
{
"success": true,
"generationId": "abc-123",
"status": "processing"
}
```
Error responses include an `error` field:
```json theme={null}
{
"error": "Error description"
}
```
## Asynchronous Generation
Image generation is **asynchronous**. The flow is:
1. **Submit** a generation request → `POST /api/generate/v2`
2. **Poll** the status endpoint → `GET /api/generate/v2/status/:id`
3. **Read** the resulting `imageUrl` / `imageUrls` / `videoUrl` directly from the status response once `status === "completed"`.
### Polling Best Practices
* **Recommended interval**: 3 seconds between status checks
* **Stop when**: `status` is `completed` or `failed`
* While `status` is `processing`, the response includes `expectedWaitSeconds` (estimated remaining wait for this model and resolution) and `pollHintSeconds` (how many more seconds to keep polling — `0` means you can stop). Use these instead of a fixed timeout: actual time varies by model, resolution, and duration. Per-model typical times are listed on the [Models](/en/features/models) page.
* If your client stops polling early, the job still completes and is still charged — always poll until `status` reaches a terminal state.
## Caching
Some GET endpoints return cached responses:
| Endpoint | Cache Duration |
| - | - |
| `GET /api/models` | 1 hour (plus stale-while-revalidate) |
| `GET /api/images/:id` | 1 hour |
| `GET /api/skills` | Up to 5 minutes; errors are not cached |
| `POST` endpoints | No caching |
Model list changes — a new model, a retired one, a changed default — can therefore take up to an hour to become visible. Plan your own refresh cadence accordingly.
## Credits
Each generation deducts credits from your account. Image models charge per image (the amount can vary with resolution and quality); video models are billed per second or per generation, depending on the model. See the [Models](/en/features/models) page for the full per-model pricing table.
## Error Responses
The table below covers general generation. For Skills, use the [code-specific recovery rules](/en/api-reference/skills/overview#billing-and-errors); a 409 or 5xx is not an instruction to automatically create a new paid request.
| Status Code | Meaning |
| - | - |
| 400 | Bad request — invalid parameters |
| 401 | Unauthorized — invalid or missing token |
| 402 | Payment required — insufficient credits |
| 403 | Forbidden — model not available on this platform |
| 404 | Not found |
| 409 | Conflict — idempotency key already used, retry with a new one |
| 5xx | Server error — retry later; credits for a failed generation are automatically refunded |
For `POST /api/generate/v2`, error bodies include extra fields useful for debugging, and most carry a machine-readable `code` alongside the human-readable `error`:
| `code` | Status | Meaning |
| - | - | - |
| `insufficient_credits` | 402 | Not enough usable credits for this request |
| `premium_model_paywall` | 402 | The selected model requires purchased credits (daily free credits don't apply) |
| `unsupported_quality` | 400 | The selected GPT Image model does not support this quality |
| `unsupported_model_variant` | 400 | Invalid variant, or `modelVariant` supplied for a model other than GPT Image 2.5 |
| `invalid_model` | 400 | Explicit rejection of a Skill-only model ID or unsupported GPT Image 2.5 model configuration; ordinary missing/inactive model validation can return `invalid_input` |
| `unsupported_duration` | 400 | This model doesn't support the requested duration |
| `unsupported_tier` | 400 | This model doesn't support the requested tier |
| `unsupported_resolution` | 400 | This model/tier doesn't support the requested resolution |
| `first_frame_required` | 400 | This model requires a first-frame image |
| `reference_video_not_supported` | 400 | This model/tier/resolution doesn't support reference-video continuation |
| `invalid_reference_video` | 400 | A `referenceVideos` entry couldn't be read or violates the selected model's per-clip limits. Read `capabilities.video.referenceVideo`: Seedance 2.5 accepts 2–30s / ≤200MB per clip; Seedance 2.0 accepts 2–15s / ≤50MB per clip. Every entry must be an `https://images.meigen.ai/...` URL — an arbitrary public URL fails here |
| `too_many_reference_videos` | 400 | More `referenceVideos` entries than this model allows — read `capabilities.video.referenceVideo.maxCount` (Seedance 2.5: 10; Seedance 2.0: 3) |
| `reference_video_total_seconds_exceeded` | 400 | The reference videos are individually valid but their durations add up past `capabilities.video.referenceVideo.maxTotalSeconds` (Seedance 2.5: 30s; Seedance 2.0: 15s) |
| `reference_audio_not_supported` | 400 | This model doesn't accept `referenceAudios` — read `capabilities.video.referenceAudio.enabled` |
| `invalid_reference_audio` | 400 | A `referenceAudios` entry isn't an `https://images.meigen.ai/...` URL, couldn't be read, isn't a wav or mp3 file, exceeds 15MB, or falls outside the per-clip duration range (Seedance 2.5: 2–30s; Seedance 2.0: 2–15s) |
| `too_many_reference_audios` | 400 | More `referenceAudios` entries than this model allows — read `capabilities.video.referenceAudio.maxCount` (Seedance 2.5: 10; Seedance 2.0: 3) |
| `reference_audio_total_seconds_exceeded` | 400 | The reference audio clips add up past `capabilities.video.referenceAudio.maxTotalSeconds` (Seedance 2.5: 30s; Seedance 2.0: 15s) |
| `reference_audio_requires_visual` | 400 | This model can't run on audio alone — send at least 1 reference image or 1 reference video alongside `referenceAudios` (Seedance 2.0; `capabilities.video.referenceAudio.requiresVisualReference`) |
| `reference_probe_timeout` | 503 | Server-side validation of the reference videos or audio did not finish within its budget (a CDN hiccup, a slow origin). **Nothing was charged**, and the body carries `retryable: true` — resubmit the identical request with the same `requestId` / `idempotencyKey` rather than creating a new attempt |
| `invalid_input` | 400 | Malformed JSON or invalid generation parameters, including inconsistent `referenceVideo`/`referenceVideos`. Also the fallback for terminal 400/422 validation errors without a more specific code; inspect the validation message. |
| `invalid_reference_url` | 400 | A `referenceImages` entry is not an accepted URL or base64 value |
| `frame_reference_limit` | 400 | `referenceMode: "frame"` allows at most 2 images — use `referenceMode: "content"` for more |
| `too_many_references` | 400 | Reference image count exceeds this model's limit |
| `too_many_characters` | 400 | At most 3 `[character:...]` references per generation |
| `character_not_found` | 400 | The referenced character doesn't exist or isn't owned by your account |
| `characters_not_supported` | 400 | This model doesn't support character references |
| `character_tier_required` | 400 | This character requires a higher tier |
| `model_not_available` | 403 | This model isn't available on the current platform |
| `idempotency_conflict` | 409 | This `idempotencyKey` already belongs to a request with different inputs. Never rotate the key automatically to get past this: look up the original request with `GET /api/generate/v2/requests/{requestId}` and reconcile your inputs. Use a new key only when the caller explicitly wants another paid generation |
Any other error — including all `5xx` responses — means the service is temporarily unavailable. Retry later; the credits for a failed generation are automatically refunded.
Errors without a `code` (such as an unsupported aspect ratio) should be handled by status code and `error` text.
```json theme={null}
// 400 — unsupported aspect ratio
{
"success": false,
"error": "Aspect ratio 32:9 is not supported by GPT Image 2.0",
"supportedRatios": ["1:1", "1:3", "16:9", "2:3", "21:9", "3:1", "3:2", "3:4", "4:3", "4:5", "5:4", "9:16", "9:21"]
}
// 400 — unusable reference image
{
"success": false,
"code": "invalid_reference_url",
"error": "Reference images must be public HTTP(S) URLs or data:image/*;base64 inline data. Local file paths (e.g. C:/Users/...) and file:// URIs are not supported — upload the file to a public URL or pass base64 inline.",
"received": "C:/Users/me/ref.png"
}
// 402 — premium model, no purchased credits
{
"success": false,
"code": "premium_model_paywall",
"error": "Premium model requires purchased credits",
"required": 10,
"available": 4
}
```
## Endpoints
Cutouts, details, posters, backgrounds and image enhancement.
POST /api/generate/v2
GET /api/models
GET /api/images/:id
Create & revoke in account settings
# AI Backgrounds
Source: https://docs.meigen.ai/en/api-reference/skills/ai-backgrounds
Create a white, automatically chosen or custom product background.
`POST https://www.meigen.ai/api/skills/white-bg/run`
MCP: `generate_ai_background`
One product photo is required. White mode creates a fixed-specification white background; smart selects a suitable scene; custom follows your background brief. This produces one paid image, not a transparent cutout. The three modes may have different prices.
Use the [shared authentication, upload and recovery guide](/en/api-reference/skills/overview) before submitting. This workflow requires a MeiGen API key and purchased credits; no free attempts or daily credits apply.
## Parameters
| Field | Contract |
| - | - |
| `requestId` | Required UUID for a new request; retain it for exact-input recovery. |
| `productImage` | Required prepared product photo. |
| `mode` | white, smart (default), or custom. |
| `customPrompt` | Required in custom mode, max 300 trimmed characters. Describe the background, lighting and setting. |
| `ratio` | Smart/custom only. Default auto; other supported values from inputSchema. Ignored in white mode. |
| `quality` | Smart/custom only: fast (1K, default) or hd (2K). Ignored in white mode. |
## Request example
```json theme={null}
{
"requestId": "550e8400-e29b-41d4-a716-446655440000",
"productImage": "https://images.meigen.ai/uploads/product.png",
"mode": "custom",
"customPrompt": "Soft daylight on a pale stone counter",
"ratio": "auto",
"quality": "fast"
}
```
Save the body as `request.json`; replace example image URLs with actual images and use a fresh UUID for a new request.
```bash theme={null}
curl -sS 'https://www.meigen.ai/api/skills/white-bg/run' \
-H "Authorization: Bearer $MEIGEN_API_TOKEN" \
-H 'Content-Type: application/json' \
--data-binary @request.json
```
## Result and recovery
A successful submission returns `generationId`. Query `skill=white-bg` and show the completed result. Use the separate cutout endpoint when transparency is required.
```bash theme={null}
curl -sS 'https://www.meigen.ai/api/skills/status?skill=white-bg&requestId=550e8400-e29b-41d4-a716-446655440000' \
-H "Authorization: Bearer $MEIGEN_API_TOKEN"
```
# Marketing Poster
Source: https://docs.meigen.ai/en/api-reference/skills/marketing-poster
Create one poster from a brand, event, campaign or topic.
`POST https://www.meigen.ai/api/skills/brand-poster/run`
MCP: `generate_marketing_poster`
A subject is required; image assets are optional. Supply accurate dates, discounts and product facts. Set autoCopy to false when wording must be preserved. One request creates one paid poster.
Use the [shared authentication, upload and recovery guide](/en/api-reference/skills/overview) before submitting. This workflow requires a MeiGen API key and purchased credits; no free attempts or daily credits apply.
## Parameters
| Field | Contract |
| - | - |
| `requestId` | Required UUID for a new request; retain it for exact-input recovery. |
| `brand` | Required subject, 1–60 trimmed characters; may be an event or topic. |
| `content` | Copy brief or visible text, max 500 characters. With `autoCopy: false`, keep supplied wording subject to selected-language translation. Put style/layout instructions in `extraNotes` or `customStyle`, not here unless they should be printed. |
| `autoCopy` | Default true; false follows supplied copy, with optional translation through language. |
| `extraNotes` | Additional verified facts, explicitly requested display information and design/layout requirements, max 500 characters. Design directions such as “make it retro” are instructions, not literal text to print. |
| `ratio` | Default 4:5; supported values from inputSchema. |
| `language / uiLocale` | Printed copy language, default auto; optional uiLocale fallback, max 35 characters. |
| `quality` | low (Fast, default) or medium (Pro). Both currently use the 2K output preset; quality is separate from resolution. Read live catalog specifications and prices. |
| `logo` | Optional prepared image of the exact logo to reproduce. |
| `styleImage` | Optional primary visual-style reference; do not copy its products, text or layout. Written style is only a compatible supplement. |
| `productImages` | Up to three prepared product/subject images to preserve identity and appearance. |
| `styleId / customStyle` | Use a catalog preset ID, not its label. Nonempty custom style (max 200 characters) overrides `styleId`; omit both for Auto. |
## Request example
```json theme={null}
{
"requestId": "550e8400-e29b-41d4-a716-446655440000",
"brand": "Weekend coffee market",
"content": "Saturday, 10 AM–6 PM",
"autoCopy": false,
"language": "en",
"ratio": "4:5",
"quality": "low"
}
```
Save the body as `request.json`. This example needs no image; use a fresh UUID for a new intended request and preserve that UUID for recovery.
```bash theme={null}
curl -sS 'https://www.meigen.ai/api/skills/brand-poster/run' \
-H "Authorization: Bearer $MEIGEN_API_TOKEN" \
-H 'Content-Type: application/json' \
--data-binary @request.json
```
## MCP call example
The following is a `client.callTool(...)` parameter object, not the REST request body. The supplied event and time are illustrative; use facts from the user for a real task. One call starts one paid poster. Generate and save a UUID for a new attempt; do not blindly rerun the example.
```json theme={null}
{
"name": "generate_marketing_poster",
"arguments": {
"requestId": "8f729f7e-934e-4e2c-bae3-bf23a782f964",
"brand": "Coffee tasting",
"content": "Coffee tasting\nSaturday, 10:00–12:00",
"autoCopy": false,
"extraNotes": "Keep the supplied time. Use a clear headline and a small schedule block.",
"styleId": "minimalist",
"language": "en",
"ratio": "4:5",
"quality": "low"
}
}
```
Call `list_skills` with `{"skill":"brand-poster"}` when current styles, output specifications or prices are needed. Queueing, planning and provider execution affect timing; polling intervals and HTTP timeouts are not completion estimates. Follow returned status and `nextAction`.
## Result and recovery
A successful submission returns `generationId`. Query `skill=brand-poster` until a terminal status, then use the completed item image URLs.
```bash theme={null}
curl -sS 'https://www.meigen.ai/api/skills/status?skill=brand-poster&requestId=550e8400-e29b-41d4-a716-446655440000' \
-H "Authorization: Bearer $MEIGEN_API_TOKEN"
```
# Skills API
Source: https://docs.meigen.ai/en/api-reference/skills/overview
Authentication, image preparation, live pricing and safe recovery for five image workflows.
Use dedicated workflows for [transparent cutouts](/en/api-reference/skills/remove-background), [product detail images](/en/api-reference/skills/product-detail), [marketing posters](/en/api-reference/skills/marketing-poster), [AI backgrounds](/en/api-reference/skills/ai-backgrounds), and [image enhancement](/en/api-reference/skills/upscale). These APIs use MeiGen Cloud; BYOK and ComfyUI cannot replace the MeiGen credential. Video enhancement and AI Expand are not exposed by this Skills API.
## 1. Prepare your account
Create a key in a desktop browser at [API Keys](https://www.meigen.ai/profile/api-keys). In the **same account**, open [Profile](https://www.meigen.ai/profile) and choose **Top Up**; mobile purchases use the [premium page](https://www.meigen.ai/m/premium). Key creation is not available in the mobile interface.
All Skill generation spends **purchased credits (`purchased_credits`) only**, including the first cutout. There are no API free attempts or daily free credits. The [model comparison](https://www.meigen.ai/model-comparison) lists prices; it is not the checkout page.
Keep your key in private local configuration or a secret store. The examples read `MEIGEN_API_TOKEN` from your local environment; do not paste the secret into a conversation, URL or committed file.
| Endpoint | Authentication | Purpose |
| - | - | - |
| `GET /api/skills` | Public | Current schemas, prices, materials and workflow guidance |
| `POST /api/skills/upload` | Bearer API key | Prepare an image without starting generation |
| `POST /api/skills/{skill}/run` | Bearer API key | Submit a paid workflow |
| `GET /api/skills/status?skill=...&requestId=...` | Same API key as submission | Recover the receipt and query results |
Request bodies are JSON. Each `/run` body is limited to **32 KiB**, rejects unknown fields and requires a UUID `requestId`. Upload has its own limits below. Skill IDs are `remove-bg`, `product-detail`, `brand-poster`, `white-bg`, and `upscale`.
## 2. Discover the current contract
```bash theme={null}
curl -sS 'https://www.meigen.ai/api/skills'
curl -sS 'https://www.meigen.ai/api/skills?skill=product-detail'
```
Each entry supplies `endpoint`, `tool`, `materials`, `pricing`, `maxOutputImages` and `inputSchema`. Use these live values for enums and prices; a missing/null price means unavailable, not free. Successful catalogs may be cached for up to five minutes; errors are not cached. Cross-field rules are also enforced by the server.
**HTTP and MCP differ for Product Detail:** direct HTTP defaults to three paid modules when `modules` is omitted. MCP requires an explicit `modules` field. Send the intended modules explicitly in either integration.
For Upscale, both MCP transports require `confirmedCredits` on the initial call as well as retries, from the live quote within the accepted user or upstream workflow budget. Direct HTTP keeps it optional.
## 3. Prepare images
For cutouts, details, posters and backgrounds, all image fields accept only HTTPS URLs on `images.meigen.ai`, `images.meigen.art` or `pbs.twimg.com`, without credentials or a nonstandard port. Upload other sources first and use the returned `imageUrl`.
**Upscale is different:** pass the original public JPEG/PNG/WebP URL directly to `/api/skills/upscale/run`. Do not shrink it through the ordinary reference-image upload first. For attachment bytes, upload with `purpose: "upscale"` to preserve dimensions.
```bash theme={null}
curl -sS 'https://www.meigen.ai/api/skills/upload' \
-H "Authorization: Bearer $MEIGEN_API_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"sourceUrl":"https://your-public-host.example/product.png","purpose":"reference"}'
```
Replace the example URL with an actual directly downloadable image. The response includes `success`, `imageUrl`, `width`, `height` and `firstFrameOnly`. Store `imageUrl` and reuse it for the original request's recovery.
| Field or path | Contract |
| - | - |
| `sourceUrl` | Public HTTPS image file; no cookies, credentials, redirects or private-network targets; public IPv4 connectivity required |
| `imageBase64` | Actual raw base64 image bytes, no `data:` prefix; at most 3 MiB decoded |
| Input choice | Exactly one of `sourceUrl` or `imageBase64` |
| `purpose` | `reference` by default; `upscale` preserves pixel dimensions |
| Reference source | At most 8 MiB / 64 million pixels; PNG, JPEG, WebP or GIF |
| Prepared reference | Longest edge at most 4096px, at most 8 MiB; transparent pixels preserved; animated input uses its first frame |
| Upscale source URL | Still JPEG/PNG/WebP, at most 64 MiB / 64 million pixels; no animation |
| Local npm reference file | At most 32 MiB / 64 million pixels before preparation |
| Local npm Upscale file | At most 64 MiB / 64 million pixels as a source; output transport must fit 9,500,000 bytes without resizing. If it cannot, use the original public URL |
Temporary source-server 429/5xx responses surface as 503. Retry an upload after waiting; if the failure happened during Upscale submission, recover that submission with its original UUID and parameters.
Uploads decode and re-encode images, remove metadata and preserve alpha where supported. Remote preparation requires a positive purchased-credit balance, checked before reading the body or processing images. Uploading does not create a generation or spend generation credits. For an upload 402, top up the same account and retry the same upload; there is no generation to poll. It is subject to a separate **1,000 upload requests per user per day** protection limit. An upload failure has no Skill receipt: fix or retry the upload rather than polling `/skills/status`.
Hosts must be able to read actual attachment bytes or access the URL. Never invent a path, URL or base64 value. Upload URLs are not an archival storage promise: save your original and downloaded results.
## 4. Submit and retain the request
Each workflow page includes a request body. Generate a fresh UUID for a **new paid request** and save that UUID, the exact JSON body and the resulting job IDs before moving on. The example UUIDs are illustrative; do not reuse them for unrelated work.
```bash theme={null}
curl -sS 'https://www.meigen.ai/api/skills/product-detail/run' \
-H "Authorization: Bearer $MEIGEN_API_TOKEN" \
-H 'Content-Type: application/json' \
--data-binary @request.json
```
Cutout normally returns `imageUrl` synchronously. Other workflows return `generationId` or Product Detail `items`; a successful submission is **not proof that rendering has completed**.
## 5. Query and recover
```bash theme={null}
curl -sS 'https://www.meigen.ai/api/skills/status?skill=product-detail&requestId=550e8400-e29b-41d4-a716-446655440000' \
-H "Authorization: Bearer $MEIGEN_API_TOKEN"
```
Use the original API key, Skill ID and UUID. Receipts are isolated by account and token; another key on the same account cannot read the receipt. Recommended polling interval is **10 seconds**.
| Field | Meaning |
| - | - |
| `status` | `processing`, `completed`, `partial` or `failed` |
| `submissionStatus` | Receipt state; distinct from rendering status |
| `submission`, `submissionHttpStatus` | Original submission response and HTTP status |
| `items[]` | Per-job `generationId`, `module`, `status`, `imageUrls`, `error`, `creditsUsed`, `creditsStatus` |
| `retryable`, `retryParameters` | When recovery is allowed, exact original parameters and uploaded URLs to resubmit |
Stop ordinary polling at a terminal result. Show completed images and explain failed/missing modules individually. Refunds must be read from `creditsStatus`; neither an HTTP failure nor a missing image alone proves a refund.
After a disconnect or 5xx, **check first**. Retry only the same `requestId` and normalized inputs if recovery is allowed. Do not re-upload and silently substitute a new URL. A repeat of a recorded submission returns its existing result without another dispatch. Interrupted workers may hold a lease for about **330 seconds**; `409 in_progress` returns the remaining `retryAfterSeconds` for resubmission, while status checks can continue at the normal interval.
A partial batch is recovered as-is; missing modules are not automatically generated again. A replacement batch or a new attempt after failure can charge again and requires intent to retry. A refunded cutout may also create a new paid attempt on retry.
## Billing and errors
Product Detail produces 1–6 images and reserves credits per accepted module; other workflows produce one image. Calculate the requested batch total using its current per-image price. Provider failures follow the existing credit ledger and refund rules.
There is a **1,000 API requests per user, per Skill, per day** protection limit, in addition to any workflow limits. This is not a free allowance and purchasing credits does not remove it. Discovery and status do not spend generation credits; replaying a completed receipt does not consume another dispatch allowance.
| Response | Action |
| - | - |
| 400 / 413 / 422 | Fix the input or source size. If the rejection includes a stored receipt (`batchId`), changed inputs require a new UUID |
| 401 / 403 | Configure an active MeiGen key in the intended account; do not poll a rejected submission |
| 402 | Top up the key owner's purchased balance; submit a new request only when you want to continue |
| 409 `in_progress` | Check status; honor the remaining lease before resubmission |
| 409 `idempotency_conflict` | Restore the original parameters and recover that request; do not automatically make a new paid request |
| 409 `request_id_collision` | No Skill job was started for this rejected ID; use a new UUID without polling it |
| 409 `upscale_resize_required` | Confirm the resizing tradeoff, then use a new UUID with `allowDownscale: true` |
| 409 `price_changed` | Explain `quotedCredits`, obtain acceptance, then use a new UUID and accepted `confirmedCredits` |
| 429 | Wait for the relevant limit; it is not a credit shortage |
| 5xx / `request_interrupted` | The submission may have created jobs; check the original receipt before retrying |
| Status 404 | Verify the original key, Skill and UUID. For an interrupted first submission, retry the original body and UUID |
MCP adds a `nextAction` instruction to these results. Direct HTTP clients implement the same flow using the status/code and fields above; do not expect MCP-only `nextAction` or resource-link content in the HTTP response.
A known accepted job that is no longer available returns **410 `generation_unavailable`** and its saved job ID. Stop polling; do not automatically resubmit or create a paid replacement. Missing records do not prove a refund. Partial batches retain available results and identify missing records separately.
# Product Detail Images
Source: https://docs.meigen.ai/en/api-reference/skills/product-detail
Create one to six coordinated listing images with explicit modules.
`POST https://www.meigen.ai/api/skills/product-detail/run`
MCP: `generate_product_detail_images`
One actual product photo is required. Product name, verified selling points, logo, model photo and extra angles are optional. Resolve the desired output count before submitting. Each module produces one paid image; use the live per-image price times the selected count. Use modules: \[] for custom modules only.
Use the [shared authentication, upload and recovery guide](/en/api-reference/skills/overview) before submitting. This workflow requires a MeiGen API key and purchased credits; no free attempts or daily credits apply.
## Parameters
| Field | Contract |
| - | - |
| `requestId` | Required UUID for a new request; retain it for exact-input recovery. |
| `productImage` | Required prepared main product photo. |
| `modules` | Array: hero, detail, scene, material, usage, brand. No duplicates. HTTP default: hero/detail/scene. MCP: required. |
| `customModules` | Optional array of ; name 1–40 and description 1–500 characters. Default \[]. Total with modules: 1–6. |
| `productName / sellingPoints` | Optional; at most 200 / 2000 characters. Use verified product facts. |
| `autoCopy` | Default true: compose copy. false: follow supplied copy; language can translate it. |
| `platform` | Default amazon; supported IDs from inputSchema. |
| `aspectRatio` | Default 4:5; supported ratios from inputSchema. |
| `language / uiLocale` | Printed copy language, default auto; uiLocale is an optional fallback (max 35 characters). |
| `quality` | low (Fast, default) or medium (Pro). |
| `modelImage / logo` | Optional prepared image URLs. |
| `extraProductImages` | Up to two additional prepared product angles. |
| `extraRequirements` | Optional additional instructions, max 500 characters. |
## Request example
```json theme={null}
{
"requestId": "550e8400-e29b-41d4-a716-446655440000",
"productImage": "https://images.meigen.ai/uploads/product.png",
"productName": "Ceramic mug",
"modules": [
"hero",
"detail"
],
"quality": "low",
"language": "en"
}
```
Save the body as `request.json`; replace example image URLs with actual images and use a fresh UUID for a new request.
```bash theme={null}
curl -sS 'https://www.meigen.ai/api/skills/product-detail/run' \
-H "Authorization: Bearer $MEIGEN_API_TOKEN" \
-H 'Content-Type: application/json' \
--data-binary @request.json
```
## Result and recovery
The response includes `items` with each module and its `generationId` or dispatch error, plus `expectedCount`. Query `skill=product-detail` for completed `imageUrls`. Handle `partial`, `paywallHitMidBatch` and per-item refund status; do not discard successful modules or automatically recreate missing ones.
```bash theme={null}
curl -sS 'https://www.meigen.ai/api/skills/status?skill=product-detail&requestId=550e8400-e29b-41d4-a716-446655440000' \
-H "Authorization: Bearer $MEIGEN_API_TOKEN"
```
# Remove Background
Source: https://docs.meigen.ai/en/api-reference/skills/remove-background
Create a transparent PNG cutout from one source image.
`POST https://www.meigen.ai/api/skills/remove-bg/run`
MCP: `remove_background`
Provide one image with a clearly visible subject. There are no optional creative fields. This removes the background; use AI Backgrounds to create a white or generated scene. One paid result, including the first request.
Use the [shared authentication, upload and recovery guide](/en/api-reference/skills/overview) before submitting. This workflow requires a MeiGen API key and purchased credits; no free attempts or daily credits apply.
## Parameters
| Field | Contract |
| - | - |
| `requestId` | Required UUID for a new request; retain it for exact-input recovery. |
| `productImage` | Required prepared image URL. No prompt is needed. |
## Request example
```json theme={null}
{
"requestId": "550e8400-e29b-41d4-a716-446655440000",
"productImage": "https://images.meigen.ai/uploads/product.png"
}
```
Save the body as `request.json`; replace example image URLs with actual images and use a fresh UUID for a new request.
```bash theme={null}
curl -sS 'https://www.meigen.ai/api/skills/remove-bg/run' \
-H "Authorization: Bearer $MEIGEN_API_TOKEN" \
-H 'Content-Type: application/json' \
--data-binary @request.json
```
## Result and recovery
Normally returns `success: true`, `imageUrl` and `charged` synchronously. Download the transparent PNG. After an interrupted submission, recover with `skill=remove-bg`; do not assume that a missing response means no charge.
```bash theme={null}
curl -sS 'https://www.meigen.ai/api/skills/status?skill=remove-bg&requestId=550e8400-e29b-41d4-a716-446655440000' \
-H "Authorization: Bearer $MEIGEN_API_TOKEN"
```
# Image Upscale
Source: https://docs.meigen.ai/en/api-reference/skills/upscale
Enhance a still image with explicit resizing and price confirmation.
`POST https://www.meigen.ai/api/skills/upscale/run`
MCP: `upscale_image`
One original still image is required; the mode is optional. Use the original URL directly instead of first resizing through reference upload. This endpoint exposes image enhancement only: Web video enhancement and AI Expand are not part of this API. One accepted request produces one paid image.
Use the [shared authentication, upload and recovery guide](/en/api-reference/skills/overview) before submitting. This workflow requires a MeiGen API key and purchased credits; no free attempts or daily credits apply.
## Parameters
| Field | Contract |
| - | - |
| `requestId` | Required UUID for a new request; retain it for exact-input recovery. |
| `imageUrl` | Required original HTTPS JPEG/PNG/WebP URL that MeiGen can fetch anonymously; no credentials, fragment or nonstandard port. Any host works here — unlike `referenceVideos` / `referenceAudios`, this one is not restricted to `images.meigen.ai`. Max 64 MiB / 64 MP; still images only. |
| `mode` | crisp (default) preserves structure; creative regenerates detail in blurry images. |
| `allowDownscale` | Default false. Set true only after the resizing tradeoff is accepted. |
| `confirmedCredits` | Required by MCP on every call, including the first; optional for direct HTTP. Nonnegative integer from a live quote within the accepted user or workflow budget, for a pre-dispatch price check. It is not an atomic spending ceiling. Obtain the current price from the catalog. |
## Request example
```json theme={null}
{
"requestId": "550e8400-e29b-41d4-a716-446655440000",
"imageUrl": "https://your-public-host.example/original.png",
"mode": "crisp",
"allowDownscale": false
}
```
Save the body as `request.json`; replace example image URLs with actual images and use a fresh UUID for a new request.
```bash theme={null}
curl -sS 'https://www.meigen.ai/api/skills/upscale/run' \
-H "Authorization: Bearer $MEIGEN_API_TOKEN" \
-H 'Content-Type: application/json' \
--data-binary @request.json
```
## Resizing and price confirmation
The service prepares provider input within **4096px per edge, 16 million pixels and 10 MB**. An original above either pixel threshold returns **409 `upscale_resize_required`**, including `sourceWidth` and `sourceHeight`, before starting or charging a generation. Explain that it must be reduced, the output may be smaller than the original and clarity gains may be limited. After acceptance, submit a **new `requestId`** with the same source/mode and `allowDownscale: true`. Do not keep polling the rejected request.
Use `confirmedCredits` to communicate an accepted price from `GET /api/skills?skill=upscale`. If the current preflight price exceeds it, the API returns **409 `price_changed`** with `quotedCredits` and `confirmedCredits`, without starting or charging a generation. Obtain acceptance of the new price, then use a **new `requestId`** with the accepted `confirmedCredits`. A changed parameter cannot be replayed under the original UUID. Existing jobs should be recovered instead of confirmed and submitted again.
The service checks the initial price, model availability and full eligible balance **before downloading or decoding**, then checks the accepted price again **immediately before dispatch**. It is not an atomic spending ceiling or price lock: the billing transaction uses its live price, which can change between the check and charge. If a strict atomic ceiling is required, do not treat this field as one.
A source image server returning 429 or 5xx is surfaced as a temporary 503. Check status first and recover with the **same requestId and original parameters** when retryable; do not create a new paid request for this network failure.
For local npm files, the source limit is 64 MiB / 64 MP and encoding must fit **9,500,000 bytes without reducing pixel dimensions**. If it cannot fit, use an original public URL (up to 64 MiB / 64 MP). For attachments use `/api/skills/upload` or `upload_skill_image` with `purpose: "upscale"`; base64 remains limited to 3 MiB decoded. Static JPEG/PNG/WebP only; alpha is preserved, metadata is stripped.
API image preparation requires a positive purchased-credit balance; a 402 means top up the same account before retrying. Already accepted jobs remain recoverable at zero balance. An encoding timeout is a temporary processing failure, not evidence of a corrupt image.
## Result and recovery
A successful submission returns `generationId`. Query `skill=upscale` for the completed image and confirmed refund status if it fails. Larger dimensions do not guarantee clearer detail.
```bash theme={null}
curl -sS 'https://www.meigen.ai/api/skills/status?skill=upscale&requestId=550e8400-e29b-41d4-a716-446655440000' \
-H "Authorization: Bearer $MEIGEN_API_TOKEN"
```
# AI Art Gallery
Source: https://docs.meigen.ai/en/features/gallery
Browse curated AI images and videos, inspect prompts, search by text, image, or color, save works, and reuse ideas in MeiGen's generator.
The gallery is MeiGen's home screen — a curated mix of AI-generated artwork sourced from the community on X (Twitter) and submitted directly by MeiGen creators, updated daily across multiple AI models.
## Browsing the Gallery
Images are displayed in a **masonry grid**, each card shown at the image's original aspect ratio.
### Category Filters
Use the category tags in the left sidebar to filter the gallery:
| Category | Content |
| - | - |
| **Ads & Product** | Product photography, packaging, marketing visuals |
| **Brand & Logo** | Logos, brand identity, visual systems |
| **Videos** | Hand-picked AI videos from top creators — clicking switches to the video view |
| **Illustration & 3D** | Digital art, concept art, 3D renders, character design |
| **Posters & Visuals** | Posters, key visuals, graphic and layout design |
| **Portraits** | People, portraits, and photographic styles |
| **Storyboard & Characters** | Storyboard sequences and character sheets — reusable prompts for consistent characters |
| **Wallpaper** | Desktop and phone wallpapers |
You can also switch to **Recent** view to see the latest additions in chronological order.
### Floating Dock (Desktop)
At the bottom of the screen, a floating dock provides quick access to key areas:
| Button | Action |
| - | - |
| **Home** | Return to the gallery |
| **History** | View your generation history |
| **Favorites** | Open your saved collection |
| **Generate Video** | Open the video generation sidebar |
| **Generate Image** | Open the image generation sidebar |
| **Back to Top** | Scroll to the top (appears after scrolling) |
***
## Gallery Cards
Each gallery card displays the image along with contextual information visible on hover (desktop) or in the detail view (mobile).
**Card information includes:**
* Author avatar, display name, and @username (with verified badge when applicable)
* Like count and view count
* Time posted (e.g., "2h ago", "3d ago")
* Model badge showing which AI model was used
### Hover Actions (Desktop)
When you hover over a card, an overlay appears with three actions:
Copies the image's original prompt into the [generation editor](/en/features/generate) and opens the generation sidebar. The prompt is ready to edit and regenerate.
This button only appears when the prompt has been extracted and is available. Some newer posts may show "Prompt Pending" while the prompt is being processed.
Saves the image to your personal favorites collection. Click again to remove it. Requires sign-in.
Favorites are synced across all your devices — save on desktop, access on mobile.
Opens the original X (Twitter) post in a new tab, so you can see the full context, replies, and the creator's other work.
### Dragging Cards
Gallery cards are draggable — you can grab any card and drag it to different areas of the generation sidebar:
* **Drag to the Describe Image zone** (above the prompt editor) — the AI will analyze the image and automatically generate a detailed text prompt describing the content, style, composition, and mood.
* **Drag to the Reference Images area** — the image is added as a reference for your next generation. No download needed — the image URL is used directly.
The same actions are also available via the "Use as Prompt" and "Use as Reference" buttons in the image detail dialog.
### Mobile
On mobile devices, there are no hover actions. Tapping a card opens the full image detail view directly, where all actions are accessible.
Generation is fully available on mobile too — tap **Generate** in the bottom dock. Your generation history, favorites, boards, and credits all live in the mobile app shell as well.
***
## Image Detail
Click any gallery card to open the full-screen **Image Detail Dialog**.
### Image Viewer
* **Full resolution** — the image is displayed at its original quality
* **Multi-image navigation** — when a post contains multiple images, you'll see:
* An image counter (e.g., "2 / 4") in the corner
* A thumbnail strip on the right (desktop) for quick switching
* Previous/Next arrow buttons
* **Download** — click the download button (top right) to save the full-resolution image to your device
* **Close** — click the X button or press `Esc` to close the dialog
### Info Panel
The right side (desktop) or bottom section (mobile) shows detailed information:
**Author info:**
* Avatar, display name, @username with link to their X profile
* Verified badge when applicable
**Stats:**
* Like count, view count, and time posted
* Model badge showing which AI model generated the image
**Prompt section:**
* The full prompt text used to generate the image (preserves original formatting)
* **Copy button** — appears on hover, copies the prompt to your clipboard
* **Translate button** — translates the prompt into your language using AI. Click again to show the original text
**Action buttons:**
* **Use as Prompt** — closes the dialog, opens the generation sidebar, and fills in the prompt. Ready to edit and generate.
* **Use as Reference** — adds the current image as a reference image in the generation sidebar. Useful for style transfer or composition guidance.
If a prompt hasn't been extracted yet, the "Use as Prompt" button will appear grayed out with a "Prompt Pending" label. Check back later — prompts are usually available within a few hours.
### Video Content
The gallery also includes video content:
* **Self-generated videos** (created on MeiGen) — auto-play directly in the dialog with playback controls and looping
* **Videos from X** — due to cross-origin restrictions, these cannot play directly. A "View on Twitter" link is shown instead, opening the original post where you can watch the video.
Downloading a video is a separate paid feature from downloading images — free accounts can download images but not videos.
### Sharing
Images and videos each have their own shareable page. Use the share button in the detail view (or in the mobile video feed) to copy a link — anyone can open it, signed in or not. Videos get a dedicated video page rather than the image one, so shared video links play correctly.
### Reporting & Blocking
Every image and video has a **Report** option in its detail view (and in the top-right menu of the mobile video feed). Pick a reason — sexual or explicit content, violence or gore, hate or harassment, copyright / IP violation, spam or misleading, or *report this author* for abusive or impersonating accounts — and add details if you want. Our team reviews every report and can dismiss it, take the content down, or remove all of that author's content.
You can also **Block author** from the same menu. The block is saved to your account and hides that author's content in the MeiGen mobile app.
***
## Mobile Video Feed
Video posts also have their own full-screen feed on mobile — a swipe-based alternative to the grid.
* **Browse** — swipe up or down to move between videos; each one autoplays full screen
* **Author & stats** — the creator's avatar, name, and like/view counts are shown over the video
* **Share, Report, Block** — the same actions available in the detail view — see Sharing and Reporting & Blocking above
***
## Search
On desktop, open the search dialog by pressing `Cmd+K` (Mac) or `Ctrl+K` (Windows), or by clicking the search icon in the left sidebar — **sign-in is required**, and if you aren't signed in the sign-in dialog opens instead. On mobile, the search page is open to everyone and needs no sign-in.
Search covers the gallery's community artwork, prompts, descriptions, and visual content. Use **Use Idea** on any result with an available prompt to send it directly to the [generation editor](/en/features/generate).
* **Type and press `Enter`** — the dialog closes and the results page opens with your query
* **Hybrid search** — combines text matching with vector (semantic) search, across prompts, descriptions, and visual content
* **Suggestions** — as you type, popular search terms appear beneath the input with the matching prefix highlighted. Click one to search it, or use `↑` / `↓` to pick and `Enter` to confirm
* **Before you type** — the dialog shows shortcuts back into what you were doing: your recent searches, images you recently viewed, and your most recent saves. Click any recent search to run it again, or any thumbnail to reopen that image
* **Search by image** — click the camera icon in the search bar to upload an image and find visually similar artwork
* **Search by color** — pick a color to find artwork with a visually similar palette
* **Infinite scroll** — results load progressively as you scroll the results page
**Daily search limit** — free accounts get a daily search allowance, whether or not you're signed in. Text search and image search draw on the same allowance, and paging through results does not count as an extra search. Paid accounts are not limited. Prompt translation is unlimited on all accounts.
***
## Favorites
Access your saved content from the sidebar or the floating dock. The page has two areas: **Boards** at the top and **Saves** below.
### Boards
Boards let you group saves into named collections instead of one long list.
* **Create** — click the create card in the Boards row and name it (e.g. "Posters")
* **Add** — use **Save to board** on any gallery card, video, or one of your own generations. Both images and videos can be filed
* **Organize** — rename a board, set a cover image, merge one board into another, or delete it. Deleting a board keeps its items — they return to Saves
* **Export** — download every image in a board at once (desktop only). This is a paid feature
* **Share** — boards are private by default. Make one public to get a shareable link; visitors can browse it and use **Save as my board** to copy the whole board into their own account, and anything saved from the gallery still credits the original author
* **Discover** — a board's detail page also surfaces related official curated boards, for more ideas on the same theme
### Saves
Saves stores two types of content:
* **Gallery posts** — community artwork you've saved from the gallery
* **Your generations** — images you've generated and favorited
Anything you have filed into a board is hidden from Saves, so the two areas never show the same item twice.
### Managing Favorites
* **Add** — click the **Save** button (heart icon) on any gallery card or generation card
* **Remove** — click the **Save** button again, or use the remove button in the saves grid
* **Filter** — switch between All / Posts / Generations tabs to view specific content types
* **Sync** — favorites and boards are tied to your account and synced across all devices
Saved cards in the grid also support hover actions: **Use Idea** (if prompt available) and removing the item from your saves.
**Saves limit** — free accounts have a limit on total saved items. Once you reach it, saving more requires upgrading. The limit is account-wide, not per device.
***
## Publishing Your Work to the Gallery
You can submit your own generations to the public gallery. Submissions are reviewed by our team; accepted work is published with your profile name and avatar as the author.
* **Submit** — use *Publish to gallery* from a generation's menu. Both images and videos can be submitted
* **Track** — the **My Submissions** page shows the status of everything you sent in, with a link straight to each published piece
* **Your author link** — set a social profile URL in your MeiGen profile and it is attached to every one of your published pieces at once. Only personal-profile URLs on a list of supported platforms are accepted
* **Paid-creator badge** — published work from creators with a paid account carries a gold badge in the gallery
Once a submission is accepted and published, it stays in the gallery even if you later delete your account — see [Account & Data Deletion](/en/account) for what happens to your name and profile information in that case.
# AI Image & Video Generator
Source: https://docs.meigen.ai/en/features/generate
Create images and videos with references, quality settings, credit estimates, and generation history.
MeiGen lets you generate images and videos using multiple AI models from a unified interface. On desktop, open the generation sidebar from the floating dock; on mobile, tap **Generate** in the bottom dock to open the generation sheet. Both surfaces offer the same models, reference images, `@` mentions, prompt enhancement, AI edit, and Storyboard — this guide applies to both unless a section says otherwise.
## Model Selector
At the top of the generation sidebar, the model selector dropdown lets you choose which AI model to use.
Each option shows:
* **Provider icon** — visual indicator of the model provider (Google, ByteDance, Midjourney, etc.)
* **Model name** — the display name of the model
* **Credit cost** — how many credits this model uses per generation
Selecting a different model automatically updates the available aspect ratios, resolution options, and advanced settings to match that model's capabilities.
Compare available models — features, pricing, strengths, and limitations
***
## Skills
Need a guided, multi-step workflow instead of a single prompt? **Skills** turns one product photo into a full set of e-commerce visuals — product detail pages, white-background shots, marketing posters — through a step-by-step wizard.
Guided AI workflows for product photography and marketing visuals
***
## Prompt Editor
### Writing Effective Prompts
* **Be specific** — describe composition, lighting, colors, textures, and perspective for the best results
* **Short prompts work too** — use the Enhance button to expand brief descriptions into detailed prompts automatically
* **Language** — most models accept English prompts. Midjourney V8.2 will auto-translate non-English prompts to English
### Variable Tags
Some prompts from the gallery contain blue `[placeholder]` tags — for example, `[style]`, `[subject]`, or `[color palette]`. These are **editable template variables**.
Click any blue tag to select it, then type your replacement text. This makes it easy to create variations of a prompt without rewriting the whole thing.
### @ Mentions
When you have reference images — or, on video models, reference videos and audio — uploaded, you can mention a specific item inline in your prompt:
1. Type `@` in the prompt editor
2. A popup lists everything you have uploaded. Images show a thumbnail; **videos and audio show a video or audio icon only**, with no preview frame
3. Select an item to insert a mention tag (`@image1`, `@image2`, `@video1`, `@audio1`)
4. Write instructions around the mentions: *"Use @image1 as the background scenery, continue the camera move from @video1, and match the rhythm of @audio1"*
Numbering runs **per kind**, following the order of the items in each module — `@video2` is the second reference video, not the second item overall. Inline chips look the same as the popup rows, icon-only for video and audio. Remove an item and the remaining tags renumber themselves; a tag whose item is gone is marked stale so you can fix it before generating.
This gives you precise control over how each reference influences the generation.
### Characters
Create a character once and reference it across generations, so the same figure stays consistent from image to image — and into video.
1. Click the **Characters** button above the prompt editor (available in both the image and video sidebars)
2. In **Create Character**, give it a name and add **1–4 images** — upload them, or pick from your recent creations
3. Back in the prompt, type `@` and select the character: *"@Mia standing in a neon-lit alley, cinematic lighting"*
You don't need to attach the character's images as reference images again — selecting it in the prompt is enough. Rename or delete characters under **My Characters**; deleting one breaks the prompts that reference it.
Best results: give the character one vertical full-body shot plus one neutral face close-up of the same character.
Only AI-generated or virtual characters are allowed. Images that resemble a real person are rejected by content review.
**Limits** — there is a cap on how many characters an account can keep, and on how many you can create per day. The dialog tells you when you reach it; delete unused characters under **My Characters** to free up room.
**Availability** — image models that accept reference images (all except Flux 2 Klein), plus **Seedance 2.5** and **Seedance 2.0** for video. Selecting a character on a text-only model returns an error.
If you submit a work that mentions a character to the public gallery, that character's main image becomes publicly visible alongside it — the publish dialog asks you to confirm first.
### # Color Picker
When you need to specify an exact color for an object in your prompt, pick one from the palette:
1. Type `#` in the prompt editor
2. A palette appears with common colors and curated hues grouped by shade
3. Click any swatch to insert a color tag (e.g., `#dc143c`)
4. Write instructions around the color: *"A t-shirt in `#dc143c` paired with `#f5f5dc` pants"*
Colors are submitted to the model as hex values — more precise than describing "deep red" or "beige" in words.
### Translate Button
Click the translate icon (top right of the prompt editor) to translate your prompt into English. This is useful when writing prompts in another language, as most models produce the best results with English input.
### Prompt Enhancement
Click the **Enhance Prompt** button to automatically enhance your prompt based on the selected model:
* **Polish mode** (most models) — preserves intent, adds visual details like composition, lighting, and materials
* **Expand mode** (Midjourney V8.2) — expands into Midjourney-optimized language; non-English prompts are auto-translated
```text Input theme={null}
a cat sitting on a windowsill
```
```text Polished theme={null}
A fluffy orange tabby cat sitting gracefully on a sunlit windowsill,
warm golden hour light streaming through sheer curtains, soft bokeh
of a garden visible outside, cozy interior with houseplants, photorealistic
style with shallow depth of field
```
Enhancement works best on brief prompts (under 30 words). Skip it for prompts that already have detailed visual descriptions — the AI may over-process them.
### AI Edit
Give the AI a one-line instruction to make a precise change to your current prompt — not a full rewrite.
1. Click **AI Edit** above the prompt editor
2. Describe the change, e.g. *"make the lighting warmer"* or *"change the cat to a dog"*
3. The AI applies just that change and leaves the rest of the prompt untouched
AI Edit shares a daily quota with [Prompt Enhancement](#prompt-enhancement) and Storyboard, and doesn't spend generation credits.
### Keyboard Shortcuts
| Shortcut | Action |
| - | - |
| `Cmd+Enter` / `Ctrl+Enter` | Trigger generation |
***
## Reference Images
Upload reference images as visual context to guide the AI's output — for style matching, composition guidance, or subject reference.
* **Upload methods** — drag-and-drop files onto the reference area, or click to browse
* **Supported formats** — JPG, PNG, WebP
* **Auto-compression** — images are automatically compressed to max 2MB / 2048px before upload
* **Maximum source dimensions** — an image whose width or height exceeds **8000 pixels** is rejected before upload, with a message asking you to resize it. Everyday files stay well clear of this: a 4K photo is 3840px on its long edge, and an A4 scan at 300dpi is 2480×3508. Only print-scale source files (large-format banners, poster artwork at full print resolution) run into it — scale those down before uploading
* **Thumbnail grid** — uploaded images appear as thumbnails with an × button to remove each one
* **Per-model limits** — the maximum number of reference images varies by model (0–16; GPT Image 2.5 and GPT Image 2 each accept up to 16). Models that don't support references (currently Flux 2 Klein) hide this section entirely.
See the [Models](/en/features/models) page for the exact reference image limit of each model.
### Adding References from the Gallery
You don't need to download images first. Drag any gallery card directly into the reference image area — the image URL is used automatically.
Combine gallery references with @ mentions for powerful multi-reference workflows. For example, drag two gallery cards as references, then write: "Combine the composition of @image1 with the color palette of @image2."
### Reference Types (Midjourney V8.2)
When using Midjourney V8.2 with a reference image, a dropdown appears to choose how the reference is interpreted:
| Type | Description |
| - | - |
| **Content Reference** | The AI uses the image as subject matter — it tries to recreate similar content. Control influence with the **Image Weight** (iw) parameter (0–2). |
| **Style Reference** | The AI extracts the visual style (colors, mood, technique) without copying the content. Control with **Style Weight** (sw, 0–1000). |
### When to Use Reference Images
Some prompts work best — or only make sense — with a reference image attached. MeiGen automatically detects keywords like "reference image" or "uploaded image" in your prompt and shows a hint if no reference is uploaded.
**Common patterns that need reference images:**
| Prompt Pattern | Why Reference Needed |
| - | - |
| "Transform this reference image into..." | The AI needs a source image to transform |
| "Based on the uploaded image, create..." | Explicitly references an uploaded image |
| "Keep the composition of @image1 but change..." | Uses @ mention syntax to reference uploads |
| "Redraw / reimagine the reference photo in..." | Requires a source to redraw from |
If your prompt describes transforming, redrawing, or referencing a specific image, always upload that image as a reference first. Without it, the AI will generate something unrelated to your intent.
***
## Reference Video & Audio
On **Seedance 2.5** and **Seedance 2.0**, the video sidebar's **Reference video & audio** module accepts several clips at once — videos to continue or condition on, audio to score or style the result.
* **Upload methods** — drag files onto the module, or click **+** to browse
* **Supported formats** — MP4 and MOV for video, WAV and MP3 for audio
* **Thumbnail grid** — items appear as a grid on the left, exactly like reference images: a video shows a frame thumbnail, an audio clip shows an audio tile. Each has an × button to remove it. The module title disappears as soon as the first item is added, and the **+** button stays visible until you reach the model's cap
* **Per-model counts and totals** — Seedance 2.5 takes up to 10 videos (2–30s each, 30s in total) and up to 10 audio clips (2–30s each, 30s in total). Seedance 2.0 takes up to 3 videos (2–15s each, 15s in total) and up to 3 audio clips (2–15s each, 15s in total)
* **Size limits** — video is up to 200MB per clip on Seedance 2.5 and 50MB on Seedance 2.0; audio is up to 15MB per clip on both
* **Seedance 2.0 needs something visual** — reference audio on 2.0 only works alongside at least one reference image (a saved character counts) or one reference video. Seedance 2.5 accepts audio on its own
* **@ mentions** — every uploaded video and audio clip can be mentioned in the prompt as `@video1` / `@audio1`, shown with an icon only
* **Audio is free** — reference audio never changes the credit cost; only the videos do
Items the currently selected model or settings cannot use stay in the module, greyed out and labelled "Not used by the current model settings" — switch back and they come straight into play again. See the [Models](/en/features/models) page for each model's exact counts and totals.
***
## Generation Options
### Count
Choose how many images to generate per request (1–4).
* **Free users** — limited to 1 image per request. A lock icon appears on the + button.
* **Paid users** — can generate up to 4 images in parallel per request.
### Aspect Ratio
The default is **Auto** — no need to pick manually, a suitable ratio is chosen for you. Drop into the dropdown to pick a specific ratio when you want precise control.
| Ratio | Orientation | Common Use |
| - | - | - |
| **Auto** (default) | — | Hands-off |
| 1:1 | Square | Social media profile, icons |
| 3:4, 4:5, 2:3 | Portrait | Phone wallpaper, posters |
| 9:16 | Tall portrait | Stories, Reels |
| 9:21 | Ultra tall | Vertical banners (GPT Image 2.5 / 2) |
| 1:3 | Ultra tall | Vertical banners (GPT Image 2.5 / 2) |
| 1:4, 1:8 | Ultra tall | Scrolling banners (Nanobanana 2 / 2.1) |
| 4:3, 3:2 | Landscape | Desktop wallpaper |
| 16:9, 21:9 | Wide | Cinematic, ultrawide displays |
| 3:1 | Ultra wide | Header banners (GPT Image 2.5 / 2) |
| 4:1, 8:1 | Ultra wide | Panoramic banners (Nanobanana 2 / 2.1) |
Not all models support all ratios. The selector automatically filters to show only ratios supported by the current model. See the [Models](/en/features/models) page for each model's supported ratios.
### Resolution
The resolution options come from the model you picked — the selector only offers what that model supports:
| Model | Resolution options |
| - | - |
| Nanobanana 2 / 2.1, Nanobanana Pro, Seedream 4.5 | 2K / 4K (default 2K) |
| GPT Image 2.5 | 1K / 2K / 4K (desktop starts at 2K; mobile at 1K) |
| GPT Image 2.0 | 1K / 2K / 4K (default 2K) |
| Grok Imagine Image 2.0, Midjourney V8.2, Seedream 5.0 Pro | 1K / 2K (default 1K) |
| Flux 2 Klein, Agnes Image 2.5 Flash | Fixed — no resolution selector |
**The highest option of each model is paid-only** and shows a lock icon for free users. On a 1K / 2K model that means 2K is locked; on a 2K / 4K model it's 4K; on a 2K / 3K model it's 3K. The same rule applies to 4k on video (Seedance 2.0 Pro and Veo 3.1).
***
### GPT Image 2.5 Quality and Variant
Choose **GPT Image 2.5** when it is available in your model list. It has five quality levels: **Standard, Medium, High, Extra High, Max**. The API values are `low`, `medium`, `high`, `xhigh`, and `max`.
* **Sunburst — quality priority:** the default variant, for generation and editing where preserving details matters.
* **Flare — speed priority:** an alternative when turnaround matters. It accepts the same reference images and quality settings.
Both variants cost the same. References and aspect ratio do not add credits; the price depends on resolution and quality. An attached reference does not switch the variant automatically. Describe whether each reference provides a subject, a style, or the image to edit, and specify what must stay unchanged.
Configured starting settings are **2K Standard / 6 credits on desktop** and **1K Standard / 4 credits on mobile**, both with Sunburst. The current platform default is the model marked `is_default` in [List Models](/en/api-reference/endpoint/models). See the [full price table](/en/features/models) before choosing a higher quality.
GPT Image 2 retains its own three quality levels and prices. Retrying a 2.5 generation restores its resolution, quality, and variant; changing the model may reset unsupported options.
***
## Midjourney V8.2 Advanced Options
When using Midjourney V8.2, the **Advanced Options** button lets you tune extra generation parameters. **Most users can leave everything at defaults.**
| Parameter | Range | Default | Description |
| - | - | - | - |
| **Stylize** | 0–1000 | 100 | Controls how strongly Midjourney's aesthetic is applied. Lower = more literal, higher = more artistic. |
| **Chaos** | 0–100 | 5 | Adds variation between runs. Higher values produce more unexpected results. |
| **Raw Mode** | on/off | off | When on, produces images with a raw, less processed aesthetic; when off, the model's default styling is applied. |
| **Image Weight (iw)** | 0–2 | 1 | How much influence the content reference image has. Only visible when a content reference is set. |
| **Style Reference (sref)** | URL/text | — | Provide a URL to an image whose style you want to mimic. Disabled when reference images are set to Style mode. |
| **Style Weight (sw)** | 0–1000 | 100 | How strongly the style reference is applied. Only visible when sref or style reference images are present. |
***
## Describe Image
See an image you like but don't know how to describe it? **Describe Image** uses AI vision to analyze an image and generate a detailed text prompt that captures its content, style, and composition.
### How to Use
1. **Image detail dialog** — open any image's detail view and click the **Describe Image** button. The AI analyzes the image and generates a descriptive prompt.
2. **Drag and drop** — drag any external image (or a gallery card) onto the **Describe Image dropzone** above the prompt editor in the generation sidebar.
### What It Generates
The AI examines the image and produces a prompt describing:
* Subject matter and scene composition
* Art style and technique (photorealistic, illustration, watercolor, etc.)
* Lighting, color palette, and mood
* Camera angle and perspective
You can use the generated prompt as-is, or edit it to create variations of the original image.
Describe Image works well as a starting point. Combine it with [Prompt Enhancement](#prompt-enhancement) — first describe an image you like, then enhance the result for even more detail.
***
## Video Generation
MeiGen offers several video models — the current list and full specs are on the [Models](/en/features/models) page:
* **Seedance 2.5** — one quality level, per-second pricing, 4–30 seconds, up to 10 reference videos (30s in total, 200MB each) and up to 10 reference audio clips (30s in total)
* **Seedance 2.0** — three tiers, per-second pricing, 4–15 seconds, up to 3 reference videos (15s in total, 50MB each) and up to 3 reference audio clips (15s in total)
* **Veo 3.1** — two tiers, per-generation pricing, 4 / 6 / 8 seconds, audio always on
* **Grok Video 1.5** — per-second pricing, 4–15 seconds, a first-frame image is required
* **Agnes Video 2.5 Flash** — per-second pricing, fixed 5 seconds, covered by daily free credits. **Temporarily unavailable since 2026-09-22**; it is not returned by List Models and requests to it are rejected until it is re-enabled.
Open the video sidebar from the **Generate Video** button in the floating dock on desktop, or from **Generate** in the bottom dock on mobile.
### Storyboard — Video Prompt Builder
Click **Storyboard** in the video sidebar to turn a short idea into a production-ready prompt: a visual overview followed by a timed, shot-by-shot sequence. Set the output duration first; the generated timeline covers that duration without gaps and can include camera directions, dialogue, and sound cues.
Storyboard keeps your input language — write your idea in any language and the storyboard comes back in the same language. It requires sign-in and shares a daily AI-assist limit with the other prompt tools, but does **not** spend image/video generation credits.
### Frame Images
Upload frame images to control the video's composition:
* **First Frame** — sets the starting composition of the video
* **Last Frame** — sets the ending composition
**Seedance 2.5**, **Seedance 2.0**, and **Veo 3.1** accept both frames (up to 2). **Grok Video 1.5** and **Agnes Video 2.5 Flash** accept a first frame only.
Frames are optional except on **Grok Video 1.5**, which is image-to-video only — a first frame is required, and the output ratio follows that image.
You can also drag gallery cards directly as frame images.
### Seedance 2.5
| Option | Values | Description |
| - | - | - |
| **Aspect ratio** | adaptive, 16:9, 4:3, 1:1, 3:4, 9:16, 21:9 | Frame-image and reference-video requests use `adaptive`; text-to-video and content-reference requests can use an explicit ratio |
| **Resolution** | 480p, 720p, 1080p (default 480p) | No quality tier; 480p uses fewer credits |
| **Duration** | 4–30 seconds (default 4) | Slider or input |
| **Audio** | Auto-generated | Always on |
| **Reference images** | 2 frames or up to 30 content references | First/last frame and content references are separate modes |
| **Reference video** | Up to 10 clips, 2–30s each, 30s in total, ≤200MB per clip | Actual durations are detected automatically; billing uses their sum |
| **Reference audio** | Up to 10 clips, 2–30s each, 30s in total, ≤15MB per clip (WAV / MP3) | Free — never enters the credit cost. Audio-only requests are allowed |
**Pricing**: direct generation costs 18 / 39 / 90 credits per second at 480p / 720p / 1080p. With one or more reference videos, the rates are 11 / 24 / 54 credits per second, billed on the **sum** of the reference durations plus your output duration, with a minimum-billable floor. Reference audio adds nothing. The sidebar shows the exact total; see [Models → Seedance 2.5](/en/features/models) for the formula and examples.
Seedance 2.5 has no Mini / Fast / Pro switch. Use Seedance 2.0 Pro when you specifically need 4K.
### Seedance 2.0
| Option | Values | Description |
| - | - | - |
| **Aspect ratio** | adaptive, 16:9, 4:3, 1:1, 3:4, 9:16, 21:9 | 7 ratios. `adaptive` matches the reference image/video dimensions |
| **Resolution** | Mini / Fast: 480p, 720p. Pro: 480p, 720p, 1080p, 4K (default 480p) | Depends on the selected tier; 480p saves credits |
| **Duration** | 4–15 seconds (default 4) | Slider or input |
| **Audio** | Auto-generated | Always on |
| **Reference images** | 2 frames or up to 9 content references | Content references can be combined with reference videos and audio |
| **Reference video** | Up to 3 clips, 2–15s each, 15s in total, ≤50MB per clip | Visual conditioning input for "video continuation"; MeiGen detects each actual length automatically (see [Extending a Video](#extending-a-video) below) |
| **Reference audio** | Up to 3 clips, 2–15s each, 15s in total, ≤15MB per clip (WAV / MP3) | Free. Needs at least 1 reference image or reference video alongside it — Seedance 2.0 cannot run on audio alone |
**Pricing**: per-second; full formula (including the minimum-billable table for continuation) is in the [Models](/en/features/models) page. The sidebar shows the exact total before you submit.
**Reference workflows**:
* Text-to-video: just write a prompt
* Image-to-video: upload 1–2 frame images to control first/last frame
* Content reference: attach up to 9 images to guide subject, style, or composition
* Video extension: upload one or more reference videos (see the [Extending a Video](#extending-a-video) section below)
* Reference audio: add WAV / MP3 clips to score or style the result — on Seedance 2.0 always alongside at least one image or video
Content-reference images, reference videos and reference audio can all be submitted in the same request: they are **three independent budgets** and never consume each other's slots. Saved-character images share the content-image budget with user-uploaded images.
**Adding reference videos makes the total credit cost depend on their length**: billed seconds = "the **sum** of every reference video's duration + your chosen duration" (never below the minimum-billable floor). More clips, or longer ones, cost more. **Reference audio adds nothing** — it is never billed, and a request carrying audio but no video is priced at the plain direct rate. The sidebar shows the exact total before you submit — confirm before clicking Generate.
### Veo 3.1 — Two Tiers, Native Audio
| Option | Values | Description |
| - | - | - |
| **Tier** | Fast (default) / Pro | Toggle via the segmented control under the model picker |
| **Aspect ratio** | Auto, 16:9, 9:16 | Landscape or portrait only; Auto infers from prompt or reference image |
| **Resolution** | 720p / 1080p / 4k (default 1080p) | All three share the same price; 4k just renders longer |
| **Duration** | 4 / 6 / 8 seconds (default 4) | Pick from the dropdown |
| **Audio** | Auto-generated | Always on |
**Pricing**: per generation, depends on tier × duration. Full table is in [Models → Veo 3.1](/en/features/models).
Full specs and a side-by-side comparison of all video models are on the [Models](/en/features/models) page.
### Converting Images to Video
After generating an image, hover over the completed card and click the **Animate** button. This sends your generated image to the video sidebar as the first frame, making it easy to turn a still image into a short video clip.
### Extending a Video
Seedance 2.5 and Seedance 2.0 support reference-video continuation. Upload one or more existing videos as visual conditioning input to guide the model toward generating a new segment that semantically continues the original.
**Seedance 2.5**: up to 10 reference videos, 2–30 seconds each and 30 seconds in total, up to 200MB per clip; 4–30 second output at 480p, 720p or 1080p.
**Seedance 2.0**: up to 3 reference videos, 2–15 seconds each and 15 seconds in total, up to 50MB per clip; 4–15 second output. Mini / Fast offer 480p and 720p; Pro offers 720p and 1080p for continuation. 4K is direct-generation only.
MeiGen detects each uploaded video's actual duration automatically for billing and trimming. Reference audio can ride along in the same module and is never billed.
#### Three entry points
1. **From a video card**: hover over any completed video card and click the **Extend** button in the top-left corner — the video is added to the Seedance sidebar as a reference
2. **Drag a video to the reference-image area**: drag a video (local or from the gallery) onto the reference upload area — a confirmation popup asks "Use this as an extension reference?"
3. **Direct upload**: in the Seedance sidebar's **Reference video & audio** module, click **+** and pick local files — you can add several videos, and audio clips, in the same module
#### Workflow
1. Trigger any of the entries above — the reference video appears in the module's thumbnail grid. The two **Extend** entries (video-card button and drop-confirm popup) start a fresh continuation: they replace whatever is already in the module (videos and audio clips) and reset the prompt. **+** and drag-and-drop inside the module append to the current list instead
2. The prompt box is auto-prefilled with `"Extend this video with the following plot: "` — keep this prefix and add your desired continuation
3. Pick a supported resolution and output duration for the selected Seedance model
4. Click Generate
#### Key behavior
**Your prompt must explicitly say to extend the video.** If the prompt only describes a scene without mentioning extension, the new segment may drift away from what you imagined as a "continuation" (the visuals will still be influenced by the reference, but the plot direction follows whatever your prompt says). The auto-prefilled `Extend this video with the following plot:` prefix exists to nudge the model toward "continuation" semantics — keep it and append your content.
**Output length = your selected duration** (4–30 seconds on Seedance 2.5; 4–15 on Seedance 2.0), independent of the reference videos' lengths. The reference videos act as visual conditioning input and are not concatenated into the output. To create a continuous "original + new" video, stitch the clips in a video editor.
#### Pricing
Both models use `max(sum of reference video durations + output duration, minimum-billable floor)`. Reference audio is free and never enters that sum.
* **Seedance 2.5**: 480p 11 credits/sec; 720p 24 credits/sec; 1080p 54 credits/sec. A single 2-second reference + 5-second output bills 9 seconds, for **99 / 216 / 486 credits**. Add a second, 3-second reference and the sum becomes 5 seconds, so the same 5-second output bills max(5 + 5, 9) = 10 seconds — **110 / 240 / 540 credits**. Attaching audio on top of either leaves the total unchanged.
* **Seedance 2.0**: the rate depends on Mini / Fast / Pro and resolution, with the same sum-of-references rule. See [Models → Seedance 2.0](/en/features/models) for the full matrix.
***
## Generation History
After submitting a generation request, your images appear as cards in the generation history panel (accessible via the floating dock's History button or the sidebar).
### Pending State
Cards show live progress while generating; video generations also display an estimated completion time (e.g., `2–5 min`).
Typical generation times by model:
| Model | Typical Time |
| - | - |
| Grok Imagine Image 2.0 | \~25 seconds |
| Flux 2 Klein | \~23 seconds |
| Nanobanana 2 | \~24 seconds |
| GPT Image 2.0 | \~29 seconds |
| Agnes Image 2.5 Flash | \~31 seconds |
| Seedream 4.5 | \~33 seconds |
| Nanobanana Pro | \~34 seconds |
| Midjourney V8.2 | \~1 min |
| Seedream 5.0 Pro | \~1 min 43 sec |
| Grok Video 1.5 (video) | \~35 seconds |
| Agnes Video 2.5 Flash (video, temporarily unavailable) | \~2 min |
| Seedance 2.5 (video) | \~2–3 min; longer outputs can take longer |
| Seedance 2.0 (video) | \~2–3 min (Mini, default) / \~2–4 min (Fast) / \~3–6 min (Pro, longer at 4K) |
| Veo 3.1 (video) | \~1–4 min (720p / 1080p) / \~6–8 min (4k) |
### Failed State
If a generation fails, the card shows:
* The reason for failure
* **"Credits refunded"** note — credits are automatically returned when a generation fails
* **Retry button** — click to resubmit the same request with the original prompt and settings
### Completed State
Hover over a completed generation card to reveal action buttons:
| Action | Description |
| - | - |
| **Edit** | Adds the generated image as a reference for a new generation |
| **Cutout** | Removes the background, creating a transparent PNG (useful for logos, stickers, product compositing). Creates a new card; the original is preserved |
| **Animate** | Converts the still image into a video (image-to-video) |
| **Delete** | Removes the card from your history |
| **Use Idea** | Copies the prompt back to the editor for reuse |
| **Save** | Saves to your favorites collection |
| **Download** | Saves the image to your device |
| **Share to X** | Opens a pre-filled tweet with your generated image |
The card also shows the aspect ratio and resolution labels in the bottom-left corner.
***
## Credits and Billing
MeiGen uses a dual credit system:
* **Daily credits**: a free daily allowance that resets at 00:00 UTC, usable on **basic models** — currently **Flux 2 Klein** and **Agnes Image 2.5 Flash**, both image models. Agnes Video 2.5 Flash, the only video model daily credits covered, has been temporarily unavailable since 2026-09-22, so there is no basic-tier video model right now. They are grouped under **Basic Models** in the model picker.
* **Purchased credits**: your non-expiring balance, shown as **Credits** in the sidebar. It covers everything outside the daily allowance — credits you topped up, plus any bonus credits granted to your account (sign-up welcome bonus, referral rewards). Usable on all models.
Generating with premium models (GPT Image 2.5, GPT Image 2.0, Nanobanana 2 / 2.1 / Pro, Seedream, Midjourney V8.2, Grok Imagine Image 2.0, Seedance 2.5 / 2.0, Veo 3.1, Grok Video 1.5, and so on) requires welcome or purchased credits — daily credits never apply to them, whether or not you have purchased before.
**API Token calls** only use purchased credits, regardless of the model; daily credits never apply to the API path.
The credit cost is shown on the Generate button before you submit. Hover over the credits card at the bottom of the left sidebar to see your balance breakdown.
### Free vs Paid
| Feature | Free | Paid |
| - | - | - |
| Highest resolution of each model | Locked | Available |
| Images per request (Web UI) | 1 | Up to 4 |
| API access | Available (purchased credits only) | Available (purchased credits only) |
> The "Images per request" limit applies to the Web UI only. Each API call always returns 1 image (Midjourney V8.2 always returns 4 candidates per call).
>
> Creating an API token does not require a paid account — any account can issue one from Settings → API Keys. What API calls do require is purchased credits, since daily free credits never apply on the API path.
***
## FAQ
Generation times vary by model and server load. See the table at the top of this section for typical times.
Credits are automatically refunded when a generation fails. The refund is reflected immediately in your balance. You can use the Retry button to try again.
Use the **Retry** button on a failed card, or click **Use Idea** on a completed card to copy its prompt back to the editor. Note that AI generation is non-deterministic — even with the same prompt, results will vary.
**Cutout** removes the background from a still image, creating a transparent PNG. **Animate** converts the still image into a short video clip using the video generation model. GPT Image 2 and 2.5 also accept explicit requests for transparent backgrounds in the prompt; the alpha channel depends on intent detection and the output. Cutout removes the background from an existing image.
The top resolution of each model is reserved for paid users — 4K on models offering 2K / 4K, and 2K on models offering 1K / 2K. Upgrade your account to unlock it.
# AI Model Comparison
Source: https://docs.meigen.ai/en/features/models
Compare image and video models, quality settings, reference limits, and credit prices.
MeiGen supports multiple AI models for image and video generation. Use the comparison table below to pick one, then scroll to its section for detailed specs.
Availability and the current default come from [List Models](/en/api-reference/endpoint/models). Use a model only when it appears in the active list, and read `is_default` instead of assuming a permanent default. Prices below describe the listed configuration; confirm the displayed total before submitting.
## Quick Comparison
| Model | Credits | Speed | Ref Images | App | Best For |
| - | - | - | - | - | - |
| **GPT Image 2.5** | 4–88 (by resolution × quality) | Depends on quality and variant | 16 | See availability note | Generation and editing, five quality levels, Sunburst / Flare |
| **GPT Image 2.0** | 2–80 (by resolution × quality) | Fast (\~30s) | 16 | ✓ | Instruction following, text rendering, multi-reference scenes |
| **Nanobanana Pro** | 10 | Fast (\~34s) | 14 | ✓ | High quality, complex scenes |
| **Nanobanana 2.1** | 5 (2K) / 8 (4K) | Varies by request | 14 | ✓ | Text rendering, wide ratio support |
| **Nanobanana 2** | 5 | Fast (\~24s) | 14 | ✓ | General use, wide ratio support |
| **Seedream 5.0 Pro** | 10 (1K) / 20 (2K) | Slow (\~1min 45s) | 10 | Web only | Multi-reference composition (up to 10 refs), character consistency |
| **Seedream 4.5** | 5 | Fast (\~32s) | 10 | Web only | Product photos, marketing |
| **Grok Imagine Image 2.0** | 10–14 (Standard) / 14–18 (Medium) | Fast (\~25s) | 3 | ✓ | Precise editing, high-quality generation, text-to-image + image-to-image |
| **Midjourney V8.2** | 15 (1K) / 20 (2K) | Moderate (\~1min) | 1 | ✓ | Photorealistic, universal aesthetics |
| **Flux 2 Klein** | 2 | Fast (\~23s) | None | Web only | General-purpose base model, text rendering |
| **Agnes Image 2.5 Flash** | 1 | Fast (\~30s) | 1 | ✓ | Cheapest model, high-volume drafts, covered by daily free credits |
| **Seedance 2.5** | Per-second (480p 18/sec, 720p 39/sec, 1080p 90/sec) | Video, \~2-3min | First/last frame or content reference, plus reference video & audio | ✓ | 4–30s, 480p/720p/1080p, generated audio, multi-clip reference video & audio continuation |
| **Seedance 2.0** | Per-second (Mini 9–16/sec, Fast 13–20/sec, Pro 14–100/sec) | Video, \~2-6min | First/last frame or content reference, plus reference video & audio | ✓ | Three tiers (Mini / Fast / Pro), up to 4K on Pro, 4–15s, audio, reference video & audio |
| **Grok Video 1.5** | Per-second (480p 16/sec, 720p 28/sec) | Video, \~35s | First frame (required) | ✓ | First-frame image-to-video only, 4–15s, ratio follows input, audio |
| **Veo 3.1** | Per generation (Fast 80–165, Pro 220–435) | Video, \~1-8min | Up to 2 (first/last frame) | Web only | Two tiers (Fast / Pro), 4/6/8s, 720p/1080p/4k same price, audio |
| **Agnes Video 2.5 Flash** | 10 per video (720p, 2/sec × 5s) | Video, \~2min | First frame (single image) | ✓ | **Temporarily unavailable since 2026-09-22.** Fixed 5s / 720p, the only video model covered by daily free credits |
> ✓ = available on the iOS/Android app and web. Web only = browser only for now.
>
> GPT image 1.5 was retired on 2026-04-22 (replaced by GPT Image 2.0). Midjourney V7 was replaced by V8.1 on 2026-05-09, then upgraded in place to V8.2 on 2026-09-02 (same model ID). Happyhorse 1.1 was retired on 2026-07-31. Seedream 5.0 Lite was retired on 2026-08-13 (Seedream 5.0 Pro and Seedream 4.5 remain available). Z Image Turbo was retired on 2026-08-21.
## Image Models
### GPT Image 2.5
For precise generation and editing. Select one public model ID and choose how to balance quality and speed.
| | |
| - | - |
| **Model ID** | `gpt-image-2.5` |
| **Provider** | OpenAI |
| **Reference images** | Up to 16 |
| **Resolutions** | 1K, 2K, 4K |
| **Quality** | Standard / Medium / High / Extra High / Max |
| **Variant** | Sunburst: quality priority (default); Flare: speed priority |
| **Aspect ratios** | 1:1, 3:2, 2:3, 16:9, 9:16, 4:3, 3:4, 5:4, 4:5, 21:9, 9:21, 3:1, 1:3 |
**Credits per image:**
| Resolution | Standard (`low`) | Medium (`medium`) | High (`high`) | Extra High (`xhigh`) | Max (`max`) |
| - | - | - | - | - | - |
| **1K** | 4 | 6 | 12 | 18 | 28 |
| **2K** | 6 | 9 | 22 | 30 | 48 |
| **4K** | 12 | 16 | 36 | 50 | 88 |
Sunburst and Flare cost the same at the same resolution and quality. Adding reference images or changing the aspect ratio does not add credits. Higher quality can take longer; there is no fixed completion-time guarantee.
When selected, the configured starting settings are **2K Standard (6 credits) on desktop** and **1K Standard (4 credits) on mobile**, with Sunburst. Saved settings may differ.
Both variants accept text-only prompts and reference images. For an edit, specify what to change and what to preserve. For a person, product, or style reference, explain the role of each image. Attaching a reference does not automatically switch variants.
You can explicitly request a transparent background in your prompt. Whether the result has an alpha channel depends on intent detection and the generated output; use **Cutout** to remove the background from an existing image.
GPT Image 2.5 uses welcome or purchased credits; daily free credits do not apply. 4K is paid-only. See [API parameters](/en/api-reference/endpoint/generate) for `quality` and `modelVariant`.
***
### GPT Image 2.0
| | |
| - | - |
| **Model ID** | `gpt-image-2` |
| **Provider** | OpenAI |
| **Credits** | By resolution × quality — see table below |
| **Reference images** | Up to 16 |
| **Resolutions** | 1K, 2K, 4K |
| **Quality** | Standard / Medium / High |
| **Transparent background** | Request it explicitly in your prompt; output depends on intent detection and generation |
| **Aspect ratios** | 1:1, 3:2, 2:3, 16:9, 9:16, 4:3, 3:4, 5:4, 4:5, 21:9, 9:21, 3:1, 1:3 |
**Credit matrix:**
| | Standard | Medium | High |
| - | - | - | - |
| **1K** | 2 | 10 | 18 |
| **2K** | 5 | 20 | 40 |
| **4K** | 10 | 32 | 80 |
All resolutions consume welcome or purchased credits (premium model — daily free credits don't apply). 4K is paid-only. Aspect ratio does not affect pricing — credits depend only on resolution × quality.
GPT Image 2 remains a separate model with its original three quality levels and prices. It supports instruction following, in-image text, and multi-element scenes. Its `medium` and `high` settings are not interchangeable with the same labels on 2.5.
You can explicitly request a transparent background in your prompt. Whether the result has an alpha channel depends on intent detection and the generated output. Use **Cutout** when you need to remove the background from an existing image.
**Stricter moderation**: prompts involving real people, celebrities, brand logos, or violent/adult content may be rejected. Rephrase to drop specific names or try a different model.
***
### Nanobanana 2.1
| | |
| - | - |
| **Model ID** | `nanobanana-2.1` |
| **Provider** | Google (Gemini) |
| **Credits** | 5 per image at 2K / 8 at 4K |
| **Reference images** | Up to 14 |
| **Resolutions** | 2K, 4K — default 2K |
| **Aspect ratios** | 1:1, 3:4, 4:5, 2:3, 9:16, 1:4, 1:8, 4:3, 5:4, 3:2, 16:9, 21:9, 4:1, 8:1 |
A separate model alongside Nanobanana 2, with a focus on sharper text rendering. Both remain available; use `nanobanana-2.1` to select this version explicitly. Unlike Nanobanana 2's flat 5-credit price, 2.1 costs 8 credits at 4K.
Available on Web, iOS and Android. This is a premium model: daily free credits do not apply, and 4K is paid-only. API and MCP generation use purchased credits only. Call `list_models` for current availability and pricing.
***
### Nanobanana 2
| | |
| - | - |
| **Model ID** | `nanobanana-2` |
| **Provider** | Google (Gemini) |
| **Credits** | 5 per image |
| **Reference images** | Up to 14 |
| **Resolutions** | 2K, 4K |
| **Aspect ratios** | 1:1, 3:4, 4:5, 2:3, 9:16, 1:4, 1:8, 4:3, 5:4, 3:2, 16:9, 21:9, 4:1, 8:1 |
The most affordable Gemini model with the widest range of aspect ratios, including ultra-wide (8:1) and ultra-tall (1:8) options. Good for quick iterations and exploration. 4K is paid-only.
**Content moderation**: Nanobanana 2 has stricter content filtering than other models. Prompts that mention **celebrities, brand names, real people, or face-swap scenarios** are more likely to be rejected. If your prompt is flagged, try rephrasing to avoid specific names or use a different model.
***
### Nanobanana Pro
| | |
| - | - |
| **Model ID** | `gemini-3-pro-image-preview` |
| **Provider** | Google (Gemini) |
| **Credits** | 10 per image |
| **Reference images** | Up to 14 |
| **Resolutions** | 2K, 4K |
| **Aspect ratios** | 1:1, 3:4, 4:5, 2:3, 9:16, 4:3, 5:4, 3:2, 16:9, 21:9 |
The premium Gemini model with higher image quality. Better at complex scenes, fine details, and text rendering. Choose this when quality matters more than cost. 4K is paid-only.
***
### Seedream 5.0 Pro
| | |
| - | - |
| **Model ID** | `seedream-5.0-pro` |
| **Provider** | ByteDance |
| **Credits** | 10 (1K) / 20 (2K) per image |
| **Reference images** | Up to 10 |
| **Resolutions** | 1K, 2K — default 1K |
| **Aspect ratios** | 1:1, 3:4, 4:3, 16:9, 9:16, 3:2, 2:3, 21:9 |
ByteDance's flagship Seedream tier. Accepts **up to 10 reference images**, making it a strong pick for multi-subject composition and for keeping a character consistent across images. 2K is paid-only.
***
### Seedream 4.5
| | |
| - | - |
| **Model ID** | `seedream-4.5` |
| **Provider** | ByteDance |
| **Credits** | 5 per image |
| **Reference images** | Up to 10 |
| **Resolutions** | 2K, 4K |
| **Aspect ratios** | 1:1, 4:3, 3:4, 16:9, 9:16, 3:2, 2:3, 21:9 |
The previous generation Seedream model. Still produces solid results, particularly good for product photography and marketing visuals. 4K is paid-only.
***
### Grok Imagine Image 2.0
| | |
| - | - |
| **Model ID** | `grok-image` |
| **Provider** | xAI |
| **Credits** | By resolution × quality — see table below |
| **Reference images** | Up to 3 |
| **Resolutions** | 1K, 2K — default 1K |
| **Quality** | Standard (default) / Medium |
| **Aspect ratios** | 1:1, 3:2, 2:3, 4:3, 3:4, 16:9, 9:16 |
**Credit matrix:**
| | Standard | Medium |
| - | - | - |
| **1K** | 10 | 14 |
| **2K** | 14 | 18 |
xAI's Grok Imagine 2.0 image model. Supports both text-to-image and image-to-image (up to 3 reference images for editing or guided generation), with a focus on precise editing, infographics, ads, and UI/UX mockups. A premium model — daily free credits don't apply.
***
### Midjourney V8.2
| | |
| - | - |
| **Model ID** | `midjourney-v8.1` — stable identifier, not a version number. Upgraded in place to Midjourney V8.2 on 2026-09-02; existing integrations keep working unchanged. |
| **Provider** | Midjourney |
| **Credits** | 15 (1K) / 20 (2K) per generation |
| **Reference images** | 1 (content or style reference) |
| **Resolutions** | 1K (1024×1024) / 2K (2048×2048) — default 1K |
| **Aspect ratios** | 1:1, 4:3, 3:2, 16:9, 3:4, 2:3, 9:16 |
| **Quality** | Standard / High — default High (same price) |
Midjourney's photorealistic flagship. Returns 4 candidate images per generation (charged once). Choose **2K** for native high-resolution output, **High quality** for finer detail at no extra cost. 2K is paid-only.
**Features:**
* Content and style reference modes
* Advanced parameters (stylize, chaos, raw, etc.) for fine-tuning the output
* Auto-translates non-English prompts to English
* Native 2K output toggle
* Quality (Standard / High) toggle
***
### Flux 2 Klein
| | |
| - | - |
| **Model ID** | `flux2-klein` |
| **Provider** | Black Forest Labs |
| **Credits** | 2 per image |
| **Daily free credits** | Eligible |
| **Reference images** | Not supported |
| **Aspect ratios** | Auto, 1:1, 4:3, 3:4, 16:9, 9:16, 3:2, 2:3 |
A base model from Black Forest Labs, suited to everyday general-purpose creation.
***
### Agnes Image 2.5 Flash
| | |
| - | - |
| **Model ID** | `agnes-image-2.1-flash` — stable identifier, not a version number. The backend was upgraded in place to Agnes Image 2.5 Flash on 2026-09-14; existing integrations keep working unchanged. |
| **Provider** | Agnes |
| **Credits** | 1 per image |
| **Daily free credits** | Eligible |
| **Reference images** | 1 |
| **Aspect ratios** | 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3 |
The cheapest model on MeiGen at 1 credit per image, and the only basic-tier **image** model that accepts a reference image. Good for high-volume drafting and low-cost image-to-image iteration.
***
## Video Models
### Seedance 2.5
| | |
| - | - |
| **Model ID** | `seedance-2-5` |
| **Provider** | ByteDance |
| **Credits** | Per-second pricing (see below) |
| **Duration** | 4–30 seconds (default 4) |
| **Reference images** | Up to 2 first/last frames, or up to 30 content references (`referenceMode: content`) |
| **Reference video** | Up to 10 clips, 2–30s each, 30s in total, ≤200MB per clip; actual durations are detected automatically |
| **Reference audio** | Up to 10 clips, 2–30s each, 30s in total, ≤15MB per clip (WAV / MP3); free, and allowed with no image or video attached |
| **Resolutions** | 480p, 720p, 1080p (default 480p) |
| **Aspect ratios** | adaptive, 16:9, 4:3, 1:1, 3:4, 9:16, 21:9 |
| **Audio** | Auto-generated |
| **Tiers** | None — do not send `tier` |
Seedance 2.5 is the long-duration Seedance model on MeiGen. It supports text-to-video, first/last-frame image-to-video, up to 30 content-reference images, and reference-video continuation. Content images, reference videos and reference audio can all be used in the same request and are three independent budgets. Frame references and reference-video continuation use `adaptive` ratio so the output follows the input media; text-to-video and content-reference requests can use an explicit supported ratio.
#### Pricing
| Resolution | Direct | With reference video |
| - | - | - |
| 480p | 18 credits/sec | 11 credits/sec |
| 720p | 39 credits/sec | 24 credits/sec |
| 1080p | 90 credits/sec | 54 credits/sec |
Direct generation bills only the selected output duration. With one or more reference videos, billing uses the **sum** of their durations:
`billable seconds = max(sum of reference video durations + selected output duration, ceil(selected output duration × 5 / 3))`
The minimum-billable floor is 7 seconds for a 4-second output, 9 for 5 seconds, and 50 for 30 seconds. Output length is always the selected 4–30 seconds; the billing floor does not lengthen the generated clip. **Reference audio is free** — its duration never enters the sum, and a request with audio but no reference video is billed at the direct rate.
| Scenario | Calculation | Total |
| - | - | - |
| 480p × 5s direct | 18 × 5 | **90** |
| 720p × 5s direct | 39 × 5 | **195** |
| 480p, one 2s reference video + 5s output | 11 × max(2+5, 9) | **99** |
| 720p, one 2s reference video + 5s output | 24 × max(2+5, 9) | **216** |
| 480p, 2s + 3s reference videos + 5s output | 11 × max(2+3+5, 9) = 11 × 10 | **110** |
| 480p, one 2s reference video + 1 reference audio clip + 5s output | 11 × max(2+5, 9); audio adds 0 | **99** |
| 480p × 5s direct + 1 reference audio clip | 18 × 5; no reference video, so the direct rate applies | **90** |
| 480p × 30s direct | 18 × 30 | **540** |
If generation fails, the **full** credit amount is automatically refunded.
***
### Seedance 2.0
| | |
| - | - |
| **Model ID** | `seedance-2-0` |
| **Provider** | ByteDance |
| **Credits** | Per-second pricing (see below) |
| **Duration** | 4-15 seconds (default 4) |
| **Reference images** | Up to 2 first/last frames, or up to 9 content references (`referenceMode: content`) |
| **Reference video** | All three tiers. Up to 3 clips, 2–15s each, 15s in total, ≤50MB per clip — the platform detects each actual duration automatically |
| **Reference audio** | Up to 3 clips, 2–15s each, 15s in total, ≤15MB per clip (WAV / MP3); free, but requires at least 1 reference image or reference video |
| **Resolutions** | Direct: Mini/Fast 480p/720p, Pro 480p/720p/1080p/4K. With reference video: Mini/Fast 480p/720p, Pro 720p/1080p (no 480p, no 4K) |
| **Aspect ratios** | adaptive, 16:9, 4:3, 1:1, 3:4, 9:16, 21:9 |
| **Audio** | Auto-generated |
Seedance 2.0 is the three-tier Seedance option. It supports text-to-video, image-to-video (first/last frame or content reference), and video continuation. All outputs include AI-generated audio. The `adaptive` aspect ratio automatically matches the reference image/video dimensions. Both Seedance 2.0 and 2.5 support **character assets**: save a character once, then reference it with `@` in your prompt to keep the same subject across shots.
Two reference-image modes: **first/last frame** (default, up to 2 images) sets the opening and/or closing frame; **content reference** guides style or subject instead of fixing a frame position and accepts up to 9 images. Content images, reference videos and reference audio can all be used in the same request and are three independent budgets.
**Three tiers**, picked from the tier switch (Mini / Fast / Pro) in the video sidebar. Same Seedance 2.0 model, same params, just different rendering quality and price:
* **Mini** (default): cheapest and most lightweight; 480p / 720p
* **Fast**: quick turnaround at 480p / 720p
* **Pro**: higher fidelity, with **native 1080p and 4K** rendering (4K is direct-generation only)
All three tiers support multi-clip reference-video continuation and reference audio — continuation output tops out at 1080p even on Pro.
#### Pricing
Per-second. Rate depends on **tier** (Mini / Fast / Pro) × **whether a reference video is uploaded**:
| Resolution | Mini Direct | Mini With reference video | Fast Direct | Fast With reference video | Pro Direct | Pro With reference video |
| - | - | - | - | - | - | - |
| 480p | 9/sec | 7/sec | 13/sec | 8/sec | 14/sec | — |
| 720p | 16/sec | 13/sec | 20/sec | 14/sec | 22/sec | 16/sec |
| 1080p | — | — | — | — | 42/sec | 28/sec |
| 4K | — | — | — | — | 100/sec | — |
Mini and Fast only support 480p / 720p. Pro adds native 1080p and 4K for direct generation; with a reference video, Pro is limited to 720p / 1080p (no 480p rate).
**With-reference-video billing rule (all tiers):**
`billable seconds = max(sum of reference video durations + your selected duration, min billable)`
Output length is always your selected duration (4–15), independent of the reference videos' lengths. **Reference audio is free** and never enters the sum; attaching audio without any reference video keeps the direct rate.
| Your selected duration (sec) | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| - | - | - | - | - | - | - | - | - | - | - | - | - |
| Min billable (sec) | 7 | 9 | 10 | 12 | 14 | 15 | 17 | 19 | 20 | 22 | 24 | 25 |
#### Examples
| Scenario | Calculation | Total |
| - | - | - |
| Mini 480p × 4s direct | 9 × 4 | **36** |
| Mini 720p × 5s direct | 16 × 5 | **80** |
| Fast 480p × 5s direct | 13 × 5 | **65** |
| Fast 720p × 5s direct | 20 × 5 | **100** |
| Fast 720p, one 5s reference video + 10s selected duration | 14 × max(5+10, 17) = 14 × 17 | **238** |
| Fast 720p, 4s + 5s reference videos + 10s selected duration | 14 × max(4+5+10, 17) = 14 × 19 | **266** |
| Mini 720p × 5s with a first frame + 1 reference audio clip | 16 × 5; audio adds 0 | **80** |
| Pro 720p × 5s direct | 22 × 5 | **110** |
| Pro 1080p × 5s direct | 42 × 5 | **210** |
| Pro 4K × 5s direct | 100 × 5 | **500** |
| Pro 1080p, one 5s reference video + 10s selected duration | 28 × max(5+10, 17) = 28 × 17 | **476** |
If generation fails, the **full** credit amount is automatically refunded — including all per-second charges.
***
### Grok Video 1.5
| | |
| - | - |
| **Model ID** | `grok-video` |
| **Provider** | xAI |
| **Credits** | Per-second (see below) |
| **Duration** | 4-15 seconds (default 4) |
| **Reference images** | 1 — first frame **required** (image-to-video only) |
| **Reference video** | Not supported |
| **Reference audio** | Not supported |
| **Resolutions** | 480p, 720p (default 480p) |
| **Aspect ratios** | Follows the first-frame image automatically (no manual ratio selection) |
| **Audio** | Auto-generated |
xAI's image-to-video model. A starting (first-frame) image is **required** — pure text-to-video is not supported. The output aspect ratio always follows your input image, and AI-generated audio is included.
#### Pricing
| Resolution | Rate |
| - | - |
| 480p | 16 credits/sec |
| 720p | 28 credits/sec |
**Examples:**
| Scenario | Calculation | Total |
| - | - | - |
| 480p × 4s | 16 × 4 | **64** |
| 480p × 10s | 16 × 10 | **160** |
| 720p × 4s | 28 × 4 | **112** |
| 720p × 10s | 28 × 10 | **280** |
If generation fails, the **full** credit amount is automatically refunded.
***
### Veo 3.1
| | |
| - | - |
| **Model ID** | `veo-3.1` |
| **Provider** | Google |
| **Credits** | Per generation (see below) |
| **Duration** | 4, 6, or 8 seconds (default 4) |
| **Reference images** | Up to 2 (as first/last frame) |
| **Reference video** | Not supported |
| **Reference audio** | Not supported |
| **Resolutions** | 720p, 1080p, 4k (default 1080p) |
| **Aspect ratios** | Auto, 16:9, 9:16 |
| **Audio** | Auto-generated (always on) |
Google's video generation model. Creates short clips with AI-generated audio synced to the prompt. **Auto** aspect ratio infers the output ratio from your prompt or reference image. Pick this for premium visual quality with native audio; for longer durations (>8s), use Seedance 2.5.
**Two tiers** — pick one from the tier switch (Fast / Pro) in the video sidebar. Same Veo 3.1 model, same params, just different rendering quality and price:
* **Fast** (default) — quick turnaround, balanced quality
* **Pro** — higher fidelity, longer rendering time
#### Pricing
Per generation. Price depends on **tier** (Fast / Pro) × **duration** (4 / 6 / 8s). **All resolutions (720p / 1080p / 4k) share the same price** — picking a higher resolution costs no extra credits. Two caveats: 4k requires a paid account, and it takes noticeably longer to render.
| Duration | Fast | Pro |
| - | - | - |
| 4s | 80 | 220 |
| 6s | 125 | 330 |
| 8s | 165 | 435 |
#### Examples
| Scenario | Total |
| - | - |
| Fast 4s (any resolution) | **80** |
| Fast 8s (any resolution) | **165** |
| Pro 4s (any resolution) | **220** |
| Pro 8s 4k | **435** |
If generation fails, the **full** credit amount is automatically refunded.
***
### Agnes Video 2.5 Flash
**Temporarily unavailable since 2026-09-22.** This model is currently disabled: it is not
returned by [List Models](/en/api-reference/endpoint/models) and generation requests for
`agnes-video-2.0` are rejected with `400`. The details below describe its behaviour when
enabled and are kept for existing integrations. Check List Models for current availability.
| | |
| - | - |
| **Model ID** | `agnes-video-2.0` — stable identifier, not a version number. The backend was upgraded in place to Agnes Video 2.5 Flash on 2026-08-31; existing integrations keep working unchanged. |
| **Provider** | Agnes |
| **Credits** | 10 per video |
| **Daily free credits** | Eligible (when enabled) |
| **Duration** | 5 seconds (fixed) |
| **Reference images** | 1 (first frame, image-to-video) |
| **Reference video** | Not supported |
| **Reference audio** | Not supported |
| **Resolutions** | 720p |
| **Aspect ratios** | Auto, 16:9, 9:16, 1:1, 4:3, 3:4 |
The only basic-tier video model — and the only one your daily free credits cover — while it is enabled. Supports text-to-video and single-image first-frame image-to-video at a fixed 5 seconds / 720p. For longer clips or higher resolutions, use Seedance 2.5 (up to 30s and 1080p); for 4K, use Seedance 2.0 Pro or Veo 3.1.
**Image-to-video ignores the requested aspect ratio** — the output follows the first frame.
Images you generated or uploaded on MeiGen are cropped to your selected ratio at the CDN
edge first, so the result matches your choice. Images from anywhere else (API callers may
pass any public URL or `data:` base64) are used as-is, and the output ratio follows that
image.
#### Pricing
| Resolution | Rate |
| - | - |
| 720p | 2 credits/sec |
Duration is fixed at 5 seconds, so every generation costs **10 credits**.
If generation fails, the **full** credit amount is automatically refunded.
***
## Known Limitations
This model is more sensitive to content involving real people, celebrities, brand logos, and face-swap requests. Prompts that work on other models may be rejected here. If you get a content violation error, rephrase your prompt to remove specific names or try a different model.
This base model generates images from text only. The reference image upload section is hidden while it is selected. If you need reference images, switch to another model.
Midjourney V8.2 accepts only 1 reference image, while other image models accept between 3 and 16. In exchange it offers more control over how the reference is used (content vs. style reference).
Unlike other models that return a single image, Midjourney V8.2 returns 4 candidate images per generation. All candidates are saved and can be browsed in the image detail dialog. You are only charged once (15 credits at 1K / 20 credits at 2K) for all 4 images.
GPT Image 2.0 applies stricter moderation than other models to real people, celebrities, brand logos, and adult/violent content. Rephrase your prompt to drop specific names, or try a different model.
Seedance bills **per second**, not per image — and uploading a reference video switches to a separate rate table with a minimum-billable floor. With several reference videos, the billed seconds use the **sum** of their durations plus your selected output duration, so each extra clip raises the total. Reference audio is free and never enters that sum, and a request with audio but no reference video stays on the direct rate. See the **Seedance 2.0** section above for the full rates and formula.
On Seedance 2.0, reference audio only works alongside at least one reference image (a saved character counts) or one reference video — audio on its own is rejected before any credits are deducted. Seedance 2.5 has no such requirement and accepts audio-only requests.
Seedance 2.5 has one quality level and supports 480p / 720p / 1080p. Do not send `tier`; use Seedance 2.0 Pro when you specifically need 4K.
The Mini tier (the default) is the lightweight option, capped at 720p. For 1080p or 4K output, switch to **Pro** — note that reference-video continuation on Pro tops out at 1080p (4K needs direct generation with no reference video).
Grok Video 1.5 is image-to-video only — you **must** upload a starting (first-frame) image. Pure text-to-video is not supported. The output aspect ratio follows your input image. If you want text-to-video, use Seedance 2.5, Seedance 2.0, or Veo 3.1.
Grok Video 1.5 outputs at 480p or 720p only. For 1080p, use Seedance 2.5 or Seedance 2.0 Pro; for 4K, use Seedance 2.0 Pro or Veo 3.1.
Veo 3.1 only supports 16:9 / 9:16 (plus Auto). Square (1:1), 4:3 / 3:4 portrait, and other ratios are not available. For wider ratio support, use Seedance 2.5 or Seedance 2.0.
720p / 1080p / 4k all cost the same on Veo 3.1, so 4k costs no extra credits. Two things to know: 4k is **locked for free accounts** (selecting it opens the upgrade dialog), and rendering takes longer — 4k typically takes 6–8 minutes versus 1–4 minutes for 720p / 1080p. The same 4k lock applies to Seedance 2.0 Pro.
# Skills — E-commerce AI Workflows
Source: https://docs.meigen.ai/en/features/skills
Create product detail images, white-background photos, and marketing posters with guided workflows.
**Skills** is a set of guided, e-commerce-focused workflows — a separate entry point from general [image and video generation](/en/features/generate). Instead of writing a prompt from scratch, you fill in a short form for your use case and MeiGen produces the finished asset.
Open **Skills** from the sidebar on web, or from the Create tab in the iOS/Android app, to see the available workflows. Each one has an example project you can preview before running it yourself.
This page describes the Web/App interface. For automation, use the [five Skills API guides](/en/api-reference/skills/overview) or [MCP](/en/mcp/overview). API fields and billing differ: only purchased credits apply, no free attempts; image enhancement is supported, video enhancement and AI Expand are not exposed by this API.
## Product Detail Images
Turn one product photo into a full set of detail-page images — the kind used on marketplace listings.
**You provide:**
| Field | Notes |
| - | - |
| Product photo | Required |
| Product name | Required |
| Selling points | Optional — leave blank and the AI extracts them from the photo |
| Target platform | Adjusts layout and style conventions |
| Aspect ratio | For the output images |
**Optional content modules** — pick which sections to include in the set:
Hero Banner · Specs & Parameters · Detail Close-up · Lifestyle Scene · Model Shot · Size Chart · Material · Usage Instructions · Brand Closing
## White Background
Turn a casual product photo into a clean, white-background product image.
**You provide:**
* Product photo (required)
## Marketing Poster
Turn a one-line idea into a promotional, event, or recruitment poster.
**You provide:**
| Field | Notes |
| - | - |
| Theme | One sentence describing the poster |
| Copy | The text to appear on the poster |
| Extra requirements | Free-text, optional |
| Reference image | Optional — use your own brand assets |
| Poster text language | Chinese, English, Korean, Japanese, Russian, French, or Spanish |
## Image Enhancement (Upscale)
Use an original still JPEG, PNG or WebP. **Crisp** preserves its structure; **Creative** rebuilds detail and can change the appearance. Review the displayed price and any resizing decision before starting. Oversized images may need to shrink first, so the output can be smaller than the original.
App versions with local Upscale upload preparation accept originals up to **64 MiB / 64 million pixels**, preparing uploads within **10 MiB**. It removes metadata without pixel decoding when the sanitized image already fits; otherwise it uses native decoding with a size limit and compresses the result. Reducing oversized dimensions requires acceptance; flattening a PNG requires a separate confirmation. The server checks the actual image again before generation. New local Upscale uploads remove EXIF/GPS/XMP before becoming public, while preserving image orientation and color configuration. If your installed App does not support these confirmations, use the Web interface. App updates are released separately from this API/MCP update. For MCP and HTTP limits, use the separate [Upscale API guide](/en/api-reference/skills/upscale).
## Where Results Go
Skills output lands in your regular [generation history](/en/features/generate#generation-history) alongside everything else you create — you can save it to favorites or [publish it to the gallery](/en/features/gallery#publishing-your-work-to-the-gallery) the same way.
## Credits
These workflows have **their own Skill prices**, separate from the general image generator. Their GPT Image 2.5 configuration uses **Sunburst at 2K**; the workflow selects the model for you.
| Workflow | Option | Credits per generated image |
| - | - | - |
| Product Detail Images | Fast / Pro | 5 / 18 |
| Marketing Poster | Fast / Pro | 5 / 18 |
| White Background (White mode only) | Fixed quality | 5 |
Fast uses Standard quality; Pro uses High quality. A multi-image set costs the per-image price multiplied by the number of images. Check the workflow's displayed total and availability before submitting; these prices do not apply to a general `gpt-image-2.5` API request. AI Backgrounds in Smart or Custom mode uses another model and the price shown in its interface. Other Skills may also use different models and prices.
For general generation, see the [model comparison page](https://www.meigen.ai/model-comparison).
# 3.0 Migration: ComfyUI and Offline Library
Source: https://docs.meigen.ai/en/mcp/comfyui
Upgrade existing integrations after the removal of ComfyUI and bundled prompt data.
[meigen 3.0.0](https://www.npmjs.com/package/meigen/v/3.0.0) is a major release with breaking changes. Review the removals below before upgrading an existing integration.
## Removed in 3.0.0
* The `comfyui` generation provider and `comfyui_workflow` tool.
* `COMFYUI_URL`, `comfyuiUrl` and `comfyuiDefaultWorkflow` configuration support.
* The bundled collection of about 1,400 prompts and offline search fallback. Online search returns an explicit error if its service is unavailable; it does not substitute local results.
Remove these settings from your MCP environment and private `~/.config/meigen/config.json`, and update scripts that call the removed provider/tool. User-owned files in `~/.config/meigen/workflows/` are not deleted or automatically migrated. An explicit ComfyUI request is rejected rather than redirected to a paid cloud provider.
## Connection choices
New users connect [remote MCP with OAuth](/en/mcp/remote) or install the [official ChatGPT plugin](/en/mcp/overview#chatgpt). Existing API-key calls for generation, public search and Skills and explicitly selected BYOK workflows retain [legacy local compatibility](/en/mcp/setup). Do not create a new MeiGen key as a new-user alternative.
Local 3.0.0 has 16 tools and no private-library tools. Favorites, boards, history, item details and saving are available through standard remote MCP with OAuth. The official ChatGPT plugin update adding these tools is still awaiting store approval.
## Upgrade sequence
1. Review workflows and remove unsupported ComfyUI/offline-library assumptions.
2. Update only the existing package argument to `meigen@3.0.0`, preserving credentials and host settings as described in [local setup](/en/mcp/setup). Configurations following the default npm tag can receive a new major automatically; keep an explicit pin. Claude/OpenClaw plugin bundles update separately.
3. Restart/reconnect and inspect actual tool schemas. Keep original request IDs for any interrupted generation; upgrading does not authorize a new paid attempt.
See the [source release notes](https://github.com/jau123/MeiGen-AI-Design-MCP) for release status. This URL is retained so old ComfyUI documentation links continue to explain the migration.
# Composable workflows
Source: https://docs.meigen.ai/en/mcp/composable-workflows
Persist task IDs, generate frames and videos, and resume within an approved budget.
3.0.0 is a major release that removes ComfyUI and the offline prompt library. New account connections use remote OAuth; API keys remain only for existing legacy local integrations. See [migration notes](/en/mcp/comfyui).
[中文](/zh/mcp/composable-workflows) · [Connection setup](/en/mcp/setup) · [Five Skills HTTP API](/en/api-reference/skills/overview)
Use MeiGen as a callable step inside an existing agent, Skill, script or application. The caller owns the creative plan, prompts, model/provider choices, output count, approved budget, scheduling and presentation. Optional MeiGen creative assistants can help develop a brief; they are not required before calling tools. Discovery can support any workflow. A resolved upstream plan does not need another approval for every frame, clip or batch.
Use local [**`meigen` 3.0.0**](https://www.npmjs.com/package/meigen/v/3.0.0) (`npx -y meigen@3.0.0`), or the remote endpoint **`https://www.meigen.ai/api/mcp`** with OAuth. Reconnect and inspect the installed schemas for `requestId`, `wait` and request lookup. Backend rollbacks must preserve recovery endpoints and the durable POST contract.
## Ordinary task contract
| Field or tool | Contract |
| - | - |
| `requestId` | Persist a UUID per logical image/video attempt before submitting. Reuse that ID and exact inputs for recovery; a genuinely new paid attempt gets a new ID. |
| `wait: false` | Submit and return a task handle without waiting for media completion. Required: `requestId` on local npm. Remote generation always needs `requestId` or the legacy `attemptId`. |
| `wait: true` | Existing default: wait for completion or return an actionable processing/error state. A tool timeout does not cancel an accepted job. |
| `download: false` | Local npm: skip saving generated media when only URLs are needed. Default is `true` for compatibility; `wait: false` skips download regardless. Remote MCP has no `download` parameter and returns URLs. |
| `check_generation` | Supply the original `requestId` or returned `generationId`, not both. Pass the returned `nextAction.arguments` unchanged when checking again; it preserves the optional original `requestedMediaType` (`image` or `video`). For manual recovery, include that intent from the saved plan when known. Request lookup can recover a MeiGen attempt across host/process restarts; it is not limited to a local cache. |
| `firstFrame` | Pass a completed frame URL to a video model that supports it. The caller chooses whether to inspect or show the frame first. |
The recoverable cloud-task contract above is for MeiGen. Optional local OpenAI-compatible providers may expose different asynchronous support; inspect their tool schema and returned errors rather than assuming a MeiGen receipt exists for those jobs. Preserve explicitly supplied model/provider and generation settings. `list_models` is available whenever a workflow needs current capabilities or prices; video requires a model.
Read `structuredContent`, not a human-readable sentence or a local filename, to advance a workflow. Ordinary results share these fields when available:
* `success`, `status`: `processing`, `completed`, `failed`, `error` or `unknown`.
* `requestId`, `generationId`, actual `mediaType`, optional original `requestedMediaType`, `modelId`, `deduped`.
* `urls` (always an array), plus `imageUrl` or `videoUrl` when returned.
* `creditsUsed`, `creditsStatus`; a refund is confirmed only by the returned ledger state.
* `pollAfterSeconds`, `observationEnded`; `nextAction` can carry `type`, `tool`, `arguments`, `afterSeconds`, `message`.
* `error`: `code`, `message`, `retryable`, and optional `httpStatus`, `retryAfterSeconds`, `required`, `available`.
* Local npm may also return `provider`, `savedPath`, `downloadWarning` (generation succeeded but local saving failed) and `receiptWarning` (private durable storage unavailable; keep request IDs and exact inputs in the caller).
A submitted job is not a completed artifact. `unknown` is an observation/recovery state, not permission to generate a replacement. Ordinary tasks use `check_generation`; the five dedicated Skills use their own `check_skill`, original Skill/request ID and exact `retryParameters`. Recover OAuth tasks through the same owning account with the required permissions. For existing legacy local integrations, Skill receipts require the original API key; ordinary request lookup supports another active key of the same owning account. Do not transfer Web-session free-credit jobs into API-token billing.
## Minimal call
With an authenticated connected MCP `client`, this complete step has no external plan variables. Persist `input` before calling; the UUID below is for this one example only. Use a new UUID for a different intended image, and reuse the saved one when resuming.
```js theme={null}
const input = {
requestId: '6aa98390-dc79-49f2-8996-20c915968bd8',
prompt: 'A ceramic teapot on a pale wooden table, soft window light',
wait: false,
};
const submitted = await client.callTool({ name: 'generate_image', arguments: input });
const result = submitted.structuredContent;
if (result.nextAction?.type === 'check_generation') {
const checked = await client.callTool({
name: 'check_generation', arguments: result.nextAction.arguments,
});
// Persist checked.structuredContent; follow nextAction before advancing.
}
```
## Example: N scripts → N frames → N videos
The upstream workflow first resolves the scripts, image/video settings, requested output count, maximum approved budget and any replacement policy. It can use `list_models` for current choices. No fixed model, price, duration or quality is assumed here.
1. Create and durably save one frame UUID and one video UUID per script, alongside the exact inputs. Do this once when creating the workflow, not on every run or retry.
2. Before a new submission, reserve its expected charge against the remaining approved budget, including all other in-flight reservations. Use the selected live model/tier/duration and reference pricing — a video estimate must be built from the **sum** of every reference video's duration plus the output duration, because that sum is what the billed seconds come from; reference audio is free and adds nothing to the reservation. Reconcile actual `creditsUsed` and confirmed refunds as results arrive. An unknown charge stays reserved until resolved.
3. Submit independent frame steps with bounded concurrency. Persist each response immediately. After a frame completes, preserve its selected URL in that script's video input before submitting the video step. This maintains a stable dependency even if the frame model returns multiple candidates.
4. Poll/recover accepted steps by their existing handles. A host restart reloads the saved plan and checks pending steps; it does not recreate UUIDs or re-upload unchanged references.
5. Return completed clips and any failed/unresolved steps to the caller. The caller decides intermediate previews, visual inspection, downloads, final presentation and whether an authorized replacement is appropriate.
The following JavaScript shows MCP calls from an existing caller. `script`, settings and persisted IDs come from that caller's durable plan; `client` is its connected MCP client. These are call examples, not a scheduler or a new API SDK.
```js theme={null}
// Load this step from the saved plan. Do not allocate a fresh ID on resume.
const frame = await client.callTool({
name: 'generate_image',
arguments: {
...plan.frameSettings,
prompt: script.framePrompt,
requestId: script.frameRequestId,
wait: false,
download: false, // Local npm only; omit this field for remote MCP.
},
});
// Persist frame.structuredContent before advancing the workflow.
const frameStatus = await client.callTool({
name: 'check_generation',
arguments: { requestId: script.frameRequestId, requestedMediaType: 'image' },
});
// While processing, wait for the returned polling hint and check again.
// Advance only on completed status with the expected media type and an actual URL.
// Follow check_backend/review_media_type actions before advancing; do not automatically resubmit.
```
```js theme={null}
// selectedFrameUrl is a completed URL saved in this video's exact input.
const video = await client.callTool({
name: 'generate_video',
arguments: {
...plan.videoSettings, // Includes the caller-selected live model.
prompt: script.videoPrompt,
firstFrame: script.selectedFrameUrl,
// Reference media are arrays. Local npm also accepts local file paths here;
// remote MCP takes images.meigen.ai URLs ONLY — any other host is a pre-charge
// 400. Omit a key entirely when the plan has no items for it: these fields are
// part of the requestId fingerprint.
referenceVideos: script.referenceVideoUrls, // billed on the SUM of their durations
referenceAudios: script.referenceAudioUrls, // free — never billed
requestId: script.videoRequestId,
wait: false,
download: false, // Local npm only; omit for remote MCP.
},
});
// Persist video.structuredContent; recover with the same videoRequestId.
```
Local npm has **four shared API submission slots**. Polling and downloading do not occupy these slots; this does not cap the number of accepted jobs still running remotely. The caller should bound both submissions and outstanding paid work. Respect actual backend rate limits and `Retry-After`; there is no universal ten-image workflow cap or blanket ban on parallel video jobs.
The budget is a caller-managed limit, not an atomic server-enforced batch cap. Estimates can change; stop for a newly required price/resize decision outside existing authorization. Independent steps can partially succeed, and a failure does not roll back completed frames or clips.
Local `wait: true` retries transient status-query errors within bounds: stop after three consecutive errors and reset the count on a valid status. Honor a larger `Retry-After`; queries and backoff share the total observation budget. Cancellation and terminal errors stop immediately. This retries queries only, never generation POSTs, and does not prove cancellation, failure or refund.
## Resume without creating duplicate jobs
| Situation | Action |
| - | - |
| `processing` | Keep the handle; follow `pollAfterSeconds`/`nextAction`. Do not submit another job. |
| Transport timeout, 5xx or uncertain submit result | Query `check_generation` with the persisted `requestId`. Keep exact inputs and source URLs. If recovery calls for resubmission, reuse that same ID. |
| JSON request\_not\_found + HTTP 404 | Verify account, ID and saved inputs. An interrupted first submission can be retried with the same ID; do not allocate a replacement ID. |
| endpoint\_unavailable / check\_backend | HTML or unknown JSON 404 does not establish that a request was never submitted. Keep IDs/inputs, verify the API URL and restore the compatible backend. Do not automatically resubmit. Known generationId status can still use the existing status endpoint. |
| review\_media\_type | The result is complete: preserve success, actual media and URLs. Compare requestedMediaType and review the model before advancing; do not automatically generate a replacement. |
| Ordinary-generation 402 before dispatch | Top up the owning account, then resubmit the same ID and identical inputs within authorized scope. Polling does not restart it. Skill payment rejection follows the separate Skill rules. |
| 429 or an in-progress reservation | Honor returned retry timing/`Retry-After`; preserve the attempt and keep its budget reservation. |
| `idempotency_conflict` / `request_id_collision` | Stop and inspect the original attempt. Do not bypass the conflict with an automatic new ID. New intended inputs require a separately authorized attempt. |
| `failed` | Preserve successful sibling steps and reported refund state. A replacement is a new paid attempt and must be within the caller's explicit replacement scope. |
| Deleted original job / HTTP 410 | Preserve the attempt ID and report the unavailable original. Never reuse that ID to create a replacement. |
| `observationEnded` | Stop aggressive polling and report the unresolved state to the caller. The job is not proven failed or cancelled. |
For ordinary tasks, remote `attemptId` remains a legacy compatibility handle. Prefer UUID `requestId` in new integrations. Older receipts may lack the normalized input data needed to verify all past parameter mismatches; do not assume the new protection can retroactively validate every old task.
**Legacy key rotation:** when an old `attemptId` submission lost its response, recover it using the original key before revoking that key. The old handle incorporates the key; a new key cannot reconstruct an unrecorded old identity. Keep a returned `generationId` when available, and do not automatically resubmit an unresolved legacy attempt with a new key.
# MCP Server Overview
Source: https://docs.meigen.ai/en/mcp/overview
Connect AI assistants to image and video generation, gallery search, and local workflows.
**MeiGen** helps you discover inspiration and create images and videos with the latest AI models in the AI tools you use. Install the ChatGPT plugin, connect through remote MCP, or use the open-source local server.
## ChatGPT
1. Open [MeiGen in the official ChatGPT store](https://chatgpt.com/plugins/plugin_asdk_app_6ab66d24f56481919361b6c33f7c1928) and select **Install**.
2. Sign in to your MeiGen account and complete the connection. No API key or Node.js is needed.
3. Select or mention **MeiGen** in a conversation, then ask it to find inspiration or create an image or video.
Try: *“Use MeiGen to find minimalist product photography inspiration. Show me reference images and their prompts.”*
Search does not spend generation credits. Generation uses your purchased MeiGen credits; daily free credits do not apply. Review the model, image count and total price before generating.
The ChatGPT plugin and remote OAuth connection use MeiGen Cloud. Local npm remains available for existing MeiGen API-key integrations and explicitly selected external-provider BYOK. Version 3.0.0 removes ComfyUI and the bundled offline prompt library; see the [migration notes](/en/mcp/comfyui).
View source code, report issues, and contribute.
## Compose inside another workflow
Keep the upstream script, prompt, model/provider, count and approved budget. Creative helpers are optional. Use persistent UUID `requestId`, `wait: false`, structured results and `check_generation` to submit frames/videos and resume them without re-approving every step. The caller owns bounded scheduling, previews and downloads. See [the complete workflow contract and examples](/en/mcp/composable-workflows).
## What is MCP?
Model Context Protocol (MCP) is an open standard that allows AI assistants to use external tools. When you install MeiGen as an MCP server, your AI assistant gains the ability to generate images and videos, run semantic search across the MeiGen community prompt gallery, and enhance prompts — all through natural language. Standard remote MCP and local npm support anonymous public search; the official ChatGPT plugin requires account authorization for search. Prompt enhancement is local. In 3.0.0, inspiration search uses the online gallery only, without an offline fallback; unavailable services return an error.
***
## Five dedicated image workflows
Ask for a cutout, product detail images, a marketing poster, a new background or image enhancement. The agent should inspect `list_skills`, prepare the actual materials, submit the matching tool and use `check_skill` for results. It generates request UUIDs itself. A specified count/quality is already your instruction; only unresolved scope or an Upscale warning needs a decision.
| Workflow | Required material | Optional material | Output |
| - | - | - | - |
| Remove Background | One source image | None | One transparent PNG |
| Product Detail Images | One product photo and selected modules/count | Product name, verified selling points, logo, model image, two extra angles | 1–6 paid images |
| Marketing Poster | Brand, event or topic | Copy, logo, three product images, style reference | One paid poster |
| AI Backgrounds | One product photo | Mode; custom mode requires a background description | One paid image |
| Upscale | One original still JPEG/PNG/WebP | Crisp/creative mode | One paid enhanced image |
Skills use purchased credits only, with no free attempts or daily credits. BYOK do not supply these workflows. See the [complete Skills API and material guide](/en/api-reference/skills/overview).
For posters, put visible copy in `content`; use `extraNotes` or `customStyle` for design directions. `autoCopy: false` preserves supplied wording, with selected-language translation still possible. See [poster field roles and a complete MCP call](/en/api-reference/skills/marketing-poster#mcp-call-example).
## Choose a connection
ChatGPT users should install the [official plugin](#chatgpt). Other new users should [connect with remote OAuth](/en/mcp/remote) at `https://www.meigen.ai/api/mcp`, then sign in to MeiGen and approve access in the host. No API key or Node.js is needed. Use a compatible host if OAuth is unavailable.
[Local npm](/en/mcp/setup) retains existing API-key compatibility for generation, public search and Skills, BYOK, local file preparation, prompt enhancement and local preferences. It has no OAuth login or private-library tools. API keys are not offered as another new-user authentication method. OpenClaw users can install the [ClawHub plugin and connect with OAuth](/en/mcp/remote#openclaw). Existing local Claude/OpenClaw connections remain a separate compatibility path; avoid duplicate tools when switching.
The 3.0.0 local image providers are MeiGen (existing legacy key) and OpenAI-compatible APIs, in that priority order. ComfyUI is removed. Skills and video remain MeiGen Cloud features; use `list_models` and `list_skills` for current models and prices.
## Tools
These **14 shared tools** form the common set. Local npm 3.0.0 has 16 tools, including two local helpers. Standard remote MCP has 19, including the five private-library tools below. The currently published official ChatGPT plugin has 14 tools; its update to 19 tools and six search results per batch still requires store approval. A backend or npm release does not make those new ChatGPT features available.
| Tool | Purpose | MeiGen account authorization |
| - | - | - |
| `generate_image` | General image generation; local can use configured backends | For MeiGen Cloud |
| `generate_video` | MeiGen Cloud video generation | Yes |
| `check_generation` | Status/recovery by generationId or requestId | Request-ID lookup requires the owning account |
| `list_models` | Available models and capabilities | No |
| `search_gallery` | Search public prompts and image previews; batch limits vary below | Standard MCP/local: optional; official ChatGPT plugin: required |
| `get_inspiration` | Read a public gallery entry | No |
| `list_skills` | Five workflows, materials, live prices and input schemas | No |
| `upload_skill_image` | Prepare real image URLs or attachment bytes | Yes |
| `remove_background` | One transparent cutout | Yes |
| `generate_product_detail_images` | 1–6 paid product modules | Yes |
| `generate_marketing_poster` | One promotional poster | Yes |
| `generate_ai_background` | One white, smart or custom background | Yes |
| `upscale_image` | Enhance one original still image | Yes |
| `check_skill` | Private Skill receipt, module status and recovery | Yes, owning account; legacy local calls require the original key |
Local additionally provides `enhance_prompt` and `manage_preferences` without a MeiGen account. Version 3.0.0 removes `comfyui_workflow` and offline prompt fallback.
| Public gallery search | Default / maximum results per batch | Account access |
| - | - | - |
| Standard remote MCP | 3 / 3 | Optional OAuth; anonymous searches are IP-limited |
| Local npm 3.0.0 | 3 / 3 | Anonymous, or an existing legacy key |
| Official ChatGPT plugin | Published version: 3 / 3; update awaiting store approval: 6 / 6 | OAuth with search permission (`meigen:search`) |
Authorized searches use the account's [daily search allowance](/en/features/gallery#search), not generation credits. Starting a search uses that allowance; continuation pages do not count again. Standard remote MCP and local 3.0.0 support pagination; the official ChatGPT plugin's next-batch cards are part of its update awaiting store approval. To see another batch, preserve the returned query and snapshot ID and pass `nextOffset` as `offset`; stop when `hasMore` is false. A different direction starts a new query. Keep original generation request IDs during recovery; a timeout is not permission for a new paid task.
## Private library through remote OAuth
Standard remote MCP provides `search_favorites`, `list_boards`, `search_history`, `get_library_item` and `save_favorite`. Connect with OAuth and approve the separate library read/write permissions when requested; existing connections do not gain them automatically. Local npm and API keys cannot access these tools. Their addition to the official ChatGPT plugin is still awaiting store approval.
Lists contain prompt excerpts of at most 500 Unicode code points. Use `get_library_item` for a selected user prompt in pages of 8000 code points by default, up to 16000; internal Skill prompts are never returned. Saving requires an explicit request or prior opt-in, preserves existing notes on repeat calls and only supports owned private board destinations. Favorites are context for preferences, not a replacement for current instructions.
Video capabilities differ by model — quality tiers, available durations and resolutions, audio, reference-video continuation, and whether a first frame is required. Some models are image-to-video only. Call `list_models` for the current lineup, or see the [model comparison](/en/features/models).
Seedance 2.5 uses model ID `seedance-2-5`, supports 4–30 second 480p/720p/1080p output and reference-video continuation, and has no `tier` option.
`generate_video` requires an explicit `model` — there's no platform default. Reference media are arrays: `referenceVideos` (mp4 / mov) and `referenceAudios` (wav / mp3, ≤15MB per clip). The **local npm server accepts local file paths** here and uploads them for you; the remote server needs URLs that already point at `images.meigen.ai` — a previous generation's `videoUrl`, or a file from [`POST /api/upload/reference-video`](/en/api-reference/endpoint/generate#upload-reference-videos-and-audio). An arbitrary public URL is rejected before charging. The singular `referenceVideo` is still accepted as a one-element alias, and `referenceVideoDuration` is a deprecated, validated compatibility hint that never sets the billed duration — omit it, the server probes every clip itself.
Per-model caps come from `list_models` (`capabilities.video.referenceVideo` and `capabilities.video.referenceAudio`): Seedance 2.5 takes up to 10 videos and 10 audio clips, 2–30s each and 30s in total per kind; Seedance 2.0 takes up to 3 and 3, 2–15s each and 15s in total. **Seedance 2.0 cannot run on audio alone** — its reference audio needs at least one reference image or reference video alongside it, while Seedance 2.5 accepts audio-only requests.
Billing uses the **sum** of the reference video durations plus your output duration, never below the minimum-billable floor. Reference audio is free: it never enters that sum, and a request carrying audio but no reference video is priced at the model's direct rate.
***
### GPT Image 2.5
Call `list_models` first to check availability. **Local npm 3.0.0 supports** `model: "gpt-image-2.5"` or its `modelId` alias, `quality` (`low`, `medium`, `high`, `xhigh`, `max`) and `modelVariant: "sunburst"` (default) or `"flare"`. If both `model` and `modelId` are supplied, they must match. The [remote MCP server](/en/mcp/remote) and [REST API](/en/api-reference/endpoint/generate) use `modelId` with `modelVariant`. GPT Image 2 remains a separate model with its original pricing.
***
## Next steps
* [Remote OAuth setup](/en/mcp/remote) for Claude, Cursor and compatible clients.
* [Legacy local setup and BYOK](/en/mcp/setup) for existing integrations.
* [3.0.0 migration notes](/en/mcp/comfyui) for the ComfyUI/offline-library removal.
# Remote MCP Server
Source: https://docs.meigen.ai/en/mcp/remote
Connect MeiGen through remote OAuth and stateless Streamable HTTP.
Using ChatGPT? Install [MeiGen from the official ChatGPT store](/en/mcp/overview#chatgpt). The guide below covers manual MCP connections.
Connect a host that supports **Streamable HTTP** to:
```text theme={null}
https://www.meigen.ai/api/mcp
```
No Node.js or npm process is needed for remote access. The server is stateless at the connection level; paid jobs and recovery receipts remain on the backend. Server changes require a backend deployment, and your host may need to reconnect or refresh its cached tool list. Remote does not mean offline or deployment-free.
## Compose inside another workflow
Keep the upstream script, prompt, model/provider, count and approved budget. Creative helpers are optional. Use persistent UUID `requestId`, `wait: false`, structured results and `check_generation` to submit frames/videos and resume them without re-approving every step. The caller owns bounded scheduling, previews and downloads. See [the complete workflow contract and examples](/en/mcp/composable-workflows).
## Account login
For clients supporting Streamable HTTP and OAuth, add the server URL above, choose **Connect / Authenticate**, then sign in to MeiGen in your browser and approve the requested permissions. No API key or shared client secret is needed. Clients identify themselves through public client metadata (CIMD) or dynamic registration (DCR); they do not need a brand-specific MeiGen allowlist. This flow supports public-client authentication (`none`) with S256 PKCE.
Check the app name, client identifier and return address on the consent page. Self-registered names are not verified by MeiGen. Authorization lasts up to 30 days and can be revoked in [Connected apps](https://www.meigen.ai/oauth/connections). Paid calls use purchased credits only, never daily free credits or Web free attempts.
General OAuth requires server rollout and support in your client version. If the server does not advertise automatic registration or the host cannot log in, use a compatible host or the official ChatGPT plugin; do not create an API key as a fallback. Supporting MCP alone does not guarantee support for remote HTTP or OAuth.
### Codex
```bash theme={null}
codex mcp add meigen --url https://www.meigen.ai/api/mcp
codex mcp login meigen
```
Use the same URL in Codex desktop/IDE MCP settings and complete the login flow. Reuse an existing entry; remove a fixed Authorization header or `bearer_token_env_var` when switching that entry to OAuth. Keep other servers. See the [official Codex guide](https://developers.openai.com/codex/mcp).
### Claude
```bash theme={null}
claude mcp add --transport http meigen https://www.meigen.ai/api/mcp
claude mcp login meigen
```
You can also authenticate through `/mcp`. See the [official Claude guide](https://code.claude.com/docs/en/mcp). No preconfigured MeiGen client ID is required for automatic registration.
### OpenClaw
Install [MeiGen from ClawHub](https://clawhub.ai/plugins/meigen-ai-design) using a current OpenClaw release with native HTTP MCP and OAuth (validated with 2026.9.9):
```bash theme={null}
openclaw plugins install clawhub:meigen-ai-design
```
Then save a **new** connection and sign in:
```bash theme={null}
openclaw mcp add meigen --url https://www.meigen.ai/api/mcp --transport streamable-http --auth oauth --timeout 240
openclaw mcp login meigen
```
Complete the browser consent yourself. OpenClaw login needs a saved `mcp.servers.meigen` entry even when the plugin supplies the server; the saved entry overrides the bundle default without duplicating tools. If `meigen` exists, `add` refuses to overwrite it. Reuse a matching OAuth connection; do not blindly run `mcp set`.
Run `openclaw mcp doctor meigen --probe`, start a new conversation, and ask MeiGen to list Skills and current prices. Installation alone is not proof of access. The plugin includes guidance for search pagination, using favorites as preference context, and saving only on explicit request or prior opt-in. Private library tools require the additional library OAuth permissions.
ClawHub plugin 4.0 changes the default from local npm/stdio to remote OAuth. Back up your existing configuration before updating. Saved local, wrapper or BYOK entries are not migrated and still override the default. Choose whether to retain local capabilities or deliberately replace the active entry with OAuth; preserve old credentials privately and keep one active MeiGen connection. Remote MCP cannot directly read local files and does not offer local preferences, prompt enhancement or BYOK. [Legacy compatibility](/en/mcp/setup).
For a direct connection without creative guides, skip the plugin install and use the same add/login commands. The standalone [creative-toolkit Skill](https://clawhub.ai/jau123/skills/creative-toolkit) contains guidance only and is not needed alongside the plugin. No mcporter prerequisite is needed for remote OpenClaw. See [OpenClaw's transport documentation](https://docs.openclaw.ai/cli/mcp/transports).
### Cursor and other HTTP clients
Add the URL using your client's Streamable HTTP connection form, then choose Connect / Authenticate. For clients using `mcpServers` JSON, the minimal entry is:
```json theme={null}
{
"mcpServers": {
"meigen": { "url": "https://www.meigen.ai/api/mcp" }
}
}
```
Field names vary; for example, Claude JSON also requires `"type": "http"`. New users need an OAuth-capable host; [local npm](/en/mcp/setup) is retained for existing legacy/BYOK integrations.
### ChatGPT custom connections
If your account/workspace offers Developer mode and custom MCP connections, add the URL above with **OAuth** and use automatic registration when offered. Complete the MeiGen account consent flow. Follow [OpenAI's current setup](https://developers.openai.com/api/docs/guides/developer-mode#how-to-use). Do not put a MeiGen API key in the OAuth client-secret field.
This manual connection is separate from the [official ChatGPT plugin](/en/mcp/overview#chatgpt), which provides result cards in your conversation. Availability depends on your plan/workspace and server rollout. With **No Authentication**, only public tools work; uploads, generation, requestId recovery and private Skill results require authorization. The manual CLI and plugin use different configuration flows; a chat instruction cannot install npm inside ChatGPT web.
### Moving an existing local connection to OAuth
Use OAuth for new MeiGen connections. Existing local stdio integrations can retain their [legacy key configuration](/en/mcp/setup) until migration; external-provider BYOK is a separate local option. When switching to remote OAuth, remove any fixed Authorization header and complete account sign-in in the host. Do not create another MeiGen key or send credentials in chat.
Existing remote connections with a fixed Authorization header retain legacy compatibility for generation, public search and Skills. API keys cannot access favorites, boards, history or private item details. Remove the fixed header before switching to OAuth. This compatibility is not a new-connection option.
## Tools
Standard remote MCP provides **19 tools**: the 14 shared tools in this table and five private-library tools below. This section describes the standard remote endpoint, not the official ChatGPT plugin schema. The official plugin's 19-tool update is still awaiting store approval.
| Tool | Purpose | Account authorization |
| - | - | - |
| `generate_image` | MeiGen Cloud image generation | Yes |
| `generate_video` | MeiGen Cloud video generation | Yes |
| `check_generation` | Status/recovery by generationId or requestId | Request-ID lookup requires the owning account |
| `list_models` | Available models and capabilities | No |
| `search_gallery` | Search public prompts and image previews; returns at most 3 entries | No — but with authorization the search counts against that account's quota |
| `get_inspiration` | Read a public gallery entry | No |
| `list_skills` | Five workflows, materials, live prices and input schemas | No |
| `upload_skill_image` | Prepare real image URLs or attachment bytes | Yes |
| `remove_background` | One transparent cutout | Yes |
| `generate_product_detail_images` | 1–6 paid product modules | Yes |
| `generate_marketing_poster` | One promotional poster | Yes |
| `generate_ai_background` | One white, smart or custom background | Yes |
| `upscale_image` | Enhance one original still image | Yes |
| `check_skill` | Private Skill receipt, module status and recovery | Yes, owning account |
## Private library
`search_favorites`, `list_boards`, `search_history`, `get_library_item` and `save_favorite` require OAuth. Approve `meigen:library:read` to read your library and `meigen:library:write` to save favorites; existing connections need consent for these additional permissions. Local npm and all API keys are excluded. These standard remote tools do not imply availability in the official ChatGPT plugin, whose update is still awaiting store approval.
Lists return `promptExcerpt` (at most 500 Unicode code points), `promptLength` and `promptTruncated`. `get_library_item` takes the original `contentType` / `sourceId`, `promptOffset` (default 0) and `promptLimit` (default 8000, maximum 16000). All offsets and lengths count Unicode code points. `prompt.length` is the total safe prompt length; `nextOffset=null` marks the final page. Detailed data is returned once in `structuredContent`. Saving requires explicit intent, preserves existing notes and never publishes content; `favorites_limit_reached` means the account's favorite entitlement is full, not a generation-credit shortage.
## First successful check
Reconnect, then ask: **“List MeiGen's available Skills and current prices.”** Verify that an actual tool call succeeds; registration alone is not connection proof. It does not generate or spend credits. Then supply the required material and request one of the [five workflows](/en/api-reference/skills/overview). Skills return after submission and use `check_skill`; generic generation recovery uses `check_generation`.
Standard remote `search_gallery` defaults to and returns **at most 3 entries per batch**. Its schema accepts integer `limit` values from 1 to 30 for compatibility and clamps them to 3. Search can run anonymously with per-IP limits. With OAuth, starting a search uses the account's [daily search allowance](/en/features/gallery#search), not purchased credits; continuation pages do not count again.
For another batch, preserve `query`, `limit` and `snapshotId`, and use `nextOffset` as `offset`; stop when `hasMore` is false. Snapshot expiry requires an explicit new search. Change the query only for a new direction. The published [official ChatGPT plugin](/en/mcp/overview#chatgpt) returns at most 3 entries. Its update awaiting store approval defaults to and allows at most 6, with OAuth search permission required. Its limit and authorization rules must not be applied to this endpoint.
Remote tools cannot read a local filesystem path. Use a public image URL or `upload_skill_image` with actual accessible bytes. For Upscale, pass the original URL directly or upload with `purpose: "upscale"`; do not downsize it as an ordinary reference first.
### GPT Image 2.5 options
When `list_models` includes `gpt-image-2.5`, `generate_image` accepts all five quality levels and `modelVariant: "sunburst"` (quality priority, default) or `"flare"` (speed priority). The two variants have the same credit price. Example tool arguments:
```json theme={null}
{
"prompt": "A studio product photo of a ceramic coffee mug, soft window light",
"modelId": "gpt-image-2.5",
"resolution": "2K",
"quality": "low",
"modelVariant": "flare",
"requestId": "550e8400-e29b-41d4-a716-446655440000",
"wait": false
}
```
Check the current model price before submitting this 2K Standard request. Add public reference-image URLs with `referenceImages` for editing or visual guidance. The UUID shown is illustrative: allocate and persist your own `requestId` once per logical attempt, then reuse it only with the exact inputs for recovery. `wait: false` returns after submission. Use `check_generation` with requestId or generationId after an interruption. Legacy `attemptId` remains accepted; new integrations should use requestId. See [model pricing](/en/features/models) for the full matrix.
### Reference video and audio
`generate_video` takes reference media as arrays: `referenceVideos` (mp4 / mov) and `referenceAudios` (wav / mp3). **Remote tools cannot read a local filesystem path**, and an arbitrary public URL is not accepted either. Every entry must be an `https://images.meigen.ai/...` URL: a previous MeiGen generation's `videoUrl`, or a file you uploaded through [`POST /api/upload/reference-video`](/en/api-reference/endpoint/generate#upload-reference-videos-and-audio). Any other host is rejected before credits are deducted (`invalid_reference_video` / `invalid_reference_audio`). Only the local npm server can upload local files for you.
```json theme={null}
{
"prompt": "Continue the dive from [video1] with the camera locked off, scored to the rhythm of [audio1]",
"model": "seedance-2-5",
"aspectRatio": "adaptive",
"resolution": "480p",
"duration": 5,
"referenceVideos": [
"https://images.meigen.ai/generations/eagle-dive.mp4",
"https://images.meigen.ai/ref-videos/2026-09-17/river-pan.mp4"
],
"referenceAudios": ["https://images.meigen.ai/ref-videos/2026-09-17/theme.mp3"],
"requestId": "3f1c2b60-9d2a-4f1e-9a1f-0d3b7c5a8e42",
"wait": false
}
```
`[video1]` and `[audio1]` are rewritten to the vendor's own `Video 1` / `Audio 1` wording before submission; writing `Video 1` directly works too. Numbering is 1-based per kind, in array order. Read the per-model counts and totals from `list_models`. Billing uses the **sum** of the reference video durations plus `duration`; the audio clip adds nothing. Omit an empty array entirely — reference media are part of the `requestId` input fingerprint.
## Remote and local
| | Remote | Local npm |
| - | - | - |
| Tools | 19, including 5 OAuth-only library tools | 3.0.0: 16 |
| Installation | HTTP connection; no Node.js | npm process, Node.js 22+ recommended |
| Updates | Backend deployment, then refresh cached tools | Upgrade the installed/pinned package and restart |
| Providers | MeiGen Cloud | 3.0.0: existing MeiGen key or OpenAI-compatible; Skills: MeiGen only |
| Local files | No direct access | Host-readable files can upload automatically |
| Additional tools | — | Prompt enhancement and local preferences |
| Results | Image URLs/resource links | General generation may save files; Skills return URLs/resource links |
| Claude plugin commands/agents/hooks | Not installed by the URL | Separate Claude plugin distribution |
Existing local integrations do not need to switch immediately; their local-only capabilities do not migrate. New MeiGen connections use remote OAuth. See [legacy local setup and upgrade notes](/en/mcp/setup).
`upload_skill_image` requires a positive purchased-credit balance and does not charge for generation. For Upscale attachments set `purpose: "upscale"`. Every `upscale_image` MCP call, including the first, requires `confirmedCredits` from the current `list_skills` quote within the accepted user or upstream workflow budget; reuse explicit acceptance.
# Connect MeiGen MCP
Source: https://docs.meigen.ai/en/mcp/setup
Sign in through remote OAuth, or maintain an existing legacy local integration.
## New connection: use account sign-in
For ChatGPT, [install MeiGen from the official ChatGPT store](/en/mcp/overview#chatgpt) and sign in. Other users should add the Streamable HTTP server `https://www.meigen.ai/api/mcp` in an OAuth-capable MCP host, then choose **Connect / Authenticate** and approve the MeiGen account connection. No API key or Node.js is needed. See [remote setup](/en/mcp/remote) for Claude, Codex, Cursor and other compatible hosts.
If the host cannot authenticate with OAuth, use a compatible client or the official ChatGPT plugin. API keys are only retained for existing legacy integrations, not offered as an alternative for new users. Do not paste credentials into chat.
Private favorites, boards, history, prompt details and saving are available through standard remote MCP with OAuth. Local npm and API keys cannot access them. These tools are still pending approval in the official ChatGPT store update; installing the currently published plugin does not enable them.
## Ask an assistant to connect
```text theme={null}
Connect MeiGen MCP at https://www.meigen.ai/api/mcp with remote OAuth.
Preserve other servers and reuse an existing MeiGen entry. When switching from a
fixed API key, remove its Authorization header and let me sign in through the host.
Do not create a new API key or ask for credentials in chat. Keep a working legacy
or BYOK setup only when needed, and do not add duplicate MeiGen tools.
After reconnecting, call list_skills and report the result. Do not upload,
generate or spend credits just to verify setup. Explain any unverified step.
```
## Existing local integrations and BYOK
The following configuration is for maintaining an existing stdio/API-key integration or an explicitly selected OpenAI-compatible image provider. Local npm has no OAuth login and does not expose private account-library tools. It can prepare readable local files, save ordinary generation results, enhance prompts and store machine-local preferences.
npm **3.0.0 is the current major release**. Before upgrading, read the [3.0 migration notes](/en/mcp/comfyui): ComfyUI and the bundled prompt library are removed, with no offline search fallback. The examples below pin this version explicitly.
Node.js 22+ is recommended. Preserve an existing key privately as `MEIGEN_API_TOKEN`; do not create a new MeiGen key for these examples. The snippets below show relevant fields only; do not replace an existing entry or configuration file with them.
```json theme={null}
{
"mcpServers": {
"meigen": {
"command": "npx",
"args": ["-y", "meigen@3.0.0"]
}
}
}
```
Set existing credentials in the MCP process environment or host private settings, not in shared JSON. Private local configuration at `~/.config/meigen/config.json` remains compatible. Changes require restarting/reconnecting the host.
### Existing editor connections
For an existing Cursor, VS Code, Windsurf, Roo or Claude connection, edit its MeiGen entry manually. Change only the package argument in `args` to `meigen@3.0.0`; preserve the command, other arguments, `env`, environment forwarding, timeouts, host-specific settings and all other MCP entries. Keep any existing private credentials in place.
Do not run the published 2.0.2 initializer against existing configuration: it can replace the MeiGen entry rather than preserve its settings. If the command uses an unfamiliar wrapper or has no identifiable MeiGen package argument, leave it unchanged and inspect that host's configuration before editing. Keep an explicit version pin instead of an unversioned package or `@latest` to avoid an unintended future major upgrade. New connections use [remote OAuth](/en/mcp/remote).
### Existing Codex stdio configuration
New users should use [remote OAuth](/en/mcp/remote). Existing local integrations can keep this entry instead of a duplicate remote entry:
```toml theme={null}
[mcp_servers.meigen]
command = "npx"
args = ["-y", "meigen@3.0.0"]
env_vars = ["MEIGEN_API_TOKEN"]
startup_timeout_sec = 90
tool_timeout_sec = 240
```
The host must inherit the existing variable; a project `.env.local` is not automatically loaded. Omit `env_vars` for anonymous public discovery if no variable exists. Longer video jobs may need more time; recover interrupted tasks with the original generationId or persisted requestId instead of starting a new paid attempt.
### Existing Claude and OpenClaw plugins
The Claude marketplace plugin and OpenClaw bundle 3.x use local stdio. The [OpenClaw 4.0 ClawHub plugin](/en/mcp/remote#openclaw) defaults to remote OAuth; saved local/BYOK overrides are not automatically migrated. Back up and inspect the existing connection before choosing to switch. Keep one active MeiGen server and preserve legacy credentials privately. Distribution versions and instructions update separately from npm. The standalone ClawHub Skill is guidance only, and is already included in the plugin.
### Hermes Agent (NousResearch)
New MeiGen connections should use [remote OAuth](/en/mcp/remote). For an existing local Hermes integration that waits for long video jobs, merge these timeouts into its `~/.hermes/config.yaml` entry, keeping its existing private environment settings:
```yaml theme={null}
mcp_servers:
meigen:
command: "npx"
args: ["-y", "meigen@3.0.0"]
timeout: 2700
connect_timeout: 120
```
`timeout: 2700` allows up to 45 minutes for a tool call; `connect_timeout: 120` allows time for the first npm download. They are suggested settings for long waits, not a generation deadline or completion guarantee. See [Hermes MCP configuration](https://hermes-agent.nousresearch.com/docs/reference/mcp-config-reference/).
A host timeout does not cancel or refund an accepted task. Prefer `wait: false` with a persisted UUID `requestId` and `download: false` for composed jobs. Recover with `check_generation` using the original generationId or requestId; if resubmission is required, preserve that ID and exact inputs. See [workflow recovery](/en/mcp/composable-workflows).
### Legacy CLI
An existing CLI integration may continue using its privately configured `MEIGEN_API_TOKEN`:
```bash theme={null}
npx -y meigen@3.0.0 gen --prompt "a ceramic coffee mug in soft window light"
npx -y meigen@3.0.0 gen -p "product hero shot" --ref ~/Desktop/bottle.jpg
npx -y meigen@3.0.0 gen --help
```
These generation examples are paid actions, not connection tests. `--json` returns structured output; `--no-wait` submits without polling. Preserve returned task IDs and exact inputs for recovery.
### OpenAI-compatible ordinary images
For an explicitly selected BYOK provider, retain `OPENAI_API_KEY`, `OPENAI_BASE_URL` and `OPENAI_MODEL` in private local settings. Use that provider's supported models and billing. BYOK does not provide MeiGen videos, the five dedicated Skills or private library access. In 3.0.0, local provider priority is MeiGen (existing legacy key), then OpenAI-compatible; the removed ComfyUI provider is rejected rather than redirected to a paid provider.
## Output directories
Ordinary local generation and CLI calls can save results. Dedicated Skills return URLs/resources; download them explicitly if needed.
| Type | Default | Override | Linux fallback |
| - | - | - | - |
| Images | `~/Pictures/meigen/` | `MEIGEN_OUTPUT_DIR` | `XDG_PICTURES_DIR` |
| Videos | `~/Movies/meigen/` | `MEIGEN_VIDEO_OUTPUT_DIR` | `XDG_VIDEOS_DIR` |
## Verify and recover
After connecting, ask “List MeiGen's available Skills and current prices” and verify a successful `list_skills` call. This public check does not prove account authorization or paid balance. Do not generate merely to test a connection.
For missing authorization, reconnect through OAuth. For existing legacy integrations only, privately check the configured key. For insufficient credits, use the connected account's [Profile → Top Up](https://www.meigen.ai/profile); generation uses purchased credits, not daily free credits. Follow actual `list_models` / `list_skills` prices.
An interrupted ordinary task uses `check_generation`; a Skill uses `check_skill` with its original receipt and exact inputs. Follow returned actions for upload errors, resize consent, price changes and refunds. See the [workflow contract](/en/mcp/composable-workflows) and [Skills guide](/en/api-reference/skills/overview).
# Quick Start
Source: https://docs.meigen.ai/en/quickstart
Create your first image or video, explore prompts, and connect through the API or MCP.
Choose where to start — browse the gallery, generate your own, or integrate via API and MCP.
Browse curated AI artwork from the community. Search, filter, and use prompts as starting points.
Create images and videos with multiple AI models. Reference images, prompt enhancement, and advanced options.
Generate images and videos directly from Claude Code, Cursor, Codex, Windsurf, Hermes Agent, OpenClaw, and any MCP host.
Integrate MeiGen into your applications with our REST API. Token-based authentication.
***
## Browse the Gallery
The gallery features curated, community-sourced AI artwork, refreshed daily.
**Filter by category** — use the sidebar tags to narrow down what you see:
* **Ads & Product** — product photography, packaging, marketing visuals
* **Brand & Logo** — logos, brand identity, visual systems
* **Videos** — hand-picked AI videos from top creators
* **Illustration & 3D** — digital art, concept art, 3D renders, character design
* **Posters & Visuals** — posters, key visuals, graphic and layout design
* **Portraits** — people, portraits, and photographic styles
* **Storyboard & Characters** — storyboard sequences and reusable character sheets
* **Wallpaper** — phone and desktop wallpapers
**Interact with cards** — hover over any image to reveal actions:
* **Use Idea** — copies the original prompt into the generation editor, ready to customize and generate
* **Save** — saves the image to your **Favorites**, synced across devices
* **View on X** — opens the original post on X (Twitter)
**Search** — on desktop, press `Cmd+K` (Mac) or `Ctrl+K` (Windows) to open the search dialog; **sign-in is required**. On mobile, the search page is open to everyone, no sign-in needed. Type a query and press `Enter` to search the gallery — hybrid search matches both the wording and the visual content of community prompts, and you can also search by uploading an image. Free accounts have a daily search allowance whether or not you're signed in; paid accounts are unlimited.
Learn about image details, drag-to-reference, search, favorites, and more
***
## Generate Images
The fastest start: find a gallery image you like and click **Use Idea** to copy it into the editor.
**Edit variables** — some prompts contain blue `[placeholder]` tags like `[style]` or `[subject]`. Click any tag to replace it with your own text. These are editable template variables that make it easy to create variations.
**Add reference images** — upload your own images or drag any gallery card directly into the reference area. When using multiple references, type `@` in the prompt editor to mention specific images (e.g., "Use @image1 as the background and @image2 for the character style").
**Enhance your prompt** — use the **Enhance Prompt** button to automatically improve short or simple prompts. The AI adds visual details like composition, lighting, colors, and textures.
**Choose your model** — select from a range of image models (including GPT Image 2.5 when available) and video models, each with different strengths. Seedance 2.5 supports 4–30 second videos at 480p, 720p or 1080p with generated audio — the soundtrack the model creates for you. That is separate from **reference audio**, your own WAV or MP3 clips attached as input to steer the result on Seedance 2.5 and 2.0; reference audio never costs credits. Pick an aspect ratio, resolution, and duration; the exact credit cost appears on the generate button before you submit.
Learn about model selection, video generation, advanced options, and more
***
GPT Image 2.5 offers five quality levels and a choice of Sunburst (quality priority) or Flare (speed priority), at the same price. Check [List Models](/en/api-reference/endpoint/models) for availability and the current default; see [model pricing](/en/features/models) for credit costs.
## Free Credits
Every new account gets a welcome credit bonus, plus free daily credits that reset at 00:00 UTC. Daily credits cover the **Basic** models — currently **Flux 2 Klein** and **Agnes Image 2.5 Flash** for images; no video model is on the basic tier at the moment (Agnes Video 2.5 Flash has been temporarily unavailable since 2026-09-22). Premium models like GPT Image 2.5 and GPT Image 2, Nanobanana Pro, Seedream, Midjourney, Grok Imagine, Seedance, and Veo require welcome/purchased credits.
***
## Next Steps
Prompt editor, references, video extension, enhancement, describe image
Compare available models — features, pricing, and limitations
Install the MeiGen MCP plugin for Claude Code, Cursor, Codex, Windsurf, Hermes Agent, or OpenClaw
REST API documentation for programmatic access