프로젝트 소개

Bose가 SoundTouch 클라우드를 종료하면서 스피커에는 Bluetooth, AUX, AirPlay, 멀티룸 존만 남고 인터넷 라디오, 프리셋, 브라우징, Alexa는 사라졌습니다. 이 저장소는 사용자가 스피커를 자체 호스팅 대체 서비스로 연결하여 라디오와 프리셋을 되찾도록 안내하는 Claude Code 스킬입니다. 비기술 사용자를 전제로 하며, 스킬은 지시하기보다 질문하고, 자유롭게 읽으며, 스피커의 무엇이든 변경하기 전에 확인을 요구합니다. 대체 서비스는 gesellix(Bose-SoundTouch)의 AfterTouch이며, 스킬은 이를 기준으로 인정합니다. 이 저장소는 포크가 아닌 스킬이며, 게시된 컨테이너 이미지를 설치합니다. 요구 사항은 로컬 네트워크상의 SoundTouch 스피커 하나 이상, 같은 네트워크에 있는 Docker 가능 머신(NAS, Raspberry Pi, 소형 Linux 박스)과 안정적인 주소, 그리고 Python 3.11+, uv, compose 플러그인이 있는 Docker입니다. 스킬의 첫 단계에서 이를 스스로 확인하고 누락된 항목을 설치 명령과 함께 보고합니다. 설치는 Claude Code 플러그인 마켓플레이스를 통해 이루어집니다: /plugin marketplace add bitranox/soundtouch-decloud /plugin install soundtouch-decloud 문제를 평범한 말로 설명하여 트리거하거나 이름으로 호출할 수도 있습니다. 워크플로는 확인 지점이 있는 단계로 진행됩니다: 사전 요구 사항 확인 및 설치 도움, 스피커 검색, 서비스 구동, 변경 전 모든 스피커 백업, 네 개의 서비스 URL 재작성, 라디오 소스 대기, 방송국 복구 및 검증, 프리셋 작성, 마지막으로 개수 세기가 아닌 청취를 통한 재생 증명. 스킬에는 다섯 개의 참조 파일과 네 개의 스크립트가 포함됩니다. 모든 스크립트는 JSON 봉투를 출력하고 일관된 종료 코드(0 예, 1 아니오, 2 판단 불가)를 사용합니다. 스피커를 변경하는 모든 작업에는 명시적 --confirm이 필요하므로 읽기 전용 작업은 항상 안전합니다. 스크립트는 사전 점검, Docker/compose 검증 및 서비스 상태, 네트워크 검색, 진단 SSH 포트를 통한 URL 재작성 및 재부팅 온보딩, 프리셋 백업/수집/검증/확인/복원/상대화를 다룹니다. 문서는 오진하기 쉬운 실패 모드를 지적합니다: 브리지 네트워킹은 설치된 것처럼 보이지만 아무것도 검색하지 못함(호스트 네트워킹 필요); 계정 URL만 재작성하면 스피커가 등록되고 동기화되지만 아무것도 재생하지 않음; URL 쓰기 순서가 중요함 — 쓰기 전에 저장하면 명령은 여전히 OK를 반환하지만 오래된 값이 저장됨; 프리셋의 원시 스트림 URL은 허용되지만 절대 재생되지 않으므로 프리셋은 AfterTouch의 상대 형식을 사용함; 복사된 서비스는 settings.json server_url을 통해 이전 주소를 유지함; DHCP 할당 서비스 주소는 나중에 모든 스피커를 한꺼번에 망가뜨림. 방송국 복구는 네 단계 과정입니다: 마이그레이션 전 프리셋에서 스트림 URL 수집(서비스가 이를 보존하지 않으므로 백업이 먼저 실행됨), 이전 방송국 목록을 여전히 원하는지 소유자에게 질문, 남은 방송국의 현재 직접 스트림 엔드포인트 조사, 서비스 호스트에서 검증. 검증은 버튼별로 보고합니다: audio, playlist, hls, not-audio, dead, missing. 문서는 방송국이 이동하고 사라진다는 점, 그리고 .m3u 플레이리스트가 순진한 오디오 검사를 통과하면서도 오디오를 포함하지 않을 수 있다는 점을 언급합니다. 지속 운영을 위해 스킬은 각 스피커 프리셋의 서비스 외부 스냅샷, 일회성 복원, 예약 알람에 적합한 읽기 전용 확인을 추가합니다. AfterTouch v0.137.0이 계정의 스피커 간에 프리셋을 공유하므로, 스킬은 스스로 쓰기를 수행하는 어떤 것도 의도적으로 설치하지 않습니다. 문서는 측정 데이터를 인용합니다: 18.7일 동안 2분 복원 루프가 11692회 실행되고 프리셋을 한 번 썼으며, 절전 상태의 WiFi 스피커 하나가 1303개의 읽을 수 없는 판독값을 생성했지만 프리셋이 부족한 적은 없었습니다. 알람은 누락된 프리셋과 응답하지 않는 스피커를 구분합니다. 스크립트는 표준 라이브러리만 사용하므로 아무것도 설치되지 않은 머신에서 실행됩니다. pytest가 유일한 테스트 의존성입니다. 저장소 규약 검사기는 매니페스트, 스킬 프론트매터, 제공된 스크립트의 테스트 커버리지, 줄 바꿈을 검증하며, Linux, Windows, macOS에서 CI를 실행합니다. 라이선스는 MIT입니다.