@fugood/whisper.node

中文文档
1.2.0-rc.2发布于 2026/11/09MITTypeScriptCommonJS零依赖近 30 天下载 3.6万

另一个节点绑定了悄悄.cpp 尽可能用悄悄.rn 制作相同的API.

中文使用文档
文档目录11 节
  1. 平台支持
  2. 安装
  3. 使用量
  4. 基本译名
  5. NVIDIA PARAKEET TDT 维基百科
  6. 语音活动检测( VAD)
  7. 原生日志
  8. 浏览器 WASM
  9. 自由选项
  10. Snapdragon (六边形 NPU) 基准
  11. 许可证

低语. 节点

CI NPM Version NPM Downloads

另一个节点绑有: 低语. cpp 将相同的 API 与 低声说话 尽可能多.

平台支持

  • 马科斯
    • arm64: CPU和金属GPU加速度
    • x86 64: 仅限 CPU
  • 视窗(x86 64和arm64)
    • CPU 软件
    • 通过 Vulkan 的 GPU 加速
    • 通过CUDA的GPU加速(x86 64)
  • Linux (x86 64和arm64) (中文(简体) )
    • CPU 软件
    • 通过 Vulkan 的 GPU 加速
    • GPU 通过 CUDA 加速
    • 通过Qualcomm Hexagon(arm64 Snapdragon,实验性)来进行NPU加速
  • 网页
    • 刚才
    • 可选 WebGPU 通过 ggml-webgpu wASM 软件包的构建 GGML_WEBGPU=ON

安装

npm install @fugood/whisper.node

使用量

基本译名

import { initWhisper } from '@fugood/whisper.node'

const context = await initWhisper({
  model: 'path/to/ggml-base.en.bin',
  useGpu: true,
}, libVariant)

// transcribeFile returns { stop, promise }
const { stop: stop1, promise: promise1 } = context.transcribeFile('audio1.wav', {
  language: 'en',
  temperature: 0.0,
  // ...
})

const result1 = await promise1

// transcribeData also returns { stop, promise }
let audioBuffer // PCM 16-bit, mono, 16kHz
const { stop: stop2, promise: promise2 } = context.transcribeData(audioBuffer, {
  language: 'en',
  temperature: 0.0,
  // ...
})

const result2 = await promise2

// You can also cancel transcription if needed
// await stop1() // Cancels the first transcription
// await stop2() // Cancels the second transcription
//
// stop() interrupts the decode; the job's promise then resolves with
// `isAborted: true` and the segments decoded so far (it does not reject).
// Native failures reject the promise. The context stays usable afterwards.

// Always release the context when done
await context.release()

NVIDIA PARAKEET TDT 维基百科

ParakeetContext 运行 NVIDIA 的 Parakeet TDT 0.6B v3 模型,通过 Parakeet API 包含在 sleep.cpp. v3模式支持英语外加其他24个欧洲语言.

下载 GGUF 模型 ggml-org/parakeet-GGUF 在初始化上下文之前:

型号大约大小
ggml-parakeet-tdt-0.6b-v3-q4_0.bin356 甲基溴
ggml-parakeet-tdt-0.6b-v3-q4_k.bin416 MB (英语)
ggml-parakeet-tdt-0.6b-v3-q8_0.bin669 甲基溴
ggml-parakeet-tdt-0.6b-v3-f16.bin1.26 英国
import { initParakeet } from '@fugood/whisper.node'

const parakeetContext = await initParakeet({
  filePath: 'path/to/ggml-parakeet-tdt-0.6b-v3-q4_0.bin',
  useGpu: true,
}, libVariant)

// transcribeFile / transcribeData return { stop, promise } like WhisperContext
const { stop, promise } = parakeetContext.transcribeFile('audio.wav', {
  maxThreads: 4,
})
const { result, segments, isAborted } = await promise

// Cancel an in-flight transcription when needed:
// await stop()

await parakeetContext.release()

transcribeData() 接受原始签名的 16- bit PCM 为 ArrayBuffer; 原始音频必须是单于 16 kHz 。 不支持、 使用 Whiper 特定选项( 语言、 即时、 回调) maxThreads 财务报告和审定财务报表 audioCtx 换句话说.

语音活动检测( VAD)

import { initWhisperVad } from '@fugood/whisper.node'

// Speech model: whisper.cpp's ggml-silero-*.bin or a vad.cpp GGUF (Silero, FireRedVAD)
const vadContext = await initWhisperVad({
  filePath: 'path/to/ggml-silero-v6.2.0.bin',
  nThreads: 1, // Default: 1, best for the small per-hop graphs
}, libVariant)

// Offline detection: speech segments, t0/t1 in 10 ms units
const segments = await vadContext.detectSpeechFile('audio.wav')
const segments2 = await vadContext.detectSpeechData(audioBuffer, {
  threshold: 0.5,
  minSpeechDurationMs: 250,
  minSilenceDurationMs: 100,
  speechPadMs: 30,
})

// Stateful detection over live audio: the model state carries over between
// pushes, one speech probability per `hopSamples` (512 samples = 32 ms for Silero)
const stream = await vadContext.createStream()
const probs = await stream.push(pcmChunk) // any length
const lastProbs = await stream.flush() // end of audio
await stream.reset() // start a new audio stream
await stream.release()

await vadContext.release() // also frees its streams

说明:音频数据应为16位PCM,单相,16kHz格式. 库期望包含原始音频数据的ArrayBuffer.

VAD 运行 维德.cpp,总是在CPU(useGpu 页:1 概率完全跟随官员Silero; samplesOverlap 被忽略和 negThreshold 已提供.

原生日志

import {
  addNativeLogListener,
  isNativeLogEnabled,
  toggleNativeLog,
} from '@fugood/whisper.node'

const logs = addNativeLogListener((level, text) => {
  console.log(`[whisper ${level}] ${text}`)
})

await toggleNativeLog(true)
console.log(isNativeLogEnabled())

// ...

await toggleNativeLog(false)
logs.remove()

日志级别作为小写发布 error, (中文(简体) ), warn, (中文(简体) ), info,或 debug 字符串。 在Node.js和浏览器WASM架构中也有同样的帮助.

浏览器 WASM

浏览器软件包保持相同的基于承诺的软件包 initWhisper, (中文(简体) ), initWhisperVad,以及 initParakeet 进入点。 在浏览器中, filePath 实值 作为 URL 处理,模型会被带入 WASM 文件系统.

import { initWhisper, initWhisperVad } from '@fugood/whisper.node'

const whisper = await initWhisper({
  filePath: 'https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-base.en.bin',
  maxModelBytes: 1536 * 1024 * 1024,
  useGpu: false,
})

const { promise } = whisper.transcribeFile('https://raw.githubusercontent.com/ggml-org/whisper.cpp/master/samples/jfk.wav', {
  language: 'en',
  temperature: 0,
})

console.log(await promise)
await whisper.release()

const vad = await initWhisperVad({
  filePath: 'https://huggingface.co/ggml-org/whisper-vad/resolve/main/ggml-silero-v6.2.0.bin',
  useGpu: false,
})
console.log(await vad.detectSpeechFile('https://raw.githubusercontent.com/ggml-org/whisper.cpp/master/samples/jfk.wav'))
await vad.release()

浏览器包上同时装有单行道和接线道WASM文物. 打开 跨原生相隔页Cross-Origin-Opener-Policy: same-origin 财务报告和审定财务报表 Cross-Origin-Embedder-Policy: require-corp,加载器使用线程 工艺品 SharedArrayBuffer; 否则它会回到单行道 文物自动。 超大小的模型下载在装入前失败 (音乐) Firefox默认上限为256 MiB;其他浏览器默认为75% 已配置的 WASM 最大内存 。 过 maxModelBytes 当你知道 目标浏览器可以分配模型. 低声转录默认为8 在有线程时基于浏览器硬件的线程; 通过 maxThreads 以覆盖它。 浏览器 WASM 夹 maxThreads 至编译本 池限为8或单行道倒置后1. 浏览器页面运行模型 在专门的模块工作人员中加载、复制、基准和 VAD 默认, 因此 UI 线程可以继续渲染 。 使用主线 whisper.node 软件包 浏览器代码中的条目点 :

import { configureWasm, initWhisper } from '@fugood/whisper.node'

使用 configureWasm({ worker: false }) 只有在你明确需要时 线上运行时间, configureWasm({ threads: false }) 迫使 单行道文物,或通过 workerPath, (中文(简体) ), jsPath,以及 wasmPath 何时 服务自定义 URL 的软件包文件。 年长者 workerUrl 财务报告和审定财务报表 runtimeScriptUrl 选项名称仍然有效。 型号 下载默认在浏览器缓存中被缓存. 过 cacheModel: false 使连续的缓存失效, modelCacheName 要隔离 缓存命名空间,或 modelCacheKey 当获取 URL 是代理或签名时 URL但应该重新使用相同的缓存模型.

以 :

npm run build-wasm

或者用徽章多克的图像构建 :

npm run build-wasm-docker

npm run build-wasm 启用 GGML_WEBGPU=ON 默认并发出 wasm/whisper-node.js, (中文(简体) ), wasm/whisper-node.wasm, (中文(简体) ), wasm/whisper-node.threads.js,以及 wasm/whisper-node.threads.wasm启用 bash scripts/build-wasm.sh --no-webgpu 用于只用于CPU WASM构建,或 --no-threads 编号 : --threads 只构建一个 CPU 线程变体。 过 --single-file 仅在您想要将 WASM 二进制嵌入到每个生成中时 联合来文文件。 现代标志在主要联署材料中嵌入了线条工人的靴子 文件,所以一个单独的 whisper-node.worker.js 无法预料。 浏览器 包件还装有自己的模块 worker.js 非阻塞模型负载的包装 和推论. npm run build-wasm-docker 用途 emscripten/emsdk:4.0.14-arm64 在 arm64 主机,如 Apple 硅Macs,以及 emscripten/emsdk:4.0.13 打开 amd64 主持人. 覆盖 EMSCRIPTEN_IMAGE 或者说 EMSCRIPTEN_PLATFORM 何时 需要帮助。 建筑后有本地烟页:

node examples/wasm/server.mjs

在WASM包, useGpu: true 启用WebGPU进行低声转录 当浏览器支持时 navigator.gpuVAD总是运行在CPU上 (vad.cpp)自己的内核,有WASM SIMD.

自由选项

  • default: 一般使用, 不支持 GPU, 只支持 macOS (Metal)
  • vulkan: 支持 GPU Vulkan( Windows/ Linux),但有些情景可能不稳定
  • cuda: 支持GPU CUDA( Windows/Linux),但仅限于能力有限

    Linux:(x86 64: 8.9, arm64: 8.7) (中文(简体) ) 视窗: x86 64-12.0

  • [x] (中文(简体) ) snapdragon: Qualcomm Snapdragon Hexagon NPU通过ggml-六边形(Linux arm64). 月台套装中的HTP skels飞船 ADSP_LIBRARY_PATH 自动设置; GGML_HEXAGON_NDEV 默认为 16

Snapdragon (六边形 NPU) 基准

过 'snapdragon' 作为 libVariant 参数(例如:. initWhisper({ model, useGpu: true }, 'snapdragon')) (中文(简体) ). 微声模型运行在"六角NPU"上,闪出注意力总是在.

Qualcomm IQ-9075基准(HTP= snapdragon 变体,CPU = default 变体 :

型号HTP 编码CPU 编码HTP 解码CPU 解码HTP 转录CPU 转录
细小的.en95分钟361分钟6.7 毫秒3.4个毫秒316分钟524分钟
基础143分钟787分钟6.3 ms (英语)5.5毫秒(每分钟)430分钟846分钟
基数- q8 0154分钟557分钟6.9个毫秒4.2 毫秒(秒)397分钟582分钟
小数360分钟2824分钟16.3 毫秒(秒)14.0 分钟915分钟2789分钟
distil- small.en-q8 0 (英语)320分钟1743分钟5.3 分钟4.8 毫秒( 秒)510分钟1530分钟
介质812分钟8799分钟35.1毫秒38.3 毫秒(秒)1915分钟8006分钟
大v3-涡轮-q8 02479分钟9400毫秒( 分钟)9.8 毫秒(秒)8.2毫秒(每分钟)2838分钟7616分钟

Android上也有同样的后端 低声说话。 。 。 .

许可证

麻省理工学院


建造和维护 金砖。 。 。 .

版本与发布记录

@fugood/whisper.node 共发布 28 个版本,首次发布于 2025/07/11;过去 12 个月发布了 20 个版本。

版本发布日期距今
1.2.0-rc.2latest2026/11/096 天前
1.2.0-rc.12026/10/071 个月前
1.2.0-rc.02026/09/171 个月前
1.1.32026/08/272 个月前
1.1.22026/08/242 个月前
1.1.12026/07/193 个月前

关于 @fugood/whisper.node 的常见问题

@fugood/whisper.node 是什么?

另一个节点绑定了悄悄.cpp 尽可能用悄悄.rn 制作相同的API.

如何安装 @fugood/whisper.node?

在项目目录运行 npm install @fugood/whisper.node,或使用 pnpm add / yarn add / bun add。

@fugood/whisper.node 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@fugood/whisper.node 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@fugood/whisper.node 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=16.0.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@fugood/whisper.node 可以商用吗?

@fugood/whisper.node 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@fugood/whisper.node 的下载量有多少?

根据 npm 官方下载统计,@fugood/whisper.node 在 2026/10/16 – 2026/11/14 这 30 天内被下载 35,553 次,日均约 1,185 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@fugood/whisper.node 还在维护吗?

最新版本 1.2.0-rc.2 发布于 2026/11/09(6 天前);至今共发布 28 个版本,其中过去 12 个月发布了 20 个;首次发布于 2025/07/11。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。