{"id":51222493,"url":"https://github.com/georgemandis/stenographer","last_synced_at":"2026-06-28T08:30:55.847Z","repository":{"id":361073716,"uuid":"1252856823","full_name":"georgemandis/stenographer","owner":"georgemandis","description":"Speech-to-text CLI powered by native macOS Speech Recognition. Transcribe audio files or live mic input across 63 languages, on-device.","archived":false,"fork":false,"pushed_at":"2026-06-08T21:37:19.000Z","size":27,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-16T12:33:31.983Z","etag":null,"topics":["cli","command-line-tool","macos","speech-recognition","speech-to-text","transcription"],"latest_commit_sha":null,"homepage":"","language":"Zig","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/georgemandis.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2026-05-29T00:09:09.000Z","updated_at":"2026-06-08T21:37:23.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/georgemandis/stenographer","commit_stats":null,"previous_names":["georgemandis/stenographer"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/georgemandis/stenographer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/georgemandis%2Fstenographer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/georgemandis%2Fstenographer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/georgemandis%2Fstenographer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/georgemandis%2Fstenographer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/georgemandis","download_url":"https://codeload.github.com/georgemandis/stenographer/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/georgemandis%2Fstenographer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34882751,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-28T02:00:05.809Z","response_time":54,"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":["cli","command-line-tool","macos","speech-recognition","speech-to-text","transcription"],"created_at":"2026-06-28T08:30:50.638Z","updated_at":"2026-06-28T08:30:55.839Z","avatar_url":"https://github.com/georgemandis.png","language":"Zig","funding_links":[],"categories":[],"sub_categories":[],"readme":"# stenographer\n\nSpeech-to-text from the command line, powered by native macOS Speech Recognition.\n\nTranscribe audio files or live microphone input into text. Supports 63 languages, on-device recognition (no network required), and partial results for real-time transcription. No API keys, no downloads — uses Apple's built-in speech recognizer.\n\nWritten in Zig. Uses Apple's Speech and AVFoundation frameworks via Objective-C runtime bindings.\n\n## Install\n\n### Homebrew\n\n```bash\nbrew install georgemandis/tap/stenographer\n```\n\n### From source\n\nRequires [Zig 0.16+](https://ziglang.org/download/) and macOS.\n\n```bash\ngit clone https://github.com/georgemandis/stenographer.git\ncd stenographer\nzig build -Doptimize=ReleaseFast\n```\n\n## Usage\n\n### Transcribe an audio file\n\n```bash\n$ stenographer transcribe recording.wav\nHello world this is a test of the sound classification system\n\n$ stenographer transcribe interview.mp3 --json\n{\"text\":\"Hello world this is a test of the sound classification system\"}\n\n$ stenographer transcribe podcast.m4a --on-device\n# Forces on-device recognition (no network, lower latency)\n```\n\n### Transcribe from the microphone\n\n```bash\n$ stenographer listen\nListening for 10.0s...\nThe quick brown fox jumps over the lazy dog\n\n$ stenographer listen --duration=5000\nListening for 5.0s...\nHello world\n\n$ stenographer listen --duration=30000 --json\nListening for 30.0s...\n{\"text\":\"This is a longer recording with multiple sentences\"}\n```\n\n### Multi-language support\n\n```bash\n$ stenographer transcribe french_audio.aiff --locale=fr-FR\nBonjour le monde comment allez-vous aujourd'hui\n\n$ stenographer transcribe japanese.wav --locale=ja-JP --on-device\n\n$ stenographer locales\nar-SA\nca-ES\ncs-CZ\nda-DK\nde-AT\nde-CH\nde-DE\n...\nzh-TW\n\n$ stenographer locales --json\n[\"ar-SA\",\"ca-ES\",\"cs-CZ\",...]\n```\n\n## Composability\n\n```bash\n# Transcribe then detect language\nstenographer transcribe audio.wav | lingua detect\n\n# Transcribe and extract entities\nstenographer transcribe meeting.wav | lingua entities\n\n# Transcribe and analyze sentiment\nstenographer transcribe review.wav | lingua sentiment --per-sentence\n\n# Save a transcript to a file\nstenographer transcribe meeting.wav --on-device \u003e transcript.txt\n```\n\n## Options\n\n```\nstenographer \u003ccommand\u003e [options]\n\nCommands:\n  transcribe \u003cfile\u003e  Transcribe an audio file\n  listen             Transcribe from the microphone\n  locales            List supported languages\n\nOptions:\n  --locale=CODE      Language locale (default: en-US)\n  --on-device        Force on-device recognition (no network)\n  --duration=MS      Listen duration in ms (default: 10000)\n  --json             Output as JSON\n  --help, -h         Show this help message\n  --version, -v      Show version\n```\n\n## Requirements\n\n- macOS 10.15+ (Catalina or later)\n- Zig 0.16+\n- Speech recognition permission (prompted on first use)\n- For `--on-device`: macOS will download language models as needed\n\n## How It Works\n\nstenographer uses Apple's [Speech](https://developer.apple.com/documentation/speech) framework with `SFSpeechRecognizer` for both file and live transcription.\n\n- **File transcription:** `SFSpeechURLRecognitionRequest` loads audio files and runs recognition via a result handler block\n- **Live mic:** `AVAudioEngine` captures microphone input, feeding buffers to `SFSpeechAudioBufferRecognitionRequest`\n- **Block ABI:** ObjC block construction (`_NSConcreteStackBlock` / `_NSConcreteGlobalBlock`) for recognition result handlers and audio tap callbacks\n- **Run loop:** `CFRunLoopRunInMode` pumps the event loop for async recognition callbacks\n\n## Related Projects\n\n- [lingua](https://github.com/georgemandis/lingua) — NLP CLI (NaturalLanguage framework)\n- [cacophony](https://github.com/georgemandis/cacophony) — Sound classification CLI (SoundAnalysis framework)\n- [tezcatl](https://github.com/georgemandis/tezcatl) — Headless web rendering CLI (WebKit)\n- [loupe](https://github.com/georgemandis/loupe) — Computer vision CLI (Vision framework)\n- [whereami](https://github.com/georgemandis/whereami) — Location CLI (CoreLocation)\n- [nearme](https://github.com/georgemandis/nearme) — Local search CLI (MapKit)\n\n## Credits\n\nCreated by [George Mandis](https://george.mand.is) during [Recurse Center](https://www.recurse.com/).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgeorgemandis%2Fstenographer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgeorgemandis%2Fstenographer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgeorgemandis%2Fstenographer/lists"}