Song / Release Index
What is hot right now. Recency-weighted so a comeback can spike and naturally settle over roughly two to three weeks.
The topkpop Index
One 0–100 score, computed from normalized public signals. No LLM and no editorial opinion: just a published weighting, recency decay, and a reproducible ranking pipeline.
What is hot right now. Recency-weighted so a comeback can spike and naturally settle over roughly two to three weeks.
Sustained standing with less volatility, combining the artist's best representative song with audience, video, wins, and touring signals.
| Signal | Weight | Source |
|---|---|---|
| YouTube MV view velocity (24h + 7d gains) | 25% | YouTube Data API |
| Spotify popularity (0–100) | 25% | Spotify Web API |
| Korean realtime chart position | 25% | Melon primary |
| Billboard presence | 15% | billboard-json GitHub feed |
| Music-show win momentum (last 14 days) | 10% | Music-show feed |
| Signal | Weight | Source |
|---|---|---|
| Best representative song's Song Index | 30% | Computed |
| Spotify followers + 30-day growth | 25% | Spotify Web API |
| YouTube subscribers + view velocity | 20% | YouTube Data API |
| Recent music-show wins (last 30 days) | 15% | Music-show feed |
| Active touring | 10% | Concerts feed |
Take the latest successful snapshot for each signal from D1.
Convert each raw signal to 0–100 across the tracked cohort using percentile rank. Missing or stale signals are dropped and remaining weights are re-normalized; coverage is recorded.
Apply an exponential half-life of roughly seven days to velocity and event components such as YouTube velocity and music-show momentum.
Combine normalized components with the published weights to produce a 0–100 score per song and artist.
Compare with the prior daily snapshot and the snapshot from seven days ago to calculate up, down, new, or steady movement.
Write a ranked, timestamped snapshot to D1. Live rankings read the latest; the weekly topkpop 100 reads the Monday 00:00 KST freeze.
Weights live in a single configuration file so they can be tuned without changing the engine. “Global-fan balanced” is the locked v1 default. Before launch, a sanity backtest against a known week must confirm that the output matches recognizable fan expectations and does not contain obvious data artifacts.