skills/giggle-generation-music/SKILL.md
Use when the user wants to create, generate, or compose music—whether from text description, custom lyrics, or instrumental background music. 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. Triggers: generate music, write a song, compose, create music, AI music, background music, instrumental, beats.
npx skillsauth add giggle-official/skills giggle-generation-musicInstall 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 music via giggle.pro. Supports simplified and custom modes. Submit task → agent proactively polls with --query until done (see Continuous progress updates). No Cron.
API Key: Set system environment variable GIGGLE_API_KEY. Log in to giggle.pro → left sidebar → API Key (API 密钥) to create or copy your key.
Important: Never pass
GIGGLE_API_KEYin exec'senvparameter. API Key is read from system environment variable.
No Retry on Error: If script execution encounters an error, do not retry. Report the error to the user directly and stop.
| User input | Mode | Description | |------------|------|-------------| | User provides full lyrics | Custom mode (B) | Must be lyrics, not description | | User requests instrumental/background music | Instrumental mode (C) | No vocals | | Other cases (description, style, vocals, etc.) | Simplified mode (A) | Use user description as prompt; AI composes |
Key rule: If the user does not provide lyrics, always use simplified mode A. Use the user's description exactly as
--prompt; do not add or rewrite. E.g. user says "female voice, 1 min, ancient romance", use--prompt "female voice, 1 min, ancient romance"directly.
Only when the user input is very vague (e.g. "generate music" with no description), ask:
Question: "What type of music would you like to generate?"
Options: AI compose (describe style) / Use my lyrics / Instrumental
Music generation is asynchronous (typically 1–3 minutes). Submit a task to get task_id, then query until the task reaches a terminal state.
Music generation usually takes ~1–3 minutes. The user does not need to ask you to check progress.
task_id, and expect ~1–3 minutes (longer if the service is busy).--query about every 15–30 seconds until terminal—do not wait for the user to ask.processing 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.First send a message to the user: Music generation is submitted; you will poll on a schedule and report updates—no need to nag. Include task_id from the JSON response.
python3 scripts/giggle_music_api.py --prompt "user description"
python3 scripts/giggle_music_api.py --custom \
--prompt "lyrics content" \
--style "pop, ballad" \
--title "Song Title" \
--vocal-gender female
python3 scripts/giggle_music_api.py --prompt "user description" --instrumental
Response example:
{"status": "started", "task_id": "xxx"}
Store task_id in memory (addMemory):
giggle-generation-music task_id: xxx (submitted: YYYY-MM-DD HH:mm)
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/giggle_music_api.py --query --task-id <task_id>
Between queries, use sleep in shell or separate invocations with delay—do not go silent; summarize each result to the user.
Output handling:
| stdout pattern | Action |
|----------------|--------|
| Plain text with music links (e.g. ready message) | Forward to user as-is; stop polling |
| Plain text with error | Forward to user as-is; stop polling |
| JSON {"status": "processing", "task_id": "..."} (non-terminal) | Tell user current status + that you will keep checking; continue polling |
If the user asks while you are polling, answer with the latest status (extra --query if needed).
Link return rule: Audio links in stdout must be full signed URLs (with Policy, Key-Pair-Id, Signature query params). Do not strip response-content-disposition=attachment when the API returns it; forward links as-is (script only encodes ~ → %7E).
In-flight task: use proactive polling as above.
When the user asks about previous music (older task_id):
--query --task-id xxx directly. Do not resubmit; poll until done if they want continuous updates on that task.| Parameter | Description |
|-----------|-------------|
| --prompt | Music description or lyrics (required in simplified mode) |
| --custom | Enable custom mode |
| --style | Music style (required in custom mode) |
| --title | Song title (required in custom mode) |
| --instrumental | Generate instrumental |
| --vocal-gender | Vocal gender: male / female (custom mode only) |
| --query | Query task status |
| --task-id | Task ID (use with --query) |
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.