Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
7216f25
feat: add video transcriptions (in-browser auto captions)
parse-nip May 13, 2026
1c431fe
fix: improve auto-caption timing and pause handling
parse-nip May 14, 2026
2b7e6f1
fix: address PR review for auto captions and locales
parse-nip May 14, 2026
3a48e54
fix: time-slice single-group phrase captions into lines
parse-nip May 14, 2026
5417581
merge: upstream main into feature/video-transcriptions
parse-nip May 14, 2026
a0bcd9f
feat(editor): polish auto-caption loading toasts
parse-nip May 15, 2026
2ee00a7
fix(captioning): narrow ORT node shim, trim retries, and abort checks
parse-nip May 15, 2026
ea09fdc
test: expose source selector hooks
AjTheSpidey May 21, 2026
2349272
feat: add webcam mirror toggle
AjTheSpidey May 21, 2026
2cf09a8
fix: polish webcam mirror toggle
AjTheSpidey May 22, 2026
205ea55
fix: tidy webcam mirror settings
AjTheSpidey May 25, 2026
7cf78fe
feat: Add projectFolder to user preferences
paulohenriquesg May 29, 2026
68b26c2
Merge upstream/main into feat/remember-last-project-folder
paulohenriquesg May 31, 2026
0ab0859
Merge remote-tracking branch 'origin/main' into feature/video-transcr…
siddharthvaddem May 31, 2026
53be8df
docs: add macOS native cursor capture test pipeline
kaili-yang Jun 1, 2026
b56daae
Merge upstream main into webcam mirror toggle
AjTheSpidey Jun 1, 2026
a18dc39
Merge upstream main into source selector test hooks
AjTheSpidey Jun 1, 2026
a280179
docs: fix three inaccuracies flagged by bot reviews
kaili-yang Jun 1, 2026
c01c88b
Merge upstream/main into feat/remember-last-project-folder
paulohenriquesg Jun 1, 2026
f5ad566
fix: pass getProjectFolder to loadProjectFile in EditorEmptyState
paulohenriquesg Jun 1, 2026
9a83062
Merge pull request #633 from AjTheSpidey/codex/webcam-mirror-toggle
siddharthvaddem Jun 2, 2026
6873b80
Merge pull request #631 from AjTheSpidey/codex/source-selector-test-h…
siddharthvaddem Jun 2, 2026
94a00c0
Merge pull request #673 from kaili-yang/docs/mac-native-cursor
siddharthvaddem Jun 2, 2026
e5462f1
captions: run Whisper in a Web Worker, move auto-captions button to t…
siddharthvaddem Jun 2, 2026
4ce7af4
Merge pull request #589 from parse-nip/feature/video-transcriptions
siddharthvaddem Jun 2, 2026
b8eeef5
fix: resolve cursor-sampler telemetry not working
jodelcioluz Jun 3, 2026
a19771e
Merge pull request #681 from jodelcioluz/fix-cursor-telemetry
siddharthvaddem Jun 3, 2026
970406a
Merge pull request #669 from paulohenriquesg/feat/remember-last-proje…
siddharthvaddem Jun 3, 2026
c35a899
fix vertical layout
siddharthvaddem Jun 3, 2026
4a18361
fix ci check
siddharthvaddem Jun 3, 2026
43b01cf
record permissions prompt
siddharthvaddem Jun 4, 2026
1d7b677
clip tooltio
siddharthvaddem Jun 4, 2026
a371658
global auto toggle
siddharthvaddem Jun 4, 2026
62f4f45
fix variant class
siddharthvaddem Jun 4, 2026
332b6b7
rm blur
siddharthvaddem Jun 4, 2026
0e3bd17
improve waveform
siddharthvaddem Jun 4, 2026
98a3237
fix export compoisted shadow
siddharthvaddem Jun 4, 2026
b088a09
custom cursors
siddharthvaddem Jun 5, 2026
a806e34
reactive zoom
siddharthvaddem Jun 5, 2026
e49cc02
improved cursor smoothing
siddharthvaddem Jun 5, 2026
02b4e1b
cleanup follow effect
siddharthvaddem Jun 5, 2026
358d4af
remove oversmooth
siddharthvaddem Jun 5, 2026
96e178c
fix toggles
siddharthvaddem Jun 5, 2026
c03db08
version bump
siddharthvaddem Jun 5, 2026
c6331ba
fix(build): use sharp prebuilt instead of compiling from source (fixe…
siddharthvaddem Jun 5, 2026
3e3a816
bundle tts
siddharthvaddem Jun 6, 2026
53f9851
fix auto focus export sync
siddharthvaddem Jun 6, 2026
c539e9b
cleanup
siddharthvaddem Jun 6, 2026
5f71979
helper fix
siddharthvaddem Jun 6, 2026
21c637a
fix 2
siddharthvaddem Jun 6, 2026
cc8307f
final readme
siddharthvaddem Jun 6, 2026
ffc41a3
--
siddharthvaddem Jun 6, 2026
d46d37f
chore: bump nix package to v1.5.0
github-actions[bot] Jun 6, 2026
71622a2
Merge pull request #690 from siddharthvaddem/chore/bump-nix-1.5.0
siddharthvaddem Jun 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 44 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,14 @@ jobs:
- name: Install dependencies
run: npm ci

# Cache the downloaded caption model so we don't re-fetch from HuggingFace every run
# (and to avoid 429s when the platform matrix builds hit it at once).
- name: Cache caption assets
uses: actions/cache@v4
with:
path: caption-assets
key: caption-assets-${{ hashFiles('scripts/fetch-caption-model.mjs') }}

- name: Build Windows app
run: npm run build:win
env:
Expand Down Expand Up @@ -69,6 +77,23 @@ jobs:
- name: Install dependencies
run: npm ci

# ─── Ensure sharp prebuilt binary (+ bundled libvips) ─────
# `npm ci` can leave sharp without its prebuilt binary/vendored libvips,
# which makes electron-builder's native rebuild fail ("vips-cpp.42 not
# found"). Re-fetch the prebuilt (never compile from source).
- name: Ensure sharp prebuilt
run: npm rebuild sharp
env:
npm_config_build_from_source: "false"

# ─── Cache caption assets ─────────────────────────────────
# Avoid re-fetching the Whisper model from HuggingFace every run (and 429s under the matrix).
- name: Cache caption assets
uses: actions/cache@v4
with:
path: caption-assets
key: caption-assets-${{ hashFiles('scripts/fetch-caption-model.mjs') }}

# ─── Import Code Signing Certificate ──────────────────────
# This is the KEY step that makes CI signing work.
# We create a temporary keychain, import the .p12 cert into it,
Expand Down Expand Up @@ -111,6 +136,17 @@ jobs:
- name: Build Vite + Electron
run: npx tsc && npx vite build

# ─── Build native macOS helpers ───────────────────────────
# The package step below calls electron-builder directly (not `npm run build:mac`),
# so the Swift screencapturekit + cursor helpers must be compiled here first or the
# packaged app ships without them (no recording, "cursor helper couldn't be found").
# Build the matrix arch into electron/native/bin/darwin-<arch> so each DMG gets its
# own native binary.
- name: Build native macOS helpers
run: npm run build:native:mac
env:
OPENSCREEN_MAC_HELPER_ARCHS: ${{ matrix.arch }}

# ─── Package with electron-builder ────────────────────────
# electron-builder handles deep codesigning the .app bundle
# "notarize: false" in electron-builder.json5 prevents it from
Expand Down Expand Up @@ -236,6 +272,14 @@ jobs:
- name: Install pacman build dependencies
run: sudo apt-get update && sudo apt-get install -y libarchive-tools

# Cache the downloaded caption model so we don't re-fetch from HuggingFace every run
# (and to avoid 429s when the platform matrix builds hit it at once).
- name: Cache caption assets
uses: actions/cache@v4
with:
path: caption-assets
key: caption-assets-${{ hashFiles('scripts/fetch-caption-model.mjs') }}

- name: Build Linux app
run: npm run build:linux
env:
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -63,3 +63,6 @@ result-*
#others

**/*.import

# Auto-caption model + ORT wasm — regenerated at build by scripts/fetch-caption-model.mjs
/caption-assets/
98 changes: 38 additions & 60 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,51 +1,51 @@
> [!WARNING]
> This started as a side project that took off — it's not production grade and you'll hit bugs, but hopefully it covers what you need.
> This started as a side project that blew up; not production grade and you'll hit bugs, but hopefully it covers what you need. **This project will soon be archived.**


<p align="center">
<img src="public/openscreen.png" alt="OpenScreen Logo" width="64" />
<br />
<br />
<a href="https://trendshift.io/repositories/17427" target="_blank"><img src="https://trendshift.io/api/badge/repositories/17427" alt="siddharthvaddem%2Fopenscreen | Trendshift" style="width: 250px; height: 55px;" width="250" height="55"/></a>
<br />
<br />
<a href="https://deepwiki.com/siddharthvaddem/openscreen">
<img src="https://deepwiki.com/badge.svg" alt="Ask DeepWiki" />
</a>
&nbsp;
<a href="https://discord.gg/yAQQhRaEeg">
<img src="https://dcbadge.limes.pink/api/server/https://discord.gg/yAQQhRaEeg?style=flat" alt="Join Discord" />
<a href="https://trendshift.io/repositories/17427" target="_blank"><img src="https://trendshift.io/api/badge/repositories/17427" alt="siddharthvaddem%2Fopenscreen | Trendshift" style="width: 256px; height: 64px;" width="256" height="64"/></a>


</a>
</p>

# <p align="center">OpenScreen</p>

<p align="center"><strong>OpenScreen is your free, open-source alternative to Screen Studio (sort of).</strong></p>
<p align="center"><strong>OpenScreen is your free, open-source alternative to Screen Studio.</strong></p>

If you don't want to pay $29/month for Screen Studio but want a much simpler version that does what most people seem to need - quick, polished product demos and walkthroughs you'd post on X, Reddit. OpenScreen does not offer all Screen Studio features, but covers the basics well!
If you don't want to pay $29/month for Screen Studio but want a version that does what most people seem to need - quick, polished product demos and walkthroughs you'd post on X, Reddit or Youtube. OpenScreen does not offer every Screen Studio feature, but covers a lot of the core functionality.

Screen Studio is an awesome product and this is definitely not a 1:1 clone. OpenScreen is a much simpler take, just the basics for folks who want control and don't want to pay. If you need all the fancy features, your best bet is to support Screen Studio (they really do a great job, haha). But if you just want something free (no gotchas) and open, this project does the job!
Screen Studio is an awesome product and this is definitely not a 1:1 clone. If you just want something fully free and open source, this project should cover most of your needs.

**100% free** for both **personal** and **commercial** use. Use it, modify it, distribute it — just be cool 😁 and shout out the project if you feel like it.
**100% free** for both **personal** and **commercial** use. Use it, modify it, distribute it. Please respect the License.

> [!NOTE]
>Software should be accessible. OpenScreen has no paid tiers, premium features, upsells, or functionality locked behind a paywall.

<p align="center">
<img src="public/preview3.png" alt="OpenScreen App Preview 3" style="height: 0.2467; margin-right: 12px;" />
<img src="public/preview4.png" alt="OpenScreen App Preview 4" style="height: 0.1678; margin-right: 12px;" />
<img src="public/demo.png" alt="" style="height: 0.2467; margin-right: 12px;" />
<img src="public/sample.png" alt="" style="height: 0.2467; margin-right: 12px;" />
</p>

## Core Features
- Record a specific window, region, or your whole screen.
- Record a specific window, or your whole screen.
- Record microphone and system audio.
- Webcam overlay with picture-in-picture, drag-to-position, and shape options.
- Auto or manual zooms with adjustable depth, duration, easing, and pixel-precise position.
- Wallpapers, solid colors, gradients, or a custom background.
- Motion blur for smoother pan and zoom transitions.
- Webcam overlay with picture-in-picture, drag-to-position, mirroring, and shape options.
- Auto or manual zooms with adjustable depth, duration, easing, and pixel-precise position; auto-zoom follows your cursor as you work.
- Custom cursor size, smoothing, and click effects, with cursor themes and post-recording path smoothing.
- Automatic captions for voiceovers, generated on-device with no upload (works offline).
- Wallpapers, solid colors, gradients, or your own background image.
- Motion blur.
- Crop, trim, and per-segment speed control on the timeline.
- Blur effects to hide sensitive parts of the screen.
- Cursor and click highlighting.
- Text, arrow, and image annotations.
- Save and reopen projects without re-recording.
- Text, arrow, and image annotations, with text animation presets.
- Timeline snapping guides and an audio waveform to make trimming easier.
- Customizable keyboard shortcuts.
- Export to MP4 or GIF in multiple aspect ratios and resolutions.
- Translated into Arabic, English, Spanish, French, Japanese, Korean, Russian, Turkish, Vietnamese, Simplified Chinese, and Traditional Chinese.
- Languages supported: Arabic, English, Spanish, French, Italian, Japanese, Korean, Portuguese (Brazil), Russian, Turkish, Vietnamese, Simplified Chinese, and Traditional Chinese.


## Installation

Expand Down Expand Up @@ -76,6 +76,9 @@ Note: Give your terminal Full Disk Access in **System Settings > Privacy & Secur

After running this command, proceed to **System Preferences > Security & Privacy** to grant the necessary permissions for "screen recording" and "accessibility". Once permissions are granted, you can launch the app.

> [!NOTE]
> **Upgrading from an older version and hitting permission issues?** If you already had OpenScreen installed and the new version won't record (Screen Recording or Accessibility keep failing even after you grant them), uninstall the old version, remove OpenScreen's existing entries under **System Settings > Privacy & Security** (both Screen Recording and Accessibility), then do a fresh install and grant the permissions again when prompted.

### Windows

Install via [winget](https://learn.microsoft.com/en-us/windows/package-manager/winget/):
Expand Down Expand Up @@ -146,45 +149,20 @@ You may need to grant screen recording permissions depending on your desktop env
./Openscreen-Linux-*.AppImage --no-sandbox
```

### Limitations

System audio capture relies on Electron's [desktopCapturer](https://www.electronjs.org/docs/latest/api/desktop-capturer) and has some platform-specific quirks:
### Platform differences

- **macOS**: Requires macOS 13+. On macOS 14.2+ you'll be prompted to grant audio capture permission. macOS 12 and below does not support system audio (mic still works).
- **Windows**: Works out of the box.
- **Linux**: Needs PipeWire (default on Ubuntu 22.04+, Fedora 34+). Older PulseAudio-only setups may not support system audio (mic should still work).
Everything in the editor and export is the same on macOS, Windows, and Linux: zooms, backgrounds, motion blur, crop/trim/speed, blur regions, annotations, auto-captions, projects, export, and all languages. The differences are in **capture**, where macOS and Windows use a native pipeline that Linux doesn't have:

## Built with
- Electron
- React
- TypeScript
- Vite
- PixiJS
- dnd-timeline
- **Native recording**: macOS (ScreenCaptureKit) and Windows (Windows Graphics Capture) record through a native pipeline for higher quality and clean window-level capture. Linux records through the browser pipeline instead.
- **Custom cursors**: on macOS and Windows the real cursor is captured (shape, type, and clicks), which powers the cursor themes, click effects, and editable cursor overlay. On Linux only the cursor position is captured (used for auto-zoom), so those cursor options aren't available.
- **Webcam**: captured natively on macOS and Windows; on Linux it's recorded through the browser, but still works as a picture-in-picture overlay.
- **System audio** support varies by OS:
- **macOS**: requires macOS 13+. On macOS 14.2+ you'll be prompted to grant audio capture permission. macOS 12 and below can't capture system audio (mic still works).
- **Windows**: works out of the box.
- **Linux**: needs PipeWire (default on Ubuntu 22.04+, Fedora 34+). Older PulseAudio-only setups may not capture system audio (mic should still work).

---


## Documentation

See the documentation here:
[OpenScreen Docs](https://deepwiki.com/siddharthvaddem/openscreen)
Refresh if outdated.

## Contributing

Contributions are welcome - please **include screenshots or a short video** for any UI change or new user-facing feature. If it touches what users see or do, show it. Skip only when it genuinely doesn't apply. PRs that don't follow this will be closed.

## Star History

<a href="https://www.star-history.com/?repos=siddharthvaddem%2Fopenscreen&type=date&legend=top-left">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/chart?repos=siddharthvaddem/openscreen&type=date&theme=dark&legend=top-left" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/chart?repos=siddharthvaddem/openscreen&type=date&legend=top-left" />
<img alt="Star History Chart" src="https://api.star-history.com/chart?repos=siddharthvaddem/openscreen&type=date&legend=top-left" />
</picture>
</a>

## License

This project is licensed under the [MIT License](./LICENSE). By using this software, you agree that the authors are not liable for any issues, damages, or claims arising from its use.
Loading
Loading