需要 Rust 1.98.0、.node-version 指定的 Node 版本和 Corepack,版本不符会构建失败;首次开发或构建会自动下载 FFmpeg sidecar,字幕功能还需系统安装 whisper.cpp 的 whisper-cli 并在首次使用时下载模型权重;macOS 包未签名,首次启动需右键打开并在系统设置中授予屏幕录制权限后重启。
capptivo
SECHAK-AGMIT活跃维护跨平台屏幕录制与演示工具,基于 Tauri 和 PixiJS 构建,支持 Mac、Windows、Linux,方便快速录制并展示演示内容。
Give your demos the spotlight they deserve ( Mac/Windows/Linux ).
corepack pnpm install
corepack pnpm tauri devREADME 未给出显存或内存要求。Windows 需 Direct3D feature level 11_0 以上,硬件编码按机器探测 NVENC/QuickSync/AMF;Linux 需 PipeWire 1.0+(如 Ubuntu 24.04+);macOS 13.0+。
开源免费的屏幕录制与演示视频编辑器,替代 Screen Studio 做产品演示
跨平台屏幕录制与演示工具,基于 Tauri 和 PixiJS 构建,支持 Mac、Windows、Linux,方便快速录制并展示演示内容。
核心能力
- 智能跟随光标缩放,并根据点击自动建议缩放片段
- 录制时在屏幕上叠加画笔、形状、文字等标注
- 用 whisper.cpp 在本地生成字幕并烧录进视频
- 提供命名编辑器预设,一键套用外观与导出设置
- 支持 MP4、WebM、GIF 导出,可选 24/30/60 帧
容易踩的坑
- v1.0.4Capptivo v1.0.4最新正式版2026-10-13 · 2026-10-13 01:23 UTC
Highlights
Exports are up to 10× faster
MP4 export now runs on a new native render engine. Capptivo decodes the recording, draws every frame on the GPU (Metal, DirectX 12 or Vulkan) and encodes it with your machine's hardware H.264 encoder, with the audio muxed in the same pass. The browser view is no longer in the frame path.
Same 76-second project, 1080p at 60 fps, Apple M5 Export time Capptivo 1.0.3 176 s Capptivo 1.0.4 17 s - The export draws the same zoom, cursor, face-cam, blur and caption timing you see in the editor. The motion math is checked against the editor's own code by an automated test suite.
- If the native engine can't export a project, Capptivo falls back to the previous exporter automatically, and the export still finishes.
- GIF and WebM exports still use the previous exporter.
What's changed
Recording
- Stop a recording as soon as encoding fails, instead of recording into the void, by @advanivivek in #27
- Keep the timeline moving when the screen stops changing, by Sai Manikanta in #41
- Size the audio queue for a real encoder stall, and report overflow, by Sai Manikanta in #42
- Say when the camera flush times out before stop, by Sai Manikanta in #45
- Fix window recordings whose duration was always 0 (#33), by Sai Manikanta
- Keep HiDPI captures inside the hardware encoder's 4096 px limit, which no longer produces 0-byte takes (#33), by Daniel Nevoigt
- Probe hardware encoders at each recording frame size, by @Neonsy in #80
- Restore picker thumbnails on macOS 15+, by @MarsOccupied in #11
- Wayland: keep cursor metadata on more compositors and guard against a double stop, by @idboussadel
Editor & export
- Native export engine (see Highlights), by @idboussadel
- Blur regions, by @MarsOccupied
- Back button to leave the recordings library, by @MarsOccupied in #12
- Faster preview proxies: GPU decode and GPU scale for proxy transcodes, by Sai Manikanta
- Stop encoder stalls from cutting takes, and make cancelling an export actually stop FFmpeg, by @idboussadel
- Get the annotation overlay off screen when its GPU context dies, by Sai Manikanta in #43
Windows
- Explain unsupported capture devices and update the capture dependency, by @Neonsy in #76
- Make overlay exclusion fail closed, by @Neonsy in #77
Reliability & diagnostics
- Keep fatal errors and surface live recording notices, by @Neonsy in #78
- Keep bounded local diagnostic codes, by @Neonsy in #79
Security
- Keep export file paths behind native authority, so the editor only ever holds an opaque handle, by @Neonsy in #75
- Verify the bundled FFmpeg sidecars against pinned checksums, by @Neonsy in #72
- Update vulnerable transitive dependencies, by @Neonsy in #74
Build & CI (for contributors)
- Pull request quality gates, Windows capture regression tests and a hardened release pipeline, by @Neonsy in #72
- Node 24, pnpm 12, a pinned Rust 1.98 toolchain and a rustfmt baseline, by @Neonsy in #72
- LF line endings and CRLF-safe cursor hotspot checks, by @Neonsy in #71 and #73
New contributors 🎉
- @MarsOccupied made their first contribution in #11
- @advanivivek made their first contribution in #27
- @Neonsy made their first contribution in #71
- Sai Manikanta made their first contribution in #41
- Daniel Nevoigt made their first contribution
Thank you all! 🙏
Full changelog: https://github.com/SECHAK-AG/capptivo/compare/v1.0.3...v1.0.4
Install
Download the installer for your platform below.
macOS
The macOS builds are ad hoc signed rather than notarized. On first launch, right-click the app and choose Open. Grant Screen Recording in System Settings, then quit and reopen Capptivo.
Captions
Captions req
- v1.0.3Capptivo v1.0.32026-08-05 · 2026-08-05 05:24 UTC
查看更新说明
This release is focused on making Windows export actually work, cutting recorder/editor overhead, and fixing a handful of ways the app could freeze or eat your desktop clicks.
Export
- Fixed MP4 export hanging on Windows. WebView2's hardware H.264 encoder would accept frames and never emit any, freezing progress at ~1–7% forever. Export now probes an encoder with real frames before trusting it, and every wait has a watchdog so a wedged encoder fails the route instead of hanging the app.
- Five encode routes cut down to two: verified Annex-B → ffmpeg stream copy, and RGBA → ffmpeg hardware encode (no WebCodecs required). MP4 muxing moved out of the WebView into Rust/ffmpeg.
- Much faster export. Frames are read straight off the GPU instead of being copied four times, and readback is pipelined with fenced PBOs so frame N composes while the GPU copies frame N-2.
- Recovers from GPU context loss. If the WebGL context dies under load, export reclaims the GPU and retries instead of reporting a bogus "no WebGL" error.
- Export is now a blocking progress dialog with Cancel, so the timeline and preview can't be touched mid-export.
- WebM without a suitable encoder now errors clearly instead of silently writing an MP4.
Recording
- 30 or 60 fps capture picker (screen capture at 60, face-cam at 30), persisted between sessions, with a warning in the export dialog when you request a higher rate than you captured.
- Fixed the setup overlay swallowing every desktop click — an invisible full-screen window could eat all input until the app was killed. Click-through now fails closed on every path.
- Fixed the macOS source picker freeze.
- Fixed Windows area-guide freezes: the fullscreen dim overlay is replaced by a crop-sized dashed border, excluded from capture, and selection resets when the recorder hides. Esc cancels area select.
- Mic warm-up on select, so hitting Record no longer waits on Bluetooth open latency.
- Smoother recorder bar drag and a working grip on the live HUD for repositioning it.
- Stop is no longer blocked by a wedged encoder — the ffmpeg finalize timeout is now reachable.
Performance
- Capture frame buffers are pooled and reused instead of allocating ~33MB per 4K frame.
- WGC frames are dropped before the GPU readback rather than after, removing a staging copy that stalled the desktop on high-refresh displays.
- Background jobs (proxy, camera track, thumbnails, captions) run below normal priority with bounded thread pools on Windows, so opening the editor no longer competes with the shell.
Editor & UI
- New updater experience: an in-app toast with real download progress and Later/Update, replacing the native dialog. Shown only in editor/library.
- Feedback dialog with contacts, plus rolling
capptivo.logand a warn-levelerrors.login AppData, reachable from the tray via "Open Error Log…". - Playback now stops when you drag the playhead or click the track, so you land on the frame you asked for.
- App version is shown in Config under About.
- Fixed thumbnail/poster generation failing silently (MJPEG rejected the pixel format).
- v1.0.2Capptivo v1.0.22026-08-02 · 2026-08-02 18:05 UTC
查看更新说明
Capptivo v1.0.2
Highlights
- GIF export Speed slider (1×–4×) for shorter, smaller shareable GIFs
Fixes
- Windows: opening Recordings from the recorder bar no longer shows a blank window or crashes when starting a recording
- v1.0.1Capptivo v1.0.12026-08-02 · 2026-08-02 17:24 UTC
查看更新说明
Capptivo v1.0.1
Highlights
- Native mic + system audio capture (SCK / WASAPI / Pulse) with face-cam A/V sync
- Signed auto-updates from GitHub Releases (startup, tray, and settings)
- Bundled
capptivo-ffmpeg/capptivo-ffprobesidecars for Linux packages
Fixes
- Linux: enable cpal and correct Pulse mic channel typing
- Export: release preview GPU before export to avoid WebGL init failures on Windows
- Preview: show face-cam while paused (not shadow-only PiP)
- v1.0.0Capptivo v1.0.02026-08-01 · 2026-08-01 23:08 UTC
查看更新说明
Capptivo 1.0.0 — Give your demos the spotlight they deserve
Today Capptivo is out. A free, open-source screen recorder and demo editor for macOS, Windows, and Linux — local-first, no account, no subscription. Record a flow. Polish the zooms, cursor, and look. Add captions. Export. Done.
Platforms & distribution
Capptivo ships native installers for:
- macOS 13.0+ — Apple Silicon (
aarch64) and Intel (x64) - Windows 10 (build 1903 / May 2019) and newer — x64
- Linux with PipeWire 1.0+ (e.g. Ubuntu 24.04+) — X11 and Wayland
Capture stays native per OS: ScreenCaptureKit + VideoToolbox (macOS), Windows.Graphics.Capture with NVENC / QuickSync / AMF / Media Foundation (Windows), and xdg-desktop-portal + PipeWire (Linux). System audio uses SCK, WASAPI loopback, or Pulse/PipeWire monitor respectively. Custom area capture is available on macOS and Windows; on Linux pick display/window in the portal dialog and crop in the editor if needed.
Features
Recording
- Menubar / tray recorder with global hotkey (⌥⇧R / Alt+Shift+R)
- Capture display, window, or custom area (live frame guide; area pick on macOS & Windows)
- Face-cam overlay while recording
- Microphone capture (device picker)
- System audio capture
- UI language switch (English / Français / Español / Italiano / Deutsch / Português / Русский / 日本語 / 한국어 / 中文 / العربية)
- Countdown before start
- Pause / resume
- On-screen annotations while recording
- Native pipeline per OS → hardware H.264 → crash-safe fragmented MP4
- 60 Hz cursor + click track saved with the project (
cursor.json)
Annotations
Draw on top of the screen while recording — floating toolbar, click-through when idle. On macOS the overlay stays with you across Spaces and displays.
- Select tool (pass clicks through to the desktop)
- Pen and highlighter
- Eraser
- Shapes: rectangle, ellipse, line, arrow
- Text
- Color palette + custom picker
- Brush size
- Undo / redo / clear all
- Draggable toolbar; Escape peels panels then closes
Zoom & motion
- Zoom fragments on the timeline (add with Z or Add fragment)
- Auto-suggest zooms from clicks when you open a fresh recording (or Add fragment → Suggest zooms)
- Follow-cursor zoom (pans with the pointer; Wayland when portal cursor Metadata is available)
- Fixed zoom regions (drag / resize the frame)
- Scope: recording only or full scene (background included)
- Scale, pan smoothness, ease in / ease out
- Shrink background padding during zoom
- Shrink face-cam during zoom (size at peak zoom)
- Automatic motion between fragments
Cursor
- Show / hide composited cursor
- Styles: macOS, Tahoe, Tahoe inverted, Minimal
- Cursor size
- Motion blur
- Click bounce + bounce speed
- Cursor sway
Look & composition
- Backgrounds: image presets, gradients, solid colors, or upload your own (custom images persist across projects)
- Custom gradient angle / colors
- Named editor presets — save / apply look, face cam, cursor, captions, and export settings
- Screen content crop (hide chrome / clutter)
- Video padding
- Recording corner radius
- Recording shadow
- Background blur
- Background darkness
Face cam
- Round or rectangular PiP
- Mirror webcam
- Corner position + margin from the frame edge
- Size / width / height
- Roundness (rectangular)
- Shadow intensity
- Crop face cam
- Layout that stays in sync with zoom (optional shrink during zoom)
Captions
- On-device speech-to-text (Whisper via whisper.cpp)
- Downloadable model, no cloud required (needs a system
whisper-clibinary) - Generate, style, and burn captions into preview + export
Timeline
- Scrub and play the composition
- Zoom fragments (add, suggest from clicks, select, resize, split, delete)
- Trim gaps (add with T)
- Undo / redo
- Timeline zoom (auto / manual)
- Reset fragments
Export
- Format
- macOS 13.0+ — Apple Silicon (
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
No more paying $29/month for video editing software. I hope you enjoy it, and contributions are always welcome.
https://github.com/user-attachments/assets/246054fe-8604-4ea0-ae7b-701eaafc25bf
Download
Installers are published on the GitHub Releases page (latest).
| Platform | What to grab |
|---|---|
| macOS Apple Silicon | aarch64 / aarch64-apple-darwin .dmg or .app.tar.gz |
| macOS Intel | x64 / x86_64 .dmg or .app.tar.gz |
| Windows | .msi or *-setup.exe |
| Linux | .deb / .AppImage / .rpm |
macOS builds are currently unsigned. On first launch: right-click → Open, or allow Capptivo under System Settings → Privacy & Security. Grant Screen Recording when prompted, then relaunch.
Captions need a system whisper.cpp
whisper-cli binary; the app downloads the model weights on first use.
Maintainers: cutting a release
GitHub Actions builds macOS (Intel + Apple Silicon), Windows, and Linux installers — no local Windows/Linux machines needed.
- Bump the desktop version in
package.json,src-tauri/tauri.conf.json,src-tauri/Cargo.toml, and thedesktoppackage entry insrc-tauri/Cargo.lock. Keep all four entries identical. - Commit and push the version change to the canonical
SECHAK-AG/capptivodefault branch. Create and push a matching tag, for examplev0.1.0:
git tag v0.1.0
git push origin main
git push origin v0.1.0
- From the Release workflow, select the canonical default branch and run it manually with that existing tag.
The workflow accepts only a
vMAJOR.MINOR.PATCHtag whose commit is reachable from the canonical default branch and whose four version entries match the tag. It creates or replaces the assets of a draft GitHub Release. Review and publish the draft separately
Release environment and signing: Configure the protected release environment with TAURI_SIGNING_PRIVATE_KEY and TAURI_SIGNING_PRIVATE_KEY_PASSWORD.
They are required to sign the updater artifacts for every platform.
The current macOS bundles are ad hoc signed and not notarized.
Windows bundles are not Authenticode-signed.
Apple notarization and Windows code-signing credentials are separate future work
Permissions: Keep the repository-default GITHUB_TOKEN permissions read-only.
The publish job grants only its own contents: write scope.
If policy blocks that scope, review the organization or enterprise Actions policy
Platforms
Capptivo runs on:
- macOS 13.0+
- Windows 10 version 2004, build 19041 or later, required to keep Capptivo overlays out of recordings
- Linux on modern distros with PipeWire 1.0+ (e.g. Ubuntu 24.04+) — X11 and Wayland
Platform notes:
- macOS captures through native ScreenCaptureKit with VideoToolbox hardware H.264 encoding; system audio comes from a companion SCK stream.
- Windows captures through native Windows.Graphics.Capture. Capptivo's current Windows capture backend requires Direct3D feature level 11_0 or later on the hardware adapter Windows selects by default. Hardware encoding is probed per machine (NVENC / QuickSync / AMF / Media Foundation), with system audio via WASAPI loopback.
- Linux captures through xdg-desktop-portal + PipeWire — the screen/window is picked in the system dialog. System audio comes from the PulseAudio/PipeWire monitor. Cursor replay / follow-zoom use an X11 pointer probe on X11 sessions, and PipeWire cursor Metadata on Wayland when the portal supports it (otherwise the cursor is embedded in the recording and zoom-follow is unavailable). Area selection isn't available yet on Linux — crop in the editor instead.
Quick start
corepack pnpm install
corepack pnpm tauri dev
Requires Rust 1.98.0, the Node version declared in .node-version, and
Corepack. The Rust toolchain file includes rustfmt and Clippy, while Corepack
selects the pinned pnpm release from package.json.
FFmpeg is fetched automatically as a per-platform sidecar on first dev/build
(scripts/fetch-ffmpeg.mjs), installed as capptivo-ffmpeg /
capptivo-ffprobe so Linux packages do not collide with the system ffmpeg
package. Exact source URLs, archive members, sizes, and SHA-256 digests are
committed in scripts/ffmpeg-sidecars.json. The fetcher verifies downloaded,
extracted, staged, and cached files before it permits Tauri's chained command
to continue; a missing or invalid cache entry is replaced from the pinned
source.
On Windows, a portable Rust 1.98.0 toolchain can be placed under .local. Run
development commands through the repository launcher so Rust is selected only
from that directory:
powershell -ExecutionPolicy Bypass -File scripts/with-local-rust.ps1 corepack pnpm tauri dev
The launcher prefers a verified versioned MSVC toolchain, such as
.local/rustup/toolchains/1.98.0-x86_64-pc-windows-msvc/bin, and uses a sole
matching alias only when that directory is absent. It keeps Cargo state and
build output under .local, does not install or download Rust, and does not
fall back to a host toolchain. Native Windows builds still require the MSVC C++
Build Tools, including link.exe, on PATH; the
portable directory replaces only the Rust installation.
macOS: grant Screen Recording in System Settings on first launch, then relaunch.
Open the recorder with ⌥⇧R (Alt+Shift+R on Windows/Linux), or click the tray icon.
Features
Recording
- Menubar recorder with global hotkey (⌥⇧R)
- Capture display, window, or custom area (with live frame guide)
- Face-cam overlay while recording
- Microphone capture (device picker)
- System audio capture
- Language switch (English / Français / Español / Italiano / Deutsch / Português / Русский / 日本語 / 한국어 / 中文 / العربية)
- Countdown before start
- Pause / resume
- On-screen annotations while recording
- Native pipeline per OS (ScreenCaptureKit / Windows.Graphics.Capture / PipeWire) → hardware H.264 → crash-safe fragmented MP4
- 60 Hz cursor + click track saved with the project (
cursor.json)

Annotations
Draw on top of the screen while recording — floating toolbar, click-through when idle.
- Select tool (pass clicks through to the desktop)
- Pen and highlighter
- Eraser
- Shapes: rectangle, ellipse, line, arrow
- Text
- Color palette + custom picker
- Brush size
- Undo / redo / clear all
- Draggable toolbar; Escape peels panels then closes

Zoom & motion
- Zoom fragments on the timeline (add with Z or Add fragment)
- Auto-suggest zooms from clicks when you open a fresh recording (or Add fragment → Suggest zooms)
- Follow-cursor zoom (pans with the pointer)
- Fixed zoom regions (drag / resize the frame)
- Scope: recording only or full scene (background included)
- Scale, pan smoothness, ease in / ease out
- Shrink background padding during zoom
- Shrink face-cam during zoom (size at peak zoom)
- Automatic motion between fragments

Cursor
- Show / hide composited cursor
- Styles: macOS, Tahoe, Tahoe inverted, Minimal
- Cursor size
- Motion blur
- Click bounce + bounce speed
- Cursor sway

Look & composition
- Backgrounds: image presets, gradients, solid colors, or upload your own
- Custom gradient angle / colors
- Named editor presets — save / apply look, face cam, cursor, captions, and export settings
- Screen content crop (hide chrome / clutter)
- Video padding
- Recording corner radius
- Recording shadow
- Background blur
- Background darkness

Face cam
- Round or rectangular PiP
- Mirror webcam
- Corner position + margin from the frame edge
- Size / width / height
- Roundness (rectangular)
- Shadow intensity
- Crop face cam
- Layout that stays in sync with zoom (optional shrink during zoom)
Captions
- On-device speech-to-text (Whisper via whisper.cpp)
- Downloadable model, no cloud required
- Generate, style, and burn captions into preview + export

Timeline
- Scrub and play the composition
- Zoom fragments (add, suggest from clicks, select, resize, split, delete)
- Trim gaps (add with T)
- Undo / redo
- Timeline zoom (auto / manual)
- Reset fragments
Export
- Formats: MP4, WebM, GIF
- Resolution presets (low → original)
- Encoding quality / GIF color quality
- Frame rate (24 / 30 / 60)
- Optional voice enhancement (podcast)
- Progress UI, save dialog, notification + reveal in Finder / Explorer / file manager

Local-first
- Projects stored in the OS app-data directory (Application Support / AppData / XDG)
- In-app recordings library
- Rename projects
- No account required to record or edit
- UI languages: English, Français, Español, Italiano, Deutsch, Português, Русский, 日本語, 한국어, 中文, العربية
Architecture
Capture → bounded frame channel → FFmpeg / VideoToolbox → screen.mp4
Cursor → cursor.json
UI → typed IPC projection of Rust state
Editor → media:// (HTTP Range) + canvas compositor → export
Rust owns capture, encoding, and storage. The React shell is presentation only — domain modules never import tauri::*.
src-tauri/src/
├── recorder/ # CaptureBackend → encoder (no Tauri)
├── cursor/ # 60 Hz pointer tracker (CoreGraphics / Win32 / X11)
├── project/ # local store + schema
├── commands/ # thin IPC adapters
└── … # tray, windows, media protocol
Development
corepack pnpm tauri dev # app + Vite
cd src-tauri && cargo test --no-default-features
cargo check --no-default-features
Windows development with portable Rust uses the repository root:
powershell -ExecutionPolicy Bypass -File scripts/with-local-rust.ps1 cargo test --manifest-path src-tauri/Cargo.toml --no-default-features
powershell -ExecutionPolicy Bypass -File scripts/with-local-rust.ps1 cargo check --manifest-path src-tauri/Cargo.toml --no-default-features
Local diagnostics
Capptivo keeps the latest 200 diagnostic codes in diagnostics/diagnostics-v1.log under its application-data directory
Each JSON line contains a Unix timestamp and a fixed code identifying a native, recorder, export, or renderer failure category
The file contains no error text, file or media names, paths, stack traces, recordings, or device identifiers
It is not uploaded automatically
Detailed console output during development remains separate from this file
While not recording, right-click the tray icon and choose Open Diagnostics… to locate the file, or Clear Diagnostics to empty it
Only the current diagnostic file is cleared
Older logs/errors.log and capptivo.* files are neither imported nor deleted
The application does not add a warning history to recordings
The file remains local to the current user's application data and is not encrypted Older entries are removed as new ones arrive, with no age-based expiration Clearing and writing are serialized, but a later failure can create a new entry after a clear Writes are best effort, and an interrupted write can lose diagnostic history An unavailable application-data path or failed write does not prevent recording and is not redirected to a temporary directory
License
Copyright (c) 2026 idboussadel
Capptivo Desktop is released under the MIT License (MIT). You are
free to use, copy, modify, merge, publish, distribute, sublicense, and sell
copies of the software, provided the copyright notice and permission notice
are included in all copies or substantial portions of it.
The software is provided "AS IS", WITHOUT WARRANTY OF ANY KIND, express or implied. See LICENSE for the full text.
Bundled and downloaded third-party components (notably the FFmpeg sidecars, which are GPL-licensed) have their own licenses and are not covered by Capptivo's MIT license — see THIRD_PARTY_NOTICES.md for what that means if you redistribute builds.
By contributing, you agree that your contributions are licensed under the
same terms (MIT).