minimax-music-playlist について
聴取履歴やユーザーの説明から好みを分析し、テーマに沿ったプレイリスト、楽曲、カバー画像を生成するスキルです。好みに合わせた音楽を作り、再生やフィードバックの記録も行いたい人向けです。
主な機能
- 01聴取データから好みのプロフィールを作成
- 02テーマに沿ったプレイリストを計画
- 03mmxで楽曲を生成
- 04正方形のカバー画像を作成
- 05プレイリストとフィードバックを保存・再生
活用シーン
- 01聴取履歴をもとに新しいプレイリストを作成
- 02通勤や夜向けの音楽を用意
- 03楽曲とカバー画像を生成して再生
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ minimax-ai/ skills --skill minimax-music-playlistインストール後、Claude Code で/minimax-music-playlistを入力して読み込まれたか確認します。
詳細
MiniMax Music Playlist — パーソナライズされたプレイリスト生成ツール
ユーザーの音楽の好みを分析し、好みのプロフィールを作成して、パーソナライズされたプレイリストとアルバムカバーを生成します。このスキルはエージェントからの呼び出しとユーザーからの直接の呼び出しの両方に対応しており、状況に応じて対話スタイルを調整します。
前提条件
- mmx CLI — 音楽と画像の生成に使用します。インストール:
npm install -g mmx-cli。認証:mmx auth login --api-key <key>。 - Python 3 — その場で作成するスキャンスクリプトに使用します(標準ライブラリのみ、pip 不要)。
- オーディオプレーヤー —
mpv、ffplay、またはafplay(macOS 標準搭載)。
言語
ユーザーのメッセージから使用言語を判定します。ユーザー向けのテキストはすべて、ユーザーのプロンプトと同じ言語にしてください。言語を混在させないでください。ユーザーが中国語で書いた場合、出力(プロフィールの要約、テーマの提案、プレイリストのプラン、再生情報)もすべて中国語にしてください。英語の場合は、すべて英語にしてください。
すべての mmx 生成プロンプトは、品質を高めるため英語にしてください。
各曲の歌詞の言語は、ユーザーインターフェースの言語ではなく、ジャンルに合わせてください(K-pop → 韓国語、J-pop → 日本語など)。
ワークフロー
1. Scan local music apps → 2. Build taste profile → 3. Plan playlist
→ 4. Generate songs (mmx music) → 5. Generate cover (mmx image) → 6. Play → 7. Save & feedback
ステップ 1:音楽の聴取データを収集する
利用可能なソースから、ユーザーの聴取データを収集します。
対応ソース:
| ソース | 方法 | データ形式 |
|---|---|---|
| Apple Music | osascript で Music.app に問い合わせる(Apple 公式の AppleScript インターフェース) | トラック名、アーティスト名、アルバム、ジャンル、再生回数 |
| Spotify | Spotify のプライバシー設定からユーザー自身がデータをエクスポートする | ZIP 内の JSON ファイル(Streaming_History_Audio_*.json) |
| 手動入力 | ユーザーが好みを直接説明する | 自由形式のテキスト |
Spotify データのエクスポート手順: Spotify は有用なデータをローカルに保存しません。Spotify の聴取履歴を含めるには、まずユーザーが Spotify のデータをすでにエクスポートしているか確認します。
- 既存のエクスポートを検索します:
find ~ -maxdepth 4 -name "my_spotify_data.zip" -o -name "Streaming_History_Audio_*.json" 2>/dev/null - 見つかった場合は、使用するかどうかをユーザーに確認します
- ZIP の場合は解凍し、
Spotify Extended Streaming History/Streaming_History_Audio_*.jsonを探します - 見つからない場合は、Spotify のプライバシーページを開きます:
open https://www.spotify.com/account/privacy/ - ログインし、「Download your data」までスクロールして「Request data」をクリックするようユーザーに伝えます
- 今回は Spotify をスキップして、ほかのソースで処理を続けます。データのエクスポートが届いた後(通常は数日後)に、プレイリストスキルを再実行できることをユーザーに伝えます
Spotify データ形式:
エクスポートには Streaming_History_Audio_YYYY.json ファイルが含まれます(年ごとに 1 つ)。各ファイルは聴取イベントの JSON 配列です。抽出する主なフィールドは次のとおりです。
master_metadata_album_artist_name— アーティスト名master_metadata_track_name— トラック名master_metadata_album_album_name— アルバム名ms_played— 再生時間(ミリ秒)。重みとして使用します(長いほど、強いシグナルです)ts— タイムスタンプ
ms_played < 30000(30 秒未満で、スキップされた可能性が高い)のエントリーは除外します。
ip_addr やその他の機微なフィールドは使用も保存もしないでください。
各ソースから抽出する情報:
- トラック名とアーティスト名(主なシグナル)
- プレイリスト名と収録内容(例:「Chinese Traditional」という名前のプレイリストは、そのジャンルの好みを示しています)
- 利用可能な場合は、再生回数やストリーミング時間(頻繁に再生されたトラックほど重く評価します)
- 利用可能な場合は、シーンやムードのタグ
手順:
- Apple Music が利用可能か確認します(
osascriptで問い合わせます) - 提供できる Spotify データのエクスポート ZIP があるかユーザーに尋ねます
- 利用可能なソースがない場合は、好みを手動で説明するようユーザーに尋ねます
**プライバシー規則:**生のトラック一覧をユーザーに見せないでください。集計した統計情報のみを表示してください。
ステップ 2:好みのプロファイルを作成する
スキャンしたデータから、以下を網羅した好みのプロファイルを作成します。
- ジャンルの分布 — ユーザーがよく聴くスタイル(例:J-pop 20%、R&B 15%、クラシック 10%)
- ムードの傾向 — 好みの感情的な雰囲気(メランコリック、エネルギッシュ、穏やか、ロマンチックなど)
- ボーカルの好み — 男声と女声の割合
- テンポの好み — スロー/ミディアム/アップビート/速いの分布
- 言語の分布 — zh、en、ja、ko など
- トップアーティスト — 最もよく聴くアーティスト
アーティスト名からジャンルやムードを推測する方法: ほとんどの生データには、ジャンルのタグがなく、アーティスト名と曲名しかありません。情報を補完するには、次の手順を実行します。
<SKILL_DIR>/data/artist_genre_map.jsonにあるローカルのマッピングテーブルでアーティストを検索します — このテーブルには、ジャンル、ボーカルの種類、言語があらかじめ登録された人気アーティストが 20,000 組含まれています- マッピングテーブルにないアーティストについては、MusicBrainz API に問い合わせます。
https://musicbrainz.org/ws/2/artist/?query=artist:<name>&fmt=json— レスポンスからジャンルタグを抽出します。レート制限(1 req/sec)を守ってください — 再問い合わせを避けるため、結果を<SKILL_DIR>/data/artist_cache.jsonにキャッシュします - MusicBrainz から結果が返されない場合、そのアーティストはスキップします
プロファイルのキャッシュ:
- プロファイルを
<SKILL_DIR>/data/taste_profile.jsonに保存します - 7 日未満のプロファイルがある場合は、それを再利用します(再スキャンの選択肢を提示します)
- 7 日以上経過しているか、プロファイルがない場合は、再作成します
ユーザーに概要を表示します:
Your Music Profile:
Sources: Apple Music 230 | Spotify 140
Genres: J-pop 20% | R&B 15% | Classical 10% | Indie Pop 9%
Moods: Melancholic 25% | Calm 20% | Romantic 18%
Vocals: Female 65% | Male 35%
Top artists: Faye Wong, Ryuichi Sakamoto, Taylor Swift, Jay Chou, Taeko Onuki
エージェントから明確なパラメーターが指定されて呼び出された場合は、確認を省略して続行します。 ユーザーから直接呼び出された場合は、続行する前にプロファイルが正しいかどうかを確認します。
ステップ 3:プレイリストを計画する
生成する前に、テーマやシーンをユーザーに尋ねてください。 これはワークフローにおける唯一の対話ステップです。それ以外のステップはすべて自動で実行されます。
呼び出し時にテーマがすでに指定されている場合(例:エージェントまたはユーザーが「深夜に聴くチルなプレイリストを生成して」と指定した場合)は、そのテーマをそのまま使用して質問を省略します。 指定されていない場合は、次のように尋ねます。
What theme would you like for your playlist? Here are some suggestions:
- "Late night chill" — relaxing slow songs
- "Commute" — upbeat and energizing
- "Rainy day" — melancholic & cozy
- "Surprise me" — random based on your taste
Or tell me your own vibe!
ユーザーがテーマを選んだら、その後の生成、カバー作成、再生、保存まで自動的に進めます。それ以降の確認は不要です。
プレイリストのパラメーターを決定します。
- テーマ/ムード — ユーザーの入力を使用するか、プロファイルの最上位のムードをデフォルトとして使用します
- 曲数 — ユーザーの入力を使用するか、デフォルトの 5 曲を使用します
- ジャンルの組み合わせ — プロファイルに基づいて重み付けし、バリエーションを持たせます
曲ごとの歌詞の言語はジャンルに応じて決まります。
| ジャンル | 歌詞の言語 |
|---|---|
| K-pop、韓国 R&B/バラード | 韓国語 |
| J-pop、シティポップ、J-rock | 日本語 |
| C-pop、中国風、Mandopop | 中国語 |
| 欧米のポップ/インディー/ロック/ジャズ/R&B | 英語 |
| ラテンポップ、ボサノバ | スペイン語/ポルトガル語 |
| インストゥルメンタル、ローファイ、アンビエント | 歌詞なし(--instrumental) |
ボーカルの説明を使って、言語を mmx プロンプトに自然に含めます。
- 良い例:
"A melancholy Chinese R&B ballad with a gentle introspective male voice, electric piano, bass, slow tempo" - 悪い例:
"R&B ballad, melancholy... sung in Chinese"
生成前に、プレイリストの計画を表示します。 各曲について 2 行で表示します。
1 行目にはジャンル、ムード、ボーカル/言語のタグを表示し、2 行目には曲の短い説明を表示します。計画、説明、ムード、ラベルなど、ユーザーに表示するすべてのテキストは、ユーザーのプロンプトと同じ言語にしてください。 mmx に渡す実際の --prompt のみ英語にします。これは内部用であり、ユーザーには表示しないでください。例:
Playlist Plan: Late Night Chill (5 songs)
1. Neo-soul R&B — introspective English/male vocal
A mellow neo-soul R&B ballad with warm baritone, electric piano, smooth bass
2. Lo-fi hip-hop — dreamy Instrumental
Dreamy lo-fi with sampled piano, vinyl crackle, soft electronic drums
3. Smooth jazz — romantic English/female vocal
Silky female voice, saxophone, piano, romantic starlit night
4. Indie folk — melancholic English/male vocal
Tender male voice, acoustic guitar, harmonica, quiet solitude
5. Ambient electronic — calm Instrumental
Soft synth pads, gentle arpeggios, dreamy atmosphere
計画を表示したら、確認を求めずにそのまま生成に進みます。ユーザーはすでにテーマを選択しているため、計画は承認のためではなく、内容を明示するために表示します。
Step 4: 曲を生成する
mmx music generate を使って、すべての曲を生成します。並行して生成してください(最大5曲)。
# Example: 5 songs in parallel
mmx music generate --prompt "<english_prompt_1>" --lyrics-optimizer \
--out ~/Music/minimax-gen/playlists/<name>/01_desc.mp3 --quiet --non-interactive &
mmx music generate --prompt "<english_prompt_2>" --instrumental \
--out ~/Music/minimax-gen/playlists/<name>/02_desc.mp3 --quiet --non-interactive &
# ... more songs ...
wait
主なフラグ:
--lyrics-optimizer— プロンプトから歌詞を自動生成します(ボーカルトラック用)--instrumental— ボーカルなし--vocals "<description>"— ボーカルのスタイル(例:「温かみのある中国人男性のバリトン」)--genre、--mood、--tempo、--instruments— 詳細な指定--quiet --non-interactive— バッチモードでインタラクティブな出力を抑制します--out <path>— ファイルに保存します
ファイル名: <NN>_<short_desc>.mp3(例:01_rnb_midnight.mp3)
出力ディレクトリ: ~/Music/minimax-gen/playlists/<playlist_name>/
曲の生成に失敗した場合は、スキップする前に1回再試行してください。エラーを記録し、残りの曲の処理を続けます。
Step 5: アルバムカバーを生成する
アルバムカバーは曲の生成(Step 4)と並行して生成し、曲の生成後には行わないでください。
曲の生成呼び出しと並行して、mmx image generate の呼び出しを開始します。
プレイリストのテーマ、ムード、ジャンルの組み合わせを反映したプロンプトを作成します。画像はアルバムカバーらしい、芸術的で印象的なものにしてください。文字どおりの描写は避けます。
mmx image generate \
--prompt "<cover description based on playlist theme and mood>" \
--aspect-ratio 1:1 \
--out-dir ~/Music/minimax-gen/playlists/<playlist_name>/ \
--out-prefix cover \
--quiet
プロンプトの指針:
- アルバムカバーには抽象的・芸術的なスタイルが最適です
- 代表的なムードとジャンルを指定します(例:「夢のような深夜の街並み、ネオンの反射、ローファイな美学」)
- 画像プロンプトに文字や曲名を含めないでください
- アスペクト比は1:1(正方形、標準的なアルバムカバー)にしてください
Step 6: 再生
利用可能なプレーヤーを検出し、プレイリストを順番に再生します。
| プレーヤー | コマンド | 操作 |
|---|---|---|
| mpv | mpv --no-video <file> | q でスキップ、Space で一時停止、矢印キーでシーク |
| ffplay | ffplay -nodisp -autoexit <file> | q でスキップ |
| afplay | afplay <file> | Ctrl+C でスキップ |
プレイリストディレクトリ内のすべての .mp3 ファイルを、ファイル名順に再生します。
このセッションで生成した曲だけを再生してください。以前の実行時の古いファイルがディレクトリにある場合は、先に削除するか、既知のファイル名で絞り込んでください。
プレーヤーが見つからない場合は、ファイルパスを表示するだけにします。
Step 7: 保存とフィードバック
プレイリストのメタデータを <playlist_dir>/playlist.json に保存します:
{
"name": "Late Night Chill",
"theme": "late night chill",
"created_at": "2026-04-11T22:00:00",
"song_count": 5,
"cover": "cover_001.png",
"songs": [
{"index": 1, "filename": "01_rnb_midnight.mp3", "prompt": "...", "rating": null}
]
}
ユーザーがその場にいる場合は、曲ごとまたは全体についてフィードバックを求めます。今後のプレイリストを改善できるよう、好みのプロファイルのフィードバック欄を更新し、好みまたは苦手なジャンルやプロンプトを記録します。
プレイリストの再生
以前のプレイリストを再生するよう求められた場合は、ls ~/Music/minimax-gen/playlists/ を実行して利用可能なプレイリストを表示し、選択されたものを再生します。
注意事項
- エージェントによる呼び出しとユーザーによる呼び出し:テーマ/シーンに関する質問(Step 3)が唯一のインタラクティブな接点です。呼び出し時にテーマがすでに指定されている場合は、質問を省略します。それ以外の処理はすべて自律的に実行します。
- スクリプトをハードコードしない:必要に応じて、スキャンや分析用のスクリプトをその場で作成します。Python の標準ライブラリのみを使用します。重複処理を避けるため、結果をキャッシュします。
- スキルディレクトリ:
<SKILL_DIR>は、この SKILL.md ファイルがあるディレクトリです。 データ/キャッシュファイルは<SKILL_DIR>/data/に保存します。 - mmx のプロンプトはすべて英語にします。生成品質が最も高くなります。