diff --git a/CHANGELOG.md b/CHANGELOG.md index 9300c32..1844bd1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,9 +8,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] ### 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 Bits–style, 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/`,英文用无地区链接。 -- **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. / **上下文润色护栏**:润色可使用经截断脱敏的光标附近文字自然衔接,并校验受保护词与标识符;失败时重试一次,仍不合格则降级为本地保守清理。 - **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 再送润色。 @@ -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)。 - **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 +- **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 与源码按钮统一为等高的紧凑圆角矩形,不再混用徽章与胶囊轮廓。 - **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; 5–10 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 点页面留白、分组标题和卡片外观。 ### 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 “嗯,我在呢”). / **日常聊天短句接话**:日常润色禁止对极短草稿做对方口吻续写(如「嗯」不再变成「嗯,我在呢」)。 - **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 秒,避免麦克风预热期间的语音被丢掉。 diff --git a/README.en.md b/README.en.md index 4379914..754d8ea 100644 --- a/README.en.md +++ b/README.en.md @@ -14,7 +14,11 @@ Voice input for iPhone, iPad, and Mac. Speak in any app — polished text lands

- Download on the App Store + Download for iPhone and iPad + +   + + Download for macOS

@@ -60,10 +64,16 @@ Speech is transcribed on-device by default. Polish sends **text only** — the t ## Get the app -**App Store (recommended)** +**iPhone / iPad (App Store)** - Download on the App Store + Download for iPhone and iPad + + +**Mac (Developer ID signed and notarized)** + + + Download for macOS ## Build from source diff --git a/README.md b/README.md index b732f11..cc4c6ac 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,11 @@

- 在 App Store 下载 + 下载 iPhone / iPad 版 + +   + + 直接下载 macOS 版

@@ -65,10 +69,16 @@ ## 获取 -**App Store(推荐)** +**iPhone / iPad(App Store)** - 在 App Store 下载 + 下载 iPhone / iPad 版 + + +**Mac(Developer ID 签名并公证)** + + + 直接下载 macOS 版 **从源码构建**(需 macOS + Xcode 26): diff --git a/docs/assets/badges/macos-en.svg b/docs/assets/badges/macos-en.svg new file mode 100644 index 0000000..037ad10 --- /dev/null +++ b/docs/assets/badges/macos-en.svg @@ -0,0 +1,11 @@ + + Download for macOS + + + + + + + DIRECT DOWNLOAD + macOS + diff --git a/docs/assets/badges/macos-zh.svg b/docs/assets/badges/macos-zh.svg new file mode 100644 index 0000000..8564105 --- /dev/null +++ b/docs/assets/badges/macos-zh.svg @@ -0,0 +1,11 @@ + + 直接下载 macOS 版 + + + + + + + 直接下载 + macOS 版 + diff --git a/docs/compare/index.html b/docs/compare/index.html index 6c3b8ff..162a98c 100644 --- a/docs/compare/index.html +++ b/docs/compare/index.html @@ -3,170 +3,13 @@ - OSGKeyboard vs Typeless vs Superwhisper · 开源听写对比 - - - - - - - - - - - - - - - + Redirecting · OSGKeyboard + + + + - - -
-
-

中文English

- -
-

产品对比

-

OSGKeyboard 和常见听写工具比什么?

-

如果你在找 Typeless 替代Superwhisper 平替,或想要「本地免费 + 自带 Key 润色」的开源方案,下面按维度对照。

- - - 在 App Store 下载 - - -
- - - - - - - - - - - - - - - - - - - -
维度TypelessSuperwhisperOpenlessOSGKeyboard
开源
付费免费额度有限;Pro 订阅不便宜免费档有限;Pro / 买断App 免费;按 Key 计费本地完全免费;云端 Key 自付
可本地识别
BYOK部分(Pro)
Mac
iPhone / iPad
Windows
-
-

价格与功能据各产品公开说明整理,可能更新,以官方为准。

- -

什么时候选 OSGKeyboard

-
    -
  • 不想再开一份「听写订阅」,已有 DeepSeek / OpenAI 等额度
  • -
  • 默认希望录音留在设备上,隐私路径可审计(开源)
  • -
  • 同时需要 iPhone 键盘Mac 全局听写
  • -
  • 接受源码可见许可(个人学习 / 非商用本地使用;商用需授权)
  • -
- -

什么时候可能不适合

-
    -
  • 需要 Windows 客户端
  • -
  • 希望完全托管、零配置云端识别(闭源 SaaS 更省心)
  • -
  • 商用分发但未取得商业许可
  • -
- - -
- -
- -
-

Compare

-

OSGKeyboard vs Typeless, Superwhisper, Openless

-

Looking for a Typeless alternative or Superwhisper alternative that is open, free locally, and BYOK-friendly? Here is a straight comparison.

- - - Download on the App Store - - -
- - - - - - - - - - - - - - - - - - - -
TypelessSuperwhisperOpenlessOSGKeyboard
Open source
PricingLimited free tier; Pro subscriptionLimited free; Pro / lifetimeFree app; billed to your keyLocal free; cloud on your key
On-device ASR
BYOKPartial (Pro)
Mac
iPhone / iPad
Windows
-
-

Features and prices from public pages; verify with each vendor.

- -

Choose OSGKeyboard when you want

-
    -
  • No second dictation subscription — reuse LLM credits you already buy
  • -
  • On-device audio by default and auditable source
  • -
  • Both an iOS keyboard and Mac global hotkey
  • -
- -

Maybe not if you need

-
    -
  • Windows
  • -
  • Fully managed cloud ASR with zero setup
  • -
  • Commercial redistribution without a license
  • -
-
-
-
- - +

OSGKeyboard — compare

diff --git a/docs/en/index.html b/docs/en/index.html index 887d78d..104ba40 100644 --- a/docs/en/index.html +++ b/docs/en/index.html @@ -3,128 +3,13 @@ - OSGKeyboard — Free Open-Source Voice Keyboard for iPhone, iPad & Mac - - - - - - - - - - - - - - - - - - - - - - - - - - + Redirecting · OSGKeyboard + + + + - - -
-
-

Free · Open · Cross-platform

-

Speak it. It's typed.

-

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.

- - - Download on the App Store - - - - - OSGKeyboard on iPad, Mac, and iPhone - -

Why people switch to OSGKeyboard

-
-
Works everywhere

Messages, Notes, Notion, Cursor, Mail, WeChat — wherever the cursor is.

-
On-device by default

Local ASR on iOS; optional local models on Mac. Cloud only when you opt in.

-
BYOK polish

Use DeepSeek, OpenAI, Anthropic, OpenRouter, or any compatible endpoint.

-
Phone + Mac

Custom keyboard on iOS/iPadOS; hold Option for global Mac dictation.

-
- -

Who it is for

- - -

Get started

-
    -
  1. Install from the App Store.
  2. -
  3. On iOS: enable the keyboard and Full Access. On Mac: grant Microphone + Accessibility.
  4. -
  5. Speak — text lands at the cursor. Add an API key only if you want AI polish.
  6. -
-

Full steps: Install guide. Feature deep-dive: Mac global dictation. Side-by-side: Compare products.

- -

Download

- - Download on the App Store - -
-
- - +

OSGKeyboard

diff --git a/docs/index.html b/docs/index.html index 4a39666..0a9b092 100644 --- a/docs/index.html +++ b/docs/index.html @@ -12,7 +12,7 @@ - + @@ -121,7 +121,7 @@ "name": "和 Typeless、Superwhisper 有什么不同?", "acceptedAnswer": { "@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); } /* —— Hero —— */ + /* Hero stays on the dark beams stage in both light and dark site themes. */ .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; - background: var(--hero-wash); + background: var(--hero-stage); + color: var(--hero-ink); padding: 4.5rem 0 2.5rem; overflow: hidden; isolation: isolate; @@ -370,8 +378,8 @@ position: absolute; inset: 0; background: - linear-gradient(180deg, transparent 58%, var(--hero-wash) 96%), - radial-gradient(ellipse 90% 60% at 50% -8%, transparent 40%, color-mix(in srgb, var(--hero-wash) 55%, transparent) 100%); + 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-stage) 55%, transparent) 100%); opacity: 0.72; pointer-events: none; } @@ -392,6 +400,7 @@ text-transform: uppercase; color: var(--accent); } + .hero .eyebrow { color: var(--hero-accent); } .eyebrow .material-symbols-outlined { font-size: 16px; } h1 { margin: 0 0 1rem; @@ -406,6 +415,7 @@ font-size: 1.12rem; color: var(--text-2); } + .hero .lead { color: var(--hero-muted); } .hero-cta { display: flex; flex-wrap: wrap; @@ -414,6 +424,13 @@ gap: 0.7rem; 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 { display: inline-flex; line-height: 0; @@ -426,11 +443,31 @@ width: auto; 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 { text-align: center; 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; } .faq-list { max-width: 720px; @@ -479,12 +516,14 @@ font-size: 0.86rem; color: var(--text-3); } + .hero .hero-meta { color: var(--hero-faint); } .hero-meta span { display: inline-flex; align-items: center; gap: 0.3rem; } .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). */ .hero-stage { @@ -880,8 +919,6 @@ - 安装 - 对比 GitHub @@ -906,9 +943,18 @@

开口即文字

免费开源的跨端语音输入。本地识别,自带 API Key 润色,避免重复订阅。iPhone、iPad、Mac — 说完即落字。

- - 在 App Store 下载 - +
+ iPhone / iPad + + 下载 iPhone / iPad 版 + +
+
+ Mac + + 直接下载 macOS 版 + +
查看源码 @@ -1214,14 +1260,13 @@

和 Typeless、Superwhisper 有什么不同?

-

开源、本地免费、手机+Mac 都有,并用 BYOK 复用已有 LLM 额度。详见对比页。

+

开源、本地免费、手机+Mac 都有,并用 BYOK 复用已有 LLM 额度。见上方对比表。

@@ -1231,13 +1276,24 @@

立即下载

-

App Store 一键安装;也可从源码自行构建。

+

iPhone / iPad 从 App Store 安装;Mac 直接下载已签名并公证的 DMG。

+
+
+
+ iPhone / iPad + + 下载 iPhone / iPad 版 + +
+
+ Mac + + 直接下载 macOS 版 + +
- - 在 App Store 下载 -
- 查看安装步骤 + 查看安装步骤 GitHub 源码
@@ -1250,8 +1306,8 @@ © OSGKeyboard · v0.5.4 · 源码可见 Download - Install - Compare + Install + Compare Source Privacy License @@ -1263,8 +1319,6 @@ const copy = { en: { "nav.github": "GitHub", - "nav.install": "Install", - "nav.compare": "Compare", "hero.eyebrow": "Free · Open · Cross-platform", "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.", @@ -1363,18 +1417,19 @@ "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.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.link.install": "Install guide →", - "faq.link.compare": "Compare products →", - "faq.link.mac": "Mac global dictation →", - "faq.link.en": "English site →", + "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": "Setup in 3 steps →", + "faq.link.compare": "Product comparison →", + "faq.link.download": "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.source": "GitHub source", "footer.copy": "© OSGKeyboard · v0.5.4 · source available", "footer.download": "Download", - "footer.install": "Install", + "footer.install": "Setup", "footer.compare": "Compare", "footer.source": "Source", "footer.privacy": "Privacy", @@ -1382,8 +1437,6 @@ }, zh: { "nav.github": "GitHub", - "nav.install": "安装", - "nav.compare": "对比", "hero.eyebrow": "免费 · 开源 · 跨端", "hero.title": "开口即文字", "hero.lead": "免费开源的跨端语音输入。本地识别,自带 API Key 润色,避免重复订阅。iPhone、iPad、Mac — 说完即落字。", @@ -1482,13 +1535,14 @@ "faq.3.q": "支持哪些设备?", "faq.3.a": "iPhone / iPad 自定义键盘,以及 Mac 菜单栏全局听写(按住 Option)。需 iOS / iPadOS / macOS 26+。", "faq.4.q": "和 Typeless、Superwhisper 有什么不同?", - "faq.4.a": "开源、本地免费、手机+Mac 都有,并用 BYOK 复用已有 LLM 额度。详见对比页。", - "faq.link.install": "安装指南 →", + "faq.4.a": "开源、本地免费、手机+Mac 都有,并用 BYOK 复用已有 LLM 额度。见上方对比表。", + "faq.link.install": "安装三步 →", "faq.link.compare": "产品对比 →", - "faq.link.mac": "Mac 全局听写 →", - "faq.link.en": "English site →", + "faq.link.download": "立即下载 →", "download.title": "立即下载", - "download.subtitle": "App Store 一键安装;也可从源码自行构建。", + "download.subtitle": "iPhone / iPad 从 App Store 安装;Mac 直接下载已签名并公证的 DMG。", + "download.ios": "iPhone / iPad", + "download.mac": "Mac", "download.install": "查看安装步骤", "download.source": "GitHub 源码", "footer.copy": "© OSGKeyboard · v0.5.4 · 源码可见", @@ -1505,12 +1559,16 @@ zh: { href: "https://apps.apple.com/cn/app/osgkeyboard/id6781553267", src: "assets/badges/appstore-zh.svg", - alt: "在 App Store 下载" + alt: "下载 iPhone / iPad 版", + macSrc: "assets/badges/macos-zh.svg", + macAlt: "直接下载 macOS 版" }, en: { href: "https://apps.apple.com/app/osgkeyboard/id6781553267", 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("alt", cfg.alt); }); + document.querySelectorAll(".macos-badge-img").forEach((img) => { + img.setAttribute("src", cfg.macSrc); + img.setAttribute("alt", cfg.macAlt); + }); } function applyLang(lang) { @@ -1577,7 +1639,7 @@ }); } - // React Bits–style Beams (vanilla Three.js), preset from shared demo URL + // Beams stay on the dark palette regardless of site theme. const beamsHero = (() => { const wrap = document.getElementById("heroAurora"); const canvas = document.getElementById("heroAuroraCanvas"); @@ -1585,26 +1647,22 @@ const reduceMotion = window.matchMedia("(prefers-reduced-motion: reduce)").matches; const isMobile = window.matchMedia("(max-width: 720px)").matches; - const palettes = { - dark: { light: "#7CFFB2", bg: "#000000" }, - light: { light: "#2f9a52", bg: "#0a1210" } - }; + const palette = { light: "#7CFFB2", bg: "#000000" }; let instance = null; - let currentMode = ""; + let ready = false; function destroy() { if (!instance) return; try { instance.destroy(); } catch (_) {} instance = null; + ready = false; } - function create(mode) { + function create() { if (typeof window.OSGBeamsHero?.create !== "function" || typeof window.THREE === "undefined") { return false; } - currentMode = mode; - const palette = palettes[mode] || palettes.dark; canvas.style.width = "100%"; canvas.style.height = "100%"; try { @@ -1623,6 +1681,7 @@ heightSegments: isMobile ? 64 : 100 }); wrap.classList.add("is-ready"); + ready = true; return true; } catch (err) { console.warn("[beams]", err); @@ -1631,19 +1690,17 @@ } } - function setPalette(mode) { - const next = mode === "light" ? "light" : "dark"; - if (next === currentMode && instance) { - const palette = palettes[next]; + function setPalette() { + if (ready && instance) { instance.setLightColor(palette.light); instance.setBackground(palette.bg); return; } - create(next); + create(); } function boot() { - const ok = create(resolvedTheme()); + const ok = create(); if (!ok) return; const io = new IntersectionObserver((entries) => { @@ -1675,7 +1732,8 @@ } try { localStorage.setItem("osg-theme", theme); } catch (_) {} applyShots(); - beamsHero.setPalette(resolvedTheme()); + // Hero beams intentionally ignore theme — keep dark stage. + beamsHero.setPalette(); } 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 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"); try { window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", () => { if ((document.documentElement.getAttribute("data-theme") || "system") === "system") { applyShots(); - beamsHero.setPalette(resolvedTheme()); } }); } catch (_) {} diff --git a/docs/install/index.html b/docs/install/index.html index fddb709..db54982 100644 --- a/docs/install/index.html +++ b/docs/install/index.html @@ -3,154 +3,13 @@ - 安装指南 · OSGKeyboard iOS / Mac 语音输入设置 - - - - - - - - - - - - - - - + Redirecting · OSGKeyboard + + + + - - -
-
-

中文English

- -
-

安装指南

-

两分钟装好,开口即用

-

从 App Store 安装后,完成键盘 / 权限授权即可。无需注册账号,本地识别开箱可用。

- - - 在 App Store 下载 - - -

1. 下载安装

-
    -
  1. 在 App Store 搜索 OSGKeyboard,或点击上方徽章。
  2. -
  3. 安装完成后打开主 App,按首次引导走完权限与引擎选择(约 2 分钟)。
  4. -
- -

2. iPhone / iPad:启用自定义键盘

-
-
    -
  1. 打开 设置 → 通用 → 键盘 → 键盘 → 添加新键盘…
  2. -
  3. 选择 OSGKeyboard
  4. -
  5. 点进该键盘,开启 允许完全访问(麦克风、共享 Keychain、与主 App 通信需要它;不会上传你的普通击键)。
  6. -
  7. 在任意输入框长按 🌐,切换到 OSGKeyboard,点麦克风开口。
  8. -
-
- -

3. Mac:麦克风 + 辅助功能

-
-
    -
  1. 打开 OSGKeyboard Mac 应用,按提示授予 麦克风辅助功能
  2. -
  3. 菜单栏出现图标后,在任意 App 把光标放好,按住 Option 说话,松手后文字插入。
  4. -
-

详见 Mac 全局听写说明

-
- -

4. 可选:API Key 润色

-

默认本地识别即可落字。若要 AI 补标点与润色,在设置中填入你自己的 API Key(DeepSeek / OpenAI / Anthropic / OpenRouter 等兼容端点)。Key 存在本机 Keychain。

- -

常见问题

-
-

键盘列表里没有 OSG? 确认已「添加新键盘」,并重启主 App 后再试。

-

点了麦克风没反应? 检查麦克风权限与「完全访问」是否开启。

-

Mac 按 Option 无效? 到系统设置 → 隐私与安全性 → 辅助功能,确认 OSGKeyboard 已勾选。

-
-
- -
- -
-

Install guide

-

Ready in a few minutes

-

Install from the App Store, grant permissions once, then speak. No account required for local recognition.

- - - Download on the App Store - - -

1. Download

-
    -
  1. Get OSGKeyboard from the App Store (badge above).
  2. -
  3. Open the app and complete the first-run setup (~2 minutes).
  4. -
- -

2. iPhone / iPad: enable the keyboard

-
-
    -
  1. Go to Settings → General → Keyboard → Keyboards → Add New Keyboard…
  2. -
  3. Select OSGKeyboard.
  4. -
  5. Open it and enable Allow Full Access (needed for mic, shared Keychain, and host-app session — we do not exfiltrate ordinary keystrokes).
  6. -
  7. In any text field, long-press 🌐, switch to OSGKeyboard, tap the mic.
  8. -
-
- -

3. Mac: Microphone + Accessibility

-
-
    -
  1. Launch the Mac app and grant Microphone and Accessibility.
  2. -
  3. With the menu-bar icon present, place the cursor in any app, hold Option to speak, release to insert.
  4. -
-

More detail: Mac global dictation.

-
- -

4. Optional: API key polish

-

Local ASR works without a key. Add your own LLM key only for AI punctuation and polish. Keys stay in Keychain on device.

-
-
-
- - +

OSGKeyboard — setup

diff --git a/docs/llms.txt b/docs/llms.txt index eadccd4..4e52e46 100644 --- a/docs/llms.txt +++ b/docs/llms.txt @@ -36,11 +36,10 @@ OSGKeyboard is a custom keyboard (iOS/iPadOS) and menu-bar global dictation app ## Docs for humans and agents -- Home (ZH): https://hkgood.github.io/OSGKeyboard/ -- Home (EN): https://hkgood.github.io/OSGKeyboard/en/ -- Install guide: https://hkgood.github.io/OSGKeyboard/install/ -- Compare / alternatives: https://hkgood.github.io/OSGKeyboard/compare/ -- Mac global dictation: https://hkgood.github.io/OSGKeyboard/mac-dictation/ +- Home (ZH/EN toggle): https://hkgood.github.io/OSGKeyboard/ +- Home (EN): https://hkgood.github.io/OSGKeyboard/?lang=en +- Setup steps: https://hkgood.github.io/OSGKeyboard/#start +- Product comparison: https://hkgood.github.io/OSGKeyboard/#vs - Privacy policy: https://hkgood.github.io/OSGKeyboard/privacy/ - 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 diff --git a/docs/mac-dictation/index.html b/docs/mac-dictation/index.html index 29ef68e..ce21872 100644 --- a/docs/mac-dictation/index.html +++ b/docs/mac-dictation/index.html @@ -3,128 +3,13 @@ - Mac 全局听写 · OSGKeyboard Option 按住说话 - - - - - - - - - - - - - - + Redirecting · OSGKeyboard + + + + - - -
-
-

中文English

- -
-

macOS

-

Mac 全局听写:按住 Option,开口即字

-

OSGKeyboard 在 Mac 上是菜单栏应用。光标在哪个 App,文字就落到哪——邮件、浏览器、IDE、备忘录都行。

- - - 在 App Store 下载 - - -

怎么用

-
    -
  1. 从 App Store 安装并启动 OSGKeyboard(Mac)。
  2. -
  3. 授予 麦克风辅助功能
  4. -
  5. 把光标放到任意可输入处,按住 Option 说话,松开后插入润色/转写结果。
  6. -
- -

体验要点

-
-
    -
  • 底部胶囊浮层 — 录音与状态实时反馈,不抢焦点。
  • -
  • 本地模型可选 — SenseVoice / Qwen3 等路径,音频默认不必上云。
  • -
  • BYOK 润色 — 用你已有的 LLM 额度整理标点与结构。
  • -
  • 与 iOS 同源产品语言 — 词库与习惯可跨端延续(可选 iCloud)。
  • -
-
- -

适合谁

-

写代码注释、回邮件、记会议要点、在 Cursor / Notion 里口述长文——任何「手慢嘴快」的时刻。若你也需要手机端,同一 App 提供 iOS 自定义键盘,见 安装指南

- - -
- -
- -
-

macOS

-

Mac global dictation: hold Option to speak

-

OSGKeyboard on Mac is a menu-bar app. Wherever the cursor is — Mail, browser, IDE, Notes — polished text lands there.

- - - Download on the App Store - - -

How to use it

-
    -
  1. Install OSGKeyboard from the App Store and launch the Mac app.
  2. -
  3. Grant Microphone and Accessibility.
  4. -
  5. Focus any text field, hold Option while speaking, release to insert.
  6. -
- -

What you get

-
-
    -
  • Floating pill overlay — live feedback without stealing focus.
  • -
  • Optional local models — SenseVoice / Qwen3 paths; audio need not leave the device by default.
  • -
  • BYOK polish — reuse LLM credits you already pay for.
  • -
  • Same product language as iOS — optional iCloud dictionary continuity.
  • -
-
- -

Also need the phone? The same app ships an iOS custom keyboard — see the install guide.

-
-
-
- - +

OSGKeyboard

diff --git a/docs/sitemap.xml b/docs/sitemap.xml index 624c061..d39f5c8 100644 --- a/docs/sitemap.xml +++ b/docs/sitemap.xml @@ -3,40 +3,13 @@ xmlns:xhtml="http://www.w3.org/1999/xhtml"> https://hkgood.github.io/OSGKeyboard/ - 2026-07-29 + 2026-07-30 weekly 1.0 - + - - https://hkgood.github.io/OSGKeyboard/en/ - 2026-07-29 - weekly - 0.95 - - - - - - https://hkgood.github.io/OSGKeyboard/install/ - 2026-07-29 - monthly - 0.85 - - - https://hkgood.github.io/OSGKeyboard/compare/ - 2026-07-29 - monthly - 0.85 - - - https://hkgood.github.io/OSGKeyboard/mac-dictation/ - 2026-07-29 - monthly - 0.8 - https://hkgood.github.io/OSGKeyboard/privacy/ 2026-07-29