docs(site): consolidate landing page and add macOS download

Publish one bilingual download surface with clearly separated iPhone/iPad App Store and notarized Mac DMG actions.
This commit is contained in:
Rocky
2026-07-30 00:56:50 +08:00
parent 38a76e9217
commit 293a4beae6
12 changed files with 212 additions and 661 deletions
+11 -10
View File
@@ -8,9 +8,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased] ## [Unreleased]
### Added ### Added
- **macOS direct download**: bilingual README and GitHub Pages download areas now offer a signed, notarized macOS DMG alongside the iPhone / iPad App Store badge, with explicit platform labels. / **macOS 直接下载**:中英文 README 与 GitHub Pages 下载区在 iPhone / iPad App Store 徽章旁新增已签名、公证的 macOS DMG,并明确标注平台。
- **Beams hero**: radiant noise-warped beam array (React Bitsstyle, vanilla Three.js) with the shared demo preset (26 beams, 208° rotation) and OSG green light. / **Beams Hero**:放射状噪声光束阵列(React Bits 风格,原生 Three.js),采用分享的演示预设(26 束、208° 旋转)与 OSG 绿色灯光。 - **Beams hero**: radiant noise-warped beam array (React Bitsstyle, vanilla Three.js) with the shared demo preset (26 beams, 208° rotation) and OSG green light. / **Beams Hero**:放射状噪声光束阵列(React Bits 风格,原生 Three.js),采用分享的演示预设(26 束、208° 旋转)与 OSG 绿色灯光。
- **App Store download badges**: official badges on bilingual READMEs (hero + Get sections) and the website, with China-store `/cn/` links for Chinese and regionless App Store links for English. / **App Store 下载徽章**:中英文 README(顶部与获取区)与官网挂载官方徽章;中文链 `/cn/`,英文用无地区链接。 - **App Store download badges**: official badges on bilingual READMEs (hero + Get sections) and the website, with China-store `/cn/` links for Chinese and regionless App Store links for English. / **App Store 下载徽章**:中英文 README(顶部与获取区)与官网挂载官方徽章;中文链 `/cn/`,英文用无地区链接。
- **Website SEO & AI discovery**: richer meta/JSON-LD/FAQ, `llms.txt`, expanded sitemap, English landing, plus install / compare / Mac-dictation content pages. / **官网 SEO 与 AI 发现**:强化 meta/JSON-LD/FAQ、`llms.txt`、sitemap并新增英文落地页与安装 / 对比 / Mac 听写专题页 - **Website SEO & AI discovery**: richer meta/JSON-LD/FAQ, `llms.txt`, sitemap, and bilingual single-page landing. / **官网 SEO 与 AI 发现**:强化 meta/JSON-LD/FAQ、`llms.txt`、sitemap以及双语单页落地站
- **Context-aware polish safeguards**: polish can use a redacted cursor-neighborhood snapshot for natural continuation, validates protected terms and identifiers, retries once, and falls back to a conservative local cleanup when needed. / **上下文润色护栏**:润色可使用经截断脱敏的光标附近文字自然衔接,并校验受保护词与标识符;失败时重试一次,仍不合格则降级为本地保守清理。 - **Context-aware polish safeguards**: polish can use a redacted cursor-neighborhood snapshot for natural continuation, validates protected terms and identifiers, retries once, and falls back to a conservative local cleanup when needed. / **上下文润色护栏**:润色可使用经截断脱敏的光标附近文字自然衔接,并校验受保护词与标识符;失败时重试一次,仍不合格则降级为本地保守清理。
- **Pause-aware chunk polish**: chunked ASR carries detected silence boundaries into the polish request while keeping previews and final output marker-free. / **分块停顿感知润色**:分块 ASR 将检测到的静音边界传入润色请求,实时预览与最终输出均不会显示内部标记。 - **Pause-aware chunk polish**: chunked ASR carries detected silence boundaries into the polish request while keeping previews and final output marker-free. / **分块停顿感知润色**:分块 ASR 将检测到的静音边界传入润色请求,实时预览与最终输出均不会显示内部标记。
- **True streaming cloud ASR**: Bailian, Volcengine, and OpenAI Realtime use one utterance-level WebSocket with live partials; Volcengine enables official two-pass (`enable_nonstream`) so interim text stays on-screen while definite ASR feeds polish. / **真流式云端 ASR**:百炼、火山与 OpenAI Realtime 按整句长连接推流并实时上屏;火山开启官方二遍识别(`enable_nonstream`),interim 仅上屏,definite 再送润色。 - **True streaming cloud ASR**: Bailian, Volcengine, and OpenAI Realtime use one utterance-level WebSocket with live partials; Volcengine enables official two-pass (`enable_nonstream`) so interim text stays on-screen while definite ASR feeds polish. / **真流式云端 ASR**:百炼、火山与 OpenAI Realtime 按整句长连接推流并实时上屏;火山开启官方二遍识别(`enable_nonstream`),interim 仅上屏,definite 再送润色。
@@ -20,16 +21,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- **Delete day in History**: each day header has a Delete action with confirmation to clear that day's transcripts only (iOS and Mac). / **历史按天删除**:日期行右侧提供删除按钮,确认后仅清除当天记录(iOS 与 Mac)。 - **Delete day in History**: each day header has a Delete action with confirmation to clear that day's transcripts only (iOS and Mac). / **历史按天删除**:日期行右侧提供删除按钮,确认后仅清除当天记录(iOS 与 Mac)。
- **Mac Settings translation target**: polish-provider section includes “Polish then translate” with the same locale picker as Home / menu bar. / **Mac 设置翻译目标**:润色(LLM)分区新增「润色后翻译」,与首页 / 菜单栏同一套目标语言选择。 - **Mac Settings translation target**: polish-provider section includes “Polish then translate” with the same locale picker as Home / menu bar. / **Mac 设置翻译目标**:润色(LLM)分区新增「润色后翻译」,与首页 / 菜单栏同一套目标语言选择。
### Fixed
- **macOS menu-bar dictation delivery**: menu-bar sessions now retain the external target app before the popover takes focus, use that app for polish context and local bias, and reactivate it before pasting. / **macOS 菜单栏听写投递**:菜单栏会话会在弹窗抢焦点前保留外部目标应用,并将其用于润色上下文与本地偏置,粘贴前重新激活目标应用。
- **macOS recording and clipboard fallback**: cancelling microphone preparation no longer lets an untracked button task restart recording; clipboard restoration waits longer, preserves newer third-party writes, clears an originally empty clipboard correctly, and Accessibility failures explain that the transcript remains available for manual paste. / **macOS 录音与剪贴板降级**:取消麦克风准备后,未跟踪的按钮任务不会再次启动录音;剪贴板恢复延长等待时间、保留第三方较新的写入、正确还原原本为空的剪贴板,并在辅助功能权限失败时明确提示可手动粘贴识别结果。
- **Polish validator false positives**: slash-form dates, fractions, and words such as `and/or` are no longer treated as hard-protected file paths; confirmed ordinal ASR repairs also stop polluting missing-number telemetry. / **润色校验误报**:斜杠日期、分数及 `and/or` 等词不再被误判为文件路径硬违规;已确认的序号 ASR 修复也不再污染数字缺失遥测。
- **Transient chunk loss**: a failed middle ASR chunk now retries once with the same PCM before the serial worker advances, preventing brief network failures from silently removing several seconds of speech. / **瞬时分块丢字**:中段 ASR 分块失败后会使用同一份 PCM 原地重试一次,再继续串行处理,避免短暂网络抖动静默丢失数秒语音。
- **macOS Option release freeze**: finishing a live snapshot stream no longer calls `AsyncStream.Continuation.finish()` while holding the recorder lock — the termination handler re-entered the same `NSLock` on the main thread and wedged the app when the hold-to-talk key was released. / **macOS 松开 Option 卡死**:结束实时 snapshot 流时不再在持有 recorder 锁的情况下调用 `AsyncStream.Continuation.finish()`;终止回调会在主线程重入同一把 `NSLock`,松开听写键时导致整个 App 无响应。
- **macOS dictation HUD layout storm**: the floating pill no longer reassigns its hosting view and forces a synchronous relayout on every view-model tick (~20×/s from the level timer); it uses a fixed panel size and lets SwiftUI refresh through `@ObservedObject` instead. / **macOS 听写浮层布局风暴**:悬浮胶囊不再在每次 view-model 更新时重建 hosting 视图并强制同步重排(音量定时器约 20 次/秒);改为固定面板尺寸,由 SwiftUI `@ObservedObject` 驱动刷新。
- **Polish never answers the transcript**: fun styles (dating / flex / corp) could turn “你觉得这个包怎么样” into a reply such as “还行,挺顺眼的”. A top-priority “polish only, never answer” rule now sits in the global contract, every built-in style pack, the prompt safety boundary, and a router question guard that keeps question drafts as questions. / **润色不再代答转写内容**:趣味风格(直男癌/装逼指南/大厂黑话)曾把「你觉得这个包怎么样」润色成「还行,挺顺眼的」。现已在全局契约、全部内置风格包、提示词安全边界与路由问句守卫四层加入最高优先级的「只润色、不作答」规则,问句必须仍是问句。
### Changed ### Changed
- **Landing page single surface**: remove separate install / compare / Mac / English content pages from navigation; keep one bilingual home page with in-page anchors, and leave thin redirects for old URLs. / **官网收成单页**:导航去掉独立的安装 / 对比 / Mac / 英文专题页,保留双语首页与页内锚点,旧 URL 仅保留轻量跳转。
- **Hero stays dark**: the beams hero background, overlay, and light text stay on the dark stage in light mode too, matching night mode. / **Hero 固定暗色**:白天模式下 Beams Hero 底色、遮罩与浅色文字仍保持与黑夜一致的暗色舞台。
- **Website download actions**: App Store and source buttons now share a compact rounded-rectangle shape and matching height instead of mixing badge and pill silhouettes. / **官网操作按钮**:App Store 与源码按钮统一为等高的紧凑圆角矩形,不再混用徽章与胶囊轮廓。 - **Website download actions**: App Store and source buttons now share a compact rounded-rectangle shape and matching height instead of mixing badge and pill silhouettes. / **官网操作按钮**:App Store 与源码按钮统一为等高的紧凑圆角矩形,不再混用徽章与胶囊轮廓。
- **Layered bilingual polish prompts**: transcripts are sent once as user data; stable Chinese/English core rules, style policies, dictionaries, and runtime context now have explicit responsibilities for better consistency and provider prefix caching. / **分层双语润色提示词**:转写仅作为用户消息发送一次;稳定的中英文核心规则、风格策略、词典和运行时上下文职责明确,提升一致性并支持服务商前缀缓存。 - **Layered bilingual polish prompts**: transcripts are sent once as user data; stable Chinese/English core rules, style policies, dictionaries, and runtime context now have explicit responsibilities for better consistency and provider prefix caching. / **分层双语润色提示词**:转写仅作为用户消息发送一次;稳定的中英文核心规则、风格策略、词典和运行时上下文职责明确,提升一致性并支持服务商前缀缓存。
- **Two-tier short polish skip**: ultra-short (≤4 CJK) still skips the LLM; 510 CJK now skips only low-value acks/closings (e.g. “好的我知道了”), while questions and contentful shorts still polish. / **两级短句跳过润色**:≤4 字仍跳过 LLM;5–10 字仅对低价值确认/收束语跳过(如「好的我知道了」),问句与有内容短句仍走润色。 - **Two-tier short polish skip**: ultra-short (≤4 CJK) still skips the LLM; 510 CJK now skips only low-value acks/closings (e.g. “好的我知道了”), while questions and contentful shorts still polish. / **两级短句跳过润色**:≤4 字仍跳过 LLM;5–10 字仅对低价值确认/收束语跳过(如「好的我知道了」),问句与有内容短句仍走润色。
@@ -46,6 +40,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- **Unified card-page layout**: Settings, polish styles, and related detail pages now share 20-point page margins, section labels, and card chrome. / **统一卡片页面布局**:设置、润色风格及相关详情页共用 20 点页面留白、分组标题和卡片外观。 - **Unified card-page layout**: Settings, polish styles, and related detail pages now share 20-point page margins, section labels, and card chrome. / **统一卡片页面布局**:设置、润色风格及相关详情页共用 20 点页面留白、分组标题和卡片外观。
### Fixed ### Fixed
- **macOS menu-bar dictation delivery**: menu-bar sessions now retain the external target app before the popover takes focus, use that app for polish context and local bias, and reactivate it before pasting. / **macOS 菜单栏听写投递**:菜单栏会话会在弹窗抢焦点前保留外部目标应用,并将其用于润色上下文与本地偏置,粘贴前重新激活目标应用。
- **macOS recording and clipboard fallback**: cancelling microphone preparation no longer lets an untracked button task restart recording; clipboard restoration waits longer, preserves newer third-party writes, clears an originally empty clipboard correctly, and Accessibility failures explain that the transcript remains available for manual paste. / **macOS 录音与剪贴板降级**:取消麦克风准备后,未跟踪的按钮任务不会再次启动录音;剪贴板恢复延长等待时间、保留第三方较新的写入、正确还原原本为空的剪贴板,并在辅助功能权限失败时明确提示可手动粘贴识别结果。
- **Polish validator false positives**: slash-form dates, fractions, and words such as `and/or` are no longer treated as hard-protected file paths; confirmed ordinal ASR repairs also stop polluting missing-number telemetry. / **润色校验误报**:斜杠日期、分数及 `and/or` 等词不再被误判为文件路径硬违规;已确认的序号 ASR 修复也不再污染数字缺失遥测。
- **Transient chunk loss**: a failed middle ASR chunk now retries once with the same PCM before the serial worker advances, preventing brief network failures from silently removing several seconds of speech. / **瞬时分块丢字**:中段 ASR 分块失败后会使用同一份 PCM 原地重试一次,再继续串行处理,避免短暂网络抖动静默丢失数秒语音。
- **macOS Option release freeze**: finishing a live snapshot stream no longer calls `AsyncStream.Continuation.finish()` while holding the recorder lock — the termination handler re-entered the same `NSLock` on the main thread and wedged the app when the hold-to-talk key was released. / **macOS 松开 Option 卡死**:结束实时 snapshot 流时不再在持有 recorder 锁的情况下调用 `AsyncStream.Continuation.finish()`;终止回调会在主线程重入同一把 `NSLock`,松开听写键时导致整个 App 无响应。
- **macOS dictation HUD layout storm**: the floating pill no longer reassigns its hosting view and forces a synchronous relayout on every view-model tick (~20×/s from the level timer); it uses a fixed panel size and lets SwiftUI refresh through `@ObservedObject` instead. / **macOS 听写浮层布局风暴**:悬浮胶囊不再在每次 view-model 更新时重建 hosting 视图并强制同步重排(音量定时器约 20 次/秒);改为固定面板尺寸,由 SwiftUI `@ObservedObject` 驱动刷新。
- **Polish never answers the transcript**: fun styles (dating / flex / corp) could turn “你觉得这个包怎么样” into a reply such as “还行,挺顺眼的”. A top-priority “polish only, never answer” rule now sits in the global contract, every built-in style pack, the prompt safety boundary, and a router question guard that keeps question drafts as questions. / **润色不再代答转写内容**:趣味风格(直男癌/装逼指南/大厂黑话)曾把「你觉得这个包怎么样」润色成「还行,挺顺眼的」。现已在全局契约、全部内置风格包、提示词安全边界与路由问句守卫四层加入最高优先级的「只润色、不作答」规则,问句必须仍是问句。
- **Daily-chat short replies**: chat polish forbids interlocutor-style continuations on ultra-short drafts (e.g. “嗯” no longer becomes “嗯,我在呢”). / **日常聊天短句接话**:日常润色禁止对极短草稿做对方口吻续写(如「嗯」不再变成「嗯,我在呢」)。 - **Daily-chat short replies**: chat polish forbids interlocutor-style continuations on ultra-short drafts (e.g. “嗯” no longer becomes “嗯,我在呢”). / **日常聊天短句接话**:日常润色禁止对极短草稿做对方口吻续写(如「嗯」不再变成「嗯,我在呢」)。
- **Card corner consistency**: the seven-day chart and shared usage cards now use the same continuous 20-point corners as the other Home cards; shared Settings cards also clip child backgrounds to their border shape. / **卡片圆角一致性**:最近 7 天图表及共享统计卡改用与首页其他卡片一致的连续 20 点圆角;共享设置卡片也会将子视图背景裁切到边框形状。 - **Card corner consistency**: the seven-day chart and shared usage cards now use the same continuous 20-point corners as the other Home cards; shared Settings cards also clip child backgrounds to their border shape. / **卡片圆角一致性**:最近 7 天图表及共享统计卡改用与首页其他卡片一致的连续 20 点圆角;共享设置卡片也会将子视图背景裁切到边框形状。
- **PiP mic spin-up drop**: on record press, open capture and the utterance gate before waiting for audio proof, and keep ~3 s of idle preroll so speech during mic warm-up is not discarded. / **PiP 开麦丢音**:按下录音后先启动采集并打开 utterance gate,再等待音频证明;空闲 preroll 约 3 秒,避免麦克风预热期间的语音被丢掉。 - **PiP mic spin-up drop**: on record press, open capture and the utterance gate before waiting for audio proof, and keep ~3 s of idle preroll so speech during mic warm-up is not discarded. / **PiP 开麦丢音**:按下录音后先启动采集并打开 utterance gate,再等待音频证明;空闲 preroll 约 3 秒,避免麦克风预热期间的语音被丢掉。
+13 -3
View File
@@ -14,7 +14,11 @@ Voice input for iPhone, iPad, and Mac. Speak in any app — polished text lands
<p align="center"> <p align="center">
<a href="https://apps.apple.com/app/osgkeyboard/id6781553267"> <a href="https://apps.apple.com/app/osgkeyboard/id6781553267">
<img src="docs/assets/badges/appstore-en.svg" alt="Download on the App Store" height="40"> <img src="docs/assets/badges/appstore-en.svg" alt="Download for iPhone and iPad" height="40">
</a>
&nbsp;
<a href="https://github.com/hkgood/OSGKeyboard/releases/download/v1.1-mac/OSGKeyboard-1.1.dmg">
<img src="docs/assets/badges/macos-en.svg" alt="Download for macOS" height="40">
</a> </a>
</p> </p>
@@ -60,10 +64,16 @@ Speech is transcribed on-device by default. Polish sends **text only** — the t
## Get the app ## Get the app
**App Store (recommended)** **iPhone / iPad (App Store)**
<a href="https://apps.apple.com/app/osgkeyboard/id6781553267"> <a href="https://apps.apple.com/app/osgkeyboard/id6781553267">
<img src="docs/assets/badges/appstore-en.svg" alt="Download on the App Store" height="40"> <img src="docs/assets/badges/appstore-en.svg" alt="Download for iPhone and iPad" height="40">
</a>
**Mac (Developer ID signed and notarized)**
<a href="https://github.com/hkgood/OSGKeyboard/releases/download/v1.1-mac/OSGKeyboard-1.1.dmg">
<img src="docs/assets/badges/macos-en.svg" alt="Download for macOS" height="40">
</a> </a>
## Build from source ## Build from source
+13 -3
View File
@@ -14,7 +14,11 @@
<p align="center"> <p align="center">
<a href="https://apps.apple.com/cn/app/osgkeyboard/id6781553267"> <a href="https://apps.apple.com/cn/app/osgkeyboard/id6781553267">
<img src="docs/assets/badges/appstore-zh.svg" alt="在 App Store 下载" height="40"> <img src="docs/assets/badges/appstore-zh.svg" alt="下载 iPhone / iPad 版" height="40">
</a>
&nbsp;
<a href="https://github.com/hkgood/OSGKeyboard/releases/download/v1.1-mac/OSGKeyboard-1.1.dmg">
<img src="docs/assets/badges/macos-zh.svg" alt="直接下载 macOS 版" height="40">
</a> </a>
</p> </p>
@@ -65,10 +69,16 @@
## 获取 ## 获取
**App Store(推荐** **iPhone / iPadApp Store**
<a href="https://apps.apple.com/cn/app/osgkeyboard/id6781553267"> <a href="https://apps.apple.com/cn/app/osgkeyboard/id6781553267">
<img src="docs/assets/badges/appstore-zh.svg" alt="在 App Store 下载" height="40"> <img src="docs/assets/badges/appstore-zh.svg" alt="下载 iPhone / iPad 版" height="40">
</a>
**MacDeveloper ID 签名并公证)**
<a href="https://github.com/hkgood/OSGKeyboard/releases/download/v1.1-mac/OSGKeyboard-1.1.dmg">
<img src="docs/assets/badges/macos-zh.svg" alt="直接下载 macOS 版" height="40">
</a> </a>
**从源码构建**(需 macOS + Xcode 26): **从源码构建**(需 macOS + Xcode 26):
+11
View File
@@ -0,0 +1,11 @@
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="40" viewBox="0 0 128 40" role="img" aria-labelledby="title">
<title id="title">Download for macOS</title>
<rect width="128" height="40" rx="7" fill="#000"/>
<rect x=".75" y=".75" width="126.5" height="38.5" rx="6.25" fill="none" stroke="#a6a6a6" stroke-width="1.5"/>
<g fill="none" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7">
<rect x="10.5" y="8.5" width="22" height="15.5" rx="2"/>
<path d="M17.5 29.5h8M21.5 24v5.5M17.5 20.5h8"/>
</g>
<text x="40" y="14" fill="#fff" font-family="-apple-system, BlinkMacSystemFont, sans-serif" font-size="6.6">DIRECT DOWNLOAD</text>
<text x="40" y="29" fill="#fff" font-family="-apple-system, BlinkMacSystemFont, sans-serif" font-size="16" font-weight="600">macOS</text>
</svg>

After

Width:  |  Height:  |  Size: 832 B

+11
View File
@@ -0,0 +1,11 @@
<svg xmlns="http://www.w3.org/2000/svg" width="120" height="40" viewBox="0 0 120 40" role="img" aria-labelledby="title">
<title id="title">&#30452;&#25509;&#19979;&#36733; macOS &#29256;</title>
<rect width="120" height="40" rx="7" fill="#000"/>
<rect x=".75" y=".75" width="118.5" height="38.5" rx="6.25" fill="none" stroke="#a6a6a6" stroke-width="1.5"/>
<g fill="none" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7">
<rect x="10.5" y="8.5" width="22" height="15.5" rx="2"/>
<path d="M17.5 29.5h8M21.5 24v5.5M17.5 20.5h8"/>
</g>
<text x="40" y="14" fill="#fff" font-family="-apple-system, BlinkMacSystemFont, sans-serif" font-size="7.2">&#30452;&#25509;&#19979;&#36733;</text>
<text x="40" y="29" fill="#fff" font-family="-apple-system, BlinkMacSystemFont, sans-serif" font-size="15.5" font-weight="600">macOS &#29256;</text>
</svg>

After

Width:  |  Height:  |  Size: 889 B

+6 -163
View File
@@ -3,170 +3,13 @@
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<title>OSGKeyboard vs Typeless vs Superwhisper · 开源听写对比</title> <title>Redirecting · OSGKeyboard</title>
<meta name="description" content="对比 OSGKeyboard、Typeless、Superwhisper、Openless:开源、价格、本地识别、BYOK、iPhone/iPad/Mac 支持。寻找 Typeless 或 Superwhisper 平替?看这篇。"> <meta name="robots" content="noindex">
<meta name="keywords" content="Typeless 替代, Superwhisper 替代, 开源听写, OSGKeyboard 对比, BYOK 语音输入, 免费语音键盘"> <link rel="canonical" href="https://hkgood.github.io/OSGKeyboard/#vs">
<meta name="robots" content="index, follow"> <meta http-equiv="refresh" content="0; url=../#vs">
<link rel="canonical" href="https://hkgood.github.io/OSGKeyboard/compare/"> <script>location.replace("../#vs");</script>
<link rel="icon" href="../assets/app-icon.png" type="image/png">
<meta property="og:title" content="OSGKeyboard vs Typeless vs Superwhisper">
<meta property="og:description" content="开源、本地免费、BYOK、跨 iPhone 与 Mac —— 和常见听写工具怎么比。">
<meta property="og:url" content="https://hkgood.github.io/OSGKeyboard/compare/">
<meta property="og:image" content="https://hkgood.github.io/OSGKeyboard/assets/app-icon.png">
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "OSGKeyboard vs Typeless vs Superwhisper vs Openless",
"description": "Comparison of open-source status, pricing, on-device ASR, BYOK, and device coverage for popular dictation tools.",
"author": { "@type": "Organization", "name": "OSGKeyboard" },
"dateModified": "2026-07-29",
"mainEntityOfPage": "https://hkgood.github.io/OSGKeyboard/compare/"
}
</script>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Outfit:wght@400;500;600;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="../assets/site-pages.css">
<style>
.table-scroll { overflow-x: auto; -webkit-overflow-scrolling: touch; }
table { min-width: 640px; }
</style>
</head> </head>
<body> <body>
<header class="nav"> <p><a href="../#vs">OSGKeyboard — compare</a></p>
<div class="nav-inner">
<a class="brand" href="../">
<img src="../assets/app-icon.png" alt="" width="28" height="28">
OSGKeyboard
</a>
<nav class="nav-links" aria-label="主导航">
<a href="../">首页</a>
<a href="../install/">安装</a>
<a href="../en/">EN</a>
</nav>
</div>
</header>
<main>
<div class="wrap">
<p class="lang-switch"><a href="#zh">中文</a><a href="#en">English</a></p>
<section id="zh">
<p class="eyebrow">产品对比</p>
<h1>OSGKeyboard 和常见听写工具比什么?</h1>
<p class="lead">如果你在找 <strong>Typeless 替代</strong><strong>Superwhisper 平替</strong>,或想要「本地免费 + 自带 Key 润色」的开源方案,下面按维度对照。</p>
<a class="store-badge" href="https://apps.apple.com/cn/app/osgkeyboard/id6781553267" rel="noopener">
<img src="../assets/badges/appstore-zh.svg" width="109" height="40" alt="在 App Store 下载">
</a>
<div class="table-scroll">
<table>
<thead>
<tr>
<th>维度</th>
<th>Typeless</th>
<th>Superwhisper</th>
<th>Openless</th>
<th>OSGKeyboard</th>
</tr>
</thead>
<tbody>
<tr><td>开源</td><td></td><td></td><td></td><td></td></tr>
<tr><td>付费</td><td>免费额度有限;Pro 订阅不便宜</td><td>免费档有限;Pro / 买断</td><td>App 免费;按 Key 计费</td><td>本地完全免费;云端 Key 自付</td></tr>
<tr><td>可本地识别</td><td></td><td></td><td></td><td></td></tr>
<tr><td>BYOK</td><td></td><td>部分(Pro</td><td></td><td></td></tr>
<tr><td>Mac</td><td></td><td></td><td></td><td></td></tr>
<tr><td>iPhone / iPad</td><td></td><td></td><td></td><td></td></tr>
<tr><td>Windows</td><td></td><td></td><td></td><td></td></tr>
</tbody>
</table>
</div>
<p class="note">价格与功能据各产品公开说明整理,可能更新,以官方为准。</p>
<h2>什么时候选 OSGKeyboard</h2>
<ul>
<li>不想再开一份「听写订阅」,已有 DeepSeek / OpenAI 等额度</li>
<li>默认希望录音留在设备上,隐私路径可审计(开源)</li>
<li>同时需要 <strong>iPhone 键盘</strong><strong>Mac 全局听写</strong></li>
<li>接受源码可见许可(个人学习 / 非商用本地使用;商用需授权)</li>
</ul>
<h2>什么时候可能不适合</h2>
<ul>
<li>需要 Windows 客户端</li>
<li>希望完全托管、零配置云端识别(闭源 SaaS 更省心)</li>
<li>商用分发但未取得商业许可</li>
</ul>
<div class="cta-row">
<a class="btn btn-primary" href="../install/">查看安装步骤</a>
<a class="btn" href="../">返回官网</a>
</div>
</section>
<hr style="border:none;border-top:1px solid var(--line);margin:3rem 0">
<section id="en">
<p class="eyebrow">Compare</p>
<h1>OSGKeyboard vs Typeless, Superwhisper, Openless</h1>
<p class="lead">Looking for a <strong>Typeless alternative</strong> or <strong>Superwhisper alternative</strong> that is open, free locally, and BYOK-friendly? Here is a straight comparison.</p>
<a class="store-badge" href="https://apps.apple.com/app/osgkeyboard/id6781553267" rel="noopener">
<img src="../assets/badges/appstore-en.svg" width="120" height="40" alt="Download on the App Store">
</a>
<div class="table-scroll">
<table>
<thead>
<tr>
<th></th>
<th>Typeless</th>
<th>Superwhisper</th>
<th>Openless</th>
<th>OSGKeyboard</th>
</tr>
</thead>
<tbody>
<tr><td>Open source</td><td></td><td></td><td></td><td></td></tr>
<tr><td>Pricing</td><td>Limited free tier; Pro subscription</td><td>Limited free; Pro / lifetime</td><td>Free app; billed to your key</td><td>Local free; cloud on your key</td></tr>
<tr><td>On-device ASR</td><td></td><td></td><td></td><td></td></tr>
<tr><td>BYOK</td><td></td><td>Partial (Pro)</td><td></td><td></td></tr>
<tr><td>Mac</td><td></td><td></td><td></td><td></td></tr>
<tr><td>iPhone / iPad</td><td></td><td></td><td></td><td></td></tr>
<tr><td>Windows</td><td></td><td></td><td></td><td></td></tr>
</tbody>
</table>
</div>
<p class="note">Features and prices from public pages; verify with each vendor.</p>
<h2>Choose OSGKeyboard when you want</h2>
<ul>
<li>No second dictation subscription — reuse LLM credits you already buy</li>
<li>On-device audio by default and auditable source</li>
<li>Both an <strong>iOS keyboard</strong> and <strong>Mac global hotkey</strong></li>
</ul>
<h2>Maybe not if you need</h2>
<ul>
<li>Windows</li>
<li>Fully managed cloud ASR with zero setup</li>
<li>Commercial redistribution without a license</li>
</ul>
</section>
</div>
</main>
<footer>
<div class="footer-inner">
<span>© OSGKeyboard</span>
<span class="footer-links">
<a href="../install/">Install</a>
<a href="../privacy/">Privacy</a>
<a href="https://github.com/hkgood/OSGKeyboard" rel="noopener">GitHub</a>
</span>
</div>
</footer>
</body> </body>
</html> </html>
+6 -121
View File
@@ -3,128 +3,13 @@
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<title>OSGKeyboard — Free Open-Source Voice Keyboard for iPhone, iPad &amp; Mac</title> <title>Redirecting · OSGKeyboard</title>
<meta name="description" content="OSGKeyboard is a free open-source voice dictation keyboard for iPhone, iPad, and Mac. On-device speech recognition by default, BYOK AI polish, personal dictionary. Speak it — it's typed."> <meta name="robots" content="noindex">
<meta name="keywords" content="OSGKeyboard, voice keyboard, dictation app, open source dictation, on-device ASR, BYOK, Typeless alternative, Superwhisper alternative, Mac Option dictation, iOS custom keyboard"> <link rel="canonical" href="https://hkgood.github.io/OSGKeyboard/?lang=en">
<meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1"> <meta http-equiv="refresh" content="0; url=../?lang=en">
<meta name="author" content="OSGKeyboard"> <script>location.replace("../?lang=en");</script>
<link rel="canonical" href="https://hkgood.github.io/OSGKeyboard/en/">
<link rel="alternate" hreflang="en" href="https://hkgood.github.io/OSGKeyboard/en/">
<link rel="alternate" hreflang="zh-Hans" href="https://hkgood.github.io/OSGKeyboard/">
<link rel="alternate" hreflang="x-default" href="https://hkgood.github.io/OSGKeyboard/">
<link rel="icon" href="../assets/app-icon.png" type="image/png">
<meta property="og:type" content="website">
<meta property="og:site_name" content="OSGKeyboard">
<meta property="og:locale" content="en_US">
<meta property="og:title" content="OSGKeyboard — Speak it. It's typed.">
<meta property="og:description" content="Free open-source voice input for iPhone, iPad, and Mac. On-device by default. BYOK AI polish — no double subscription.">
<meta property="og:url" content="https://hkgood.github.io/OSGKeyboard/en/">
<meta property="og:image" content="https://hkgood.github.io/OSGKeyboard/assets/screenshots/en/dark/mac-dashboard.png">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="OSGKeyboard — Speak it. It's typed.">
<meta name="twitter:description" content="Free open-source voice keyboard for Apple devices. Local ASR + BYOK polish.">
<meta name="twitter:image" content="https://hkgood.github.io/OSGKeyboard/assets/screenshots/en/dark/mac-dashboard.png">
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "SoftwareApplication",
"name": "OSGKeyboard",
"operatingSystem": "iOS 26+, iPadOS 26+, macOS 26+",
"applicationCategory": "UtilitiesApplication",
"url": "https://hkgood.github.io/OSGKeyboard/en/",
"downloadUrl": "https://apps.apple.com/app/osgkeyboard/id6781553267",
"image": "https://hkgood.github.io/OSGKeyboard/assets/app-icon.png",
"description": "Free open-source voice input for iPhone, iPad, and Mac with on-device recognition and BYOK AI polish.",
"isAccessibleForFree": true,
"offers": { "@type": "Offer", "price": "0", "priceCurrency": "USD" },
"sameAs": ["https://github.com/hkgood/OSGKeyboard", "https://apps.apple.com/app/osgkeyboard/id6781553267"]
}
</script>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Outfit:wght@400;500;600;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="../assets/site-pages.css">
<style>
:root { --max: 720px; }
.hero-shot { width: 100%; border-radius: 16px; border: 1px solid var(--line); margin: 1.5rem 0; }
.grid { display: grid; gap: 0.85rem; margin: 1.25rem 0; }
@media (min-width: 640px) { .grid { grid-template-columns: 1fr 1fr; } }
</style>
</head> </head>
<body> <body>
<header class="nav"> <p><a href="../?lang=en">OSGKeyboard</a></p>
<div class="nav-inner">
<a class="brand" href="./">
<img src="../assets/app-icon.png" alt="" width="28" height="28">
OSGKeyboard
</a>
<nav class="nav-links" aria-label="Primary">
<a href="../">中文</a>
<a href="../install/">Install</a>
<a href="../compare/">Compare</a>
<a href="../mac-dictation/">Mac</a>
<a href="https://github.com/hkgood/OSGKeyboard" rel="noopener">GitHub</a>
</nav>
</div>
</header>
<main>
<div class="wrap">
<p class="eyebrow">Free · Open · Cross-platform</p>
<h1>Speak it. It's typed.</h1>
<p class="lead">OSGKeyboard is a free, open-source voice keyboard for iPhone, iPad, and Mac. Dictate in any app; on-device recognition stays private by default. Bring your own API key for AI polish — skip another dictation subscription.</p>
<a class="store-badge" href="https://apps.apple.com/app/osgkeyboard/id6781553267" rel="noopener">
<img src="../assets/badges/appstore-en.svg" width="120" height="40" alt="Download on the App Store">
</a>
<div class="cta-row">
<a class="btn" href="../install/">Installation guide</a>
<a class="btn" href="https://github.com/hkgood/OSGKeyboard" rel="noopener">View source</a>
</div>
<img class="hero-shot" src="../assets/hero-devices.png" width="1600" height="716" alt="OSGKeyboard on iPad, Mac, and iPhone" loading="eager">
<h2>Why people switch to OSGKeyboard</h2>
<div class="grid">
<div class="card"><strong>Works everywhere</strong><p>Messages, Notes, Notion, Cursor, Mail, WeChat — wherever the cursor is.</p></div>
<div class="card"><strong>On-device by default</strong><p>Local ASR on iOS; optional local models on Mac. Cloud only when you opt in.</p></div>
<div class="card"><strong>BYOK polish</strong><p>Use DeepSeek, OpenAI, Anthropic, OpenRouter, or any compatible endpoint.</p></div>
<div class="card"><strong>Phone + Mac</strong><p>Custom keyboard on iOS/iPadOS; hold Option for global Mac dictation.</p></div>
</div>
<h2>Who it is for</h2>
<ul>
<li>Users looking for a <strong>Typeless</strong> or <strong>Superwhisper</strong> alternative without another subscription</li>
<li>People who want <strong>privacy-first dictation</strong> that does not upload audio by default</li>
<li>Developers and power users who already pay for LLM APIs and want BYOK</li>
<li>Anyone who needs the <strong>same voice workflow on iPhone and Mac</strong></li>
</ul>
<h2>Get started</h2>
<ol>
<li>Install from the <a href="https://apps.apple.com/app/osgkeyboard/id6781553267">App Store</a>.</li>
<li>On iOS: enable the keyboard and Full Access. On Mac: grant Microphone + Accessibility.</li>
<li>Speak — text lands at the cursor. Add an API key only if you want AI polish.</li>
</ol>
<p>Full steps: <a href="../install/">Install guide</a>. Feature deep-dive: <a href="../mac-dictation/">Mac global dictation</a>. Side-by-side: <a href="../compare/">Compare products</a>.</p>
<h2>Download</h2>
<a class="store-badge" href="https://apps.apple.com/app/osgkeyboard/id6781553267" rel="noopener">
<img src="../assets/badges/appstore-en.svg" width="120" height="40" alt="Download on the App Store">
</a>
</div>
</main>
<footer>
<div class="footer-inner">
<span>© OSGKeyboard · source available</span>
<span class="footer-links">
<a href="../privacy/">Privacy</a>
<a href="https://github.com/hkgood/OSGKeyboard" rel="noopener">GitHub</a>
<a href="../">中文站</a>
</span>
</div>
</footer>
</body> </body>
</html> </html>
+123 -59
View File
@@ -12,7 +12,7 @@
<meta name="theme-color" content="#f7f7f5" media="(prefers-color-scheme: light)"> <meta name="theme-color" content="#f7f7f5" media="(prefers-color-scheme: light)">
<link rel="canonical" href="https://hkgood.github.io/OSGKeyboard/"> <link rel="canonical" href="https://hkgood.github.io/OSGKeyboard/">
<link rel="alternate" hreflang="zh-Hans" href="https://hkgood.github.io/OSGKeyboard/"> <link rel="alternate" hreflang="zh-Hans" href="https://hkgood.github.io/OSGKeyboard/">
<link rel="alternate" hreflang="en" href="https://hkgood.github.io/OSGKeyboard/en/"> <link rel="alternate" hreflang="en" href="https://hkgood.github.io/OSGKeyboard/?lang=en">
<link rel="alternate" hreflang="x-default" href="https://hkgood.github.io/OSGKeyboard/"> <link rel="alternate" hreflang="x-default" href="https://hkgood.github.io/OSGKeyboard/">
<link rel="icon" href="assets/app-icon.png" type="image/png"> <link rel="icon" href="assets/app-icon.png" type="image/png">
<link rel="apple-touch-icon" href="assets/app-icon.png"> <link rel="apple-touch-icon" href="assets/app-icon.png">
@@ -121,7 +121,7 @@
"name": "和 Typeless、Superwhisper 有什么不同?", "name": "和 Typeless、Superwhisper 有什么不同?",
"acceptedAnswer": { "acceptedAnswer": {
"@type": "Answer", "@type": "Answer",
"text": "OSGKeyboard 开源、本地模式完全免费、支持 iPhone/iPad/Mac,并用 BYOK 接入你已有的 LLM 额度,避免再开一份听写订阅。见对比。" "text": "OSGKeyboard 开源、本地模式完全免费、支持 iPhone/iPad/Mac,并用 BYOK 接入你已有的 LLM 额度,避免再开一份听写订阅。见本页产品对比。"
} }
} }
] ]
@@ -329,9 +329,17 @@
.btn-ghost:hover { background: var(--bg-soft); } .btn-ghost:hover { background: var(--bg-soft); }
/* —— Hero —— */ /* —— Hero —— */
/* Hero stays on the dark beams stage in both light and dark site themes. */
.hero { .hero {
--hero-stage: #070b0a;
--hero-ink: #f4f4f2;
--hero-muted: #a8a8b0;
--hero-faint: #6f6f78;
--hero-accent: #4cc46e;
--hero-line: rgba(255, 255, 255, 0.14);
position: relative; position: relative;
background: var(--hero-wash); background: var(--hero-stage);
color: var(--hero-ink);
padding: 4.5rem 0 2.5rem; padding: 4.5rem 0 2.5rem;
overflow: hidden; overflow: hidden;
isolation: isolate; isolation: isolate;
@@ -370,8 +378,8 @@
position: absolute; position: absolute;
inset: 0; inset: 0;
background: background:
linear-gradient(180deg, transparent 58%, var(--hero-wash) 96%), linear-gradient(180deg, transparent 58%, var(--hero-stage) 96%),
radial-gradient(ellipse 90% 60% at 50% -8%, transparent 40%, color-mix(in srgb, var(--hero-wash) 55%, transparent) 100%); radial-gradient(ellipse 90% 60% at 50% -8%, transparent 40%, color-mix(in srgb, var(--hero-stage) 55%, transparent) 100%);
opacity: 0.72; opacity: 0.72;
pointer-events: none; pointer-events: none;
} }
@@ -392,6 +400,7 @@
text-transform: uppercase; text-transform: uppercase;
color: var(--accent); color: var(--accent);
} }
.hero .eyebrow { color: var(--hero-accent); }
.eyebrow .material-symbols-outlined { font-size: 16px; } .eyebrow .material-symbols-outlined { font-size: 16px; }
h1 { h1 {
margin: 0 0 1rem; margin: 0 0 1rem;
@@ -406,6 +415,7 @@
font-size: 1.12rem; font-size: 1.12rem;
color: var(--text-2); color: var(--text-2);
} }
.hero .lead { color: var(--hero-muted); }
.hero-cta { .hero-cta {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
@@ -414,6 +424,13 @@
gap: 0.7rem; gap: 0.7rem;
margin-bottom: 1.4rem; margin-bottom: 1.4rem;
} }
.hero .btn-ghost {
border-color: var(--hero-line);
color: var(--hero-ink);
}
.hero .btn-ghost:hover {
background: rgba(255, 255, 255, 0.06);
}
.store-badge { .store-badge {
display: inline-flex; display: inline-flex;
line-height: 0; line-height: 0;
@@ -426,11 +443,31 @@
width: auto; width: auto;
display: block; display: block;
} }
.platform-download {
display: inline-flex;
flex-direction: column;
align-items: center;
gap: 0.35rem;
}
.platform-label {
color: var(--text-2);
font-size: 0.72rem;
font-weight: 600;
letter-spacing: 0.02em;
}
.hero .platform-label { color: var(--hero-muted); }
.platform-downloads {
display: flex;
flex-wrap: wrap;
align-items: flex-end;
justify-content: center;
gap: 1rem;
}
.download-block { .download-block {
text-align: center; text-align: center;
padding: 3.5rem 0 1rem; padding: 3.5rem 0 1rem;
} }
.download-block .store-badge { margin: 0.4rem 0 1rem; } .download-block .platform-downloads { margin: 0.4rem 0 1rem; }
.download-block .store-badge img { height: 52px; } .download-block .store-badge img { height: 52px; }
.faq-list { .faq-list {
max-width: 720px; max-width: 720px;
@@ -479,12 +516,14 @@
font-size: 0.86rem; font-size: 0.86rem;
color: var(--text-3); color: var(--text-3);
} }
.hero .hero-meta { color: var(--hero-faint); }
.hero-meta span { .hero-meta span {
display: inline-flex; display: inline-flex;
align-items: center; align-items: center;
gap: 0.3rem; gap: 0.3rem;
} }
.hero-meta .material-symbols-outlined { font-size: 16px; color: var(--accent); } .hero-meta .material-symbols-outlined { font-size: 16px; color: var(--accent); }
.hero .hero-meta .material-symbols-outlined { color: var(--hero-accent); }
/* Marketing device-family composite (replaces CSS mockup frames). */ /* Marketing device-family composite (replaces CSS mockup frames). */
.hero-stage { .hero-stage {
@@ -880,8 +919,6 @@
<button type="button" class="icon-btn" id="themeToggle" aria-label="Toggle theme"> <button type="button" class="icon-btn" id="themeToggle" aria-label="Toggle theme">
<span class="material-symbols-outlined" data-theme-icon>contrast</span> <span class="material-symbols-outlined" data-theme-icon>contrast</span>
</button> </button>
<a class="nav-link-text" href="install/" data-i18n="nav.install">安装</a>
<a class="nav-link-text" href="compare/" data-i18n="nav.compare">对比</a>
<a class="nav-link" href="https://github.com/hkgood/OSGKeyboard" rel="noopener"> <a class="nav-link" href="https://github.com/hkgood/OSGKeyboard" rel="noopener">
<span class="material-symbols-outlined" aria-hidden="true">code</span> <span class="material-symbols-outlined" aria-hidden="true">code</span>
<span data-i18n="nav.github">GitHub</span> <span data-i18n="nav.github">GitHub</span>
@@ -906,9 +943,18 @@
<h1 data-i18n="hero.title">开口即文字</h1> <h1 data-i18n="hero.title">开口即文字</h1>
<p class="lead" data-i18n="hero.lead">免费开源的跨端语音输入。本地识别,自带 API Key 润色,避免重复订阅。iPhone、iPad、Mac — 说完即落字。</p> <p class="lead" data-i18n="hero.lead">免费开源的跨端语音输入。本地识别,自带 API Key 润色,避免重复订阅。iPhone、iPad、Mac — 说完即落字。</p>
<div class="hero-cta"> <div class="hero-cta">
<a class="store-badge" id="heroStoreBadge" href="https://apps.apple.com/cn/app/osgkeyboard/id6781553267" rel="noopener" aria-label="Download on the App Store"> <div class="platform-download">
<img id="heroStoreBadgeImg" src="assets/badges/appstore-zh.svg" width="109" height="40" alt="在 App Store 下载"> <span class="platform-label" data-i18n="download.ios">iPhone / iPad</span>
</a> <a class="store-badge" id="heroStoreBadge" href="https://apps.apple.com/cn/app/osgkeyboard/id6781553267" rel="noopener" aria-label="Download for iPhone and iPad">
<img id="heroStoreBadgeImg" src="assets/badges/appstore-zh.svg" width="109" height="40" alt="下载 iPhone / iPad 版">
</a>
</div>
<div class="platform-download">
<span class="platform-label" data-i18n="download.mac">Mac</span>
<a class="store-badge" href="https://github.com/hkgood/OSGKeyboard/releases/download/v1.1-mac/OSGKeyboard-1.1.dmg" rel="noopener" aria-label="Download for macOS">
<img class="macos-badge-img" src="assets/badges/macos-zh.svg" width="120" height="40" alt="直接下载 macOS 版">
</a>
</div>
<a class="btn btn-ghost" href="https://github.com/hkgood/OSGKeyboard" rel="noopener"> <a class="btn btn-ghost" href="https://github.com/hkgood/OSGKeyboard" rel="noopener">
<span class="material-symbols-outlined" aria-hidden="true">terminal</span> <span class="material-symbols-outlined" aria-hidden="true">terminal</span>
<span data-i18n="hero.cta.secondary">查看源码</span> <span data-i18n="hero.cta.secondary">查看源码</span>
@@ -1214,14 +1260,13 @@
</article> </article>
<article class="faq-item reveal"> <article class="faq-item reveal">
<h3 data-i18n="faq.4.q">和 Typeless、Superwhisper 有什么不同?</h3> <h3 data-i18n="faq.4.q">和 Typeless、Superwhisper 有什么不同?</h3>
<p data-i18n="faq.4.a">开源、本地免费、手机+Mac 都有,并用 BYOK 复用已有 LLM 额度。见对比</p> <p data-i18n="faq.4.a">开源、本地免费、手机+Mac 都有,并用 BYOK 复用已有 LLM 额度。见上方对比</p>
</article> </article>
</div> </div>
<div class="resource-links reveal"> <div class="resource-links reveal">
<a href="install/" data-i18n="faq.link.install">安装指南</a> <a href="#start" data-i18n="faq.link.install">安装三步</a>
<a href="compare/" data-i18n="faq.link.compare">产品对比 →</a> <a href="#vs" data-i18n="faq.link.compare">产品对比 →</a>
<a href="mac-dictation/" data-i18n="faq.link.mac">Mac 全局听写</a> <a href="#download" data-i18n="faq.link.download">立即下载</a>
<a href="en/" data-i18n="faq.link.en">English site →</a>
</div> </div>
</div> </div>
</section> </section>
@@ -1231,13 +1276,24 @@
<div class="wrap reveal"> <div class="wrap reveal">
<div class="block-head"> <div class="block-head">
<h2 data-i18n="download.title">立即下载</h2> <h2 data-i18n="download.title">立即下载</h2>
<p data-i18n="download.subtitle">App Store 一键安装;也可从源码自行构建</p> <p data-i18n="download.subtitle">iPhone / iPad 从 App Store 安装;Mac 直接下载已签名并公证的 DMG</p>
</div>
<div class="platform-downloads">
<div class="platform-download">
<span class="platform-label" data-i18n="download.ios">iPhone / iPad</span>
<a class="store-badge" id="footerStoreBadge" href="https://apps.apple.com/cn/app/osgkeyboard/id6781553267" rel="noopener" aria-label="Download for iPhone and iPad">
<img id="footerStoreBadgeImg" src="assets/badges/appstore-zh.svg" width="109" height="40" alt="下载 iPhone / iPad 版">
</a>
</div>
<div class="platform-download">
<span class="platform-label" data-i18n="download.mac">Mac</span>
<a class="store-badge" href="https://github.com/hkgood/OSGKeyboard/releases/download/v1.1-mac/OSGKeyboard-1.1.dmg" rel="noopener" aria-label="Download for macOS">
<img class="macos-badge-img" src="assets/badges/macos-zh.svg" width="120" height="40" alt="直接下载 macOS 版">
</a>
</div>
</div> </div>
<a class="store-badge" id="footerStoreBadge" href="https://apps.apple.com/cn/app/osgkeyboard/id6781553267" rel="noopener" aria-label="Download on the App Store">
<img id="footerStoreBadgeImg" src="assets/badges/appstore-zh.svg" width="109" height="40" alt="在 App Store 下载">
</a>
<div class="hero-cta" style="margin-bottom:0"> <div class="hero-cta" style="margin-bottom:0">
<a class="btn btn-ghost" href="install/" data-i18n="download.install">查看安装步骤</a> <a class="btn btn-ghost" href="#start" data-i18n="download.install">查看安装步骤</a>
<a class="btn btn-ghost" href="https://github.com/hkgood/OSGKeyboard" rel="noopener" data-i18n="download.source">GitHub 源码</a> <a class="btn btn-ghost" href="https://github.com/hkgood/OSGKeyboard" rel="noopener" data-i18n="download.source">GitHub 源码</a>
</div> </div>
</div> </div>
@@ -1250,8 +1306,8 @@
<span data-i18n="footer.copy">© OSGKeyboard · v0.5.4 · 源码可见</span> <span data-i18n="footer.copy">© OSGKeyboard · v0.5.4 · 源码可见</span>
<span class="footer-links"> <span class="footer-links">
<a href="#download" data-i18n="footer.download">Download</a> <a href="#download" data-i18n="footer.download">Download</a>
<a href="install/" data-i18n="footer.install">Install</a> <a href="#start" data-i18n="footer.install">Install</a>
<a href="compare/" data-i18n="footer.compare">Compare</a> <a href="#vs" data-i18n="footer.compare">Compare</a>
<a href="https://github.com/hkgood/OSGKeyboard" rel="noopener" data-i18n="footer.source">Source</a> <a href="https://github.com/hkgood/OSGKeyboard" rel="noopener" data-i18n="footer.source">Source</a>
<a href="privacy/" data-i18n="footer.privacy">Privacy</a> <a href="privacy/" data-i18n="footer.privacy">Privacy</a>
<a href="https://github.com/hkgood/OSGKeyboard/blob/main/LICENSE" rel="noopener" data-i18n="footer.license">License</a> <a href="https://github.com/hkgood/OSGKeyboard/blob/main/LICENSE" rel="noopener" data-i18n="footer.license">License</a>
@@ -1263,8 +1319,6 @@
const copy = { const copy = {
en: { en: {
"nav.github": "GitHub", "nav.github": "GitHub",
"nav.install": "Install",
"nav.compare": "Compare",
"hero.eyebrow": "Free · Open · Cross-platform", "hero.eyebrow": "Free · Open · Cross-platform",
"hero.title": "Speak it. It's typed.", "hero.title": "Speak it. It's typed.",
"hero.lead": "Free, open-source voice input across iPhone, iPad, and Mac. On-device recognition. Bring your own API key — no double-billing.", "hero.lead": "Free, open-source voice input across iPhone, iPad, and Mac. On-device recognition. Bring your own API key — no double-billing.",
@@ -1363,18 +1417,19 @@
"faq.3.q": "Which devices are supported?", "faq.3.q": "Which devices are supported?",
"faq.3.a": "iPhone / iPad custom keyboard, plus Mac menu-bar global dictation (hold Option). Requires iOS / iPadOS / macOS 26+.", "faq.3.a": "iPhone / iPad custom keyboard, plus Mac menu-bar global dictation (hold Option). Requires iOS / iPadOS / macOS 26+.",
"faq.4.q": "How is it different from Typeless or Superwhisper?", "faq.4.q": "How is it different from Typeless or Superwhisper?",
"faq.4.a": "Open source, free local mode, phone + Mac, and BYOK so you reuse LLM credits you already pay for. See the compare page.", "faq.4.a": "Open source, free local mode, phone + Mac, and BYOK so you reuse LLM credits you already pay for. See the comparison table above.",
"faq.link.install": "Install guide →", "faq.link.install": "Setup in 3 steps →",
"faq.link.compare": "Compare products →", "faq.link.compare": "Product comparison →",
"faq.link.mac": "Mac global dictation →", "faq.link.download": "Download now →",
"faq.link.en": "English site →",
"download.title": "Download now", "download.title": "Download now",
"download.subtitle": "Install from the App Store — or build from source.", "download.subtitle": "Get iPhone / iPad from the App Store, or download the signed and notarized DMG for Mac.",
"download.ios": "iPhone / iPad",
"download.mac": "Mac",
"download.install": "Installation steps", "download.install": "Installation steps",
"download.source": "GitHub source", "download.source": "GitHub source",
"footer.copy": "© OSGKeyboard · v0.5.4 · source available", "footer.copy": "© OSGKeyboard · v0.5.4 · source available",
"footer.download": "Download", "footer.download": "Download",
"footer.install": "Install", "footer.install": "Setup",
"footer.compare": "Compare", "footer.compare": "Compare",
"footer.source": "Source", "footer.source": "Source",
"footer.privacy": "Privacy", "footer.privacy": "Privacy",
@@ -1382,8 +1437,6 @@
}, },
zh: { zh: {
"nav.github": "GitHub", "nav.github": "GitHub",
"nav.install": "安装",
"nav.compare": "对比",
"hero.eyebrow": "免费 · 开源 · 跨端", "hero.eyebrow": "免费 · 开源 · 跨端",
"hero.title": "开口即文字", "hero.title": "开口即文字",
"hero.lead": "免费开源的跨端语音输入。本地识别,自带 API Key 润色,避免重复订阅。iPhone、iPad、Mac — 说完即落字。", "hero.lead": "免费开源的跨端语音输入。本地识别,自带 API Key 润色,避免重复订阅。iPhone、iPad、Mac — 说完即落字。",
@@ -1482,13 +1535,14 @@
"faq.3.q": "支持哪些设备?", "faq.3.q": "支持哪些设备?",
"faq.3.a": "iPhone / iPad 自定义键盘,以及 Mac 菜单栏全局听写(按住 Option)。需 iOS / iPadOS / macOS 26+。", "faq.3.a": "iPhone / iPad 自定义键盘,以及 Mac 菜单栏全局听写(按住 Option)。需 iOS / iPadOS / macOS 26+。",
"faq.4.q": "和 Typeless、Superwhisper 有什么不同?", "faq.4.q": "和 Typeless、Superwhisper 有什么不同?",
"faq.4.a": "开源、本地免费、手机+Mac 都有,并用 BYOK 复用已有 LLM 额度。见对比。", "faq.4.a": "开源、本地免费、手机+Mac 都有,并用 BYOK 复用已有 LLM 额度。见上方对比。",
"faq.link.install": "安装指南 →", "faq.link.install": "安装三步 →",
"faq.link.compare": "产品对比 →", "faq.link.compare": "产品对比 →",
"faq.link.mac": "Mac 全局听写 →", "faq.link.download": "立即下载 →",
"faq.link.en": "English site →",
"download.title": "立即下载", "download.title": "立即下载",
"download.subtitle": "App Store 一键安装;也可从源码自行构建。", "download.subtitle": "iPhone / iPad 从 App Store 安装;Mac 直接下载已签名并公证的 DMG。",
"download.ios": "iPhone / iPad",
"download.mac": "Mac",
"download.install": "查看安装步骤", "download.install": "查看安装步骤",
"download.source": "GitHub 源码", "download.source": "GitHub 源码",
"footer.copy": "© OSGKeyboard · v0.5.4 · 源码可见", "footer.copy": "© OSGKeyboard · v0.5.4 · 源码可见",
@@ -1505,12 +1559,16 @@
zh: { zh: {
href: "https://apps.apple.com/cn/app/osgkeyboard/id6781553267", href: "https://apps.apple.com/cn/app/osgkeyboard/id6781553267",
src: "assets/badges/appstore-zh.svg", src: "assets/badges/appstore-zh.svg",
alt: "在 App Store 下载" alt: "下载 iPhone / iPad 版",
macSrc: "assets/badges/macos-zh.svg",
macAlt: "直接下载 macOS 版"
}, },
en: { en: {
href: "https://apps.apple.com/app/osgkeyboard/id6781553267", href: "https://apps.apple.com/app/osgkeyboard/id6781553267",
src: "assets/badges/appstore-en.svg", src: "assets/badges/appstore-en.svg",
alt: "Download on the App Store" alt: "Download for iPhone and iPad",
macSrc: "assets/badges/macos-en.svg",
macAlt: "Download for macOS"
} }
}; };
@@ -1526,6 +1584,10 @@
img.setAttribute("src", cfg.src); img.setAttribute("src", cfg.src);
img.setAttribute("alt", cfg.alt); img.setAttribute("alt", cfg.alt);
}); });
document.querySelectorAll(".macos-badge-img").forEach((img) => {
img.setAttribute("src", cfg.macSrc);
img.setAttribute("alt", cfg.macAlt);
});
} }
function applyLang(lang) { function applyLang(lang) {
@@ -1577,7 +1639,7 @@
}); });
} }
// React Bitsstyle Beams (vanilla Three.js), preset from shared demo URL // Beams stay on the dark palette regardless of site theme.
const beamsHero = (() => { const beamsHero = (() => {
const wrap = document.getElementById("heroAurora"); const wrap = document.getElementById("heroAurora");
const canvas = document.getElementById("heroAuroraCanvas"); const canvas = document.getElementById("heroAuroraCanvas");
@@ -1585,26 +1647,22 @@
const reduceMotion = window.matchMedia("(prefers-reduced-motion: reduce)").matches; const reduceMotion = window.matchMedia("(prefers-reduced-motion: reduce)").matches;
const isMobile = window.matchMedia("(max-width: 720px)").matches; const isMobile = window.matchMedia("(max-width: 720px)").matches;
const palettes = { const palette = { light: "#7CFFB2", bg: "#000000" };
dark: { light: "#7CFFB2", bg: "#000000" },
light: { light: "#2f9a52", bg: "#0a1210" }
};
let instance = null; let instance = null;
let currentMode = ""; let ready = false;
function destroy() { function destroy() {
if (!instance) return; if (!instance) return;
try { instance.destroy(); } catch (_) {} try { instance.destroy(); } catch (_) {}
instance = null; instance = null;
ready = false;
} }
function create(mode) { function create() {
if (typeof window.OSGBeamsHero?.create !== "function" || typeof window.THREE === "undefined") { if (typeof window.OSGBeamsHero?.create !== "function" || typeof window.THREE === "undefined") {
return false; return false;
} }
currentMode = mode;
const palette = palettes[mode] || palettes.dark;
canvas.style.width = "100%"; canvas.style.width = "100%";
canvas.style.height = "100%"; canvas.style.height = "100%";
try { try {
@@ -1623,6 +1681,7 @@
heightSegments: isMobile ? 64 : 100 heightSegments: isMobile ? 64 : 100
}); });
wrap.classList.add("is-ready"); wrap.classList.add("is-ready");
ready = true;
return true; return true;
} catch (err) { } catch (err) {
console.warn("[beams]", err); console.warn("[beams]", err);
@@ -1631,19 +1690,17 @@
} }
} }
function setPalette(mode) { function setPalette() {
const next = mode === "light" ? "light" : "dark"; if (ready && instance) {
if (next === currentMode && instance) {
const palette = palettes[next];
instance.setLightColor(palette.light); instance.setLightColor(palette.light);
instance.setBackground(palette.bg); instance.setBackground(palette.bg);
return; return;
} }
create(next); create();
} }
function boot() { function boot() {
const ok = create(resolvedTheme()); const ok = create();
if (!ok) return; if (!ok) return;
const io = new IntersectionObserver((entries) => { const io = new IntersectionObserver((entries) => {
@@ -1675,7 +1732,8 @@
} }
try { localStorage.setItem("osg-theme", theme); } catch (_) {} try { localStorage.setItem("osg-theme", theme); } catch (_) {}
applyShots(); applyShots();
beamsHero.setPalette(resolvedTheme()); // Hero beams intentionally ignore theme — keep dark stage.
beamsHero.setPalette();
} }
function cycleTheme() { function cycleTheme() {
@@ -1739,16 +1797,22 @@
}); });
})(); })();
const urlLang = (() => {
try {
const q = new URLSearchParams(window.location.search).get("lang");
if (q === "en" || q === "zh") return q;
} catch (_) {}
return null;
})();
const savedLang = (() => { try { return localStorage.getItem("osg-lang"); } catch (_) { return null; } })(); const savedLang = (() => { try { return localStorage.getItem("osg-lang"); } catch (_) { return null; } })();
const savedTheme = (() => { try { return localStorage.getItem("osg-theme"); } catch (_) { return null; } })(); const savedTheme = (() => { try { return localStorage.getItem("osg-theme"); } catch (_) { return null; } })();
applyLang(savedLang || ((navigator.language || "").startsWith("zh") ? "zh" : "en")); applyLang(urlLang || savedLang || ((navigator.language || "").startsWith("zh") ? "zh" : "en"));
applyTheme(savedTheme || "system"); applyTheme(savedTheme || "system");
try { try {
window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", () => { window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", () => {
if ((document.documentElement.getAttribute("data-theme") || "system") === "system") { if ((document.documentElement.getAttribute("data-theme") || "system") === "system") {
applyShots(); applyShots();
beamsHero.setPalette(resolvedTheme());
} }
}); });
} catch (_) {} } catch (_) {}
+6 -147
View File
@@ -3,154 +3,13 @@
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<title>安装指南 · OSGKeyboard iOS / Mac 语音输入设置</title> <title>Redirecting · OSGKeyboard</title>
<meta name="description" content="OSGKeyboard 安装与授权步骤:iPhone / iPad 添加自定义键盘并开启完全访问;Mac 授予麦克风与辅助功能。约两分钟开口即用。"> <meta name="robots" content="noindex">
<meta name="robots" content="index, follow"> <link rel="canonical" href="https://hkgood.github.io/OSGKeyboard/#start">
<link rel="canonical" href="https://hkgood.github.io/OSGKeyboard/install/"> <meta http-equiv="refresh" content="0; url=../#start">
<link rel="alternate" hreflang="zh-Hans" href="https://hkgood.github.io/OSGKeyboard/install/"> <script>location.replace("../#start");</script>
<link rel="alternate" hreflang="en" href="https://hkgood.github.io/OSGKeyboard/install/#en">
<link rel="icon" href="../assets/app-icon.png" type="image/png">
<meta property="og:title" content="OSGKeyboard 安装指南">
<meta property="og:description" content="iOS 键盘与 Mac 全局听写的安装、权限与首次开口步骤。">
<meta property="og:url" content="https://hkgood.github.io/OSGKeyboard/install/">
<meta property="og:image" content="https://hkgood.github.io/OSGKeyboard/assets/app-icon.png">
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "HowTo",
"name": "Install OSGKeyboard on iPhone, iPad, and Mac",
"description": "Enable the custom keyboard with Full Access on iOS, grant Microphone and Accessibility on Mac, then start dictating.",
"totalTime": "PT5M",
"tool": [{ "@type": "HowToTool", "name": "iPhone, iPad, or Mac" }],
"step": [
{ "@type": "HowToStep", "name": "Download", "text": "Install OSGKeyboard from the App Store." },
{ "@type": "HowToStep", "name": "Authorize iOS", "text": "Settings → Keyboard → enable OSGKeyboard and Full Access." },
{ "@type": "HowToStep", "name": "Authorize Mac", "text": "Grant Microphone and Accessibility when prompted." },
{ "@type": "HowToStep", "name": "Dictate", "text": "Switch to OSGKeyboard on iOS or hold Option on Mac." }
]
}
</script>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Outfit:wght@400;500;600;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="../assets/site-pages.css">
</head> </head>
<body> <body>
<header class="nav"> <p><a href="../#start">OSGKeyboard — setup</a></p>
<div class="nav-inner">
<a class="brand" href="../">
<img src="../assets/app-icon.png" alt="" width="28" height="28">
OSGKeyboard
</a>
<nav class="nav-links" aria-label="主导航">
<a href="../">首页</a>
<a href="../compare/">对比</a>
<a href="../mac-dictation/">Mac</a>
<a href="../en/">EN</a>
</nav>
</div>
</header>
<main>
<div class="wrap">
<p class="lang-switch"><a href="#zh">中文</a><a href="#en">English</a></p>
<section id="zh">
<p class="eyebrow">安装指南</p>
<h1>两分钟装好,开口即用</h1>
<p class="lead">从 App Store 安装后,完成键盘 / 权限授权即可。无需注册账号,本地识别开箱可用。</p>
<a class="store-badge" href="https://apps.apple.com/cn/app/osgkeyboard/id6781553267" rel="noopener">
<img src="../assets/badges/appstore-zh.svg" width="109" height="40" alt="在 App Store 下载">
</a>
<h2>1. 下载安装</h2>
<ol>
<li>在 App Store 搜索 <strong>OSGKeyboard</strong>,或点击上方徽章。</li>
<li>安装完成后打开主 App,按首次引导走完权限与引擎选择(约 2 分钟)。</li>
</ol>
<h2>2. iPhone / iPad:启用自定义键盘</h2>
<div class="card">
<ol>
<li>打开 <strong>设置 → 通用 → 键盘 → 键盘 → 添加新键盘…</strong></li>
<li>选择 <strong>OSGKeyboard</strong></li>
<li>点进该键盘,开启 <strong>允许完全访问</strong>(麦克风、共享 Keychain、与主 App 通信需要它;不会上传你的普通击键)。</li>
<li>在任意输入框长按 🌐,切换到 OSGKeyboard,点麦克风开口。</li>
</ol>
</div>
<h2>3. Mac:麦克风 + 辅助功能</h2>
<div class="card">
<ol>
<li>打开 OSGKeyboard Mac 应用,按提示授予 <strong>麦克风</strong><strong>辅助功能</strong></li>
<li>菜单栏出现图标后,在任意 App 把光标放好,<strong>按住 Option</strong> 说话,松手后文字插入。</li>
</ol>
<p class="note">详见 <a href="../mac-dictation/">Mac 全局听写说明</a></p>
</div>
<h2>4. 可选:API Key 润色</h2>
<p>默认本地识别即可落字。若要 AI 补标点与润色,在设置中填入你自己的 API KeyDeepSeek / OpenAI / Anthropic / OpenRouter 等兼容端点)。Key 存在本机 Keychain。</p>
<h2>常见问题</h2>
<div class="card">
<p><strong>键盘列表里没有 OSG</strong> 确认已「添加新键盘」,并重启主 App 后再试。</p>
<p><strong>点了麦克风没反应?</strong> 检查麦克风权限与「完全访问」是否开启。</p>
<p><strong>Mac 按 Option 无效?</strong> 到系统设置 → 隐私与安全性 → 辅助功能,确认 OSGKeyboard 已勾选。</p>
</div>
</section>
<hr style="border:none;border-top:1px solid var(--line);margin:3rem 0">
<section id="en">
<p class="eyebrow">Install guide</p>
<h1>Ready in a few minutes</h1>
<p class="lead">Install from the App Store, grant permissions once, then speak. No account required for local recognition.</p>
<a class="store-badge" href="https://apps.apple.com/app/osgkeyboard/id6781553267" rel="noopener">
<img src="../assets/badges/appstore-en.svg" width="120" height="40" alt="Download on the App Store">
</a>
<h2>1. Download</h2>
<ol>
<li>Get <strong>OSGKeyboard</strong> from the App Store (badge above).</li>
<li>Open the app and complete the first-run setup (~2 minutes).</li>
</ol>
<h2>2. iPhone / iPad: enable the keyboard</h2>
<div class="card">
<ol>
<li>Go to <strong>Settings → General → Keyboard → Keyboards → Add New Keyboard…</strong></li>
<li>Select <strong>OSGKeyboard</strong>.</li>
<li>Open it and enable <strong>Allow Full Access</strong> (needed for mic, shared Keychain, and host-app session — we do not exfiltrate ordinary keystrokes).</li>
<li>In any text field, long-press 🌐, switch to OSGKeyboard, tap the mic.</li>
</ol>
</div>
<h2>3. Mac: Microphone + Accessibility</h2>
<div class="card">
<ol>
<li>Launch the Mac app and grant <strong>Microphone</strong> and <strong>Accessibility</strong>.</li>
<li>With the menu-bar icon present, place the cursor in any app, <strong>hold Option</strong> to speak, release to insert.</li>
</ol>
<p class="note">More detail: <a href="../mac-dictation/">Mac global dictation</a>.</p>
</div>
<h2>4. Optional: API key polish</h2>
<p>Local ASR works without a key. Add your own LLM key only for AI punctuation and polish. Keys stay in Keychain on device.</p>
</section>
</div>
</main>
<footer>
<div class="footer-inner">
<span>© OSGKeyboard</span>
<span class="footer-links">
<a href="../">Home</a>
<a href="../privacy/">Privacy</a>
<a href="https://github.com/hkgood/OSGKeyboard" rel="noopener">GitHub</a>
</span>
</div>
</footer>
</body> </body>
</html> </html>
+4 -5
View File
@@ -36,11 +36,10 @@ OSGKeyboard is a custom keyboard (iOS/iPadOS) and menu-bar global dictation app
## Docs for humans and agents ## Docs for humans and agents
- Home (ZH): https://hkgood.github.io/OSGKeyboard/ - Home (ZH/EN toggle): https://hkgood.github.io/OSGKeyboard/
- Home (EN): https://hkgood.github.io/OSGKeyboard/en/ - Home (EN): https://hkgood.github.io/OSGKeyboard/?lang=en
- Install guide: https://hkgood.github.io/OSGKeyboard/install/ - Setup steps: https://hkgood.github.io/OSGKeyboard/#start
- Compare / alternatives: https://hkgood.github.io/OSGKeyboard/compare/ - Product comparison: https://hkgood.github.io/OSGKeyboard/#vs
- Mac global dictation: https://hkgood.github.io/OSGKeyboard/mac-dictation/
- Privacy policy: https://hkgood.github.io/OSGKeyboard/privacy/ - Privacy policy: https://hkgood.github.io/OSGKeyboard/privacy/
- GitHub README (ZH): https://github.com/hkgood/OSGKeyboard/blob/main/README.md - GitHub README (ZH): https://github.com/hkgood/OSGKeyboard/blob/main/README.md
- GitHub README (EN): https://github.com/hkgood/OSGKeyboard/blob/main/README.en.md - GitHub README (EN): https://github.com/hkgood/OSGKeyboard/blob/main/README.en.md
+6 -121
View File
@@ -3,128 +3,13 @@
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<title>Mac 全局听写 · OSGKeyboard Option 按住说话</title> <title>Redirecting · OSGKeyboard</title>
<meta name="description" content="OSGKeyboard Mac 全局听写:菜单栏常驻,按住 Option 开口,文字插入当前 App。本地识别可选,BYOK 润色,底部浮层实时反馈。"> <meta name="robots" content="noindex">
<meta name="keywords" content="Mac 听写, Mac 语音输入, Option 听写, 全局语音输入, OSGKeyboard Mac, 开源 Mac dictation"> <link rel="canonical" href="https://hkgood.github.io/OSGKeyboard/">
<meta name="robots" content="index, follow"> <meta http-equiv="refresh" content="0; url=../">
<link rel="canonical" href="https://hkgood.github.io/OSGKeyboard/mac-dictation/"> <script>location.replace("../");</script>
<link rel="icon" href="../assets/app-icon.png" type="image/png">
<meta property="og:title" content="Mac 全局听写 · OSGKeyboard">
<meta property="og:description" content="按住 Option,在任意 Mac App 开口落字。开源、可本地、BYOK。">
<meta property="og:url" content="https://hkgood.github.io/OSGKeyboard/mac-dictation/">
<meta property="og:image" content="https://hkgood.github.io/OSGKeyboard/assets/screenshots/zh/dark/mac-dashboard.png">
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "TechArticle",
"headline": "OSGKeyboard Mac global dictation — hold Option to speak",
"description": "Menu-bar Mac app with Option-hold global dictation, on-device ASR options, BYOK polish, and a floating live overlay.",
"author": { "@type": "Organization", "name": "OSGKeyboard" },
"dateModified": "2026-07-29"
}
</script>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Outfit:wght@400;500;600;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="../assets/site-pages.css">
</head> </head>
<body> <body>
<header class="nav"> <p><a href="../">OSGKeyboard</a></p>
<div class="nav-inner">
<a class="brand" href="../">
<img src="../assets/app-icon.png" alt="" width="28" height="28">
OSGKeyboard
</a>
<nav class="nav-links" aria-label="主导航">
<a href="../">首页</a>
<a href="../install/">安装</a>
<a href="../compare/">对比</a>
<a href="../en/">EN</a>
</nav>
</div>
</header>
<main>
<div class="wrap">
<p class="lang-switch"><a href="#zh">中文</a><a href="#en">English</a></p>
<section id="zh">
<p class="eyebrow">macOS</p>
<h1>Mac 全局听写:按住 Option,开口即字</h1>
<p class="lead">OSGKeyboard 在 Mac 上是菜单栏应用。光标在哪个 App,文字就落到哪——邮件、浏览器、IDE、备忘录都行。</p>
<a class="store-badge" href="https://apps.apple.com/cn/app/osgkeyboard/id6781553267" rel="noopener">
<img src="../assets/badges/appstore-zh.svg" width="109" height="40" alt="在 App Store 下载">
</a>
<h2>怎么用</h2>
<ol>
<li>从 App Store 安装并启动 OSGKeyboardMac)。</li>
<li>授予 <strong>麦克风</strong><strong>辅助功能</strong></li>
<li>把光标放到任意可输入处,<strong>按住 Option</strong> 说话,松开后插入润色/转写结果。</li>
</ol>
<h2>体验要点</h2>
<div class="card">
<ul>
<li><strong>底部胶囊浮层</strong> — 录音与状态实时反馈,不抢焦点。</li>
<li><strong>本地模型可选</strong> — SenseVoice / Qwen3 等路径,音频默认不必上云。</li>
<li><strong>BYOK 润色</strong> — 用你已有的 LLM 额度整理标点与结构。</li>
<li><strong>与 iOS 同源产品语言</strong> — 词库与习惯可跨端延续(可选 iCloud)。</li>
</ul>
</div>
<h2>适合谁</h2>
<p>写代码注释、回邮件、记会议要点、在 Cursor / Notion 里口述长文——任何「手慢嘴快」的时刻。若你也需要手机端,同一 App 提供 iOS 自定义键盘,见 <a href="../install/">安装指南</a></p>
<div class="cta-row">
<a class="btn btn-primary" href="../install/#zh">去安装</a>
<a class="btn" href="../compare/">和其他工具对比</a>
</div>
</section>
<hr style="border:none;border-top:1px solid var(--line);margin:3rem 0">
<section id="en">
<p class="eyebrow">macOS</p>
<h1>Mac global dictation: hold Option to speak</h1>
<p class="lead">OSGKeyboard on Mac is a menu-bar app. Wherever the cursor is — Mail, browser, IDE, Notes — polished text lands there.</p>
<a class="store-badge" href="https://apps.apple.com/app/osgkeyboard/id6781553267" rel="noopener">
<img src="../assets/badges/appstore-en.svg" width="120" height="40" alt="Download on the App Store">
</a>
<h2>How to use it</h2>
<ol>
<li>Install OSGKeyboard from the App Store and launch the Mac app.</li>
<li>Grant <strong>Microphone</strong> and <strong>Accessibility</strong>.</li>
<li>Focus any text field, <strong>hold Option</strong> while speaking, release to insert.</li>
</ol>
<h2>What you get</h2>
<div class="card">
<ul>
<li><strong>Floating pill overlay</strong> — live feedback without stealing focus.</li>
<li><strong>Optional local models</strong> — SenseVoice / Qwen3 paths; audio need not leave the device by default.</li>
<li><strong>BYOK polish</strong> — reuse LLM credits you already pay for.</li>
<li><strong>Same product language as iOS</strong> — optional iCloud dictionary continuity.</li>
</ul>
</div>
<p>Also need the phone? The same app ships an iOS custom keyboard — see the <a href="../install/#en">install guide</a>.</p>
</section>
</div>
</main>
<footer>
<div class="footer-inner">
<span>© OSGKeyboard</span>
<span class="footer-links">
<a href="../">Home</a>
<a href="../privacy/">Privacy</a>
<a href="https://github.com/hkgood/OSGKeyboard" rel="noopener">GitHub</a>
</span>
</div>
</footer>
</body> </body>
</html> </html>
+2 -29
View File
@@ -3,40 +3,13 @@
xmlns:xhtml="http://www.w3.org/1999/xhtml"> xmlns:xhtml="http://www.w3.org/1999/xhtml">
<url> <url>
<loc>https://hkgood.github.io/OSGKeyboard/</loc> <loc>https://hkgood.github.io/OSGKeyboard/</loc>
<lastmod>2026-07-29</lastmod> <lastmod>2026-07-30</lastmod>
<changefreq>weekly</changefreq> <changefreq>weekly</changefreq>
<priority>1.0</priority> <priority>1.0</priority>
<xhtml:link rel="alternate" hreflang="zh-Hans" href="https://hkgood.github.io/OSGKeyboard/"/> <xhtml:link rel="alternate" hreflang="zh-Hans" href="https://hkgood.github.io/OSGKeyboard/"/>
<xhtml:link rel="alternate" hreflang="en" href="https://hkgood.github.io/OSGKeyboard/en/"/> <xhtml:link rel="alternate" hreflang="en" href="https://hkgood.github.io/OSGKeyboard/?lang=en"/>
<xhtml:link rel="alternate" hreflang="x-default" href="https://hkgood.github.io/OSGKeyboard/"/> <xhtml:link rel="alternate" hreflang="x-default" href="https://hkgood.github.io/OSGKeyboard/"/>
</url> </url>
<url>
<loc>https://hkgood.github.io/OSGKeyboard/en/</loc>
<lastmod>2026-07-29</lastmod>
<changefreq>weekly</changefreq>
<priority>0.95</priority>
<xhtml:link rel="alternate" hreflang="zh-Hans" href="https://hkgood.github.io/OSGKeyboard/"/>
<xhtml:link rel="alternate" hreflang="en" href="https://hkgood.github.io/OSGKeyboard/en/"/>
<xhtml:link rel="alternate" hreflang="x-default" href="https://hkgood.github.io/OSGKeyboard/"/>
</url>
<url>
<loc>https://hkgood.github.io/OSGKeyboard/install/</loc>
<lastmod>2026-07-29</lastmod>
<changefreq>monthly</changefreq>
<priority>0.85</priority>
</url>
<url>
<loc>https://hkgood.github.io/OSGKeyboard/compare/</loc>
<lastmod>2026-07-29</lastmod>
<changefreq>monthly</changefreq>
<priority>0.85</priority>
</url>
<url>
<loc>https://hkgood.github.io/OSGKeyboard/mac-dictation/</loc>
<lastmod>2026-07-29</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url> <url>
<loc>https://hkgood.github.io/OSGKeyboard/privacy/</loc> <loc>https://hkgood.github.io/OSGKeyboard/privacy/</loc>
<lastmod>2026-07-29</lastmod> <lastmod>2026-07-29</lastmod>