GitHub - cjpais/Handy: A free, open source, and extensible speech-to-text application that works completely offline.
Service

GitHub - cjpais/Handy: A free, open source, and extensible speech-to-text application that works completely offline.

cjpais
2026.02.18
·GitHub·by 네루
#Offline#Open Source#Speech-to-Text#Tauri#Whisper

핵심 포인트

  • 1Handy는 무료, 오픈 소스이며, 완전히 오프라인으로 작동하여 사용자의 음성을 클라우드에 전송하지 않고 모든 텍스트 필드에 받아쓰기를 제공하는 크로스 플랫폼 Speech-to-Text 애플리케이션입니다.
  • 2이 애플리케이션은 Tauri 프레임워크 기반으로 Rust와 React/TypeScript를 사용하여 구축되었으며, Whisper 또는 Parakeet V3 모델을 활용해 음성을 로컬에서 처리하며 VAD로 Silence를 필터링합니다.
  • 3Handy는 "가장 Forkable한" 앱을 지향하며 커뮤니티 기여를 장려하지만, 일부 시스템에서 Whisper 모델 충돌 및 Wayland 지원 제한과 같은 알려진 문제가 있으며 활발히 개선 중입니다.

Handy는 완전히 오프라인에서 작동하는 무료, 오픈 소스, 확장 가능한 음성-텍스트 변환 애플리케이션이다. Tauri(Rust + React/TypeScript)를 기반으로 구축된 크로스-플랫폼 데스크톱 애플리케이션으로, 간단하고 프라이버시를 중시하는 음성 전사 기능을 제공한다. 사용자는 단축키를 눌러 녹음을 시작/중지하고 말을 하면, 그 내용이 현재 사용 중인 텍스트 필드에 직접 입력된다. 이 프로젝트의 목표는 최고의 음성-텍스트 앱이 아니라, 가장 쉽게 포크(fork)하고 확장할 수 있는 도구를 만드는 것이다.

핵심 방법론 (Core Methodology)

Handy의 핵심 작동 방식은 전적으로 로컬 환경에서 이루어진다.

  1. 오디오 캡처 및 전처리 (Audio Capture & Pre-processing):
    • 사용자가 설정 가능한 키보드 단축키(또는 푸시-투-토크 모드)를 활성화하면 오디오 캡처가 시작된다.
    • 캡처된 오디오 스트림은 vad-rs 라이브러리를 사용하여 Silero 기반의 VAD(Voice Activity Detection)를 통해 침묵 구간을 필터링한다. 이는 불필요한 오디오 처리를 줄이고 정확도를 높이는 데 기여한다.
    • 오디오 샘플링은 rubato 라이브러리를 통해 적절한 샘플링 레이트로 리샘플링될 수 있다.
    • 교차-플랫폼 오디오 I/O는 cpal 라이브러리를 통해 관리된다.
  1. 음성 인식 모델 (Speech Recognition Models):
    • 필터링된 음성 데이터는 사용자가 선택한 음성 인식 모델로 전송되어 텍스트로 변환된다.
    • Whisper 모델: whisper-rs 라이브러리를 통해 OpenAI의 Whisper 모델(Small, Medium, Turbo, Large)을 지원한다. 이 모델들은 가능한 경우 GPU 가속을 활용하여 성능을 최적화한다. 수동 모델 설치 시, .bin 형식의 GGML 모델 파일을 앱 데이터 디렉토리 내의 models 폴더에 직접 배치하여 사용할 수 있다. 예를 들어, ggml-small.bin과 같은 파일명으로 저장한다.
    • Parakeet V3 모델: transcription-rs 라이브러리를 통해 CPU-최적화된 Parakeet V3 모델을 지원한다. 이 모델은 뛰어난 성능과 자동 언어 감지 기능을 제공하여, 별도의 언어 선택 없이 다양한 언어를 처리할 수 있다. Parakeet 모델은 .tar.gz 아카이브를 다운로드하여 압축을 푼 후, parakeet-tdt-0.6b-v3-int8와 같은 특정 디렉토리 이름으로 models 폴더에 배치해야 한다.
  1. 텍스트 출력 (Text Output):
    • 전사된 텍스트는 rdev 라이브러리를 통해 전역 키보드 단축키 및 시스템 이벤트를 처리하며, 현재 활성화된 애플리케이션의 텍스트 필드에 직접 붙여넣어진다.
    • Linux 환경에서는 텍스트 입력을 위해 xdotool(X11), wtype(Wayland) 또는 dotool(둘 다)과 같은 외부 도구 설치가 필요할 수 있으며, 이들이 없을 경우 enigo로 대체된다.
    • Wayland 환경에서 전역 키보드 단축키는 데스크톱 환경(GNOME, KDE 등) 또는 윈도우 매니저(Sway, i3, Hyprland)에서 handy --toggle-transcription과 같은 CLI 플래그를 사용하여 수동으로 설정해야 한다. 또는 pkill -USR2 -n handy와 같은 Unix 시그널을 통해 전사 기능을 제어할 수도 있다.

아키텍처 및 라이브러리 (Architecture & Libraries)

Handy는 다음 구성 요소들로 이루어져 있다:

  • Frontend: React + TypeScript 및 Tailwind CSS를 사용하여 사용자 인터페이스를 구축한다.
  • Backend: Rust를 사용하여 시스템 통합, 오디오 처리, 머신러닝 추론을 담당한다.
  • 핵심 라이브러리 (Core Libraries):
    • whisper-rs: Whisper 모델을 위한 로컬 음성 인식.
    • transcription-rs: Parakeet 모델을 위한 CPU-최적화된 음성 인식.
    • cpal: 크로스-플랫폼 오디오 입출력.
    • vad-rs: 음성 활동 감지.
    • rdev: 전역 키보드 단축키 및 시스템 이벤트 처리.
    • rubato: 오디오 리샘플링.

시스템 요구 사항 (System Requirements)

  • Whisper 모델: macOS(M 시리즈 또는 Intel Mac), Windows(Intel, AMD, 또는 NVIDIA GPU), Linux(Intel, AMD, 또는 NVIDIA GPU; Ubuntu 22.04/24.04 권장).
  • Parakeet V3 모델: CPU-전용으로 작동하며, Intel Skylake(6세대) 또는 동급 AMD 프로세서 이상을 권장한다. 중간 사양의 i5 프로세서에서 약 5배 실시간 속도(real-time speed)를 보인다.

Handy는 사용자에게 투명성과 제어권을 부여하며, 프라이버시를 중시하고 완전히 오프라인에서 음성-텍스트 변환을 가능하게 하는 유연한 플랫폼을 제공한다.