Skill: a3273283/sih-ai-photo-changer (version 1.0.3)

--- name: sih-image-gen description: AI图片生成与编辑工具，使用Sih.AI API进行自然语言驱动的图片处理。支持换装、换背景、换脸、风格转换（动漫/粘土/油画等）、美颜修图等功能。当用户需要通过自然语言描述来编辑图片（如"把衣服换成bikini"、"背景换成海边"、"转换成动漫风格"）时使用此skill。 --- # Sih.AI 图片生成 ## 快速开始 通过自然语言描述来编辑图片，使用 `scripts/image_gen.py` 脚本调用API。 ### 基本用法 ```bash # 使用URL python scripts/image_gen.py "https://example.com/image.jpg" "背景改为在海边" # 使用本地文件 python scripts/image_gen.py "./photo.jpg" "换成动漫风格" # 指定模型 python scripts/image_gen.py "./photo.jpg" "美颜修图" "sihai-image-27" ``` ### 常用处理提示词 - **换背景**: "背景改为在海边"、"背景换成城市夜景"、"背景改为森林" - **换装**: "把衣服换成bikini"、"换成晚礼服"、"换成运动装" - **风格转换**: "转换成动漫风格"、"转换成油画风格"、"转换成粘土风格" - **美颜**: "美颜修图"、"磨皮美白"、"瘦身" ## API参数 ### image (必需) - **类型**: string 或 array - **格式**: - 图片URL: `https://example.com/image.jpg` - Base64: 纯base64编码字符串（**不带** `data:image/...;base64,` 前缀） - **说明**: 脚本会自动将本地文件路径转换为纯Base64格式（适配sihai-image-27模型） ### prompt (必需) - **类型**: string - **说明**: 自然语言描述想要的编辑效果 - **建议**: 使用简洁、明确的中文描述 ### model (可选) - **类型**: string - **默认值**: `sihai-image-27` - **说明**: 使用的模型名称 ## 输出格式 API返回JSON格式，包含生成的图片URL： ```json { "model": "sihai-image-27", "created": 1773386658, "data": [ { "url": "https://...", "size": "2048x2048" } ], "usage": { "generated_images": 1, "output_tokens": 16384, "total_tokens": 16384 } } ``` ## 错误处理 - **401/403**: API token无效或过期 - **400**: 参数错误（图片URL无效、prompt为空等） - **500/503**: 服务暂时不可用，稍后重试 ## 注意事项 - 确保图片URL可公开访问 - sihai-image-27模型使用纯base64编码，**不需要** `data:image/...;base64,` 前缀 - 生成的图片URL有效期为24小时

path: scripts/image_gen.py
content: #!/usr/bin/env python3
"""
Sih.AI图片生成API客户端
支持图片URL或Base64输入，返回生成后的图片URL
"""
import sys
import json
import base64
import requests
from pathlib import Path

API_URL = "https://api.vwu.ai/v1/images/generations/"
API_TOKEN = "[REDACTED_SECRET]"
DEFAULT_MODEL = "sihai-image-27"


def encode_image_to_base64(image_path: str) -> str:
    """将图片文件编码为base64格式（不带前缀，适配sihai-image-27模型）"""
    with open(image_path, 'rb') as f:
        image_data = base64.b64encode(f.read()).decode('utf-8')
    # sihai-image-27模型只需要纯base64，不需要data:image前缀
    return image_data


def generate_image(image_input: str, prompt: str, model: str = DEFAULT_MODEL) -> dict:
    """
    调用图片生成API

    Args:
        image_input: 图片URL或本地文件路径
        prompt: 处理提示词（如"背景改为在海边"）
        model: 模型名称，默认sihai-image-27

    Returns:
        API响应的JSON数据
    """
    # 判断是URL还是本地文件
    if image_input.startswith(('http://', 'https://')):
        image = image_input
    else:
        # 本地文件，转换为base64
        image = encode_image_to_base64(image_input)

    headers = {
        "Content-Type": "application/json",
        "Authorization": f"Bearer {API_TOKEN}"
    }

    payload = {
        "image": [image],
        "prompt": prompt,
        "model": model
    }

    response = requests.post(API_URL, headers=headers, json=payload)
    response.raise_for_status()
    return response.json()


def main():
    """命令行入口"""
    if len(sys.argv) < 3:
        print("Usage: python image_gen.py <image_url_or_path> <prompt> [model]")
        print("Example: python image_gen.py https://example.com/image.jpg '背景改为在海边'")
        print("Example: python image_gen.py ./photo.jpg '换成动漫风格'")
        sys.exit(1)

    image_input = sys.argv[1]
    prompt = sys.argv[2]
    model = sys.argv[3] if len(sys.argv) > 3 else DEFAULT_MODEL

    try:
        result = generate_image(image_input, prompt, model)
        print(json.dumps(result, indent=2, ensure_ascii=False))

        # 提取并打印图片URL
        if 'data' in result and len(result['data']) > 0:
            print("\n生成的图片URL:")
            for item in result['data']:
                print(f"- {item['url']}")

    except requests.exceptions.RequestException as e:
        print(f"Error: API请求失败 - {e}", file=sys.stderr)
        sys.exit(1)
    except Exception as e:
        print(f"Error: {e}", file=sys.stderr)
        sys.exit(1)


if __name__ == "__main__":
    main()


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