{"id":45019203,"url":"https://github.com/yohasebe/speechdock","last_synced_at":"2026-02-19T02:00:49.834Z","repository":{"id":339090390,"uuid":"1132054097","full_name":"yohasebe/speechdock","owner":"yohasebe","description":"Turn any audio into text and any text into speech — menu bar app with system/app audio capture, live subtitles, OCR, and translation.","archived":false,"fork":false,"pushed_at":"2026-02-18T00:34:00.000Z","size":6530,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-18T04:53:26.817Z","etag":null,"topics":["apple-silicon","applescript","macos","menu-bar-app","openai","speech-to-text","stt","swift","swiftui","text-to-speech","transcription","tts"],"latest_commit_sha":null,"homepage":null,"language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/yohasebe.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"yohasebe","buy_me_a_coffee":"yohasebe","ko_fi":"yohasebe"}},"created_at":"2026-01-11T08:18:53.000Z","updated_at":"2026-02-18T00:34:04.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/yohasebe/speechdock","commit_stats":null,"previous_names":["yohasebe/speechdock"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/yohasebe/speechdock","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yohasebe%2Fspeechdock","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yohasebe%2Fspeechdock/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yohasebe%2Fspeechdock/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yohasebe%2Fspeechdock/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yohasebe","download_url":"https://codeload.github.com/yohasebe/speechdock/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yohasebe%2Fspeechdock/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29600841,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-19T00:59:38.239Z","status":"online","status_checked_at":"2026-02-19T02:00:07.702Z","response_time":117,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["apple-silicon","applescript","macos","menu-bar-app","openai","speech-to-text","stt","swift","swiftui","text-to-speech","transcription","tts"],"created_at":"2026-02-19T02:00:48.873Z","updated_at":"2026-02-19T02:00:49.827Z","avatar_url":"https://github.com/yohasebe.png","language":"Swift","funding_links":["https://github.com/sponsors/yohasebe","https://buymeacoffee.com/yohasebe","https://ko-fi.com/yohasebe"],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/social-preview.png\" alt=\"SpeechDock - Listen and speak, from anywhere on your Mac\" width=\"640\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/status-beta-orange\" alt=\"Beta\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/macOS-14%2B-blue\" alt=\"macOS 14+\"\u003e\n  \u003ca href=\"LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-Apache%202.0-blue\" alt=\"License\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/yohasebe/speechdock/releases\"\u003e\u003cimg src=\"https://img.shields.io/github/v/release/yohasebe/speechdock\" alt=\"Release\"\u003e\u003c/a\u003e\n  \u003cimg src=\"https://img.shields.io/badge/homebrew-tap-brown\" alt=\"Homebrew\"\u003e\n\u003c/p\u003e\n\n## What is SpeechDock?\n\n**Transcribe any audio on your Mac** — Not just your voice through the microphone, but also system-wide audio or sound from a specific app. If your Mac can hear it, SpeechDock can turn it into text in real time.\n\n**Hear any text on your screen** — Selected text, typed text, pasted content, or text captured via OCR from any screen region. If you can see it, SpeechDock can read it aloud.\n\n**Live subtitles and translation** — Display real-time transcription as on-screen subtitles, with optional translation into 100+ languages using on-device or cloud providers.\n\n**Always accessible from your menu bar** — Global hotkeys let you use STT and TTS from anywhere, without switching apps. Works immediately after installation with no API keys required. Cloud providers are optional enhancements.\n\nEnglish | [日本語](README_ja.md)\n\n## Architecture\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/images/architecture.png\" alt=\"SpeechDock Architecture\" width=\"720\"\u003e\n\u003c/p\u003e\n\n## Documentation\n\n| Page | Description |\n|------|-------------|\n| **[Home](https://yohasebe.github.io/speechdock/)** | Overview and getting started |\n| **[Basic Features](https://yohasebe.github.io/speechdock/basics.html)** | macOS native STT/TTS, OCR, subtitles, shortcuts |\n| **[Advanced Features](https://yohasebe.github.io/speechdock/advanced.html)** | Cloud providers, API keys, file transcription, translation |\n| **[AppleScript](https://yohasebe.github.io/speechdock/applescript.html)** | Scripting commands, properties, examples, error codes |\n\n## Features\n\n### Speech-to-Text (STT)\n\nConvert speech to text using:\n\n| Provider | Models | API Key |\n|----------|--------|---------|\n| **macOS Native** | System Default (SpeechAnalyzer on macOS 26+) | Not required |\n| **OpenAI** | GPT-4o Transcribe, GPT-4o Mini Transcribe, Whisper | Required |\n| **Google Gemini** | Gemini 2.5 Flash Native Audio, Gemini 2.0 Flash Live | Required |\n| **ElevenLabs** | Scribe v2 Realtime | Required |\n| **Grok** | Grok Realtime | Required |\n\n**Note**: On macOS 26+, the native STT uses Apple's new SpeechAnalyzer framework, providing real-time transcription without time limits and improved performance.\n\n### Text-to-Speech (TTS)\n\nConvert text to speech using:\n\n| Provider | Models | API Key |\n|----------|--------|---------|\n| **macOS Native** | System Default | Not required |\n| **OpenAI** | GPT-4o Mini TTS (Dec 2025), GPT-4o Mini TTS, TTS-1, TTS-1 HD | Required |\n| **Google Gemini** | Gemini 2.5 Flash TTS, Gemini 2.5 Pro TTS | Required |\n| **ElevenLabs** | Eleven v3, Flash v2.5, Multilingual v2, Turbo v2.5, Monolingual v1 | Required |\n| **Grok** | Grok Voice | Required |\n\n### OCR to Speech\n\nCapture text from any region of your screen and convert it to speech:\n\n1. Press the OCR hotkey (`Ctrl + Option + Shift + O` by default)\n2. Drag to select the region containing text\n3. Recognized text appears in the TTS panel for editing\n4. Press Speak to read the text aloud\n\nUses macOS Vision Framework for text recognition. Requires Screen Recording permission.\n\n### Subtitle Mode\n\nDisplay real-time transcription as subtitles overlay during recording:\n\n- **On-screen subtitles** - Show transcription as floating subtitles anywhere on screen\n- **Real-time translation** - Optionally translate subtitles as you speak\n- **Customizable appearance** - Adjust font size, opacity, position (top/bottom), and max lines\n- **Draggable position** - Drag subtitles to any location on screen\n- **Auto-hide panel** - Optionally hide STT panel when subtitle mode is active\n\nToggle with hotkey (`Ctrl + Option + S` by default) or from the STT panel/menu bar.\n\n### Audio Sources\n\n- **Microphone** - Record from any connected microphone with device selection\n- **System Audio** - Capture all audio output from your Mac\n- **App Audio** - Capture audio from a specific application\n\n### Quick Transcription\n\nA floating microphone button for instant voice input without opening the STT panel:\n\n1. Enable **Floating Mic Button** from the menu bar\n2. Click the button or press `Ctrl + Option + M` to start recording\n3. Speak — real-time transcription appears in a floating HUD\n4. Click again or press `Ctrl + Option + M` to stop\n5. Transcribed text is automatically pasted into the frontmost app\n\nThe button can be dragged anywhere on screen, and its position is saved.\n\n### Additional Features\n\n- Global keyboard shortcuts for STT and TTS\n- Customizable panel shortcuts with modifier key support\n- Panel windows for real-time transcription with paste target selection\n- Panel windows for TTS with text editing and word highlighting\n- Panel style selection: Floating (always-on-top) or Standard Window\n- Audio output device selection for TTS\n- Save synthesized audio to file (M4A/MP3 format)\n- Language selection for STT and TTS\n- Speed control for TTS playback\n- Voice and model selection per provider\n- VAD (Voice Activity Detection) auto-stop for hands-free recording\n- Text replacement rules for STT output correction\n- Translation (macOS on-device or cloud LLMs)\n- Transcription history (auto-saved, up to 50 entries, accessible from menu bar)\n- Text file drag \u0026 drop for TTS panel (.txt, .md, .text, .rtf)\n- Real-time character and word count display\n- Automatic WebSocket reconnection with exponential backoff\n- [AppleScript support](docs/applescript.md) for automation\n- Automatic updates via Sparkle\n- Launch at login option\n\n## Requirements\n\n- macOS 14.0 (Sonoma) or later\n- Apple Silicon Mac (M1/M2/M3/M4)\n- API keys for cloud providers are **optional** (required only if using OpenAI, Google Gemini, ElevenLabs, or Grok)\n\n## Installation\n\n### Homebrew (Recommended)\n\n```bash\nbrew tap yohasebe/speechdock\nbrew install --cask speechdock\n```\n\nTo update to the latest version:\n\n```bash\nbrew upgrade --cask speechdock\n```\n\n### Manual Download\n\n1. Download the latest `.dmg` file from the [Releases](https://github.com/yohasebe/SpeechDock/releases) page\n2. Open the DMG file\n3. Drag SpeechDock to your Applications folder\n4. Launch SpeechDock from Applications\n\n## Setup\n\n### API Keys\n\nTo use cloud providers, you need to configure API keys:\n\n1. Open **Settings** \u003e **API Keys**\n2. Enter your API keys:\n   - **OpenAI**: [OpenAI Platform](https://platform.openai.com/api-keys)\n   - **Google Gemini**: [Google AI Studio](https://aistudio.google.com/apikey)\n   - **ElevenLabs**: [ElevenLabs Settings](https://elevenlabs.io/app/settings/api-keys)\n   - **Grok (xAI)**: [xAI Console](https://console.x.ai/)\n\nAPI keys are securely stored in macOS Keychain.\n\n### Permissions\n\nSpeechDock requires or recommends the following permissions:\n\n| Permission | Level | Purpose |\n|------------|-------|---------|\n| **Microphone** | Required | Speech recognition input |\n| **Accessibility** | Recommended | Global keyboard shortcuts and text insertion |\n| **Screen Recording** | Optional | System/App Audio capture, OCR, and window thumbnails |\n\nOn first launch, SpeechDock displays a permission setup window with real-time status indicators. Grant permissions in **System Settings** \u003e **Privacy \u0026 Security** — the setup window updates automatically without restarting the app. Features that require missing permissions are disabled in the UI with clear visual indicators.\n\n## Usage\n\n### Keyboard Shortcuts\n\n| Action | Default Shortcut |\n|--------|------------------|\n| Toggle STT Panel | `Cmd + Shift + Space` |\n| Toggle TTS Panel | `Ctrl + Option + T` |\n| OCR Region to Speech | `Ctrl + Option + Shift + O` |\n| Toggle Subtitle Mode | `Ctrl + Option + S` |\n| Quick Transcription | `Ctrl + Option + M` |\n\nShortcuts can be customized in **Settings** \u003e **Shortcuts**.\n\n### STT Panel\n\n| Action | Default Shortcut |\n|--------|------------------|\n| Record | `Cmd + R` |\n| Stop Recording | `Cmd + S` |\n| Paste Text | `Cmd + Return` |\n| Select Target | `Cmd + Shift + Return` |\n| Cancel | `Cmd + .` |\n\n### TTS Panel\n\n| Action | Default Shortcut |\n|--------|------------------|\n| Speak | `Cmd + Return` |\n| Stop | `Cmd + .` |\n| Save Audio | `Cmd + S` |\n\n### Menu Bar\n\nClick the SpeechDock icon in the menu bar for quick access to:\n\n- Start/stop STT recording\n- Open TTS for selected text\n- Toggle subtitle mode and floating mic button\n- Transcribe audio files\n- Open transcription history\n- OCR to speech\n- Access Settings, Help, and About\n\n## Configuration\n\n### Settings\n\nOpen Settings with `Cmd + ,` or from the menu bar. The unified settings window uses a sidebar with the following categories:\n\n- **Speech-to-Text**: Provider, model, language, audio input, auto-stop, panel behavior\n- **Text-to-Speech**: Provider, model, voice, speed, audio output, panel behavior\n- **Translation**: Panel translation provider/model, subtitle translation settings\n- **Subtitle**: On/off, position, font size, text/background opacity, max lines\n- **Shortcuts**: Global hotkeys and panel shortcuts\n- **Text Replacement**: Built-in patterns and custom rules\n- **Appearance**: Text font size, panel style, launch at login\n- **API Keys**: Cloud provider API keys (optional)\n- **About**: Version info, links, check for updates, support\n\n### Panel Style\n\nChoose between two panel styles in **Settings** \u003e **Appearance**:\n\n- **Floating**: Always-on-top borderless panels that can be dragged from anywhere\n- **Standard Window**: Regular macOS windows with title bar, can be minimized\n\nNote: Only one panel (STT or TTS) can be open at a time. Opening one will close the other.\n\n## Troubleshooting\n\n### STT not working\n\n1. Check microphone permission is granted\n2. Verify API key is configured (for cloud providers)\n3. Try macOS native provider to test basic functionality\n4. For System/App Audio, check Screen Recording permission\n\n### TTS not working\n\n1. Verify API key is configured (for cloud providers)\n2. Try macOS native provider to test\n3. Check audio output is not muted\n4. Try selecting a different output device\n\n### Shortcuts not responding\n\n1. Check Accessibility permission is granted\n2. Look for conflicts with other applications\n3. Reset shortcuts to defaults in Settings\n\n### System Audio / App Audio not working\n\n1. Grant Screen Recording permission in System Settings\n2. For App Audio, ensure the target app is running\n3. Refresh the app list from the audio source menu\n\n### OCR not working\n\n1. Grant Screen Recording permission in System Settings\n2. Ensure the text in the selected region is clear and readable\n3. Try selecting a larger region around the text\n\n## Privacy \u0026 Security\n\n- **API Keys**: Stored securely in macOS Keychain, never transmitted except to the respective provider\n- **macOS Native**: Audio processed entirely on-device, no data sent externally\n- **Cloud Providers**: Audio sent to provider APIs (OpenAI, Google, ElevenLabs, Grok) for processing according to their privacy policies\n- **No Telemetry**: SpeechDock does not collect or transmit usage data\n\n## License\n\nApache License 2.0 - see [LICENSE](LICENSE) for details.\n\n## Author\n\nYoichiro Hasebe\n\n## Support the Project\n\nSpeechDock is free and open source. If you find it useful, please consider supporting its development:\n\n- [GitHub Sponsors](https://github.com/sponsors/yohasebe)\n- [Buy Me a Coffee](https://buymeacoffee.com/yohasebe)\n- [Ko-fi](https://ko-fi.com/yohasebe)\n\n## Contributing\n\nContributions are welcome! Please open an issue or pull request on GitHub.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyohasebe%2Fspeechdock","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyohasebe%2Fspeechdock","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyohasebe%2Fspeechdock/lists"}