-
Notifications
You must be signed in to change notification settings - Fork 1
Open
Labels
enhancementNew feature or requestNew feature or request
Description
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)
- Words per second — average across the song. Fast songs are harder.
- Lyrics density — ratio of singing time to total duration. Songs with few breaks are harder.
- Word complexity — average word length or syllable count. Longer words are harder to read in time.
- Gap consistency — variance in timing gaps between words. Irregular rhythms are harder to follow.
- Speaker changes — songs with many speaker switches (duets) are harder for solo singers.
- 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
difficultyfield tolyrics.json(alongsideavg_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.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or request