skills/giggle-generation-image/SKILL.md
Supports text-to-image and image-to-image. Use when the user needs to create or generate images. After submit, proactively poll task status every ~15–30s and message the user each time until completed/failed/timeout—do not wait for the user to ask for progress. Use cases: (1) Generate from text description, (2) Use reference images, (3) Customize model, aspect ratio, resolution. Triggers: generate image, draw, create image, AI art.
npx skillsauth add giggle-official/skills giggle-generation-imageInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Source: giggle-official/skills · API: giggle.pro
Generates AI images via giggle.pro's Generation API. Supports multiple models (Seedream, Midjourney, Nano Banana). Submit task → agent proactively polls with --query until done (see Continuous progress updates). No Cron.
API Key: Set system environment variable GIGGLE_API_KEY. Obtain the key at giggle.pro while logged in: left sidebar → API Key (API 密钥). The script will prompt if not configured.
No inline Python: All commands must be executed via the
exectool. Never usepython3 << 'EOF'or heredoc inline code.
No Retry on Error: If script execution encounters an error, do not retry. Report the error to the user directly and stop.
| Model | Description | |-------|-------------| | seedream45 | Seedream, realistic and creative | | midjourney | Midjourney style | | nano-banana-2 | Nano Banana 2 | | nano-banana-2-fast | Nano Banana 2 fast |
Image generation is asynchronous (typically 30–120 seconds). Submit a task to get task_id, then query until the task reaches a terminal state.
Important: Never pass
GIGGLE_API_KEYin exec'senvparameter. API Key is read from system environment variable.
Image jobs usually finish in ~30 seconds–2 minutes. The user does not need to ask you to check progress.
task_id, and set expectations (~30s–2m typical; longer if batch or heavy model).--query about every 15–30 seconds until terminal—do not wait for the user to ask.processing / pending JSON, paraphrase and say you will keep checking—do not go silent.task_id, and suggest retry or follow-up.task_id, then query only when they ask.# Text-to-image (default seedream45)
python3 scripts/generation_api.py \
--prompt "description" --aspect-ratio 16:9 \
--model seedream45 --resolution 2K \
--no-wait --json
# Text-to-image - Midjourney
python3 scripts/generation_api.py \
--prompt "description" --model midjourney \
--aspect-ratio 16:9 --resolution 2K \
--no-wait --json
# Image-to-image - Reference URL
python3 scripts/generation_api.py \
--prompt "Convert to oil painting style, keep composition" \
--reference-images "https://example.com/photo.jpg" \
--model nano-banana-2-fast \
--no-wait --json
# Batch generate multiple images
python3 scripts/generation_api.py \
--prompt "description" --generate-count 4 \
--no-wait --json
Response example:
{"status": "started", "task_id": "xxx"}
Store task_id in memory (addMemory):
giggle-generation-image task_id: xxx (submitted: YYYY-MM-DD HH:mm)
Tell the user: Image task submitted; you will poll automatically and report as soon as there is a result—no need to repeatedly ask if it is ready.
After each submit for the current task, repeatedly run (every ~15–30s until terminal or timeout), without waiting for the user to ask:
python3 scripts/generation_api.py --query --task-id <task_id>
Behavior:
If the user asks while you are polling, answer with the latest status.
When the user initiates a new image generation request, run submit to create a new task. Do not reuse old task_id from memory.
For the in-flight task, use proactive polling as above. For a previous task, query (and optionally poll) that task_id when the user asks or requests updates.
| Parameter | Default | Description |
|-----------|---------|-------------|
| --prompt | required | Image description prompt |
| --model | seedream45 | seedream45, midjourney, nano-banana-2, nano-banana-2-fast |
| --aspect-ratio | 16:9 | 16:9, 9:16, 1:1, 3:4, 4:3, 2:3, 3:2, 21:9 |
| --resolution | 2K | Text-to-image: 1K, 2K, 4K (image-to-image partially supported) |
| --generate-count | 1 | Number of images to generate |
| --reference-images | - | Image-to-image reference; supports URL, base64, asset_id |
| --watermark | false | Add watermark (image-to-image) |
The image-to-image API's reference_images is an array of objects. Each element can be one of these three formats (can be mixed):
{
"prompt": "A cute orange cat sitting on the windowsill in the sun, realistic style",
"reference_images": [
{
"url": "https://assets.giggle.pro/private/example/image.jpg?Policy=EXAMPLE_POLICY&Key-Pair-Id=EXAMPLE_KEY_PAIR_ID&Signature=EXAMPLE_SIGNATURE"
}
],
"generate_count": 1,
"model": "nano-banana-2-fast",
"aspect_ratio": "16:9",
"watermark": false
}
{
"prompt": "A cute orange cat sitting on the windowsill in the sun, realistic style",
"reference_images": [
{
"base64": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg=="
}
],
"generate_count": 1,
"model": "nano-banana-2-fast",
"aspect_ratio": "16:9",
"watermark": false
}
Base64 format: Pass the raw Base64 string directly. Do not add the
data:image/xxx;base64,prefix.
{
"prompt": "A cute orange cat sitting on the windowsill in the sun, realistic style",
"reference_images": [
{
"asset_id": "vvsdsfsdf"
}
],
"generate_count": 1,
"model": "nano-banana-2-fast",
"aspect_ratio": "16:9",
"watermark": false
}
For multiple reference images, add more objects to the
reference_imagesarray.
When the user request is vague, guide per the steps below. If the user has provided enough info, run the command directly.
Question: "Which model would you like to use?"
Title: "Image Model"
Options:
- "seedream45 - Realistic & creative (recommended)"
- "midjourney - Artistic style"
- "nano-banana-2 - High quality"
- "nano-banana-2-fast - Fast generation"
multiSelect: false
Question: "What aspect ratio do you need?"
Title: "Aspect Ratio"
Options:
- "16:9 - Landscape (wallpaper/cover) (recommended)"
- "9:16 - Portrait (mobile)"
- "1:1 - Square"
- "Other ratios"
multiSelect: false
Question: "Do you need reference images?"
Title: "Generation Mode"
Options:
- "No - Text-to-image only"
- "Yes - Image-to-image (style transfer)"
multiSelect: false
Submit task → store task_id → inform user → proactively poll --query until terminal state, with a short update after each query; on terminal state, forward links or errors from stdout.
Link return rule: Image links in results must be full signed URLs (with Policy, Key-Pair-Id, Signature query params). Do not strip or omit &response-content-disposition=attachment when the API returns it — forward links as-is so downloads behave correctly. Correct: https://assets.giggle.pro/...?Policy=...&Key-Pair-Id=...&Signature=...&response-content-disposition=attachment (order of query params may vary). Wrong: unsigned URLs with only the base path, or URLs with response-content-disposition=attachment removed.
development
Talking-head video from image + driving audio: submit tasks via the wrapped generation API and poll for results; requests go through the Giggle gateway.
development
Discord-specific markdown syntax for formatting message strings. Use when constructing strings that will be sent as Discord messages, including: text formatting (bold, italic, underline, strikethrough, spoilers), headers, subtext, code blocks, block quotes, lists, and masked links.
development
Discord bot development - community management, moderation, notifications, and AI integration
development
Auto-deploy a Discord AI bot connected to OpenClaw Gateway. Handles Node.js bot setup, PM2 process management, and Gateway API integration. Use when the user has completed Discord Bot onboarding and needs the bot deployed and running.