digimata/quill

Ultra-minimalist macOS recording + transcription.

quill – 로컬 macOS 미팅 레코더 및 트랜스크립터

무엇인가요 – macOS 메뉴 바에 존재하는 단일 바이너리 Swift 앱입니다. 한 번의 클릭으로 마이크와 컴퓨터가 재생하는 모든 오디오를 기록하고, 두 트랙을 별도의 .caf 파일로 저장한 후, 온디바이스 음성 인식 모델을 사용해 스피커 태그가 붙은 트랜스크립션을 생성합니다. 어떤 데이터도 클라우드로 전송되지 않습니다.

주요 기능

  • 메뉴 바 아이콘에서 한 번의 클릭으로 시작/정지.
  • 마이크 + 시스템의 두 오디오 트랙으로, 깨끗한 단일 소스 오디오에서 작동하는 음성 인식 모델을 사용하고, 별도의 스피커 식별 모델 없이 자연스러운 나 vs. 그들 다이어라이제이션을 얻을 수 있습니다.
  • Parakeet TDT 0.6B v2 Core ML 모델을 사용한 완전한 로컬 트랜스크립션 (Apple Silicon에서 시간당 약 20초의 계산 필요). WhisperKit 백업은 계획 중입니다.
  • 자동 큐잉: 각 기록은 순서대로 트랜스크립션되며, 완료되지 않은 작업은 다음 실행 시 자동으로 재개됩니다.
  • 사용자 정의 출력 디렉터리, 선택적 트랜스크립션, 선택적 마이크 에코 캔슬링, 세션 종료 후 쉘 명령을 실행하는 훅 (on_stop) 제공.
  • 데몬 시작, 기록 루트 변경, 상태 점검 (quill doctor), 로그인 시 자동 실행 에이전트 설치/제거를 위한 간단한 CLI.

작동 방식

  1. 기록 – macOS Core Audio 프로세스 탭 (AudioHardwareCreateProcessTap)을 사용해 시스템 오디오를 캡처하고, AVAudioEngine을 사용해 마이크 오디오를 처리합니다. 오디오는 AAC 인코딩된 CAF 파일로 직접 스트리밍되며, 프로세스가 충돌해도 읽을 수 있습니다.
  2. 트랜스크립션 – 각 트랙은 FluidAudio Core ML 래퍼를 통해 Parakeet 모델에 전달됩니다. meta.json의 오프셋에 따라 시간을 조정하고, 하나의 타임스탬프가 붙은 스피커 태그가 포함된 트랜스크립션 (transcript.json 및 렌더링된 transcript.md)으로 병합됩니다.
  3. 큐 및 지속성meta.json이 존재하지만 transcript.json이 없는 경우, 대기 중인 작업으로 간주됩니다. 파일 시스템 자체가 큐 역할을 하므로, 이전 작업이 트랜스크립션 중일 때도 새로운 기록을 시작할 수 있습니다.

설치 및 사용법

# Swift 바이너리 빌드
cd quill
swift build -c release
sudo cp .build/release/quill /usr/local/bin/quill

# 옵션: 로그인 시 자동 실행
quill install --launch-at-login
  • quill (또는 LaunchAgent)를 실행하여 메뉴 바 데몬을 시작합니다.
  • 깃털 아이콘 클릭 → 기록 시작, 다시 클릭 → 정지.
  • 트랜스크립션은 자동으로 실행되며, macOS 알림으로 완료를 알립니다.
  • 기록은 ~/Recordings/<yyyy.MM.dd-HHmm>/ 아래에 저장되며, 다음 파일이 포함됩니다:
    • mic.caf (당신의 목소리)
    • system.caf (다른 참가자 / 시스템 오디오)
    • meta.json (타임스탬프)
    • transcript.jsontranscript.md (기계 판독 및 인간 판독 가능 버전)
    • transcribe.log (진행 상황 / 오류)

설정 (선택적 ~/.config/quill/config.json)

{
  "recordings_dir": "~/Recordings",
  "transcription": {"enabled": true, "engine": "parakeet"},
  "on_stop": "my-hook"
}
  • recordings_dir로 기본 위치를 재정의합니다.
  • transcription.enabledfalse로 설정하면 오디오 캡처만 수행합니다.
  • mic_voice_processing는 Apple의 에코 캔슬링을 전환합니다 (스피커를 통해 녹음할 때 유용).
  • on_stop은 트랜스크립션 파일이 작성된 후, 세션 폴더를 인수로 쉘 명령을 실행합니다.

제한 사항 / 주의사항

  • 시스템 오디오 탭은 맥이 재생하는 모든 것을 기록하므로, 백그라운드 음악이나 알림이 system.caf 트랙에 포함될 수 있습니다.
  • macOS 15+ (프로세스 탭 API)가 필요하며, 합리적인 트랜스크립션 속도를 위해 Apple Silicon이 권장됩니다.
  • 현재 모델은 영어 전용입니다. Whisper 백업이 추가되면 다른 언어도 지원될 예정입니다.
  • "화면 및 시스템 오디오 녹음" 권한이 부여되지 않으면 기록이 무음이 됩니다.

기술 스택

  • Swift (Swift Package Manager 단일 실행 파일)
  • Core Audio 프로세스 탭 – 시스템 오디오 캡처
  • AVAudioEngineAVAudioFile – 마이크 캡처 및 AAC 인코딩 스트리밍
  • FluidAudio / Parakeet Core ML 모델 – 온디바이스 트랜스크립션
  • NSStatusItem – 메뉴 바 UI

모든 세부 정보는 리포지토리의 README에서 직접 가져옴.

관련

  • 프로젝트
  • 프로젝트
  • Dispatch
  • 프로젝트
  • 프로젝트