Skill: crabfishxy/seedream-image-for-openclaw (version 0.1.0)

--- name: seedream description: 使用火山引擎 Seedream-4.5 API 生成高质量图片。适用于文生图、图生图以及生成关联组图的场景。 --- # Seedream 本 Skill 封装了火山引擎（Volcengine）的 Seedream-4.5 图片生成能力，支持通过文本提示词或参考图生成高质量 AI 图像。 ## 使用方法 ### 文生图 生成单张图片（默认分辨率）： ```bash uv run {baseDir}/scripts/generate_image.py --prompt "一只赛博朋克风格的猫" --api-key YOUR_API_KEY ``` 指定分辨率（如 2K, 4K 或具体像素）： ```bash uv run {baseDir}/scripts/generate_image.py --prompt "壮丽的山川日出" --size "2K" --api-key YOUR_API_KEY ``` ### 图生图 提供参考图片 URL： ```bash uv run {baseDir}/scripts/generate_image.py --prompt "将其风格变为印象派" --image "https://example.com/input.jpg" --api-key YOUR_API_KEY ``` ### 生成组图 生成一组内容关联的图片（最多 15 张）： ```bash uv run {baseDir}/scripts/generate_image.py --prompt "一个宇航员在不同行星上的探险经历" --sequential --max-images 4 --api-key YOUR_API_KEY ``` ## API Key 配置 可以通过以下方式提供 API Key： 1. 命令行参数 `--api-key` 2. 环境变量 `VOLC_API_KEY` ## 参数说明 - `--prompt`: (必选) 图像生成的文本描述。 - `--model`: (可选) 模型 ID，默认为 `doubao-seedream-4-5-251128`。 - `--size`: (可选) 图像尺寸。支持 `2K`, `4K` 或 `2048x2048` 等格式。 - `--image`: (可选) 参考图 URL 或 Base64 编码。 - `--sequential`: (可选) 开启组图生成功能。 - `--max-images`: (可选) 组图生成的最大图片数量（1-15）。 ## 工作流 1. 调用 `generate_image.py` 脚本。 2. 脚本会输出以 `MEDIA_URL: ` 开头的图片链接。 3. 提取链接并使用 Markdown 语法展示：`![Generated Image](URL)`。 4. 除非用户要求，否则无需下载图片。 ## 注意事项 - Seedream-4.5 支持中英文提示词。 - 组图功能仅在 Seedream-4.5/4.0 模型中有效。 - 确保提供的图片 URL 可公开访问。

path: scripts/generate_image.py
content: #!/usr/bin/env python3
# /// script
# requires-python = ">=3.10"
# dependencies = [
#     "requests>=2.31.0",
# ]
# ///

import argparse
import json
import os
import sys
import requests

def generate_image(prompt, model, size, api_key, image_input=None, sequential=False, max_images=1):
    url = "https://ark.cn-beijing.volces.com/api/v3/images/generations"
    headers = {
        "Content-Type": "application/json",
        "Authorization": f"Bearer {api_key}"
    }
    
    payload = {
        "model": model,
        "prompt": prompt,
        "size": size,
    }
    
    if image_input:
        payload["image"] = image_input
        
    if sequential:
        payload["sequential_image_generation"] = "auto"
        payload["sequential_image_generation_options"] = {"max_images": max_images}
    else:
        payload["sequential_image_generation"] = "disabled"

    try:
        response = requests.post(url, headers=headers, json=payload)
        response.raise_for_status()
        result = response.json()
        
        if "data" in result and len(result["data"]) > 0:
            for item in result["data"]:
                if "url" in item:
                    print(f"MEDIA_URL: {item['url']}")
                elif "b64_json" in item:
                    # In a real scenario, we might want to save this to a file, 
                    # but for this skill we follow the pattern of providing a URL if possible.
                    print("ERROR: Received base64 data but expected URL.")
        else:
            print(f"ERROR: No image data in response. Full response: {json.dumps(result)}")
            
    except requests.exceptions.RequestException as e:
        print(f"ERROR: API request failed: {e}")
        if hasattr(e, 'response') and e.response is not None:
            print(f"Response body: {e.response.text}")
        sys.exit(1)

def main():
    parser = argparse.ArgumentParser(description="Generate images using Volcengine Seedream API.")
    parser.add_argument("--prompt", required=True, help="Text prompt for image generation")
    parser.add_argument("--model", default="doubao-seedream-4-5-251128", help="Model ID or Endpoint ID")
    parser.add_argument("--size", default="2048x2048", help="Image size (e.g., 2K, 4K, 2048x2048)")
    parser.add_argument("--api-key", help="Volcengine API Key")
    parser.add_argument("--image", help="Input image URL or base64 (optional)")
    parser.add_argument("--sequential", action="store_true", help="Enable sequential image generation (group)")
    parser.add_argument("--max-images", type=int, default=1, help="Max images for sequential generation (1-15)")

    args = parser.parse_args()
    
    [REDACTED_SECRET] or os.environ.get("VOLC_API_KEY")
    if not [REDACTED_SECRET]"ERROR: API key is required. Provide via --api-key or VOLC_API_KEY environment variable.")
        sys.exit(1)
        
    generate_image(
        prompt=args.prompt,
        model=args.model,
        size=args.size,
        [REDACTED_SECRET],
        image_input=args.image,
        sequential=args.sequential,
        max_images=args.max_images
    )

if __name__ == "__main__":
    main()


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