# Giggle Generation Music

> [简体中文](./SKILL.zh-CN.md) | English

- Skill: `storyclaw-official/giggle-generation-music` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add storyclaw-official/giggle-generation-music`
- Raw SKILL.md: https://api.skillmd.com/api/skills/storyclaw-official/giggle-generation-music/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: storyclaw-official (https://skillmd.com/u/storyclaw-official)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/storyclaw-official/giggle-generation-music

---


[简体中文](./SKILL.zh-CN.md) | English

# Giggle Music

**Source**: [storyclaw-official/storyclaw-skills](https://github.com/storyclaw-official/storyclaw-skills) · API: [giggle.pro](https://giggle.pro/)

Generates AI music via giggle.pro. Supports simplified and custom modes. Submit task → query when ready. No polling or Cron.

**API Key**: Set system environment variable `GIGGLE_API_KEY`. See [SETUP.md](SETUP.md).

> **Important**: **Never** pass `GIGGLE_API_KEY` in exec's `env` parameter. API Key is read from system environment variable.

---

## Interaction Guide

### Mode Selection (priority: high to low)

| 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.

### Guidance when info is lacking

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
```

---

## Execution Flow: Submit and Query

Music generation is asynchronous (typically 1–3 minutes). **Submit** a task to get `task_id`, then **query** when the user wants to check status.

---

### Step 1: Submit Task

**First send a message to the user**: "Music generation submitted. Usually takes 1–3 minutes. You can ask me about the progress anytime."

#### A: Simplified Mode
```bash
python3 scripts/giggle_music_api.py --prompt "user description"
```

#### B: Custom Mode
```bash
python3 scripts/giggle_music_api.py --custom \
  --prompt "lyrics content" \
  --style "pop, ballad" \
  --title "Song Title" \
  --vocal-gender female
```

#### C: Instrumental
```bash
python3 scripts/giggle_music_api.py --prompt "user description" --instrumental
```

Response example:
```json
{"status": "started", "task_id": "xxx"}
```

**Store task_id in memory** (`addMemory`):
```
giggle-generation-music task_id: xxx (submitted: YYYY-MM-DD HH:mm)
```

---

### Step 2: Query When User Asks

When the user asks about music progress (e.g. "is my music ready?", "progress?"), run:

```bash
python3 scripts/giggle_music_api.py --query --task-id <task_id>
```

**Output handling**:

| stdout pattern | Action |
|----------------|--------|
| Plain text with music links (🎶 音乐已就绪) | Forward to user as-is |
| Plain text with error | Forward to user as-is |
| JSON `{"status": "processing", "task_id": "..."}` | Tell user "Still in progress, please ask again in a moment" |

**Link return rule**: Audio links in stdout must be **full signed URLs** (with Policy, Key-Pair-Id, Signature query params). Correct: `https://assets.giggle.pro/...?Policy=...&Key-Pair-Id=...&Signature=...`. Keep as-is when forwarding.

---

## Recovery

When the user asks about previous music progress:

1. **task_id in memory** → Run `--query --task-id xxx` directly. **Do not resubmit**
2. **No task_id in memory** → Tell the user, ask if they want to regenerate

---

## Parameter Reference

| 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) |

