Skip to content

liunnn1994/Cap

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6,489 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Cap

一款纯离线桌面端录屏工具——可录制屏幕、摄像头画面与麦克风声音,本地完成语音转文字、剪辑并导出。无需账号、无服务器交互、无数据库、无数据采集。

本仓库是 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.jsonengines 字段
pnpm 11.5 执行 corepack enable 即可自动启用
Rust 1.96+ 稳定版工具链
CMake 最新版 whisper-rs-sys 编译 whisper.cpp 使用
Ninja 最新版 作为 CMake 生成器(详见Windows 说明

Windows

  • Visual Studio 2022 生成工具,需包含 MSVC v143 - VS 2022 C++ x64/x86 生成工具 组件(要求 MSVC 17.12+ / 工具集 14.42+——ort crate 自带的预编译 ONNX Runtime 依赖较新的 vcruntime140_1.lib 符号)。
  • FFmpeg 共享库会由 pnpm cap-setup 自动下载,无需手动安装 FFmpeg。

macOS

  • 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-setupscripts/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 等)

录制流程

  1. 采集scap-*camera-*cursor-capture)通过系统原生 API 生成原始视频帧与音频数据。
  2. 桌面宿主启动 cap-muxer,将多路流混流写入磁盘。
  3. 剪辑环节由 cap(cap-exporter) 渲染并编码工程文件——优先使用 MediaFoundation / VideoToolbox,不支持时降级为 FFmpeg。
  4. whisper-rs 在设备本地完成音轨转文字。

开发

pnpm dev:desktop      # 完整开发流程:初始化 + 附属程序编译 + Tauri 开发窗口启动

桌面端 dev 脚本执行链:cap-setupbuild:sidecarpreparescript(兼容 MSI 版本)→ tauri dev

仅开发前端

pnpm --filter @cap/desktop localdev   # SolidStart 开发服务器运行于 3002 端口(无原生外壳)

仅开发 Rust

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-muxercap 命令行工具,复制到 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

平台说明

Windows

区分大小写的磁盘与 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 检查目录是否开启大小写敏感。

macOS

请为运行 pnpm dev:desktop 的终端/IDE授予屏幕录制麦克风隐私权限——未授权时采集会静默生成空帧。

分支说明

本分支已移除所有云端/服务器依赖,影响如下:

  • 无后端、无数据库、无登录验证。录制文件仅本地保存与导出。
  • 自动更新指向本分支的 GitHub Releasestauri.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

About

No description, website, or topics provided.

Resources

License

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors