Nimbus Choir: 하늘을 비추면 노래하는 당신의 휴대폰
요약
Nimbus Choir는 휴대폰 카메라로 하늘을 비추면 구름의 움직임과 특성을 분석하여 부드러운 앰비언트 음악으로 변환하는 애플리케이션입니다. 이 앱은 클라우드 유형, 크기, 높이, 이동 등을 사운드의 음색, 볼륨, 피치, 패닝에 매핑하며, 오프라인에서 작동합니다. 또한 NASA 위성 이미지를 활용한 Earth mode도 제공하여 예술적이고 인터랙티브한 경험을 선사합니다.
핵심 포인트
- 구름의 물리적 특성을 사운드 파라미터로 변환하는 독창적인 개념입니다.
- 오프라인으로 작동하며, 클라우드 기반 서비스 의존성이 없습니다.
- Earth mode에서는 NASA 위성 이미지를 소리화하여 확장된 경험을 제공합니다.
This is a submission for the Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass
내가 만든 것 (What I Built)
Nimbus Choir는 휴대폰 카메라를 하늘에 비추면, 부드럽고 생성적인 앰비언트(ambient) 음악으로 변환합니다. 완전히 오프라인에서 작동하며, 계정이나 클라우드 서비스가 당신 위를 감시할 필요가 없습니다.
카메라가 추적하는 모든 구름은 합창단의 한 목소리가 됩니다:
- **구름 유형(Cloud type)**이 음색(timbre)을 결정합니다 (cirrus, cumulus, stratus, cumulonimbus 각각 다른 방식으로 허밍).
- **크기(Size)**가 볼륨을 결정합니다.
- **높이(Height)**가 피치를 결정합니다.
- **좌우 이동(Left-right drift)**이 스테레오 필드에 걸쳐 소리를 패닝(pan)합니다.
- 단기 일기 예보가 전체 곡이 얼마나 화성적인지 또는 불안정한지를 조율합니다.

의도된 사용 방식은 테마가 요구하는 바와 정확히 일치합니다: 하늘을 비추고, 한 번 탭한 다음, 휴대폰을 내려놓는 것입니다. 화면이 가장 짧은 부분이며, 그 이후에는 당신과 외부 환경만이 남아 구름이 흘러가는 소리를 듣고, 그에 맞춰 앰비언트 패드(ambient pad)가 흐르게 됩니다.
또한 선택적인 Earth mode도 있습니다: 지구본 아이콘을 탭하면 몇 개의 구름 모양이 갈라지면서 실제 회전하는 지구본(실제 해안선, 실제 회전 — 매핑 라이브러리 없이 처음부터 작성됨)이 나타납니다. 빛나는 지역을 탭하면 카메라 대신 실시간 NASA 위성 이미지가 같은 사운드 엔진에 의해 소리화됩니다. 이 모드는
Live: web-pi-wine-28.vercel.app -- 실제 작동하는 프론트엔드(카메라 파이프라인, 추적, 사운드 엔진)를 경험할 수 있습니다. 이 주소는 /web만 정적으로 배포된 것이기 때문에 백엔드 의존 요소(장력 예측, 하늘 해설가, Earth 모드의 위성 프록시 등)에 접근할 수는 없습니다. 하지만 이러한 기능들은 설계된 대로 오프라인에서 우아하게 폴백(fallback)하며 -- 핵심 카메라-사운드 경험은 완전히 실시간으로 작동합니다. 이 모든 기능을 포함한 완전한 경험을 위해서는 레포지토리를 클론하고 FastAPI 서버를 함께 실행해야 합니다 (설명은 아래 참조).**
코드
github.com/Yasaswini-ch/Nimbus-Choir
제작 과정
/web -- 바닐라 JS + Vite를 사용했습니다. 실시간 하늘 분할 파이프라인(하늘 마스킹, 연결 요소 클라우드 감지, 구름 이동 및 겹침에 따라 병합/분할을 처리하는 IoU 트래커)은 전적으로 브라우저 내에서 실행되는 클라우드 유형 분류기(onnxruntime-web를 통해)로 데이터를 전달합니다. 이 분류기는 고정된 오픈 가중치 DINOv2 백본과 작은 학습 헤드로 구성되어 있으며, ONNX 형식으로 양자화되었습니다. 핵심 경험을 위해 네트워크 호출은 전혀 필요하지 않습니다. 사운드 엔진은 수작업으로 제작한 Web Audio로, 디튠(detuned) 오실레이터 패드를 로우패스 필터와 느린 트레몰로를 거치게 하고, 물리적으로 모델링된 부분 기반의 차임벨 소리를 추가했습니다.
/training -- 분류기 파이프라인입니다. 공개 CCSN 클라우드 데이터셋을 가져와 중복 제거/증강한 후 DINOv2 (오픈 가중치, 고정)에 학습 가능한 헤드를 붙였습니다. 이 과정에서 추가 정확도를 위해 선택적으로 Tinker 교사 소프트 라벨(soft-labels)로 증류했지만, 실제 배포된 버전은 오직 그라운드 트루스(ground truth) 데이터만으로 훈련되었으며 -- 비용은 $0였고, 폐쇄형 모델을 전혀 사용하지 않았습니다. (CCSN에는 맑은 하늘 클래스가 명확하게 없었기 때문에, 이 레이블의 대체재로 문서화된 60개의 합성 그라디언트-하늘 이미지를 생성했습니다.)
**/forecast**는 오픈 가중치(open-weight)의 TabPFN 모델(표 형식 기반 모델, tabular foundation model)로, 공공 Open-Meteo 재분석 데이터를 이용해 약 40개 글로벌 위치에서 훈련되었으며, 구름 덮개와 기압 변화 추세로부터 "긴장도(tension)" 값을 예측합니다. 장소별 정확도 (부에노스아이레스, 카이로, 뭄바이, 상파울루, 상하이, 시드니 등 6개 도시에서 테스트하여 모델이 훈련 중 접하지 못한 데이터): 77.5%.
**/server**는 FastAPI를 사용합니다. 이 서버는 긴장도 모델, 선택적 하늘 해설가(로컬 Gemma 3를 Ollama를 통해 사용하여 캡션을 작성하고, 오픈 가중치이며 완전히 오프라인 TTS인 Piper가 이를 음성으로 출력), 그리고 Earth 모드의 NASA GIBS 위성 타일 프록시(GOES-East, GOES-West, Himawari-8에 대해 실시간 확인됨. API 키 불필요)를 제공합니다.
오픈 혁신은 왜 중요한가?
이 부분이 제가 실제로 강조하고 싶은 부분입니다. 단순히 철학적인 문제가 아니라, 빌드 도중에 실제 결정을 바꾼 부분이었습니다.
원래 해설가는 음성으로 ElevenLabs를 사용했습니다. 작동은 했지만, 이는 네트워크가 없으면 목소리가 없다는 것, 관리해야 할 API 키가 필요하다는 것, 그리고 신호가 없는 현장에서 실행되어야 하는 것에 대해 문자당 비용이 발생한다는 것을 의미했습니다. 저는 이를 오픈 가중치 로컬 TTS인 Piper로 교체했습니다. 사용자에게 보이는 기능은 동일하며, 네트워크 호출은 0이고, 한계 비용도 0이며, 앱이 사용되도록 의도된 곳—즉, 야외, 심지어 신호가 없을 수도 있는 곳—에서 정확히 작동합니다.
이 하나의 교체가 전체 주장을 축소판으로 보여줍니다:
- 인터넷 연결 없이 작동합니다. 메인 카메라 모드(분할(segmentation), 추적(tracking), 분류(classification))와 전체 사운드 엔진은 첫 로딩 후 네트워크 호출을 하지 않습니다.
- 하늘에 관한 어떤 정보도 기기를 벗어나지 않습니다. 사진, GPS 모두 마찬가지입니다 (예보 조회 시에도 거친 좌표가 클라이언트에서 나가는 전에 0.5°로 조정됩니다).
- 규모와 관계없이 실행하는 데 비용이 들지 않습니다. 오픈 웨이트 분류기(open-weight classifier), TabPFN 예측 모델(forecaster), Piper 내레이터는 한 번 다운로드한 후 모두 로컬에서 작동합니다. 시연 당일 끝에 요청 건당 청구되는 요금이 없습니다.
- 온라인 기능은 선택 사항이며 그 점을 투명하게 밝힙니다. 지구 모드(Earth mode)는 네트워크가 필요합니다 (실제 위성 데이터는 어딘가에서 와야 하므로). 따라서 '온라인' 배지가 붙는 유일한 부분이며, 신호가 없는 현장에서는 작동할 수 없는 유일한 부분이기도 합니다. 이것이 바로 이 기능이 기본값이 아닌 선택 사항인 이유입니다.
오픈 웨이트 모델은 단순히 구축 비용을 낮춘 것 이상을 했습니다. 이들은 앱이 핵심 약속(어디든, 실제 하늘을 향해 겨냥하고, 아무것도 집에 전화를 걸지 않는 것)을 지킬 수 있게 만든 이유입니다. 그저 '일부만 제외하면 오프라인'이 되는 대신에 말이죠.
수상 부문 (Prize Categories)
- TabPFN의 최적 활용: 위에서 설명된 대로 훈련되고 투명하게 검증된
/forecast장력 모델입니다. - Gemma의 최적 활용: Ollama를 통해 로컬 Gemma 3 모델로 생성된 하늘 내레이터의 자막입니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기