Skip to content

feat: 기상음악 AI 분석 기능 추가 - #197

Merged
Dino0204 merged 23 commits into
developfrom
feat/wake-up-music-ai-analysis
Jun 30, 2026
Merged

feat: 기상음악 AI 분석 기능 추가#197
Dino0204 merged 23 commits into
developfrom
feat/wake-up-music-ai-analysis

Conversation

@Dino0204

@Dino0204 Dino0204 commented Jun 29, 2026

Copy link
Copy Markdown
Member

#️⃣연관된 이슈

없음

📝작업 내용

  • 유튜브 자막을 yt-dlp로 추출하는 서버 라우트(/api/youtube/transcript) 추가 (429/타임아웃 대비 동시성 제한·재시도)
  • WebGPU 로컬 LLM(@mlc-ai/web-llm)을 워커에서 구동해 곡별 적합도 등급·한 줄 요약·부적절 표현(타임스탬프 포함) 분석
  • 크게 보기 모달 개편: 인앱 유튜브 플레이어 + 이전/다음곡 이동 + AI 분석 패널, 이슈 타임스탬프 클릭 시 해당 시점부터 자동재생
  • 자막 · 분석 결과를 Cache API에 영구 캐시, 재분석 없이 모달 진입 시 즉시 표시
  • MusicListItem에 곡 선택 · AI 상태 슬롯 추가
  • 기자위의 AI 분석 권한을 사감 선생님 계정으로 제한, 어드민은 전체 허용
  • 플레이어 토글 아이콘 추가
  • 기상음악 기능을 wake-up-music / wake-up-music-recommend / wake-up-music-analysis 3개 feature로 분리
image image image

💬리뷰 요구사항

  • 자막 추출은 호스트에 yt-dlp 바이너리(YT_DLP_PATH)가 필요합니다
  • 자막 · 분석 캐시 키에 모델/프롬프트 버전을 넣지 않아, 모델 · 프롬프트 변경 시 옛 결과가 재사용됩니다(캐시 수동 삭제 필요).
  • gemma-2-2b-it-q4f16_1-MLC 경량 모델을 사용하였지만, 사감 선생님 데스크톱 환경에서 램 점유율 및 신뢰도 테스트가 필요합니다.
  • 429 제한 테스트도 필요합니다.(하루 평균 30개의 곡이 올라오기 때문)

@vercel

vercel Bot commented Jun 29, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
flooding-v2 Ignored Ignored Preview Jun 30, 2026 1:33am

Request Review

@github-actions github-actions Bot added the 📩 Type: Feature/Function 새로운 기능 및 개선 사항 label Jun 29, 2026

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

이번 풀리퀘스트는 기상음악의 자막을 수집하고 로컬 LLM(@mlc-ai/web-llm)을 활용해 기상음악 적합성을 분석하는 AI 분석 기능을 도입합니다. 자막 수집을 위한 API 라우트 추가, Web Worker 기반의 LLM 엔진 구동, Cache API를 활용한 분석 결과 캐싱, 그리고 플레이어 및 AI 분석 결과 패널 등의 UI 컴포넌트가 새롭게 구현되었습니다. 이에 대해 리뷰어는 API 라우트에서의 액세스 토큰 유효성 검증 및 비디오 ID 형식 검증 누락에 따른 보안 취약점을 지적했습니다. 또한, 권한 확인 시 고유하지 않은 사용자 이름을 사용하는 문제, Next.js SSR 환경에서 caches API 미지원으로 인한 런타임 에러 가능성, 그리고 UI에서 선택된 곡의 하이라이트 조건 오류에 대한 개선 의견을 제시했습니다.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

Comment thread app/api/youtube/transcript/route.ts
Comment thread app/api/youtube/transcript/route.ts
Comment thread src/entities/dormitory/lib/musicPermission.ts
Comment thread src/features/wake-up-music-analysis/lib/analysisCache.ts
Comment thread src/features/wake-up-music/ui/MusicListModal.tsx Outdated
Dino0204 and others added 3 commits June 29, 2026 20:40
- 자막 API videoId 11자리 정규식 검증 추가 (경로 이탈·yt-dlp 인자 주입 방어)
- analysisCache caches API SSR 가드 및 try/catch 추가
- 음악 리스트 선택 표시를 selectedSong 기준으로 수정

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Dino0204 and others added 3 commits June 30, 2026 10:22
자동 생성 자막 마커(isAutoGeneratedCaption)로 분석 결과에 autoCaption을
표시하고, AiRatingBadge에 '자동 생성' 배지를 추가한다.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YDca1eg1GFHRBmBLYnCMEk
base 스타일에 고정돼 있던 truncate를 multiline=false일 때만 적용하도록
바꿔, 여러 줄 안내문에도 NoteText를 쓸 수 있게 한다. 기본값은 기존과 동일.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YDca1eg1GFHRBmBLYnCMEk
AiIssuesPanel을 .Empty/.Loading/.Error static property 패턴으로 정리하고,
로딩 스켈레톤이 영역을 채우도록 한다.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YDca1eg1GFHRBmBLYnCMEk
Dino0204 and others added 4 commits June 30, 2026 10:23
모델 로드 상태(ModelState)를 webllmEngine 모듈이 단일 출처로 보유하고
useSyncExternalStore로 구독한다. 자막 수집 전에 WebGPU 미지원을 먼저
감지하고, 모델 진행 상태를 버튼 옆 인디케이터로 분리한다. 분석 실패 시
진행 중이던 곡들의 로딩 상태를 정리한다.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YDca1eg1GFHRBmBLYnCMEk
AI 안내를 NoteTooltip으로, 이전/다음을 SVG 아이콘으로 바꾸고 AI 분석
섹션을 결과 유무와 무관한 고정 높이로 맞춘다. 평점 배지를 제목 옆에
배치하고, 영상을 레터박스로 감싼다.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YDca1eg1GFHRBmBLYnCMEk
@Dino0204
Dino0204 merged commit 4f0deb2 into develop Jun 30, 2026
10 checks passed
@Dino0204
Dino0204 deleted the feat/wake-up-music-ai-analysis branch June 30, 2026 01:36
@Dino0204 Dino0204 mentioned this pull request Jun 30, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

📩 Type: Feature/Function 새로운 기능 및 개선 사항

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants