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.
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 exec tool. Never use python3 << '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.