Token导航 LogoToken导航TokenDH.com
研究检索操作浏览器github未标认证来源可访问许可证需确认审计通过

suno-upload苏诺上传

Agent Skill

suno-upload 用于查找、检索和筛选相关信息,适合在 Codex、Claude、Cursor、Gemini CLI 中需要根据关键词、任务场景或来源线索快速定位候选结果时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

总安装

27,071

周安装

696

GitHub Stars

21

下载量

9,254
CodexClaudeCursorGemini CLI

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

GitHub

来源数

2

许可证

unknown

最后核验

2026-05-01

来源状态

来源可访问

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:suno-upload(苏诺上传)
来源仓库:https://github.com/nwp/suno-song-creator-plugin
仓库路径:skills/suno-upload
安装命令:
npx skills add https://github.com/nwp/suno-song-creator-plugin --skill 'Suno Upload'
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 npx skills 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

skills.shnpx skills
npx skills add https://github.com/nwp/suno-song-creator-plugin --skill 'Suno Upload'

简介

suno-upload 用于查找、检索和筛选相关信息。

  • 适用于根据关键词、任务场景或来源线索快速定位候选结果。
  • 通过 npx skills add 命令从指定 GitHub 仓库安装并使用。
  • 安装前需确认权限范围、维护状态及是否触发联网或文件操作。
  • 建议结合原始 README 进一步核验具体功能和使用边界。

SKILL.md

Suno Upload

Automatically upload Suno prompt files to suno.com using Chrome automation. This skill parses your prompt.md files and fills the Suno Create interface with all the necessary fields.

✅ Fully Automated - No Human Intervention Required

This skill achieves complete end-to-end automation of the Suno song creation process:

  • Parses prompt.md files - Extracts title, lyrics, style, model, and all parameters
  • Navigates to Suno automatically - Opens suno.com/create and switches to Custom mode
  • Fills ALL form fields - Including complex React slider components
  • Slider automation working - Uses coordinate-based dragging for precise control
  • Submits and monitors - Clicks Create button and tracks generation
  • Validated and tested - Successfully generated songs with full parameter control

No manual intervention needed - Just point it at a prompt.md file and let it work.

Prerequisites

  • Chrome MCP server must be installed and active
  • Suno account with available credits
  • Prompt.md file in the standard Suno song creator format

When to Use

Use this skill to:

  • Upload generated prompt.md files to Suno
  • Automate the song creation process on suno.com
  • Submit multiple prompts efficiently
  • Avoid manual copy-paste of lyrics and settings

Workflow

Step 1: Locate Prompt Files

Search for prompt.md files in the current directory and subdirectories.

If multiple files found:

  • Display list with:

- File path - Song title (from YAML frontmatter) - Project name (from YAML frontmatter) - Last modified date

  • Use AskUserQuestion for interactive selection
  • Present options clearly with full context

If single file found:

  • Automatically select it
  • Display which file was selected
  • Show basic info (title, project)

If no files found:

  • Error message: "No prompt.md files found in the current directory or subdirectories."
  • Guidance: "Please navigate to a directory containing Suno prompt files, or create a prompt using the suno-song-creator skill first."
  • Exit gracefully

Tools used:

  • Glob - Search for **/prompt.md pattern
  • Read - Extract YAML frontmatter for file listing
  • AskUserQuestion - Interactive file selection

Step 2: Parse Prompt File

Read and extract data from the selected prompt.md file.

Parsing Strategy:

1. YAML Frontmatter (lines 1-12):

---
title: "Song Title Here"
project: "Project Name"
---
  • Extract title: value
  • Remove surrounding quotes if present
  • This becomes the "Song Title" field

2. Structured Prompt (under "### Structured Prompt" heading):

Find the heading ### Structured Prompt, then extract everything between the triple backticks:

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

IMPORTANT:

  • Copy the entire block as-is (all 5 lines)
  • Do NOT parse individual fields
  • This complete block goes into Suno's "Styles" field
  • Keep all quotes and formatting

3. Lyrics Section (after "## Lyrics" heading):

Find ## Lyrics, then extract everything between the triple backticks:

///*****///

[Verse 1 | playful | bright production]
Lyrics text here...

[Chorus | upbeat | full production]
Chorus lyrics here...

CRITICAL Parsing Rules:

  • REMOVE the divider line: Skip ///*****/// at the start (this is just a separator in the file)
  • KEEP all meta tags: [Verse 1 | playful | bright production] - Suno uses these!
  • KEEP section markers: [Verse], [Chorus], [Bridge], etc.
  • KEEP all blank lines: Preserve formatting exactly
  • Start from first actual lyric content: After removing divider, begin with the first [Verse...] tag

Example extraction:

File contains:
///*****///

[Verse 1 | playful | bright production]
You showed up late...

Extract as:
[Verse 1 | playful | bright production]
You showed up late...

4. Model Selection (from "### Model and Parameters" section):

Look for the model specification near the top of this section:

**Model:** v5 (cleanest audio, most natural vocals - best for modern pop)

Extraction rules:

  • Model: Extract value after **Model:** and before the opening parenthesis

- Expected values: "v5", "v4.5", "v4.5+", "v4" - Trim whitespace: "v5" - Default to "v5" if not specified

5. Parameters (from "### Model and Parameters" section):

Look for bullet points under this heading:

- Weirdness: 40%
- Style Influence: 60%
- Vocal Gender: Female
- Exclude Styles: Rock, Metal, Country

Extraction rules:

  • Weirdness: Extract number before % (e.g., "40" from "40%")

- If range like "30-40%", use midpoint (35) - Convert to slider value: use as-is (0-100 scale)

  • Style Influence: Extract number before % (e.g., "60" from "60%")

- If range like "60-70%", use midpoint (65) - Convert to slider value: use as-is (0-100 scale)

  • Vocal Gender: Extract value after : and trim whitespace

- Expected values: "Female", "Male", or unspecified - Map to Suno's gender buttons

  • Exclude Styles: Extract comma-separated list after :

- Trim whitespace: "Rock, Metal, Country" - Keep as comma-separated string

Graceful Handling:

  • If field missing: use sensible default or skip
  • If malformed YAML: try regex extraction as fallback
  • If lyrics section empty: error (lyrics required for Suno)
  • If parameters missing: use Suno defaults (50% for sliders)

Tools used:

  • Read - Read the prompt.md file
  • Regex/string parsing - Extract structured data

Validation:

  • Title exists and non-empty
  • Lyrics exist and non-empty
  • Structured prompt exists and non-empty
  • Parameters are within valid ranges (0-100 for sliders)

Step 3: Display Parsed Data

Show the user what was extracted from the file for verification:

Format:

📋 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!

Purpose:

  • User can verify parsing was correct
  • Catch any issues before automation starts
  • Builds confidence in the process

Step 4: Initialize Chrome Session

Set up the browser automation environment.

Steps:

  1. Call tabs_context_mcp to get current tab state

- Check if MCP tab group exists - Get available tab IDs

  1. If no MCP tab group: call tabs_context_mcp with createIfEmpty: true
  2. Create new tab: tabs_create_mcp

- Fresh tab for Suno automation - Prevents interfering with user's existing tabs

  1. Navigate to suno.com: navigate(url: "https://suno.com")
  2. Wait for page load: computer(action: wait, duration: 3)

Error handling:

  • If navigation fails: retry once, then ask user to check connection
  • If tab creation fails: inform user and exit
  • If already on suno.com: ask if should create new tab or use existing

Tools used:

  • tabs_context_mcp - Get tab context
  • tabs_create_mcp - Create new tab
  • navigate - Navigate to URL
  • computer (wait) - Wait for page load

Step 5: Navigate to Create Interface

Navigate from the home page to the Create page in Custom mode.

Steps:

  1. Navigate to Create page: - Use navigate tool: "https://suno.com/create" - OR use find + computer tools to click "Create" button - Wait 2 seconds for page load
  2. Switch to Custom mode: - Use find tool: query="Custom tab button" - Use computer tool: left_click on the Custom button ref - Wait 1 second for mode switch
  3. Verify Custom mode loaded: - Take screenshot for debugging (optional) - Use read_page to verify "Lyrics" field is present

UI Elements to find:

  • Create button/link (ref varies, use find tool)
  • Custom tab button (vs "Simple" mode)
  • Lyrics textarea (confirms Custom mode loaded)

Error handling:

  • If Create page doesn't load: retry navigation once
  • If Custom button not found: take screenshot, inform user
  • If timeout: ask user to check Suno status

Tools used:

  • navigate - Direct URL navigation
  • find - Locate UI elements by description
  • computer - Click buttons
  • read_page - Verify page loaded correctly

Step 6: Fill Form Fields

Fill each form field with the parsed data.

Field-by-field process:

a. Model Selector (at top of Create area)

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

Data: Model from Step 2 (e.g., "v5") Note: Based on UI exploration, the model selector is visible at the top Implementation:

  • If model is "v5" (default): may skip (already selected)
  • If model is different: click dropdown and select appropriate option
  • Use find to locate the specific model option
  • Use computer.left_click to select

b. Lyrics Textarea

- Use find: query="lyrics textarea"
- Use form_input: ref=<lyrics_ref>, value=<full_lyrics_text>
- Or use computer.type if form_input fails

Data: Full lyrics from Step 2 (with divider line ///*****/// removed, but all meta tags like [Verse 1 |...] preserved)

c. Styles Field (Structured Prompt)

- Use find: query="styles textbox" or "style of music"
- Use form_input: ref=<styles_ref>, value=<structured_prompt_block>

Data: Complete 5-line structured prompt block

d. Song Title (Optional)

- Use find: query="song title optional"
- Use form_input: ref=<title_ref>, value=<song_title>

Data: Title from YAML frontmatter

e. Expand Advanced Options

- Use find: query="Advanced Options"
- Use computer: left_click on Advanced Options button
- Wait 1 second for expansion

f. Exclude Styles

- Use find: query="exclude styles"
- Use form_input: ref=<exclude_ref>, value=<exclude_styles_list>

Data: Comma-separated exclusion list (e.g., "Rock, Metal, Country")

g. Vocal Gender

- Use find: query="Female" (or "Male" based on parsed data)
- Use computer: left_click on the appropriate gender button

Data: "Female" or "Male" from parameters Note: If unspecified, skip this field (use Suno default)

h. Weirdness Slider

Data: Parsed weirdness value (0-100)

Working Method (Coordinate-Based Dragging):

Sliders in Suno are custom React components (DIVs with ARIA roles), not standard HTML inputs. They require coordinate-based mouse dragging to set values.

Step-by-step implementation:

  1. Find the slider element: Use find: query="Weirdness slider" This returns a ref to the slider with role="slider"
  2. Calculate target position with 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; Use javascript_tool to execute this and return coordinates
  3. Drag thumb to target position: Use computer: left_click_drag - start_coordinate: [startX, startY] (from JavaScript) - coordinate: [targetX, targetY] (from JavaScript)

Why this works:

  • React state updates when the mouse drag event completes
  • Coordinate calculation ensures accurate positioning
  • getBoundingClientRect() provides precise pixel positions
  • Dragging the thumb (last child element) triggers React's onChange handler

i. Style Influence Slider

Data: Parsed style influence value (0-100)

Working Method (Same as Weirdness):

Use the identical coordinate-based dragging approach:

  1. Find the slider: Use find: query="Style Influence slider"
  2. Calculate coordinates with 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;
  3. Drag to target: Use computer: left_click_drag from [startX, startY] to [targetX, targetY]

Important notes for both sliders:

  • Do NOT use form_input (fails with "Element type 'DIV' is not a supported form input")
  • Do NOT set ARIA attributes directly (doesn't update React state)
  • Do NOT use keyboard events (Arrow keys don't trigger state updates)
  • DO use left_click_drag with calculated coordinates
  • Precision: Usually accurate within ±1%, which is acceptable

Implementation Notes:

  • Fill fields sequentially, not in parallel
  • Wait 0.5 seconds between field fills for UI stability
  • Take screenshot after critical fields for debugging
  • If field not found, log warning and continue (optional fields)
  • If required field fails, error and exit

Tools used:

  • find - Locate form elements
  • form_input - Fill text fields
  • computer (left_click) - Click buttons, interact with sliders
  • computer (type) - Fallback for text input
  • computer (wait) - Stability pauses

Step 7: Confirmation & Review

Before submitting, show the user what will be submitted and ask for confirmation.

Process:

  1. Take screenshot of filled form: - Use computer: screenshot action - Capture the entire Create form area - User can visually verify all fields
  2. Display summary to user: ✅ 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]
  3. Ask for confirmation: 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
  4. Handle response:

- If "Yes": proceed to Step 8 - If "No": inform user and exit gracefully - Message: "Upload cancelled. The form has been filled but not submitted. You can manually review and submit in the browser if needed."

Why this matters:

  • User has final control before spending credits
  • Catch any parsing errors before submission
  • Visual confirmation builds trust
  • Prevents accidental submissions

Tools used:

  • computer (screenshot) - Capture form
  • AskUserQuestion - Get explicit confirmation

Step 8: Submit & Monitor

Submit the form and monitor for song URLs.

Submission:

  1. Find Create button: - Use find: query="Create song button" or "Create button" - Expected ref like: ref_943 (based on exploration)
  2. Click Create button: - Use computer: left_click on Create button ref - Wait 3 seconds for submission processing
  3. Monitor for response: - 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 Extraction (if generation starts):

  1. Check for song URLs: - Suno typically generates 2 songs per creation - URLs may appear immediately or after processing - Format: https://suno.com/song/[song-id]
  2. Extract URLs: - Use read_page to get page content - Look for song URLs in the recent creations area - OR check the workspace/library section
  3. Display results to user: ✅ 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.

Error Handling:

  • Submit button not found:

- Take screenshot - Error: "Could not find Create button. Suno UI may have changed." - Offer to show screenshot to user for manual completion

  • Validation errors from Suno:

- Read error messages from page - Display to user: "Suno validation error: [error message]" - Suggest fixes if recognizable (e.g., "Lyrics too short")

  • Network/timeout errors:

- Error: "Submission timed out. Please check Suno manually." - Provide form status: "Form was filled and Create button clicked, but response not received."

  • Credits exhausted:

- If error message about credits appears - Inform user: "Suno credits exhausted. Please purchase more credits and try again."

URL Extraction Fallback:

If URLs cannot be automatically extracted:

  • Inform user: "Song submitted successfully, but URLs could not be extracted automatically."
  • Guidance: "Check your Suno workspace at https://suno.com/me for your newly created songs."

Tools used:

  • find - Locate Create button
  • computer (left_click) - Submit form
  • computer (wait) - Wait for processing
  • read_page - Extract URLs and errors
  • computer (screenshot) - Debugging

Step 9: Completion

Wrap up the automation and provide final status.

Success case:

✅ 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!

Partial success case:

✅ 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

Failure case:

❌ 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

Error Handling Patterns

File Not Found:

  • Clear message about what went wrong
  • Guidance on how to fix (navigate to correct directory, create prompt first)
  • No stack traces or technical jargon

Parsing Errors:

  • Show which field failed to parse
  • Show the problematic content if helpful
  • Suggest fixing the prompt.md file
  • Offer to proceed with defaults if non-critical field

Chrome Automation Failures:

  • Take screenshot at failure point
  • Show screenshot to user (visual debugging)
  • Provide context about what was being attempted
  • Offer retry option if transient failure likely

Suno UI Changes:

  • If element not found after reasonable attempts
  • Error: "Suno UI may have changed. This skill needs updating."
  • Recommend manual upload as fallback
  • Ask user to report issue

Network Issues:

  • Distinguish between local network and Suno server issues
  • Suggest checking internet connection
  • Offer retry option
  • Timeout values should be generous (10+ seconds for submission)

Usage Examples

Example 1: Single prompt file

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

Example 2: Multiple prompt files

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

Example 3: Called from 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

Tools Reference

Discovery & Parsing:

  • Glob - Find prompt.md files
  • Read - Read file contents
  • AskUserQuestion - File selection, confirmation

Chrome Automation:

  • tabs_context_mcp - Get tab state
  • tabs_create_mcp - Create new tab
  • navigate - Navigate to URLs
  • computer (screenshot) - Capture screenshots
  • computer (wait) - Stability pauses
  • computer (left_click) - Click buttons
  • computer (type) - Type text (fallback)
  • find - Locate UI elements by description
  • form_input - Fill form fields
  • read_page - Get page structure

Success Criteria

✅ Finds and parses prompt.md files correctly ✅ Extracts all fields without data loss ✅ Preserves lyrics meta tags and formatting ✅ Navigates to Suno Create interface ✅ Fills all form fields accurately ✅ Handles sliders and special inputs ✅ Shows confirmation before submission ✅ Submits successfully and extracts URLs ✅ Handles errors gracefully with clear messages ✅ Works when called from other skills

Known Limitations

Slider Precision:

  • Coordinate-based dragging achieves accuracy within ±1%
  • This variance is negligible and acceptable for creative parameters
  • Browser rendering and viewport size don't affect the calculation (uses getBoundingClientRect)

URL Extraction:

  • Suno's generation is asynchronous
  • URLs may not appear immediately
  • Fallback: direct user to workspace

UI Changes:

  • Suno may update their UI
  • Skill may need updates when UI changes
  • Reference selectors may break

Credit Requirements:

  • Skill does not check credit balance beforehand
  • User must have credits for submission to work
  • Error appears only at submission time

Maintenance Notes

If Suno UI changes, update these sections:

  1. Step 5: Navigation paths and button refs
  2. Step 6: Form field selectors and names
  3. Step 8: Create button selector
  4. URL extraction patterns

Test with real prompt.md files regularly to ensure parsing remains accurate.


Version: 2.0.0 - Complete Automation Achieved Last Updated: 2026-01-01 Dependencies: Chrome MCP server, Suno account with credits

Key Improvements in v2.0:

  • ✅ Slider automation fully working with coordinate-based dragging
  • ✅ Complete end-to-end automation with NO human intervention required
  • ✅ Reliable React component interaction through mouse events
  • ✅ Validated with successful song generation ("Fixer-Upper" test case)

适合场景

01

用户想查找某类 Agent Skill 时

02

需要根据任务场景推荐可安装能力包时

03

需要对比不同来源的安装命令和来源信息时

能力概览

能力 1

按任务关键词查找相关 Skills

能力 2

展示可复制的安装命令

能力 3

保留来源站点、仓库和原始说明,方便继续核验

能力 4

展示第三方安全扫描或审计结果

安装后应在对应宿主中按原始 README 的触发条件使用;具体调用方式请以来源页面和 README 为准。

平台分布

Codex

37.42%
按下载量换算3,463

Claude

27.92%
按下载量换算2,584

Cursor

17.85%
按下载量换算1,652

Gemini CLI

9.94%
按下载量换算920

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

通过

权限和风险

操作浏览器

该 Skill 可能涉及浏览器控制能力,使用时可能读取或操作网页内容,需要在受控环境中确认权限边界。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。当前只有一个来源,正式发布前建议补源仓库或其他目录站核验。

来源信息

继续浏览同类 Skills