Open this lesson in your favourite AI. It'll walk you through the why, explain the demo, and quiz you on the try-it list.
Ninety percent of AI-generated music sounds AI-generated in a specific, avoidable way: over-compressed, texturally muddy, structurally repetitive, lyrically clichéd ('neon dreams, digital hearts, electric souls'), vocally auto-tuned to death, mixed too loud, and ending exactly on the beat with an unearned crescendo. This 'AI slop' pattern is not the model's fault; it's the default that emerges when you generate without craft. The rest of this course teaches craft — prompt structure, arrangement discipline, mix/master with human ear — so your outputs don't fall into the slop pattern. This task builds the slop-detector so you know when you've slipped.
The 8-point slop checklist. Run any AI-generated track through it. If it hits 4+, redo it.
Use these three in order. Each builds on the one before.
In one paragraph, explain what makes AI music sound like AI music.
Walk me through why AI music tends to over-compress — model training loss vs. sensible mastering.
The tracks I generate hit 3 of 8 slop indicators. Design a specific 3-step post-processing pipeline (regenerate / stem-swap / master) to fix them.
# The AI-slop checklist. Score any generated track.
CHECKS = [
# tag, description
("over_compressed", "Peaks all glued at -1dB, no dynamic range. Sounds tiring after 30s."),
("muddy_textures", "Every instrument occupies 100-800Hz. No separation. Listen on headphones and you'll notice."),
("repetitive_structure", "Same 8-bar loop through 3 minutes with token variation. No bridge, no drop, no arc."),
("cliche_lyrics", "'neon', 'digital', 'electric dreams', 'soul on fire', 'lights on the dance floor'."),
("dead_autotune", "Every vocal note snapped to grid. No slides, no vibrato, no breath."),
("mixed_too_loud", "LUFS above -8 (streaming platforms normalize to -14; you're just losing headroom)."),
("perfect_end", "Track ends exactly on the downbeat with a crescendo that wasn't earned by tension."),
("no_silence", "No pauses anywhere. Real music breathes; AI music often doesn't."),
]
def score_track(observations: list[str]) -> dict:
"""Pass a list of tag names you observed. Score = # tripped."""
tripped = [c for c in CHECKS if c[0] in observations]
return {
"score": len(tripped),
"verdict": "slop" if len(tripped) >= 4 else "borderline" if len(tripped) >= 2 else "clean",
"tripped": [t[0] for t in tripped],
}
# Example: a Suno first-take with default settings
r = score_track(["over_compressed", "cliche_lyrics", "dead_autotune", "perfect_end"])
print(r)
# → {"score": 4, "verdict": "slop", ...} — regenerate.
python3 main.py