一款纯离线桌面端录屏工具——可录制屏幕、摄像头画面与麦克风声音,本地完成语音转文字、剪辑并导出。无需账号、无服务器交互、无数据库、无数据采集。
本仓库是 Cap 的分支,已移除所有云端功能:无网页后端、无登录、无上传、无数据分析。应用完全在你的设备上独立运行。
- 通过系统原生 API 实现本地屏幕+摄像头+音频录制(Windows 采用 Graphics Capture / Direct3D,macOS 采用 ScreenCaptureKit / AVFoundation)。
- 基于 Whisper(
whisper-rs)实现设备端语音转文字,全程离线运行。 - 内置编辑器,支持剪辑、编排与渲染录制文件。
- 硬件加速导出(Windows 用 MediaFoundation,macOS 用 VideoToolbox),并兼容 FFmpeg 备用方案。
- 自托管自动更新——更新程序指向本分支的 GitHub Releases(详见分支说明)。
| 平台 | 状态 |
|---|---|
| Windows 10/11 (x86_64) | ✅ 主要支持 |
| macOS 12+ (Intel & Apple Silicon) | ✅ 支持 |
| Linux | ❌ 暂不支持(无原生采集后端) |
- 桌面外壳:Tauri v2
- 前端:SolidStart + SolidJS、TailwindCSS、TypeScript
- 原生层:Rust 工作区——负责采集、渲染(wgpu)、编码、语音转文字
- 捆绑附属程序:原生
cap命令行工具(导出器)与cap-muxer,均由同一 Rust 工作区编译生成
| 工具 | 版本 | 说明 |
|---|---|---|
| Node.js | ~24.16 |
详见 package.json 中 engines 字段 |
| pnpm | 11.5 |
执行 corepack enable 即可自动启用 |
| Rust | 1.96+ |
稳定版工具链 |
| CMake | 最新版 | 供 whisper-rs-sys 编译 whisper.cpp 使用 |
| Ninja | 最新版 | 作为 CMake 生成器(详见Windows 说明) |
- Visual Studio 2022 生成工具,需包含 MSVC v143 - VS 2022 C++ x64/x86 生成工具 组件(要求 MSVC
17.12+/ 工具集14.42+——ortcrate 自带的预编译 ONNX Runtime 依赖较新的vcruntime140_1.lib符号)。 - FFmpeg 共享库会由
pnpm cap-setup自动下载,无需手动安装 FFmpeg。
- Xcode 命令行工具(用于原生工具链)。
- 首次执行
pnpm cap-setup会下载 FFmpeg 框架与 ONNX Runtime 动态库。 - 首次启动时会申请屏幕录制与麦克风权限——请为运行
pnpm dev:desktop的终端授予权限。
pnpm install
pnpm cap-setup # 拉取原生依赖(FFmpeg、ONNX),生成 .cargo/config.toml
pnpm dev:desktop # 编译附属程序 + 启动 Tauri 开发版应用pnpm cap-setup(scripts/setup.js)为单设备初始化脚本,作用:
- 下载 FFmpeg,将其库文件与头文件复制到
target/native-deps/,动态库复制到target/{debug,release}/。 - 生成本地化
.cargo/config.toml(已加入 Git 忽略),配置FFMPEG_DIR,以及 Windows 下的LIBCLANG_PATH/ macOS 下的ORT_DYLANG_PATH。 - 在 Windows 上校验 MSVC 工具链版本是否满足要求。
.cargo/config.toml已加入 Git 忽略——每位开发者均通过pnpm cap-setup生成专属配置。
采用 Turborepo 单体仓库:
apps/
desktop/ Tauri v2 + SolidStart——主应用
src/ SolidStart 应用(路由、组件)
src-tauri/ Rust Tauri 宿主 + 附属程序二进制文件存放于 binaries/
cli/ Rust 命令行工具→编译生成 cap 二进制文件,作为 cap-cli / cap-exporter 附属程序分发
packages/ 本地 TypeScript 工作区
ui/ 通用 React UI(供纯网页端使用)
ui-solid/ 通用 SolidJS UI(供桌面端使用)
utils/ env/ config/ tsconfig/
crates/ Rust 工作区成员
capture scap-*(屏幕采集、Direct3D、FFmpeg)、scap-cpal(音频)、
光标采集、camera-*(AVFoundation、DirectShow、MediaFoundation、FFmpeg)
encode enc-ffmpeg、enc-mediafoundation、enc-avfoundation、enc-gif、
mediafoundation-ffmpeg、ffmpeg-hw-device
pipeline 媒体、媒体信息、工程、录制、渲染、Skia 渲染、
视频解码、帧转换、时间戳、音频
sidecars cap-muxer(+ cap-muxer-protocol)、编辑器、导出、CLI 安装
test cap-test(矩阵/合成/基准测试套件)
infra workspace-hack、工具类、功能开关、错误处理、D3D 适配器、GPU 转换、cpal-ffmpeg
vendor/ 第三方分支:wgpu-hal、tao
patches/ pnpm 补丁
scripts/ 构建与初始化脚本(setup.js、build-desktop-binaries.mjs 等)
- 采集(
scap-*、camera-*、cursor-capture)通过系统原生 API 生成原始视频帧与音频数据。 - 桌面宿主启动
cap-muxer,将多路流混流写入磁盘。 - 剪辑环节由
cap(cap-exporter) 渲染并编码工程文件——优先使用 MediaFoundation / VideoToolbox,不支持时降级为 FFmpeg。 whisper-rs在设备本地完成音轨转文字。
pnpm dev:desktop # 完整开发流程:初始化 + 附属程序编译 + Tauri 开发窗口启动桌面端 dev 脚本执行链:cap-setup → build:sidecar → preparescript(兼容 MSI 版本)→ tauri dev。
pnpm --filter @cap/desktop localdev # SolidStart 开发服务器运行于 3002 端口(无原生外壳)cargo check -p cap-desktop # Tauri 宿主 crate
cargo check -p <crate> # 任意 crates/* 成员,如 cap-muxer、rendering
cargo test -p <crate>注意:
cargo check -p cap-desktop要求附属程序二进制文件已存在于apps/desktop/src-tauri/binaries/(Tauri 构建脚本会校验其为打包资源)。先执行一次pnpm --filter @cap/desktop build:sidecar,或直接使用pnpm dev:desktop。
pnpm tauri:build # 编译附属程序 + 预处理 + tauri build(生成正式安装包)该命令会运行 scripts/build-desktop-binaries.mjs,以发布模式为当前架构编译 cap-muxer 与 cap 命令行工具,复制到 apps/desktop/src-tauri/binaries/,随后执行 tauri build。
各平台输出:
- Windows:NSIS 安装包(
.exe)与 MSI 安装包(.msi) - macOS:
.app应用包、.dmg镜像
开发版应用名称与标识为 Cap - Development / so.cap.desktop.dev。正式版构建使用 tauri.prod.conf.json。
pnpm lint # Biome 代码检查
pnpm format # Biome 格式化
pnpm typecheck # tsc -b 类型检查
pnpm test # turbo run test(存在 Vitest 时执行)
cargo fmt --all
cargo clippy -p <crate> --all-targets -- -D warnings # CI 校验规则
cargo test -p <crate>如需运行重度测试矩阵(采集/编码/播放流程套件):
pnpm test:matrix # cap-test 全矩阵测试
pnpm test:suite:recording # 单独套件:recording | encoding | playback | sync区分大小写的磁盘与 whisper.cpp 编译。whisper-rs-sys 通过 cmake crate 编译 whisper.cpp。默认 Visual Studio CMake 生成器会输出 INSTALL.vcxproj,但 cmake crate 调用的是小写 install.vcxproj。若磁盘区分大小写(如 D:\ 开启了 NTFS 大小写敏感属性),二者名称不匹配会导致 MSBuild 报错 MSB1009: 项目文件不存在。
若工作磁盘区分大小写,在已 Git 忽略的 .cargo/config.toml 中添加以下配置,改用无名称冲突的 Ninja 生成器编译 whisper.cpp:
[env]
CMAKE_GENERATOR = "Ninja"Ninja 需加入系统 PATH(可执行 winget install Ninja-build.Ninja 安装)。可通过 fsutil.exe file queryCaseSensitiveInfo D:\work\Cap 检查目录是否开启大小写敏感。
请为运行 pnpm dev:desktop 的终端/IDE授予屏幕录制与麦克风隐私权限——未授权时采集会静默生成空帧。
本分支已移除所有云端/服务器依赖,影响如下:
- 无后端、无数据库、无登录验证。录制文件仅本地保存与导出。
- 自动更新指向本分支的 GitHub Releases(
tauri.prod.conf.json)。在发布包含latest.json与安装包的版本并配置签名前,更新会静默不执行:pnpm --dir apps/desktop exec tauri signer generate -- -w <密码> # 将生成的公钥填入 tauri.prod.conf.json,随后在 CI 中配置: # TAURI_SIGNING_PRIVATE_KEY / TAURI_SIGNING_PRIVATE_KEY_PASSWORD
详见 LICENSE。