Use when the user wants to generate images using AI models through OATDA's unified API. Supports DALL-E 3, GPT-Image-1, Google Imagen, MiniMax, Qwen, and xAI image models.
Install
npx skillscat add devcsde/oatda-skills/oatda-generate-image Install via the SkillsCat registry.
OATDA Image Generation
Generate images from text descriptions using AI models through OATDA's unified API.
When to Use
Use this skill when the user wants to:
- Generate images from text descriptions via OATDA
- Create AI artwork, illustrations, or designs
- Generate product mockups or concept art
- Use DALL-E, Imagen, or other image models through a single API
Prerequisites
The user needs an OATDA API key. Check in this order:
$OATDA_API_KEYenvironment variable~/.oatda/credentials.jsonconfig file
If neither exists, tell the user:
You need an OATDA API key. Get one at https://oatda.com, then set it:
export OATDA_API_KEY=your_key_here
Step-by-Step Instructions
1. Resolve the API key
# Check env var first; if empty, auto-load from credentials file
if [[ -z "$OATDA_API_KEY" ]]; then
export OATDA_API_KEY=$(cat ~/.oatda/credentials.json 2>/dev/null | jq -r '.profiles[.defaultProfile].apiKey' 2>/dev/null)
fi
# Verify key exists (show first 8 chars only)
echo "${OATDA_API_KEY:0:8}"If the output is empty or null, stop and ask the user to configure their API key.
IMPORTANT:
- Never print the full API key. Only show the first 8 characters for verification.
- The key resolution script and subsequent
curlcommands must run in the same shell session. Each separate bash/terminal invocation starts with an isolated environment where previously exported variables are lost. Either run all commands in one session, or chain them (e.g.,export OATDA_API_KEY=... && curl ...).
2. Determine the model
Map common aliases:
| 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.
3. Discover model-specific parameters
IMPORTANT: Different models support different parameters (sizes, quality levels, styles, masks, watermarks, negative prompts, etc.). Before generating, discover what parameters a model supports:
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 image model's supported_params with:
type: Parameter type (string, number, boolean, file)values: Allowed values for enumsdefault: Default valuedescription: What the parameter doesoptional: Whether it's requiredaccept: For file types, what's accepted (e.g., "image/*")
File-type parameters: Parameters like mask or reference images require publicly accessible URLs (https://...), not local file paths.
Pass model-specific parameters via the model_params object (see examples below).
4. Make the API call
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,
"aspectRatio": "1:1",
"style": "vivid",
"personGeneration": "allow_adult"
}'Replace <PROVIDER>, <MODEL>, and <IMAGE_DESCRIPTION> with actual values.
CRITICAL: The endpoint is /api/v1/llm/generate-image (NOT /api/v1/llm/image — that's vision analysis).
Parameters:
prompt: Image description (1-4000 characters)size: Dimensions —"1024x1024","1792x1024","1024x1792", or"2K","4K"(model-dependent)quality:"standard","hd","auto","low","medium","high"nandnumberOfImages: Number of images (1-10), set both to the same valueaspectRatio:"1:1","16:9","9:16","3:2","2:3","4:3","3:4", etc.style:"vivid"(dramatic, hyper-real) or"natural"(realistic)background:"auto","transparent", or"opaque"outputFormat:"png","jpeg", or"webp"model_params: Model-specific parameters as key-value pairs. Uselist_models?type=imageor/api/v1/llm/modelsto discover supported params per model. Examples:- DALL-E 3:
{ "style": "vivid", "quality": "hd" } - GPT-Image-1:
{ "quality": "high", "background": "transparent", "outputFormat": "png" } - Imagen 4:
{ "sampleImageSize": "2K", "personGeneration": "allow_adult" } - Seedream:
{ "size": "4K", "watermark": false } - Wan 2.6:
{ "seed": "42", "negative_prompt": "blurry", "prompt_extend": true }
- DALL-E 3:
5. Parse the response
{
"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 with neon lights..."
}- Show the image URL(s) to the user (from
all_imagesarray, orurlfield if single image) - If
revised_promptis present, mention how the model expanded the prompt
6. Handle errors
| 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 with content_policy | Content policy violation | Ask user to adjust the description |
Full Examples
DALL-E 3
User asks: "Generate an image of a cyberpunk city at night using DALL-E 3"
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"
}
}'GPT-Image-1 with transparent background
User asks: "Generate a transparent PNG logo"
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"
}
}'Bytedance Seedream (no watermark)
User asks: "Generate a 4K image without watermark using Seedream"
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
}
}'Alibaba Wan 2.6 with negative prompt
User asks: "Generate an image avoiding blurry elements"
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": "alibaba",
"model": "wan2.6-t2i",
"prompt": "A sharp detailed portrait of a warrior in ornate armor",
"model_params": {
"negative_prompt": "blurry, low quality, distorted",
"seed": "42"
}
}'Tips
- The endpoint is
/api/v1/llm/generate-image— do NOT confuse with/api/v1/llm/image(that's vision) - DALL-E 3 costs ~$0.04/image (standard), ~$0.08/image (HD)
- Set both
nandnumberOfImagesto the same value for compatibility - Use
list_models?type=imageto discover model-specific parameters before generating - Use
model_paramsfor model-specific options (watermark, negative_prompt, seed, etc.) - Image URLs may be temporary — recommend downloading promptly
- Maximum prompt length is 4000 characters
- NEVER expose the full API key in output
- Related skills:
/oatda:oatda-vision-analysisfor analyzing images,/oatda:oatda-list-modelsfor available image models