{"id":"korean-voice","repo":"me0w2en/paseo-korean-voice","url":"https://github.com/me0w2en/paseo-korean-voice","package":"paseo-korean-voice","npm":{"package":"paseo-korean-voice","version":"0.1.1","integrity":"sha512-AldFWpYb0ngrtxSNMjT9j4KdnY5a9FNGaXunfqQalq60VJjq3X0D2IBWr0vRXN8rmIjYtumAZdaEJij9Rj6tMw==","publishedAt":"2026-10-11T13:40:25.091Z","downloadsLast30Days":465},"name":"korean-voice","description":"Local OpenAI-compatible speech gateway for Paseo: Korean dictation (Whisper prompt, glossary, hallucination filter) and macOS Korean TTS","categories":["productivity"],"platforms":["macos"],"caveats":["Requires a Groq or OpenAI API key for Whisper transcription.","Speech settings must be merged into config.json and the daemon restarted.","Text-to-speech uses the macOS say command, so the daemon must run on macOS."],"images":[],"themes":[],"health":{"manifestValid":true,"hasReadme":true,"hasLicense":true,"hasTests":false,"hasTypecheckScript":true,"updatedRecently":true},"scannedAt":"2026-10-16T06:30:40.133Z","addedAt":"2026-10-16T06:26:49Z","npmSecurity":{"status":"passed","blockingFindings":0,"advisoryFindings":0,"scannedAt":"2026-10-16T06:30:30.075Z","version":"0.1.1","integrity":"sha512-AldFWpYb0ngrtxSNMjT9j4KdnY5a9FNGaXunfqQalq60VJjq3X0D2IBWr0vRXN8rmIjYtumAZdaEJij9Rj6tMw=="},"version":"0.1.1","security":{"status":"passed","blockingFindings":0,"advisoryFindings":0,"scannedAt":"2026-10-16T06:30:30.075Z","commit":"226874d84a02a60f6b91764b61fe25c6afae69f6"},"author":"me0w2en","license":"MIT","paseoVersionRequirement":">=0.11.2","descriptionNodes":[{"type":"text","text":"Local OpenAI-compatible speech gateway for Paseo: Korean dictation (Whisper prompt, glossary, hallucination filter) and macOS Korean TTS"}],"caveatNodes":[[{"type":"text","text":"Requires a Groq or OpenAI API key for Whisper transcription."}],[{"type":"text","text":"Speech settings must be merged into config.json and the daemon restarted."}],[{"type":"text","text":"Text-to-speech uses the macOS say command, so the daemon must run on macOS."}]],"manifest":{"id":"korean-voice","description":"Korean dictation and voice-mode speech for Paseo: a local OpenAI-compatible gateway that swaps Whisper's English prompt for a Korean prompt and glossary, filters hallucinations, and speaks with macOS Korean voices.","requirements":{"paseo":">=0.11.2"}},"repoMeta":{"stars":0,"defaultBranch":"main","pushedAt":"2026-10-11T13:35:06Z"},"owner":{"login":"me0w2en","avatarUrl":"https://avatars.githubusercontent.com/u/76608042?v=4"},"installNotesHtml":"<p>Requirements: macOS, Paseo 0.11.2+, and a Groq or OpenAI API key.</p>\n<pre><code class=\"language-bash\"></code></pre>","limitationsNotesHtml":"<ul>\n<li>macOS only: TTS uses <code>say</code>. If your daemon runs on a remote Linux host, TTS won't work.</li>\n<li>STT still uses cloud Whisper (Groq/OpenAI). For fully offline use, point the upstream URL at a local OpenAI-compatible server such as whisper.cpp.</li>\n<li>Voice mode's system instructions are hard-coded in English. Agents usually answer in Korean when you speak Korean.</li>\n</ul>","readmeText":"# Paseo Korean Voice\n\n**English** · [한국어](README.ko.md)\n\nA [Paseo](https://paseo.sh) plugin that makes dictation and voice mode work properly in Korean. It runs a local OpenAI-compatible speech gateway: transcriptions go to Groq/OpenAI Whisper with a Korean prompt and glossary, and replies are spoken with macOS Korean voices.\n\n## Why Korean breaks (Paseo 0.11.2)\n\n- Local speech models cover English (`parakeet v2`, `kokoro-en`) and 25 European languages (`parakeet v3`). There is no local Korean STT or TTS model.\n- Switching STT to an OpenAI-compatible provider (Groq Whisper, etc.) with `language: \"ko\"` makes dictation work. However, the daemon always sends Whisper a fixed **English prompt** (\"Transcribe only what the speaker says…\"), so you can't supply Korean context or a glossary.\n- Whisper tends to invent Korean subtitle boilerplate such as \"시청해 주셔서 감사합니다\" (\"Thanks for watching\") on silence.\n- Voice mode TTS defaults to `kokoro-en`, which can't read Korean replies. OpenAI TTS works but needs a paid key.\n\n## How it works\n\nThe plugin's server process serves OpenAI-compatible endpoints on `127.0.0.1:6791`, and Paseo's OpenAI speech settings point at it.\n\n```\nPaseo daemon ──/v1/audio/transcriptions──▶ korean-voice ──(Korean prompt + glossary)──▶ Groq/OpenAI Whisper\n             ◀────── text with hallucinated sentences removed ──────┘\nPaseo daemon ──/v1/audio/speech (pcm)──▶ korean-voice ──▶ macOS `say` (Yuna and other Korean voices, free and offline)\n```\n\n- **STT requests:** replaces Paseo's English prompt with a Korean prompt and glossary, and adds `language=ko` if missing. API keys are never stored; the `Authorization` header Paseo sends is forwarded upstream as-is.\n- **STT responses:** drops known Whisper hallucinations sentence by sentence.\n- **TTS:** strips Markdown, code blocks, and URLs, then renders 24 kHz PCM with a macOS Korean voice.\n- **Settings screen:** **Settings → Plugins → Korean Voice** changes voice, rate, glossary, and upstream URL, and plays a test phrase.\n\nThe prompt and glossary are plain settings, so the same approach works for Japanese, Chinese, or any other language Whisper supports.\n\n## Install\n\nRequirements: macOS, Paseo 0.11.2+, and a Groq or OpenAI API key.\n\n```bash\n# 1) Turn on Settings → Plugins → \"Enable plugins\"\n#    (or add \"pluginsEnabled\": true to ~/.paseo/config.json and run `paseo reload`)\n\n# 2) Install the plugin\npaseo plugin install npm:paseo-korean-voice      # or github:me0w2en/paseo-korean-voice\npaseo plugin ls            # korean-voice should be running\n\n# 3) Point Paseo speech at the gateway (backs up config.json, then merges), then restart the Paseo app.\n#    providers.openai.stt.apiKey in ~/.paseo/config.json must hold your Groq/OpenAI key.\ngit clone https://github.com/me0w2en/paseo-korean-voice.git\nnode paseo-korean-voice/scripts/apply-voice-config.mjs --dry-run   # preview\nnode paseo-korean-voice/scripts/apply-voice-config.mjs\n```\n\n<details>\n<summary>Manual configuration</summary>\n\nMerge this into `~/.paseo/config.json`, then restart the daemon:\n\n```json\n{\n  \"features\": {\n    \"dictation\": { \"stt\": { \"provider\": \"openai\", \"language\": \"ko\" } },\n    \"voiceMode\": {\n      \"stt\": { \"provider\": \"openai\", \"language\": \"ko\" },\n      \"tts\": { \"provider\": \"openai\" }\n    }\n  },\n  \"providers\": {\n    \"openai\": {\n      \"stt\": { \"baseUrl\": \"http://127.0.0.1:6791/v1\", \"apiKey\": \"<your Groq or OpenAI key>\" },\n      \"tts\": { \"baseUrl\": \"http://127.0.0.1:6791/v1\", \"apiKey\": \"local\" }\n    }\n  }\n}\n```\n\nThe gateway forwards to `https://api.groq.com/openai/v1` by default; change **Upstream STT URL** in the plugin settings for OpenAI or a local Whisper server.\n\n</details>\n\nTo develop, install from a local clone (`paseo plugin install \"$PWD\"`), run `npm install && npm run typecheck`, and apply changes with `paseo plugin reload korean-voice`.\n\n## Uninstall\n\n- Restore `~/.paseo/config.json.bak-korean-voice-*` and restart the daemon, then `paseo plugin remove korean-voice`.\n- If you disable the plugin while step 3's settings are still in place, dictation fails. Revert the speech settings together with the plugin.\n\n## Limitations\n\n- macOS only: TTS uses `say`. If your daemon runs on a remote Linux host, TTS won't work.\n- STT still uses cloud Whisper (Groq/OpenAI). For fully offline use, point the upstream URL at a local OpenAI-compatible server such as whisper.cpp.\n- Voice mode's system instructions are hard-coded in English. Agents usually answer in Korean when you speak Korean.\n\n## License\n\n[MIT](LICENSE)\n"}