Pick a depth. Each prompt opens in your AI pre-loaded with the lesson. Click a row to preview the prompt.
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.
# 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