Suno Upload について
Suno Uploadは、Chromeの自動操作で構造化された`prompt.md`の曲プロンプトをSunoの作成画面に入力するスキルです。プロンプトファイルからSunoの曲を作る際に、フォーム入力やモデル設定、生成状況の確認を行います。
主な機能
- 01タイトル、歌詞、スタイル、パラメーターの解析
- 02Sunoの作成画面をカスタムモードで開く
- 03曲の項目と詳細設定の入力
- 04座標ドラッグによるスライダー設定
- 05作成の送信と生成状況の確認
活用シーン
- 01準備済みの`prompt.md`をSunoに送信
- 02複数のプロンプトファイルから曲を作成
- 03手作業でコピーせず歌詞や設定を入力
MCP 対応
有効なChrome MCP サーバーが必要です。ブラウザー操作ツールを使ってSunoの画面を移動し、項目を入力します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ nwp/ suno-song-creator-plugin --skill suno-uploadインストール後、Claude Code で/suno-uploadを入力して読み込まれたか確認します。
詳細
Suno のアップロード
Chrome の自動操作を使用して、Suno のプロンプトファイルを suno.com に自動でアップロードします。このスキルは prompt.md ファイルを解析し、Suno Create のインターフェースに必要なすべての項目を入力します。
✅ 完全自動化 — 人の手による操作は不要です
このスキルを使うと、Suno の楽曲作成プロセスを最初から最後まで完全に自動化できます。
- ✅ prompt.md ファイルを解析 — タイトル、歌詞、スタイル、モデル、すべてのパラメーターを抽出します
- ✅ Suno に自動で移動 — suno.com/create を開き、Custom モードに切り替えます
- ✅ フォームのすべての項目に入力 — 複雑な React スライダーコンポーネントも含みます
- ✅ スライダーの自動操作に対応 — 座標ベースのドラッグを使い、正確に調整します
- ✅ 送信して進捗を監視 — Create ボタンをクリックし、生成状況を追跡します
- ✅ 検証・テスト済み — すべてのパラメーターを制御して、楽曲の生成に成功しています
手動での操作は不要です — prompt.md ファイルを指定するだけで実行できます。
前提条件
- Chrome MCP サーバーがインストールされ、アクティブであること
- 利用可能なクレジットがあるSuno アカウント
- Suno の標準的な楽曲作成形式のprompt.md ファイル
使用する場面
このスキルは、次の用途に使用できます。
- 生成した
prompt.mdファイルを Suno にアップロードする - suno.com での楽曲作成プロセスを自動化する
- 複数のプロンプトを効率よく送信する
- 歌詞や設定を手動でコピー&ペーストする手間を省く
ワークフロー
ステップ 1:プロンプトファイルを探す
現在のディレクトリとそのサブディレクトリで prompt.md ファイルを検索します。
複数のファイルが見つかった場合:
- 次の情報を含む一覧を表示します。
- ファイルパス
- 楽曲タイトル(YAML フロントマターから取得)
- プロジェクト名(YAML フロントマターから取得)
- 最終更新日
- AskUserQuestion を使用して、対話形式で選択します
- すべての情報を含む選択肢を明確に提示します
ファイルが 1 つ見つかった場合:
- 自動で選択します
- 選択したファイルを表示します
- 基本情報(タイトル、プロジェクト)を表示します
ファイルが見つからない場合:
- エラーメッセージ:「現在のディレクトリまたはサブディレクトリに prompt.md ファイルが見つかりません。」
- 案内:「Suno のプロンプトファイルがあるディレクトリに移動するか、先に suno-song-creator スキルを使ってプロンプトを作成してください。」
- 安全に終了します
使用するツール:
- Glob —
**/prompt.mdパターンで検索 - Read — ファイル一覧表示用に YAML フロントマターを抽出
- AskUserQuestion — 対話形式でファイルを選択
Step 2: プロンプトファイルを解析する
選択した prompt.md ファイルを読み取り、データを抽出します。
解析方法:
1. YAML フロントマター(1~12 行目):
---
title: "Song Title Here"
project: "Project Name"
---
title:の値を抽出します- 囲む引用符があれば削除します
- これを「曲名」フィールドとして使用します
2. 構造化プロンプト(「### Structured Prompt」見出しの下):
見出し ### Structured Prompt を探し、3 つのバッククォートの間にある内容をすべて抽出します。
genre: "bubblegum pop, synth-pop, disco-influenced pop..."
vocal: "bright female pop vocals, playful delivery..."
instrumentation: "synth bass, disco-inspired drums..."
production: "polished modern pop, wide stereo mix..."
mood: "playful, sarcastic, witty, upbeat..."
重要:
- ブロック全体をそのままコピーします(5 行すべて)
- 個々のフィールドは解析しないでください
- このブロック全体を Suno の「Styles」フィールドに入力します
- 引用符と書式はすべて保持します
3. 歌詞セクション(「## Lyrics」見出しの後):
## Lyrics を探し、3 つのバッククォートの間にある内容をすべて抽出します。
///*****///
[Verse 1 | playful | bright production]
Lyrics text here...
[Chorus | upbeat | full production]
Chorus lyrics here...
解析に関する重要なルール:
- 区切り線を削除する:冒頭の
///*****///はスキップします(ファイル内の区切りにすぎません) - すべてのメタタグを保持する:
[Verse 1 | playful | bright production]— Suno が使用します! - セクションマーカーを保持する:
[Verse]、[Chorus]、[Bridge]など - すべての空行を保持する:書式を正確に維持します
- 最初の実際の歌詞から開始する:区切り線を削除した後、最初の
[Verse...]タグから始めます
抽出例:
File contains:
///*****///
[Verse 1 | playful | bright production]
You showed up late...
Extract as:
[Verse 1 | playful | bright production]
You showed up late...
4. モデルの選択(「### Model and Parameters」セクションから):
このセクションの先頭付近にあるモデル指定を探します。
**Model:** v5 (cleanest audio, most natural vocals - best for modern pop)
抽出ルール:
- モデル:
**Model:**の後から開き括弧の前までの値を抽出します- 想定される値:「v5」、「v4.5」、「v4.5+」、「v4」
- 空白をトリミングします:「v5」
- 指定がない場合は「v5」をデフォルトとして使用します
5. パラメーター(「### Model and Parameters」セクションから):
この見出しの下にある箇条書きを探します。
- Weirdness: 40%
- Style Influence: 60%
- Vocal Gender: Female
- Exclude Styles: Rock, Metal, Country
抽出ルール:
- Weirdness:「%」の前にある数値を抽出します(例:「40%」から「40」)
- 「30-40%」のような範囲の場合は、中間値(35)を使用します
- スライダー値に変換します:そのまま使用します(0~100 のスケール)
- Style Influence:「%」の前にある数値を抽出します(例:「60%」から「60」)
- 「60-70%」のような範囲の場合は、中間値(65)を使用します
- スライダー値に変換します:そのまま使用します(0~100 のスケール)
- Vocal Gender:「:」の後の値を抽出し、空白をトリミングします
- 想定される値:「Female」、「Male」、または未指定
- Suno の性別ボタンに対応付けます
- Exclude Styles:「:」の後にあるカンマ区切りのリストを抽出します
- 空白をトリミングします:「Rock, Metal, Country」
- カンマ区切りの文字列として保持します
柔軟な処理:
- フィールドがない場合:妥当なデフォルト値を使用するか、省略します
- YAML の形式が不正な場合:代替手段として正規表現による抽出を試みます
- 歌詞セクションが空の場合:エラーとします(Suno には歌詞が必要です)
- パラメーターがない場合:Suno のデフォルト値を使用します(スライダーは 50%)
使用するツール:
- Read — prompt.md ファイルを読み取ります
- 正規表現/文字列解析 — 構造化データを抽出します
検証:
- タイトルが存在し、空でないこと
- 歌詞が存在し、空でないこと
- 構造化プロンプトが存在し、空でないこと
- パラメーターが有効な範囲内(スライダーは 0~100)であること
Step 3: 解析したデータを表示する
ファイルから抽出した内容をユーザーに表示し、確認してもらいます。
形式:
📋 Parsed Prompt Data:
Title: "Fixer-Upper"
Project: "Pop Songs I Love"
Model: v5
Lyrics Preview (first 200 chars):
[Verse 1 | playful | bright production]
You showed up late with pizza stains
On that shirt you wore last Tuesday
Asked me if I'd do your laundry
While you played your gam...
(Note: Divider line removed for Suno upload)
Style/Genre (from structured prompt):
genre: "bubblegum pop, synth-pop, disco-influenced pop..."
[Full 5-line structured prompt shown]
Parameters:
- Weirdness: 40%
- Style Influence: 60%
- Vocal Gender: Female
- Exclude Styles: Rock, Metal, Country
Ready to upload to Suno!
目的:
- ユーザーが解析結果の正しさを確認できます
- 自動処理の開始前に問題を検出できます
- プロセスへの信頼性が高まります
ステップ 4:Chrome セッションを初期化する
ブラウザー自動化環境をセットアップします。
手順:
tabs_context_mcpを呼び出して現在のタブ状態を取得します- MCP タブグループが存在するか確認します
- 利用可能なタブ ID を取得します
- MCP タブグループがない場合:
createIfEmpty: trueを指定してtabs_context_mcpを呼び出します - 新しいタブを作成します:
tabs_create_mcp- Suno の自動化には新しいタブを使用します
- ユーザーの既存のタブへの干渉を防ぎます
- suno.com に移動します:
navigate(url: "https://suno.com") - ページの読み込みを待ちます:
computer(action: wait, duration: 3)
エラー処理:
- 移動に失敗した場合:1 回再試行し、その後、接続を確認するようユーザーに依頼します
- タブの作成に失敗した場合:ユーザーに通知して終了します
- すでに suno.com を表示している場合:新しいタブを作成するか、既存のタブを使うかユーザーに確認します
使用するツール:
- tabs_context_mcp - タブのコンテキストを取得します
- tabs_create_mcp - 新しいタブを作成します
- navigate - URL に移動します
- computer (wait) - ページの読み込みを待ちます
ステップ 5:作成画面に移動する
ホームページからカスタムモードの作成ページに移動します。
手順:
-
作成ページに移動します:
- Use navigate tool: "https://suno.com/create" - OR use find + computer tools to click "Create" button - Wait 2 seconds for page load -
カスタムモードに切り替えます:
- Use find tool: query="Custom tab button" - Use computer tool: left_click on the Custom button ref - Wait 1 second for mode switch -
カスタムモードが読み込まれたことを確認します:
- Take screenshot for debugging (optional) - Use read_page to verify "Lyrics" field is present
見つける UI 要素:
- 作成ボタン/リンク(参照 ID は異なるため、find ツールを使用します)
- カスタムタブのボタン(「シンプル」モードとの切り替え)
- 歌詞のテキストエリア(カスタムモードが読み込まれたことを確認します)
エラー処理:
- 作成ページが読み込まれない場合:移動を 1 回再試行します
- カスタムボタンが見つからない場合:スクリーンショットを撮り、ユーザーに通知します
- タイムアウトした場合:Suno のステータスを確認するようユーザーに依頼します
使用するツール:
- navigate - URL に直接移動します
- find - 説明に基づいて UI 要素を特定します
- computer - ボタンをクリックします
- read_page - ページが正しく読み込まれたことを確認します
ステップ 6:フォームの各フィールドに入力する
解析したデータを各フォームフィールドに入力します。
フィールドごとの手順:
a. モデルセレクター(Create エリアの上部)
- Use find: query="v5" or "model selector dropdown"
- Location: Top of create area, near Simple/Custom tabs
- Current default: v5
- Click to open dropdown if not already showing target model
- Select the parsed model (v5, v4.5, v4.5+, or v4)
データ: ステップ 2 のモデル(例:「v5」) 注記: UI の調査に基づくと、モデルセレクターは上部に表示されています。 実装:
- モデルが「v5」(デフォルト)の場合:すでに選択されているため、スキップしてもかまいません
- モデルが異なる場合:ドロップダウンをクリックし、適切なオプションを選択します
- find を使って特定のモデルオプションを見つけます
- computer.left_click を使って選択します
b. 歌詞のテキストエリア
- Use find: query="lyrics textarea"
- Use form_input: ref=<lyrics_ref>, value=<full_lyrics_text>
- Or use computer.type if form_input fails
データ: ステップ 2 の歌詞全文(区切り行 ///*****/// は削除しますが、[Verse 1 | ...] のようなすべてのメタタグは保持します)
c. スタイルフィールド(構造化プロンプト)
- Use find: query="styles textbox" or "style of music"
- Use form_input: ref=<styles_ref>, value=<structured_prompt_block>
データ: 5 行の構造化プロンプトブロック全体
d. 曲名(任意)
- Use find: query="song title optional"
- Use form_input: ref=<title_ref>, value=<song_title>
データ: YAML フロントマターのタイトル
e. 詳細オプションを展開する
- Use find: query="Advanced Options"
- Use computer: left_click on Advanced Options button
- Wait 1 second for expansion
f. 除外するスタイル
- Use find: query="exclude styles"
- Use form_input: ref=<exclude_ref>, value=<exclude_styles_list>
データ: カンマ区切りの除外リスト(例:「Rock, Metal, Country」)
g. ボーカルの性別
- Use find: query="Female" (or "Male" based on parsed data)
- Use computer: left_click on the appropriate gender button
データ: パラメーターの「Female」または「Male」 注記: 指定がない場合は、このフィールドをスキップします(Suno のデフォルトを使用します)。
h. Weirdness スライダー
データ: 解析した Weirdness の値(0~100)
操作方法(座標ベースのドラッグ):
Suno のスライダーは標準 HTML 入力ではなく、カスタム React コンポーネント(ARIA ロールを持つ DIV)です。値を設定するには、座標ベースのマウスドラッグが必要です。
実装手順:
-
スライダー要素を見つける:
Use find: query="Weirdness slider" This returns a ref to the slider with role="slider" -
JavaScript で目標位置を計算する:
const slider = document.querySelector('[role="slider"][aria-label*="Weirdness"]'); const thumb = slider.children[slider.children.length - 1]; const sliderRect = slider.getBoundingClientRect(); const thumbRect = thumb.getBoundingClientRect(); // Current thumb center position const startX = thumbRect.left + thumbRect.width / 2; const startY = thumbRect.top + thumbRect.height / 2; // Target position (e.g., 40% along slider width) const targetPercent = 40; // Use parsed value const targetX = sliderRect.left + (sliderRect.width * (targetPercent / 100)); const targetY = sliderRect.top + sliderRect.height / 2;javascript_tool を使って実行し、座標を返します
-
つまみを目標位置までドラッグする:
Use computer: left_click_drag - start_coordinate: [startX, startY] (from JavaScript) - coordinate: [targetX, targetY] (from JavaScript)
この方法が機能する理由:
- マウスのドラッグイベントが完了すると React の状態が更新されます
- 座標計算により、正確な位置に設定できます
- getBoundingClientRect() により、正確なピクセル位置を取得できます
- つまみ(最後の子要素)をドラッグすると、React の onChange ハンドラーが呼び出されます
i. Style Influence スライダー
データ: 解析した Style Influence の値(0~100)
操作方法(Weirdness と同じ):
同じ座標ベースのドラッグ方法を使用します。
-
スライダーを見つける:
Use find: query="Style Influence slider" -
JavaScript で座標を計算する:
const slider = document.querySelector('[role="slider"][aria-label*="Style Influence"]'); const thumb = slider.children[slider.children.length - 1]; const sliderRect = slider.getBoundingClientRect(); const thumbRect = thumb.getBoundingClientRect(); const startX = thumbRect.left + thumbRect.width / 2; const startY = thumbRect.top + thumbRect.height / 2; const targetPercent = 60; // Use parsed value const targetX = sliderRect.left + (sliderRect.width * (targetPercent / 100)); const targetY = sliderRect.top + sliderRect.height / 2; -
目標位置までドラッグする:
Use computer: left_click_drag from [startX, startY] to [targetX, targetY]
両方のスライダーに関する重要な注意事項:
- form_input は使用しないでください(「Element type 'DIV' is not a supported form input」エラーで失敗します)
- ARIA 属性を直接設定しないでください(React の状態が更新されません)
- キーボードイベントは使用しないでください(矢印キーでは状態が更新されません)
- 計算した座標で left_click_drag を使用してください
- 精度:通常は ±1% 以内で、許容範囲です
実装上の注意事項:
- フィールドは並列ではなく、順番に入力します
- UI の安定性を保つため、フィールドへの入力ごとに 0.5 秒待ちます
- デバッグのため、重要なフィールドの入力後にスクリーンショットを撮影します
- フィールドが見つからない場合は、警告を記録して続行します(任意フィールドの場合)
- 必須フィールドへの入力に失敗した場合は、エラーを出して終了します
使用するツール:
- find - フォーム要素を見つける
- form_input - テキストフィールドに入力する
- computer(left_click) - ボタンのクリックやスライダーの操作
- computer(type) - テキスト入力の代替手段
- computer(wait) - 安定性を保つための待機
ステップ 7:確認とレビュー
送信する前に、送信内容をユーザーに提示し、確認を求めます。
手順:
-
入力済みフォームのスクリーンショットを撮影する:
- Use computer: screenshot action - Capture the entire Create form area - User can visually verify all fields -
概要をユーザーに表示する:
✅ Suno Form Ready for Submission: Title: "Fixer-Upper" Lyrics: 140 lines (with meta tags preserved) Style: bubblegum pop, synth-pop, disco-influenced pop... Weirdness: 40% Style Influence: 60% Vocal Gender: Female Exclude Styles: Rock, Metal, Country [Screenshot of filled form displayed above] -
確認を求める:
Use AskUserQuestion: - Question: "Submit this song to Suno for generation?" - Options: * "Yes, create the song" (proceed to submit) * "No, cancel" (exit without submitting) - Wait for explicit user response -
回答に応じて処理する:
- 「Yes」の場合:ステップ 8 に進みます
- 「No」の場合:ユーザーに伝え、問題なく終了します
- メッセージ:「アップロードをキャンセルしました。フォームには入力済みですが、送信されていません。必要に応じて、ブラウザーで手動で内容を確認し、送信できます。」
重要な理由:
- クレジットを消費する前に、ユーザーが最終決定できます
- 送信前に解析エラーを発見できます
- 画面上で確認することで、信頼性が高まります
- 誤送信を防ぎます
使用するツール:
- computer(screenshot) - フォームを撮影する
- AskUserQuestion - 明示的な確認を得る
ステップ 8:送信と監視
フォームを送信し、曲の URL を監視します。
送信:
-
Create ボタンを見つけます:
- Use find: query="Create song button" or "Create button" - Expected ref like: ref_943 (based on exploration) -
Create ボタンをクリックします:
- Use computer: left_click on Create button ref - Wait 3 seconds for submission processing -
応答を監視します:
- Page may redirect or update with song generation status - Look for success indicators or error messages - Wait up to 10 seconds for initial response
URL の抽出(生成が開始された場合):
-
曲の URL を確認します:
- Suno typically generates 2 songs per creation - URLs may appear immediately or after processing - Format: https://suno.com/song/[song-id] -
URL を抽出します:
- Use read_page to get page content - Look for song URLs in the recent creations area - OR check the workspace/library section -
結果をユーザーに表示します:
✅ Song submitted to Suno! Generation started. Suno is creating your song(s). URLs (check these for your songs): - https://suno.com/song/abc123-def456-... - https://suno.com/song/xyz789-uvw012-... Note: Songs may take 1-2 minutes to generate. Visit the URLs above to listen once ready.
エラー処理:
-
送信ボタンが見つからない場合:
- スクリーンショットを撮影します
- エラー:「Create ボタンが見つかりませんでした。Suno の UI が変更された可能性があります。」
- 手動で完了できるよう、スクリーンショットをユーザーに表示することを提案します
-
Suno から検証エラーが返された場合:
- ページからエラーメッセージを読み取ります
- ユーザーに表示します:「Suno の検証エラー:[エラーメッセージ]」
- 判別できる場合は修正方法を提案します(例:「歌詞が短すぎます」)
-
ネットワークエラー/タイムアウトの場合:
- エラー:「送信がタイムアウトしました。Suno を手動で確認してください。」
- フォームの状態を伝えます:「フォームへの入力と Create ボタンのクリックは完了しましたが、応答を受信できませんでした。」
-
クレジットが不足している場合:
- クレジットに関するエラーメッセージが表示された場合
- ユーザーに伝えます:「Suno のクレジットが不足しています。クレジットを追加購入してから再試行してください。」
URL 抽出のフォールバック:
URL を自動的に抽出できない場合:
- ユーザーに伝えます:「曲は正常に送信されましたが、URL を自動的に抽出できませんでした。」
- 次のように案内します:「新しく作成された曲を確認するには、https://suno.com/me の Suno ワークスペースを確認してください。」
使用するツール:
- find - Create ボタンを見つけます
- computer (left_click) - フォームを送信します
- computer (wait) - 処理を待ちます
- read_page - URL とエラーを抽出します
- computer (screenshot) - デバッグに使用します
ステップ 9:完了
自動化を終了し、最終的な状態を伝えます。
成功した場合:
✅ Suno Upload Complete!
Song: "Fixer-Upper"
Status: Submitted and generating
URLs:
- [Song URL 1]
- [Song URL 2]
Songs typically generate in 1-2 minutes. Visit the URLs above to listen!
一部成功した場合:
✅ Suno Upload Submitted!
Song: "Fixer-Upper"
Status: Form submitted, URLs not yet available
Check your Suno workspace for the generated songs:
https://suno.com/me
失敗した場合:
❌ Suno Upload Failed
Error: [Specific error message]
The form was partially filled. You can:
1. Complete manually in the browser (tab is still open)
2. Try running /suno-upload again
3. Check the error message above for guidance
エラー処理のパターン
ファイルが見つからない場合:
- 問題の内容を明確に伝えます
- 修正方法を案内します(正しいディレクトリに移動する、先にプロンプトを作成する)
- スタックトレースや専門用語は表示しません
解析エラー:
- 解析に失敗したフィールドを示します
- 必要に応じて問題のある内容を示します
- prompt.md ファイルの修正を提案します
- 重要でないフィールドの場合は、デフォルト値で続行することを提案します
Chrome の自動化に失敗した場合:
- 失敗した時点でスクリーンショットを撮影します
- スクリーンショットをユーザーに表示します(視覚的なデバッグ)
- 実行しようとしていた内容を説明します
- 一時的な障害の可能性が高い場合は、再試行を提案します
Suno の UI が変更された場合:
- 妥当な回数試しても要素が見つからない場合
- エラー:「Suno の UI が変更された可能性があります。このスキルの更新が必要です。」
- フォールバックとして手動アップロードを推奨します
- 問題を報告するようユーザーに依頼します
ネットワークの問題:
- ローカルネットワークと Suno サーバーの問題を区別します
- インターネット接続の確認を提案します
- 再試行を提案します
- タイムアウト値には十分な余裕を持たせます(送信には 10 秒以上)
使用例
例 1:単一のプロンプトファイル
User: "Upload this to Suno"
Skill:
- Finds single prompt.md in current directory
- Parses: "Fixer-Upper" pop song
- Displays parsed data
- Navigates to Suno, fills form
- Asks confirmation
- User: "Yes"
- Submits and returns URLs
例 2:複数のプロンプトファイル
User: "/suno-upload"
Skill:
- Finds 5 prompt.md files in subdirectories
- Lists all 5 with titles and projects
- Asks which to upload
- User selects #3
- Proceeds with upload workflow
例 3:suno-song-creator から呼び出す場合
User: Creates song with suno-song-creator
Skill (suno-song-creator):
- Generates prompt, saves to prompt.md
- Asks: "Upload to Suno now?"
- User: "Yes"
- Invokes suno-upload skill with file path
- suno-upload proceeds automatically
ツールのリファレンス
検出と解析:
- Glob - prompt.md ファイルを見つけます
- Read - ファイルの内容を読み取ります
- AskUserQuestion - ファイルの選択と確認を行います
Chrome の自動化:
- tabs_context_mcp - タブの状態を取得します
- tabs_create_mcp - 新しいタブを作成します
- navigate - URL に移動します
- computer (screenshot) - スクリーンショットを撮影します
- computer (wait) - 安定化のために待機します
- computer (left_click) - ボタンをクリックします
- computer (type) - テキストを入力します(フォールバック)
- find - 説明に基づいて UI 要素を見つけます
- form_input - フォームフィールドに入力します
- read_page - ページ構造を取得します
成功基準
✅ prompt.md ファイルを正しく見つけて解析する ✅ データを失うことなくすべてのフィールドを抽出する ✅ 歌詞のメタタグと書式を保持する ✅ Suno Create インターフェースに移動する ✅ すべてのフォームフィールドに正確に入力する ✅ スライダーや特殊な入力を処理する ✅ 送信前に確認を表示する ✅ 正常に送信し、URL を抽出する ✅ 明確なメッセージでエラーを適切に処理する ✅ 他のスキルから呼び出された場合も動作する
既知の制限事項
スライダーの精度:
- 座標ベースのドラッグ操作では、±1%以内の精度を実現します
- この誤差はごくわずかで、クリエイティブなパラメーターには許容範囲です
- ブラウザーの描画やビューポートサイズは計算に影響しません(getBoundingClientRect を使用)
URL の抽出:
- Suno の生成処理は非同期です
- URL がすぐに表示されない場合があります
- フォールバック:ユーザーをワークスペースに誘導します
UI の変更:
- Suno が UI を更新する場合があります
- UI が変更された場合、スキルの更新が必要になることがあります
- 参照セレクターが動作しなくなる可能性があります
クレジット要件:
- スキルは事前にクレジット残高を確認しません
- 送信を成功させるには、ユーザーにクレジットが必要です
- エラーは送信時にのみ表示されます
メンテナンスに関する注意事項
Suno の UI が変更された場合は、次のセクションを更新してください:
- ステップ 5:ナビゲーション経路とボタン参照
- ステップ 6:フォームフィールドのセレクターと名前
- ステップ 8:作成ボタンのセレクター
- URL 抽出パターン
解析の精度を保つため、実際の prompt.md ファイルを使って定期的にテストしてください。
バージョン: 2.0.0 - 完全な自動化を実現 最終更新日: 2026-01-01 依存関係: Chrome MCP サーバー、クレジットのある Suno アカウント
v2.0 の主な改善点:
- ✅ 座標ベースのドラッグ操作によるスライダーの自動化が完全に動作
- ✅ 人による介入が一切不要な、エンドツーエンドの完全な自動化
- ✅ マウスイベントによる、信頼性の高い React コンポーネント操作
- ✅ 楽曲生成の成功(「Fixer-Upper」のテストケース)で検証済み