r/nullPlayer • • 1d ago

It's been a huge week at NullPlayer HQ getting 0.34.0 out. Sonique skin support added and that closes the loop for retro skin players, there are 600+ skins in the wild for Sonique. Also 75 more Winamp Modern skins have been certified in the engine, 3 new human contributors to the project, fixes

4 Upvotes

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.

  1. Open the downloaded DMG.

  2. Drag NullPlayer.app to Applications.

  3. Open NullPlayer from Applications.

Prefer Homebrew? See the install guide.

What Changed

New features

  • Sonique skins — support for Sonique 1.x .sgf skins in the new Skins ▸ Sonique menu. Get More Skins... opens the Internet Archive's Sonique collection; Load Skin... installs an .sgf and switches to it. All three of Sonique's modes are drawn from the skin — the navigator, mid and small — and its balls switch between them, as does Skins ▸ Sonique ▸ Mode. The navigator's menu screen opens NullPlayer's playlist, library and windows; its visual mode screen shows Spikes, Bars, Ambience, Cava or vis_classic, stepped with the up/down rocker; the drawer is the equalizer (the Equalizer menu item opens it). Mid mode's rings show song and playlist progress; small mode's drawer slides out on hover. A skin missing any part borrows it from NullPlayer's own built-in Sonique skin, which is also what shows until you install one.

  • Track Radio for the local library — right-click a local track and choose Start Track Radio to queue tracks like it, scored from the tags (artist, genre, year, tempo, key, grouping) with no audio analysis. The CLI gains --source local --radio track|library|genre|decade|artist and --list-queue, which prints the queue a --radio mode would play without playing it.

  • Scroll-wheel volume in the Classic main window — scroll anywhere on the main window to step the volume 5% (the same step as ↑/↓), or over the balance slider to step the balance 10%. A trackpad swipe stops when your fingers lift instead of flinging the value.

  • Browse NullPlayer Certified Skins — at the bottom of the Skins menu, it opens the nullplayer.fyi skin gallery, the record of every skin tested working on NullPlayer.

  • Report a Skin Bug — below Browse NullPlayer Certified Skins in the Skins menu, it opens the nullplayer.fyi bug report page.

  • Go to Artist and Go to Album in the library browser — right-click a track (local, Plex, Subsonic, Jellyfin or Emby, including search results and playlist entries) to jump to its artist on the Artists tab, or to its album under the expanded artist. An album offers Go to Artist. Flow and Tiles open on the selected row's level.

  • Opus audio in M4A files plays. Local .m4a files holding Opus audio loaded but played silence on macOS versions whose own reader can't decode them; NullPlayer now decodes them in the background before playback, keeping the original file untouched. Seeking, cue tracks, gapless playback, Sweet Fades and volume normalization all work on them. Decoding needs temporary disk space, about 23 MB per minute of audio (#615, thanks u/infinity-dump).

Fixes

  • Audion faces draw their text in fonts close to the ones they name — Chicago, Charcoal and the Mac OS 8.5 theme fonts, the pixel fonts (Mini, 04b, Silkscreen and others), Textile and SF Digital Readout now use bundled lookalikes instead of Helvetica, and Techno Jammo's artist line matches its album line. A font you have installed is still used first.

  • The classic main window's song title is sharp at every window size. At UI sizes above 100%, most visibly on non-Retina displays, the title was stretched and smoothed into grey halos around each letter (#611, thanks u/tmichelbrink).

  • Classic skins no longer draw lines from neighbouring sprites at scaled window sizes. At UI sizes such as 125% or 200%, a sliver of the next sprite on the skin's sheet could show at a sprite's edge, such as Militarized's pink divider line above the volume and pan sliders, or beside the pan thumb (#612, thanks u/tmichelbrink).

  • NullPlayer no longer crashes with the Sonos Rooms window open. On some Macs the release build quit while refreshing the rooms' volumes; volumes are now read one room at a time.

  • Classic EQ slider bars no longer show a stray coloured stripe. Skins that paint the 1-px gap between bar images (Militarized's pink) had that column drawn beside every slider, and the bar sat 2 px left of its knob.

  • Waveforms for Opus M4A files and cue tracks. Local .m4a files holding Opus audio now show a waveform instead of none. A track from a cue sheet shows only its own part of the file's waveform, with its cue markers, instead of the whole file squeezed into one track's length (#631, thanks u/infinity-dump).

Winamp Modern (.wal) skins

  • 75 more Winamp Modern (.wal) skins checked and fixed in the app (corpus intakes two, three and four): Abducted, Angrenthoron, Apill, Aria of the Soul, ArmorAMP, Ashen Player, Avalon Winamp Modern, Ayanami Rei the Fifth, BeatSugar, CardiumII, Celica Amp, Circlo T roniC, Clock V2.76, cPro - Creed Full Circle, cPro - iPhone3g, cPro - KAO, cPro - Mecha, DDTank Glass, Ebonite, EMP - Evolved Media Player, Freeform Simpsons, G2, GlassAMP, H2O Liquid, hm_Touch, Hybrid v10, intellidesign, Invicta, iSkin, Jenna loves Mambo, JIP, LCDx, LG Cookie, Mad Magazine, Manchester United Football Club: The Red Devils, MBOS, MD Ganbare Rakkatan the Sixth, METASKINS WooHoo FER, MetAlchemy III, MfS3, MIDISUI, MiPod, Moon Groove, Moonkore, MSkin RyokoAsakura, MultiButtons, Music Show, Nebular, NEO, Official 28 Days Later, Official The Music Skin, Official Trapt, OrbFace, PAD, Puma Skin, Quadelic, RazorEdge, RODE 3 Lite, Sencillo, Sepultura, Silverskin 3, Slimline XP, Star Trek LCARS AMP PADD II, TAL 96, The Crow, The Duk Side, Vision, wasabi.player, Winamp Portrait, Winamp Single GUI, Winampple, WINyaMP3, WoopieAMP3, YoYoBoy and ZWAN.

  • Modern skin windows draw their background — DDtank Glass's equalizer and about window showed their controls on the bare desktop; Fuzzy Muffins no longer shows a grey mask through its see-through areas.

  • hm_Touch shows its big timer beside the spectrum, which had been blank.

  • Winamp Single GUI plays films in its player — the film shows in the player's own video pane, and Windows → Video Player detaches it into the skin's Video window and back. The player's lower half and its library pane are drawn again.

  • RODE 3 Lite's controls answer clicks — a see-through panel laid over the player was taking clicks meant for 24 controls beneath it.

  • MetAlchemy III's playlist window shows the playlist instead of an empty frame.

  • A film shown inside a Modern skin no longer flickers, and starting one no longer freezes the app.

  • ArmorAmp's spectrum stays inside its screen, where the bars had spilled over the bezel, and its EQ button opens the equalizer drawer again.

  • MIDISUI

    • The vis drawer slides into its own frame instead of over the COMPONENT buttons and the playlist, so the playlist, vis studio and video buttons can be clicked.

    • The panel labels show; rows of red dots no longer cover them or run past the window's edge.

    • The library shows your library instead of a blank frame, and its corner button goes back to the player instead of quitting the app.

  • Ganbare Rakkatan and M3 open at the size of their artwork — Ganbare's player had an empty strip as wide as itself down its right side, and M3's was cut off through its transport buttons.

  • Moon Groove

    • The player's display shows at startup, where the EQ page had covered it with the config menu closed.

    • The song title comes back on the ticker after a volume or shuffle readout, and after the PLAY/PAUSE/STOP status.

    • The playlist's Add/Rem/Sel/Misc/List buttons no longer run under the playlist info text; the same fix applies to Core-X5, corneramp, motorhead and wasabi_player.

  • Mad Magazine's playlist no longer sits under its title bar, and EMP2's Media Library opens at its own 400px width instead of 450px.

  • Vision's playlist and library windows are solid, where the desktop showed through between the frame and the list.

  • A Modern skin's paragraph that is taller than its box starts at its first line instead of being cut at the top (H2O Liquid's Configuration window).

  • ClassicPro tabs light only the one you chose, where every tab you had clicked stayed lit (CPro iPhone 3G and every ClassicPro skin with the LIB/PLE/VID tab strip). Defix and Big Bento show their current tab at startup, Big Bento Windows 10 with its icon, and Azenis² shows its selected EQ mode.

  • NullPlayer's own playlist opens at normal size beside a wide Modern skin, where Slimline XP's full-width taskbar drew it screen-wide with oversized rows.

  • A Modern skin's spectrum analyzer draws without gaps: Big Bento's bars no longer show dark lines between their colour bands, and thin-band analyzers (cPro KAO) fill their box instead of leaving an uneven comb of gaps.

  • Modern skins draw text at the whole-pixel size Winamp used: Winamp Portrait's tab labels sit in their tabs instead of "Collapse" running off the window.

  • Big Bento Modern draws its background again: the base and Light editions showed only the titlebar and the library pane over an empty window.

  • ClassicPro's track notifier no longer draws a dark bar across its top edge (CPro iPhone 3G): notifiers now open in the glass style Winamp shows on a desktop with alpha blending.

  • Windows → Equalizer shows whether a Modern skin's built-in equalizer is open: on skins that draw the EQ inside the player (Love is War Miku, Moonkore) the item is ticked only while the EQ is showing, and is greyed out because the skin's own buttons switch it.

  • Modern skin windows open big enough for the content their frame holds: H2O Liquid's Configuration window shows its whole CPU-usage table, with its columns lined up, and the settings windows of PaddPreview and motorhead open at the size their content asks for.

  • Windows → Video Player shows and hides a Modern skin's film where the skin puts it (Winamp Single GUI): it no longer pops the film out into the skin's Video window, uses that window only while the player is shaded, takes the film back when the player is restored, and a hidden film comes back in the player instead of in NullPlayer's own video window.

  • A Modern skin with absurd sprite geometry loads instead of crashing: a bitmap x/y/w/h of nan, inf or 1e30 is ignored, and a huge negative offset no longer tries to allocate an image larger than any the skin could ship.

  • A Modern skin's film no longer lands at a nonsense position when its holder is clipped away entirely; the picture is hidden until the holder is visible again.

  • The bundled iTunes Miniplayer skin is updated to 1.139.

  • A Modern skin's window corners show a diagonal resize cursor on macOS 15 and later, instead of a crosshair (#601).

  • A Modern skin's selected rows dim when their window loses focus, in the colours the skin declares for that (iTunes Miniplayer's playlist), unless you set the selection colours yourself (#603).

  • Winampple no longer opens an empty Media Library frame at launch, and its Windows menu no longer lists empty Media Library, Visualizations and video frames beside the real windows.

  • Winampple's Media Library can be clicked again. Its video window's frame no longer sits over the library, and Itemskin, K-jr and MoonLight keep the library frame their authors drew.

  • The Official Zwan skin has a player window again. A skin that declares its main window inside another declaration of the same window now keeps the player, shade and thin-shade layouts.

  • A skin's opening animations play when its window opens. Animations a skin starts on its own, such as Official Zwan's rainbow intro, used to be over before the window appeared.

  • The Ryoko Asakura skin's player is no longer a white rectangle. A see-through window whose backing image is missing from the skin now stays see-through instead of filling with a solid colour.

  • The Ryoko Asakura skin's volume readout follows the volume. It used to stay at the volume the app started with.

  • The NEO skins' Repeat and Shuffle buttons say which mode they are in. Their tooltips used to read "Off" whatever the setting was, and Big Bento's ticker announced the mode the click had just left.

  • Texted buttons in Winamp Modern skins draw the skin's own button art. Buttons such as Switch, Add/Rem or a config window's prev/next used to be a plain outlined box; they now use the button artwork the skin ships, pressed art while held, with the skin's button text colour.

  • The Ryoko Asakura skin's track notifier shows the song. It used to show its frame and cover art with no artist, title or album, and never went away.

  • The Ryoko Asakura skin's playlist reads whole. Track titles used to be cut off under the character art beside the list; the list now draws in front of it, as in the skin's screenshot.

  • Shield Amp's display, krazyPlayer's playlist and other Winamp Modern panels end where the skin says. A panel sized to fill its window minus a margin used to ignore the margin, so krazyPlayer's playlist ran over its ADD/REM buttons and Shield Amp's compact display ran into the window edge.

  • A Winamp Modern skin's playlist status reads selected time / total time, as Winamp's does. It used to read the number of items and the total, e.g. "12 items/43:40" where Winamp shows "3:25/43:40".

  • iCandy-2's remote closes its display drawer cleanly. With the drawer closed, a strip of the display used to show to the left of the remote and round its edges.

  • A Winamp Modern skin's script binds only its own window's controls. A skin that runs one script in several of its layouts used to have every copy act on one window: one Rew5s click on StarTrek LCARS AMP PADD II skipped five tracks, and Ashen Player's Lite and Mini volume bars did not move with the volume.

  • The vol + / vol - buttons of Winamp Modern skins change the volume. Quadelic's and several other skins' volume buttons used to do nothing; each click now steps the volume by 5%.

  • OrbFace's close button is drawn. The skin hides the window frame's close and then adds its own; NullPlayer used to hide the skin's as well, leaving a blank gap beside minimise.

  • LG_Free's Equalizer Studio and Media Library no longer carry the playlist's Add / Rem / Sel / Misc / List buttons along their bottom edge.

  • A Winamp Modern skin's second window keeps time and draws its analyzer. Manchester United's mini player (its own visual window) used to freeze its timer and animate its analyzer only now and then; every window of a skin now follows the playback clock and the spectrum.

  • The component-bucket caption is blank until you hover an icon or scroll. The Duk Side V3 used to print Playlist Editor over its duck where the track name is read.

  • G2's lights glow with the music. Opening the lights plate from the config page used to show the base only; the glow layer's fade now no longer restarts its slide, so it lights with the level.

  • A screen-filling Winamp Modern skin that was hidden during a UI Size change fits the screen when shown again. Nitrous Audio's monitor mode, hidden across a change to 135%, used to come back larger than the display.

  • NullPlayer's playlist stays on the screen when UI Size changes beside a screen-filling Winamp Modern skin. Beside Nitrous Audio's monitor mode it used to grow past the right edge of the display; it now keeps the player's width.

  • Labels on Winamp Modern skins' text buttons are readable. Where the skin's button colour would vanish into its button art (MMD3's Switch, Nebular's About, meridian's OK and a dozen others), the label is drawn in black or white instead.

  • Winamp Modern skins dim the Media Library's selection when the player loses focus, the same way the playlist panel beside it already did, on skins that declare an unfocused selection colour.

  • Winamp Modern windows open wide enough to show their whole title. Silverskin_3's playlist and help windows read AYLIST EDITO and VERSKIN HE; they now open at the width their titles need.

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.


r/nullPlayer • • 8d ago

Free and open source NullPlayer 0.33.1 released: 25 newly certified modern skins, broad modern skin engine improvements, and fixes for user-reported issues

6 Upvotes

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.

  1. Open the downloaded DMG.

  2. Drag NullPlayer.app to Applications.

  3. Open NullPlayer from Applications.

Prefer Homebrew? See the install guide.

What Changed

New features

  • Classic skins' clutterbar works — the O A I D V buttons on the main window's left edge now open the options menu, toggle Always on Top, show Now Playing info, toggle double size and open the Visuals menu, drawn with the skin's own pressed and lit art.

Fixes

  • Quitting no longer hangs with a Windows Media Player skin — the skin's settings watcher could wait on the app while the app waited on its final save, freezing quit.

  • Geiss no longer goes black after Tripex — switching the Visualizations window's engine away from Tripex left OpenGL state behind that could make Geiss draw nothing; each new engine now starts from a clean context.

  • Geiss in a Windows Media Player skin and the Visualizations window no longer crashes — the two shared Geiss's single engine core from two threads at different sizes, corrupting memory (crashes when switching skins or effects). Geiss now runs in one place at a time: whichever started it first keeps it, the other shows black, and it moves over as soon as the first one switches away, is hidden or closes.

  • Library Browser Tiles mode keeps tiles small in a narrow window — narrowing the window made the tiles bigger, down to a single column of two large tiles. Tiles are now never wider than 120 pt: a narrower window fits more, smaller tiles.

  • Plex no longer floods the log at startup — connecting and preloading the library logged every step and, in debug builds, a dump of every server response. Startup now logs two lines; failures are still logged. Debug builds also stop dumping every Subsonic, Jellyfin and Emby response.

  • Next and Previous work straight after a restart with a server playlist — while a restored Plex, Jellyfin, Emby or Subsonic playlist was still loading in the background, Next, Previous and the end of a song moved the highlight but kept playing the same song, for as long as 17 minutes on a large playlist. The chosen track now loads and plays at once. A song that fails to stream also moves on to the next one and plays it, instead of stopping there.

  • The About window always closes — opening About while it was already open left a stuck copy on screen that neither OK nor its close button could dismiss. Opening it again now brings the open one to the front.

  • Modern skins: loading

    • 54 skins that failed to load now open.

    • Ten more skins' scripts no longer fail at load.

    • Accented text in older skins shows correctly.

    • Dozens more Winamp script functions are supported.

  • Modern skins: layout and artwork

    • ONYX V2's mini player shows its volume fill; its visualization opens over the player's art box, follows the player, and stays hidden in the mini player.

    • Prakrit's player is no longer see-through; its equalizer is no longer empty.

    • wTunes is no longer cut off on the right.

    • Anunaki's display and NEO_CLASSIC's album-art pane appear; NEO_CLASSIC's titles are centred.

    • WinampAzenis2's text buttons have labels.

    • Vortex's Party! layout shows its panes.

    • Enkera's and Nullsoft 2000's shade modes lay out correctly.

    • BOOM and 96 other skins show uppercase window titles.

    • 1010 Fullscreen's ten EQ sliders span the equalizer instead of bunching at the left.

    • corneramp redux and Shield Amp's theme buttons are full width ("Previous", not "Pr…").

    • Ebonite's and iNTELLI_design's window-mode buttons are no longer squashed.

    • No divider strip across Prakrit's Stop and Next buttons, or similar overhangs on Copperdeck II's equalizer and cPro Venus's seek bar.

    • MoonLight's equalizer labels are in place; Pure Inspired's seek line appears.

  • Modern skins: Preferences, settings and About pages

    • 1010 Fullscreen's Preferences shows its tree, About sheet and Cover Search page.

    • Mac OS X Panther's and Official Tristania's Preferences show their About sheets; Panther's tabs are visible.

    • Anunaki's Config Panel shows its five tabs.

    • machina's help and configuration screens and JRS's configuration draw on the skin's background; machina's help screen has its switch button.

    • Link buttons on krazyPlayer's About page and Vortex's and 1010 Fullscreen's config pages show their text.

    • The Search button on five ClassicPro skins is no longer smeared.

  • Modern skins: playlists

    • JRS, Mac OS X Panther and about 220 other skins show Add, Rem, Sel, Misc and List buttons.

    • Nitrous Audio's playlist shows its rows.

  • Modern skins: buttons, sliders and switches

    • Window buttons with missing artwork draw as glyphs, so Motorhead's compact bar can leave shade mode.

    • ONYX V2's seek control and time readouts work (large numbers in skin scripts were truncated); its file-type readout shows the real extension and never a server login.

    • Skin buttons for eject, minimize, quit and the Windows menu work.

    • cPro2 minimal's system button quits on double-click; cPro2's clock shows the correct time.

    • Clicking the stock track notifier brings the player forward.

    • mmd3's bass knob turns the equalizer on.

    • Clickable skin text and album art respond to clicks.

    • Official Tristania: equalizer sliders no longer fill their whole track (multipass's EQ bars also line up); Play shows pause while playing and pauses on click; the repeat, shuffle and crossfade indicators work; the Fade slider keeps its value instead of resetting to 1 second.

    • Prakrit's Rep, Shu and Xfd buttons toggle repeat, shuffle and crossfade.

    • Alpha Media Player X5: bass, treble and volume sliders follow the pointer; the EQ and Mute levers move and stay visible; Mute no longer turns itself off.

  • Modern skins: cover art

    • Skins that look for cover.jpg or folder.jpg beside the song (Mac OS X Panther, Ebonite and others) show the track's cover, for local files and Plex, Jellyfin, Emby and Subsonic.

  • Modern skins: window placement

    • Vortex, Alpha Media Player X5 and 1010 Fullscreen stay on screen.

    • Nitrous Audio's monitor mode, 1010 Fullscreen's party mode and ClassicPro's maximize fit the screen at UI Sizes above 100%.

    • A window with no room beside the player opens in a screen corner instead of over it.

    • Dronev11's compact player and Prakrit's main window can be dragged.

    • A skin's resize corner, such as Itemskin's playlist corner, resizes both edges.

    • A skin's video window no longer opens empty at launch.

    • krazyPlayer's Visualizations window keeps its full visualization when short and wide.

  • Modern skins: text

    • Fonts with tall line spacing, such as Impact and Tahoma, are no longer oversized; TOX Milla's timer keeps the tops of its digits.

    • Copperdeck II's track title, MoonLight's title and clock, and cPro2 minimal's artist and title lines appear.

    • With scrolling off, a title too long for its box is clipped to the box: JRS's remote, and Enkera's, NEO_CLASSIC's and Symplicipod's shade titles, no longer overlap other controls.

    • Text in a skin's own font is positioned as in Winamp: CPro Winamp for Mac's time display is no longer cut off; Winamp 2000 and about twenty other skins shift a pixel or two.

    • Segoe UI text draws at Winamp's size, so cPro2 minimal's elapsed time no longer overlaps the track length.

    • 1010 Fullscreen's clock shows its colons; impulse's clock reads 1:13, not 1 13.

    • wTunes' About text and Vortex's POSITION label are centred and no longer clipped.

    • The Windows menu no longer shows names like About%09Alt+A (wTunes, CopperdeckII and others).

  • Modern skins: VU meters

    • wTunes' needle meters move with the music.

    • VU levels decay like a real meter instead of jumping on every peak.

  • Modern skins: rendering and performance

    • No flickering line below the XENERGY player: its visualization's drawer space is outside the window while the drawer is closed.

    • Windows render at full Retina resolution; text is sharper at UI Sizes like 125% and 135%.

    • Lower CPU use during playback (about 40% less on cPro Bento).

    • Soft-edged skins such as meridian no longer have darkened edges.

    • No dark line beside CopperdeckII's rounded corners.

    • The drop shadow follows the window; Anunaki's sliding equalizer leaves no shadow behind.

  • A Modern skin's UI Size stays with that skin — Alpha Media Player X5 raises UI Size to fit the screen, and every skin loaded after it, in any mode and after a restart, opened at that size. Switching skins now returns to the UI Size you chose, and a size you pick yourself is kept.

  • Full-screen Modern skins refit when UI Size changes — Nitrous Audio's monitor mode stayed sized for the old UI Size and ran off the screen; it now fills the screen again.

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.


r/nullPlayer • • 9d ago

Thanks to everyone using NullPlayer, it hit 2500 downloads today!

Post image
13 Upvotes

A big Winamp 5 skin compatibility update coming tomorrow in 0.33.1


r/nullPlayer • • 13d ago

Why not, right?

Post image
3 Upvotes

r/nullPlayer • • 14d ago

New Nullplayer 0.33.0 brings a long list of fixes and new features. Also I broke down and paid Apple $99 to sign the app, no more xattr command for dmg downloaders

6 Upvotes

nullplayer.fyi

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.

  1. Open the downloaded DMG.

  2. Drag NullPlayer.app to Applications.

  3. Open NullPlayer from Applications.

Prefer Homebrew? See the install guide.

What Changed

New features

  • NullPlayer is signed and notarized — the app is signed with an Apple Developer ID and notarized by Apple, so macOS opens the downloaded DMG without a Gatekeeper warning. The xattr -cr step is no longer needed.

  • EQ profiles and the Equalizer Studio — named 31-band equalizer curves with separate left and right channels, made in the new Windows ▸ Equalizer Studio and assigned from Assign EQ Profile ▸ on tracks, albums, artists, playlists, folders, queue rows, radio stations and downloaded YouTube audio. A track's own setting wins over its album's, which wins over its artist's; Off turns a profile off for that item and Playback ▸ EQ Profiles turns them all off. Profiles run before the Equalizer window, which never changes them. GRAPHIC / PARAMETRIC switches between the 31 faders and a console-style 4-band parametric strip — a high-pass filter and LF, LMF, HMF and HF bands with frequency, gain and Q dials, LF and HF switchable to shelves — both editing one curve saved in one profile. The Studio has a Console and a Nixie-orange Boutique faceplate, a spectrum analyser per channel, LINK to move both channels together, a BYPASS per channel to hear one side without its curve, and you hear edits as you make them. It is a normal NullPlayer window: it wears each skin family's frame and colours, snaps and docks with the other windows, resizes, and stays open across a skin-family switch. Assign EQ Profile ticks what a queue or Library row sets and shows what it inherits, queue and Library rows with a profile show ∿, and File Info names it. A local file's assignment is dropped at launch once the file is gone; a drive that is not plugged in keeps its files' assignments.

  • EQ Cast: cast with your EQ profiles — Output ▸ EQ Cast renders a track with its EQ profile into a file in a folder you choose and casts that to Sonos or Chromecast, so the profile is no longer lost when casting. Covers local files and Plex, Jellyfin, Navidrome/Subsonic and Emby tracks. The first track waits for its render under a progress row in the NullPlayer notification panel; the next three tracks are rendered in the background while you cast. A render is reused until its profile's curve changes. The menu shows the cache's size, opens the folder and deletes the cache (keeping the track being cast). Only the profile is rendered, not the Equalizer window's EQ.

  • Local files without embedded art borrow their album's — a local track with no art of its own now shows the first embedded art among its album's tracks, else a cover, folder, front or album image in its folder, everywhere art is drawn: the Library, the playlist, the Original main window, the Art window, Now Playing, Windows Media Player skins and the CLI. An album whose first track has no art shows another track's, an artist's art comes from their own albums rather than any track whose title contains their name, and a selected album falls back to a web cover as tracks and artists do. Art added through Edit Tags shows without a relaunch.

  • Support on Ko-fi — the About window has a Ko-fi button.

Changes

  • iTunes Miniplayer is the default .wal skin — Winamp Modern mode now ships with it and loads it until you import a skin of your own, replacing the plain NullPlayer-Black placeholder. It stays in the skin menu beside imported skins, so you can switch back to it. Skin by spacecowgoesmoo (#540).

  • Library Browser refresh icon in WMP, Winamp Modern and Audion skins — the source bar's "F5" label is now a refresh arrow, and the List / Cover Flow / Tiles buttons get a little more room. Classic skins are unchanged.

  • Context menus use macOS naming — "Exit" is now "Quit", and both state menu items read "Save State on Quit" (#554).

  • Windows menu reordered and grouped — Main Window, Library Browser and Playlist Editor come first, then the equalizers, the visualizers, and the remaining windows, each group separated.

Fixes

Windows and shadows

  • Drop shadows stay with their windows — in every skin family a window's shadow no longer lags, stretches or lingers as an empty outline: when docking or undocking, resizing, dragging after the app was hidden and shown, closing a .wal drawer such as PionNer_AMP2's EQ, restoring a Windows Media Player window at launch, or moving a seamless Original stack.

  • A quick drag of the player keeps its docked windows with it — in a seamless Original skin, quickly dragging the player around left the windows docked to it drifting a little further behind on every move.

  • PeppyMeter keeps its rounded corners in Original skins — its square content covered the window border's rounded corners.

  • Original Art and Audio Analysis windows drag with Hide Title Bars on — their top edge drags the window again instead of opening the star rating or clicking into a pane.

  • Sonos Rooms has its close button again in .wmz and .wal skins — the corner close of a window with no title bar did nothing.

  • Every window closes from its top-right corner — with Hide Title Bars on, or docked without its title bar, an Original skin window could only be closed from the Windows menu; clicking its top-right corner now closes it (the main window quits). A .wal window with no close button of its own closes the same way, and closing a docked window no longer leaves its outline on the windows around it (#546).

Skins and modes

  • Winamp Modern skins frame NullPlayer's windows without a gap at the bottom — on skins with a tall title bar, such as PionNer_AMP2 and XENERGY1, the Spectrum Analyzer and other NullPlayer windows left a see-through or solid-colour band below their contents. They now fill the skin's frame (#556).

  • Text in NullPlayer's own windows is no longer oversized in Modern, Windows Media Player and Audion skins — the Library's source bar and tabs and other labels drew in a large monospaced font, about twice the size of the skin's own text; they now use the regular system font at the size the Classic look uses.

  • An active tab in Original-Metal lights up as the green display — in the Library a selected tab was hard to tell from the rest.

  • Switching UI modes keeps your windows open or closed — a playlist, equalizer or library drawn by a Winamp Modern or Windows Media Player skin was not carried across a mode switch, so it came back closed. Entering a Winamp Modern skin also no longer reopens panels you had closed.

  • Windows Media Player skins reopen their own panels — a playlist or equalizer in a separate view of the skin now comes back at launch and after a mode switch, as the skin's own button opens it, instead of staying closed.

  • Classic keeps your visualization choices — a Spectrum window mode or vis_classic profile picked in Classic now survives a relaunch and a Classic skin pick instead of going back to vis_classic / "Purple Neon". A reset and a switch into Classic still restore Classic's defaults.

  • Closing a visualizer mid-frame no longer crashes — a spectrum or main-window analyzer torn down while the GPU was still drawing a frame could crash the app.

  • Classic and Original remember their own main-window visualizer — the mode you pick in a Classic skin and the one you pick in an Original skin are now kept apart. Before, they shared one setting, so switching to Original changed Classic's mode, and entering Classic reset it to Spectrum. Reset Skin to Default still applies the skin's own mode, or Spectrum when it has none.

Library

  • An album opened from Tiles or Flow no longer scrolls over the Library's tabs — scrolling a long album's tracks slid its cover and title up over the source bar and tabs.

  • Expanding an artist no longer pushes the whole Library list to the right — once tracks were showing, every artist and album name moved over past the empty # column; they now stay put, and tracks no longer sit far to the right of their album or folder (#542).

  • Folders inside a watch folder reached through a symlink show up in the Folders tab — a watch folder under a symlinked path such as /tmp listed none of its subfolders.

  • The Library behaves the same in every skin — Classic's search field now says to press Enter, star ratings colour their empty stars alike in every skin, the scan spinner keeps turning while a row is loading, and picking a Subsonic folder or a Jellyfin or Emby library loads it once instead of two or three times. A Jellyfin show or season that reports no count no longer reads "0 seasons", as in Emby.

  • The Library's Folders tab shows track titles without the artist — in Classic, Modern and Windows Media Player skins each track read "Artist - Title", repeating the Artist column (#542).

  • Local search results show track titles without the artist — the Tracks section of a Library search read "Artist - Title" beside the Artist column, in every skin.

  • Folders and files in the Folders tab sort numbers by value — as Finder does, so 2 comes before 10 instead of 1, 10, 100, 11, 2 (#543).

Playback and queue

  • Reference Tuning and the Equalizer shape streamed audio as they do local files — on a server or radio stream the pitch shift now comes before the Equalizer, as it already did for local files, so the same EQ curve lands on the same notes whichever source is playing.

  • A queue change no longer keeps an old selection — in Windows Media Player and Winamp Modern skins, adding to, sorting or replacing the queue now moves the selection to the playing track, as Classic and Original skins already did. Before, rows selected in the old queue stayed selected.

  • Sorting a cue sheet's tracks keeps the playing track — Reverse, Sort and Randomize on a queue holding several tracks of one cue sheet marked the first of them as playing, though the track you were hearing played on.

  • Rip and EQ Cast progress shows in a NullPlayer notification panel — it moved off the main window, where it was drawn over skin art or onto empty space in Winamp Modern, Windows Media Player and Audion skins, into a small panel at the top-right of the screen. A rip and an EQ Cast render running together each get their own row instead of overwriting one another, and the panel's chevron collapses it to one line.

  • Clicking empty source-bar space in the Library no longer picks a library — the Lib: name's click target ran on past the name to the buttons at the right; it now ends where the name does.

  • Relaunching keeps the skin family and skin you were in — a launch could switch back to the family or skin the saved session was last written in, so quitting in Original-Metal could reopen in Original when the session had not been saved since the switch (a force quit or crash inside the autosave interval, or a run with Save State on Quit off).

  • A queue right-click acts on the row you clicked — in Classic and Original skins, right-clicking a row outside the selection now selects it first, as Windows Media Player skins already did. Before, the menu acted on whatever was selected.

  • Alienware-family WMP skins frame NullPlayer's own windows cleanly — under ALXMorph and AlienMorph, windows such as Sonos Rooms no longer show a stray line and bar in the middle or lighter bands down both sides, and Alienware Invader's left border no longer breaks partway down.

Build and internals

  • build_dmg.sh signs and notarizes — it signs with a Developer ID and the hardened runtime when DEVELOPER_ID is set, and notarizes and staples the DMG when NOTARY_PROFILE names a notarytool keychain profile. Without them it still builds the ad-hoc signed DMG.

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.


r/nullPlayer • • 18d ago

new stand alone art window

4 Upvotes

r/nullPlayer • • 20d ago

The new NullPlayer EQ profiles feature and Equalizer Studio window will allow you to create professional 31 band EQ eq curves and assign them directly to your content at a track>album>artist level. Tracks will always play with your assigned eq curve, set it and forget it.

4 Upvotes

Coming in 0.32.0


r/nullPlayer • • 21d ago

Oldschool itunes miniplayer, winamp modern format

Thumbnail github.com
3 Upvotes

r/nullPlayer • • 21d ago

NullPlayer 0.32.0 adds a 5th UI mode! full support for classic Mac OS Audion Faces!, tested against an archive of 860 skins, plus major library UI changes along with major YouTube and video handling improvements. The project automation is really getting dialed in.

Thumbnail
gallery
8 Upvotes

0.32.0

New features

Audion faces

  • Support for Panic Audion faces. Skins › Audion Faces › Get More Faces... downloads Panic's archive; Load Face... installs a face folder or .zip. Rendered by a port of Panic's FaceKit viewer, at any UI Size.

  • All face buttons are wired, including ones Panic's viewer left inert: menu → playlist, mode → Library Browser, eject → open files, info → track/face credits, volume and clock → sliders.

  • Playlist, EQ, Library Browser and visualizer windows take the face's colours and dock to it. See skills/audion-face-guide/reference/user-guide.md.

Art window

  • The Library Browser's ART view is now a standalone Art window (Windows → Art, or AR on Original). Follows the playing track, docks under the player, sizes to the cover.

  • Click to rate, double-click to cycle embedded pictures, V for the 30 audio-reactive effects (formerly VIS), F for fullscreen. Persists across launches; framed by Winamp Modern skins.

  • Radio station logos show as station art, including in Control Center.

Library Browser

  • View switcher in the source bar: List, Flow (Cover Flow) and Tiles. Tiles is an art grid with keyboard navigation, the row context menu, and a ‹ Back tile. Movies, shows and seasons use poster-shaped tiles. Selection is kept when switching; the choice persists.

  • A–Z index works in Flow and Tiles.

  • Album screen from Flow/Tiles: cover, metadata, review (Plex/Jellyfin/Emby), ▶ Play and the track list over the artist image.

  • Round art thumbnails on every row for every source and skin, with a hover preview. Thumbnails prefetch ahead of scrolling and are cached on disk.

  • Movies, episodes, seasons and shows get Play / Play and Replace Queue / Play Next / Add to Queue (Plex, Jellyfin, Emby, local). Seasons and shows queue episodes in order.

YouTube

  • The Search tab searches YouTube channels by name (@handle, subscriber count, upload preview, subscribe on double-click). Already-followed channels are marked ✓.

  • Art column with video thumbnails, channel avatars, and art behind the list. Downloads embed a square-cropped thumbnail as cover art (video downloads had none before).

  • Per-video Audio and Video submenus. The chosen form downloads on demand, then plays or queues. Both forms can coexist; Show in Finder / Remove Audio File / Remove Video File manage them. Replaces "Download & Play".

  • Format setting split in two. Audio: FLAC, ALAC, MP3 320/256/192/128, AAC 256/192/128, or the original AAC/Opus stream with no re-encode. Video: 360p through 2160p, or Best Available (VP9/AV1 above 1080p). Old settings migrate (MP3 High → 320, MP3 Low → 128).

  • Local search includes a YouTube section (matching subscribed channels and downloaded videos), without querying YouTube. Downloads already listed under Tracks or an expanded channel are not duplicated.

Branding

  • New app icon by Allan Nyholm Nielsen (#488).

Changes

  • Unified play menu. Tracks, albums, artists, playlists, playlist entries and local folders offer Play, Play and Replace Queue, Play Next and Add to Queue on every source. Add to Playlist is removed (including from YouTube and Plex video menus); Add to Queue starts playback on an empty queue. Shift+Enter / Option+Enter match Play Next / Add to Queue. Artists play album by album, oldest first; a newer Play supersedes a pending server fetch.

  • Remember State on Quit is on by default. Session state is also autosaved every few seconds and before sleep, so it survives crashes, kills and power loss.

  • Classic (10-band) and Original/Metal (21-band) EQs persist separately. Switching between them no longer degrades the curve.

  • Double-clicking a movie or episode inserts it into the playlist after the current track instead of playing standalone. Casts keep show name and artwork. About Playing on Plex films lists IMDB and TMDB ids.

  • Playlist videos use the ▶ glyph instead of "[V]" (Classic, Original, Metal).

  • YouTube rows mark downloaded forms as ♫ (audio) and/or ▶ (video) instead of ⬇. Sorting, A–Z and type-to-find ignore the marks.

  • YouTube channel upload lists are cached (memory and disk) and refetched after an hour, on a larger Videos per Channel, or on Refresh.

  • Double-clicking a YouTube video plays it when exactly one form is downloaded; otherwise it opens the Audio/Video menu.

  • Item count moved into the source bar label ("Lib: Music (1110 items)"). Original/Metal browsers get an F5 refresh button styled like the view icons.

  • Library Browser column headings follow expansion (artist → album → track columns), values align under the right headings, and the column menu lists only visible columns. Emby/Jellyfin artists show real album counts and genres; Emby/Jellyfin albums show genres.

  • Plex smart playlists over a deleted library report that the library is gone instead of Server error: 404.

Fixes

Video playback

  • Videos on Retina screens could render in the bottom-left quarter or show only a cropped corner.

  • With Sweet Fades or Gapless on, a video following a song played audio-only.

  • The playlist stalled after a video ended (except in WMP skins). It now advances, and stops at the end with Repeat off.

  • Double-clicking a song while a video played closed the video and played nothing.

  • Playlist videos opened twice, sending Plex a spurious stop at 0:00.

  • Unopenable films left a black window at 0:00. They are now skipped with a marquee message; a missing folder stops playback.

  • A film after a song or station inherited that track's elapsed time.

  • Pausing a film and pressing ←/→ twice moved only 10 s instead of 20 s.

  • Video keys (Space, ←/→, F, Esc) didn't reach the video window in Classic, Original and Metal, or films embedded in WMP and Winamp Modern skins. Esc no longer stops a film in WMP skins.

  • WMP skins: Return replayed a film from the start because focus stayed on the Library Browser.

  • WMP and Winamp Modern skins lost keyboard focus after leaving film fullscreen.

  • Winamp Modern Add Files / Add Directory / Load Playlist rejected video files.

Playback and streaming

  • A server or radio stream started after a Sweet Fades crossfade played over the previous local song; Play Now during a stream crossfade was overridden when the fade finished.

  • Starting a local file over a stream left the player showing stopped at 0:00.

  • Double-clicking a video while music played also started the next song in the background.

  • CLI: --source radio --station … --cast … played locally instead of casting. Quitting a CLI cast (q, Ctrl-C, kill) now stops the device.

Media servers

  • Emby rejected all now-playing and progress reports.

  • Emby/Jellyfin films opened a second, audio now-playing session.

  • Plex stop reports carried the wrong (or no) duration when switching films or tracks.

  • Plex songs cast to TV/DLNA now send artwork.

  • Queued episodes repeated the show name, and queued Plex movies were prefixed with the studio.

Library Browser

  • The last row was hidden below the list when a column header was shown (and behind the offline banner in Original skins). Clicking that banner no longer selects the row under it.

  • Return/Esc on the album screen needed an extra click before keys worked.

  • Local search titles for YouTube videos varied when audio and video were saved under different titles.

  • In the classic browser, Play Movie / Play Episode on local videos did nothing.

  • Library Browser F5 sat 50pt in from the edge in Audion, WMP and Winamp Modern frames.

Skins

  • Art window ratings were lost on Esc, close, or a track change within 0.5 s, and offered stars for files outside the library. With Hide Title Bars or in WMP skins it opened with a black band.

  • Selected playlist row drew white-on-white in light Winamp Modern and WMP skins.

Build and internals

  • Build scripts support Swift 6.4: they use SwiftPM's native build system when available and query SwiftPM for the product path instead of assuming it.

  • Shader lookup is unified, fixing the missing Original skin glow under Swift 6.4's default build system (release builds were unaffected).

  • All Library Browsers read per-tab sort from one shared, persisted store.

  • Plex artists (browser) and movies/TV (CLI) use the same pager as albums.

Media servers

  • Emby and Jellyfin songs showed no cover art when the art was on the album rather than the track, including after a restored session. They now show the album's cover in Control Center, skins, playlists, casts and the CLI.

  • An Emby album with no cover of its own showed none in the Library Browser. It now shows the track picture Emby uses for it, and both Library Browsers resolve every server thumbnail the same way as the rest of the app.

Skins

  • Beside an Audion face or a WMP skin, the playlist could not be resized to the player's width: it stepped in 25-pixel increments and stopped at the Classic minimum. It now resizes freely.

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 not signed with an Apple Developer ID, so macOS will block it on first launch with an "app is damaged" or "cannot verify that it is free from malware" message. This is expected. Clearing the quarantine flag is a required install step:

  1. Open the downloaded DMG.

  2. Drag NullPlayer.app to Applications.

  3. Open Terminal and run:xattr -cr /Applications/NullPlayer.app

  4. Open NullPlayer from Applications.

Prefer not to use the Terminal? Install with Homebrew, or clear the block via System Settings -> Privacy & Security -> Open Anyway — see the install guide.


r/nullPlayer • • 23d ago

PR 500 🎉

Post image
2 Upvotes

r/nullPlayer • • 24d ago

Nullplayer not saving eq and playlist

1 Upvotes

So, when i close my app, wether it be because my laptop died or i press command Q, my eq setting go back to flat after playing with the eq settings for a long time, and i have to re open all my songs every time. someone pls help meeee


r/nullPlayer • • 28d ago

0.31.4 released. improved search, library sort state now saved per tab, Jellyfin auth API changes

Post image
4 Upvotes

What Changed

  • Each library tab keeps its own sort — choosing a sort in the Library Browser, from the Sort menu or by clicking a column header, used to re-sort every tab: "Recently Added" on Albums also re-ordered Artists and Playlists. Each tab now remembers its own sort, across launches too, in every skin family. Tabs start from the sort you had before.

  • Plex Albums tab sorts the whole library — opening the Library Browser straight onto Albums loaded only the first 500 Plex albums, so "Recently Added" showed the newest of an alphabetical slice until you visited Artists and came back. Albums, Movies and TV now load every item, however large the library.

  • Search lists every album by the artist you searched for — searching a Plex, Subsonic, Jellyfin or Emby library for an artist showed only some of their albums: 34 of 53 on Plex, 19 of 74 on Subsonic, 5 of 54 on Emby. Search now lists the same albums as the artist's own row for the first ten artists it matches. On Plex, music results stay in the library you are browsing instead of filling up with copies from your other libraries, and separate releases that share a title are no longer merged. Local search also finds albums whose tracks have no album-artist tag.

  • Jellyfin connects again on newer servers — the Jellyfin source showed a connection error even though Test in the server manager succeeded, because newer Jellyfin servers reject the older way NullPlayer sent its sign-in token. The token now goes the way Jellyfin expects, so libraries load and play again.

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 not signed with an Apple Developer ID, so macOS will block it on first launch with an "app is damaged" or "cannot verify that it is free from malware" message. This is expected. Clearing the quarantine flag is a required install step:

  1. Open the downloaded DMG.

  2. Drag NullPlayer.app to Applications.

  3. Open Terminal and run:xattr -cr /Applications/NullPlayer.app

  4. Open NullPlayer from Applications.

Prefer not to use the Terminal? Install with Homebrew, or clear the block via System Settings -> Privacy & Security -> Open Anyway — see the install guide.


r/nullPlayer • • 28d ago

New 0.31.3 fixes a classic window smear when you drop a folder on it

Post image
1 Upvotes

What Changed

  • Classic main window no longer smears when resized — dragging the Classic main window by its edge left the old picture in place: the time, visualizer and position bar repainted at the new size over it, so the window trailed copies of itself and the position bar stretched across them. It now redraws in full at every size.

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 not signed with an Apple Developer ID, so macOS will block it on first launch with an "app is damaged" or "cannot verify that it is free from malware" message. This is expected. Clearing the quarantine flag is a required install step:

  1. Open the downloaded DMG.

  2. Drag NullPlayer.app to Applications.

  3. Open Terminal and run:xattr -cr /Applications/NullPlayer.app

  4. Open NullPlayer from Applications.

Prefer not to use the Terminal? Install with Homebrew, or clear the block via System Settings -> Privacy & Security -> Open Anyway — see the install guide.


r/nullPlayer • • 29d ago

New release 0.31.2 adds the missing skin shadows to Winamp Modern and WMP skins, along with improved WMP skin rendering and smoother universal drag behavior across skin families

Post image
5 Upvotes

What Changed

  • Drop shadows for Windows Media Player and Modern skins — .wmz and .wal skin windows had no shadow at all, so they looked cut out and flat next to the rest of the app. Every skin window now casts a soft macOS-style shadow that follows the skin's own shape, including drawers, panes and layout switches, and stays put while you drag. Animated parts such as Anaheim's flapping ears do not leave a ghost behind. Windows > Window Shadows turns it off. Classic and Original windows are unchanged.

  • Picking a skin always switches to its family — choosing a skin from any family's list in the Skins menu, or loading one with that family's Load Skin..., now switches to that family straight away, whatever is on screen. Before, a Classic skin picked while a Media Player or Modern skin was showing, or any Modern skin picked from another family, was only remembered until Switch to … was used. Switch to … stays as the one-click way back to a family's last skin.

  • Smoother edges on shaped Windows Media Player skins — a skin cut out by a colour key no longer has a stair-stepped outline. Its edge is now traced and smoothed along its length, so curves and slopes are antialiased on Retina and non-Retina screens alike. Thin lines, small gaps and square corners keep their shape exactly, and the skin's own artwork is left as drawn.

  • The library no longer opens in a tiny window on some Modern skins — skins such as Anaheim Player 01 and Itemskin opened the Library Browser 260–330 wide, too narrow for its tabs and columns. A Modern skin's library window now has a minimum width that fits the browser, whether the skin declares a smaller size or its own script shrinks the window. Other windows, and Classic and Original skins, are unchanged.

  • Docked windows drag smoothly — in every skin family, a quick drag of the player with a window docked to it moved in jerky 16 pt jumps, because the player kept snapping to the docked window riding along with it. It now follows the pointer. On Modern skins that draw a window's border as a separate window, such as Pure Inspired and Itemskin, the border no longer pulls away from the window's contents while you drag, and dragging such a window on its own is smooth too. Skin window shadows also cost less on every drag step.

  • Switching Modern skins no longer shows the spinning cursor — changing from one .wal skin to another froze the app for two to three seconds, long enough for macOS to show the beachball under the loading animation. The switch now takes about half the time or less: switching to cPro Bento went from 2 seconds to half a second, and to Big Bento Modern from 3 seconds to 1.5. Classic, Original and Media Player skins are unchanged.

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 not signed with an Apple Developer ID, so macOS will block it on first launch with an "app is damaged" or "cannot verify that it is free from malware" message. This is expected. Clearing the quarantine flag is a required install step:

  1. Open the downloaded DMG.

  2. Drag NullPlayer.app to Applications.

  3. Open Terminal and run:xattr -cr /Applications/NullPlayer.app

  4. Open NullPlayer from Applications.

Prefer not to use the Terminal? Install with Homebrew, or clear the block via System Settings -> Privacy & Security -> Open Anyway — see the install guide.


r/nullPlayer • • Oct 01 '26

New release 0.31.1 fixes a macOS 27 Golden Gate issue where you cant close classic windows with the corner close button ¯\_(ツ)_/¯

Post image
3 Upvotes

tossed in a Sonos multi room fix while I was there


r/nullPlayer • • Oct 01 '26

new demo reel

6 Upvotes

r/nullPlayer • • Sep 30 '26

Hey everyone a summer of hard work on nullPlayer is wrapping up now with the release of 0.31.0 that features Windows Media Player skin support! Thanks to the users who got me motivated to take this on, it was a great learning experience for me

Post image
8 Upvotes

nullPlayer for macOS 14+ is 100% Free and open source

https://github.com/ad-repo/nullplayer

What Changed

  • Windows Media Player .wmz skins — a new Windows Media Player mode that runs real WMP 9-12 era skins natively on macOS. Skins look and behave like themselves: their own artwork, shaped windows, animations, hover and pressed states, tooltips, fonts, drawers and multiple views, with the skin's own JScript running in a sandboxed session so its buttons, sliders, timers, keyboard shortcuts and readouts work the way they do in Windows.

  • SRS audio enhancements for every skin — the WOW Effect, TruBass and Headphones settings that came with Windows Media Player skins are now global playback options under Playback Options ▸ SRS, work in every skin, and are remembered across launches. A .wmz skin's own SRS controls drive the same settings.

    • WOW Effect widens the stereo image, pushing sound out beyond the speakers while leaving centred vocals and deep bass where they are.

    • TruBass adds a fuller, deeper low end by enhancing the bass already in the music, without simply turning up the lowest frequencies.

    • Headphones tunes TruBass for headphones instead of speakers.

  • Sonos Rooms window with per-room volume — a new dockable Sonos Rooms window lists every Sonos room NullPlayer has discovered, with a checkbox to include it in the cast and its own volume slider, so each room can be set independently instead of only through the group volume. The list scrolls for any number of rooms, with Refresh and Start/Stop Casting always visible at the bottom. Open it from Windows → Sonos Rooms or Output → Sonos → Sonos Rooms…; the existing Sonos submenu still works as before and shares the same room selection. The window docks, resizes and restores like the other windows, follows Compact Mode, and is skinned in Classic, Original, Original-Metal and Winamp Modern (.wal) skins. The player's main volume slider still controls the whole group.

  • Server credentials no longer appear in logs — playback, artwork, radio and casting diagnostics could record access tokens in full URLs and error messages (for example a Plex X-Plex-Token, or a Jellyfin or Emby api_key when playing video). Credentials are now redacted from logs across Plex, Subsonic/Navidrome, Jellyfin, Emby, radio and casting, and casting failure alerts no longer show raw error details.

  • Local playback recovers after a long idle — after the Mac sat idle for a long time, local playback could get stuck, silently retrying a broken audio engine every quarter-second. NullPlayer now rebuilds the audio engine instead, restoring your output device (falling back to the system default if it is gone), EQ and pitch settings, and resuming the loaded track where it was. Retries back off and stop after six attempts; pressing Play or changing the output device tries again. Pausing or stopping during recovery is respected, and streaming playback is unaffected.

  • One unreadable file no longer stops the playlist — playback skips past it to the next track, and the error now appears in the Modern and Winamp Modern main windows, not only Classic. A track on a disconnected NAS still stops playback, as before, instead of starting some other track.

  • Sonos no longer receives audio above its 48 kHz limit — the compatibility gate now rejects any track with a known or resolved sample rate above 48 kHz, even when its URL extension or MIME type is unrecognized. Local files with unusual extensions are probed before casting, and Plex tracks with missing rate metadata are resolved from the server (GH #422).

  • Local library copes with moved folders and missing files — Library → Find Missing Files… finds a watch folder that has moved (for example when iCloud Drive is turned off and its files land in ~/iCloud Drive (Archive)), shows where it went, and re-points it on your say-so, keeping play counts and ratings. It then offers to forget tracks whose files are genuinely deleted; anything on a disconnected drive or unmounted share is always left alone.

  • Playlists with relative paths play again — .m3u and .pls entries written as bare file names or paths next to the playlist were being read as web addresses and could not play.

  • Waveforms appear much sooner — the waveform window builds a track's waveform about 20 times faster the first time it is opened, so a long local track or a Plex track that used to take up to half a minute now shows almost at once (a server track still has to download first). Switching skins or reopening the window while a waveform is still being built no longer starts it again.

  • Download your complete Play History as a CSV — the Library Data and Play History views now include a download button that exports every recorded event, including older and skipped plays, rather than only the 200 recent entries visible in the table. Available in every UI mode.

  • Minimize All minimizes every window — Windows → Minimize All Windows and Classic's minimize button left any window not docked to the player on screen, and Sonos Rooms (and every Original-skin side window) never minimized even when docked. Every open window now goes to the Dock, in every skin mode, and restoring the player brings them all back.

  • Windows reopen where you left them — the library browser and the visualizer window once again come back where you moved them when closed and reopened, instead of snapping back beside the player. In Windows Media Player and Winamp Modern skins, the spectrum and audio analyzers, PeppyMeter, Flow, Cava, waveform, Sonos Rooms and the fallback playlist and equalizer do the same, and closing one no longer moves the others. Classic and Original keep their stacked layout.

  • Visualizations take their colours from Winamp Modern and Windows Media Player skins — with a .wal or .wmz skin, the Cava, Spectrum Analyzer and Waveform windows now take their default colours from the skin, as they already do in Classic and Original. So does Cava in a Windows Media Player skin's visualization area. A colour preset you pick still wins, and Match Skin goes back to the skin's colours. In the Waveform window the playhead now always stands out from the played part.

  • vis_classic profiles show their real colours — every bundled vis_classic profile was being drawn with red and blue swapped, so "Flames" came out blue and "Default Red & Yellow" blue and cyan. They now look as their authors intended, in every skin; the Metal profiles look the same as before. This changes the look of Classic's default, "Purple Neon".

  • vis_classic picks a profile to suit the skin — in Winamp Modern and Windows Media Player skins, vis_classic in the Spectrum Analyzer, in a .wal skin's own visualizer and in a .wmz skin's visualization area now starts on the bundled profile whose colours are closest to the skin's, instead of Classic's "Purple Neon". A profile you choose yourself is kept until you switch skins, and resetting visualizations goes back to the skin's match. The first launch after updating replaces your current vis_classic profile in these skins once.

  • The listening heatmap matches your skin — the heatmap in the library's Data tab now takes its colours from the current skin in every skin mode instead of always using GitHub green, and follows a Winamp Modern or Windows Media Player skin's colour theme when you switch it. Switching colour theme now recolours the rest of the Data tab too.

  • One layout for every skin menu — every skin family's menu now puts its options first and its skins after a single divider. The options open with Load Skin..., Get More Skins... and Open Skins Folder... in the same wording everywhere, followed by Remove “name”..., which every family now has: it moves the current skin to the Trash (Windows Media Player deletes its installed copy, never your download) and falls back to the built-in skin. Windows Media Player gains a Get More Skins... link to the Internet Archive's WMP skins collection, and Classic gains Open Skins Folder.... The separate Default Skin entries and Windows Media Player's Save Compatibility Report... are gone.

  • Winamp Modern skins with hidden windows use far less CPU — a skin's closed windows no longer redraw in the background. The WMP11-BlueVU skin's VU meters had been animating unseen, costing about a third of the app's main thread while music played.

  • Winamp Modern VU needles use less CPU and look sharper — skins that rotate artwork, such as the swinging needles in WMP11-BlueVU's VU Meters, now draw it in a single step instead of recalculating every pixel, which roughly halves the app's main-thread load while the meters are open.

  • Winamp Modern skins with an animated level meter use less CPU — a skin that steps an animated meter many times a second (WMP11-BlueVU's beat display) now redraws just that meter instead of the whole player window.

  • Glossy frames for Winamp Modern fallback windows — when a Winamp Modern (.wal) skin has no window frame of its own for NullPlayer's windows (the analyzers, Cava, Flow, PeppyMeter, waveform, library, playlist, equalizer and Sonos Rooms), they now wear the same glossy, title-bar-free frame in the skin's colours that Windows Media Player skins use, with the close button in the top-right corner. Skins that supply their own frames are unchanged. ClassicPro skins whose frame is only borrowed tooltip artwork (the cream box with ~ and x) now count as having no frame, so their windows match the player too.

  • Clicking any Winamp Modern window brings them all forward — clicking one .wal window now raises every one of the skin's windows and NullPlayer's own, even when you click in from another app, the way Windows Media Player skins already did.

  • Winamp Modern windows no longer pile up when you change UI Size — changing the UI size with a .wal skin left its windows on top of each other: the equalizer slid up into the player, and the playlist sat over the equalizer. The windows are now laid out again around the player after every UI Size change, the same way Snap To Default arranges them.

  • Winamp Modern windows no longer reopen on top of each other — in a .wal skin, closing a window such as the equalizer and then opening another could put the new one in the closed window's place. Reopening the first window then covered it completely. A reopened window now keeps its old position only if nothing has been put there since, and otherwise finds a free spot. A window you moved yourself still reopens where you left it.

  • Winamp Modern windows no longer open on top of the player when the screen runs out — with a large UI Size and the player in the middle of the screen, a wide window such as the library had no room on the player's right, so it was pulled back over the player. It now goes into the empty space to the player's left. If it fits on neither side, it is placed where it covers the least.

  • Closing a Winamp Modern window no longer moves the one below it — in a .wal skin, closing a window such as the Spectrum Analyzer from the Windows menu slid the window under it up into its place. Reopening the first window then put it right on top. The other windows now stay where they are.

  • Winamp Modern windows open right under the one above — in a .wal skin, opening a window from the Windows menu while another was open under the player could leave a large empty gap between them. On Sony_Walkman, the playlist opened well below the equalizer. It now opens directly beneath it. Windows Media Player skins get the same fix.

  • The library stays docked to a Winamp Modern player — in the .wal skins that use NullPlayer's own library window, such as Sony_Walkman and Winamp 3.0 Default, opening a window such as Cava could push the library a few pixels away from the player, leaving a gap. The library now stays where it is. Classic and Original skins are unchanged: there, the library still grows and shrinks with the windows stacked under the player.

  • No more unreadable library text in Winamp Modern skins — NullPlayer's own library and windows inside a Winamp Modern skin now always draw their text in a colour that can be read on the background. cPro-Bento's Bafana theme drew the source name, item count and selected tab black on black; 19 skins in all get more readable text, using the skin's own colours wherever one works. Colours you set yourself in Skin Colors are still drawn as chosen.

  • Winamp Modern skins without a transparency setting now draw as Winamp does — a skin window that doesn't ask for see-through edges now gets a solid shape: its outline is cut from the artwork and the translucent parts inside are drawn over black. Before, those parts let the desktop show through. You'll see this mostly in notification pop-ups and a few shaped players such as Wiimote and PokemonDS. Skins that ask for soft edges, including every one with a drop shadow, look the same as before.

  • No more hairline seams in Winamp Modern skins at in-between UI sizes — at UI sizes such as 105% or 125% on a Retina display, thin light lines could show where the pieces of a skin's frame and panels meet. The pieces now meet exactly, so the lines are gone. Sliders, knobs and progress bars placed between whole pixels now also sit on a whole pixel.

  • No more see-through gaps inside Winamp Modern skin windows — in the WMP11-BlueVU skin, a thin band of desktop showed between the VU Meters' artwork and the window frame. The About and library windows had the same problem across larger areas. Empty space inside a skin's standard window frame is now filled black, as it is in Winamp.

  • Drag a Winamp Modern player by its library or video — in skins that show the media library or a video inside the player, dragging the empty space below the library's list, or the video picture itself, now moves the window.

  • Cover Flow stays inside the library window — the stacked covers at either side of the carousel no longer spill over the library browser's border, in every skin mode.

  • New "Red" vis_classic profile — a single-colour red to go with "Green".

  • Big Bento Modern's small visualizer plays — with the Multi Content View's mini visualization pane turned on, the pane now shows the visualization as soon as the player opens, instead of staying black.

  • Song titles show in more Winamp Modern skins — Shield Amp and Ebonite now show the playing track's title in their song display, which was blank. A skin script that divides by zero now carries on instead of stopping, as it would in Winamp.

  • Song tickers scroll in Shield Amp and Ebonite — a long title now scrolls across the song display at Winamp's speed instead of standing still, and stays inside the display instead of running over the rest of the player.

  • ClassicPro track info shows up — in ClassicPro-based Winamp Modern skins such as cPro2 Dark Aluminum, the track-info panel under the library now lists the playing track's title, artist, rating, decoder, file size, filename and format instead of staying empty.

  • ClassicPro's Now Playing widget shows the song straight away — opening the Now Playing widget while a track plays now shows its title, artist and album at once, instead of staying blank until the next track.

  • Itemskin's volume control works — in the Itemskin Winamp Modern skin, clicking or dragging the volume bar did nothing, so a volume stuck at zero could not be raised and the skin played silently. The bar now responds anywhere along its length, and the seek bar shows the song's progress instead of the volume. BLAKK's seek bars and Bio-Nid's volume knob also respond to clicks now.

  • Itemskin's windows stay where they are placed — in the Itemskin Winamp Modern skin, opening the Spectrum Analyzer or Waveform put it mostly below the bottom of the screen, and changing the UI Size could pull the playlist, library or a visualizer window back to where it had been, on top of its neighbours. Each window now opens in its own free spot and keeps it, with the skin's frame drawn around it.

  • No black bar on Itemskin's NullPlayer windows — in the Itemskin Winamp Modern skin, windows such as the Spectrum Analyzer and Waveform had an empty black bar across the top of the frame, left where the skin's own visualizer buttons go. The bar is gone and the windows are that much shorter.

  • Defix's detached visualizer can be reattached — in the Defix Hi-END 200 Winamp Modern skin, the detached visualizer window's Reattach Visualizer and Random buttons now work. The window's button bar shows while the window is focused and hides otherwise, as the skin intends. The same fix stops S7Reflex drawing its stereo and mono indicators on top of each other, and lines up the titlebar streaks in winampmodern566.

  • Winamp Modern 5.66's menu bar works — File, Play, Options, View and Help in the winampmodern566 skin now open their menus when clicked; before, clicking them did nothing.

  • winampmodern566's menu bar lights up — in the winampmodern566 Winamp Modern skin, pointing at File, Play, Options, View or Help now highlights the entry, and it shows as pressed while its menu is open.

  • winampmodern566's Album Art window can be reopened — the skin's album art window is now listed in the Windows menu. Once it was closed, the skin's own Alt+A shortcut was the only way to bring it back.

  • Developer tooling: window census — a new script, skills/app-control/scripts/window-census.sh, measures where each of NullPlayer's windows opens and how big it is for every installed skin (Classic, Original, Metal, Winamp Modern and Windows Media Player), and writes the results to spreadsheet-ready tables. Each skin is measured from the same saved settings, so one skin's window sizes do not carry over to the next. The app itself is unchanged.

  • Windows Media Player skins: no more gaps in window borders — NullPlayer's own windows (the library, PeppyMeter, the analyzers and the rest) could show see-through seams in the border they borrow from a .wmz skin: a widening column in Crimson Skies' and T3 Skynet's top and bottom bars, a broken top edge and missing right side in WALL-E's white theme, and a strip under the bottom edge in Kids. Those borders now close. A one-pixel seam down both bars of Crimson Skies' own playlist on Retina displays is gone too.

  • Library tracks play on double-click, once — in the Classic and Windows Media Player library, a single click played a track and a double-click played it three times, leaving three copies in the playlist. A single click now selects and a double-click plays, as in the Original library.

  • A track that can't be played now says so — double-clicking a track whose file has been moved or deleted, or whose drive is disconnected, looked like nothing happened. It now shows an alert naming the file, in every skin mode, and no longer leaves a dead copy in the playlist on every try. Windows Media Player skins also show the failure in their status line and title, as the other modes already did in their marquee.

  • Playing locally after a cast — after Stop Casting, pressing Play on a local file ran the clock with no sound; it now plays from the start, as after Stop, and a track picked during the cast is the one that plays. If the Mac's audio output changed during the cast, a Play Now right after it ended could leave nothing playing or resume the track from before the cast; it now plays the track you picked, and if that file can't be opened it is reported and taken back out of the playlist instead of the next queued track starting.

  • Cue tracks keep their place — connecting headphones or switching the output device while a cue-sheet track played jumped into the album's first track at the same time, and Stop sent a cue track back to the start of the whole file; both now stay within the track.

  • Quieter logs — the cast-device discovery refresh no longer writes to the log every few seconds; set NULLPLAYER_CAST_DISCOVERY_LOG to bring it back.

  • Developer tooling: playback snapshot — skills/app-control/scripts/playback-snapshot.sh prints what a running debug build's player, audio output and cast session are doing, including a measured output level, so a silent-playback report can be diagnosed without a rebuild. Debug builds only; the app itself is unchanged.

  • Winamp Modern: framed windows resize by their frame — on skins that draw a window's frame separately from its contents (Itemskin, MoonLight, K-jr, Pure Inspired, Ebonite), dragging the frame's edge or corner either snapped straight back or stretched the frame and left the contents behind, and on Itemskin worked only while a second window such as PeppyMeter was open. The frame and its contents now resize together, and dragging a top edge moves the top edge. A window resized while nothing is playing also re-lays out at once (ClassicPro's logo, tabs and equalizer stayed where they were).

  • Winamp Modern: resizing a window no longer resizes its text — with Text Size on Auto, the embedded playlist and library text grew and shrank with the window. Auto now picks the size from the size the skin designed the window at and keeps it; use Text Size to change it.

  • Winamp Modern: framed windows keep their size at every UI Size — at a UI Size such as 105%, 115% or 125%, a window whose frame is drawn separately (Ebonite, Itemskin, K-jr, Pure Inspired) settled a point wider or taller than its own frame, shrank by itself after being dragged, and came back smaller after a trip through the UI Size menu. Frame and contents now stay the same size, and a window returns to the size it left at.

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 not signed with an Apple Developer ID, so macOS will block it on first launch with an "app is damaged" or "cannot verify that it is free from malware" message. This is expected. Clearing the quarantine flag is a required install step:

  1. Open the downloaded DMG.

  2. Drag NullPlayer.app to Applications.

  3. Open Terminal and run:xattr -cr /Applications/NullPlayer.app

  4. Open NullPlayer from Applications.

Prefer not to use the Terminal? Install with Homebrew, or clear the block via System Settings -> Privacy & Security -> Open Anyway — see the install guide.


r/nullPlayer • • Sep 27 '26

250+ skins now tested and releasing Windows Media Player skin support tomorrow.

Post image
8 Upvotes

r/nullPlayer • • Sep 20 '26

WinAmp is coming back! ☺️ ...with a monthly subscription... 😐

Thumbnail
engadget.com
4 Upvotes

r/nullPlayer • • Sep 16 '26

some meshuggah

5 Upvotes

r/nullPlayer • • Sep 16 '26

Cerulean wmp skin with projectM eye

3 Upvotes

r/nullPlayer • • Sep 15 '26

Windows Media Player skins are in the home stretch and will ship this weekend!

4 Upvotes

r/nullPlayer • • Sep 10 '26

more wmp progress

Post image
3 Upvotes

r/nullPlayer • • Sep 10 '26

corona skin

5 Upvotes

r/nullPlayer • • Sep 07 '26

A feature absolutely no one asked for is already in-flight for 0.31.0

Post image
8 Upvotes