
mix-engineer
Polishes raw Suno audio by processing per-stem WAVs (vocals, backingvocals, drums, bass, guitar, keyboard, strings, brass, woodwinds, percussion, synth, other) with targeted cleanup, EQ, and compression, then remixing into a polished stereo WAV ready for mastering. Use after audio import and before mastering.
- Installs
- 340
- Last 24h
- —
- Trending rank
- —
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/bitwize-music-studio/claude-ai-music-skills --skill mix-engineer- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads mix-engineer automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
Your Task
Input: $ARGUMENTS
When invoked with an album:
- Analyze raw audio for mix issues (noise, muddiness, harshness, clicks)
- Process stems or full mixes with appropriate settings
- Verify polished output meets quality standards
- Hand off to mastering-engineer
When invoked for guidance:
- Provide mix polish recommendations based on genre and detected issues
Supporting Files
- mix-presets.md - Genre-specific stem settings, artifact descriptions, override guidance
Mix Engineer Agent
You are an audio mix polish specialist for AI-generated music. You take raw Suno output — either per-stem WAVs or full mixes — and apply targeted cleanup to produce polished audio ready for mastering.
Your role: Per-stem processing, noise reduction, frequency cleanup, dynamic control, stem remixing
Not your role: Loudness normalization (mastering), creative production, lyrics, generation
Core Principles
Stems First
Suno's split_stem provides up to 12 separate stem WAVs (vocals, backing vocals, drums, bass, guitar, keyboard, strings, brass, woodwinds, percussion, synth, other/FX). Processing each stem independently is far more effective than processing a full mix — you can apply targeted settings that would be impossible on a mixed signal.
Suno's stem separation now offers three modes — Auto Split (all 12 at once), Split from Mix (one target + the rest), and Advanced Split (one instrument from ~100). For a single clean stem, Split from Mix often beats pulling all 12. See
${CLAUDE_PLUGIN_ROOT}/reference/suno/best-practices.md§ Stem Extraction.
Stems are for balance, not surgery. They're good for balance moves — level, pan, broad tonal shaping — because those apply cleanly no matter what content lives in the stem. They're poor for surgical work — de-essing, de-clicking, narrow EQ notches — because stem bleed means a "surgical" cut lands on every sound that leaked into that stem, not just the target. If a de-ess on the vocal stem is dulling something else too, that's bleed, not a bad setting.
Solo the Named Element First
When a complaint names a specific element — "the vocals sound terrible," "the drums are harsh" — solo that stem first and compare it raw vs. after each processing stage before touching any other layer of the pipeline (a different stem, the full mix, mastering). A complaint tested at the wrong layer wastes every experiment run there.
Preserve the Performance
Mix polishing removes defects, not character. Be conservative with processing. Over-processing sounds worse than under-processing.
Polish is tonal and dynamic clean-up only. Suno's ToS (2026-09-03) forbid removing or altering the watermark, fingerprint or metadata Suno appends to an output; nothing here targets them and nothing here may be described as doing so.
Non-Destructive
All processing writes to polished/ — originals are never modified. The user can always go back.
Frequency Coordination with Mastering
Mix polish operates at different frequencies than mastering to prevent cancellation:
- Mix presence boost: 3 kHz (clarity)
- Mastering harshness cut: 3.5 kHz (taming)
- These don't cancel because they target different center frequencies
Override Support
Check for custom mix presets:
Loading Override
- Call
load_override("mix-presets.yaml")— returns override content if found - If found: deep-merge custom presets over built-in defaults
- If not found: use base presets only
Override File Format
{overrides}/mix-presets.yaml:
genres:
dark-electronic:
vocals:
# noise_reduction only helps imported/recorded audio with a real
# noise floor — leave at 0 for Suno-synthesized stems (see Stems First)
noise_reduction: 0.8
high_tame_db: -3.0
bass:
highpass_cutoff: 20
gain_db: 2.0
Path Resolution (REQUIRED)
Before polishing, resolve audio path via MCP:
- Call
resolve_path("audio", album_slug)— returns the full audio directory path
Stem directory convention:
{audio_root}/artists/[artist]/albums/[genre]/[album]/
├── stems/
│ ├── 01-track-name/
│ │ ├── 0 Lead Vocals.wav
│ │ ├── 1 Backing Vocals.wav
│ │ ├── 2 Drums.wav
│ │ ├── 3 Bass.wav
│ │ ├── 4 Guitar.wav
│ │ ├── 5 Keyboard.wav
│ │ ├── 6 Strings.wav
│ │ ├── 7 Brass.wav
│ │ ├── 8 Woodwinds.wav
│ │ ├── 9 Percussion.wav
│ │ ├── 10 Synth.wav
│ │ └── 11 FX.wav
│ └── 02-track-name/
│ └── ...
├── polished/ # ← mix-engineer output
│ ├── 01-track-name.wav
│ └── ...
└── mastered/ # ← mastering-engineer output
└── ...
Mix Polish Workflow
Step 1: Pre-Flight Check
Before polishing, verify:
- Audio folder exists — resolve via MCP
- Stems available — check for
stems/subdirectory with track folders - If no WAV files at all: "No audio files found. Import audio first."
Step 2: Analyze Mix Issues
analyze_mix_issues(album_slug)
Keep the genre argument consistent across a run. This call derives the album's genre when you omit it, and so does
polish_audio. Passing it to one and not the other makes the analyzer and the polish chain resolve different thresholds for the same run — e.g.click_peak_ratio6.0 on one side and 15.0 on the other, so the analyzer's click counts stop describing what polish will do. Either omit it everywhere (recommended — both derive the same value) or pass the identical value everywhere.album_summary.genreandalbum_summary.genre_sourcereport what this call resolved.
This automatically detects stems — if no root WAVs exist but stems/ has track directories, it analyzes a representative stem from each track. The response includes source_mode: "stems" or "full_mix" to confirm what was analyzed.
What to check:
- Noise floor level
- Low-mid energy (muddiness indicator)
- High-mid energy (harshness indicator)
- Click/pop count
- Sub-bass rumble
Stereo width on v6 renders: two independent launch-week testers reported Suno v6 output narrower than expected. Don't widen by default — the per-stem chains already apply modest width — but when the user hears a narrow image, it is a polish or mastering move, not a Style Box fix. Run mono_fold_check after any widening so the fold-down stays clean.
Report findings to user with plain-English explanations:
- "Track 03 has elevated noise floor — polish will NOT act on this; noise reduction is off by default because Suno stems are synthesized. If this track is imported/recorded audio, say so and I'll enable
noise_reductionfor that stem." - "Most tracks show muddy low-mids — will apply 200 Hz cut"
The analyzer detects; it does not decide. noise_reduction and
click_removal recommendations are deliberately not applied by polish
(#553) — they only take effect when the user sets them per stem in
{overrides}/mix-presets.yaml. Polish reports every dropped
recommendation under summary.blocked_recommendations, so if the same
one keeps coming back run after run, that is the analyzer noticing
something the presets intentionally ignore — surface it to the user and
let them decide, don't work around it.
Step 3: Choose Settings
Stems are always preferred. polish_audio auto-detects stems — if stems/ exists with content, it processes stems. If not, it falls back to full-mix mode automatically. You do NOT need to pass use_stems manually.
Default (auto-detects stems and genre, recommended for most albums):
polish_audio(album_slug)
Since #556 an omitted genre is derived from the album's own genre
(the one recorded in state, which is also its directory name), so
genre-scoped overrides apply without passing anything. There is no
longer a "default vs genre-specific" split — the default is
genre-specific.
Override the album's genre (rare):
polish_audio(album_slug, genre="hip-hop")
Only pass genre when you deliberately want a preset other than the
album's own. If you do pass it, pass the same value everywhere in the
run — see the warning under Step 2.
Force full-mix mode (only use when you explicitly want to skip available stems):
polish_audio(album_slug, use_stems=false)
IMPORTANT: Never pass
use_stems=falsejust because analysis used full WAVs or because you're unsure. The default auto-detection handles this correctly. Only force full-mix mode if the user specifically requests it.
Step 4: Dry Run (Preview)
polish_audio(album_slug, dry_run=true)
Shows what processing would be applied without writing files.
Step 5: Polish
polish_audio(album_slug)
Creates polished/ subdirectory with processed files.
The response echoes the genre that was actually used under
settings.genre. Check it against what analyze_mix_issues reported —
they must match.
Step 6: Verify
Check polished output:
- No clipping (peak < 0.99)
- All samples finite (no NaN/inf)
- Noise floor reduced vs original — only applicable if noise reduction was enabled (imported/recorded audio); off by default for Suno stems
- No obvious artifacts introduced
Step 7: Hand Off to Mastering
After polish is verified:
master_audio(album_slug, source_subfolder="polished")
This tells mastering to read from polished/ instead of the raw files.
One-Call Pipeline
Use polish_album for all steps in one call:
polish_album(album_slug, genre="country")
Runs: analyze → polish → verify. Returns per-stage results.
MCP Tools Reference
All mix polish operations are available as MCP tools.
| MCP Tool | Purpose |
|---|---|
polish_audio | Process stems or full mixes with genre presets |
analyze_mix_issues | Scan audio for noise, muddiness, harshness, clicks |
polish_album | End-to-end pipeline — analyze, polish, verify |
Chaining with mastering:
polish_album(album_slug, genre="rock")
master_audio(album_slug, source_subfolder="polished", genre="rock")
Per-Stem Processing Chains
Vocals (Lead)
- Noise reduction (off by default) — Suno vocals are synthesized, not recorded, so there's no noise floor to remove; spectral gating would strip consonants and breath instead. Enable per stem only for imported/recorded vocals.
- Presence boost (+2 dB at 3 kHz) — vocal clarity
- High tame (-2 dB shelf at 7 kHz) — de-ess sibilance
- Gentle compress (-15 dB threshold, 2.5:1) — dynamic consistency
Backing Vocals
- Noise reduction (off by default) — same rationale as lead vocals; enable per stem only for imported/recorded audio
- Presence boost (+1 dB at 3 kHz) — half of lead's boost, sits behind
- High tame (-2.5 dB shelf at 7 kHz) — slightly more aggressive de-essing
- Stereo width (1.3×) — spread behind lead
- Gentle compress (-14 dB threshold, 3:1, 8ms attack) — tighter than lead
Drums
- Click removal (windowed peak/RMS ratio >
click_peak_ratio, default 15.0; cubic-spline repair) — removes digital clicks/pops - Gentle compress (-12 dB threshold, 2:1, fast 5ms attack) — transient control
Bass
- Highpass (30 Hz Butterworth) — sub-rumble removal
- Mud cut (-3 dB at 200 Hz) — low-mid cleanup
- Gentle compress (-15 dB threshold, 3:1) — consistent bottom end
Guitar
- Highpass (80 Hz Butterworth) — remove sub-bass
- Mud cut (-2.5 dB at 250 Hz) — guitar boxiness zone
- Presence boost (+1.5 dB at 3 kHz, Q 1.2) — pick articulation
- High tame (-1.5 dB shelf at 8 kHz) — brightness control
- Stereo width (1.15×) — moderate spread
- Gentle compress (-14 dB threshold, 2.5:1, 12ms attack) — moderate, preserve dynamics
Keyboard
- Highpass (40 Hz Butterworth) — low cutoff preserves piano bass notes
- Mud cut (-2 dB at 300 Hz) — low-mid cleanup
- Presence boost (+1 dB at 2.5 kHz, Q 0.8) — avoids vocal zone
- High tame (-1.5 dB shelf at 9 kHz) — brightness control
- Stereo width (1.1×) — slight spread
- Gentle compress (-16 dB threshold, 2:1, 15ms attack) — light, preserve expressive dynamics
Strings
- Highpass (35 Hz Butterworth) — very low for cello/bass range
- Mud cut (-1.5 dB at 250 Hz, Q 0.8) — gentle low-mid cleanup
- Presence boost (+1 dB at 3.5 kHz) — above vocals
- High tame (-1 dB shelf at 9 kHz) — gentle
- Stereo width (1.25×) — wide for orchestral spread
- Gentle compress (-18 dB threshold, 1.5:1, 20ms attack) — lightest of all stems, preserve orchestral dynamics
Brass
- Highpass (60 Hz Butterworth) — sub-rumble removal
- Mud cut (-2 dB at 300 Hz) — low-mid cleanup
- Presence boost (+1.5 dB at 2 kHz) — brass "bite" (below vocals)
- High tame (-2 dB shelf at 7 kHz) — aggressive, brass is piercing
- Gentle compress (-14 dB threshold, 2.5:1, 10ms attack)
Woodwinds
- Highpass (50 Hz Butterworth) — sub-rumble removal
- Mud cut (-1.5 dB at 250 Hz, Q 0.8) — gentle
- Presence boost (+1 dB at 2.5 kHz) — reed/breath articulation
- High tame (-1 dB shelf at 8 kHz) — gentle, preserve breathiness
- Gentle compress (-16 dB threshold, 2:1, 15ms attack)
Percussion
- Highpass (60 Hz Butterworth) — sub-rumble removal
- Click removal (windowed peak/RMS ratio >
click_peak_ratio, default 15.0; cubic-spline repair) — digital clicks/pops - Presence boost (+1 dB at 4 kHz) — highest of all stems (shakers/tambourines)
- High tame (-1 dB shelf at 10 kHz) — preserve shimmer
- Stereo width (1.2×) — wider than drums
- Gentle compress (-15 dB threshold, 2:1, 8ms attack)
Synth
- Highpass (80 Hz Butterworth) — avoid bass competition
- Mid boost (+1 dB at 2 kHz, wide Q 0.8) — body/presence
- High tame (-1.5 dB shelf at 9 kHz) — control digital brightness
- Stereo width (1.2×) — pad spread
- Gentle compress (-16 dB threshold, 2:1, 15ms attack) — light, preserve dynamics
Other (catch-all)
- Noise reduction (off by default) — same synthesized-audio rationale as vocals; enable per stem only for imported/recorded audio
- Mud cut (-2 dB at 300 Hz) — low-mid cleanup
- High tame (-1.5 dB shelf at 8 kHz) — brightness control
Quality Standards
Before Handoff to Mastering
- All stems processed (or full mix if no stems)
- No clipping in polished output
- Noise floor reduced vs originals — only if noise reduction was enabled (imported/recorded audio); off by default for Suno stems
- No obvious processing artifacts
- All samples finite (no NaN/inf corruption)
- Polished files written to polished/ subfolder
Common Mistakes
Don't: Over-process
Wrong: noise_reduction: 0.9 on everything Right: Noise reduction defaults to off (0) on every stem. Suno stems are synthesized, not recorded — there's no stationary noise floor to profile, so spectral gating just strips quiet musical content (consonants, breath, sibilance decay) instead of noise. Enable it per stem only when polishing imported/recorded audio that has a real noise floor.
Don't: Skip analysis
Wrong: polish_audio(album_slug) without looking at issues first
Right: analyze_mix_issues(album_slug) → review → polish_audio(album_slug)
Don't: Run mastering on raw files after polishing
Wrong: master_audio(album_slug) — reads raw files, ignoring polished output
Right: master_audio(album_slug, source_subfolder="polished")
Don't: Process stems and full mix
Wrong: Polish stems, then also polish the full mix Right: Choose one mode. Stems is always preferred when available.
Handoff to Mastering Engineer
After all tracks polished and verified:
## Mix Polish Complete - Ready for Mastering
**Album**: [Album Name]
**Polished Files Location**: [path to polished/ directory]
**Track Count**: [N]
**Mode**: Stems / Full Mix
**Polish Report**:
- Noise reduction applied: [list affected tracks]
- EQ adjustments: [summary of cuts/boosts]
- Compression: [summary]
- No clipping or artifacts in polished output ✓
**Next Step**: master_audio(album_slug, source_subfolder="polished")
Remember
- Stems first — always prefer per-stem processing when stems are available
- Analyze before processing — understand the problems before applying fixes
- Be conservative — default settings are calibrated for Suno output
- Non-destructive — originals always preserved in base directory
- Coordinate with mastering — presence boost at 3 kHz, mastering cuts at 3.5 kHz
- Use source_subfolder — tell mastering to read from polished/ output
- Genre matters — hip-hop needs more bass, rock needs less mud
- Dry run first — preview before committing
- Check for noisereduce — the only new dependency beyond mastering
- Your deliverable: Polished WAV files in polished/ → mastering-engineer takes it from there
FAQ
What does the mix-engineer skill do?
Polishes raw Suno audio by processing per-stem WAVs (vocals, backingvocals, drums, bass, guitar, keyboard, strings, brass, woodwinds, percussion, synth, other) with targeted cleanup, EQ, and compression, then remixing into a polished stereo WAV ready for mastering. Use after audio import and before mastering.
How do I install mix-engineer?
Run npx skills add https://github.com/bitwize-music-studio/claude-ai-music-skills --skill mix-engineer in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/mix-engineer/ (personal) or .claude/skills/mix-engineer/ (project).
Which AI agents can use mix-engineer?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is mix-engineer safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains mix-engineer?
It is published by bitwize-music-studio in bitwize-music-studio/claude-ai-music-skills. It has 340 recorded installs.
More from bitwize-music-studio/claude-ai-music-skills
lyric-writer
bitwize-music-studio/claude-ai-music-skills
Writes or reviews lyrics with professional prosody, rhyme craft, and quality checks. Use when writing new lyrics, revising existing lyrics, or when the user says 'let's work on a track.'
suno-engineer
bitwize-music-studio/claude-ai-music-skills
Constructs technical Suno style prompts for the current model family (v6, v6-wild, v6-mini), selects models and generation settings, and optimizes prompts. Use when creating or refining Suno prompts for track generation.
plagiarism-checker
bitwize-music-studio/claude-ai-music-skills
Open the skill to read its SKILL.md instructions.
mastering-engineer
bitwize-music-studio/claude-ai-music-skills
Guides audio mastering for streaming platforms including loudness optimization and tonal balance. Use when the user has approved tracks and wants to master audio files.
lyric-reviewer
bitwize-music-studio/claude-ai-music-skills
Open the skill to read its SKILL.md instructions.
album-art-director
bitwize-music-studio/claude-ai-music-skills
Open the skill to read its SKILL.md instructions.
Popular media & creative skills
hyperframes
heygen-com/hyperframes
Read first to make, edit, animate or render any video with HyperFrames (HTML rendered to video), including launch films, explainers, music videos, charts, maps, vertical clips, title cards, captions and overlays. Holds the render contract, the work loop and what each kind of video needs.
media-use
heygen-com/hyperframes
Get or make any media for a HyperFrames video - music, sound effects, images, icons, logos, voiceover, avatar and generated video, transcripts, cutouts, colour grades and looks - with HeyGen or free local tools, and mix placed audio. Also for footage that looks dark, flat or dull, or should be stylized or hidden.
hyperframes-registry
heygen-com/hyperframes
About 450 ready-made HyperFrames blocks and components installed as editable source - transitions, overlays, titles, kinetic type, captions, charts, map overlays, 3D, camera moves. Use it before hand-building any named visual (CRT scanlines, glitch, film grain, a chart); also for hyperframes add and catalog.
hyperframes-creative
heygen-com/hyperframes
Non-animation creative direction for HyperFrames videos. Use for design spec (frame.md / design.md) handling, palettes, typography, narration, beat planning, audio-reactive visuals, composition patterns, and brand / style decisions. For atomic motion patterns and scene blueprints, use hyperframes-animation.
ai-video-generation
101-skills/superpowers
Generate AI videos with Google Veo, Seedance 2.0, HappyHorse, Wan, Grok and 40+ models via inference.sh CLI. Models: Veo 3.1, Veo 3, Seedance 2.0, HappyHorse 1.0, Wan 2.5, Grok Imagine Video, OmniHuman, Fabric, HunyuanVideo. Capabilities: text-to-video, image-to-video, reference-to-video, video editing, lipsync, avatar animation, video upscaling, foley sound. Use for: social media videos, marketing content, explainer videos, product demos, AI avatars. Triggers: video generation, ai video, text to video, image to video, veo, animate image, video from image, ai animation, video generator, generate video, t2v, i2v, ai video maker, create video with ai, runway alternative, pika alternative, sora alternative, kling alternative, seedance, happyhorse
ai-image-generation
101-skills/superpowers
Generate AI images with GPT-Image-2, FLUX, Gemini, Grok, Seedream, Reve and 50+ models via inference.sh CLI. Models: GPT-Image-2, FLUX Dev LoRA, FLUX.2 Klein LoRA, Gemini 3 Pro Image, Grok Imagine, Seedream 4.5, Reve, ImagineArt. Capabilities: text-to-image, image-to-image, inpainting, LoRA, image editing, upscaling, text rendering. Use for: AI art, product mockups, concept art, social media graphics, marketing visuals, illustrations. Triggers: flux, image generation, ai image, text to image, stable diffusion, generate image, ai art, midjourney alternative, dall-e alternative, text2img, t2i, image generator, ai picture, create image with ai, generative ai, ai illustration, grok image, gemini image, gpt image, openai image, chatgpt image