Voicebar
음성 우선 Android 키보드, Gboard와 함께 사용 음성 입력 후 정리된 메시지가 입력란에 들어갑니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Private, local hold-to-talk dictation for Apple Silicon Macs. Hold fn, speak, release to insert. MIT licensed.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Private, local hold-to-talk dictation for Apple Silicon Macs. Focus an editable field, hold the push-to-talk hotkey (fn/globe by default), speak, and release to insert the transcript where you started.
FreeVoiceTranscribe is free, open-source software released under the MIT license.
Website: https://sdefendre.github.io/freevoicetranscribe/
Status: there is no packaged download or GitHub release yet. A public build still needs Developer ID signing and Apple notarization. Run it from source with the steps below.
.txt file. File transcription stays raw and does not use the writing model.lightning-whisper-mlx. Accurate (distil-large-v3) is the default. Fast uses Whisper small for quicker on-device results.Choose a mode from the menu bar. Dictate is the default and never uses the writing model.
| Mode | What it does |
|---|---|
| Dictate | Inserts the raw local transcript. |
| Write | Cleans filler words, punctuation, capitalization, and spoken self-corrections, then inserts the result. |
| Command | You select text first, then speak an instruction. The app rewrites that selection and pastes it back. |
Write and Command need a one-time on-device writing-model download (about 1 GB). Switching modes does not start that download; use Download Model in Settings…. If the model is missing, still loading, or fails, Write inserts the raw transcript and Command leaves the selection unchanged. Command also leaves the selection unchanged if it is empty or different at paste time.
You can also set an optional tone per app (for example Slack casual, Mail formal). The app looks at the frontmost app’s bundle ID and applies the prompt you saved in Settings…. Modes use whichever push-to-talk hotkey you chose. Cleanup applies to dictation only. File transcription stays raw.
FreeVoiceTranscribe has no account system, cloud transcription, transcript history, or always-on microphone. It is a menu-bar app after setup and does not remain in the Dock.
| Use | Requirements |
|---|---|
| Run from source | Apple Silicon Mac, macOS 14+, Python 3.11 to 3.13, PortAudio |
| Build the app | The same hardware and OS, plus a framework-capable arm64 Python 3.11 |
| First setup | Internet access and enough free space for the selected speech-model download |
| Optional Write / Command | The same Mac, plus about 1 GB more for the one-time writing-model download |
Install PortAudio with Homebrew:
brew install portaudio
Homebrew Python 3.11 is the recommended release-build interpreter. Static or standalone Python distributions are rejected because py2app cannot build a complete runtime from them.
Both local models are multilingual. The app does not enforce a single language, so you can speak the supported languages in the same vocabulary without changing a setting. Choose Fast or Accurate in Settings… or the setup window. Accurate stays the default.
Commonly supported languages include:
For best results, use a natural pace and clearly separate sentences or phrases. Punctuation is optional for personal use.
| Option | Local model | When to use it |
|---|---|---|
| Accurate (default) | distil-large-v3 | Best quality. This is the original model. |
| Fast | Whisper small | Smaller download and quicker transcription. |
One Settings… window holds the push-to-talk hotkey, Fast / Accurate speech model, optional writing-model download, and per-app tones. The setup window also has the Fast / Accurate control. The chosen speech model downloads on demand with a progress bar. Inference never leaves this Mac. Each speech model is stored separately, so switching later only downloads the one that is missing.
FreeVoiceTranscribe records from your default input device. To use a specific microphone or USB audio interface, set it as the system default input before recording.
If you need better guidance for setup, use Open Microphone Settings from the setup window or the app menu bar when available.
brew install portaudio
git clone https://github.com/Sdefendre/freevoicetranscribe.git
cd freevoicetranscribe
./run.sh
The launcher creates .venv with the first compatible Python it finds, installs the pinned runtime requirements when requirements.txt changes, and starts the package entry point:
./run.sh
You can also create the environment manually:
python3.11 -m venv .venv
.venv/bin/python -m pip install -r requirements.txt
PYTHONPATH="$PWD" .venv/bin/python -m fvt
For a regular package install, the same direct dependencies are declared in pyproject.toml:
python3.11 -m venv .venv
.venv/bin/python -m pip install .
.venv/bin/freevoicetranscribe
requirements.txt pins direct source dependencies. requirements.lock contains the fully resolved runtime environment, while requirements-build.lock also includes build tooling. To reproduce the locked runtime:
.venv/bin/python -m pip install -c requirements.lock .
The setup window guides you through three prerequisites:
distil-large-v3) is the default; Fast (Whisper small) is the quicker option. Switch later from Settings….Write and Command are optional. After setup, open Settings… and download the local writing model if you want cleaned-up dictation. That download also stays on this Mac. File transcription is not cleaned up.
After changing a permission in System Settings → Privacy & Security, return to FreeVoiceTranscribe and refresh setup. Packaged and source runs have different macOS permission identities, so switching between them may require granting access again.
Once setup is complete, focus an enabled editable field in another app before pressing the hold-to-talk hotkey. Apps with custom editors, web-based text fields without native Accessibility support, password fields, terminal shells without input permission, or remote desktop session controls may not expose a compatible target.
If you see No editable text field is available, try this before reporting a bug:
If the issue persists, use Send Feedback in the menu bar.
Local files live outside the source tree and app bundle:
~/Library/Application Support/FreeVoiceTranscribe/
├── device-settings.json persisted device, shortcut, mode, and model preferences (mode 0600)
├── last-transcript.json latest transcript only (mode 0600)
├── mlx_models/ downloaded speech models (`distil-large-v3`, `small`)
└── mlx_lm_models/ optional writing model, downloaded only from Settings
~/Library/Caches/FreeVoiceTranscribe/
├── Temporary/ temporary recordings
└── huggingface/ model-download cache
~/Library/Logs/FreeVoiceTranscribe/
├── app.log current diagnostic log
├── app.log.1 rotated log, when present
└── app.log.2 rotated log, when present
Application directories are created with private permissions when the filesystem permits it. app.log rotates at 512 KiB with two backups.
Use Send Feedback in the menu bar. It opens a prefilled GitHub issue with your app version and a short bug report form. You can also open issues directly at https://github.com/Sdefendre/freevoicetranscribe/issues/new.
The release script creates or refreshes .build-venv from requirements-build.lock, builds in a staging directory with py2app, signs the staged app, verifies it, and publishes only a passing artifact:
./build_app.sh
Successful output is written to:
dist/FreeVoiceTranscribe.app
Use a specific compatible interpreter when needed:
PYTHON=/opt/homebrew/bin/python3.11 ./build_app.sh
The default is an ad-hoc signature for local testing. To exercise the hardened-runtime signing path with an installed Developer ID identity:
CODESIGN_IDENTITY="Developer ID Application: Your Name (TEAMID)" ./build_app.sh
To retain failed staging output for diagnosis instead of deleting it:
FVT_RETAIN_FAILED_STAGING=1 ./build_app.sh
The retained files appear under build/failed-release/, never dist/.
Before publishing to dist/, the build verifies:
The smoke tests do not request Microphone or Accessibility access.
Developer ID signing alone is not a public release. Distribution still requires appropriate entitlements and hardened-runtime review, Apple notarization, stapling, Gatekeeper validation, and testing on a clean supported Mac.
Install the development tools into the source environment:
.venv/bin/python -m pip install -e '.[dev]'
Run the checks:
.venv/bin/python -m unittest discover -s tests -v
.venv/bin/python -m ruff check .
.venv/bin/python -m ruff format --check .
bash -n run.sh build_app.sh
Validate a candidate release-build interpreter separately:
/opt/homebrew/bin/python3.11 scripts/validate_build_python.py
Verify an existing bundle without rebuilding it:
.build-venv/bin/python scripts/verify_bundle.py \
--launch-import-smoke \
--launch-liveness-smoke \
dist/FreeVoiceTranscribe.app
Use --skip-signature only for isolated verifier fixtures; it is not a release validation mode.
fvt/app.py application composition and lifecycle
fvt/state.py legal states and immutable snapshots
fvt/audio.py bounded capture and device-aware WAV handling
fvt/file_audio.py local file decode, chunking, and transcript save
fvt/models.py Fast / Accurate local-model catalog and downloads
fvt/transcription.py local model readiness and PCM transcription
fvt/cleanup.py optional on-device writing model for Write and Command
fvt/hotkey.py resilient hold-to-talk, hotkey+Space, and Esc event tap
fvt/insertion.py exact target validation and safe clipboard insertion
fvt/permissions.py macOS permission checks and Settings recovery
fvt/storage.py private paths, latest transcript, and rotating logs
fvt/ui.py setup window, settings, menu bar, and multi-display HUD
scripts/ build interpreter, bundle, and launch verification
site/ static landing page, published to GitHub Pages
The root freevoicetranscribe.py, fn_listener.py, and overlay.py files are compatibility shims for earlier imports and launch commands. New code should use the fvt package.
See CONTRIBUTING.md for build instructions, testing expectations, and pull-request guidance.
This project is released under the MIT License. See LICENSE for the full terms.