Repository navigation
Download
Download NullPlayer for macOS:
https://github.com/ad-repo/nullplayer/releases/latest/download/NullPlayer.dmg
Requires macOS 14 Sonoma or newer.
Install
NullPlayer is signed with an Apple Developer ID and notarized by Apple.
- Open the downloaded DMG.
- Drag
NullPlayer.appto Applications. - Open NullPlayer from Applications.
Prefer Homebrew? See the install guide.
What Changed
Playback
- Sweet Fades has Fade Out Only (Playback ▸ Sweet Fades ▸ Fade Out Only): instead of a
crossfade, the track fades out over its last Fade Duration seconds and the next one starts at full
volume from 0:00, so a song that opens on a big kick keeps it. - Sweet Fades' options are one submenu, always shown: Enabled, Fade Duration and Fade Out Only,
greyed out while Sweet Fades is off. Fade Duration used to appear only once it was on. - Fade on Pause/Resume (Playback menu, on by default): pause and resume fade over a moment
instead of cutting the sound off. - Seeking after a crossfade no longer goes silent. With Sweet Fades on, a seek after every second
crossfade left the sound off while the clock kept running, until another track was picked. - Pausing during a crossfade pauses both tracks. The incoming track kept playing and finished
its fade while the player showed paused. - Seeking a paused stream near its end moves the sound, not just the clock. On a Plex, Jellyfin,
Emby or Subsonic stream paused in its last seconds, a seek back showed the new position but the
track played on from where it was paused and ended a few seconds after resume.
Playlist
- The Classic and Original playlists' right-click has Add ▸ and Playlist ▸. Add URL, Add
Directory, Add Files, and New, Save and Load Playlist lived on the playlist's ADD / LIST bar,
which neither playlist draws any more. - The playlist's Add URL, Add Files and Add Directory add to the end of the queue and leave
the playing track playing, in Classic, Original and a.walskin's playlist. They replaced the
whole queue and started the new file. Adding to an empty playlist still starts playback. - Save Playlist keeps a stream's full URL in the
.m3u. It wrote the URL's path, which did not
play when loaded back. - Drag tracks to reorder the playlist in Classic, Original and a
.walskin's playlist. Dragging
a row moves the selection with it, several rows at once keeping their order, and the playing track
keeps playing wherever it lands. In a docked Original playlist, which has no title bar, drag a row
that is already selected; dragging any other row still moves the window. - Moving a track keeps the shuffle order. With shuffle on, a drag, or a
.walor Windows Media
Player skin's own move button, used to draw a new random order for everything still to play.
Library Browser
- The empty space in the Library Browser's Source bar drags the window, in every skin family,
such as the gap between the library name and the List / Flow / Tiles buttons. Only the title bar
dragged before, and a click on the bar's empty space did nothing. Before Plex sign-in, or with no
server set up, only the prompt text opens the sign-in sheet or Source menu, not the whole bar.
Casting and the CLI
- A local video cast to a Chromecast shows its subtitles (#648), from the CLI and the player
window: a.vtt,.ttmlor.srtbeside the video, named like it (film.srt, or language-tagged
film.en.srt). Subtitles inside the video file are not sent yet. --cli --source radio --station <name>plays the station instead of crashing at once with no
output.- Chromecast discovery no longer floods the log with a browse, resolve and retry line per
device on every refresh; found devices and final failures still log. Set
NULLPLAYER_CAST_DISCOVERY_LOGto see the rest.
Winamp Modern skins
- cPro-Bento's playlist search shows its results under the search box, listed as Artist - Title.
They opened in the corner of the screen. - cPro-Bento's side view stays closed after you open the Playlist tab, across relaunches; with
Video and the side view open, a relaunch no longer switches you back to Playlist. - cPro-Bento's file-info line shows the playing file's size instead of 0 bytes.
- The playlist time readout ends in
+when the queue holds a track of unknown length, such as a
radio stream. - Skins that measure the mouse against the screen work as written: Xenon's slide-out trays stay
open under the pointer, and Symplicipod's volume knob, seek bar and ticker follow it.
Windows Media Player skins
- A skin with no ring frame lends NullPlayer's windows nothing, and they wear the fallback
glass. A drawer nine-sliced into a frame carried the drawer's own close box and edges into our
windows; onanemoneit left a square outline and shadow behind the skin and an Equalizer Studio
that could not be closed. - A skin's drawers open while a track is playing. On
anemonethe playlist and EQ trays did
nothing when pressed during playback. - Hosted windows no longer grow on every relaunch under a skin that lends a frame.
Audion faces
- A face's top line shows the artist and its second line the track title (#662), as Panic's face
previews and RackView's ARTIST/TRACK labels show. They were the other way round, with album and
format appended.
Visualization
- MilkDrop uses libprojectM 4.1.8 (was 4.1.7): an out-of-bounds read in custom waveforms and a
shader-parser hang are fixed, presets that failed to compile on operator precedence or
parenthesised declarations may now load, and shader transpiling is much faster. The crash-preset
blacklist stays.
Using a Winamp Modern (.wal) skin? Skin compatibility
lists the skins this release was tested against, what each one does here, and the issues that affect
every skin.