Muse Image is Meta's image generation model, Muse Image 1.0 from Meta Superintelligence Labs. Meta describes it as reasoning over a prompt before it renders, with precise composition and text rendering. On APIMODELS it is one model id, muse-image (muse-image-1.0 also works), on the unified image endpoint, for both text-to-image and image-to-image: send a prompt alone to generate, or add 1 to 4 reference images to edit a picture, restyle it or combine things from several pictures into one. Either way a request returns one image of about 2.5 megapixels, at the same price. Masks and 4K are not supported and return a 400 instead of being silently ignored. Not every request succeeds; you are charged only when an image is delivered: $0.02 per image.
Everything Muse Image accepts and everything it does not, in one table. Check it before you build on the model: text-to-image, or image-to-image with 1 to 4 reference images; one image per request, about 2.5MP, no 4K, no masks.
| Item | Supported | Not supported |
|---|---|---|
| Input | A text prompt of up to 4,000 characters, alone or with 1 to 4 reference images for image-to-image (editing, restyling, combining pictures); the first image is the main one | Masks (inpainting) |
| Reference images | 1 to 4, PNG, JPEG or WebP; up to 10 MB each and 24 MB in total; a public URL or a base64 data URI | More than 4 (a 400); other image formats |
| Images per request | 1 (n must be 1) | n above 1; for a batch, send parallel requests |
| Resolution | About 2.5MP at the native size for each ratio: 1:1 1600×1600, 3:2 1920×1280, 16:9 2048×1152, 9:16 1152×2048, 21:9 2352×1008; a smaller size such as 1024x1024 still comes back at the native size | 4K, 2048x2048 or any size above about 2.6MP (a 400); exact custom pixel sizes |
| Aspect ratio | auto (the prompt decides) or 1:1, 3:2, 2:3, 4:3, 3:4, 5:4, 4:5, 16:9, 9:16, 2:1, 1:2, 21:9, 9:21; an OpenAI-style size up to 16:1 | Other aspect_ratio values; sizes more elongated than 16:1 |
| Output format | JPEG by default; PNG or WebP with output_format | Transparent background (background: "transparent" returns a 400); other formats |
| Other controls | — | negative_prompt, seed (results are not repeatable), quality tiers (quality is accepted but has no effect) |
Unsupported values and fields return a 400 before a task is created and cost nothing (the one exception is quality, which is accepted and ignored); the exact messages are listed under Errors below.
Muse Image does not succeed 100% of the time. A request that passes validation and creates a task can still fail:
A failed request ends in state failed with the reason in data.failMsg, and it is not charged. All 7 of our test requests on 30 October 2026 returned an image, which is far too few to promise a success rate, so we do not publish one. Design for the occasional failure: retry temporary errors, rewrite refused prompts, and do not assume the first attempt delivers an image.
One model id and one endpoint; the mode follows from whether you send reference images. Both cost the same: $0.02 per image.
| Mode | What to send | What the model does |
|---|---|---|
| Text-to-image | prompt only | Everything in the image comes from the prompt; with aspect_ratio left at auto, so does the shape. |
| Image-to-image (editing, restyling, composition) | prompt + 1 to 4 reference images: one in image, several in images (image_url and image_urls also work) | The first image is the main one. The prompt says what stays and what changes, and can point at the others ("the cup from the second image"). The result is still one new image of about 2.5MP. |
Put one reference image in image (or image_url) and several in images (or image_urls); if you send both, the single image comes first, and the total is at most 4. Each image is a public URL or a base64 data URI, PNG, JPEG or WebP, up to 10 MB each and 24 MB in total. Masks are not supported: describe the area to change in the prompt.
Authorization: Bearer YOUR_API_KEYhttps://api.apimodels.app/v1/images/generations·GET/v1/images/generations?task_id=# ─── Text-to-image, one image per request ────────────────
curl -X POST https://api.apimodels.app/v1/images/generations \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "muse-image",
"prompt": "A bakery storefront at dawn, a hand-painted sign that reads \"MORNING LOAF\", warm window light",
"aspect_ratio": "3:2"
}'
# Response (async — a task is created):
# { "code": 200, "msg": "success", "data": { "taskId": "clxxx", "state": "pending", "model": "muse-image" } }
# ─── Poll for the result ──────────────────────────────────
curl "https://api.apimodels.app/v1/images/generations?task_id=TASK_ID" \
-H "Authorization: Bearer YOUR_API_KEY"
# { "code": 200, "data": { "state": "completed", "resultUrls": ["https://r2.apimodels.app/..."],
# "images": [{ "url": "https://r2.apimodels.app/...", "width": 1920, "height": 1280 }] } }
# ─── One call, OpenAI style: an OpenAI-style size and no callback_url ──
curl -X POST https://api.apimodels.app/v1/images/generations \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "muse-image",
"prompt": "A minimalist travel poster of Kyoto in autumn, the title \"KYOTO\" in bold letters at the top",
"size": "2048x1152"
}'
# { "created": ...,
# "data": [{ "b64_json": "...", "url": "https://r2.apimodels.app/...", "width": 2048, "height": 1152 }],
# "size": "2048x1152" }By default the call is async: create a task for a taskId, then poll GET /v1/images/generations?task_id= until state is completed; the image is in data.resultUrls and its actual width and height in data.images. On failed, the reason is in data.failMsg and nothing is charged. In our tests each image took about 35-70 seconds, so polling every 5 seconds is plenty. For a one-call response, pass an OpenAI-style size and no callback_url: the request stays open until the image is ready, and the reply is { created, data: [{ b64_json, url, width, height }], size }; "response_format": "url" leaves out the base64 copy. The OpenAI SDK's images.generate gets the same one-call response.
Same model id, same endpoint: add reference images to the request, and the price stays the same. Use image for one picture and images for several; the first is the main image. Say in the prompt what stays and what changes, and with several images what each one is for. Poll the task exactly as in the text-to-image example.
# ─── Image-to-image: 1 to 4 reference images, the first is the main image ──
# Same endpoint, model id and price ($0.02 per image) as text-to-image.
# image for one picture, images for several (image_url / image_urls also work);
# public URLs or base64 data URIs, PNG / JPEG / WebP, up to 10 MB each and 24 MB in total.
curl -X POST https://api.apimodels.app/v1/images/generations \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "muse-image",
"prompt": "Use the first image as the base and keep its lighting. Put the ceramic cup from the second image on the wooden table, next to the laptop",
"images": [
"https://example.com/desk-scene.jpg",
"https://example.com/ceramic-cup.png"
],
"aspect_ratio": "3:2"
}'
# Response (async — a task is created):
# { "code": 200, "msg": "success", "data": { "taskId": "clxxx", "state": "pending", "model": "muse-image" } }
# Poll the taskId exactly as in the text-to-image example.| Field | Required | Type | Description |
|---|---|---|---|
| model | Yes | string | muse-image (muse-image-1.0 also works) |
| prompt | Yes | string | What to draw, up to 4,000 characters. For image-to-image, say what stays and what changes. |
| image / image_url | No | string | One reference image; sending it makes the request image-to-image. A public URL or a base64 data URI, PNG, JPEG or WebP, up to 10 MB. Sent together with images, it comes first and is the main image. |
| images / image_urls | No | string[] | An array of 1 to 4 reference images (at most 4 including image); the first is the main image. Same formats as above, up to 10 MB each and 24 MB in total. More than 4 returns a 400. |
| image_base64 / image_mime_type | No | string | A single reference image can also go as raw base64 (no data: prefix), with its type in image_mime_type, e.g. image/png. |
| aspect_ratio | No | string | auto (default: the model picks the shape from the prompt), or one of 1:1, 3:2, 2:3, 4:3, 3:4, 5:4, 4:5, 16:9, 9:16, 2:1, 1:2, 21:9, 9:21. |
| size | No | string | OpenAI-style "WIDTHxHEIGHT", e.g. 2048x1152. It sets the proportions only (up to 16:1): the image comes out at the model's native size for that ratio (about 2.5MP), so a smaller size such as 1024x1024 still comes back at 1600×1600. A size above about 2.6MP, such as 3840x2160 or 2048x2048, is rejected with a 400: there is no 4K. size wins over aspect_ratio; without callback_url the image comes back in the same response. |
| n | No | number | Must be 1 (the default): one image per request. |
| output_format | No | string | Delivery format: "jpeg" (the default, quality 95), "png" or "webp". Any other value returns a 400. |
| quality | No | string | Accepted but has no effect: there are no quality tiers. |
| callback_url | No | string | We POST the finished task to this URL (payload format on the Image API overview). |
These fields are not supported and return a 400: mask and mask_url (masks / inpainting), resolution: "4K", background: "transparent", negative_prompt and seed. More than 4 reference images also return a 400.
Each image is about 2.5 megapixels. aspect_ratio or size picks the proportions and the model picks the pixels: the same ratio always comes back at the same native size. There is no 4K and no other resolution tier: size only sets the proportions. A smaller size comes back at the native size, and a size above about 2.6 megapixels (3840x2160, 2048x2048) or resolution "4K" is rejected with a 400 instead of being delivered smaller. The table shows what our 7 test requests on 30 October 2026 returned.
| Ratio | Delivered size | Notes |
|---|---|---|
| 1:1 | 1600×1600 | a size of 1024x1024 also came back at 1600×1600 |
| 16:9 | 2048×1152 | a size of 3840x2160 is rejected with a 400: there is no 4K |
| 9:16 | 1152×2048 | — |
| 21:9 | 2352×1008 | — |
| auto | 1920×1280 | one test; with no ratio the model picks the shape from the prompt |
| Model | model | Price | Notes |
|---|---|---|---|
| Muse Image | muse-image | $0.02 per image | One flat price at every aspect ratio and size, with or without reference images; one image per request |
You are charged only when an image is delivered; a request rejected with a 400 creates no task and costs nothing. Reference images cost nothing extra. Pricing examples: 10 images = $0.20, 100 images = $2.00.
Parameter problems come back synchronously as a 400 at creation ({"code": 400, "msg": "..."}): no task is created and nothing is charged. In one-call mode the same errors come back in OpenAI's shape: {"error": {"message": "...", "type": "invalid_request_error"}}. The msg strings below are the current wording; the values in brackets and after got follow your request.
| msg | Cause / fix |
|---|---|
prompt is required | No prompt, or only whitespace. |
prompt must be at most 4000 characters | The prompt is longer than 4,000 characters. Shorten it. |
muse-image does not support masks (mask): describe what to change in prompt instead | A mask was sent (mask or mask_url). There is no inpainting: remove the mask and describe in prompt what to change. |
muse-image takes at most 4 reference images (got 5) | More than 4 reference images across image, image_url, images and image_urls (got shows how many you sent). Send at most 4; the first is the main image. |
muse-image generates one image per request (got n=2); submit one request per image | n is above 1. Send 1 (or leave it out); for several images, send several requests in parallel. |
aspect_ratio must be one of auto, 1:1, 3:2, 2:3, 4:3, 3:4, 5:4, 4:5, 16:9, 9:16, 2:1, 1:2, 21:9, 9:21 | aspect_ratio is not on the list (for example 7:3). Use a listed value, or send size instead. |
size must be "WIDTHxHEIGHT", e.g. 2048x1152 (got "…") | size is not written as WIDTHxHEIGHT (for example "2K" was sent). Use a value such as 2048x1152. |
output_format must be one of jpeg, png, webp (got "…") | output_format is not jpeg, png or webp (for example "gif" was sent). Leave it out to get JPEG. |
size 4000x200 is out of range (aspect ratio up to 16:1) | The size is more elongated than 16:1. |
size 3840x2160 is larger than muse-image can render: output is about 2.5 megapixels (1600x1600 at 1:1, 2048x1152 at 16:9), there is no 4K — use a smaller size or just aspect_ratio | The size is above about 2.6 megapixels (for example 3840x2160 or 2048x2048; the message shows the size you sent). There is no 4K: send a smaller size, or just aspect_ratio. |
muse-image has no 4K output: images are about 2.5 megapixels (1600x1600 at 1:1, 2048x1152 at 16:9) — remove resolution | resolution was set to "4K". There is no 4K tier; remove resolution. |
muse-image does not support transparent backgrounds | background was set to "transparent". Muse Image has no transparent backgrounds: remove the field, or use a model that supports them. |
muse-image does not support negative_prompt — describe what you want in prompt instead | negative_prompt was sent. Muse Image has no negative prompt: remove it and describe what you want in prompt. |
muse-image does not support seed: results are not repeatable | seed was sent. Muse Image has no seed and the same prompt gives a different image each time; remove it. |
Try it in the Playground.
Muse Image does text-to-image and image-to-image. Image-to-image takes 1 to 4 reference images (the first is the main image) as public URLs or base64 data URIs, PNG, JPEG or WebP, up to 10 MB each and 24 MB in total; masks (inpainting) are not supported, so describe the change in the prompt. Each request returns one image (n must be 1) of about 2.5 megapixels at the native size for its ratio (1:1 1600×1600, 16:9 2048×1152); there is no 4K, sizes above about 2.6 MP are rejected, and exact custom pixel sizes are not possible. aspect_ratio is auto or one of 13 ratios, and an OpenAI-style size goes up to 16:1. Output is JPEG by default, or PNG / WebP via output_format, with no transparent background. negative_prompt and seed are not supported (results are not repeatable), quality has no effect, and the prompt is up to 4,000 characters. Unsupported fields, masks and more than 4 reference images return a 400 before a task is created. Success is not 100%: the model can refuse content or hit a temporary error; a failed request returns the reason and is not charged, and we publish no success rate.
Yes. Add 1 to 4 reference images to the same request: image for one, images for several (image_url and image_urls also work), as public URLs or base64 data URIs, PNG, JPEG or WebP, up to 10 MB each and 24 MB in total. The first image is the main image. Say in the prompt what stays and what changes ("keep the person and the pose, change the background to a beach, oil-painting style"), and with several images say what each one is for ("use the first image as the base, put the cup from the second image on the table"). Reference images cost nothing extra: it is still $0.02 per image. Masks (inpainting) are not supported, and more than 4 reference images return a 400.
A flat $0.02 per image at every aspect ratio and size, with or without reference images, charged only when an image is delivered: 10 images cost $0.20 and 100 images $2.00. A request rejected with a 400 costs nothing.
About 2.5 megapixels, always at the model's native size for the ratio. In our tests 1:1 came back at 1600×1600, 16:9 at 2048×1152, 9:16 at 1152×2048 and 21:9 at 2352×1008, and an unsized request at 1920×1280. size only sets the proportions, and there is no 4K: a size above about 2.6 megapixels, such as 3840x2160 or 2048x2048, is rejected with a 400, while a smaller size such as 1024x1024 comes back at the native size. Images are delivered as JPEG (quality 95) by default; pass output_format png or webp to get those formats instead.
About 35-70 seconds per image in our tests (7 requests on 30 October 2026). Poll every 5 seconds or pass a callback_url; in one-call mode, give your HTTP client a timeout of at least 2 minutes.
Each request returns exactly one image and n above 1 returns a 400, so send several requests in parallel; each is billed at $0.02 and tracked on its own.
Yes. Point the OpenAI SDK at https://api.apimodels.app/v1 and call images.generate with model muse-image and a size such as 2048x1152; the image comes back in the same response as b64_json plus a url. Without the SDK, a request with an OpenAI-style size and no callback_url gets the same one-call response.