프로젝트 소개

Limusic은 Tauri 2, Rust, SvelteKit 단일 페이지 UI로 만든 YouTube Music용 네이티브 데스크톱 클라이언트입니다. YouTube의 내부 API와 직접 통신하고 libmpv를 통해 오디오를 재생하므로 번들 브라우저 런타임도, 백엔드 서버도, Electron도 없습니다. 이 프로젝트는 Android용 YouTube Music 클라이언트인 Metrolist의 재생 엔진을 데스크톱용으로 다시 만든 것으로 시작했습니다. 재생 및 라이브러리 스트림은 YouTube API에서 가져오며 광고는 재생되지 않습니다. 검색과 탐색은 곡, 앨범, 아티스트, 재생목록, YouTube Music 홈 피드를 아우르며, 입력하는 동안 결과가 미리 표시됩니다. 사용자는 앱 내 Google 로그인이나 쿠키 붙여넣기를 통해 YouTube Music 계정으로 로그인할 수 있고, 여러 계정을 동시에 보관하며 전환할 수 있습니다. 라이브러리 보기에서는 재생목록, 좋아요 표시한 곡, 저장한 앨범과 아티스트, 업로드가 표시되며, 좋아요 표시, 재생목록에 추가, 커버 아트를 포함한 재생목록 생성·편집·삭제, 구독, 라이브러리에 저장 같은 쓰기 작업도 가능합니다. 재생 기록은 YouTube Music 자체의 일별 버킷에 보관됩니다. 음량 정규화를 포함한 갭리스 재생은 libmpv가 처리하며, 대기열은 라디오/오토믹스 이어 재생, 드래그로 순서 변경, 재시작 후 복원을 지원합니다. 로컬 오디오 파일도 메타데이터를 그대로 유지한 채 재생할 수 있습니다. 인터페이스 및 통합 동기화 가사는 사이드 패널에 표시되며 자동 스크롤과 클릭으로 이동, 소스가 타이밍을 제공하는 경우 단어 단위 표시, 각 줄 아래 번역을 지원합니다. 가사는 Boidu에서 먼저 가져오고, 그다음 LRCLIB, YouTube Music의 시간 동기화 가사, Netease, QQ Music, Kugou 순으로 시도하며, 실패하면 일반 텍스트로 대체되고 결과는 로컬에 캐시됩니다. 선택적으로 뮤직비디오가 아트워크 위치에서 재생됩니다. 미니 플레이어와 극장 모드를 사용할 수 있습니다. Last.fm 스크로블링은 제목 표시줄에서 연결하며 절반 지점 또는 4분 중 먼저 도달하는 시점에 스크로블합니다. Discord Rich Presence는 곡, 아티스트, 아트워크, 진행 막대를 표시합니다. OS 미디어 키와 현재 재생 중 통합은 Linux의 MPRIS와 Windows의 SMTC를 통해 지원되며, 작업 표시줄 미리보기 버튼도 제공됩니다. 시스템 트레이는 창을 닫아도 재생을 유지하며 재생/일시정지와 건너뛰기 컨트롤, 선택적 로그인 시 시작을 제공합니다. Listen Together는 작은 자체 호스팅 릴레이를 통해 동기화된 청취 룸을 제공합니다. 각 참가자는 자신의 오디오를 스트리밍하고 룸은 재생/일시정지, 탐색, 곡 변경, 대기열을 중계하며, 참여 코드와 호스트 승인을 사용합니다. 키보드 단축키로는 검색용 Ctrl+K와 단축키 목록용 Ctrl+H가 있고, Ctrl과 휠로 인터페이스를 확대·축소할 수 있습니다. 사용자 지정 및 언어 앱은 강조 색상 팔레트, 사용자 지정 색상, 사용자 지정 글꼴, 모서리 둥글기, 사용자 지정 앱 아이콘, 재생 중인 커버에서 색을 다시 뽑는 적응형 테마를 제공합니다. 현재 6개 언어가 제공됩니다: 영어, 스페인어, 프랑스어, 터키어, 브라질 포르투갈어, 인도네시아어이며 더 많은 언어가 작업 중입니다. 번역은 풀 리퀘스트가 아니라 Weblate에서 관리됩니다. 플랫폼 및 패키징 빌드는 Windows(setup.exe 자체 업데이트 또는 .msi), Linux(libmpv가 번들된 자체 업데이트 AppImage, .deb, .rpm), macOS Apple Silicon(.dmg, 서명되지 않음)용으로 제공됩니다. Intel macOS 빌드는 소스에서 빌드합니다. 커뮤니티 유지 관리 패키지로 Arch AUR, Fedora COPR, openSUSE Tumbleweed용이 있습니다. 소스에서 빌드하려면 libmpv와 webkit2gtk 개발 패키지, UI용 pnpm, Rust 쪽용 Cargo/Tauri가 필요합니다. 소스에서 빌드할 때 Last.fm 통합은 개발자 자신의 API 키와 시크릿을 src-tauri/lastfm.keys에 넣어야 합니다. 그 파일이 없어도 나머지는 빌드되고 실행됩니다. 아키텍처 참고 순수 Rust 크레이트가 YouTube의 InnerTube API와 통신하며 여러 공식 클라이언트 신원을 가장하고 그 사이에서 대체합니다. 스트림 URL은 난독화된 JavaScript(서명 암호와 n 매개변수)와 BotGuard 증명으로 보호됩니다. Limusic은 그 JavaScript를 UI 프로세스와 격리된 숨겨진 실제 웹뷰에서 실행합니다. 오디오는 디스크 캐시와 함께 libmpv를 거칩니다. SvelteKit UI는 Rust 코어와만 통신하며 YouTube에 직접 접속하지 않습니다. 이 프로젝트는 GPL-3.0 라이선스이며 YouTube 또는 Google과 제휴 관계가 없다고 명시합니다.