Skip to content

Releases: SidUParis/openVoiceInput_linux

Open Voice Input Linux v0.1.0-alpha.9

Pre-release

Choose a tag to compare

@SidUParis SidUParis released this 04 Sep 08:54
Immutable release. Only release title and notes can be modified.
v0.1.0-alpha.9
e2a1847

Open Voice Input Linux v0.1.0-alpha.9

面向 Ubuntu / IBus 用户的补丁更新:修正火山 BigModel ASR 2.0 原始 WebSocket 请求中的动态上下文位置,以本地、有界、可回放的终稿阶段落实用户明确确认过的术语纠错,并增加不会阻塞录音启动的私有音频信号质量审计工具。

alpha.9 重点解决“词表或纠错已经保存,但云端仍然偶发忽略”的可靠性问题。correct_words 继续作为服务端 best-effort 提示;手工规则与用户明确确认的 adaptive 规则还会在权威终稿到达后本地执行一次。这个补丁不增加 LLM、额外 ASR 请求、启动质量门、音频过滤或增益调整,也不会改变既有 IBus、远程桌面剪贴板、麦克风路由和播放输出边界。

这次更新

  • 修正火山请求协议层:动态 JSON context 现在位于原始 WebSocket 请求的 request.corpus.context;经过代码审核的 boosting_table_* / correct_table_* 托管表 selector 仍与它同处 corpus。非空上下文合并 hotwordscorrect_words,空上下文则省略,避免发送错误层级。
  • 纠错获得本地确定性后盾:服务端 correct_words 不再被当作一定执行的命令。手工规则和用户明确确认的 active adaptive 规则会在 provider authoritative final 后、本地 clean/faithful 风格之前执行一次。自动激活但未经人工确认的强证据仍只作为 provider hint,不会直接重写终稿。
  • 有界且保护词界:本地阶段采用 leftmost-longest、非重叠、非级联替换;ASCII source 区分大小写并要求词法边界,常见 URL、dotted name、identifier 和 Markdown code 上下文会跳过。因此可把独立的 Elas 改成 ILaaS,而不应改动 ElasticElasticsearch、URL 路径或代码 token。
  • 热词预算更保守:已确认纠错的 canonical 会先于普通显式词汇加入去重后的识别热词。由于火山公开了 100-token 上限却没有公开该端点 tokenizer,本客户端不把“一个词条”错误地当作“一个 token”,而是同时限制完整词条数、Unicode codepoint 和 UTF-8 byte;放不下的完整词条会被跳过而不是切断。
  • 交付流水线可重放:新 opt-in record.json 升级为 schema v5。delivery.pipeline 依次记录 confirmed-correction 与 faithful/clean 阶段;原始 provider_final、实际交付文本、冻结的 caret / clipboard 目标和两个人工标签继续彼此分离。
  • 增加不含正文的火山结果诊断:每个连接只累计 result.text 帧、包含 definite utterance 的帧以及两者选择结果不一致的次数。日志只记录固定事件名,不记录任一 transcript、长度、纠错规则或 provider payload。
  • 增加私有、signal-only 音频质量审计scripts/audit_audio_quality.py 可在录音结束后检查用户已经明确 opt-in 保存的不可变 WAV/JSON 对,计算时长、响度、削波、DC offset、数字静音/掉音及首秒污染等信号证据,并按 highusablelowreject 给出启发式分档。

延迟、失败回退与安全边界

  • 所有 live partial 仍保持 provider 原样;纠错与 clean 只在权威终稿到达后运行。
  • confirmed-correction 是纯本地、确定性的字符串阶段,不调用模型或网络;输入和输出分别限制为 4,096 codepoints / 16 KiB,最多执行 64 次替换。验证、边界、处理器或可回放检查失败时,该阶段保留原始 provider final。
  • clean 是后续独立的、本地、deletion-only 阶段。它最多执行 64 次删除,失败时回退到纠错阶段的输入;faithful 模式不做口头表达清理,但仍允许明确确认过的术语纠错。
  • 任一终稿阶段实际改变文本后,本条不会把后续编辑自动当作原始 ASR span 的学习证据。--review-last 仍始终从原始 provider_final 开始,机器交付文本只读展示。
  • 没有新增开麦前音质门、warm-up、自动拒绝、音频过滤、降噪、增益修改或中途切换麦克风。DJI/耳机/内置麦克风选择仍只影响新的一条听写,且从不改变播放 sink。
  • 默认交付仍是当前 IBus 光标;远程桌面 clipboard 目标仍明确 opt-in、只写一次权威终稿、从不自动粘贴或模拟按键。

音频质量审计的含义

  • 审计不会播放或听取音频,不检查 transcript 语义,也不联系 ASR 或其他网络服务;它只读取用户已经选择保存的数据集。
  • 原始 audio.wavrecord.json 不会被改写。可选输出使用私有 quality-v1/<utterance-id>/{quality.json,complete} sidecar;只有完整 manifest 才代表一次已提交的快照,中断后未被完整 manifest 引用的内容必须忽略。
  • high / usable / low / reject 是固定阈值下的信号启发式,不是人工听感判断、转录正确率、人工 gold label 或自动训练准入。training_label_status 明确保持 non-gold-signal-audit-only
  • 一个信号较好的样本仍可能转录错误;一个低档样本也不能在未经人工复核时直接删除。此工具用于筛查和后续审核排序,不用于静默改变输入体验。

数据格式与留存

  • 数据采集仍然默认关闭,只有用户明确选择现有的本地或挂载目录后才保存音频和记录。
  • schema v5 仍把 labels.provider_final 标为 teacher-unreviewed,把实际 delivery 标为 machine-derived-unreviewed,并让 spoken_verbatim / preferred_output 保持 null / unreviewed,直到未来进行真正的人工听音审核。
  • delivery.pipeline 从原始 final 开始按顺序重放纠错和 faithful/clean 阶段;旧 schema v1/v2/v3/v4 记录保持不可变且继续可读。usage schema v2 继续按实际交付文本计数。
  • 本版本仍没有应用自带的 Orange 登录/挂载、resumable transfer、Google Drive 上传器、应用层静态加密、数据集审核/删除 UI、模型训练/微调/蒸馏或断线 fallback spool。用户自行挂载的文件系统仍是独立存储信任边界,正常关闭只给后台 writer 有界 drain。

当前验证与已知限制

  • 受保护的 exact-main CI 已完成 securityenginevoicepreview-bundle 四项检查;PR 验证包括 810 个 voice tests、38 个 engine tests、165 个 scripts/installer/packaging tests 和 25 个音频质量 adversarial tests,以及 Ruff、compileall、可重现构建和 secret scan。
  • 协议、纠错和质量工具使用 fake/offline transport 与合成测试数据验证;本次发布准备没有启动真实麦克风,也没有使用真实 provider key 发起 ASR 请求。
  • 火山 BigModel ASR 2.0 仍是默认且唯一曾在维护者机器上用真实 Key 验收的后端,但这不表示每个 hotword/correction 都会被服务端采纳;alpha.9 的本地终稿阶段只保证明确允许的规则能够在既定边界内执行。
  • 音频分档不测转录内容、语义、口音适配或人工听感,不能替代真正的听音标注和独立验证集。
  • 支持的正式包目标仍是 Ubuntu 24.04 x86_64 + IBus + CPython 3.12。这是公开 alpha 补丁版本,不宣称广泛 Linux 兼容、完全离线 ASR 或生产就绪。

安装与升级

下载本 Release 的 Debian 包后运行:

sudo apt install ./open-voice-input-linux_0.1.0-alpha9-1_amd64.deb

Debian 内部版本仍使用可正确参与 Debian 排序的 0.1.0~alpha9-1;Release 文件名沿用既有惯例写作 0.1.0-alpha9-1。两者是同一份逐字节相同的包。

也可以使用离线 preview archive:

tar -xzf openVoiceInput_linux-preview-e2a1847a49f7-ubuntu-24.04-x86_64-py3.12.tar.gz
cd openVoiceInput_linux-preview-e2a1847a49f7-ubuntu-24.04-x86_64-py3.12
./scripts/install-user.sh

升级和卸载继续保留用户私有的 provider key、显式词表、手工纠错、adaptive ledger、输出风格、输出目标、交互与麦克风策略、留存选择及外部 dataset。公开 preview / Debian artifact gate 会拒绝打包这些用户配置、音频、transcript 或质量 sidecar。

验证与供应链信息

  • Release URL: v0.1.0-alpha.9
  • Release tag: v0.1.0-alpha.9
  • Signed annotated tag: v0.1.0-alpha.9 — GitHub verification: valid
  • Source commit: e2a1847a49f7707915e5c2f6b0c946cc7efa0a50 (GitHub commit verification: valid)
  • Feature pull request: #25
  • Release-link correction: #26
  • Exact-main CI: run 33854484449
  • Required checks: security ✅ · engine ✅ · voice ✅ · preview-bundle
  • CI artifact ID: 9929644414
  • CI artifact ZIP SHA256: e8a808f31b36a314af07b748605862b0f954f67a7c9dbdeec09e6ddf4d86a7af
  • Preview archive: openVoiceInput_linux-preview-e2a1847a49f7-ubuntu-24.04-x86_64-py3.12.tar.gz
  • Preview archive SHA256: a62d48fb1120fa07aa4aff66bed3524be74329e94a96cba2691deb5db90f94a8
  • Debian package: open-voice-input-linux_0.1.0-alpha9-1_amd64.deb
  • Debian package SHA256: dd72b26fa644a4c06076cdf619f5bb26265e5092464a8ce216afaa9171123a82
  • Debian package size / Installed-Size: 474120 bytes / 3140 KiB
  • Preview SBOM serial: urn:uuid:ce497340-8e59-50fa-839b-94688ea04fd1
    • Scope: project wheel + hash-locked runtime wheelhouse
  • Package SBOM serial: urn:uuid:080f291d-7e2f-5209-9daf-057ca8f52258
    • Scope: packaged application/source commit + four bundled Python runtime wheels; Ubuntu system dependencies remain external
  • Immutable release: repository policy is enabled; after draft-asset verification and publication, this release and its assets are locked and corrections require a new version.

English release notes

Open Voice Input Linux v0.1.0-alpha.9 is a patch update for terminology reliability and post-hoc dataset quality review on Ubuntu/IBus. It fixes the raw Volcengine BigModel ASR 2.0 request hierarchy by carrying dynamic context at request.corpus.context, adds a bounded local terminal stage for corrections the user has explicitly authorized, and introduces a private signal-only quality auditor for already retained opt-in recordings. It adds no LLM, extra ASR request, startup quality gate, audio filtering, gain adjustment, or microphone-to-playback routing change.

What changed

  • Dynamic hotwords and correct_words now share the compact context JSON at raw-wire request.corpus.context; reviewed managed-table selectors remain sibling fields in corpus, and empty context is omitted.
  • Provider-side correct_words remains best-effort guidance. Manual rules and explicitly confirmed active adaptive rules are also applied once locally after the authoritative provider final and before faithful/clean output-style processing. Strong automatically activated evidence that has not been explicitly confirmed remains provider guidance only.
  • The local pass is leftmost-longest, non-overlapping, non-cascading, bounded to 4,096 codepoints / 16 KiB and at most 64 replacements. ASCII sources are case-sensitive and require lexical boundaries; common URL, dotted-name, identifier and Markdown-code contexts are protected. Validation, limit, processor or replay failure preserves the provider final for that stage.
  • Confirmed correction canonicals receive priority in the deduplicated request hotword view. Because Volcengine publishes a 100-token cap without exposing the endpoint tokenizer, the client does not equate entries with tokens: it conservatively limits complete terms, Unicode codepoints and UTF-8 bytes, skipping rather than splitting a term that does not fit.
  • New opted-in records use schema v5. delivery.pipeline replayably records the confirmed-correction stage followed by faithful identity or clean deletion-only processing. Raw provider_final, actual machine-derived-unreviewed delivery, frozen caret / clipboard target, and null human labels remain separate; existing v1/v2/v3/v4 records are not rewritten.
  • Volcengine result selection now keeps content-free per-connection counts for result.text, definite utterance frames and selection mismatches. A mismatch log includes only a fixed event name, never either transcript representation, its length, correction content, or provider payload.
  • scripts/audit_audio_quality.py validates immutable WAV/JSON pairs after recording and computes signal evidence for duration, level, clipping, DC offset, digital silence/dropout and first-second contamination. It classifies each record as high, usable, low, or reject under a deterministic heuristic policy.

Latency, privacy, and failure boundaries

Live partials remain raw. Both terminal stages are local and add no model or network call. Confirmed correction fails open to the raw provider final; the separate clean deletion-only stage fails open to its previous-stage input. Faithful mode performs no expression cleanup but still permits explicitly authorized terminology corrections. If either stage changes the terminal text, later field edits are not treated as safe automatic evidence about the original ASR span; explicit review continues to begin with raw provider_final.

The quality auditor does not play or listen to audio, interpret transcript semantics, or contact an ASR/network service. It never rewrites original audio.wav or record.json. Optional private output uses deterministic quality-v1/<utterance-id>/{quality.json,complete} sidecars, and only a complete manifest commits a snapshot. Its tiers are s...

Read more

Open Voice Input Linux v0.1.0-alpha.8

Pre-release

Choose a tag to compare

@SidUParis SidUParis released this 01 Sep 22:37
Immutable release. Only release title and notes can be modified.
v0.1.0-alpha.8
7a86ac5

Open Voice Input Linux v0.1.0-alpha.8

面向 Ubuntu / IBus 用户的公开技术预览:默认仍把实时识别通过 IBus 直接送到当前光标;只有用户明确启用远程桌面目标时,才把一条已经完成的终稿写入本机剪贴板,等待用户自己确认远端输入框并手动粘贴。

alpha.8 为 Remmina/RDP 等无法接收本机 IBus preedit 的画布增加了一条明确、默认关闭的兼容路径。它不是自动粘贴,也不是远端输入法桥接:没有 partial、没有自动 Ctrl+V、没有模拟按键,也不会猜测远端焦点。缺少新配置时仍使用原生光标模式,升级不会静默改变交付位置。

这次更新

  • 原生光标仍是默认路径:缺少私有 output-target.json 时选择 caret。它继续使用 IBus focus token、private-purpose 检查、实时 preedit 和 final-once 提交;默认路径不读取或写入剪贴板。
  • 远程桌面终稿复制是明确 opt-in:在设置的“远程桌面”页选择“同步剪贴板”并保存后,下一条听写才使用 clipboard。目标在每条听写开始时冻结;录音中修改设置只影响下一条,不会从失败的 caret 提交静默回退到剪贴板。
  • 只复制权威终稿:clipboard 模式不获取 IBus preedit,也不把 provider partial 写入剪贴板或远端;partial 只在守护进程的有界内存中更新。只有 provider 发出连接级权威 final、可选清爽表达处理完成且终稿仍满足 4,096 codepoints / 16 KiB 边界后,才尝试写入一次。
  • 始终由用户手动粘贴:程序不会发送 Ctrl+V、模拟逐字输入、选择远端窗口、读取现有剪贴板或自动重试粘贴。用户必须先确认远端光标位置,再自行按 Ctrl+V。取消、缺少 final、无效或超限结果、helper 不可用、复制失败都不会产生一个可误认为成功的复制或自动输入。
  • 状态语义明确clipboard-armed 只说明用户已选择该目标,下一次开始仍需 preflight;clipboard-ready 只证明上一条在写入当时成功,不保证当前剪贴板尚未被其他应用覆盖;clipboard-unavailable 表示开麦前无法建立可信 helper/display 路径;clipboard-copy-failed 表示终稿未成功写入,用户不应粘贴旧内容。
  • 1.6.1+ 兼容控制器可见:本仓库之外单独维护的兼容控制器代码线 1.6.1+ 可以在悬浮按钮与托盘显示上述 content-free 状态,并保持“错误 > 录音/收尾 > 剪贴板提示 > 普通空闲”的优先级。控制器不接收 transcript,也没有剪贴板、麦克风、网络、provider 或 host-spawn 权限;它不随本仓库 .deb 分发。未运行兼容控制器时可使用 murmur-voice-daemon status,而设置窗口并不是实时录音浮层,需要重新打开后才刷新。

剪贴板暴露与信任边界

RDP 剪贴板同步会把终稿暴露给本机图形会话、Remmina/FreeRDP、远端图形会话、两边同一用户的应用、剪贴板历史工具和远端主机策略。不要使用 clipboard 模式输入密码、PIN、API Key、一次性验证码、恢复码或其他秘密。

项目不会用定时覆盖来假装能够撤回已经同步的内容。粘贴后如需清理,应使用本机、远端桌面和剪贴板管理器实际提供的清除能力;即使界面仍显示 clipboard-ready,剪贴板也可能已经被其他应用覆盖或写入历史。

实现对本机 helper 和显示连接采用以下有界检查:

  • 只允许固定绝对路径 /usr/bin/xclip(X11)或 /usr/bin/wl-copy(Wayland);helper 必须是系统 root 所有的普通可执行文件,并且不能被 group/other 写入。
  • 终稿只通过 helper 的标准输入发送;不进入命令参数、环境变量、shell 字符串、stdout/stderr 或日志。子进程只收到当前 backend 所需的有界 display 认证环境。
  • 开始听写前验证与当前会话匹配的本地 Unix display socket 元数据,并执行一次 250 ms 上限的 connect/close;preflight 本身不执行 helper、不打开麦克风、不联系 provider,也不改写剪贴板。
  • 对处在 user namespace 内的进程,固定系统文件的 root 身份会结合 /proc/self/uid_map 与 kernel overflow UID 解释;元数据缺失或畸形时 fail closed。overflow UID 绝不会被当作每会话 X socket 的可信所有者,display socket 必须属于实际桌面用户。
  • systemd 继续使用 PrivateTmp=yes,只把存在的 /tmp/.X11-unix 只读暴露给 voice service;Wayland 仍使用当前用户私有的 XDG_RUNTIME_DIR socket。

这些检查降低了路径替换和错误会话写入风险,但不是同一 UID 内的强隔离。用户 session D-Bus、mode-0600 本地控制 socket、图形服务与同一用户进程仍是信任边界;恶意的同 UID 程序可能与它们交互或读取剪贴板。

纠错学习与数据格式

  • clipboard 模式没有可信的远端 IBus focus token、private-purpose、committed-span anchor 或 surrounding text,因此不会观察远端修改,也不会从剪贴板学习。本条会记录 content-free 原因 clipboard-output-no-surrounding-text,并跳过自动 adaptive extraction。
  • --review-last 仍然从 raw provider_final 开始,实际 delivery 只读展示。用户可以显式提交自己实际说出的逐字文本;去口头词或润色结果不会自动成为 ASR 金标。
  • 可选数据留存开启时,新 record.json 使用 schema v4。原始 provider_final 仍是 teacher-unreviewedspoken_verbatim / preferred_output 仍为 null / unreviewedmachine-derived-unrevieweddelivery 现在额外记录本条冻结的 caretclipboard target,并保留 mode、processor/outcome 与可重放删除项。
  • 只有终稿成功到达冻结目标后,才可能发布一次成功 record/review。clipboard 写入失败、取消、空终稿或 provider 失败会丢弃可选记录;旧 schema v1/v2/v3 记录保持不可变且继续可读。
  • usage schema v2 继续按实际交付文本计数;首页只读不含正文的 usage 摘要,不打开音频或 record.json transcript。

数据采集仍然默认关闭。本版本仍没有应用自带的 Orange 登录/挂载、resumable transfer、Google Drive 上传器、应用层静态加密、数据集审核/删除 UI、模型训练/微调/蒸馏或断线 fallback spool;用户自行挂载的文件系统仍是独立存储信任边界,正常关闭只给后台 writer 有界 drain。

源码安装与 Debian helper 的区别

  • 源码/preview 安装xclipwl-copy 保持可选,以免一个明确未启用的远程功能阻断默认 caret 路径。选择 clipboard 后,用户必须自行安装与当前会话匹配的 helper;缺失时下一次开始会在开麦和 provider 连接前返回 clipboard-unavailable
  • 正式 .deb:同时声明 Ubuntu 的 xclipwl-clipboard 为外部系统依赖,使支持的 X11 与原生 Wayland 环境都有确定的候选 helper。运行时仍根据当前会话与 live Unix socket 选择,绝不因为已安装两个工具就跳过 preflight。
  • 两个 helper 都不是项目 vendored Python wheel。Preview SBOM 的范围仍是项目 wheel 加 hash-locked Python wheelhouse;Package SBOM 的范围仍是应用/source commit 加四个 bundled Python runtime wheels,不是 Ubuntu 系统依赖的文件级清单。

当前验证与已知限制

  • 代码路径使用 fake/offline provider、fake audio、私有 Xvfb/D-Bus/IBus 以及独立 Xvfb 中的真实 xclip 往返验证;这些测试没有触碰用户真实桌面剪贴板。
  • 本版本没有用真实麦克风、真实 provider Key 或代表性的真实 Remmina/RDP 会话对 clipboard 路径做端到端验收,因此不能把测试结果描述成物理设备、云端识别或所有远程桌面环境已经验证。
  • clipboard 模式没有 inline partial、远端 private-field 拒绝、远端焦点证明或同输入框自动学习;要获得这些边界,需要在远端会话运行完整 IBus/voice 服务,或未来实现经过认证、绑定远端焦点的原生 helper 协议。
  • 火山 BigModel ASR 2.0 仍是默认且唯一曾在维护者机器上用真实 Key 验收的后端;这不代表 alpha.8 新 clipboard 路径进行了真实 provider 验收。Qwen/OpenAI 仍只有 fake-transport 协议测试,MiniMax 仍不可选择。
  • 默认 caret、忠实/清爽终稿、动态麦克风与数据留存的既有边界不变;clipboard 只改变终稿交付位置,不增加 LLM、额外 ASR 请求、音频过滤、增益修改或录音启动质量门。

因此本版本适合作为明确标注的社区 alpha 测试,不应据此宣称安全等价于原生远端输入法、广泛 Linux/RDP 支持、完全离线或生产就绪。

安装与使用

目标环境是 Ubuntu 24.04 x86_64 + IBus。下载本 Release 的 .deb 后运行:

sudo apt install ./open-voice-input-linux_*_amd64.deb

然后打开 Open Voice Input Linux → 远程桌面

  1. 默认保持“当前光标”可继续获得本机 inline partial;
  2. 只有在 Remmina/RDP 画布需要时才选择“同步剪贴板”并保存;
  3. 听写完成且看到上一条复制成功状态后,确认远端字段,再手动粘贴;
  4. 使用完毕后切回“当前光标(默认)”。

升级和卸载会保留私有 Key、词表、纠错账本、output style、output-target.json、麦克风策略、留存选择与外部 dataset。公开 preview / Debian artifact gate 会拒绝打包用户的 output target 与其他私有配置。

验证与供应链信息

  • Release URL: v0.1.0-alpha.8
  • Source commit: 7a86ac5e2c2e765da6f164e02f575090697c70c9
  • Pull request: #24
  • Signed annotated tag: v0.1.0-alpha.8 — GitHub verification: valid
  • Exact-main CI: run 33566479555
  • CI transparency: the final PR head and the exact-main push each completed all four protected checks. The artifact below is the only artifact attached to the successful exact-main push; no pull-request artifact is reused for release preparation.
  • Required checks: security ✅ · engine ✅ · voice ✅ · preview-bundle
  • CI artifact ID: 9823323994
  • CI artifact ZIP SHA256: 7626c0884c6fa72e213e9fa1a2937e8d95895ab087af60809265348813e8dc94
  • Preview archive: openVoiceInput_linux-preview-7a86ac5e2c2e-ubuntu-24.04-x86_64-py3.12.tar.gz
  • Preview archive SHA256: bc0298e5b7b7414291dd0f0010ad67da7082e85f7fab6004d2ddf1d93967c303
  • Debian package: open-voice-input-linux_0.1.0-alpha8-1_amd64.deb
  • Debian package SHA256: 8434a4f414641a85c11fa663f5a1f8287b48b04befc21c4338951838b44b8c8a
  • Debian package size / Installed-Size: 469888 bytes / 3112 KiB
  • Preview SBOM serial: urn:uuid:a6f168d1-0db7-5a6d-86d6-ec7504cc6c6c
    • Scope: project wheel + hash-locked runtime wheelhouse
  • Package SBOM serial: urn:uuid:154a2e68-9f33-5a01-bf94-17f4d2b36a04
    • Scope: packaged application/source commit + four bundled Python runtime wheels; Ubuntu system helpers remain external dependencies
  • Immutable release: enabled; GitHub locks this release on publication after draft-asset verification

English summary

Open Voice Input Linux v0.1.0-alpha.8 adds an explicit, default-off clipboard output target for remote-desktop canvases that cannot receive local IBus preedit. Native caret delivery remains the missing-config default. The target is frozen when each utterance starts; clipboard mode bypasses IBus acquisition, keeps provider partials only in bounded daemon memory, and writes exactly one authoritative final after optional local clean processing. It never copies partials, reads the existing clipboard, chooses a remote window, auto-pastes, sends Ctrl+V, or simulates typing. The user must confirm the remote field and paste manually.

Clipboard synchronization exposes the final to the local graphical session, Remmina/FreeRDP, the remote session, same-user applications on both sides, clipboard-history tools, and remote policy. It must not be used for passwords, PINs, API keys, one-time codes, recovery codes, or other secrets. clipboard-armed means only that the target was selected; clipboard-ready is only the historical fact that the last write succeeded and does not prove the clipboard still contains that value. Controller 1.6.1+ can surface these content-free notices without transcript or clipboard access; it remains a separate compatibility component rather than part of this repository's Debian package.

Before microphone or provider startup, the daemon accepts only fixed /usr/bin/xclip or /usr/bin/wl-copy helpers that appear as root-owned, non-group/world-writable regular executables and are paired with a live, session-matched local Unix display socket. Transcript bytes travel only on stdin. User-namespace UID mapping is considered only for fixed system ownership; an overflow UID is never trusted as a per-session X-socket owner, and malformed namespace metadata fails closed. PrivateTmp=yes remains enabled, with only /tmp/.X11-unix exposed read-only when present. These checks do not isolate mutually untrusted applications running under the same Unix UID.

Clipboard delivery has no authenticated remote focus, private-purpose flag, committed-span anchor, or surrounding text. It therefore skips automatic adaptive extraction with clipboard-output-no-surrounding-text; explicit review still starts from raw provider_final. Opted-in records advance to schema v4: raw provider and null human-review labels retain their meanings, while machine-derived delivery separately records the frozen caret or clipboard target. A record or review is offered only after the final reaches that target successfully; existing v1/v2/v3 records remain immutable and usage v2 continues counting delivered text.

Source installs keep xclip/wl-copy optional so default caret delivery is unaffected; users who select clipboard must install the helper matching their session. The Debian package depends on both Ubuntu xclip and wl-clipboard, while runtime still performs the same session/socket preflight. These external system helpers are not vendored Python wheels and are outside the file-level scope of the preview/package SBOMs.

The clipboard path has fake/offline coverage plus real xclip Unicode/emoji/newline round tri...

Read more

Open Voice Input Linux v0.1.0-alpha.7

Pre-release

Choose a tag to compare

@SidUParis SidUParis released this 01 Sep 19:22
Immutable release. Only release title and notes can be modified.
v0.1.0-alpha.7
6cb5dfc

Open Voice Input Linux v0.1.0-alpha.7

面向 Ubuntu / IBus 用户的公开技术预览:按下自选快捷键说话,识别文字通过 IBus 直接出现在当前光标;主路径不读取剪贴板、不发送 Ctrl+V,也不模拟逐字输入。

alpha.7 聚焦两件事:可靠地装配火山 ASR 2.0 的二遍终稿,并增加一个明确可选、完全本机、删除式的“清爽表达”终稿模式。忠实转写仍是默认;本版本没有增加 LLM、额外网络请求、录音启动等待或新的云端费用。它仍是 alpha,不是稳定版、生产就绪声明或“支持所有 Linux”的承诺。

这次更新

  • 按官方结构装配二遍终稿:客户端现在使用火山响应中带时间区间的 result.utterances[] 装配文本。definite=true 的权威二遍分句会替换同一或重叠区间的首遍草稿,并跨后续响应帧保留;重复的 full 帧按时间槽去重,新的二遍区间可以安全覆盖边界变化,后续独立分句不会丢掉更早已完成的内容。
  • 终止帧不再清空安全结果:连接级 final 即使不携带新文本,也会冻结此前安全装配的终稿;在没有更新二遍尾句时,最后一个已显示但尚未 definite 的尾句仍会保留。总装配继续受 4,096 codepoints / 16 KiB 上限约束,超限会安全失败。
  • 区分 full / single 的畸形响应:一个 advertised utterances 列表只要有任一成员缺少文本、布尔 definite 或整数时间区间,该帧的结构化区间就全部拒绝,不会半截污染已保留状态。在已验证的 result_type=full 下,可使用同帧非空、累计的 result.text 作为兼容 fallback;若为空则保留上一安全装配。在 result_type=single 下,result.text 只代表当前句,缺失区间时无法安全拼接,因此该帧触发不含正文的协议错误,也不会伪装成成功 final。初始化时会拒绝其他 result type。
  • 忠实转写仍是默认:缺失 output-style.json 时继续原样提交权威 provider final,升级不会静默改变用户输出。模式在每条听写开始时冻结,录音过程中保存设置只影响下一条。
  • 清爽表达是明确 opt-in:实时 partial 永远保持 provider 原样;仅在权威终稿到达后,使用本机、确定性、有界的删除规则,移除高置信的独立迟疑词和相邻的精确重复/自我重启片段。
  • 没有 LLM、额外网络或隐式改写:清理不会调用 LLM,不发起额外网络请求,不插入新词,不改变术语、数字、大小写或句式,也不会做全局标点标准化;只可能与目标口头词一并删除紧邻分隔符。异常、超长、超过 64 次删除、结果不可重放或会删掉全部词汇内容时,直接回退为原始 provider final,不中断输入。
  • 原文、交付结果和人工标签分开:数据留存开启时,新 record.json 使用 schema v3。原始 provider_final 仍是 teacher-unreviewed 伪标签,spoken_verbatim / preferred_output 仍为 null / unreviewed;实际插入文本单独记录为 machine-derived-unrevieweddelivery,包括模式、processor/version、处理 outcome,以及可从原始坐标精确重放的删除项。已有 v1/v2 记录不会重写。
  • usage v2 按实际交付统计:不含正文的 usage/<utterance_id>.json 明确统计实际插入文本的字符数;首页继续读取 schema-v1 摘要并保持它原来的 raw-provider 计数语义。
  • 避免把机器删词误学成 ASR 纠错:若清爽表达实际改变了提交文本,本条会立即消费自动观察并记录 postprocessed-output-not-safe-for-asr-learning,不会运行 adaptive extraction。若清理未改变文本或安全回退为 raw,原有自动观察行为不变。
  • 显式复核始终以原始识别为准--review-last 把原始 provider final 与实际 delivery 分开显示;原文只读,逐字复核编辑始终从 raw provider text 开始,delivery 只作为只读参考,不会成为纠错来源。
  • 清理审计与旧 review 兼容:相邻但不同类型/原因的删除会保留为各自独立的可重放审计项,不会被错误当成重叠而丢弃;alpha.7 设置端仍接受不含 delivered_text 的 alpha.6 review 响应,并安全地把 provider 原文作为只读 delivery fallback。
  • 设置帮助立即返回open-voice-input-settings -h/--help 现在会在注册 GtkApplication 前打印帮助并退出,不打开窗口,也不等待 GTK 应用生命周期;这同时让无桌面环境的 Debian package smoke 可确定结束。

清爽表达的保守边界

“清爽表达”不是完整的生成式润色器。它只处理当前规则能高置信判断的独立口头停顿和相邻精确重复,不会广泛改写表达、重排句子、猜测语义、替换专业词汇,也不保证删除每一个“就是、然后、其实”等词——这些词在不同上下文中可能承担真实语义。这个保守性是为了避免为了“像润色”而改变用户本意。

火山自身的 DDC / 二遍识别仍先于本地清理运行;本地清理只处理权威 final。它不会改善原始声学识别、修复削波音频或替代个人词表/纠错对。专业术语错误仍应通过显式词表、手工纠错或基于 raw provider final 的逐字复核处理。

数据留存与隐私边界

数据采集仍然默认关闭。明确开启后,一次成功且被当前 IBus 上下文接受的听写可以保存:

  • utterances/<id>/audio.wav:精确捕获的 16 kHz 单声道 WAV;
  • utterances/<id>/record.json:schema v1/v2/v3 不可变记录;
  • usage/<id>.json:不含转写正文的统计摘要;
  • feedback/<id>/<event_id>.json:append-only 的有界纠错决定。

delivery 是机器生成、未经人工复核的实际插入结果,不是 gold label。清理发生删除时,schema v3 保存的是可审计、可重放的删除坐标和原片段,不把清理结果冒充用户“实际说出”的逐字文本。首页只读取 usage 摘要,不打开音频或 record.json 正文。

output-style.json 使用已有用户私有目录:目录 0700、文件 0600、严格有界 schema 与原子写入。卸载会保留它;公开 preview / Debian 产物门禁会拒绝打包用户的 output-style.jsoninteraction.json

本版本仍然没有应用自带的 Orange 登录/挂载、resumable transfer、Google Drive 上传器、应用层静态加密、数据集审核/删除 UI、模型训练/微调/蒸馏或断线 fallback spool。用户自行挂载的 SSHFS/Orange/POSIX 文件系统仍是独立存储信任边界。

在线 ASR 与现有支持边界

  • 火山 BigModel ASR 2.0 仍是默认且唯一在维护者机器上用真实 Key 实机验收的后端。
  • Qwen 实时 ASR 与 OpenAI 批量转写有 fake-transport 协议测试,但没有真实用户 Key 验收;MiniMax 仍是不可选择的计划项。
  • 所有可运行云端后端均为 BYOK;没有本地/完全离线 ASR,也没有模型训练流水线。
  • 明确打包目标仍是 Ubuntu 24.04 x86_64 + IBus + CPython 3.12;代表性应用、真实设备和其他发行版覆盖仍在扩展。
  • 自动同输入框学习仍依赖应用提供可信 IBus surrounding text;Chromium/Electron 需要显式使用十分钟内存窗口中的 --review-last
  • 清爽表达只改变最终提交文本,不改变 live partial、录音、发送给 ASR 的 PCM、麦克风选择、输入增益或启动时延。

因此本版本适合作为明确标注的社区 alpha 测试,不应据此宣称广泛 Linux 支持、完整生成式润色、完全离线或生产就绪。

安装与升级

目标环境是 Ubuntu 24.04 x86_64 + IBus。下载本 Release 的 .deb 后运行:

sudo apt install ./open-voice-input-linux_*_amd64.deb

然后从应用菜单打开 Open Voice Input Linux,或运行:

open-voice-input-settings

在“云端识别”页可以选择“忠实转写”或“清爽表达”。忠实转写默认开启;保存后从下一条听写生效。卸载/升级会保留用户私有 Key、词表、纠错账本、输出方式、麦克风策略、留存选择与外部 dataset。

验证与供应链信息

  • Release URL: v0.1.0-alpha.7
  • Source commit: 6cb5dfcb6ed41023ca5c45eb1e3880118a95d56d
  • Pull request: #23
  • Signed annotated tag: v0.1.0-alpha.7 — GitHub verification: valid
  • Exact-main CI: run 33548249666
  • CI transparency: an earlier PR revision exposed a pre-existing near-20-second GTK application-lifecycle wait in the packaged settings --help smoke. The CLI now handles help before registering GtkApplication; the final PR head and the exact-main push both completed the package lifecycle. The release assets below come only from the successful exact-main push.
  • Required checks: security ✅ · engine ✅ · voice ✅ · preview-bundle
  • CI artifact ID: 9816381569
  • CI artifact ZIP SHA256: b38458dd8b62a141ac4f1c5e53b63caccb5c21122c86aa6c44a5205c70be65bb
  • Preview archive: openVoiceInput_linux-preview-6cb5dfcb6ed4-ubuntu-24.04-x86_64-py3.12.tar.gz
  • Preview archive SHA256: 52eb01d3cdf3daae5dc3e5862529b52ed7b94eab25e2203470e71d2bdaab2843
  • Debian package: open-voice-input-linux_0.1.0-alpha7-1_amd64.deb
  • Debian package SHA256: b3c1fb0b5ffe061f8ae6296268210020c0534b2ab92b0813e9b3e8719e02b99f
  • Debian package size / Installed-Size: 463668 bytes / 3080 KiB
  • Preview SBOM serial: urn:uuid:bc5dfc55-db03-51ba-84da-a642717feca1
    • Scope: project wheel + hash-locked runtime wheelhouse
  • Package SBOM serial: urn:uuid:671af2fe-ea5e-5eb4-9d04-8da48c0b0e9a
    • Scope: packaged application/source commit + four bundled Python runtime wheels
  • Immutable release: enabled; GitHub locks this release on publication after draft-asset verification

English summary

Open Voice Input Linux v0.1.0-alpha.7 now assembles Volcengine ASR 2.0 finals from the documented, timestamped result.utterances[] structure. Authoritative definite=true second-pass segments replace overlapping first-pass hypotheses and persist across later frames; repeated cumulative full frames are deduplicated, a terminal frame with no new text freezes the last safe assembly, and a trailing non-definite sentence is retained when no newer second-pass tail exists. Assembly remains bounded to 4,096 codepoints / 16 KiB.

Structured utterance parsing is all-or-nothing per frame. If any advertised utterance lacks text, Boolean definite, or integer timing, none of that frame's intervals enter retained state. In validated result_type=full mode, a non-empty cumulative result.text remains a compatibility fallback; in single mode it cannot be safely joined without timing, so the malformed frame produces a content-free protocol error rather than a false final. Other result types are rejected at initialization.

Faithful delivery remains the default whenever the new private output-style.json is absent. Users may explicitly opt into clean delivery: live partials stay raw, and only the authoritative final passes through a bounded, deterministic, local deletion-only processor for high-confidence standalone hesitations and adjacent exact/self-restart repetitions. It makes no LLM call or extra network request, inserts no words, does not rewrite terminology, numbers, case, or sentence structure, and safely falls back to the raw provider final on exceptions, limits, non-replayable edits, or deletion of all lexical content. This conservative cleanup is not a generative polishing model and intentionally does not remove every potentially meaningful discourse word.

Opted-in record.json advances to schema v3 while preserving raw provider_final as a teacher-unreviewed pseudo-label and null human-review labels. Actual inserted text is stored separately as machine-derived-unreviewed delivery metadata with replayable original-coordinate deletions. Usage schema v2 counts delivered characters while retaining schema-v1 reader semantics; existing record v1/v2 files are never rewritten. If clean delivery changes committed text, automatic adaptive extraction is skipped with postprocessed-output-not-safe-for-asr-learning; unchanged or raw-fallback output keeps existing observation behavior. Explicit review always starts from raw provider text, with delivered text shown read-only.

Collection remains off by default. There is no added startup quality gate, recording delay, audio filtering, gain change, local/offline ASR, application-owned Orange/Google Drive transport, dataset review/deletion UI, or training pipeline. Volcengine remains the only real-key-validated backend on the maintainer workstation; Qwen/OpenAI retain fake-transport-only claims and MiniMax remains planned. The package target remains Ubuntu 24.04 x86_64 + IBus, and broader physical-device/provider/application coverage is still incomplete.

Open Voice Input Linux v0.1.0-alpha.6

Pre-release

Choose a tag to compare

@SidUParis SidUParis released this 31 Aug 23:54
Immutable release. Only release title and notes can be modified.
v0.1.0-alpha.6
929be47

Open Voice Input Linux v0.1.0-alpha.6

面向 Ubuntu / IBus 用户的公开技术预览:按下自选快捷键说话,识别文字通过 IBus 直接出现在当前光标;主路径不读取剪贴板、不发送 Ctrl+V,也不模拟逐字输入。

alpha.6 聚焦两件事:在不增加录音启动质量门、不牺牲开口体感的前提下,为今后的训练数据留下可信的麦克风来源与事后质量证据;同时为 Chromium/Electron 等无法提供 IBus surrounding text 的应用补上一条显式、ID 绑定的纠错学习闭环。它仍是 alpha,不是稳定版、生产就绪声明或“支持所有 Linux”的承诺。

这次更新

  • 不增加启动质量门:没有预热等待、开头静音裁剪、自动拒绝、滤波、自动增益或输入流改写。普通听写与发送给 ASR 的 PCM 路径保持不变;质量统计只在用户明确开启留存、一次听写已经完成并被接受之后,由后台 writer 事后计算。
  • 记录“策略选择”与“实际路由”:新记录分别保存本次按用户策略选择的麦克风类别,以及捕获期间实际观察到的 Pulse source-output。实际路由未观察到时明确记为 unknown,不会拿“选择结果”冒充实际来源;观察异步运行、逐步退避至五秒且不阻塞录音。
  • 隐私安全的麦克风元数据:只保留宽泛类别、非唯一的型号/类别指纹、选择依据、DJI 链路状态和有界路由变化;不保存原始 Pulse source 名称、USB 序列号、蓝牙地址或用户自定义设备名。
  • 事后音频质量证据:为整体与第一秒记录削波比例、RMS/峰值 dBFS、直流偏移、零值比例及样本数。它们是之后筛选训练候选的数值证据,不会判定“好/坏”,也不会修复、丢弃或修改录音。
  • review-last 显式纠错:运行 open-voice-input-settings --review-last,可复核最近一次已接受的 provider final,并把副本修改为自己实际说出的逐字内容。适用于 Chromium/Electron 等不暴露可信 surrounding text 的应用。
  • 更准确的纠错统计:设置页区分显式词表、手工纠错、有效自适应规则以及下一次 provider 请求实际可用的合并纠错总数。确认候选后会重新加载账本,只有规则确实进入有界、冲突安全的 provider view 才报告成功。
  • 与原录音 ID 绑定的 feedback:显式复核必须匹配仍然最新且未过期的 utterance ID,并且只能消费一次。数据留存开启时,同一有界纠错结果会排入该 utterance 的 append-only feedback/ sidecar;界面明确区分“留存未启用”“入队失败”和“已入队、尚未证明落盘”。

为什么 vocabulary.json / corrections.json 可以不存在

这两个文件是用户显式维护的可选提示:没有显式词表或手工纠错时,文件不存在就准确代表 0 条,而不是后台故障。自动学习只写独立的私有 adaptive-corrections.json;它不会创建空的手工文件,也不会把整段供应商输出复制成规则。

设置页现在同时显示:

  • 显式词表条数;
  • 手工纠错条数;
  • 自适应账本中的候选、有效、冲突或暂停状态;
  • 经过手工优先级、冲突/重叠/级联抑制和 50 对上限后,下一次识别请求真正能收到的有效规则数。

Chromium / Electron 下的复核边界

守护进程只在内存中保留最近一条已接受的 provider final 与 utterance ID,最长十分钟;新结果会替换旧结果,服务退出即清空。设置程序通过主机专用的私有 Unix socket 读取它:父目录为 0700、socket 为 0600,并且位于 Flatpak 控制器可见的 runtime 子树之外。原文在界面中只读;提交时只发送当前 review ID 与用户明确修改的逐字复核。

过期、已被新听写替换、重复提交或 ID 不匹配都会被拒绝。成功更新自适应账本后,该 review 会被消费;即使可选 feedback sidecar 入队失败,也不会让同一修改重复增加支持次数。

本流程不读取剪贴板、AT-SPI 树、全局键盘、Rime 历史或 Chrome 的后续编辑,也不会把复核全文写进日志、命令行参数或持久 review 文件。去口头词、改写和表达润色不是“实际逐字说出”,不能静默当作 ASR 金标。Chromium 明确报告 surrounding text 不可用时,输入法会立即恢复之前的 IBus engine,不再无意义地占用五秒观察窗口。

数据格式:v1 与 v2 共存

数据集目录和 marker 仍为 openvoiceinput-dataset-v1,不可变的 utterances/<id>/audio.wav + record.json 两文件契约也保持不变。已有 schema-v1 record.json 不移动、不重写,仍然有效;同一个数据集可以同时包含旧 v1 和新 v2 记录。

新生成的 schema v2 只增加可选的顶层 microphone 对象与 audio.quality 数值摘要,原有 audio、provider 和 labels 字段语义不变。读取器应接受 v1/v2,并把旧记录中缺失的麦克风/质量字段解释为“未观察”,不能根据文件名或当前桌面状态反推历史来源。

可选数据留存与 SSHFS 边界

数据采集默认关闭。明确开启并选择现有本地目录或操作系统已经挂载的兼容 POSIX 目录后,成功且被当前 IBus 上下文接受的听写才可能发布:

  • utterances/<id>/audio.wav:精确捕获的 16 kHz 单声道 WAV;
  • utterances/<id>/record.json:不可变的 v1/v2 元数据与标签角色;
  • usage/<id>.json:不含转写正文的统计摘要;
  • feedback/<id>/<event_id>.json:append-only 的有界纠错决定。

为兼容 owner-mapped SSHFS/FUSE,feedback 发布校验现在接受用户所有、具备 owner 读写且 group/other 无权限的 06000700 普通文件。符号链接、外部 UID、缺少 owner 读写权限、任何 group/other 权限仍会 fail closed。这个兼容规则只承认文件系统实际暴露的 owner-private 状态,不会把不执行 POSIX 权限的远程存储变安全。

provider_final 仍是 teacher-unreviewed 伪标签;不可变记录中的 spoken_verbatimpreferred_output 仍为 null / unreviewedreview-last 更新的是自适应账本和可选 append-only feedback,不会倒写原 record.json,也不等于已经完成逐条听音审核。

本版本仍然没有应用自带的 Orange 登录/挂载、resumable transfer、Google Drive 上传器、应用层静态加密、数据集审核/删除 UI、模型训练/微调/蒸馏或断线 fallback spool。用户自行挂载的 SSHFS/Orange/POSIX 文件系统是独立的存储信任边界;共享、备份、权限和静态保护由该文件系统决定。远程挂载卡住或断开不会中断普通听写,但尚未发布的可选记录可能丢失;正常关机只给 writer 有界 drain。

在线 ASR 与麦克风的既有边界

  • 火山引擎 BigModel ASR 2.0 仍是默认且唯一在维护者机器上用真实 Key 实机验收的后端。
  • Qwen 实时 ASR 与 OpenAI 批量转写有 fake-transport 协议测试,但本版本没有真实用户 Key 验收;MiniMax 仍是不可选择的计划项。
  • 所有可运行云端后端均为 BYOK,音频、费用、地域处理、服务端留存和账户政策遵循用户选择的供应商;没有本地/完全离线 ASR,也没有训练流水线。
  • 麦克风优先级完全由用户保存。每次新听写重新选择与回退,只作用于本应用的 capture stream,不修改播放 sink、系统默认输入、增益或静音;一句话已经开始后不会 mid-utterance handoff。
  • 点按模式保持可用;真正的按住说话仍要求外部集成发送独立 press / release 边沿。本项目不扫描全部 /dev/input,也不宣称解决通用 Wayland 全局 key-up。

当前支持范围与已知缺口

  • 明确目标:Ubuntu 24.04 x86_64、IBus、CPython 3.12、支持标准 IBus preedit 的应用。
  • 自动同输入框学习仍依赖应用提供可信 IBus surrounding text;Chromium/Electron 需要在十分钟内显式打开 --review-last
  • 事后质量统计不会决定记录是否适合训练,也不会修复已经削波或损坏的音频。
  • 首页统计只读取新发布的 usage/*.json,不会打开旧 record.json 来回填历史 transcript;挂载不可用时显示未知/不可用而不是 0。
  • Qwen/OpenAI 尚无真实 Key 验收;全物理 DJI/耳麦/内置组合、断连重连、真实挂载与代表性应用矩阵仍不完整。
  • CI 的 fake-device、fake-transport、Xvfb/D-Bus/IBus smoke 和无 Key package lifecycle 不等于上述物理验收。

因此本版本适合作为明确标注的社区 alpha 测试,不应据此宣称广泛 Linux 支持、完全离线或生产就绪。

安装与升级

目标环境是 Ubuntu 24.04 x86_64 + IBus。下载本 Release 的 .deb 后运行:

sudo apt install ./open-voice-input-linux_*_amd64.deb

然后从应用菜单打开 Open Voice Input Linux,或运行:

open-voice-input-settings

卸载/升级会保留用户私有 Key、词表、纠错账本、麦克风策略、留存选择与外部 dataset。

验证与供应链信息

  • Release URL: v0.1.0-alpha.6
  • Source commit: 929be47e10699d76e698b028f3b044cacffe1582
  • Pull request: #22
  • Signed annotated tag: v0.1.0-alpha.6 — GitHub verification: valid
  • Exact-main CI: run 33451916005
  • CI transparency: attempt 1 hit one runner-side 20-second timeout while invoking
    the packaged murmur-voice-daemon --help; the same exact commit was rerun,
    completed the package lifecycle, and produced the verified attempt-2 artifact.
  • Required checks: security ✅ · engine ✅ · voice ✅ · preview-bundle
  • CI artifact ID: 9780200412
  • CI artifact ZIP SHA256: 29261f5d88e63011521c160d9772e7f100776bbecadfbe032e8cd28736683c16
  • Preview archive: openVoiceInput_linux-preview-929be47e1069-ubuntu-24.04-x86_64-py3.12.tar.gz
  • Preview archive SHA256: ad5021f626d3a905155b9de85bdea2ac13f00e583cc2ba40ef7d7059d3c4eaae
  • Debian package: open-voice-input-linux_0.1.0-alpha6-1_amd64.deb
  • Debian package SHA256: 37eea6d5c4f87c625c9fe7acbac7c96a3e381835945d217d9e4d235fae99b0d4
  • Debian package size / Installed-Size: 453104 bytes / 3024 KiB
  • Preview SBOM serial: urn:uuid:89049faa-6e20-5d7a-8419-3f2cebf534f7
    • Scope: project wheel + hash-locked runtime wheelhouse
  • Package SBOM serial: urn:uuid:972acf4e-e5ce-5f9f-b485-0a9380625750
    • Scope: packaged application/source commit + four bundled Python runtime wheels
  • Immutable release: enabled; GitHub locks this release on publication after draft-asset verification

English summary

Open Voice Input Linux v0.1.0-alpha.6 adds privacy-preserving microphone provenance and post-capture PCM diagnostics without a startup quality gate, warm-up delay, filtering, rejection, gain change, or provider-stream modification. New schema-v2 records distinguish the microphone selected by policy from the actual Pulse source-output observed during capture and add whole-record/first-second clipping, RMS/peak, DC-offset, and zero-fraction evidence. Existing schema-v1 records remain immutable and valid in the same openvoiceinput-dataset-v1 tree; readers should treat missing v2 fields as unobserved.

For Chromium/Electron and other applications without trustworthy IBus surrounding text, open-voice-input-settings --review-last provides an explicit correction path. The daemon retains only the latest accepted final and utterance ID in memory for ten minutes and exposes it over a host-only private socket; submission is current-ID-bound and one-shot. When collection is enabled, the same bounded decision is queued under that utterance's append-only feedback sidecar. Queue acceptance is not claimed as durable publication. Missing vocabulary.json and corrections.json files correctly mean zero user-managed entries; automatic learning lives only in the private adaptive ledger, and the UI now reports the exact conflict-safe correction count compiled for the next provider request.

Collection remains off by default. Provider finals are teacher-unreviewed; immutable spoken_verbatim and preferred_output labels remain unset. Owner-private 0700 files exposed by owner-mapped SSHFS/FUSE are accepted alongside 0600 for feedback validation, while symlinks, foreign ownership, missing owner read/write, and any group/other permissions still fail closed. There is no application-owned Orange authentication/mount, resumable transfer, integrated Google Drive uploader, at-rest encryption, dataset review/delete UI, training pipeline, or fallback spool. User-mounted storage remains a separate trust boundary.

Volcengine remains the default and only real-key-validated backend on the maintainer workstation. Qwen streaming and OpenAI batch transcription are fake-transport-tested without a real-key acceptance claim; MiniMax is planned and not selectable. There is no local/offline ASR or model training. Microphone selection remains per dictation and app-scoped with no mid-utterance handoff or playback-sink change; push-to-talk still requires an external integration that emits separate press/release edges. The supported package target remains Ubuntu 24.04 x86_64 + IBus, and broad physical-device/provider/application validation is still incomplete.

Open Voice Input Linux v0.1.0-alpha.5

Pre-release

Choose a tag to compare

@SidUParis SidUParis released this 30 Aug 23:55
Immutable release. Only release title and notes can be modified.
v0.1.0-alpha.5
317e195

Open Voice Input Linux v0.1.0-alpha.5

面向 Ubuntu / IBus 用户的公开技术预览:按下自选快捷键说话,识别文字通过 IBus 直接出现在当前光标;主路径不读取剪贴板、不发送 Ctrl+V,也不模拟逐字输入。

alpha.5 把设置界面、自适应纠错、可选数据留存和云端识别后端整理成一套更完整、但边界仍然明确的产品流程。它仍是 alpha,不是稳定版、生产就绪声明或“支持所有 Linux”的承诺。

这次更新

  • 中文优先的原生 GTK4 控制台:新增首页,以及云端识别、快捷键与按住说话、个人词表、纠错学习、麦克风、数据留存等任务式页面;状态和隐私说明始终可见。
  • 今日与累计统计:首页显示字数、录音时长和听写次数,只在后台读取不含转写正文的 usage/<utterance_id>.json 摘要,不打开音频或 record.json
  • 点按与按住说话:保留 toggle,新增 press / release 状态机;重复 key-down、过短误触、乱序事件、取消/错误和丢失 release 都有有界处理。
  • 自适应纠错 v2:单一高置信术语/拼写修正可以自动启用;多处独立修改拆成待确认候选,冲突项隔离;设置页可查看原因、确认候选,也可显式提交“识别原文 / 修改后整句”。v1 账本会安全迁移为 v2 五状态结构。
  • 可审计的反馈记录:明确开启数据留存后,可把有界纠错决定追加到 feedback/<utterance_id>/<event_id>.json;不可变的 utterances/<id>/audio.wav + record.json 两文件契约不会被改写。
  • 后端中立的 ASR 层:火山引擎仍是默认;Qwen 实时 ASR 与 OpenAI 停录后批量转写已接入固定官方端点;MiniMax 保留为不可选择的计划项,不伪造未验证接口。
  • 轻量约束继续生效.deb 不捆绑 Electron 或本地 ASR 权重;exact-commit CI 会拒绝大于 5 MiB 的包或大于 10 MiB 的 Installed-Size

安装与升级

目标环境是 Ubuntu 24.04 x86_64 + IBus。下载本 Release 的 .deb 后运行:

sudo apt install ./open-voice-input-linux_*_amd64.deb

然后从应用菜单打开 Open Voice Input Linux,或运行:

open-voice-input-settings

从 alpha.4 .deb 可用同一条 apt install 升级。若仍安装着旧 source/offline preview,Debian pre-install 会拒绝被旧高优先级代码遮蔽;请先从对应的可信 preview 目录运行 ./scripts/uninstall-user.sh。卸载/迁移保留用户私有 Key、词表、纠错、麦克风策略、采集选择与外部 dataset。

在线 ASR、费用与隐私

  • 火山引擎 BigModel ASR 2.0 是默认且目前唯一在维护者机器上用真实 Key 实机验收的后端。
  • Qwen 实时 ASR 与 OpenAI Transcribe 具有完整 fake-transport 协议测试,但本版本没有真实用户 Key 验收;OpenAI 是停录后批量 final,不提供伪造的实时 partial。
  • MiniMax 不是可运行选项;本地 / 完全离线 ASR 和模型训练尚未实现
  • 所有可运行后端都使用用户自己的账户与 Key。音频只在用户主动听写后发送给当前选择的在线服务;配额、计费、地域处理、服务端留存与账户政策遵循所选服务及用户配置。
  • 取消会停止本地捕获并阻止本地提交,但无法撤回已经上传给供应商的音频。项目不提供共享 Key,也不会在“保存设置”时联系供应商。

按住说话的真实边界

普通 GNOME/KDE activation 快捷键适合 murmur-voice-daemon toggle。真正的按住说话必须由桌面、键盘或辅助工具分别发送:

murmur-voice-daemon press
murmur-voice-daemon release

本版本没有宣称解决通用 Wayland 全局 key-up,也不会扫描全部 /dev/input;如果现有集成只能产生一次 activation,请继续使用 toggle。本项目不硬编码 Right Alt 或任何创作者个人按键偏好。

自适应学习的真实边界

自动学习依赖同一焦点应用在 final 后最多 5 秒内提供可信的 IBus post-commit surrounding text。失焦、超时、private/不支持的输入框、歧义编辑和整句润色不会被静默提升为全局规则;应用无法提供可信证据时,请使用设置页的显式“provider text / preferred text”入口。

该流程不读取剪贴板、AT-SPI、全局键盘、Rime 历史或其他窗口,也不保存 surrounding 全文。纠错账本与 feedback 事件不是人工金标,更不是在线训练或“自回归模型”;模型训练、听音审核和评测仍是后续独立流程。

可选数据留存与远程存储边界

数据采集默认关闭。用户明确开启并选择一个已经存在的本地目录或操作系统已挂载的兼容目录后,成功且被当前 IBus 上下文接受的听写才可能发布:

  • utterances/<id>/audio.wav:16 kHz 单声道 WAV;
  • utterances/<id>/record.json:不可变元数据与标签角色;
  • usage/<id>.json:不含转写正文的统计摘要;
  • feedback/<id>/<event_id>.json:捕获成功时的 append-only 有界纠错决定。

provider_final 始终是 teacher-unreviewed 伪标签;spoken_verbatimpreferred_output 仍为 null / unreviewed。远程存储、备份或原子发布不会把它变成 gold label。

本版本没有应用自带的 Orange 登录/挂载、resumable transfer、Google Drive 上传器、应用层静态加密、审核/删除 UI、模型训练/微调/蒸馏,也没有断线后的本地 fallback spool。用户自行挂载的 SSHFS/Orange/POSIX 文件系统是独立的存储信任边界;权限、共享、备份与静态保护由该文件系统决定。Google Drive 推荐只通过用户另行授权的 rclone copy 异步备份已经完整发布的记录。

远程挂载停滞或断开时,普通听写继续,但尚未发布的记录可能丢失;正常关机只给 writer 最多 10 秒有界 drain。已发布记录不会自动删除,卸载也会保留它们。

统计与麦克风边界

  • 首页统计只覆盖 alpha.5 起新发布的 usage/*.json;不会为了回填旧统计而读取历史 transcript。采集关闭时不扫描旧目录,挂载离线时显示“不可用/未知”,不会误报为 0。
  • 麦克风顺序完全由用户保存;每次新听写重新枚举并按顺序回退。选择只作用于本应用新开的 capture stream,不主动更改播放设备、系统默认输入、音量或静音。
  • DJI 链路状态与设备变化在下一次听写时重新判断;已经开始的一句话不会 mid-utterance handoff。

当前支持范围与已知缺口

  • 明确目标:Ubuntu 24.04 x86_64、IBus、CPython 3.12、支持标准 IBus preedit 的应用。
  • Qwen/OpenAI 尚未真实 Key 验收;MiniMax、本地 ASR、训练/微调均未实现。
  • 新鲜的全物理矩阵仍未完成:真实供应商账户、DJI/耳麦/内置组合及物理断连重连、真实挂载采集目录、GNOME X11/Wayland 和代表性应用仍需社区继续验证。
  • CI 的 fake-device、fake-transport、Xvfb/D-Bus/IBus smoke 与无 Key package lifecycle 不等同于上述物理验收。
  • 当前 transition engine 在听写和最多 5 秒纠错观察期间临时使用 voice-only IBus engine;永久 librime / Rime Ice 合并仍在路线图。
  • 本包不自动注册系统级快捷键,也不包含通用悬浮指示器。

因此本版本适合作为明确标注的社区 alpha 测试,不应据此宣称广泛 Linux 支持、完全离线或生产就绪。

验证与供应链信息

  • Release URL: v0.1.0-alpha.5
  • Source commit: 317e1950582d85b759eada59d6174b9cb344c1ce
  • Pull request: #21
  • Signed annotated tag: v0.1.0-alpha.5 — GitHub verification: valid
  • Exact-main CI: run 33342652443
  • Required checks: security ✅ · engine ✅ · voice ✅ · preview-bundle
  • CI artifact ID: 9741025092
  • CI artifact ZIP SHA256: c6b315db8152f9e1666b1173e0af2dedb4c4a91cde984d7c2de8430c997d5c01
  • Preview archive: openVoiceInput_linux-preview-317e1950582d-ubuntu-24.04-x86_64-py3.12.tar.gz
  • Preview archive SHA256: d90da87678722ac6a271d5b603c997a0bc0877339fb15b56f450049da562fbc0
  • Debian package: open-voice-input-linux_0.1.0-alpha5-1_amd64.deb
  • Debian package SHA256: 831c52f6c60c0c8968fd44cf212a968c90432aa27c824fca7d78005f68f90dde
  • Debian package size / Installed-Size: 440716 bytes / 2948 KiB
  • Preview SBOM serial: urn:uuid:0c4aee89-2e61-5ac6-b479-b9b3fb427df5
    • Scope: project wheel + hash-locked runtime wheelhouse
  • Package SBOM serial: urn:uuid:6aaf20a1-5881-5187-b30f-d4fbb69477f9
    • Scope: packaged application/source commit + four bundled Python runtime wheels
  • Immutable release: enabled; GitHub locks this release on publication after draft-asset verification

English summary

Open Voice Input Linux v0.1.0-alpha.5 adds a Chinese-first native GTK4 dashboard, daily and cumulative transcript-free usage counters, configurable toggle/push-to-talk interaction, adaptive-correction v2 with review candidates and explicit feedback, append-only dataset feedback events, and provider-neutral ASR adapters.

Volcengine remains the default and the only path accepted with a real key on the maintainer workstation. Qwen streaming and OpenAI batch transcription are fake-transport-tested but have no real-key acceptance claim in this release; MiniMax is planned and not selectable. Every working cloud backend is BYOK and may incur provider charges. Audio, regional processing, server-side retention, and account policy follow the provider selected by the user. There is no local/offline ASR or model training yet.

Collection remains off by default. Provider finals are teacher-unreviewed; spoken_verbatim and preferred_output remain unset. This release has no application-owned Orange mount/authentication, resumable upload, integrated Google Drive uploader, at-rest encryption, review/delete UI, training pipeline, or fallback spool. User-mounted storage is a separate trust boundary, and an unavailable mount can lose an unpublished optional record without stopping normal dictation.

Normal desktop activation supports toggle. Push-to-talk requires an external integration that emits separate press and release edges; this release does not claim a universal Wayland global-release hook. Adaptive learning requires trustworthy same-focus post-commit evidence and otherwise uses an explicit provider-text/preferred-text fallback; it does not read the clipboard or globally log keys. Dashboard statistics cover newly indexed records only. The supported package target remains Ubuntu 24.04 x86_64 + IBus, with broad physical microphone/provider/application validation still incomplete.

Open Voice Input Linux v0.1.0-alpha.4

Pre-release

Choose a tag to compare

@SidUParis SidUParis released this 30 Aug 20:49
Immutable release. Only release title and notes can be modified.
v0.1.0-alpha.4
82c9fed

Open Voice Input Linux v0.1.0-alpha.4

面向 Ubuntu / IBus 用户的公开技术预览:按下快捷键说话,识别文字以 IBus preedit 直接显示在当前光标处,不经过剪贴板、Ctrl+V 或模拟逐字输入。

本版本首次提供普通用户可直接安装的 Ubuntu .deb,并重做了中文优先的项目首页、交互演示和发布资料。它仍是 alpha,不是稳定版或广泛发行版支持声明。

这次更新

  • 新增独立的 Ubuntu 24.04 amd64 .deb:应用代码与锁定依赖安装到 root-owned /usr/lib/open-voice-input-linux/python,命令安装到 /usr/bin,并包含 systemd user units、桌面入口、AppStream 元数据和图标。
  • 麦克风与网络无关的 IBus engine 可随图形会话启动;语音服务仍需用户在设置页明确启用。
  • .deb 与离线/source preview 都从同一个 exact commit 和 hash-locked wheelhouse 构建;CI 各构建两次并逐字节比较。
  • 新增 package-scoped CycloneDX SBOM、BUILD-INFO 源提交绑定、无 Key 的安装/命令/卸载 smoke。
  • README 改为中文优先、英文辅助;新增可复现的 13 秒合成交互 GIF、1200×600 社交预览、兼容性报告表单与中文宣传资料。
  • 本 Release 恰好包含四个资产:.tar.gz、其 checksum、.deb、其 checksum。

安装

当前安装目标仅为 Ubuntu 24.04 x86_64 + IBus

下载本 Release 的 .deb 后运行:

sudo apt install ./open-voice-input-linux_*_amd64.deb

然后从应用菜单打开 Open Voice Input Linux,或运行:

open-voice-input-settings

填入你自己的火山引擎 API Key、检查麦克风优先级,并明确启用语音服务。

快捷键

本 alpha 不会自动注册系统级快捷键。请在 GNOME/KDE 键盘快捷键设置中,将你习惯的按键(推荐右 Alt)绑定到:

murmur-voice-daemon toggle

第一次触发开始听写,第二次触发停止录音并等待最终识别结果。

云服务、费用与本地 ASR

当前唯一实现的 ASR 后端是 火山引擎 BigModel ASR 2.0:需要互联网连接和用户自己的 API Key(BYOK);用量与费用记入用户自己的火山账户。本项目不提供共享 Key。本版本没有本地或完全离线 ASR,也没有模型训练或微调功能。

可选训练数据采集

训练数据采集默认关闭。用户明确启用并选择一个已有的本地目录或操作系统已挂载目录后,成功听写可以保存 16 kHz 单声道 WAV 与版本化 record.json

  • provider_finalteacher-unreviewed 供应商伪标签,不是 gold label。
  • 用户随后在输入框中的修改目前不会回填既有训练记录;spoken_verbatimpreferred_output 仍未审核/未填写。
  • 本版本不负责登录或挂载 Orange/Google Drive,也没有 resumable transfer、应用层加密、审核/删除 UI、训练管线或失败后的本地 fallback spool。
  • 用户自行挂载的 SSHFS、Orange 或其他 POSIX 文件系统路径可作为普通目录选择;权限、备份与静态保护属于该文件系统的独立信任边界。
  • 后台 writer 仅有有界队列与有界 shutdown drain;挂载停滞时可能丢失尚未发布的 staged record,但采集故障不会停止普通听写。

麦克风选择边界

每次新听写都会重新枚举设备,并按用户保存的完整优先级在 DJI、耳麦、其他外置和内置麦克风之间回退。推荐默认顺序为:

DJI > headset > other external > built-in

选择只绑定本应用新开的录音流,不主动设置系统默认输入、播放设备、音量或静音。一次已经开始的听写不会在中途切换麦克风。

从旧 source preview 迁移

如果当前用户装过旧版 source/offline preview,.deb 会在高优先级旧安装仍存在时拒绝继续,避免 dpkg 显示新版但桌面实际运行旧代码。请从原来可信、已验证的 preview 解压目录先运行:

./scripts/uninstall-user.sh

然后再安装 .deb。迁移会移除旧版管理的代码和 units,但保留用户私有 API Key 配置、词表、纠错记忆、麦克风策略、采集选择和外部 dataset。

当前支持范围与已知缺口

  • 目标环境:Ubuntu 24.04 x86_64、IBus、CPython 3.12、支持标准 IBus preedit 的应用。
  • 尚未完成 alpha.4 的新鲜全物理矩阵:真实火山账户、DJI/耳麦/内置组合与物理断连重连、远程挂载采集目录、GNOME X11/Wayland 与代表性应用组合。
  • CI 的 fake-device、私有 Xvfb/D-Bus/IBus smoke 和无 Key .deb lifecycle 不等于上述物理验收。
  • 自适应纠错依赖可信的 IBus surrounding-text;private、失焦、歧义或不支持的客户端不会学习。
  • Companion Doubao Murmur right-Alt controller 仍是另一个独立、controller-only 项目。

因此本版本可以作为明确标注的 alpha 发布,但不能据此宣称广泛 Linux 支持或生产就绪。

验证与供应链信息

  • Source commit: 82c9fed1f2e3004a27f211ccb722628fbbfa2492
  • Pull request: #18
  • Signed annotated tag: v0.1.0-alpha.4 — GitHub verification: valid
  • Exact-main CI: run 33334287031
  • Required checks: security ✅ · engine ✅ · voice ✅ · preview-bundle
  • CI artifact ID: 9738558393
  • CI artifact ZIP SHA256: 619ab94b1c7f7941dd0e07c68fae80971c3c1dd64a9934d095490c080336b385
  • Preview archive SHA256: 4358cb9a96fab93042d8fbea18f8a7f84052c68f1eea677e6e4a200058243675
  • Debian package SHA256: 8c96ed924f0e80c56e66ba3c748f3de1e64a7940749f49be091ca945734f090e
  • Preview SBOM serial: urn:uuid:33339c6d-bc94-5617-a586-50a541683a69
    • Scope: project wheel + hash-locked runtime wheelhouse
  • Package SBOM serial: urn:uuid:1557d7c0-3a4e-562f-9afd-11ab9ed91999
    • Scope: packaged application/source commit + four bundled Python runtime wheels
  • Immutable-release policy: enabled;本 Release 只会在 draft 资产被重新下载和复验后发布。

English summary

This alpha adds a standalone Ubuntu 24.04 amd64 .deb, reproducible exact-commit package builds, package-scoped CycloneDX provenance, and a Chinese-first landing experience. It targets IBus on Ubuntu 24.04 x86_64, requires the user's own Volcengine account and billing, does not yet include local ASR or a built-in global shortcut, and keeps optional WAV/JSON collection disabled by default. Provider finals remain unreviewed teacher labels, and later user edits are not yet backfilled into training records.

Open Voice Input Linux v0.1.0-alpha.3

Pre-release

Choose a tag to compare

@SidUParis SidUParis released this 30 Aug 11:40
Immutable release. Only release title and notes can be modified.
v0.1.0-alpha.3
d656f79

Open Voice Input Linux alpha.3 makes microphone selection user-configurable
and dynamic while retaining bounded adaptive corrections and default-off local
dataset collection.

Highlights

  • The native settings window now lets the user order four microphone
    categories: DJI, headset, other external, and built-in. The recommended
    default is DJI > headset > other external > built-in, but the complete
    order can be changed and saved privately.
  • Every new dictation reloads the saved policy and re-enumerates available
    inputs. Unavailable or unresolved categories fall through in saved order.
    Within one category, an exact saved source is preferred, followed by the
    current system default in that category and then a unique candidate.
    Ambiguous categories are skipped instead of guessed.
  • DJI routing now respects the saved position. A proven-online transmitter
    makes its receiver eligible, a proven-offline receiver is excluded, and an
    unknown link state is not promoted ahead of known-working alternatives. An
    already-default unique DJI source may remain only as a last-resort continuity
    path when no verified non-DJI or recoverable input exists.
  • Conservative recovery of a hidden built-in input participates at the
    built-in category's saved rank. Failed recovery is rolled back safely before
    considering a lower-priority source. USB/external cards are never recovered
    merely because inconsistent metadata labels them internal.
  • Routing remains application-scoped. The daemon binds only its newly opened
    capture stream and does not request a playback-sink, desktop-wide
    default-source, mute, volume, or mid-utterance route change.
  • A missing microphone policy uses the documented recommended default without
    writing a file. An existing malformed, unsafe, or unsupported policy rejects
    the next dictation with microphone-policy-invalid before preedit
    acquisition, provider construction, USB probing, profile mutation, or
    microphone capture.
  • GTK settings, private configuration, installer, upgrade, uninstall, service
    units, documentation, bundle verification, and SBOM coverage were updated
    for the new policy.

Optional local dataset collection

  • Collection remains off by default. The user must explicitly select an
    existing absolute local or mounted folder and enable it.
  • An accepted authoritative final can publish the exact 16 kHz mono signed
    16-bit WAV together with a versioned JSON record.
  • provider_final remains teacher-unreviewed: it is a pseudo-label, not
    ground truth. spoken_verbatim and preferred_output remain null and
    unreviewed until a separate human-review workflow exists.
  • This release does not transfer records to Orange, upload an additional cloud
    dataset, encrypt the dataset at the application layer, provide review/delete
    UI, or train, fine-tune, or distil a model.
  • Storage is best-effort direct to the selected folder and has no fallback
    spool. It never silently switches to another local or cloud destination.
  • Normal service shutdown gives the background writer a bounded 10-second
    drain within systemd's 30-second stop budget. A stalled or unavailable mount
    can lose an unpublished staged record; already published records remain.
  • Collection failures are reported independently and do not stop normal
    dictation. Uninstall retains the private collection setting and datasets in
    user-selected folders.

Important alpha limitations

  • The source is fixed after a recording stream opens. Disconnecting or changing
    microphone state does not hand an active utterance to another device; the
    next dictation re-evaluates the saved order.
  • Bluetooth A2DP playback alone does not expose a microphone. This release can
    use an already-active HSP/HFP input but does not switch the headset's global
    Bluetooth profile or reduce playback quality automatically.
  • Classification relies on PulseAudio/PipeWire metadata. An unlabelled device
    may be classified as other external, and an ambiguous category may be
    skipped. Exact same-category source preferences exist in the private schema
    but are not yet exposed in the settings UI.
  • Fake-device tests cover the policy and recovery branches, but the complete
    physical matrix remains an explicit alpha validation gap: built-in only;
    headset plus built-in; DJI plus headset plus built-in; unavailable
    higher-priority inputs; disconnect/reconnect; hidden-profile recovery; and
    representative real-provider/application testing. A real mounted collection
    destination is also outside the completed release matrix.
  • Automated and offline-artifact verification used no microphone, provider key,
    user recording, dictated text, or selected dataset path.
  • Adaptive correction still requires trustworthy IBus surrounding-text
    support. Unsupported, private, unfocused, ambiguous, insertion-only, and
    deletion-only cases learn nothing; this alpha has no settings switch for the
    adaptive observation window.
  • This preview targets Ubuntu 24.04 x86_64 with CPython 3.12. It is not a
    distribution-native or broadly qualified Wayland release.
  • The companion Doubao Murmur right-Alt controller remains a separate
    controller-only project and release.
  • Uninstall retains private key, vocabulary, manual-correction,
    adaptive-memory, microphone-policy, collection-setting, and external dataset
    files.

Audio is uploaded to Volcengine only during explicit dictation and is billed
under the user's account. Local collection is independently opt-in and does
not add another network upload.

Integrity and provenance

  • Source commit: d656f7986a2c0f0149955688b238640338afeef0
  • Signed annotated tag: v0.1.0-alpha.3 — GitHub verification: valid
  • CI run: https://github.com/SidUParis/openVoiceInput_linux/actions/runs/33308965643
  • CI artifact ID: 9731381351
  • CI artifact ZIP SHA256: dec5d37c3f539183fcc53c050530e62ccb1a9ffb194605f7e55953770ab71407
  • Archive SHA256: 0ba904b72a5edb3dc749b33d98dff932c4c216476e70314f6caeaedcebc0f060
  • Checksum-file SHA256: 418e4bf582610abf91a561f5d5769a31513ba05c71e5fe80856e26323ef5a591
  • CycloneDX SBOM serial: urn:uuid:f79211cb-8895-5de1-ad1b-82db002abda7
  • Repository immutable-release policy: enabled; publication is gated on
    post-publish immutable=true verification.

See CHANGELOG.md, README.md, docs/README.zh-CN.md,
docs/personal-asr-data-plan.md, and docs/release-process.md for
installation, routing, privacy, dataset semantics, and troubleshooting.

Open Voice Input Linux v0.1.0-alpha.2

Pre-release

Choose a tag to compare

@SidUParis SidUParis released this 30 Aug 10:36
Immutable release. Only release title and notes can be modified.
v0.1.0-alpha.2
c800b22

Open Voice Input Linux alpha.2 adds adaptive recognition corrections, link-aware DJI microphone selection, and optional local collection of audio/metadata pairs for future personal-ASR dataset work.

Highlights

  • After an authoritative final is committed, a bounded five-second same-focus observation can learn one replacement for future dictations. The private adaptive ledger rejects conflicting, overlapping, cascading, cyclic, or unsafe rules; manual corrections remain authoritative.
  • Microphone routing is re-evaluated before every dictation. An online DJI Mic Mini 2 is bound to that capture stream; a proven-offline receiver is excluded in favor of an unambiguous built-in/fallback input, including conservative recovery of a hidden input profile. Unknown link state preserves the normal system choice.
  • Routing is application-scoped: the app does not request a playback-sink or desktop-wide default-source change, and it never hands an active utterance between microphones.
  • Optional local data collection is disabled by default. When explicitly enabled and given a folder, an IBus-accepted authoritative final can publish one bounded WAV plus versioned JSON record using a background writer.
  • Collected provider_final text is marked teacher-unreviewed; spoken_verbatim and preferred_output remain null until a future review workflow verifies them. This release does not upload to Orange, train a model, encrypt the dataset, provide review/delete UI, or create a fallback spool.
  • Key, vocabulary, manual corrections, and adaptive memory are reloaded for each new dictation, so idle changes no longer require restarting the daemon.
  • GTK settings, private configuration, installer, upgrade, uninstaller, service units, docs, bundle verification, and SBOM coverage were updated for these features.

Important alpha limitations

  • Dictation temporarily switches to the murmur-voice IBus engine. During the adaptive observation lease, ordinary keys pass through, but the previous Rime/IBus engine may not be restored until the lease finishes or is ended early.
  • Adaptive learning requires trustworthy IBus surrounding-text support. Unsupported, private, unfocused, ambiguous, insertion-only, or deletion-only cases learn nothing. This alpha has no settings switch for adaptive observation.
  • DJI routing is evaluated only at dictation start. It does not switch microphones mid-utterance. Physical DJI online/offline behavior across the full device/application matrix remains an explicit alpha validation gap.
  • The collector gives its background writer a bounded ten-second shutdown drain. A stalled mounted destination can leave only hidden unpublished staging; it never silently falls back to another local or cloud location.
  • A fresh combined test of physical microphone, real provider account, representative applications, and a real mounted collection destination remains incomplete. Automated and VM verification used no microphone, provider key, or user recording.
  • This preview targets Ubuntu 24.04 x86_64 with CPython 3.12. It is not a distribution-native or broadly qualified Wayland release.
  • The companion Doubao Murmur right-Alt controller remains a separate controller-only project and release.
  • Uninstall retains private key, vocabulary, correction, adaptive-memory, collection-setting, and external dataset files.

Audio is uploaded to Volcengine only during explicit dictation and is billed under the user's account. Local collection is independently opt-in; enabling it does not send the dataset anywhere.

Integrity and provenance

  • Source commit: c800b224df7b0d765bcc68a6bd214dc05dcda11e
  • CI run: https://github.com/SidUParis/openVoiceInput_linux/actions/runs/33306529695
  • CI artifact ID: 9730648109
  • CI artifact ZIP SHA256: 1f2df0cf781a0ab29b1868f43491eab4bc37ae54e431a178842a975f0d01f384
  • Archive SHA256: f05ae7c3e2f5c73887f91ae82188484b95e5f2e82c4e11d26d8630891a0866ae
  • Checksum-file SHA256: 738e237501633e58a3d95e2f22600cecebd535c2f97c74e661e1d2a2ae155ca3
  • CycloneDX SBOM serial: urn:uuid:7db718e0-a87d-55d4-a366-6b4d456c5aa9

See CHANGELOG.md, README.md, docs/README.zh-CN.md, and docs/personal-asr-data-plan.md for installation, privacy, dataset semantics, and troubleshooting details.

Open Voice Input Linux v0.1.0-alpha.1

Pre-release

Choose a tag to compare

@SidUParis SidUParis released this 26 Aug 07:57
Immutable release. Only release title and notes can be modified.
v0.1.0-alpha.1
5b789a6

Open Voice Input Linux's first alpha preview provides caret-local streaming voice input through IBus, without clipboard paste.

Highlights

  • Live cumulative IBus preedit with one authoritative final commit.
  • Volcengine two-pass recognition with punctuation, ITN, DDC, sentence segmentation, vocabulary, and explicit recognition corrections.
  • Per-recording microphone re-enumeration and conservative recovery from stale monitor defaults after device changes.
  • GTK4 settings for private API-key and recognition configuration.
  • Transactional per-user install, upgrade, uninstall, and exact restoration of the previous IBus engine.
  • Reproducible offline preview bundle for Ubuntu 24.04 x86_64 / CPython 3.12.
  • Clean Ubuntu 24.04 VM install, upgrade, uninstall, reinstall, settings, and isolated real-IBus validation passed.

Important alpha limitations

  • Dictation temporarily switches to the murmur-voice IBus engine. The permanent combined Rime/librime engine is not implemented.
  • There is no built-in global shortcut or standalone recording indicator.
  • Each dictation is capped at 10 minutes, with up to 20 seconds allowed for the provider final result.
  • This is not a distribution-native or broadly qualified Wayland release.
  • The clean VM used for lifecycle testing has no audio input. A fresh graphical-login test combining a physical microphone, provider account, and representative application matrix remains an explicit alpha validation gap.
  • Live preedit does not cross an RDP canvas; remote use requires installation and microphone redirection in the remote desktop session.
  • Uninstall retains private key, vocabulary, and correction files.

Audio is uploaded to Volcengine only during explicit dictation and is billed under the user account. No provider key is bundled or supplied to CI.

Integrity and provenance

  • Source commit: 5b789a653e7d177ebd8d82b204ac169dd007cb96
  • CI run: https://github.com/SidUParis/openVoiceInput_linux/actions/runs/32944503989
  • Archive SHA256: 9c7f64b39848acdea67b81037ed66863f13e16cc5f8ca14ed2b8b0844cc7826c
  • Checksum-file SHA256: c6004e3b88485f6cde83f5057c4be543b9d66b2431134ba19b3188b40a3bf6c5
  • CI artifact ZIP SHA256: 943c65dc2d89d47689e68c68e7e48fc0a84edebed35b5432f0e65d74cc00c73a
  • CycloneDX SBOM serial: urn:uuid:72666469-39b4-5327-af83-5062b5096df4

See CHANGELOG.md, README.md, and docs/README.zh-CN.md for installation, security, privacy, and troubleshooting details.