Nightingale – 컴퓨터의 모든 노래를 사용할 수 있는 오픈소스 노래방 앱
(nightingale.cafe)- 개인 음악 파일을 노래방 형태로 변환해주는 오픈소스 애플리케이션으로, 음성 분리·가사 동기화·실시간 점수 기능을 제공
- UVR Karaoke 모델이나 Demucs를 이용해 보컬과 반주를 분리하고, WhisperX로 단어 단위 가사를 자동 전사
- 마이크 입력 기반의 피치 점수와 별점·곡별 기록 기능으로 게임처럼 노래 실력을 측정
- 여러 사용자 프로필, 비디오 파일 배경 재생, GPU 셰이더 기반 동적 배경, 게임패드 조작 등 다양한 인터랙션 지원
- Linux, macOS, Windows에서 실행되며, 설치 없이 단일 실행 파일로 구동되는 자급형 구조를 갖춤
주요 기능
-
보컬 분리(Stem separation) 기능은 UVR Karaoke 모델 또는 Demucs를 사용해 음성과 반주를 분리
- 가이드 보컬의 볼륨을 조절할 수 있음
-
단어 단위 가사(Word-level lyrics) 기능은 WhisperX로 오디오에 맞춰 각 단어를 정렬
- LRCLIB에 기존 가사가 있을 경우 이를 우선 사용
-
피치 점수(Pitch scoring) 기능은 마이크로 노래를 부르면 실시간으로 점수를 계산
- 별점과 곡별 점수판으로 진행 상황을 추적
사용자 및 인터페이스
-
플레이어 프로필(Player profiles) 기능으로 여러 사용자가 각자의 점수 기록을 유지
- 가수 전환 시에도 데이터 손실 없음
-
비디오 파일 지원(Video file support) 기능으로 .mp4나 .mkv 파일을 불러오면 원본 영상을 배경으로 재생
- 오디오에서 자동으로 보컬을 분리
- 동적 배경(Dynamic backgrounds) 기능은 GPU 셰이더 효과(플라즈마, 오로라, 성운 등)나 Pixabay 영상 루프, 또는 원본 비디오를 배경으로 사용
- 게임패드(Gamepad) 지원으로 메뉴 탐색, 곡 선택, 재생 제어를 컨트롤러로 수행
작동 방식
-
Separate 단계에서 UVR Karaoke 또는 Demucs가 트랙을 보컬과 반주로 분리
- 비디오 파일에서 오디오를 자동 추출
- Transcribe 단계에서 LRCLIB에서 동기화된 가사를 검색하고, 없을 경우 WhisperX로 단어 단위 전사 수행
- Play 단계에서 반주를 재생하며 하이라이트된 가사, 피치 점수, 동적 배경, 게임패드 입력을 함께 표시
플랫폼 및 배포
- Linux(x86_64, aarch64), macOS(ARM, Intel), Windows(x86_64) 에서 실행 가능
- CUDA 또는 Metal을 통한 GPU 가속 지원, 미지원 환경에서는 CPU로 동작
- ffmpeg, Python, PyTorch, ML 모델이 첫 실행 시 자동 부트스트랩되어 별도 설치 과정이 필요 없는 단일 바이너리 구조
업데이트 알림
- 신규 릴리스와 업데이트 소식을 이메일로 받을 수 있으며, 원치 않을 경우 언제든 구독 해지 가능
Hacker News 의견들
-
방금 소스를 받아 빌드해서 실행해봤는데, 처음 실행하자마자 인터넷에서 바이너리 다운로드를 시작해서 놀랐음
이미 FFMpeg과 Python이 설치되어 있는데도 새로 설치하려고 시도했음
앱이 설치된 Python을lib폴더에서 찾는 바람에 실행이 실패했음. 이런 기본적인 오류가 릴리스 코드에 포함된 게 놀라움
또 tarball의 빌드 스크립트를 실행하니 Docker 컨테이너를 설치하려고 해서 당황했음. 데스크톱 앱을 빌드하는데 Docker라니, 이해가 안 됨- 많은 앱들이 자체 Python 런타임을 포함함. Blender, Houdini, Bitwig, Krita 등도 마찬가지임
Krita는 빌드 시 시스템 Python을 사용하지만, 결과물에는 자체 Python을 포함시킴
다만 이 앱은 다운로드보다는 번들링하는 편이 나았을 것 같음
보안 문제는 npm이나 pip도 비슷한 위험을 가지므로 완전히 예외는 아님 - “왜 이런 식으로 만들었을까?”라는 질문의 답은 아마 “내 컴퓨터에서는 잘 됐음”일 것 같음
- Python 설치 생태계가 워낙 혼란스러움. OS마다 설치 경로와 방식이 다르고, Conda나 여러 패키지 매니저가 섞여 있음
그래서 개발자가 앱이 의존할 수 있는 단일 환경을 만들고 싶었던 마음은 이해됨 - 요즘 이런 식으로 시스템에 무단 설치를 시도하는 앱이 늘고 있음
최근에도 Python 앱을 실행했더니 Node/NPM을 설치하려고 해서 깜짝 놀랐음
내 컴퓨터는 내 작업공간이므로, 앱이 마음대로 설치하는 건 공급망 공격 위험이자 사용자에 대한 무례한 행위라고 생각함 - 이건 결국 정적 링크 vs 동적 링크, vim vs emacs 같은 끝없는 논쟁의 시작일지도 모름
- 많은 앱들이 자체 Python 런타임을 포함함. Blender, Houdini, Bitwig, Krita 등도 마찬가지임
-
내가 만든 Nightingale은 음악 폴더를 지정하면 곡을 자동으로 노래방 트랙으로 변환해주는 앱임
보컬 분리, 가사 싱크, 피치 점수, 게임패드 지원, GPU 가속 등을 제공함
모든 처리는 로컬에서 이루어지고, 계정이나 구독, 텔레메트리도 없음
첫 실행 시 필요한 ML 모델과 Python 환경을 자동으로 설정함
Rust와 Bevy 엔진으로 작성했고, 완전한 오픈소스 프로젝트임- 예전에 신호처리를 공부했는데, 예전엔 트랙 분리가 어려웠음
지금은 Demucs 같은 신경망을 써서 해결하는 걸 보고 흥미로웠음
순수 수학적 접근으로도 경쟁할 수 있을지 궁금함 -
B.E.D - Walk Away를 테스트했는데 30초 이후 가사 싱크가 어긋났음
재생 중 앞뒤로 스킵 기능이 필요하고, 문장부호 처리 및 결과 편집 기능이 있으면 좋겠음
그래도 FOSS로 공개해줘서 고마움 - 정말 멋진 프로젝트임. FOSS 쪽에서 노래방 앱은 거의 없었는데, 이건 큰 진전임
CUDA 최소 사양과 AMD/Intel의 iGPU 가속 지원 계획이 있는지 궁금함
가족들이 써보길 기대 중임 - UltraSinger와의 차이가 궁금함. 품질 비교한 사람이 있는지 알고 싶음
- WhisperX가 중국어(한자) 가사도 잘 처리하는지 궁금함
- 일본어 곡을 테스트했는데 가사 정렬이 전혀 안 됨
코드에서line_text.split()로 단어를 나누는데, 일본어는 띄어쓰기가 없으니 작동하지 않음
fugashi 같은 형태소 분석기를 써야 할 것 같음
- 예전에 신호처리를 공부했는데, 예전엔 트랙 분리가 어려웠음
-
예전 Firefox 기반의 Nightingale 미디어 플레이어가 떠올랐음
iTunes/Winamp 대안으로 개발됐지만 10년 넘게 활동이 없음
getnightingale.com에서 옛 흔적을 볼 수 있음- 그게 Songbird의 후속 프로젝트였던 걸로 기억함
-
과거에 비슷한 피치 트래킹 프로젝트를 만든 적이 있음
현재 앱의 피치 라인이 다음 음 높이를 보여주는 기능인지 궁금함- 현재는 단순한 피치 점수 기능만 있고, 다음 음 높이 예측은 아직 구현되지 않았음
좋은 기능 제안으로 받아들임
- 현재는 단순한 피치 점수 기능만 있고, 다음 음 높이 예측은 아직 구현되지 않았음
-
로컬 실행, 오픈소스, 열정 기반 프로젝트라서 정말 감동적임
이런 뉴스가 인류애를 회복시켜줌 -
커밋 히스토리를 보니 개발 속도가 매우 빠름
아마 AI 보조 개발을 활용한 듯함
“AI가 개발자를 대체한다”는 말과 반대로, AI가 소규모 프로젝트의 실현 가능성을 높여줬다고 생각함- 비슷한 소프트웨어가 Windows 95 시절에도 있었음. 펜티엄 2에서도 가능했음
-
앱이 정확히 뭘 하는지 몰랐는데, 가사를 제거하는 줄 알았음
여러 곡을 시도했지만 보컬이 그대로 들림. 어떻게 보컬 제거를 조정하는지 모르겠음- 키보드의 + / - 키로 가이드 레벨을 조정할 수 있음
컨트롤 설명서 참고
- 키보드의 + / - 키로 가이드 레벨을 조정할 수 있음
-
정말 멋진 프로젝트임.
한 기기에서 곡을 처리하고 다른 기기에서 재생할 수 있는지, 혹은 서버/클라이언트 모드로 동작할 수 있는지 궁금함- 관련 답변은 이슈 #7에 있음
-
음악가로서, 밴드 연주 중 가사를 따라가며 표시해주는 앱이 있으면 좋겠다고 생각함
지금은 휴대폰을 마이크 스탠드에 고정해두지만 금방 위치를 잃음- 맞음, 이런 실시간 싱크는 Spotify조차 자주 틀림