Convert text into WAV audio URLs or streamed 24 kHz PCM using DashScope Qwen TTS models.
Design & media
Alibaba Cloud AI Image Qwen Image
Generate Qwen images through DashScope with normalized requests, responses, and saved run evidence.
What it does
Generate images through the DashScope Python SDK with official Qwen Image model IDs, including qwen-image, plus, max, 2.0, pro, and listed snapshots. It maps prompts, size, seed, style, negative prompts, and optional reference images into a normalized image.generate request, then returns the image URL, dimensions, and seed. Runs preserve prompts, metadata, generated URLs, and at least one sample JSON response as evidence.
When to use it
- Standardizing image generation for a video-agent pipeline
- Generating product or scene images from JSON requests
- Adding reproducible seed-based image requests
- Integrating optional reference images with DashScope
The skill document
Category: provider
Model Studio Qwen Image
Validation
mkdir -p output/alicloud-ai-image-qwen-image
python -m py_compile skills/ai/image/alicloud-ai-image-qwen-image/scripts/generate_image.py && echo "py_compile_ok" > output/alicloud-ai-image-qwen-image/validate.txt
Pass criteria: command exits 0 and output/alicloud-ai-image-qwen-image/validate.txt is generated.
Output And Evidence
- Write generated image URLs, prompts, and metadata to
output/alicloud-ai-image-qwen-image/. - Keep at least one sample JSON response per run.
Build consistent image generation behavior for the video-agent pipeline by standardizing image.generate inputs/outputs and using DashScope SDK (Python) with the exact model name.
Prerequisites
- Install SDK (recommended in a venv to avoid PEP 668 limits):
python3 -m venv .venv
. .venv/bin/activate
python -m pip install dashscope
- Set
DASHSCOPE_API_KEYin your environment, or adddashscope_api_keyto~/.alibabacloud/credentials(env takes precedence).
Critical model names
Use one of these exact model strings:
qwen-imageqwen-image-plusqwen-image-maxqwen-image-2.0qwen-image-2.0-proqwen-image-max-2025-12-30qwen-image-plus-2026-01-09
Normalized interface (image.generate)
Request
prompt(string, required)negative_prompt(string, optional)size(string, required) e.g.1024*1024,768*1024style(string, optional)seed(int, optional)reference_image(string | bytes, optional)
Response
image_url(string)width(int)height(int)seed(int)
Quickstart (normalized request + preview)
Minimal normalized request body:
{
"prompt": "a cinematic portrait of a cyclist at dusk, soft rim light, shallow depth of field",
"negative_prompt": "blurry, low quality, watermark",
"size": "1024*1024",
"seed": 1234
}
Preview workflow (download then open):
curl -L -o output/alicloud-ai-image-qwen-image/images/preview.png "" && open output/alicloud-ai-image-qwen-image/images/preview.png
Local helper script (JSON request -> image file):
python skills/ai/image/alicloud-ai-image-qwen-image/scripts/generate_image.py \\
--request '{"prompt":"a studio product photo of headphones","size":"1024*1024"}' \\
--output output/alicloud-ai-image-qwen-image/images/headphones.png \\
--print-response
Parameters at a glance
| Field | Required | Notes |
|---|---|---|
prompt | yes | Describe a scene, not just keywords. |
negative_prompt | no | Best-effort, may be ignored by backend. |
size | yes | WxH format, e.g. 1024*1024, 768*1024. |
style | no | Optional stylistic hint. |
seed | no | Use for reproducibility when supported. |
reference_image | no | URL/file/bytes, SDK-specific mapping. |
Quick start (Python + DashScope SDK)
Use the DashScope SDK and map the normalized request into the SDK call.
Note: For qwen-image-max, the DashScope SDK currently succeeds via ImageGeneration (messages-based) rather than ImageSynthesis.
If the SDK version you are using expects a different field name for reference images, adapt the input mapping accordingly.
import os
from dashscope.aigc.image_generation import ImageGeneration
# Prefer env var for auth: export DASHSCOPE_API_KEY=...
# Or use ~/.alibabacloud/credentials with dashscope_api_key under [default].
def generate_image(req: dict) -> dict:
messages = [
{
"role": "user",
"content": [{"text": req["prompt"]}],
}
]
if req.get("reference_image"):
# Some SDK versions accept {"image": } in messages content.
messages[0]["content"].insert(0, {"image": req["reference_image"]})
response = ImageGeneration.call(
model=req.get("model", "qwen-image-max"),
messages=messages,
size=req.get("size", "1024*1024"),
api_key=os.getenv("DASHSCOPE_API_KEY"),
# Pass through optional parameters if supported by the backend.
negative_prompt=req.get("negative_prompt"),
style=req.get("style"),
seed=req.get("seed"),
)
# Response is a generation-style envelope; extract the first image URL.
content = response.output["choices"][0]["message"]["content"]
image_url = None
for item in content:
if isinstance(item, dict) and item.get("image"):
image_url = item["image"]
break
return {
"image_url": image_url,
"width": response.usage.get("width"),
"height": response.usage.get("height"),
"seed": req.get("seed"),
}
Error handling
| Error | Likely cause | Action |
|---|---|---|
| 401/403 | Missing or invalid DASHSCOPE_API_KEY | Check env var or ~/.alibabacloud/credentials, and access policy. |
| 400 | Unsupported size or bad request shape | Use common WxH and validate fields. |
| 429 | Rate limit or quota | Retry with backoff, or reduce concurrency. |
| 5xx | Transient backend errors | Retry with backoff once or twice. |
Output location
- Default output:
output/alicloud-ai-image-qwen-image/images/ - Override base dir with
OUTPUT_DIR.
Operational guidance
- Store the returned image in object storage and persist only the URL in metadata.
- Cache results by
(prompt, negative_prompt, size, seed, reference_image hash)to avoid duplicate costs. - Add retries for transient 429/5xx responses with exponential backoff.
- Some backends ignore
negative_prompt,style, orseed; treat them as best-effort inputs. - If the response contains no image URL, surface a clear error and retry once with a simplified prompt.
Size notes
- Use
WxHformat (e.g.1024*1024,768*1024). - Prefer common sizes; unsupported sizes can return 400.
Anti-patterns
- Do not invent model names or aliases; use official model IDs only.
- Do not store large base64 blobs in DB rows; use object storage.
- Do not omit user-visible progress for long generations.
Workflow
- Confirm user intent, region, identifiers, and whether the operation is read-only or mutating.
- Run one minimal read-only query first to verify connectivity and permissions.
- Execute the target operation with explicit parameters and bounded scope.
- Verify results and save output/evidence files.
References
-
See
references/api_reference.mdfor a more detailed DashScope SDK mapping and response parsing tips. -
See
references/prompt-guide.mdfor prompt patterns and examples. -
For edit workflows, use
skills/ai/image/alicloud-ai-image-qwen-image-edit/. -
Source list:
references/sources.md
Questions people ask
- Which Qwen Image model names can I use?
- Use the exact IDs qwen-image, qwen-image-plus, qwen-image-max, qwen-image-2.0, qwen-image-2.0-pro, qwen-image-max-2025-12-30, or qwen-image-plus-2026-01-09. The document warns against inventing aliases.
- What inputs and outputs does the normalized interface support?
- Requests require prompt and size, with optional negative_prompt, style, seed, and reference_image. Responses contain image_url, width, height, and seed; some backends may treat negative prompts, style, or seed as best-effort.
- How are authentication, failures, and run evidence handled?
- Authentication uses DASHSCOPE_API_KEY or dashscope_api_key in ~/.alibabacloud/credentials, with the environment variable taking precedence. The workflow records URLs, prompts, metadata, and a sample JSON response, and recommends backoff for 429/5xx errors.
Related skills
Generate Wan text-to-video and image-to-video through a normalized DashScope Python interface.
Generate single images or parallel batches from prompts and references across multiple image APIs.
Generate and edit images, character series, product visuals, and cohesive campaign sets from prompts or references.
Generate Kling Image O1 images from text prompts and up to 10 reference images through the dLazy CLI.
Generate Seedream 4.5 images from prompts or up to 10 reference images at 2K or 4K resolution.