The reference player for qtWasabi
Not a Winamp clone. qtamp is the reference implementation of qtWasabi, a faithful open-source reimplementation of the original Wasabi/Maki skin engine that has driven Winamp since 2002. Skins are programs; qtWasabi runs their own compiled Maki bytecode on the original VM.
$ curl https://qtamp.sh | sh
Builds from source on Linux (Fedora · Debian/Ubuntu · Arch · openSUSE) and macOS (Apple Silicon). Windows: sometime in the future.
In 2002, Winamp3 introduced Wasabi: a skinnable UI engine where a skin is not a bitmap theme but a program. XML declares the widget tree, and compiled Maki bytecode drives its behaviour. Drawers slide, tabs switch, windows reshape, tickers scroll, all scripted by the skin itself. Winamp 5 carried this engine forward as “Modern skins” (.wal), and thousands of them were built.
qtWasabi reimplements that engine faithfully on Qt6, and it executes each skin's own original Maki bytecode on the original Maki VM. The goal is absolute: every skin ever built for the original Winamp, and every skin yet to be built for it, must render correctly. No per-skin hacks; the engine is fixed, never the skin. qtamp is the reference media player proving it: a real player (FLAC/MP3/OGG/Opus, 10-band EQ DSP, playlists, a DuckDB-indexed media library, projectM visualization, MPRIS2) whose entire UI is whatever skin you load.
Skins ship compiled .maki binaries. qtWasabi runs them on the original interpreter, so the skin's own logic drives the UI exactly as it did in 2002.
qtamp doesn't imitate Winamp's look. It embeds qtWasabi behind one small Host interface; any app can do the same and get every Modern skin for free.
Thousands of shipped skins are the spec and the test corpus. What renders wrong is an engine bug, tracked openly in the fidelity audit.
Live renders of the QTAMP-branded WinampModernPP skin (MIT, by Eris Lund). The drawers open and close, the EQ is a real 10-band DSP, the playlist editor is the skin's own.
macOS screenshots are coming. qtamp already builds and runs on Apple Silicon Macs (the installer below does it end-to-end); press shots from macOS, plus the visualizer and preferences windows, will join this gallery soon. More skins join as they pass the fidelity corpus. We only show what already renders exactly as its author intended.
Modern skins ship color presets: gammaset tables that re-tint every element group of the skin's art at runtime. qtWasabi implements the original engine's gamma pipeline byte-for-byte, with the same integer math Winamp's GammaFilter used, so a skin's presets look exactly as authored. One skin, many faces:
And for skins that ship no presets at all, qtWasabi can go further: it analyzes the skin's structure, assigns color roles to its element groups, and synthesizes color themes the author never shipped. This is an engine feature, applied generically, never baked per skin. Skins with their own presets are always rendered exactly as authored; synthesis is strictly opt-in for the ones without.
One line on either platform. It builds everything from source and tells you what it's doing. Prefer to read first? The script is right here.
curl https://qtamp.sh | sh
Manual build instead: git clone --recursive https://github.com/qtamp/qtamp && cd qtamp && deps/qtWasabi/scripts/fetch-wasabi.sh && cmake -B build -DQTAMP_USE_QTWASABI=ON && cmake --build build
curl https://qtamp.sh | sh
Coming sometime in the future. The engine is plain Qt6/C++ with no platform tricks, so a port is a matter of build plumbing, not architecture. We'd rather nail fidelity first. Follow the issue tracker.
One goal governs everything: every skin ever built for the original Winamp, and every skin yet to be built, rendered correctly by the original Maki VM. The full audited plan lives in the qtWasabi OKF bundle; this is the shape of it, in priority order.
Restore the typed class layer around the original interpreter: real object construction, per-class method dispatch, safe arity. The keystone every other workstream leans on.
Every mouse, keyboard, and lifecycle event a real Wasabi engine dispatches reaches the skin's scripts, so script-driven skins are fully interactive with zero engine-side imitations.
Skins' own scripts decide drawer, tab, and preference state; the last hardcoded assumptions about specific skins get deleted.
Multi-window and multi-layout skins (shade modes included) navigate exactly as authored; window size comes from the skin's scripts, not heuristics.
The reference frame-constraint model, exact coordinate semantics, exact font metrics and color/gamma theming, verified pixel-for-pixel against original Winamp.
Every placeholder becomes a faithful interpretation: scrollbars, popup menus, dropdowns, text entry, animated layers, the full media library.
Real skins are the regression suite, diffed against their authors' own reference screenshots. Today 1 of 5 corpus skins renders pixel-faithfully (WinampModernPP); the other four are open engine bugs, tracked per skin in corpus-status. This gate never closes.
Everything we wrote is MIT. What we didn't write, we don't ship.
Both repositories (qtamp/qtamp, qtWasabi/qtWasabi) are MIT-licensed, with no Winamp-licensed source in the repos or their git history.
A small set of original Wasabi engine sources is required at build time. The installer fetches them from the public archive.org mirror of the official source release into a gitignored directory, on your machine, under the Winamp Collaborative License v1.0 (§3 permits using covered works you do not convey). They are never redistributed by us. It is the same pattern emulators use for a user-supplied BIOS.
Every skin shown on this site is MIT-licensed by its author and forked with credit into github.com/qtamp (only titlebar branding strings changed). We deliberately don't showcase proprietary Nullsoft skins.
qtamp stands on the shoulders of people who cared about this software long before us.
Want your face here? The engine has one rule, fix the engine, never the skin, and a very honest list of what's left to do. Bugs, skins that render wrong, and PRs: github.com/qtamp/qtamp/issues.