mcpField
G
giggle-generation-music

giggle-generation-music

github.com/giggle-officialクリエイティブ・メディア061 回インストール1 日前に更新
リポジトリ

giggle-generation-music について

AIエージェント向けのGiggle Musicスキルです。giggle.proで説明文や歌詞から音楽を生成し、インストゥルメンタルにも対応します。非同期タスクをポーリングして結果を伝えます。

主な機能

  1. 01説明文から音楽を生成
  2. 02歌詞を使った曲のカスタマイズ
  3. 03インストゥルメンタルの生成
  4. 04非同期タスクの進捗確認

活用シーン

  1. 01スタイルの説明から曲を作成
  2. 02インストゥルメンタルの伴奏を作成
  3. 03生成状況を追跡して音声リンクを取得

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/giggle-official/skills --skill giggle-generation-music

インストール後、Claude Code で/giggle-generation-musicを入力して読み込まれたか確認します。

同梱ファイルrequirements.txtscripts/giggle_music_api.py

詳細

Giggle Music

ソース:giggle-official/skills · API:giggle.pro

giggle.pro を使用して AI 音楽を生成します。簡易モードとカスタムモードに対応しています。タスクを送信した後、完了するまでエージェントが --query で自発的にポーリングします(継続的な進捗報告を参照)。Cron は使用しません。

API Key:システム環境変数 GIGGLE_API_KEY を設定します。giggle.pro にログインし、左側のサイドバー → API Key(API 密钥)からキーを作成またはコピーします。

重要:exec の env パラメーターに GIGGLE_API_KEY を絶対に渡さないでください。API Key はシステム環境変数から読み込まれます。

エラー時に再試行しない:スクリプトの実行中にエラーが発生した場合、再試行しないでください。エラーをそのままユーザーに報告し、停止します。


対話ガイド

モードの選択(優先度:高い順)
ユーザー入力モード説明
ユーザーが完全な歌詞を提示カスタムモード(B)説明ではなく、歌詞である必要があります
ユーザーがインストゥルメンタル/BGM をリクエストインストゥルメンタルモード(C)ボーカルなし
その他の場合(説明、スタイル、ボーカルなど)簡易モード(A)ユーザーの説明をプロンプトとして使用し、AI が作曲します

重要なルール:ユーザーが歌詞を提示しない場合は、必ず簡易モード Aを使用してください。ユーザーの説明をそのまま --prompt として使用し、追加や書き換えはしないでください。たとえば、ユーザーが「female voice, 1 min, ancient romance」と言った場合、--prompt "female voice, 1 min, ancient romance" をそのまま使用します。

情報が不足している場合のガイダンス

ユーザー入力が非常に曖昧な場合(例:「音楽を生成して」とだけ述べ、説明がない場合)に限り、次のように質問します。

Question: "What type of music would you like to generate?"
Options: AI compose (describe style) / Use my lyrics / Instrumental

実行フロー:送信と照会

音楽の生成は非同期で行われます(通常 1~3 分)。タスクを送信して task_id を取得し、タスクが終端状態になるまで照会します。


継続的な進捗報告(デフォルト。ユーザーがプロンプトで指定する必要はありません)

音楽の生成には通常約 1~3 分かかります。進捗確認を求められるまで待つ必要はありません。

  1. 送信直後に、タスクを送信したこと、task_id、完了まで約 1~3 分(サービスが混み合っている場合はそれ以上)かかる見込みを伝えます。
  2. 自発的にポーリングします。終端状態になるまで約 15~30 秒ごとに --query を実行します。ユーザーからの依頼を待たないでください。
  3. 照会のたびにステータスを報告します。processing の JSON が返された場合は内容を言い換えて伝え、引き続き確認することを知らせます。無言にならないでください。
  4. 完了時:成功した場合は、完全な署名付き音声リンクを転送します。失敗した場合は、その理由を説明します。約 25 分経っても終端状態にならない場合は、その旨を説明し、task_id を伝え、再試行または後での確認を提案します。
  5. ユーザーがポーリングを明示的に希望しない場合は、タスクを一度送信して task_id を伝え、ユーザーから依頼があったときにのみ照会します。

ステップ 1:タスクを送信する

最初にユーザーへメッセージを送り、音楽生成を送信したこと、定期的にポーリングして進捗を報告すること、催促する必要はないことを伝えます。JSON レスポンスの task_id を含めます。

A:簡易モード
python3 scripts/giggle_music_api.py --prompt "user description"
B:カスタムモード
python3 scripts/giggle_music_api.py --custom \
  --prompt "lyrics content" \
  --style "pop, ballad" \
  --title "Song Title" \
  --vocal-gender female
C:インストゥルメンタル
python3 scripts/giggle_music_api.py --prompt "user description" --instrumental

レスポンス例:

{"status": "started", "task_id": "xxx"}

task_id をメモリに保存します(addMemory)。

giggle-generation-music task_id: xxx (submitted: YYYY-MM-DD HH:mm)

ステップ 2:完了するまでクエリする(デフォルト:積極的なポーリング)

現在のタスクを送信するたびに、ユーザーからの依頼を待つことなく、完了またはタイムアウトするまで(約 15~30 秒ごとに)繰り返し実行します。

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

クエリの合間には、シェルで sleep を使うか、遅延を入れて別々に実行してください。何も伝えずに待たないでください。結果を毎回ユーザーに要約してください。

出力の処理:

stdout のパターンアクション
音楽リンクを含むプレーンテキスト(例:準備完了メッセージ)そのままユーザーに転送し、ポーリングを停止します
エラーを含むプレーンテキストそのままユーザーに転送し、ポーリングを停止します
JSON {"status": "processing", "task_id": "..."}(未完了)現在のステータスと、引き続き確認することをユーザーに伝え、ポーリングを続けます

ユーザーがポーリング中に質問した場合は、最新のステータスで回答します(必要であれば追加で --query を実行します)。

リンクの返却ルール: stdout 内の音声リンクは、完全な署名付き URL(Policy、Key-Pair-Id、Signature のクエリパラメーターを含む)でなければなりません。API の応答に response-content-disposition=attachment が含まれている場合は削除せず、そのままリンクを転送してください(スクリプトでは ~ → %7E の変換のみ行います)。


復旧

処理中のタスク: 上記のとおり積極的にポーリングします。

ユーザーが以前の音楽について尋ねた場合(古い task_id):

  1. task_id がメモリーにある場合 → --query --task-id xxx を直接実行します。再送信しないでください。タスクについて継続的な更新を希望する場合は、完了するまでポーリングします。
  2. task_id がメモリーにない場合 → ユーザーにその旨を伝え、再生成するかどうかを尋ねます。

パラメーターリファレンス

パラメーター説明
--prompt音楽の説明または歌詞(簡易モードでは必須)
--customカスタムモードを有効にする
--style音楽のスタイル(カスタムモードでは必須)
--title曲のタイトル(カスタムモードでは必須)
--instrumentalインストゥルメンタルを生成する
--vocal-genderボーカルの性別:male / female(カスタムモードのみ)
--queryタスクのステータスを確認する
--task-idタスク ID(--query と併用)

コメント