Skill: cinience/aliyun-qwen-image-edit (version 1.0.0)

--- name: aliyun-qwen-image-edit description: Use when editing images with Alibaba Cloud Model Studio Qwen Image Edit models (qwen-image-edit, qwen-image-edit-plus, qwen-image-edit-max, qwen-image-2.0 series and snapshots). Use when modifying existing images (inpaint, replace, style transfer, local edits), preserving subject consistency, or documenting image edit request/response mappings. version: 1.0.0 --- Category: provider # Model Studio Qwen Image Edit ## Validation ```bash mkdir -p output/aliyun-qwen-image-edit python -m py_compile skills/ai/image/aliyun-qwen-image-edit/scripts/prepare_edit_request.py && echo "py_compile_ok" > output/aliyun-qwen-image-edit/validate.txt ``` Pass criteria: command exits 0 and `output/aliyun-qwen-image-edit/validate.txt` is generated. ## Output And Evidence - Save edit request payloads, result URLs, and model parameters under `output/aliyun-qwen-image-edit/`. - Keep one sample request/response pair for reproducibility. Use Qwen Image Edit models for instruction-based image editing instead of text-to-image generation. ## Critical model names Use one of these exact model strings: - `qwen-image-edit` - `qwen-image-edit-plus` - `qwen-image-edit-max` - `qwen-image-2.0` - `qwen-image-2.0-pro` - `qwen-image-2.0-2026-03-03` - `qwen-image-2.0-pro-2026-03-03` - `qwen-image-edit-plus-2025-12-15` - `qwen-image-edit-max-2026-01-16` ## Prerequisites - Install SDK in a virtual environment: ```bash python3 -m venv .venv . .venv/bin/activate python -m pip install dashscope ``` - Set `DASHSCOPE_API_KEY` in your environment, or add `dashscope_api_key` to `~/.alibabacloud/credentials`. ## Normalized interface (image.edit) ### Request - `prompt` (string, required) - `image` (string | bytes, required) source image URL/path/bytes - `mask` (string | bytes, optional) inpaint region mask - `size` (string, optional) e.g. `1024*1024` - `seed` (int, optional) ### Response - `image_url` (string) - `seed` (int) - `request_id` (string) ## Operational guidance - Keep prompts task-oriented: describe what to change and what to preserve. - Use masks for deterministic local edits. - Save output assets to object storage and persist only URLs. - For subject consistency, provide explicit constraints in prompt. ## Local helper script Prepare a normalized request JSON and validate response schema: ```bash .venv/bin/python skills/ai/image/aliyun-qwen-image-edit/scripts/prepare_edit_request.py \ --prompt "Replace the sky with sunset, keep buildings unchanged" \ --image "https://example.com/input.png" ``` ## Output location - Default output: [REDACTED_SECRET] - Override base dir with `OUTPUT_DIR`. ## Workflow 1) Confirm user intent, region, identifiers, and whether the operation is read-only or mutating. 2) Run one minimal read-only query first to verify connectivity and permissions. 3) Execute the target operation with explicit parameters and bounded scope. 4) Verify results and save output/evidence files. ## References - `references/sources.md`

path: agents/openai.yaml
content: interface:
  display_name: "Alibaba Cloud AI Image Qwen Image Edit"
  short_description: "Qwen Image Edit (Max) workflows"
  default_prompt: "Use $alicloud-ai-image-qwen-image-edit to complete this ai/image editing task on Alibaba Cloud."


path: references/sources.md
content: - https://help.aliyun.com/zh/model-studio/qwen-image-edit-guide
- https://help.aliyun.com/zh/model-studio/newly-released-models


path: scripts/prepare_edit_request.py
content: #!/usr/bin/env python3
"""Prepare and validate normalized request/response for Qwen Image Edit."""

from __future__ import annotations

import argparse
import json
import sys
from pathlib import Path


def _load_json(path: str) -> dict:
    return json.loads(Path(path).read_text(encoding="utf-8"))


def main() -> None:
    parser = argparse.ArgumentParser(description="Prepare image.edit request and validate response shape")
    parser.add_argument("--prompt", required=True)
    parser.add_argument("--image", required=True)
    parser.add_argument("--mask")
    parser.add_argument("--size", default="1024*1024")
    parser.add_argument("--seed", type=int)
    parser.add_argument("--output", default="output/ai-image-qwen-image-edit/request.json")
    parser.add_argument("--validate-response", help="Path to JSON response file")
    args = parser.parse_args()

    req = {
        "prompt": args.prompt,
        "image": args.image,
        "size": args.size,
    }
    if args.mask:
        req["mask"] = args.mask
    if args.seed is not None:
        req["seed"] = args.seed

    out = Path(args.output)
    out.parent.mkdir(parents=True, exist_ok=True)
    out.write_text(json.dumps(req, ensure_ascii=False, indent=2), encoding="utf-8")

    result = {"ok": True, "request_path": str(out)}

    if args.validate_response:
        resp = _load_json(args.validate_response)
        missing = [k for k in ["image_url"] if k not in resp]
        if missing:
            result = {"ok": False, "error": f"missing keys: {missing}"}
            print(json.dumps(result, ensure_ascii=False))
            sys.exit(1)
        result["response_valid"] = True

    print(json.dumps(result, ensure_ascii=False))


if __name__ == "__main__":
    main()


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)