Spaces:
Running
Download README.md from ToothpasteLake/offlisten: direct link, hf CLI and curl.
- Browser
- Download file 3.78 kB
-
https://huggingface.co/spaces/ToothpasteLake/offlisten/resolve/main/README.md
- Command line
-
hf download hf://spaces/ToothpasteLake/offlisten/README.md
-
curl -L -o README.md https://huggingface.co/spaces/ToothpasteLake/offlisten/resolve/main/README.md
title: Offlisten
emoji: 🎙️
colorFrom: gray
colorTo: yellow
sdk: static
pinned: false
license: mit
short_description: 100% offline ASR for meetings, local, no upload
录匣 Offlisten
100% 离线的会议 / 课堂转写。没有账号,没有云端,拔掉网线它还在写。
这个 Space 是静态证据页:五个语种的实测输出、两段演示视频,以及一张端侧 ASR 运行时选型矩阵。
不放可交互 demo,原因是免费档跑不了 Gradio 容器:cpu-basic 返回配额错误,zero-a10g 返回 402,
官方文档写明 Gradio / Docker Space 需要付费计划。转写本来也要在本地跑 229 MiB 的模型。
目录里有什么
| 文件 | 用途 |
|---|---|
index.html |
实际展示的页面 |
demo.mp4 |
42 秒演示:五段音频真跑,听完才落字;tools/record-demo.py 生成 |
demo.mp4.json |
那次录制的实测记录:每段文本、耗时、音频 sha256 |
use-with-browser-ai.mp4 |
46 秒,无音轨:本地文本页 + Page Assist + Ollama 的闭环实录 |
matrix-zh.png / matrix-en.png |
选型矩阵,1000×780;源文件 docs/bench/*.svg,改文案后重出 PNG/PDF |
README.md |
本文件,Space 卡片元数据 |
app.py、requirements.txt |
Gradio 版,本地跑通过;当前 sdk: static 不执行它 |
演示是怎么录的
不是手工录屏。tools/record-demo.py 做三件事,所以视频和页面上那张表不可能对不上:
- 用同一份权重、同样 2 线程,真跑五段
test_wavs,拿到文本与耗时 - 起本地
web_live服务与无头 Edge,按真实时钟把每段结果推给页面,逐帧截图 - 按同一时钟把五段音频混成音轨,ffmpeg 合成 H.264 + AAC
所以字幕出现的时刻,就是产品里一段话说完的时刻,音画不会漂。
接本地的 AI
use-with-browser-ai.mp4 记录的是另一条链路,46 秒,无音轨:
本机 SenseVoice → 127.0.0.1 上的文本页 → 浏览器扩展 Page Assist 读当前页 → Ollama 上的 qwen2.5:0.5b 作答
三个部件都在同一台机器上,链路里没有一处需要出网。本地文本页上那行提示就是为这条路留的: 「要交给 AI 处理,就复制全文,或让你浏览器里已有的 AI 插件读取本页。」
源素材 14.8 MB,裁掉录屏工具条、去掉音轨后是 1.2 MB,1440×746。
选型矩阵
4 个运行时 × 3 个平台,12 格里只有 2 格同时满足「CPU 能跑 · 流式 · 能装进别人的机器」。 逐格依据分级:5 格来自官方文档或包矩阵,1 格本机实测,1 格只验过模型,5 格是推断。
页面上的链接都可以当场点开核:
- FunAudioLLM 论文(arXiv:2407.04051)
- sherpa-onnx 文档
- sherpa-ncnn 的 SenseVoice 章
- Triton 后端支持矩阵
- PyPI 上 sherpa-ncnn 的 wheel 列表
模型与音频
权重在 ToothpasteLake/offlisten-models,
6 个文件 229.07 MiB,逐文件 sha256 对应发行清单。
表里那五段音频在同一个仓库的 test_wavs/ 下,点语种名可以直接听,也可以下载后自己复跑。
更新这个 Space
页面改动后跑一次,脚本会跳过 _ 开头的本地临时文件,并在 --verify 下逐个核对线上字节数:
python tools/push-space.py --dry-run # 只看会传什么
python tools/push-space.py --verify # 传 + 核对