Repository files navigation

wrec

wrec

the most efficient screen recorder for mac.

Download · Docs · For your agents · Contributing · CLI

CI powered by Blacksmith

Wrec records displays or windows with a native ScreenCaptureKit pipeline, writes hardware-encoded .mov files, and gives you both a native SwiftUI menu-bar app and a JSON-friendly CLI for scripts and agents.

Note

Wrec is still early public software. Release builds are not notarized, so macOS blocks the first launch of an app downloaded with a browser. The install script below is not affected (and neither is the CLI); if you drag the app in from a browser download instead, clear the quarantine recursively (the nested helpers are quarantined separately) and reopen:

xattr -dr com.apple.quarantine /Applications/Wrec.app

Features

  • Native SwiftUI menu-bar app with no capture code in the UI process.
  • Standalone wrec CLI for terminals, scripts, and coding agents.
  • Display and window capture.
  • HEVC by default, with H.264 available.
  • 30 FPS and 60 FPS recording.
  • Resolution controls for 720p, 1080p, 2K, 4K, and native capture.
  • Cursor capture, system audio capture, microphone capture, and Wrec-window hiding toggles.
  • Pause, resume, stop, queued jobs, and recording status.
  • Recoverable movie output: clean stops finalize exactly, while ten-second fragments preserve playable media through the last committed fragment after an abrupt interruption.
  • JSON output for target discovery, job control, errors, metrics, and logs.
  • Local recording history and metrics stored separately from media files.

Architecture

The app and CLI are thin clients for the same local recording service. The SwiftUI shell never captures frames itself: both clients send newline-delimited JSON requests over a channel-specific Unix socket to the Rust daemon. The daemon owns target discovery, permissions, the recording queue, job state, controls, history, and metrics.

For an active job, the daemon launches a separate native Swift capture engine. ScreenCaptureKit delivers frames directly to AVAssetWriter, which performs hardware encoding and writes the .mov file. Rust coordinates the recording but never copies or processes video frames.

Normal stops, macOS's sharing-control stop, capture errors, and catchable termination signals all converge on AVAssetWriter finalization. The writer also commits ten-second movie fragments, so an uncatchable process or machine failure leaves the file playable through its last completed fragment.

The app bundle contains wrec-app, daemon, and capture-engine. The standalone CLI package contains wrec, daemon, and capture-engine, so both interfaces use the same protocol and recording pipeline.

Normal CLI commands launch the matching Wrec app when its daemon is absent. This keeps macOS Screen Recording permission attached to Wrec, Wrec Nightly, or Wrec Dev instead of exposing internal helpers in System Settings.

Install

The app:

curl -fsSL https://wrec.app/install-app | sh

The installer downloads the latest release, verifies its checksum, and installs it into /Applications with no Gatekeeper warning (curl downloads are never quarantined). You can also download the build from GitHub Releases and drag it into /Applications yourself — see the quarantine note above. Either way the app then updates itself in place: About → Check for updates (the update is digest-verified and relaunches without the Gatekeeper warning).

The CLI — for terminals, scripts, and coding agents:

curl -fsSL https://wrec.app/install | sh

The CLI installer grabs the archive for your Mac, installs the runtime under /usr/local/lib/wrec, and places a managed wrapper at /usr/local/bin/wrec. Update it later with wrec update (or check first with wrec update --check).

Nightly — optimized early-access builds from main, isolated from stable:

curl -fsSL https://wrec.app/install-app | WREC_CHANNEL=nightly sh
curl -fsSL https://wrec.app/install | WREC_CHANNEL=nightly sh

Nightly installs as Wrec Nightly.app with the wrec-nightly CLI.

Requirements

  • macOS 15+.
  • Apple Silicon (M-series) Mac. Intel Macs are not supported yet.
  • Screen Recording permission for the matching Wrec app.
  • Audio Recording permission when system audio capture is enabled.
  • Microphone permission when microphone capture is enabled.

Build channels

ChannelAudienceAppCLIRuntime home
DevContributors building locallyWrec Devwrec-dev~/.wrec-dev
NightlyUsers testing work from mainWrec Nightlywrec-nightly~/.wrec-nightly
ReleaseStable usersWrecwrec~/.wrec

Each channel also has its own ~/Library/Application Support/<app name> data directory and ~/Movies/<app name> default recording directory.

Set WREC_HOME to override the daemon directory for tests or isolated agents.

Contributing

Building from source, development checks, and packaging live in CONTRIBUTING.md. Wrec's north star is recording efficiency: low memory footprint, low CPU usage, and clear controls for people and agents.

License

MIT

About

the most efficient screen recorder for mac.

Resources

Contributing

Security policy

Stars

78 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

wrec

wrec

the most efficient screen recorder for mac.

Download · Docs · For your agents · Contributing · CLI

CI powered by Blacksmith

Wrec records displays or windows with a native ScreenCaptureKit pipeline, writes hardware-encoded .mov files, and gives you both a native SwiftUI menu-bar app and a JSON-friendly CLI for scripts and agents.

Note

Wrec is still early public software. Release builds are not notarized, so macOS blocks the first launch of an app downloaded with a browser. The install script below is not affected (and neither is the CLI); if you drag the app in from a browser download instead, clear the quarantine recursively (the nested helpers are quarantined separately) and reopen:

xattr -dr com.apple.quarantine /Applications/Wrec.app

Features

  • Native SwiftUI menu-bar app with no capture code in the UI process.
  • Standalone wrec CLI for terminals, scripts, and coding agents.
  • Display and window capture.
  • HEVC by default, with H.264 available.
  • 30 FPS and 60 FPS recording.
  • Resolution controls for 720p, 1080p, 2K, 4K, and native capture.
  • Cursor capture, system audio capture, microphone capture, and Wrec-window hiding toggles.
  • Pause, resume, stop, queued jobs, and recording status.
  • Recoverable movie output: clean stops finalize exactly, while ten-second fragments preserve playable media through the last committed fragment after an abrupt interruption.
  • JSON output for target discovery, job control, errors, metrics, and logs.
  • Local recording history and metrics stored separately from media files.

Architecture

The app and CLI are thin clients for the same local recording service. The SwiftUI shell never captures frames itself: both clients send newline-delimited JSON requests over a channel-specific Unix socket to the Rust daemon. The daemon owns target discovery, permissions, the recording queue, job state, controls, history, and metrics.

For an active job, the daemon launches a separate native Swift capture engine. ScreenCaptureKit delivers frames directly to AVAssetWriter, which performs hardware encoding and writes the .mov file. Rust coordinates the recording but never copies or processes video frames.

Normal stops, macOS's sharing-control stop, capture errors, and catchable termination signals all converge on AVAssetWriter finalization. The writer also commits ten-second movie fragments, so an uncatchable process or machine failure leaves the file playable through its last completed fragment.

The app bundle contains wrec-app, daemon, and capture-engine. The standalone CLI package contains wrec, daemon, and capture-engine, so both interfaces use the same protocol and recording pipeline.

Normal CLI commands launch the matching Wrec app when its daemon is absent. This keeps macOS Screen Recording permission attached to Wrec, Wrec Nightly, or Wrec Dev instead of exposing internal helpers in System Settings.

Install

The app:

curl -fsSL https://wrec.app/install-app | sh

The installer downloads the latest release, verifies its checksum, and installs it into /Applications with no Gatekeeper warning (curl downloads are never quarantined). You can also download the build from GitHub Releases and drag it into /Applications yourself — see the quarantine note above. Either way the app then updates itself in place: About → Check for updates (the update is digest-verified and relaunches without the Gatekeeper warning).

The CLI — for terminals, scripts, and coding agents:

curl -fsSL https://wrec.app/install | sh

The CLI installer grabs the archive for your Mac, installs the runtime under /usr/local/lib/wrec, and places a managed wrapper at /usr/local/bin/wrec. Update it later with wrec update (or check first with wrec update --check).

Nightly — optimized early-access builds from main, isolated from stable:

curl -fsSL https://wrec.app/install-app | WREC_CHANNEL=nightly sh
curl -fsSL https://wrec.app/install | WREC_CHANNEL=nightly sh

Nightly installs as Wrec Nightly.app with the wrec-nightly CLI.

Requirements

  • macOS 15+.
  • Apple Silicon (M-series) Mac. Intel Macs are not supported yet.
  • Screen Recording permission for the matching Wrec app.
  • Audio Recording permission when system audio capture is enabled.
  • Microphone permission when microphone capture is enabled.

Build channels

ChannelAudienceAppCLIRuntime home
DevContributors building locallyWrec Devwrec-dev~/.wrec-dev
NightlyUsers testing work from mainWrec Nightlywrec-nightly~/.wrec-nightly
ReleaseStable usersWrecwrec~/.wrec

Each channel also has its own ~/Library/Application Support/<app name> data directory and ~/Movies/<app name> default recording directory.

Set WREC_HOME to override the daemon directory for tests or isolated agents.

Contributing

Building from source, development checks, and packaging live in CONTRIBUTING.md. Wrec's north star is recording efficiency: low memory footprint, low CPU usage, and clear controls for people and agents.

License

MIT

About

the most efficient screen recorder for mac.

Resources

Contributing

Security policy

Stars

78 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

wrec

wrec

the most efficient screen recorder for mac.

Download · Docs · For your agents · Contributing · CLI

CI powered by Blacksmith

Wrec records displays or windows with a native ScreenCaptureKit pipeline, writes hardware-encoded .mov files, and gives you both a native SwiftUI menu-bar app and a JSON-friendly CLI for scripts and agents.

Note

Wrec is still early public software. Release builds are not notarized, so macOS blocks the first launch of an app downloaded with a browser. The install script below is not affected (and neither is the CLI); if you drag the app in from a browser download instead, clear the quarantine recursively (the nested helpers are quarantined separately) and reopen:

xattr -dr com.apple.quarantine /Applications/Wrec.app

Features

  • Native SwiftUI menu-bar app with no capture code in the UI process.
  • Standalone wrec CLI for terminals, scripts, and coding agents.
  • Display and window capture.
  • HEVC by default, with H.264 available.
  • 30 FPS and 60 FPS recording.
  • Resolution controls for 720p, 1080p, 2K, 4K, and native capture.
  • Cursor capture, system audio capture, microphone capture, and Wrec-window hiding toggles.
  • Pause, resume, stop, queued jobs, and recording status.
  • Recoverable movie output: clean stops finalize exactly, while ten-second fragments preserve playable media through the last committed fragment after an abrupt interruption.
  • JSON output for target discovery, job control, errors, metrics, and logs.
  • Local recording history and metrics stored separately from media files.

Architecture

The app and CLI are thin clients for the same local recording service. The SwiftUI shell never captures frames itself: both clients send newline-delimited JSON requests over a channel-specific Unix socket to the Rust daemon. The daemon owns target discovery, permissions, the recording queue, job state, controls, history, and metrics.

For an active job, the daemon launches a separate native Swift capture engine. ScreenCaptureKit delivers frames directly to AVAssetWriter, which performs hardware encoding and writes the .mov file. Rust coordinates the recording but never copies or processes video frames.

Normal stops, macOS's sharing-control stop, capture errors, and catchable termination signals all converge on AVAssetWriter finalization. The writer also commits ten-second movie fragments, so an uncatchable process or machine failure leaves the file playable through its last completed fragment.

The app bundle contains wrec-app, daemon, and capture-engine. The standalone CLI package contains wrec, daemon, and capture-engine, so both interfaces use the same protocol and recording pipeline.

Normal CLI commands launch the matching Wrec app when its daemon is absent. This keeps macOS Screen Recording permission attached to Wrec, Wrec Nightly, or Wrec Dev instead of exposing internal helpers in System Settings.

Install

The app:

curl -fsSL https://wrec.app/install-app | sh

The installer downloads the latest release, verifies its checksum, and installs it into /Applications with no Gatekeeper warning (curl downloads are never quarantined). You can also download the build from GitHub Releases and drag it into /Applications yourself — see the quarantine note above. Either way the app then updates itself in place: About → Check for updates (the update is digest-verified and relaunches without the Gatekeeper warning).

The CLI — for terminals, scripts, and coding agents:

curl -fsSL https://wrec.app/install | sh

The CLI installer grabs the archive for your Mac, installs the runtime under /usr/local/lib/wrec, and places a managed wrapper at /usr/local/bin/wrec. Update it later with wrec update (or check first with wrec update --check).

Nightly — optimized early-access builds from main, isolated from stable:

curl -fsSL https://wrec.app/install-app | WREC_CHANNEL=nightly sh
curl -fsSL https://wrec.app/install | WREC_CHANNEL=nightly sh

Nightly installs as Wrec Nightly.app with the wrec-nightly CLI.

Requirements

  • macOS 15+.
  • Apple Silicon (M-series) Mac. Intel Macs are not supported yet.
  • Screen Recording permission for the matching Wrec app.
  • Audio Recording permission when system audio capture is enabled.
  • Microphone permission when microphone capture is enabled.

Build channels

ChannelAudienceAppCLIRuntime home
DevContributors building locallyWrec Devwrec-dev~/.wrec-dev
NightlyUsers testing work from mainWrec Nightlywrec-nightly~/.wrec-nightly
ReleaseStable usersWrecwrec~/.wrec

Each channel also has its own ~/Library/Application Support/<app name> data directory and ~/Movies/<app name> default recording directory.

Set WREC_HOME to override the daemon directory for tests or isolated agents.

Contributing

Building from source, development checks, and packaging live in CONTRIBUTING.md. Wrec's north star is recording efficiency: low memory footprint, low CPU usage, and clear controls for people and agents.

License

MIT

About

the most efficient screen recorder for mac.

Resources

Contributing

Security policy

Stars

78 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

wrec

wrec

the most efficient screen recorder for mac.

Download · Docs · For your agents · Contributing · CLI

CI powered by Blacksmith

Wrec records displays or windows with a native ScreenCaptureKit pipeline, writes hardware-encoded .mov files, and gives you both a native SwiftUI menu-bar app and a JSON-friendly CLI for scripts and agents.

Note

Wrec is still early public software. Release builds are not notarized, so macOS blocks the first launch of an app downloaded with a browser. The install script below is not affected (and neither is the CLI); if you drag the app in from a browser download instead, clear the quarantine recursively (the nested helpers are quarantined separately) and reopen:

xattr -dr com.apple.quarantine /Applications/Wrec.app

Features

  • Native SwiftUI menu-bar app with no capture code in the UI process.
  • Standalone wrec CLI for terminals, scripts, and coding agents.
  • Display and window capture.
  • HEVC by default, with H.264 available.
  • 30 FPS and 60 FPS recording.
  • Resolution controls for 720p, 1080p, 2K, 4K, and native capture.
  • Cursor capture, system audio capture, microphone capture, and Wrec-window hiding toggles.
  • Pause, resume, stop, queued jobs, and recording status.
  • Recoverable movie output: clean stops finalize exactly, while ten-second fragments preserve playable media through the last committed fragment after an abrupt interruption.
  • JSON output for target discovery, job control, errors, metrics, and logs.
  • Local recording history and metrics stored separately from media files.

Architecture

The app and CLI are thin clients for the same local recording service. The SwiftUI shell never captures frames itself: both clients send newline-delimited JSON requests over a channel-specific Unix socket to the Rust daemon. The daemon owns target discovery, permissions, the recording queue, job state, controls, history, and metrics.

For an active job, the daemon launches a separate native Swift capture engine. ScreenCaptureKit delivers frames directly to AVAssetWriter, which performs hardware encoding and writes the .mov file. Rust coordinates the recording but never copies or processes video frames.

Normal stops, macOS's sharing-control stop, capture errors, and catchable termination signals all converge on AVAssetWriter finalization. The writer also commits ten-second movie fragments, so an uncatchable process or machine failure leaves the file playable through its last completed fragment.

The app bundle contains wrec-app, daemon, and capture-engine. The standalone CLI package contains wrec, daemon, and capture-engine, so both interfaces use the same protocol and recording pipeline.

Normal CLI commands launch the matching Wrec app when its daemon is absent. This keeps macOS Screen Recording permission attached to Wrec, Wrec Nightly, or Wrec Dev instead of exposing internal helpers in System Settings.

Install

The app:

curl -fsSL https://wrec.app/install-app | sh

The installer downloads the latest release, verifies its checksum, and installs it into /Applications with no Gatekeeper warning (curl downloads are never quarantined). You can also download the build from GitHub Releases and drag it into /Applications yourself — see the quarantine note above. Either way the app then updates itself in place: About → Check for updates (the update is digest-verified and relaunches without the Gatekeeper warning).

The CLI — for terminals, scripts, and coding agents:

curl -fsSL https://wrec.app/install | sh

The CLI installer grabs the archive for your Mac, installs the runtime under /usr/local/lib/wrec, and places a managed wrapper at /usr/local/bin/wrec. Update it later with wrec update (or check first with wrec update --check).

Nightly — optimized early-access builds from main, isolated from stable:

curl -fsSL https://wrec.app/install-app | WREC_CHANNEL=nightly sh
curl -fsSL https://wrec.app/install | WREC_CHANNEL=nightly sh

Nightly installs as Wrec Nightly.app with the wrec-nightly CLI.

Requirements

  • macOS 15+.
  • Apple Silicon (M-series) Mac. Intel Macs are not supported yet.
  • Screen Recording permission for the matching Wrec app.
  • Audio Recording permission when system audio capture is enabled.
  • Microphone permission when microphone capture is enabled.

Build channels

ChannelAudienceAppCLIRuntime home
DevContributors building locallyWrec Devwrec-dev~/.wrec-dev
NightlyUsers testing work from mainWrec Nightlywrec-nightly~/.wrec-nightly
ReleaseStable usersWrecwrec~/.wrec

Each channel also has its own ~/Library/Application Support/<app name> data directory and ~/Movies/<app name> default recording directory.

Set WREC_HOME to override the daemon directory for tests or isolated agents.

Contributing

Building from source, development checks, and packaging live in CONTRIBUTING.md. Wrec's north star is recording efficiency: low memory footprint, low CPU usage, and clear controls for people and agents.

License

MIT

About

the most efficient screen recorder for mac.

Resources

Contributing

Security policy

Stars

78 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

wrec

wrec

the most efficient screen recorder for mac.

Download · Docs · For your agents · Contributing · CLI

CI powered by Blacksmith

Wrec records displays or windows with a native ScreenCaptureKit pipeline, writes hardware-encoded .mov files, and gives you both a native SwiftUI menu-bar app and a JSON-friendly CLI for scripts and agents.

Note

Wrec is still early public software. Release builds are not notarized, so macOS blocks the first launch of an app downloaded with a browser. The install script below is not affected (and neither is the CLI); if you drag the app in from a browser download instead, clear the quarantine recursively (the nested helpers are quarantined separately) and reopen:

xattr -dr com.apple.quarantine /Applications/Wrec.app

Features

  • Native SwiftUI menu-bar app with no capture code in the UI process.
  • Standalone wrec CLI for terminals, scripts, and coding agents.
  • Display and window capture.
  • HEVC by default, with H.264 available.
  • 30 FPS and 60 FPS recording.
  • Resolution controls for 720p, 1080p, 2K, 4K, and native capture.
  • Cursor capture, system audio capture, microphone capture, and Wrec-window hiding toggles.
  • Pause, resume, stop, queued jobs, and recording status.
  • Recoverable movie output: clean stops finalize exactly, while ten-second fragments preserve playable media through the last committed fragment after an abrupt interruption.
  • JSON output for target discovery, job control, errors, metrics, and logs.
  • Local recording history and metrics stored separately from media files.

Architecture

The app and CLI are thin clients for the same local recording service. The SwiftUI shell never captures frames itself: both clients send newline-delimited JSON requests over a channel-specific Unix socket to the Rust daemon. The daemon owns target discovery, permissions, the recording queue, job state, controls, history, and metrics.

For an active job, the daemon launches a separate native Swift capture engine. ScreenCaptureKit delivers frames directly to AVAssetWriter, which performs hardware encoding and writes the .mov file. Rust coordinates the recording but never copies or processes video frames.

Normal stops, macOS's sharing-control stop, capture errors, and catchable termination signals all converge on AVAssetWriter finalization. The writer also commits ten-second movie fragments, so an uncatchable process or machine failure leaves the file playable through its last completed fragment.

The app bundle contains wrec-app, daemon, and capture-engine. The standalone CLI package contains wrec, daemon, and capture-engine, so both interfaces use the same protocol and recording pipeline.

Normal CLI commands launch the matching Wrec app when its daemon is absent. This keeps macOS Screen Recording permission attached to Wrec, Wrec Nightly, or Wrec Dev instead of exposing internal helpers in System Settings.

Install

The app:

curl -fsSL https://wrec.app/install-app | sh

The installer downloads the latest release, verifies its checksum, and installs it into /Applications with no Gatekeeper warning (curl downloads are never quarantined). You can also download the build from GitHub Releases and drag it into /Applications yourself — see the quarantine note above. Either way the app then updates itself in place: About → Check for updates (the update is digest-verified and relaunches without the Gatekeeper warning).

The CLI — for terminals, scripts, and coding agents:

curl -fsSL https://wrec.app/install | sh

The CLI installer grabs the archive for your Mac, installs the runtime under /usr/local/lib/wrec, and places a managed wrapper at /usr/local/bin/wrec. Update it later with wrec update (or check first with wrec update --check).

Nightly — optimized early-access builds from main, isolated from stable:

curl -fsSL https://wrec.app/install-app | WREC_CHANNEL=nightly sh
curl -fsSL https://wrec.app/install | WREC_CHANNEL=nightly sh

Nightly installs as Wrec Nightly.app with the wrec-nightly CLI.

Requirements

  • macOS 15+.
  • Apple Silicon (M-series) Mac. Intel Macs are not supported yet.
  • Screen Recording permission for the matching Wrec app.
  • Audio Recording permission when system audio capture is enabled.
  • Microphone permission when microphone capture is enabled.

Build channels

ChannelAudienceAppCLIRuntime home
DevContributors building locallyWrec Devwrec-dev~/.wrec-dev
NightlyUsers testing work from mainWrec Nightlywrec-nightly~/.wrec-nightly
ReleaseStable usersWrecwrec~/.wrec

Each channel also has its own ~/Library/Application Support/<app name> data directory and ~/Movies/<app name> default recording directory.

Set WREC_HOME to override the daemon directory for tests or isolated agents.

Contributing

Building from source, development checks, and packaging live in CONTRIBUTING.md. Wrec's north star is recording efficiency: low memory footprint, low CPU usage, and clear controls for people and agents.

License

MIT

About

the most efficient screen recorder for mac.

Resources

Contributing

Security policy

Stars

78 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

wrec

wrec

the most efficient screen recorder for mac.

Download · Docs · For your agents · Contributing · CLI

CI powered by Blacksmith

Wrec records displays or windows with a native ScreenCaptureKit pipeline, writes hardware-encoded .mov files, and gives you both a native SwiftUI menu-bar app and a JSON-friendly CLI for scripts and agents.

Note

Wrec is still early public software. Release builds are not notarized, so macOS blocks the first launch of an app downloaded with a browser. The install script below is not affected (and neither is the CLI); if you drag the app in from a browser download instead, clear the quarantine recursively (the nested helpers are quarantined separately) and reopen:

xattr -dr com.apple.quarantine /Applications/Wrec.app

Features

  • Native SwiftUI menu-bar app with no capture code in the UI process.
  • Standalone wrec CLI for terminals, scripts, and coding agents.
  • Display and window capture.
  • HEVC by default, with H.264 available.
  • 30 FPS and 60 FPS recording.
  • Resolution controls for 720p, 1080p, 2K, 4K, and native capture.
  • Cursor capture, system audio capture, microphone capture, and Wrec-window hiding toggles.
  • Pause, resume, stop, queued jobs, and recording status.
  • Recoverable movie output: clean stops finalize exactly, while ten-second fragments preserve playable media through the last committed fragment after an abrupt interruption.
  • JSON output for target discovery, job control, errors, metrics, and logs.
  • Local recording history and metrics stored separately from media files.

Architecture

The app and CLI are thin clients for the same local recording service. The SwiftUI shell never captures frames itself: both clients send newline-delimited JSON requests over a channel-specific Unix socket to the Rust daemon. The daemon owns target discovery, permissions, the recording queue, job state, controls, history, and metrics.

For an active job, the daemon launches a separate native Swift capture engine. ScreenCaptureKit delivers frames directly to AVAssetWriter, which performs hardware encoding and writes the .mov file. Rust coordinates the recording but never copies or processes video frames.

Normal stops, macOS's sharing-control stop, capture errors, and catchable termination signals all converge on AVAssetWriter finalization. The writer also commits ten-second movie fragments, so an uncatchable process or machine failure leaves the file playable through its last completed fragment.

The app bundle contains wrec-app, daemon, and capture-engine. The standalone CLI package contains wrec, daemon, and capture-engine, so both interfaces use the same protocol and recording pipeline.

Normal CLI commands launch the matching Wrec app when its daemon is absent. This keeps macOS Screen Recording permission attached to Wrec, Wrec Nightly, or Wrec Dev instead of exposing internal helpers in System Settings.

Install

The app:

curl -fsSL https://wrec.app/install-app | sh

The installer downloads the latest release, verifies its checksum, and installs it into /Applications with no Gatekeeper warning (curl downloads are never quarantined). You can also download the build from GitHub Releases and drag it into /Applications yourself — see the quarantine note above. Either way the app then updates itself in place: About → Check for updates (the update is digest-verified and relaunches without the Gatekeeper warning).

The CLI — for terminals, scripts, and coding agents:

curl -fsSL https://wrec.app/install | sh

The CLI installer grabs the archive for your Mac, installs the runtime under /usr/local/lib/wrec, and places a managed wrapper at /usr/local/bin/wrec. Update it later with wrec update (or check first with wrec update --check).

Nightly — optimized early-access builds from main, isolated from stable:

curl -fsSL https://wrec.app/install-app | WREC_CHANNEL=nightly sh
curl -fsSL https://wrec.app/install | WREC_CHANNEL=nightly sh

Nightly installs as Wrec Nightly.app with the wrec-nightly CLI.

Requirements

  • macOS 15+.
  • Apple Silicon (M-series) Mac. Intel Macs are not supported yet.
  • Screen Recording permission for the matching Wrec app.
  • Audio Recording permission when system audio capture is enabled.
  • Microphone permission when microphone capture is enabled.

Build channels

ChannelAudienceAppCLIRuntime home
DevContributors building locallyWrec Devwrec-dev~/.wrec-dev
NightlyUsers testing work from mainWrec Nightlywrec-nightly~/.wrec-nightly
ReleaseStable usersWrecwrec~/.wrec

Each channel also has its own ~/Library/Application Support/<app name> data directory and ~/Movies/<app name> default recording directory.

Set WREC_HOME to override the daemon directory for tests or isolated agents.

Contributing

Building from source, development checks, and packaging live in CONTRIBUTING.md. Wrec's north star is recording efficiency: low memory footprint, low CPU usage, and clear controls for people and agents.

License

MIT

About

the most efficient screen recorder for mac.

Resources

Contributing

Security policy

Stars

78 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

wrec

wrec

the most efficient screen recorder for mac.

Download · Docs · For your agents · Contributing · CLI

CI powered by Blacksmith

Wrec records displays or windows with a native ScreenCaptureKit pipeline, writes hardware-encoded .mov files, and gives you both a native SwiftUI menu-bar app and a JSON-friendly CLI for scripts and agents.

Note

Wrec is still early public software. Release builds are not notarized, so macOS blocks the first launch of an app downloaded with a browser. The install script below is not affected (and neither is the CLI); if you drag the app in from a browser download instead, clear the quarantine recursively (the nested helpers are quarantined separately) and reopen:

xattr -dr com.apple.quarantine /Applications/Wrec.app

Features

  • Native SwiftUI menu-bar app with no capture code in the UI process.
  • Standalone wrec CLI for terminals, scripts, and coding agents.
  • Display and window capture.
  • HEVC by default, with H.264 available.
  • 30 FPS and 60 FPS recording.
  • Resolution controls for 720p, 1080p, 2K, 4K, and native capture.
  • Cursor capture, system audio capture, microphone capture, and Wrec-window hiding toggles.
  • Pause, resume, stop, queued jobs, and recording status.
  • Recoverable movie output: clean stops finalize exactly, while ten-second fragments preserve playable media through the last committed fragment after an abrupt interruption.
  • JSON output for target discovery, job control, errors, metrics, and logs.
  • Local recording history and metrics stored separately from media files.

Architecture

The app and CLI are thin clients for the same local recording service. The SwiftUI shell never captures frames itself: both clients send newline-delimited JSON requests over a channel-specific Unix socket to the Rust daemon. The daemon owns target discovery, permissions, the recording queue, job state, controls, history, and metrics.

For an active job, the daemon launches a separate native Swift capture engine. ScreenCaptureKit delivers frames directly to AVAssetWriter, which performs hardware encoding and writes the .mov file. Rust coordinates the recording but never copies or processes video frames.

Normal stops, macOS's sharing-control stop, capture errors, and catchable termination signals all converge on AVAssetWriter finalization. The writer also commits ten-second movie fragments, so an uncatchable process or machine failure leaves the file playable through its last completed fragment.

The app bundle contains wrec-app, daemon, and capture-engine. The standalone CLI package contains wrec, daemon, and capture-engine, so both interfaces use the same protocol and recording pipeline.

Normal CLI commands launch the matching Wrec app when its daemon is absent. This keeps macOS Screen Recording permission attached to Wrec, Wrec Nightly, or Wrec Dev instead of exposing internal helpers in System Settings.

Install

The app:

curl -fsSL https://wrec.app/install-app | sh

The installer downloads the latest release, verifies its checksum, and installs it into /Applications with no Gatekeeper warning (curl downloads are never quarantined). You can also download the build from GitHub Releases and drag it into /Applications yourself — see the quarantine note above. Either way the app then updates itself in place: About → Check for updates (the update is digest-verified and relaunches without the Gatekeeper warning).

The CLI — for terminals, scripts, and coding agents:

curl -fsSL https://wrec.app/install | sh

The CLI installer grabs the archive for your Mac, installs the runtime under /usr/local/lib/wrec, and places a managed wrapper at /usr/local/bin/wrec. Update it later with wrec update (or check first with wrec update --check).

Nightly — optimized early-access builds from main, isolated from stable:

curl -fsSL https://wrec.app/install-app | WREC_CHANNEL=nightly sh
curl -fsSL https://wrec.app/install | WREC_CHANNEL=nightly sh

Nightly installs as Wrec Nightly.app with the wrec-nightly CLI.

Requirements

  • macOS 15+.
  • Apple Silicon (M-series) Mac. Intel Macs are not supported yet.
  • Screen Recording permission for the matching Wrec app.
  • Audio Recording permission when system audio capture is enabled.
  • Microphone permission when microphone capture is enabled.

Build channels

ChannelAudienceAppCLIRuntime home
DevContributors building locallyWrec Devwrec-dev~/.wrec-dev
NightlyUsers testing work from mainWrec Nightlywrec-nightly~/.wrec-nightly
ReleaseStable usersWrecwrec~/.wrec

Each channel also has its own ~/Library/Application Support/<app name> data directory and ~/Movies/<app name> default recording directory.

Set WREC_HOME to override the daemon directory for tests or isolated agents.

Contributing

Building from source, development checks, and packaging live in CONTRIBUTING.md. Wrec's north star is recording efficiency: low memory footprint, low CPU usage, and clear controls for people and agents.

License

MIT

About

the most efficient screen recorder for mac.

Resources

Contributing

Security policy

Stars

78 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

wrec

wrec

the most efficient screen recorder for mac.

Download · Docs · For your agents · Contributing · CLI

CI powered by Blacksmith

Wrec records displays or windows with a native ScreenCaptureKit pipeline, writes hardware-encoded .mov files, and gives you both a native SwiftUI menu-bar app and a JSON-friendly CLI for scripts and agents.

Note

Wrec is still early public software. Release builds are not notarized, so macOS blocks the first launch of an app downloaded with a browser. The install script below is not affected (and neither is the CLI); if you drag the app in from a browser download instead, clear the quarantine recursively (the nested helpers are quarantined separately) and reopen:

xattr -dr com.apple.quarantine /Applications/Wrec.app

Features

  • Native SwiftUI menu-bar app with no capture code in the UI process.
  • Standalone wrec CLI for terminals, scripts, and coding agents.
  • Display and window capture.
  • HEVC by default, with H.264 available.
  • 30 FPS and 60 FPS recording.
  • Resolution controls for 720p, 1080p, 2K, 4K, and native capture.
  • Cursor capture, system audio capture, microphone capture, and Wrec-window hiding toggles.
  • Pause, resume, stop, queued jobs, and recording status.
  • Recoverable movie output: clean stops finalize exactly, while ten-second fragments preserve playable media through the last committed fragment after an abrupt interruption.
  • JSON output for target discovery, job control, errors, metrics, and logs.
  • Local recording history and metrics stored separately from media files.

Architecture

The app and CLI are thin clients for the same local recording service. The SwiftUI shell never captures frames itself: both clients send newline-delimited JSON requests over a channel-specific Unix socket to the Rust daemon. The daemon owns target discovery, permissions, the recording queue, job state, controls, history, and metrics.

For an active job, the daemon launches a separate native Swift capture engine. ScreenCaptureKit delivers frames directly to AVAssetWriter, which performs hardware encoding and writes the .mov file. Rust coordinates the recording but never copies or processes video frames.

Normal stops, macOS's sharing-control stop, capture errors, and catchable termination signals all converge on AVAssetWriter finalization. The writer also commits ten-second movie fragments, so an uncatchable process or machine failure leaves the file playable through its last completed fragment.

The app bundle contains wrec-app, daemon, and capture-engine. The standalone CLI package contains wrec, daemon, and capture-engine, so both interfaces use the same protocol and recording pipeline.

Normal CLI commands launch the matching Wrec app when its daemon is absent. This keeps macOS Screen Recording permission attached to Wrec, Wrec Nightly, or Wrec Dev instead of exposing internal helpers in System Settings.

Install

The app:

curl -fsSL https://wrec.app/install-app | sh

The installer downloads the latest release, verifies its checksum, and installs it into /Applications with no Gatekeeper warning (curl downloads are never quarantined). You can also download the build from GitHub Releases and drag it into /Applications yourself — see the quarantine note above. Either way the app then updates itself in place: About → Check for updates (the update is digest-verified and relaunches without the Gatekeeper warning).

The CLI — for terminals, scripts, and coding agents:

curl -fsSL https://wrec.app/install | sh

The CLI installer grabs the archive for your Mac, installs the runtime under /usr/local/lib/wrec, and places a managed wrapper at /usr/local/bin/wrec. Update it later with wrec update (or check first with wrec update --check).

Nightly — optimized early-access builds from main, isolated from stable:

curl -fsSL https://wrec.app/install-app | WREC_CHANNEL=nightly sh
curl -fsSL https://wrec.app/install | WREC_CHANNEL=nightly sh

Nightly installs as Wrec Nightly.app with the wrec-nightly CLI.

Requirements

  • macOS 15+.
  • Apple Silicon (M-series) Mac. Intel Macs are not supported yet.
  • Screen Recording permission for the matching Wrec app.
  • Audio Recording permission when system audio capture is enabled.
  • Microphone permission when microphone capture is enabled.

Build channels

ChannelAudienceAppCLIRuntime home
DevContributors building locallyWrec Devwrec-dev~/.wrec-dev
NightlyUsers testing work from mainWrec Nightlywrec-nightly~/.wrec-nightly
ReleaseStable usersWrecwrec~/.wrec

Each channel also has its own ~/Library/Application Support/<app name> data directory and ~/Movies/<app name> default recording directory.

Set WREC_HOME to override the daemon directory for tests or isolated agents.

Contributing

Building from source, development checks, and packaging live in CONTRIBUTING.md. Wrec's north star is recording efficiency: low memory footprint, low CPU usage, and clear controls for people and agents.

License

MIT

About

the most efficient screen recorder for mac.

Resources

Contributing

Security policy

Stars

78 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages