mcpField
M
minimax-music-playlist

minimax-music-playlist

github.com/minimax-aiクリエイティブ・メディア13.7k1.4k 回インストール28 週間前に更新
リポジトリ

minimax-music-playlist について

聴取履歴やユーザーの説明から好みを分析し、テーマに沿ったプレイリスト、楽曲、カバー画像を生成するスキルです。好みに合わせた音楽を作り、再生やフィードバックの記録も行いたい人向けです。

主な機能

  1. 01聴取データから好みのプロフィールを作成
  2. 02テーマに沿ったプレイリストを計画
  3. 03mmxで楽曲を生成
  4. 04正方形のカバー画像を作成
  5. 05プレイリストとフィードバックを保存・再生

活用シーン

  1. 01聴取履歴をもとに新しいプレイリストを作成
  2. 02通勤や夜向けの音楽を用意
  3. 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 Musicosascript で Music.app に問い合わせる(Apple 公式の AppleScript インターフェース)トラック名、アーティスト名、アルバム、ジャンル、再生回数
SpotifySpotify のプライバシー設定からユーザー自身がデータをエクスポートするZIP 内の JSON ファイル(Streaming_History_Audio_*.json)
手動入力ユーザーが好みを直接説明する自由形式のテキスト

Spotify データのエクスポート手順: Spotify は有用なデータをローカルに保存しません。Spotify の聴取履歴を含めるには、まずユーザーが Spotify のデータをすでにエクスポートしているか確認します。

  1. 既存のエクスポートを検索します:find ~ -maxdepth 4 -name "my_spotify_data.zip" -o -name "Streaming_History_Audio_*.json" 2>/dev/null
  2. 見つかった場合は、使用するかどうかをユーザーに確認します
  3. ZIP の場合は解凍し、Spotify Extended Streaming History/Streaming_History_Audio_*.json を探します
  4. 見つからない場合は、Spotify のプライバシーページを開きます:open https://www.spotify.com/account/privacy/
  5. ログインし、「Download your data」までスクロールして「Request data」をクリックするようユーザーに伝えます
  6. 今回は 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」という名前のプレイリストは、そのジャンルの好みを示しています)
  • 利用可能な場合は、再生回数やストリーミング時間(頻繁に再生されたトラックほど重く評価します)
  • 利用可能な場合は、シーンやムードのタグ

手順:

  1. Apple Music が利用可能か確認します(osascript で問い合わせます)
  2. 提供できる Spotify データのエクスポート ZIP があるかユーザーに尋ねます
  3. 利用可能なソースがない場合は、好みを手動で説明するようユーザーに尋ねます

**プライバシー規則:**生のトラック一覧をユーザーに見せないでください。集計した統計情報のみを表示してください。


ステップ 2:好みのプロファイルを作成する

スキャンしたデータから、以下を網羅した好みのプロファイルを作成します。

  • ジャンルの分布 — ユーザーがよく聴くスタイル(例:J-pop 20%、R&B 15%、クラシック 10%)
  • ムードの傾向 — 好みの感情的な雰囲気(メランコリック、エネルギッシュ、穏やか、ロマンチックなど)
  • ボーカルの好み — 男声と女声の割合
  • テンポの好み — スロー/ミディアム/アップビート/速いの分布
  • 言語の分布 — zh、en、ja、ko など
  • トップアーティスト — 最もよく聴くアーティスト

アーティスト名からジャンルやムードを推測する方法: ほとんどの生データには、ジャンルのタグがなく、アーティスト名と曲名しかありません。情報を補完するには、次の手順を実行します。

  1. <SKILL_DIR>/data/artist_genre_map.json にあるローカルのマッピングテーブルでアーティストを検索します — このテーブルには、ジャンル、ボーカルの種類、言語があらかじめ登録された人気アーティストが 20,000 組含まれています
  2. マッピングテーブルにないアーティストについては、MusicBrainz API に問い合わせます。 https://musicbrainz.org/ws/2/artist/?query=artist:<name>&fmt=json — レスポンスからジャンルタグを抽出します。レート制限(1 req/sec)を守ってください — 再問い合わせを避けるため、結果を <SKILL_DIR>/data/artist_cache.json にキャッシュします
  3. 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: 再生

利用可能なプレーヤーを検出し、プレイリストを順番に再生します。

プレーヤーコマンド操作
mpvmpv --no-video <file>q でスキップ、Space で一時停止、矢印キーでシーク
ffplayffplay -nodisp -autoexit <file>q でスキップ
afplayafplay <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 のプロンプトはすべて英語にします。生成品質が最も高くなります。

コメント