Happy IMG2 Direct Skill
Generate real images through an OpenAI-compatible /images/generations endpoint configured in OpenClaw.
Default behavior:
- provider:
happyunlessOPENCLAW_IMAGE_PROVIDERis set - model:
gpt-image-2unlessOPENCLAW_IMAGE_MODELis set - size:
1024x1024 - timeout:
600000msper image - output:
~/.openclaw/generated-images/ - no local fake-image fallback
- no built-in message delivery; send or attach files using your normal OpenClaw/channel tools
Single image
python3 skills/happy-img2-direct/scripts/run.py \
--prompt "A realistic photo of an orange cat sitting by a window, no text, no watermark" \
--task-name "cat-test" \
--no-send
Useful flags:
--promptrequired--task-nameoutput filename prefix--providerprovider key in OpenClaw config, defaulthappy--modelimage model, defaultgpt-image-2--sizedefault1024x1024--timeout-msdefault600000--output-dirdefault~/.openclaw/generated-images--max-attemptsdefault3, maximum5--retry-base-delay,--retry-max-delay,--retry-jitter--rawmarker for callers that intentionally keep the user prompt unchanged--no-sendaccepted for compatibility; this public skill always leaves delivery to the caller
Successful output is JSON containing ok:true, image_path or output, bytes, model/provider, attempt count, and run directory.
Batch images
python3 skills/happy-img2-direct/scripts/batch_run.py @batch.json
Example:
{
"batch_name": "article-covers",
"max_workers": 4,
"timeout_ms": 600000,
"send_to_feishu": false,
"tasks": [
{"task_name": "cover-1", "prompt": "Realistic shop counter photo, no readable text"},
{"task_name": "cover-2", "prompt": "Realistic office desk photo, no readable text"}
]
}
Batch rules:
- bounded concurrency, current hard maximum
4 - each item has its own task directory and logs
- one failed image does not prevent other images from finishing
- final
batch_result.jsonrecords success/failure per task - delivery is disabled in the public version; use OpenClaw/channel tools to send files
Retry behavior
Retries are limited and only used for retryable failures:
- timeout
- upstream failures
- rate limits
- HTTP
408/429/500/502/503/504 - wrapper parse errors
Non-retryable errors, such as invalid requests or auth failures, fail fast with redacted diagnostics.
Safety and publishing notes
This skill intentionally contains no private OpenClaw IDs, no hard-coded user paths, no API keys, and no channel recipient IDs. It reads provider configuration from the local OpenClaw config at runtime.