Skip to content

Song difficulty rating (auto-computed) #37

@LoggeL

Description

@LoggeL

Problem

Users don't know how hard a song is before committing to it. Some songs have rapid-fire lyrics, wide vocal ranges, or complex rhythms that make them poor choices for casual singers.

Proposal

Auto-compute a difficulty score (1-5 stars or Easy/Medium/Hard) for each processed song, based on objective metrics from the data we already have.

Metrics (all derivable from existing lyrics.json + audio)

  1. Words per second — average across the song. Fast songs are harder.
  2. Lyrics density — ratio of singing time to total duration. Songs with few breaks are harder.
  3. Word complexity — average word length or syllable count. Longer words are harder to read in time.
  4. Gap consistency — variance in timing gaps between words. Irregular rhythms are harder to follow.
  5. Speaker changes — songs with many speaker switches (duets) are harder for solo singers.
  6. Transcription confidence — low confidence often means unusual pronunciation or fast delivery.

Scoring Formula

Weighted combination of the above, normalized to a 1-5 scale:

  • 1-2: Slow, clear, regular rhythm (ballads, simple pop)
  • 3: Average pop/rock
  • 4-5: Fast rap, complex rhythms, duets, low-confidence lyrics

Storage

  • Add difficulty field to lyrics.json (alongside avg_confidence)
  • Compute during post-processing in helpers.py
  • Backfill existing songs (similar to confidence backfill)

Display

  • Star rating or color-coded badge in library cards
  • Filter/sort by difficulty in library
  • Show in admin song detail view
  • Show subtly in the player (next to song title)

Complexity

Low. Pure computation from existing data, no new services needed. The interesting part is tuning the formula weights.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions