Upload a Suno prompt.md file to suno.com using Chrome automation with NO human intervention required. Parses the prompt file, navigates to Suno's Create interface, fills all form fields including sliders (lyrics, style, title, weirdness, style influence, vocal gender, exclude styles), and submits for song generation. Uses proven coordinate-based slider manipulation for reliable automation. Use this skill when the user asks to "upload to Suno", "create on Suno", "generate with Suno", "submit to Suno", or wants to automatically upload a generated prompt to the Suno website.
/plugin marketplace add nwp/suno-song-creator-plugin/plugin install nwp-suno-song-creator@nwp/suno-song-creator-pluginThis skill inherits all available tools. When active, it can use any tool Claude has access to.
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.
This skill achieves complete end-to-end automation of the Suno song creation process:
No manual intervention needed - Just point it at a prompt.md file and let it work.
Use this skill to:
Search for prompt.md files in the current directory and subdirectories.
If multiple files found:
If single file found:
If no files found:
Tools used:
**/prompt.md patternRead and extract data from the selected prompt.md file.
Parsing Strategy:
1. YAML Frontmatter (lines 1-12):
---
title: "Song Title Here"
project: "Project Name"
---
title: value2. 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:
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:
///*****/// at the start (this is just a separator in the file)[Verse 1 | playful | bright production] - Suno uses these![Verse], [Chorus], [Bridge], etc.[Verse...] tagExample 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:** and before the opening parenthesis
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:
% (e.g., "40" from "40%")
% (e.g., "60" from "60%")
: and trim whitespace
:
Graceful Handling:
Tools used:
Validation:
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:
Set up the browser automation environment.
Steps:
tabs_context_mcp to get current tab state
tabs_context_mcp with createIfEmpty: truetabs_create_mcp
navigate(url: "https://suno.com")computer(action: wait, duration: 3)Error handling:
Tools used:
Navigate from the home page to the Create page in Custom mode.
Steps:
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
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
Verify Custom mode loaded:
- Take screenshot for debugging (optional)
- Use read_page to verify "Lyrics" field is present
UI Elements to find:
Error handling:
Tools used:
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:
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:
Find the slider element:
Use find: query="Weirdness slider"
This returns a ref to the slider with role="slider"
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
Drag thumb to target position:
Use computer: left_click_drag
- start_coordinate: [startX, startY] (from JavaScript)
- coordinate: [targetX, targetY] (from JavaScript)
Why this works:
i. Style Influence Slider
Data: Parsed style influence value (0-100)
Working Method (Same as Weirdness):
Use the identical coordinate-based dragging approach:
Find the slider:
Use find: query="Style Influence slider"
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;
Drag to target:
Use computer: left_click_drag from [startX, startY] to [targetX, targetY]
Important notes for both sliders:
Implementation Notes:
Tools used:
Before submitting, show the user what will be submitted and ask for confirmation.
Process:
Take screenshot of filled form:
- Use computer: screenshot action
- Capture the entire Create form area
- User can visually verify all fields
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]
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
Handle response:
Why this matters:
Tools used:
Submit the form and monitor for song URLs.
Submission:
Find Create button:
- Use find: query="Create song button" or "Create button"
- Expected ref like: ref_943 (based on exploration)
Click Create button:
- Use computer: left_click on Create button ref
- Wait 3 seconds for submission processing
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):
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]
Extract URLs:
- Use read_page to get page content
- Look for song URLs in the recent creations area
- OR check the workspace/library section
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:
Validation errors from Suno:
Network/timeout errors:
Credits exhausted:
URL Extraction Fallback:
If URLs cannot be automatically extracted:
Tools used:
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
File Not Found:
Parsing Errors:
Chrome Automation Failures:
Suno UI Changes:
Network Issues:
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
Discovery & Parsing:
Chrome Automation:
✅ 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
Slider Precision:
URL Extraction:
UI Changes:
Credit Requirements:
If Suno UI changes, update these sections:
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:
This skill should be used when the user asks about libraries, frameworks, API references, or needs code examples. Activates for setup questions, code generation involving libraries, or mentions of specific frameworks like React, Vue, Next.js, Prisma, Supabase, etc.
Applies Anthropic's official brand colors and typography to any sort of artifact that may benefit from having Anthropic's look-and-feel. Use it when brand colors or style guidelines, visual formatting, or company design standards apply.
Creating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems. Create original algorithmic art rather than copying existing artists' work to avoid copyright violations.