9.4 KiB
name, description, license, version, type, risk_level, status, disable-model-invocation, provider, tags, requires, metadata, market
| name | description | license | version | type | risk_level | status | disable-model-invocation | provider | tags | requires | metadata | market | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| dashscope-image-gen | Use this skill when the user wants to generate images. Supports multiple models: gpt-image-2 (default, via DesireCore Cloud), wan2.7-image-pro and wan2.7-image (when user has DashScope configured). Uses OpenAI-compatible /images/generations API for synchronous image generation. Use when the user mentions: generate image, draw, text-to-image, create image, AI painting, illustration, design picture. | Complete terms in LICENSE.txt | 1.4.1 | procedural | low | enabled | false | auto |
|
|
|
|
dashscope-image-gen Skill
Mandatory Rules (violations cause failure)
- STRICTLY follow the execution steps below — do NOT improvise, explore alternative endpoints, or try models not listed in this document
- Must access agent-service over HTTPS — the API address is already provided in the system prompt under the local API section (e.g.
https://127.0.0.1:PORT); use it directly with-kto skip certificate verification - Must upload to media-store via
/api/media/upload—/tmpis only a transient download/decode location, never use a local path as the final output - Must use the
dc-media://protocol to display images — the only form the frontend can render correctly - Use Bash curl throughout — do not use the HttpRequest tool or Python
- Use
/images/generationsendpoint — synchronous call; the response contains b64_json image data - Only use models listed below — do NOT try dall-e-3, qwen-vl, or any model not in the Model Selection table
Provider & Default Compute
You do NOT need to specify a provider — just pass "serviceType": "image_gen" and the system will automatically route to the correct provider.
Never try to query provider lists, read compute.json, or explore available models through API calls. The models listed below are guaranteed to work.
Model Selection
| Model | Characteristics | When to use |
|---|---|---|
| gpt-image-2 | High quality, fast, versatile styles | Default — use when user does not specify a model |
| wan2.7-image | Standard high quality (requires DashScope provider) | Only when user explicitly asks for Wan / DashScope |
| wan2.7-image-pro | Flagship, 4K resolution (requires DashScope provider) | Only when user explicitly asks for top quality Wan model |
Default rule: if the user does not specify a model, use gpt-image-2.
Note: wan2.7-image and wan2.7-image-pro only work when the user has configured their own Alibaba Cloud DashScope provider. If you get an error with these models, fall back to gpt-image-2.
Full Execution Flow (strictly follow these steps)
How to get the API address
The system prompt already contains the agent-service API address under the local API section (e.g. Agent Service: https://127.0.0.1:61000). Extract the URL from there and use it directly.
If for any reason you cannot find it in the system prompt, use this fallback:
PORT=$(cat "${DESIRECORE_HOME:-$HOME/.desirecore}/agent-service.port")
# Then use https://127.0.0.1:${PORT}
Step 1: Generate the image (single curl command)
Call /images/generations through media-proxy. You MUST use this exact request structure — do not add messages, response_format, or any other parameters not shown here:
# Save response to a temp file to avoid base64 flooding the terminal
curl -sk -X POST "https://127.0.0.1:${PORT}/api/media-proxy" \
-H "Content-Type: application/json" \
-d '{
"serviceType": "image_gen",
"endpoint": "/images/generations",
"body": {
"model": "gpt-image-2",
"prompt": "Replace this with the image description (English usually gives better results)",
"size": "1024x1024",
"n": 1
},
"responseType": "json"
}' -o /tmp/dashscope-response.json
# Check success and extract b64_json directly to image file (NEVER cat the response to stdout)
python3 -c "
import json, base64, sys
with open('/tmp/dashscope-response.json') as f:
resp = json.load(f)
if not resp.get('success'):
print('ERROR:', json.dumps(resp, ensure_ascii=False)[:500])
sys.exit(1)
b64 = resp['data']['data'][0]['b64_json']
with open('/tmp/dashscope-gen.png', 'wb') as f:
f.write(base64.b64decode(b64))
print('OK: saved to /tmp/dashscope-gen.png')
"
CRITICAL: The response contains a large base64 image (~2MB). NEVER print the raw response or b64_json to the terminal. Always save to file with -o and extract with the python3 script above.
Response format (saved in /tmp/dashscope-response.json):
{
"success": true,
"data": {
"created": 1781060911,
"data": [{"b64_json": "<very large base64 string>"}],
"size": "1024x1024"
}
}
Step 2: Upload to media-store
curl -sk -X POST "https://127.0.0.1:${PORT}/api/media/upload" \
-F "file=@/tmp/dashscope-gen.png;type=image/png"
Pick the mediaId field from the JSON response (format xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.png).
Step 3: Render the image via the dc-media protocol
In your reply text, write Markdown image syntax directly:

For example: 
The frontend will translate dc-media:// into a reachable image URL and render it.
Parameter Mapping
Size selection
Pass size in the body object:
{
"model": "gpt-image-2",
"prompt": "your image description",
"size": "1024x1024",
"n": 1
}
| User intent | size value |
|---|---|
| Square / avatar / default | "1024x1024" |
| Landscape / scenery / wallpaper | "1536x1024" |
| Portrait / mobile / poster | "1024x1536" |
Optional parameters (top-level body fields)
| Parameter | Description |
|---|---|
n |
Number of images, 1-4, default 1 |
size |
Image size, e.g. "1024x1024" |
Multiple Image Generation
When n > 1, download and upload each image, then render them one by one:


Error Handling
| Error | Meaning | Action |
|---|---|---|
"No matching provider" |
No enabled provider supports image_gen |
Tell user to enable a provider with image_gen support in settings |
"API Key not configured" |
API Key missing | Tell user to configure API key |
statusCode: 401 |
API Key invalid or expired | Tell user to check API key |
statusCode: 429 |
Rate limited | Wait and retry once |
statusCode: 400 + model_price_error |
Model not available on current provider | Switch to gpt-image-2 and retry |
statusCode: 400 |
Other bad parameters | Check model name and size are from the tables above |
On model error: If wan2.7-image or wan2.7-image-pro fails with model_price_error, automatically retry with gpt-image-2. Do NOT ask the user before retrying.
On other errors: Report the error to the user clearly. Do NOT try alternative endpoints or read config files.
Notes
- Image generation calls are synchronous and typically return in 10-60 seconds
- English prompts usually produce the best results; Chinese is also supported
- When the user does not specify a model or size, default to
gpt-image-2+1024x1024