reelmimic
좋아하는 영상을 보여주면 같은 스타일의 새 영상을 AI 팀이 함께 기획·제작·검토해 줍니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗A data pipeline that ranks songs by an era-normalized popularity score, combining Billboard chart history (Hot 100, Digital Song Sales, Radio Songs), Spotify and YouTube all-time counts, iTunes/Apple Music chart points, and RIAA Gold/Platinum/Diamond single certifications into one composite score. Built as the source of truth for Versed.
Live: joavn.dev/MPI
Work in progress. The scoring model is still being tuned. Rankings, weights, and the song pool will change. Don't treat the current numbers as final.
CLAUDE.md).output/music_index_full.csv) and browsable pages
(output/index.html, output/billboard.html).Eight weighted dimensions, each era-normalized so songs from different decades are
comparable. Exact weights live in config.py:
| Dimension | Weight | Era-normalized by | Applies to songs from |
|---|---|---|---|
| Billboard | 30% | ±5-year rolling window | all eras |
| Spotify | 17% | release decade | all eras |
| RIAA certifications | 15% | release decade | all eras |
| YouTube | 11% | release decade | all eras |
| Digital Sales | 8% | ±5-year rolling window | 2004+ |
| iTunes | 7% | release decade | 2010+ |
| Apple Music | 7% | release decade | 2017+ |
| Radio Airplay | 5% | ±5-year rolling window | 1990+ |
0.6 × peak_pct + 0.4 × weeks_pct
on the respective chart.Nx multipliers) — the one all-era dimension besides Billboard/Spotify/
YouTube, since RIAA has certified singles since 1958 and this is meant to give
pre-streaming songs a second signal to lean on.config.py's _PLATFORM_START in score.py): songs released before that
platform existed are excluded from the denominator rather than penalized for an
absence beyond their control.output/index.html has an in-browser weight adjuster — type a weight (%) per
dimension and the table re-ranks live in your browser, no server round-trip.See CLAUDE.md for the full architecture and data-flow notes.
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
Create a .env with Spotify API credentials:
SPOTIFY_CLIENT_ID=...
SPOTIFY_CLIENT_SECRET=...
Scrape source data first (slow, resumable — only needed when refreshing data):
python src/fetch_billboard.py # Billboard Hot 100 (~875 requests)
python src/fetch_kworb.py # Spotify all-time streams
python src/fetch_youtube.py # kworb.net all-time YouTube views
python src/fetch_itunes.py # kworb.net worldwide iTunes chart points
python src/fetch_apple_music.py # kworb.net Apple Music chart points
python src/fetch_riaa.py # RIAA Gold/Platinum/Diamond single certifications (can take hours)
Then build everything with the one-command runner:
python src/run_pipeline.py # score -> spotify links -> csv -> html
python src/run_pipeline.py --quick # fast iteration: score -> csv only (no network, no html)
Album art is a separate, manual step (like the scrapers above, not part of the runner — it's a slow external fetch, not a local merge):
python src/fetch_album_art.py # album art via Spotify's public oEmbed endpoint (no API keys, resumable)
Run it once after fetch_spotify_links.py has resolved this run's tracks, then
re-run export_csv.py (or the full runner) to merge the art into the output CSV.
Re-running fetch_album_art.py later only fetches songs newly added to the pool.
Outputs land in output/ (index.html, billboard.html, music_index_full.csv).
Tune the song pool size with TOP_N in config.py.
The site is served from the Portfolio
repo (Vercel, joavn.dev) under the mpi/ path. The built HTML pages
(output/index.html, output/billboard.html) are committed to this repo and synced
across automatically.
Automatic: the Sync to Portfolio GitHub Action runs on every push to main
that changes a published page. It copies the pages into Portfolio/mpi/ and pushes.
Requires a repo secret PORTFOLIO_TOKEN — a personal access token with write
access to JoachimVN/Portfolio (the same token CHORIDOR-web uses).
To publish a new build:
python src/run_pipeline.py # rebuild the pages
git add output/index.html output/billboard.html
git commit -m "Rebuild index"
git push # the Action syncs to joavn.dev/mpi
Manual (if you'd rather sync from your machine, with ../Portfolio checked out):
./sync-portfolio.sh