프로젝트 소개

TastyTunes는 StreamMagic 플랫폼 기반의 Cambridge Audio 네트워크 플레이어를 위한 리모컨 역할을 하는 데스크톱 애플리케이션입니다. README에 명시된 지원 모델은 Evo 75/150, CXN100, CXN (V2), MXN10, AXN10, EXN100, Edge NQ 및 851N이며, Evo 150을 대상으로 개발 및 일일 테스트가 진행됩니다. 이 앱은 로컬에서 실행되어 사용자의 네트워크를 통해 스트리머와 통신하며, 별도의 계정이나 클라우드 서비스가 필요하지 않습니다. 설치 프로그램은 macOS 11+(유니버설, 서명 및 공증됨), Windows 10+(x64 및 arm64를 모두 지원하는 단일 서명 설치 프로그램), Linux(x64 또는 arm64 AppImage, 64비트 Raspberry Pi OS 포함)용으로 제공됩니다. 앱 실행 시 SSDP를 통해 네트워크상의 StreamMagic 장치를 검색하며, 검색 결과가 없을 경우 IP 주소를 수동으로 입력할 수 있습니다. 데모 모드에서는 하드웨어 없이 내장된 가상 스트리머와 두 개의 샘플 라이브러리를 통해 전체 애플리케이션을 실행해 볼 수 있습니다. 'Now Playing' 화면은 흐릿한 아트 배경 위에 커다란 앨범 아트워크, 트랙 세부 정보, 코덱, 샘플링 레이트, 비트 깊이, 무손실 및 MQA 표시를 위한 포맷 배지, 그리고 색상뿐만 아니라 모양으로 상태가 구분되는 신호 품질 표시기를 보여줍니다. 메인 창과 더불어 전체 화면 디스플레이 모드, 프레임 없는 항상 위 mini player, 선택 가능한 메뉴 바 또는 시스템 트레이 패널이 제공됩니다. 라이브러리 기능은 모든 로컬 UPnP 미디어 서버와 스트리머의 USB 저장소를 아티스트, 앨범, 트랙 뷰로 통합하며, 모든 소스에서 즉시 검색이 가능한 재구축 가능한 로컬 인덱스를 기반으로 합니다. 필터링 및 정렬은 장르, 연대, 포맷, 다이내믹 레인지, 그리고 일반 앨범과 컴필레이션 앨범 구분을 지원합니다. 앨범 처리 시 피처링 게스트의 위치를 유지하고, 컴필레이션은 Various Artists 아래로 그룹화하며, 멀티 디스크 세트의 경우 디스크 구분선을 표시하고, 멀티 볼륨 박스 세트는 볼륨 선택기 뒤로 축소하여 보여줍니다. 누락된 아트워크는 Cover Art Archive에서 채울 수 있습니다. 라이브러리 재생 외에도 즐겨찾기, 콘텐츠 정의 기반의 로컬 저장 플레이리스트, 다중 선택 및 드래그 재정렬이 가능한 큐, 숫자 키로 호출 가능한 스트리머의 99개 프리셋 슬롯(각 슬롯별 볼륨 저장 가능), 틸트 및 밸런스 조절이 가능한 7밴드 EQ, 소스 전환, 그리고 장르 및 연대 카테고리가 있는 radio-browser.info 디렉토리 브라우징 기능을 제공합니다. 동기화된 가사는 LRCLIB에서 가져와 한 줄씩 강조 표시되며, 특정 줄을 클릭하면 해당 구간으로 이동합니다. 아티스트 전기와 앨범 정보는 MusicBrainz와 Wikipedia에서 가져오며 출처 링크를 제공합니다. 오디오 분석 기능은 로컬 미디어 서버의 파일을 읽어 탐색 바와 아트워크 하단에 파형을 그리고, DR 데이터베이스의 TT-DR 절차에 따라 다이내믹 레인지 값을 계산하여 라이브러리의 필터 및 정렬 옵션으로 사용합니다. 제한된 최근 재생 로그와 연 단위 JSON Lines 파일로 기록되는 청취 기록은 재생 곡과 시간을 추적하며, 두 기능 모두 삭제하거나 비활성화할 수 있습니다. ListenBrainz 스크로블링은 실제 재생 시간이 경과한 후에만 전송하며, 실패한 전송은 재시도합니다. 자동화 기능에는 15분에서 2시간 또는 트랙 종료 시까지의 취침 타이머(선택적 볼륨 페이드아웃 포함)와, 프리셋으로 장치를 깨워 페이드인하거나 대기 모드로 전환하는 요일별 스케줄이 포함됩니다. 기본적으로 꺼져 있는 선택적 MCP 서버는 Claude Code나 Claude Desktop과 같은 로컬 AI 에이전트에게 재생 및 볼륨, 프리셋 및 소스, 라이브러리 및 라디오, 즐겨찾기, 톤 및 EQ, 취침 타이머, 청취 기록 및 오디오 분석 등 앱의 기능을 노출합니다. 편집 도구는 분리되어 있으며 활성화 전까지는 비활성 상태로 유지되고, 에이전트는 UI의 볼륨 제한, 전원 보호 장치 및 연결 토글 설정을 그대로 상속받습니다. README에는 추가 통합 없이 MCP 엔드포인트를 호출하는 Home Assistant rest_command 예시도 포함되어 있습니다. 이 프로젝트는 머신에서 나가는 네트워크 트래픽을 정확히 문서화합니다. 스트리머 제어 및 라이브러리 브라우징을 위해 로컬 네트워크 외부로 전송되는 데이터는 없으며, 가사, 아티스트 및 앨범 컨텍스트, 누락된 앨범 아트, 업데이트 확인 및 라디오 검색은 설정에서 켜고 끌 수 있고, 스크로블링은 토큰을 추가해야 활성화됩니다. 분석, 텔레메트리 또는 계정 시스템이 없으며, 요청 콘솔과 원시 스트리머 트래픽 콘솔이 내장되어 있습니다. 기술 스택은 Electron(electron-vite), React 19, TypeScript, Tailwind CSS v4 및 Zustand를 사용하며, 메인 프로세스는 SSDP와 스트리머의 SMOIP WebSocket을 통해 장치 I/O를 처리합니다. 스트리머를 단일 진실 공급원(single source of truth)으로 취급하여, 명령을 보내면 상태가 다시 푸시되고 인터페이스가 해당 푸시를 기반으로 다시 렌더링됩니다. 이 프로젝트는 GNU General Public License v3.0 하에 배포되며, develop 브랜치에서 개발이 진행되고 CI를 통해 typecheck, ESLint 및 Prettier 검사가 실행됩니다.