날짜: 2026-06-20 KST
레포: parksy-audio/spotify
세션 범위: Spotify OAuth 인프라 완성 → 클래식3형제 플레이리스트 → 커버 이미지 자동화
- Bruckner 6곡 / Mahler 6곡 / Fauré 7곡 = 19트랙
- 600×600 JPEG, 42.6KB
- NotoSerifCJK-Bold 폰트, 딥 네이비 배경, 금색 글씨
- 재사용 가능: --title, --names, --subtitle 파라미터
✅ 동작: 검색, ISRC, 플레이리스트 CRUD, 개인 청취 이력, 현재 재생 중
❌ 차단: audio-features (BPM/키), audio-analysis (pitches 12차원), recommendations
결론: Spotify = DJ/큐레이션 레이어. 피치/BPM = librosa/basic-pitch로 직접 추출.
구조적으로 더 나음 — Spotify 파생물 아니라 법적으로 더 깨끗.
parksy-audio/spotify/
├── scripts/
│ ├── auth.py ← OAuth 자동 갱신 래퍼 (핵심)
│ └── cover_art.py ← 플레이리스트 커버 이미지 생성 + 업로드
├── docs/
│ ├── SPOTIFY-STRATEGY-WHITEPAPER.md
│ ├── SPOTIFY-3MONTH-PROJECT.md
│ ├── SPOTIFY-RANGE-AND-SCOPE.md
│ └── FEMALE-VOCAL-SELECTION.md
└── outputs/
└── playlists_current.json
# 환경 활성화
source ~/parksy-audio/spotify/.venv/bin/activate
# 커버 이미지 생성 + 업로드
python3 ~/parksy-audio/spotify/scripts/cover_art.py 6qL0XJjO4E4HLPSAUd4mPX \
--title "클래식3형제" \
--names "Bruckner × Fauré × Mahler" \
--subtitle "영감용 레퍼런스 플레이리스트"
# ugc-image-upload scope 재인증 URL (1회 수동 필요)
# https://accounts.spotify.com/authorize?client_id=561fb317121b4f5e96335678fa36f771
# &response_type=code&redirect_uri=https%3A%2F%2Fexample.org%2Fcallback
# &scope=playlist-modify-private+playlist-modify-public
# +user-read-email+user-read-private+ugc-image-upload
# &show_dialog=false
1. ugc-image-upload code 값 받으면 → auth.py exchange_code() 호출 → 토큰 갱신
2. cover_art.py 실행 → 커버 업로드 확인
3. parksy_female_vocal_v1 플레이리스트 자동 생성
Claude Code | parksy-audio dev-log 019 | 2026-06-20 KST