Install
openclaw skills install @devcsde/oatda-generate-imageGenerate images from text descriptions using AI models through OATDA's unified API. Triggers when the user wants to generate, create, or produce AI images, artwork, illustrations, designs, mockups, or concept art using DALL-E 3, GPT-Image-1, Google Imagen, Bytedance Seedream, Alibaba Wan, MiniMax, xAI Grok image models, or other image generation models via OATDA.
openclaw skills install @devcsde/oatda-generate-imageGenerate images from text descriptions using AI models through OATDA's unified API.
All commands need the OATDA API key. Resolve it inline for each exec call:
export OATDA_API_KEY="${OATDA_API_KEY:-$(cat ~/.oatda/credentials.json 2>/dev/null | jq -r '.profiles[.defaultProfile].apiKey' 2>/dev/null)}"
If the key is empty or null, tell the user to get one at https://oatda.com and configure it.
Security: Never print the full API key. Only verify existence or show first 8 chars.
| User says | Provider | Model |
|---|---|---|
| dall-e, dall-e-3 (default) | openai | dall-e-3 |
| gpt-image | openai | gpt-image-1 |
| imagen | imagen-4.0-generate-001 | |
| seedream | bytedance | seedream-4-5-251128 |
| wan | alibaba | wan2.6-t2i |
| minimax image | minimax | image-01 |
| grok image | xai | grok-imagine-image |
Default: openai / dall-e-3 if no model specified.
⚠️ Models update frequently. If a model ID fails, query
oatda-list-modelswith?type=imagefor the latest available models.
Different models support different parameters (sizes, quality, styles, masks, watermarks, negative prompts, etc.). Query before generating:
export OATDA_API_KEY="${OATDA_API_KEY:-$(cat ~/.oatda/credentials.json 2>/dev/null | jq -r '.profiles[.defaultProfile].apiKey' 2>/dev/null)}" && \
curl -s -X GET "https://oatda.com/api/v1/llm/models?type=image" \
-H "Authorization: Bearer $OATDA_API_KEY" | jq '.image_models[] | {id, supported_params}'
This returns each model's supported_params with type, allowed values, defaults, and descriptions. File-type parameters (like mask) require public URLs.
CRITICAL: The endpoint is /api/v1/llm/generate-image (NOT /api/v1/llm/image — that's vision analysis).
export OATDA_API_KEY="${OATDA_API_KEY:-$(cat ~/.oatda/credentials.json 2>/dev/null | jq -r '.profiles[.defaultProfile].apiKey' 2>/dev/null)}" && \
curl -s -X POST "https://oatda.com/api/v1/llm/generate-image" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OATDA_API_KEY" \
-d '{
"provider": "<PROVIDER>",
"model": "<MODEL>",
"prompt": "<IMAGE_DESCRIPTION>",
"size": "1024x1024",
"quality": "standard",
"n": 1,
"numberOfImages": 1
}'
prompt: Image description (1-4000 characters)size: "1024x1024", "1792x1024", "1024x1792", "2K", "4K" (model-dependent)quality: "standard", "hd", "auto", "low", "medium", "high"n and numberOfImages: Number of images (1-10) — set both to same valueaspectRatio: "1:1", "16:9", "9:16", "3:2", "2:3", "4:3", "3:4"style: "vivid" (dramatic) or "natural" (realistic)background: "auto", "transparent", "opaque"outputFormat: "png", "jpeg", "webp"model_params: Model-specific key-value pairs (see discovery above){"style": "vivid", "quality": "hd"}{"quality": "high", "background": "transparent", "outputFormat": "png"}{"sampleImageSize": "2K", "personGeneration": "allow_adult"}{"size": "4K", "watermark": false}{"seed": "42", "negative_prompt": "blurry", "prompt_extend": true}{
"success": true,
"url": "https://cdn.example.com/generated-image.png",
"all_images": [
{"url": "https://cdn.example.com/image-1.png"},
{"url": "https://cdn.example.com/image-2.png"}
],
"revised_prompt": "A detailed cyberpunk cityscape at night..."
}
Show image URL(s) from all_images array (or url field if single). Mention revised_prompt if present.
| HTTP Status | Meaning | Action |
|---|---|---|
| 401 | Invalid API key | Tell user to check their key |
| 400 | Bad request / prompt too long | Keep prompt under 4000 chars |
| 429 | Rate limited | Wait 5 seconds and retry once |
| 400 + content_policy | Content policy violation | Ask user to adjust description |
export OATDA_API_KEY="${OATDA_API_KEY:-$(cat ~/.oatda/credentials.json 2>/dev/null | jq -r '.profiles[.defaultProfile].apiKey' 2>/dev/null)}" && \
curl -s -X POST "https://oatda.com/api/v1/llm/generate-image" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OATDA_API_KEY" \
-d '{
"provider": "openai",
"model": "dall-e-3",
"prompt": "A cyberpunk city at night with neon lights reflecting on wet streets",
"size": "1024x1024",
"quality": "hd",
"n": 1,
"numberOfImages": 1,
"model_params": {"style": "vivid"}
}'
export OATDA_API_KEY="${OATDA_API_KEY:-$(cat ~/.oatda/credentials.json 2>/dev/null | jq -r '.profiles[.defaultProfile].apiKey' 2>/dev/null)}" && \
curl -s -X POST "https://oatda.com/api/v1/llm/generate-image" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OATDA_API_KEY" \
-d '{
"provider": "openai",
"model": "gpt-image-1",
"prompt": "A sleek minimalist logo of a mountain, clean vector style",
"n": 1,
"model_params": {"quality": "high", "background": "transparent", "outputFormat": "png"}
}'
export OATDA_API_KEY="${OATDA_API_KEY:-$(cat ~/.oatda/credentials.json 2>/dev/null | jq -r '.profiles[.defaultProfile].apiKey' 2>/dev/null)}" && \
curl -s -X POST "https://oatda.com/api/v1/llm/generate-image" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OATDA_API_KEY" \
-d '{
"provider": "bytedance",
"model": "seedream-4-5-251128",
"prompt": "A majestic dragon flying over a fantasy kingdom at sunset",
"model_params": {"size": "4K", "watermark": false}
}'
/api/v1/llm/generate-image — NOT /api/v1/llm/image (vision analysis)n and numberOfImages to the same value for compatibilityoatda-vision-analysis for analyzing imagesoatda-list-models for available image modelsjq -r '.url'), do NOT dump raw JSON. Present as clickable link or describe the image.