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.
작동 방식
- 기록 – macOS Core Audio 프로세스 탭 (
AudioHardwareCreateProcessTap)을 사용해 시스템 오디오를 캡처하고,AVAudioEngine을 사용해 마이크 오디오를 처리합니다. 오디오는 AAC 인코딩된 CAF 파일로 직접 스트리밍되며, 프로세스가 충돌해도 읽을 수 있습니다. - 트랜스크립션 – 각 트랙은 FluidAudio Core ML 래퍼를 통해 Parakeet 모델에 전달됩니다.
meta.json의 오프셋에 따라 시간을 조정하고, 하나의 타임스탬프가 붙은 스피커 태그가 포함된 트랜스크립션 (transcript.json및 렌더링된transcript.md)으로 병합됩니다. - 큐 및 지속성 –
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.json및transcript.md(기계 판독 및 인간 판독 가능 버전)transcribe.log(진행 상황 / 오류)
설정 (선택적 ~/.config/quill/config.json)
{
"recordings_dir": "~/Recordings",
"transcription": {"enabled": true, "engine": "parakeet"},
"on_stop": "my-hook"
}
recordings_dir로 기본 위치를 재정의합니다.transcription.enabled를false로 설정하면 오디오 캡처만 수행합니다.mic_voice_processing는 Apple의 에코 캔슬링을 전환합니다 (스피커를 통해 녹음할 때 유용).on_stop은 트랜스크립션 파일이 작성된 후, 세션 폴더를 인수로 쉘 명령을 실행합니다.
제한 사항 / 주의사항
- 시스템 오디오 탭은 맥이 재생하는 모든 것을 기록하므로, 백그라운드 음악이나 알림이
system.caf트랙에 포함될 수 있습니다. - macOS 15+ (프로세스 탭 API)가 필요하며, 합리적인 트랜스크립션 속도를 위해 Apple Silicon이 권장됩니다.
- 현재 모델은 영어 전용입니다. Whisper 백업이 추가되면 다른 언어도 지원될 예정입니다.
- "화면 및 시스템 오디오 녹음" 권한이 부여되지 않으면 기록이 무음이 됩니다.
기술 스택
- Swift (Swift Package Manager 단일 실행 파일)
- Core Audio 프로세스 탭 – 시스템 오디오 캡처
- AVAudioEngine 및 AVAudioFile – 마이크 캡처 및 AAC 인코딩 스트리밍
- FluidAudio / Parakeet Core ML 모델 – 온디바이스 트랜스크립션
- NSStatusItem – 메뉴 바 UI
모든 세부 정보는 리포지토리의 README에서 직접 가져옴.
관련
- 프로젝트
- 프로젝트
- Dispatch
- 프로젝트
- 프로젝트