A beautiful offline video queue for macOS.
Paste a link, let it download, and watch without the surrounding website.
Download Replay for macOS · All releases
- Download the latest DMG.
- Open it and drag Replay into Applications.
- Open Replay normally from Applications.
The release is signed with a Developer ID certificate, notarized by Apple, universal for Apple silicon and Intel Macs, and includes yt-dlp, ffmpeg, and Deno. No Homebrew setup is required. Replay requires macOS 13 or newer.
- Copy a YouTube or X video URL and bring Replay forward. Replay offers a preview with its title, thumbnail, and length; press Return to add it or Escape to dismiss it.
- Click Add Video at the top of the queue to enter any URL manually. Command-V opens the same prefilled preview from anywhere in the app.
- Drag a URL,
.webloc, or.urlfile onto the app window or its Dock icon.
New items download in the background and are stored locally for offline playback. YouTube and X are the main targets, and other non-DRM sites supported by yt-dlp may work too.
- Offline playback with a focused, distraction-free native player
- Persistent resume position, playback speed, volume, subtitles, and chapter-pane state
- YouTube creator chapters displayed in the timeline and a collapsible chapter inspector
- Offline English subtitles when creator or automatic captions are available
- Queue reordering, inline renaming, watched archive, thumbnails, and batch URL extraction
- 10-second seek controls, keyboard shortcuts, media-key support, fullscreen, AirPlay, and a compact background player
- Automatic retry after transient network failures and pause-on-Low-Power-Mode behavior
- Optional YouTube sign-in through your browser, with a retry action for blocked downloads
- No autoplay after a download or relaunch
If YouTube asks you to sign in or confirm you are not a bot, choose Choose Browser & Retry… on the failed video. Select a browser where you are already signed into YouTube and confirm the retry. You can also manage this choice from Replay → YouTube Sign-In… and retry eligible failures with Replay → Retry Failed Downloads.
Browser authentication is off by default and applies only to YouTube. Replay passes the selected browser to yt-dlp for downloads, captions, thumbnails, and metadata requests. It reads the browser session locally and uses matching cookies to authenticate to YouTube; Replay saves only your browser choice, without exporting a cookie file. macOS may ask you to allow access to the browser's Keychain item. If you use multiple profiles, yt-dlp uses its default profile selection for that browser.
Choose Off in YouTube Sign-In to turn this off for new requests. If authentication still fails, open the video in that browser, sign in or complete YouTube's check, then retry. Sign-in and browser-access failures wait for your action instead of repeatedly retrying. A post without an attached video is reported separately and skipped by Retry Failed Downloads.
| Input | Action |
|---|---|
Command-V |
Preview the video URL on the clipboard |
Space |
Play or pause |
Left / Right |
Skip backward or forward 10 seconds |
Up / Down |
Change playback speed by 0.1× |
F |
Toggle video fullscreen |
| Vertical scroll over video | Change volume |
YouTube presents JavaScript challenges that yt-dlp needs to evaluate to discover the complete set of playable formats. Deno is yt-dlp's recommended restricted JavaScript runtime for that job. It is not used to render the app UI and is only launched by yt-dlp while resolving supported videos.
The release also bundles a portable ffmpeg build for merging separate video and audio streams, thumbnail conversion, and subtitle conversion. The runtime tools and their license notices live inside the app at Contents/Resources.
- Downloaded media:
~/Movies/Replay - Queue metadata:
~/Library/Application Support/Replay/queue.json - No analytics, accounts, or cloud sync
- Optional local browser-session access for YouTube; disabled by default, with no exported cookie file
- No DRM decryption
Use Replay only for media you are authorized to download. Site terms and copyright rules still apply.
git clone https://github.com/grinich/replay.git
cd replay
./scripts/build_app.sh
./scripts/test.shThe development build is written to dist/Replay.app. It uses bundled runtime tools when supplied by the release packager, then falls back to Homebrew paths for local development:
brew install yt-dlp ffmpeg denoTo create the same self-contained universal app, updater archive, and DMG published on GitHub:
./scripts/package_release.shThe first packaging run downloads checksum-verified yt-dlp and Deno release binaries and builds a portable LGPL ffmpeg from official source. Subsequent builds reuse the cached runtime artifacts under .build.
Official releases additionally set REPLAY_SIGNING_IDENTITY, REPLAY_NOTARIZE=1, and a REPLAY_NOTARY_PROFILE created with notarytool. Development packages remain ad-hoc signed.
main is built and tested by GitHub Actions. A tag matching the version in Resources/Info.plist, such as v0.4.0, triggers the release workflow, which:
- Builds arm64 and x86_64 app binaries and combines them into a universal app.
- Bundles universal yt-dlp, ffmpeg, and Deno runtimes plus license notices.
- Signs every Replay executable with Developer ID, hardened runtime, and a secure timestamp.
- Notarizes and staples the app and styled DMG, then verifies both with Gatekeeper.
- Publishes
Replay.dmgfor installation and a stapled-appReplay-macOS.zipfor automatic updates, with SHA-256 checksums for both.
See CONTRIBUTING.md for contribution and release details.
Replay is available under the MIT License. Bundled runtime components retain their respective upstream licenses.

