quill README

The project's README from github.com/humanitas-labs/quill. As one markdown file: README.md.

quill

A minimal, fully local macOS meeting recorder + transcriber. One menu-bar click records your mic and all system audio as two separate tracks; when you stop, quill transcribes both on-device and writes a speaker-tagged transcript. Nothing ever leaves the machine.

Named for the feather. Sibling of parrot, same skeleton: single Swift binary, menu-bar tray, no app bundle.

Install

cd quill
swift build -c release
sudo cp .build/release/quill /usr/local/bin/quill
quill install --launch-at-login   # optional — runs in the background on login

Requires: macOS 15+ (Core Audio process taps for system audio — no virtual device, no kernel extension). Apple Silicon recommended for transcription speed.

How to use

  1. Run it (quill in a terminal, or the LaunchAgent).
  2. Click the feather in the menu bar → Start recording. First use prompts for microphone and System Audio Recording permissions. While recording, the icon turns red with a running elapsed counter, and macOS shows the purple recording indicator.
  3. Click → Stop recording when the meeting ends. Transcription starts automatically (the menu shows progress); a notification fires when the transcript is ready.

Each session lands in ~/Recordings/<yyyy.MM.dd-HHmm>/:

File Contents
mic.caf your side (default input device, AAC)
system.caf everything the Mac played — the other side of the call (AAC)
meta.json start/end timestamps, duration, per-track start offsets
transcript.json canonical transcript — engine provenance + timed, speaker-tagged segments
transcript.md the same transcript rendered for reading
transcribe.log transcription progress/errors for this session

Two tracks on purpose: speech models do better on clean single-source audio, and mic-vs-system is free two-party diarization — me vs them with no speaker-identification model. CAF on purpose: unlike m4a, it needs no finalization pass — if the process dies mid-meeting, everything already written is still readable.

Transcription

Built in, on-device, automatic. The default engine is Parakeet TDT 0.6B v2 (English) via FluidAudio's Core ML port — roughly 20 seconds per hour of audio on Apple Silicon. Models (~600 MB) download once on first transcription; quill doctor tells you whether they're already cached so you're never downloading after an important meeting.

Each track is transcribed separately, shifted by its start offset so both share one clock, and merged by timestamp. Jobs run in a serial queue — you can start a new recording while the last one transcribes. Unfinished jobs resume on next launch (the filesystem is the queue: a session with meta.json but no transcript.json is pending). Failures append to the session's transcribe.log and never block later jobs.

The engine sits behind a small protocol; a Whisper engine (WhisperKit large-v3-turbo) is planned as the fallback / re-transcription option.

Config

Optional, at ~/.config/quill/config.json:

{
  "recordings_dir": "~/Recordings",
  "transcription": { "enabled": true, "engine": "parakeet" },
  "on_stop": "my-hook"
}

CLI

quill                        # run the menu-bar daemon (^C to quit)
quill run --out <dir>        # custom recordings root (default ~/Recordings)
quill doctor                 # check permissions, recordings folder, models
quill install --launch-at-login
quill install --uninstall

Stack

Gotchas

quill (humanitas-labs/quill)

Searching Database…

3.9K ·GitHub
Что это такое?quill — это минималистичный полностью локальный рекордер и транскрибатор встреч для macOS. Одним кликом по значку в строке меню он записывает ваш микрофон и весь системный звук; когда вы останавливаете запись, он расшифровывает обе дорожки прямо на устройстве в транскрипт с метками говорящих.
Это приложение в строке меню или утилита командной строки?Один бинарник на Swift без бандла приложения, весь интерфейс которого — значок в трее строки меню. Вы запускаете его из терминала или через LaunchAgent, а дальше управляете кликами по перу.
Как записать свою первую встречу?Запустите quill в терминале или через LaunchAgent, кликните по перу и выберите Start recording — при первом использовании система запросит разрешения на доступ к микрофону и запись системного звука. Остановите запись, когда встреча закончится; расшифровка запустится автоматически, а когда транскрипт будет готов, придёт уведомление.
Что нужно на Mac, чтобы это работало?macOS 15 или новее, потому что системный звук захватывается через Core Audio process taps — без виртуального устройства и кернел-расширения. Рекомендуется Apple Silicon, и при первом использовании один раз скачиваются модели расшифровки (~600 МБ); quill doctor покажет, кэшированы ли они уже.
Есть ли подводные камни перед использованием на реальной встрече?Захват системного звука глобальный: записывается всё, что играет ваш Mac, поэтому не запускайте Spotify и другие источники звука во время встречи. Если запись получается тихой или пустой, скорее всего не выдано разрешение Screen & System Audio Recording.
Мой звук куда-то отправляется с компьютера?Нет — запись, хранение и расшифровка полностью происходят на устройстве. Единственное скачивание — это разовая загрузка моделей расшифровки.
Какие файлы остаются после одной сессии?Каждая сессия сохраняется в ~/Recordings: mic.caf, system.caf, meta.json, transcript.json (сегменты с таймингами и метками говорящих), transcript.md для чтения и transcribe.log. Звук пишется в CAF, которому не нужна финализация — если процесс умрёт посреди встречи, всё уже записанное останется читаемым.
Зачем писать микрофон и системный звук двумя отдельными дорожками?Модели распознавания речи лучше работают с чистым звуком из одного источника, а разделение «микрофон против системы» — это бесплатная диаризация на двоих: «я против них» без модели идентификации говорящих. Каждая дорожка расшифровывается отдельно, а потом они сводятся на одну шкалу времени по меткам.
Насколько быстрая расшифровка и можно ли продолжать запись, пока она работает?Примерно 20 секунд на час звука на Apple Silicon со стандартным движком Parakeet. Задачи выполняются в последовательной очереди, так что можно начать новую запись, пока расшифровывается предыдущая, а незавершённые задачи продолжатся при следующем запуске.
Работает ли он с языками, кроме английского?Пока нет — встроенный движок Parakeet понимает только английский. Планируется движок WhisperKit large-v3-turbo как запасной вариант и для повторной расшифровки, вместе с ним ожидаются и другие языки.
Size
0.2 MB
Stars
3.9K
Updated
CommitSep 27
Age
2mo
Commits · 90 Days