计划执行与检查节点
executing-plans
按既定实施计划完成工作,保持过程检查和反馈。
openscreen【效率与协作】Create stunning screen recordings and product demos with OpenScreen — open-source, no watermarks, free for commercial use. Use when: recording product demos, creating tutorial videos, building marketing content, screen recording with post-processing effects.
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
Open-source screen recording app for creating beautiful product demos and walkthroughs. A free alternative to Screen Studio — no watermarks, no account, no paid tier, MIT licensed for personal and commercial use.
Repository: getopenscreen/openscreen · Docs: getopenscreen.com/docs
The project was created by Siddharth Vaddem at siddharthvaddem/openscreen. That repository was archived after v1.5.0 and receives no updates; development continues at getopenscreen/openscreen under the same name and licence (v1.13.0, September 2026). Install from the new repository.
OpenScreen captures your screen and applies post-processing effects (zoom, cursor styling, backgrounds, motion blur, captions) to produce polished demo videos. Since the continuation it also has a command-line interface, so a script or a coding agent can record, edit the project file and render without opening the editor.
record, export, captions, sources, pack, info subcommands with NDJSON outputbrew install --cask getopenscreen/openscreen/openscreen
Or download the .dmg (Apple Silicon or Intel) from GitHub Releases. Builds from 1.9.0 on are signed and notarized, so Gatekeeper needs no terminal workaround.
Grant Screen Recording and Accessibility in System Settings → Privacy & Security: Screen Recording lets it capture, Accessibility is needed for the editable cursor (shape and clicks). macOS 15 and later asks again for Screen Recording from time to time; that prompt comes from the system. Microphone recording needs macOS 15+.
winget install --source msstore OpenScreen
The Microsoft Store package is signed and updates itself. The standalone .exe on the Releases page is not code-signed, so SmartScreen warns about an unknown publisher.
Each release publishes .deb, .rpm, .pacman and .AppImage packages (x64 only) plus latest-linux.yml, which lists a SHA-512 checksum for each of them. Verify before installing:
VERSION=1.13.0
BASE=https://github.com/getopenscreen/openscreen/releases/download/v$VERSION
curl -fLO $BASE/Openscreen-Linux-$VERSION.deb
curl -fLO $BASE/latest-linux.yml
# Compare the package's SHA-512 with the checksum in the release manifest
want=$(grep -A1 "url: Openscreen-Linux-$VERSION.deb" latest-linux.yml | awk '/sha512/ {print $2}')
got=$(openssl dgst -sha512 -binary Openscreen-Linux-$VERSION.deb | base64 -w0)
[ "$want" = "$got" ] && sudo apt install ./Openscreen-Linux-$VERSION.deb
Other packages: sudo dnf install ./Openscreen-Linux-*.rpm, sudo pacman -U Openscreen-Linux-*.pacman, or chmod +x Openscreen-Linux-*.AppImage and run it (add --no-sandbox if it stops with a sandbox error). Nix: nix run github:getopenscreen/openscreen.
Recording needs xdg-desktop-portal and PipeWire; system audio needs PipeWire as the sound server. Click effects on Wayland work only when the user is in the input group — that group lets every program of that user read all input devices, so add it deliberately.
Z at the playheadS): presets from 0.25× to 5×, or any value from 0.1× to 100×; trimming (T).openscreen project to keep everything editable; an exported file is flatThe CLI is the app's own executable with a subcommand. On Linux packages it is openscreen; on macOS use /Applications/Openscreen.app/Contents/MacOS/Openscreen, on Windows Openscreen.exe in the install folder. No window opens, but a display server must be running.
openscreen help
openscreen sources --json # displays, windows, microphones
openscreen record --window "Invoicely" --mic --duration 30 --project demo.openscreen --json
openscreen captions demo.openscreen --min-words 2 --max-words 7
openscreen export demo.openscreen -o demo.mp4 --quality good --auto-zoom --json
openscreen export demo.openscreen -o demo.gif --gif-fps 20 --gif-size medium
openscreen info demo.openscreen --json # exit code 1 if the video is missing
openscreen pack demo.openscreen --out bundle/ # project + media in one folder
| Command | Options |
|---|---|
record | --display <n>, --window <title>, --mic, --mic-device <name>, --system-audio, --cursor <editable-overlay|system>, --duration <seconds>, --project <file.openscreen> |
export | -o/--out <file.mp4|.gif>, --format <mp4|gif>, --quality <medium|good|source> (720p, 1080p, source), --gif-fps <15|20|25|30>, --gif-size <medium|large|original>, --auto-zoom, --audio <file>, --audio-mode <mix|replace>, --audio-offset <seconds> |
captions | --min-words <n>, --max-words <n> (defaults 2 and 7) |
sources | -o <file> writes the JSON payload to a file |
With --json, stdout carries one JSON object per line (started, progress, log, warning, error, done); diagnostics go to stderr. Exit codes: 0 success, 1 failure, 2 bad arguments.
Stop a recording without --duration with Ctrl+C, SIGTERM, or by typing stop and Enter. A .openscreen project is plain JSON: media.screenVideoPath plus an editor object with zoomRegions, trimRegions, speedRegions, annotationRegions, aspectRatio and more, so edits can be scripted between record and export.
User request: "Record a polished product demo for our landing page."
In the app: close unrelated windows and notifications, pick the window in the recording HUD, enable the microphone, record, then in the editor run Automatic zooms, add manual zooms on key moments, choose a gradient background, trim dead time and export MP4 at 1080p.
Scripted (macOS or Windows, where --window selects the source):
openscreen record --window "Invoicely" --mic --duration 45 --project invoicely-demo.openscreen --json
openscreen captions invoicely-demo.openscreen --json
openscreen export invoicely-demo.openscreen -o invoicely-demo.mp4 --quality good --auto-zoom --json
The last line of the export output reports the file:
{"event":"done","success":true,"outputPath":"/Users/dana/demos/invoicely-demo.mp4","format":"mp4","width":1920,"height":1080}
User request: "Create a short vertical video showing our new feature."
Record the feature (30–60 seconds), then reshape the project for vertical video by editing its JSON: cut the login, double the speed of the setup, add a zoom and a label.
node -e '
const fs = require("fs");
const p = JSON.parse(fs.readFileSync("dark-mode.openscreen", "utf8"));
p.editor.aspectRatio = "9:16";
p.editor.trimRegions = [{ id: "trim-login", startMs: 0, endMs: 4000 }];
p.editor.speedRegions = [{ id: "speed-setup", startMs: 4000, endMs: 12000, speed: 2 }];
p.editor.zoomRegions = [{ id: "zoom-toggle", startMs: 14000, endMs: 19000, depth: 3,
focus: { cx: 0.5, cy: 0.4 }, focusMode: "manual", source: "manual" }];
p.editor.annotationRegions = [{ id: "label-toggle", startMs: 14000, endMs: 19000,
type: "text", content: "Dark mode in one click", textContent: "Dark mode in one click",
position: { x: 8, y: 6 }, size: { width: 40, height: 12 },
style: { fontSize: 32, color: "#ffffff" }, zIndex: 1 }];
fs.writeFileSync("dark-mode.openscreen", JSON.stringify(p, null, 2));
'
openscreen info dark-mode.openscreen
openscreen export dark-mode.openscreen -o dark-mode.mp4 --quality good
info prints Export: mp4 / good / 9:16 and Timeline: 1 zooms, 1 trims, 1 speed regions, 1 annotations; the export is a 1080×1920 H.264 file at 60 fps. Zoom depth runs from 1 to 6 (1.25× to 5×; 3 is 1.8×) and cx/cy are fractions of the frame.
.openscreen project before exporting; export once for web (1080p MP4) and again for other formats from the same projectrecord; MP4 from the CLI is always H.264 at 60 fps; captions are burned in, with no SRT/VTT output; an export cannot be cancelled except by ending the process--display and --window do not choose the source and unattended recording is not possible there; export works on a headless Linux machine only with a virtual display and a Vulkan driver.openscreen format can change in breaking ways between releases; re-check scripts after each updateopenscreen.io is a different product