Freshet

Plays while it pours in.

A native Mac video player for BitTorrent. Paste a magnet link and video starts within seconds, and you can seek anywhere before the download finishes.

Free and open source. Version 1.0 for macOS 27 or later on Apple silicon.

Headwaters
Press ⌘V to paste a magnet link.

A simulation of Freshet running in your browser. Nothing is downloaded.

Know before you seek.

Most players give you a progress bar, and a progress bar can’t tell you much. Freshet draws the file into its seek bar: a tick wherever that stretch is on your Mac, a gap wherever it isn’t, with the playhead riding on top. One glance tells you whether a seek will land in loaded territory or stall.

A progress bar0%
Freshet’s seek bar, enlargedResolving…
  • On your Mac
  • Not yet
  • Playhead
Headwaters1.4 GB

Click anywhere on the map to seek. Freshet clears every deadline and sets new ones: the next 24 MB after the playhead, due 150 ms apart, and the 48 MB after that at high priority. Pieces you already hold play at once.

The first and last pieces stay pinned, so the file’s index is always on hand and a seek never waits for it. Everything else fills in behind, and once the file is whole Freshet stops scheduling and reads straight from disk.

Local files and finished downloads get a plain bar, since every piece is already there. The thirteen bars of the app icon are the same idea, drawn as a play button.

It starts with a paste.

Press ⌘V in Freshet’s search bar and the magnet link on your clipboard starts playing. No add dialog, no file picker, no queue to manage.

The bar floats above whatever you’re doing, like Spotlight, and steps aside when a video opens. Move the pointer and Library, History and Favorites slide out of its edge.

⌘V
Play the magnet link on your clipboard.
↑↓
Walk the results, then press Return to open one.
esc
Step back out of a list or clear the search, then put the bar away.

Drop a magnet link, a .torrent file, a video or a whole folder onto the bar, a player window or the Dock icon, and it plays. While you’re watching, a new torrent joins the library quietly instead, unless you’ve set new torrents to play right away.

Out of the way until you need it.

Video runs edge to edge. The controls float on glass, fade after two and a half seconds of stillness and come back the moment you move.

Hover the seek bar to see the time under the pointer, and whether that spot has downloaded yet.

Resume, per file. Close a video and it reopens at the same second. History keeps the name of every torrent you’ve opened, even after you delete it.

Plays whatever mpv plays. MKV, MP4, HEVC, VP9, AV1 and more, with hardware decoding through VideoToolbox, AV1 included on M3 and later.

Local files too. Drop a video or a folder on Freshet and it plays straight off disk, with the same controls.

Favorites. Right-click a video and choose Add to Favorites. From then on it’s one click away in the bar.

Watching comes first. Other titles download only if you let them, and even then they wait until the file on screen is complete.

Seeding on your terms. It’s off until you turn it on, and then it stops at a ratio or after a time you choose.

How a magnet becomes a picture.

A torrent engine that chases the playhead, a stream bridge with no server in the middle, and a renderer that never lets a frame leave the GPU.

  1. 1

    The swarm

    libtorrent 2.0, built static for arm64 and wrapped in a small Objective-C++ bridge whose headers stay plain Objective-C, so Swift imports them directly.

  2. 2

    Deadlines

    On every read, the scheduler pins the piece under the playhead and sets deadlines across the next 24 MB, 150 ms apart. A seek clears them all and starts over.

  3. 3

    freshet://

    mpv reads through a custom protocol, not a local HTTP server. The reader waits for pieces, returns partial reads promptly and honors cancellation, so a seek past the buffer can never freeze the player.

  4. 4

    Decode

    libmpv and FFmpeg, built from source as LGPL and decode-only. VideoToolbox decodes on the GPU, AV1 included on M3 and later; earlier chips decode AV1 with dav1d.

  5. 5

    Render

    mpv’s render API draws into an OpenGL texture backed by a CVPixelBuffer, so the frame never leaves the GPU.

  6. 6

    Display

    The buffer goes to an AVSampleBufferDisplayLayer. The window server scales it during live resize, and there’s no swapchain to go stale.

22 dylibs, not 36.

The media stack is built with Lua, Vulkan, libarchive, Blu-ray and X11 turned off. Dropping LuaJIT removed the last user of writable, executable memory, so Freshet runs without any JIT entitlement. Read the full write-up

Nothing included. On purpose.

Freshet ships no content catalog, no bundled sources, no addon directory and no curated tracker list. It opens the links you give it. That’s a design constraint, not an oversight.

Search and online subtitles are off by default. Add your own RSS or Torznab feed or Stremio-protocol addon for search, and a subtitle addon for subtitles, in Settings. With none added, Freshet never asks anyone for either.

Sandboxed, without JIT. App Sandbox and the Hardened Runtime, with none of the entitlements that relax code signing. An app that feeds untrusted media into FFmpeg shouldn’t switch that protection off.

Signed updates. New versions arrive through Sparkle and are checked against an EdDSA signature before they install.

Open source, build scripts included. Freshet is MIT-licensed, and the scripts that build libtorrent, libmpv and FFmpeg live in the repository, so you can rebuild the LGPL libraries and relink them yourself.

Tech specs

Compatibility
macOS 27 or later
Mac with Apple silicon
Download
21.3 MB disk image
Opens
Magnet links
.torrent files
Video and audio files
Folders
Formats
Anything mpv plays, including MKV, MP4, HEVC, VP9 and AV1
Decoding
Hardware decoding through VideoToolbox
AV1 on the GPU on M3 and later, and with dav1d on earlier chips
Subtitles
Embedded and external tracks
ASS and SSA styling through libass
Online subtitles from a subtitle addon you add yourself, matched to the exact file where possible
Choices remembered per file, and across a season
Playback
Picture in Picture
Now Playing and media keys
Resume per file
Playlists for season packs and folders
Pauses when your Mac goes to sleep
Torrent engine
libtorrent 2.0, statically linked for arm64
Deadline-based piece scheduling
Seeding, off by default, with ratio and time limits
Search
Optional and off by default
RSS or Torznab feeds and Stremio-protocol addons that you add yourself
Security
App Sandbox and Hardened Runtime
No JIT entitlements
Updates
Sparkle, EdDSA-signed
License
MIT for Freshet’s source code. The Freshet name and mark aren’t covered.
mpv, FFmpeg and libplacebo under the LGPL 2.1, libtorrent under BSD-3-Clause, and the rest under their own LGPL or permissive licenses
Full texts in About Freshet ▸ Acknowledgements

Get Freshet.

Free and open source.

Download for Mac

Version 1.0, a 21.3 MB disk image, released October 7, 2026. Requires macOS 27 or later on a Mac with Apple silicon.

Install

Open the disk image and drag Freshet to Applications. From then on, Freshet offers each new version as it’s released.

Build it yourself

Requires Xcode 27. The dependencies are committed prebuilt, so a fresh clone builds as it is.

git clone https://gitlab.com/fxjima/Freshet.git
cd Freshet
open Freshet.xcodeproj

To rebuild them from source, run Scripts/build-libtorrent.sh and Scripts/build-libmpv.sh. Only the second needs Homebrew.

Something to try it with

Sintel is the Blender Foundation’s open movie, released under CC BY 3.0 and widely seeded. Copy its magnet link, then press ⌘V in Freshet.