返回资讯中心
外部精选
软件工程
#开发者实时流

Spritz: Stream Local Videos via AirPlay, Cast and DLNA on Apple Silicon

A private, native macOS media player that gets your media onto almost any screen,

Hacker News 最新kls0e2026/10/24 · 13 天前30 分钟阅读

以下正文同步自 Hacker News 最新,版权归原站所有,已转换为易读排版。

A private, native macOS media player that gets your media onto almost any screen, at the best quality that screen can actually take.

Website: oolab-labs.github.io/spritz · Download: Releases

Give Spritz a video and pick a screen. It works out the difficult part — what the file is, what your TV can decode, and the shortest route between the two — then plays it locally via libmpv or casts it over AirPlay, Chromecast/Google Cast, or DLNA.

your video → Spritz reads the file → Spritz reads your TV → the best route it can use (codec, HDR, audio, (what it decodes, send as-is · convert only subtitles) how big, what audio) what has to change

Everything runs on your own machine and your own network. No account, nothing uploaded, no telemetry. The only time Spritz contacts GitHub (api.github.com) is when you choose Help → Check for Updates…; nothing is checked or downloaded automatically. Spritz ships no content, catalog, or index of any kind — every file, link and stream comes from you.

Status: 2.0.0-rc.16 (release candidate) — macOS 11+ on Apple Silicon (arm64). Read Status & known limitations before relying on it.

Plays practically any file via libmpv — HEVC, AV1, VP9, HDR, multi-track audio and subtitles, without hunting for codecs.

Sends it to your TV over AirPlay 2, Chromecast/Google Cast or DLNA/UPnP, and negotiates per device: a capable TV gets the original 4K HEVC/HDR10 untouched; a 1080p receiver gets a proper conversion instead of a failure.

Converts only what has to change. If your TV can decode the video but not the audio, only the audio is converted — surround stays surround rather than being flattened to stereo.

Handles subtitles — embedded, external files, styled ASS, burn-in for image-based subtitles that receivers can't render, OpenSubtitles lookup, optional Whisper generation.

Remembers where you were — Continue Watching, playlists and queues, per-title audio/subtitle language preferences, keyboard shortcuts, Anime4K upscaling.

Where your media can come from

Spritz never supplies media; it opens what you point it at.

There is no search, no index, no directory and no built-in source of any of these. See Acceptable use.

Runs on

macOS 11 (Big Sur) or later

Apple Silicon (arm64) — M1 and newer

Intel Macs are not supported — Spritz is a native arm64 build and won't run under Rosetta

Casts to

Any device on the same local network (your Mac and the receiver must share the Wi-Fi/LAN):

For 4K HDR, prefer the DLNA route (shown as "native 4K/HDR (best)" in the cast menu). AirPlay is limited to 1080p H.264/SDR.

Dolby Vision is not passed through; HDR10 / HDR10+ is. (DV titles play as their HDR10 base layer on TVs that support it.)

Developed and tested primarily against an LG NANO80T6A (webOS), which exposes Chromecast-built-in, AirPlay 2, and DLNA simultaneously.

Install

Apple Silicon (M1 or newer) · macOS 11+. Intel Macs are not supported — Spritz is a native arm64 app and won't run under Rosetta.

Download: each release carries the Mac app (an Apple-Silicon .dmg and .zip — open the .dmg and drag Spritz to Applications) and the Spritz Receiver package for LG TVs (an .ipk; see Spritz Receiver for LG webOS). Install the Mac app first: the TV is paired from it.

Opening it the first time. Builds are ad hoc signed, not notarized (there is no paid Apple Developer ID behind them), so macOS blocks the first launch of a downloaded copy. Pick whichever suits you:

Terminal, any macOS version. Clear the quarantine flag, then open Spritz as usual:

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

System Settings, macOS 15 (Sequoia) and later. Try to open Spritz once and dismiss the warning. Then open System Settings → Privacy & Security, scroll to the Security section, click Open Anyway next to Spritz, and confirm with your password or Touch ID. (Right-clicking and choosing Open no longer works there.)

macOS 11 to 14. Right-click Spritz → Open → Open.

These steps follow Apple's documented behaviour. They have not yet been tried on a Mac that has never run Spritz, so if yours differs, please open an issue.

Build it yourself: see Build & run from source below.

Play something locally

Drag a file onto the window, or right-click it in Finder → Open With → Spritz. Spritz registers for common video extensions, so you can also make it the default handler. Playback starts immediately; there is no library to import and nothing is catalogued or uploaded.

Useful keys: Space play/pause · ←/→ seek · ↑/↓ volume · F fullscreen · PgUp/PgDn chapters · ,/. frame step · Ctrl+D diagnostics overlay.

Put your Mac and the TV on the same network. Spritz casts over your LAN — it never routes media through the internet.

Press the cast button and wait a moment for discovery.

Pick a device. Spritz decides the route itself and shows what it chose.

If nothing appears: macOS may not have granted Local Network access. Check System Settings → Privacy & Security → Local Network and make sure Spritz is enabled — if it already looks enabled, toggle it off and on. TVs that never advertise themselves can be added by IP under Settings → Manual TV addresses.

If TV discovery stays empty after changing Local Network permission, use Retry discovery on the welcome screen or in the Cast / AirPlay menu. Cast and DLNA report their search results separately. AirPlay devices appear in the macOS picker; Spritz Receiver must be open on the TV.

Three routes, picked per device (plus a fourth for TVs running Spritz Receiver):

Open URL accepts a direct media link, a stream-site page (resolved with yt-dlp), a playlist file, or a magnet/.torrent you supply. Torrent playback streams while downloading, prioritising the part you are watching.

The torrent HTTP server listens on loopback and serves only the selected file. TVs fetch that file through the LAN server's token-scoped proxy; the torrent server does not expose file listings or accept browser-origin requests.

Torrent errors remain visible until dismissed. The stream status reports the selected file's download progress and an approximate buffer runway. Spritz warns when the selected file will not fit and stops torrent downloads below a 1 GiB free-space reserve. New cache directories carry process ownership for crash recovery; older unmarked cache directories are preserved.

Spritz provides no way to find any of these. It opens what you give it, which for torrents means things distributed that way on purpose — Linux and BSD images, Internet Archive material, Creative Commons and public-domain films, independent releases.

Embedded and external subtitles are picked up automatically, including sidecar files next to the video (Movie.en.srt, a Subs/ folder). Image-based subtitles that a receiver can't render are burned into the picture instead. OpenSubtitles lookup and Whisper generation are available for files that have none.

Spritz Receiver is a small web app that runs on an LG webOS TV and plays what your Mac sends it. It is separate from the Mac app and is optional: DLNA, Chromecast and AirPlay need nothing installed on the TV. It exists for what those routes can't do well, such as switching audio language and picking subtitles from the TV remote.

Before you start, know what installing it involves. The receiver is not in the LG Content Store. It is installed as a developer app:

Pairing ties one TV to your Mac. Open Spritz Receiver on the TV; it looks for Spritz on your network and shows a 4-digit code. Enter that code in Spritz on your Mac (Devices, on the home screen or in the cast menu). You type on the Mac, never on the TV. The code counts down and refreshes itself every five minutes; five wrong tries cancel a pairing. From the TV's idle screen, Pair again gets a fresh credential and Change Mac points the TV at a different Mac. Revoking a TV is done from the Mac (Forget).

Reinstalling or updating the receiver can change the TV's identity, so you may have to pair again, and the Mac then lists the old entry as an offline duplicate (it shows when it was last seen). Forget the stale one. Developer Mode apps are removed when a session lapses, so expect this.

If the TV can't find your Mac: it searches its own network first, then a short list of common home ranges (192.168.1.x, 192.168.0.x, 10.0.0.x, 10.0.1.x). A TV on a guest network, a separate VLAN, or an unusual range won't find the Mac. Put both on the same network. If the search finds nothing (it can take about a minute), the TV shows Can't find Spritz with a box for the Mac's address, which Spritz shows under Devices.

Where it has been tested: one TV (LG 55NANO80T6A). Receiver 0.3.2 was exercised on it (webOS firmware 33.31.61) for the search, typed-address, pairing, code-refresh and pair-again flows, and for playing a local file and a streaming torrent with audio and subtitles switched from both the Mac and the TV's own menu. Receiver 0.4.0 was checked on the same TV on webOS 24 (firmware 33.31.75): pairing from the Mac's code field, the start and end times on screen, the launcher icon and launch screen, and a cast started at a position that used to freeze. This was driven over the TV's web inspector and the Mac, not by a person holding the remote. Other models and webOS versions are untested. Receiver and Mac app versions are meant to be used together: Devices shows the receiver's version and flags a TV running an older one, but the Mac app does not update it for you.

Spritz is a player and a compatibility layer. It has no catalog, no index, no search, no recommendations and no built-in sources, and it will not acquire that. Everything it opens is something you pointed it at.

Spritz is for your own files and recordings, media you have bought or licensed, material that is public domain or Creative Commons, content distributed freely by its rights holder, and anything else you have the right to play — on whichever screen in your home you prefer.

Spritz is not for obtaining or distributing copyrighted material you have no right to, and it includes nothing to help you do that. It also does not circumvent DRM or copy protection, and no such capability will be added.

You are responsible for what you open with it and for complying with the law where you live. That responsibility is not transferred by this notice — see Disclaimer.

Spritz is a release candidate, built and tested by one person on one Mac and one TV. It works day to day, but expect rough edges. These are the known problems, stated plainly:

Not yet verified (these have not passed a hardware test, so treat them as unproven):

Audio and subtitle switching — tested on an LG NANO80T6A with local 1080p and 4K files and a streaming torrent, from the Mac and, where the route allows it, from the TV:

On a torrent that is still downloading, subtitles, seeks and track changes only reach what has downloaded so far, and AirPlay takes about 40 seconds to become ready on a slow torrent.

Subtitles — embedded text subtitles and external SRT work well. Image-based subtitles (PGS/VOBSUB) and styled ASS can now be burned into the picture when a receiver can't render them (the bundled ffmpeg is built with libass), though this path is newer and less exercised than the rest. The subtitle toggle can still drop on some cast sessions, and OpenSubtitles lookup is best-effort.

Torrent streaming — usually starts fine but can occasionally need a retry; 4K-over-torrent at marginal bandwidth will rebuffer.

macOS 11+ on Apple Silicon (arm64)

Node.js 22+ and npm (the test runner's file pattern needs Node 21 or newer; CI uses 22)

Homebrew — to provide libmpv and ffmpeg

Build & run from source

This repository is source-only. The GPL media binaries (libmpv, ffmpeg, ffprobe) and the compiled native *.node addons are not committed (see License); you build or install them locally.

Prerequisites: macOS 11+ on Apple Silicon, Homebrew, Node.js 22+, and the Xcode command-line tools (xcode-select --install) for the Objective-C++ addons.

1. Get the sour

正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。

打开原文
去社区讨论 →