Releases: danghe/HeadManiaReleases
Release list
HeadMania UpSampler v2.2.1
HeadMania UpSampler v2.2.1— Reference-precision filters up to 16 million taps, higher native DSD, and a live performance readout
Support the ongoing development of this project on Patreon: https://www.patreon.com/c/HeadMania
Need help, want to share feedback, or chat with other listeners? Join the Telegram group: https://t.me/+lIFYDf6ZmMk4N2E0
Found a bug or have a feature request? Report it on the issue tracker: https://github.com/danghe/HeadManiaReleases/issues
v2.2.1
This release rolls up everything since 1.35.3 into one update: a new extreme-precision filter tier, instant startup for the big filters, higher native DSD — and now smoother high-rate DSD plus a live real-time performance readout. The precision work is a measured-spec capability, not a new in-band sound claim — judge it by ear on your own gear.
What's new
Reference Precision — a new extreme-precision filter tier. New filters that compute the reconstruction in 106-bit double-double precision at up to 16 million taps — the precision class of PGGB and HQPlayer's 128-bit modes, at and beyond the tap count of Chord's £25,000 Quartet. Available as Reference Linear, Reference Organik, Organik Halfband and Kinetic V3, at 4M / 8M / 16M taps, for file and network (UPnP/DLNA) playback. They're SIMD-accelerated — AVX2 (256-bit) on Intel/AMD, NEON on Apple Silicon — for roughly 2× the throughput of a scalar build on x86 (NEON's narrower 128-bit vectors give a smaller but real gain), which is what lets even the 16-million-tap variants run with real-time headroom to spare (a 16M filter plays comfortably above real time; 4M with room to burn). And they're honest about themselves: at a 24/32-bit transport the result is byte-identical to the standard path — and the SIMD path is bit-for-bit identical to the scalar one — a computed-precision capability, never an audible-quality claim.
Fast Start — the standard million-tap filters begin instantly. The Mega / Ultimate filter family starts playing in tens of milliseconds instead of buffering for several seconds. On by default; switch it off in Settings for a lower-CPU, bursty mode on older machines. The sound is bit-for-bit identical either way.
Higher, smoother native DSD. Native DSD output over ASIO up to DSD1024, with rate-tuned noise shaping for cleaner DSD256 / DSD512 (and DSD2048 on DDCs that generate it). New in this build: the DSD upsampling and the 1-bit modulator now run on separate CPU cores, so the highest DSD rates carry more real-time headroom — DSD1024 in particular is steadier. Identical audio either way; this is about keeping up cleanly, not sound. It engages automatically on machines with cores to spare. DSD is still labelled honestly, never as a fake PCM rate.
A live real-time performance readout. The Debug tab now shows, live, how much real-time headroom each stage has — the filter, the DSD upsampling, and the DSD modulator — and whether DSD is running split across two cores. No setup, no flags: you can see exactly how much margin you have on your own hardware, with any filter and rate.
Honest caveats
The Reference tier is file / server source only. It's too heavy for the real-time live-capture path. If you start live system-audio capture with a Reference preset selected, HeadMania substitutes a live-capable filter for the capture, shows that filter as active in the grid, and tells you — your Reference choice returns the moment you stop capture and play a file or stream from the server.
Reference precision is computed, transport-limited, and inaudible by construction. Every figure sits well below the best-DAC analog wall. It matches the computation precision and tap count of the most extreme upsamplers made, and is never presented as a sound upgrade.
The first time you pick a given Reference filter, it builds its filter once — a few seconds, longer for 16M — then caches it, so every later start is near-instant. On a file or network source the player buffers ahead, so this one-time build stays out of the way.
At the very highest DSD rates (DSD1024), the readout is your friend: a heavier dual-path filter leaves less headroom for the modulator than a single-path one, so if you push DSD1024 with the biggest filters, watch the readout and lean single-path for the steadiest result. The core-splitting auto-engages only where there are enough cores; on smaller machines DSD stays on the proven single-core path. Identical audio either way.
Windows release only. The macOS build is pending its own Clang gate.
Need help, want to share feedback, or chat with other listeners? Join the Telegram group: https://t.me/+lIFYDf6ZmMk4N2E0
Found a bug or have a feature request? Report it on the issue tracker: https://github.com/danghe/HeadManiaReleases/issues
HeadMania UpSampler v1.35.3
HeadMania UpSampler v1.35.3 — Higher rates from your hi-res files, and a screen that shows you what's really going to the DAC
Support the ongoing development of this project on Patreon: https://www.patreon.com/c/HeadMania
Need help, want to share feedback, or chat with other listeners? Join the Telegram group: https://t.me/+lIFYDf6ZmMk4N2E0
Found a bug or have a feature request? Report it on the issue tracker: https://github.com/danghe/HeadManiaReleases/issues
This release rolls up everything since 1.32.0 into a single update — ×16 from hi-res sources, a new now-playing screen, clearer rate-negotiation logging, and two default changes I'll be straight about below. None of it adds a new in-band sound claim; the changes are about reach, transparency, and getting the defaults right.
What's new
-
×16 from hi-res sources. In 1.32.0, ×16 (705.6 / 768 kHz) was limited to 44.1/48 kHz material. Now an 88.2 / 96 / 176.4 / 192 kHz source reaches 705.6 / 768 kHz too, on the FFT-mega family (MegaOrganik, MegaLinear and the rest) and the direct-FIR presets. The million-tap filter still runs at its validated rate; a transparent band-doubler lifts the last octave. I measured it end-to-end: in-band-identical to ×8 (0.0000 dB), gain-neutral, true-peak compliant. As with 1.32.0, there's no new in-band sonic claim here — the benefit is the higher rate handed to your DAC. Judge it by ear on your own gear.
-
Rate-negotiation diagnostics (Debug tab). With tracing on, the log now shows why a rate was chosen or capped — source rate, requested multiplier, ceiling, final target — alongside the actual ASIO / WASAPI / CoreAudio result, including when a DAC quietly downshifts. No more silent caps or mystery rates.
-
A new Play tab — a now-playing screen. Mainly for running HeadMania as a network (UPnP/DLNA) renderer feeding a local DAC — pushing from Audirvana, mconnect and the like used to land on a blank screen. You now get album art, track / artist / album, elapsed and total time, and a progress bar. The centerpiece is the live signal chain — SOURCE → FILTER → STREAM → DAC — showing the real incoming format, the active filter, the stream bandwidth (Mbps), and the actual DAC output, with DSD labelled honestly ("DSD256 (DoP)", never a fake PCM rate). It also works for file playback and live capture in the desktop app, and degrades gracefully when metadata is thin (filename as title, a clean placeholder for missing art).
-
Now-playing for live capture. When you capture live system audio (Tidal / Qobuz / Spotify / YouTube → HeadMania → DAC) there are no tags or cover art. The STREAM card now shows the real bitrate to the DAC (it used to read "—"), and an animated HeadMania logo with reacting lightning stands in for the missing artwork.
-
Stereo Width now defaults to Normal — a real sound fix. On a fresh install with no saved setting, the engine was wrongly defaulting Stereo Width to Extra Wide instead of Normal. That subtly widened the image, recessed vocals, and lifted sibilance — without you asking for any of it. It now defaults to Normal (0.0), matching the slider. If you'd set a width yourself, nothing changes.
-
True-Peak Protection now defaults to Off. Most well-mastered music sits below 0 dBFS and plays bit-transparent this way — the purest path — so that's the new default, consistent on Windows and macOS.
Honest caveats
-
The transient-corrected presets reach ×16 only from a 44.1/48 kHz source — by design. AURORA, Transient-Perfect (V4 monotone), Halfband and Kinetic dual-path keep their zero-overshoot / bit-exact guarantees only at their validated inner ratio, so they stay on their proven path instead of routing through the doubler. For ×16 → 768 on those, feed them a 48 kHz source. For ×16 from any source, use the mega / direct-FIR family.
-
True-Peak Protection Off is a purity-first default, not a free lunch. If you play hot or already-clipped masters, the loudest inter-sample peaks are clamped at 0 dBFS. Turn True-Peak Protection ON in Settings to get the transparent limiter back. DSD output is always protected regardless.
-
Stereo Width on an already-affected install. If you were hit by the old default, the slider may still read 0.50. Drag it to 0.00 once and it sticks.
-
The Play tab progress bar is read-only (no seek), and cover art is best-effort from whatever the control app advertises.
-
Windows release only. The macOS build is pending its own Clang gate.
Need help, want to share feedback, or chat with other listeners? Join the Telegram group: https://t.me/+lIFYDf6ZmMk4N2E0
Found a bug or have a feature request? Report it on the issue tracker: https://github.com/danghe/HeadManiaReleases/issues
HeadMania Upsampler 1.32.0
Support the ongoing development of this project on Patreon: https://www.patreon.com/c/HeadMania
Need help, want to share feedback, or chat with other listeners? Join the Telegram group: https://t.me/+lIFYDf6ZmMk4N2E0
Found a bug or have a feature request? Report it on the issue tracker: https://github.com/danghe/HeadManiaReleases/issues
v1.32.0
This one adds 16× upsampling. The ceiling used to be 8× — 352.8 / 384 kHz. Now there's a ×16 button in the rate selector that takes 44.1-family sources to 705.6 kHz and 48-family sources to 768 kHz, and it works with every filter: Organik, Kinetic, the Mega family, AURORA, Transient-Perfect, all of them. That breadth is possible because of how it's built — the heavy million-tap filter keeps running at its proven 8× rate, and a thin, transparent stage lifts the final octave on top. So 16× costs almost nothing in CPU and changes nothing in the filter's character.
I need to be straight about what 16× is and isn't, because the honest answer matters more than the headline. 16× is not "cleaner" than 8× in any way you can measure in the digital domain. I measured it end-to-end through the real engine: in the audible band, the 16× output is identical to the 8× output to the limit of the measurement — 0.00000 dB difference — perfectly gain-neutral, with no change in true peak and the same in-band image rejection. So what does it actually buy you? The benefit is at your DAC, not in the bits. Doubling the output rate roughly doubles the empty space between your music and the first reconstruction image, which lets your DAC's analog reconstruction filter roll off more gently — a wider, less aggressive slope, which can mean flatter phase in the top octave. It also gives the true-peak limiter more between-sample detail to catch on the loudest masters. Whether any of that is audible depends entirely on your DAC; some DACs oversample internally and won't gain much. Honest summary: 16× hands your DAC an easier analog problem; it does not change the signal in the audible band. Judge it by ear on your own gear.
What's new
- 16× upsampling (705.6 / 768 kHz), every filter. New ×16 button in the rate selector. The million-tap filter still runs at 8×; a transparent stage lifts the top octave on top of it, so CPU cost is minimal and the filter's character is unchanged.
- Transient-Perfect keeps its zero-overshoot guarantee at 16×. That guarantee depends on a non-negative kernel, and the lift stage uses a matching non-negative interpolation — so Transient-Perfect stays provably monotone at 705.6 / 768 kHz, not just at 8×.
- DSD is untouched. 16× is PCM-only. DSD output stays at its validated rate and is bit-for-bit identical to before — choosing a higher PCM rate never reaches the DSD modulator.
- High-res sources keep their rate. 16× is for the 44.1 / 48 base families. A 96 / 192 kHz source already starts high, so it stays at its proven rate rather than being pushed onto a heavier filter. If a DAC can't accept 705.6 / 768 kHz, it falls back cleanly and the status badge shows the rate you actually got.
- DSD from a 48 / 96 kHz source plays again (rolled in from v1.31.4). On some setups, DSD output from a 48-kHz-family source — including live capture, which some systems pin to 48 kHz — produced silence. The engine now projects those onto the 44.1 base the DSD modulator needs, so DSD plays from any source family.
Need help, want to share feedback, or chat with other listeners? Join the Telegram group: https://t.me/+lIFYDf6ZmMk4N2E0
Found a bug or have a feature request? Report it on the issue tracker: https://github.com/danghe/HeadManiaReleases/issues
HeadMania Upsampler 1.31.3
Support the ongoing development of this project on Patreon: https://www.patreon.com/c/HeadMania
Need help, want to share feedback, or chat with other listeners? Join the Telegram group: https://t.me/+lIFYDf6ZmMk4N2E0
Found a bug or have a feature request? Report it on the issue tracker: https://github.com/danghe/HeadManiaReleases/issues
v1.31.3
This is the biggest release since AURORA. Until now HeadMania upsampled to high-rate PCM and handed that to your DAC. It can now also output DSD — it builds the bitstream itself, with its own sigma-delta modulator, and feeds it to the DAC. Alongside that there's a new filter, a fix that makes your chosen filter apply to every source, and an honest correction to AURORA. Everything since v1.24.8 is rolled up here.
What's new
-
DSD output. HeadMania can now deliver DSD, not just PCM. The modulator targets reference-grade noise shaping, and there are several ways to reach your DAC: native DSD over ASIO (Windows, USB DACs), DSD over DoP (Windows and macOS), and DSD over a UPnP/network relay. Rates run DSD64 to DSD512 (the network relay path tops out at DSD256; DSD512 is available for file and server playback). Native DSD engages automatically when the DAC supports it — no manual opt-in. The output choice is now a single dropdown: PCM, native DSD, or DoP, one at a time.
-
New filter — Transient-Perfect. A dual-path preset. Sustained music runs through the full 1-million-tap MegaOrganik, but detected transients are handed to a kernel that's monotone by construction — 0.01% step overshoot, zero pre-ringing, proven mathematically rather than tuned. The honest trade, which the app keeps visible: during the few-millisecond transient windows only, the very top treble shades down a little. Worth judging by ear on cymbals and percussion.
-
Your chosen filter now applies to every source. Before this, a 48/96/192 kHz source — or live capture, which some systems pin to 48 kHz — heading to a DSD or 44.1-family output quietly fell back to a generic resampler, and your selected filter was bypassed. The engine now conforms the input first, so Organik, Kinetic, Transient-Perfect, AURORA and the rest always apply. The status badge shows the exact chain that's running.
-
AURORA — corrected and made true-peak-safe. Two things I need to be straight about. First: the AURORA overshoot figures shown in earlier builds were measured wrong. They're now measured live, end to end, at real playback block sizes, and the app shows the true numbers. Second: a true-peak audit found the AURORA correction could push the reconstructed between-sample peak slightly past the safe ceiling on loud transients — so the correction was redesigned to stay below the base filter's true peak. AURORA is honest now, and safe on the loudest material.
-
Stability and fidelity fixes. DSD playback on loud passages no longer pumps (a limiter was riding the program — fixed); live-capture DSD distortion is fixed; network track-to-track transitions no longer overflow on unknown-length streams; finite file renders are now sample-exact with no lost tail; macOS DoP playback is clean on real hardware; and there's a new Debug tab with live tracing for diagnosing playback issues.
Need help, want to share feedback, or chat with other listeners? Join the Telegram group: https://t.me/+lIFYDf6ZmMk4N2E0
Found a bug or have a feature request? Report it on the issue tracker: https://github.com/danghe/HeadManiaReleases/issues
HeadMania UpSampler v1.24.8
Support the ongoing development of this project on Patreon: https://www.patreon.com/c/HeadMania
Need help, want to share feedback, or chat with other listeners? Join the Telegram group: https://t.me/+lIFYDf6ZmMk4N2E0
Found a bug or have a feature request? Report it on the issue tracker: https://github.com/danghe/HeadManiaReleases/issues
v1.24.8
v1.24.0 introduced AURORA. This release is about making everything around it solid. No new filters — AURORA is unchanged. Instead, v1.24.7 lets you switch presets while the music plays, makes the UI tell you exactly which filter the engine is actually running, and steadies network playback. It rolls up everything since v1.24.0 (the 1.24.1–1.24.6 builds were never published).
What's new
- Live filter switching. Change presets mid-playback and the engine swaps in real time. Earlier builds could fail to take the new filter, or drop into a brief moment of silence after a swap — that's fixed. The transition is now smooth.
- Steadier Diretta and device handling. Playback to a Diretta DAC recovers cleanly from a stop-then-quick-restart on the network path. Re-scanning for devices no longer interrupts playback already in progress, and the device list now matches between the app and the headless server.
- Network stability. The control connection is hardened, and the fixes from the recent Sound-Tuning audit pass are folded in.
HeadMania UpSampler v1.24.0
Support the ongoing development of this project on Patreon: https://www.patreon.com/c/HeadMania
Need help, want to share feedback, or chat with other listeners? Join the Telegram group: https://t.me/+lIFYDf6ZmMk4N2E0
Found a bug or have a feature request? Report it on the issue tracker: https://github.com/danghe/HeadManiaReleases/issues
A long arc since v1.17.6 — six version numbers of new DSP and a UI refresh. The headline is AURORA: a thin correction layer that sits on top of a Mega-class base filter and reduces the small overshoot every linear-phase FIR produces on a hard edge.
The headline is AURORA: a thin correction layer that sits on top of a Mega-class base filter and reduces the small overshoot every linear-phase FIR produces on a hard edge. AURORA never touches your original samples — only the in-between values the upsampler invents on the way to your DAC.
What's new
AURORA (PREVIEW) — three presets, atom active at α=1.0:
- AURORA · Kinetic ★ HEADLINE — over Mega Kinetic V3 (linear-phase dual-path). Step overshoot 13.98% → 6.05%.
- AURORA · Organik — over MegaOrganik 1M. 27.06% → 21.19%.
- AURORA · Adaptive — over V4 Halfband dual-path with a path-aware atom on the transient kernel.
Audible-band residue ≤ −127 dBFS across all three. Off mode is the base filter, untouched.
Multi-band coincidence gate (v1.24) — AURORA fires only when ≥2 of 3 critical bands (sub-bass, midrange snap, treble shimmer) co-fire within ±2 ms. Sustained cymbal washes and sub-bass drones no longer trip the atom.
Mega Kinetic V3 and V4 Halfband — new dual-path base filters. V3 is the cleanest interpolator in the lineup; V4 carries a long Mega-tier kernel on sustained passages and switches to a short halfband on transients.
Diretta network audio — Rockna's ASIO Diretta driver works on both app and server paths.
Adaptive transient cooldown (Path C) — the detector now adapts to recent event density. No more 5–20 Hz tremolo on dense kit fills. Sparse music stays bit-exact to v1.22.x.
HeadMania-UpSampler-v1.17.6
Support the ongoing development of this project on Patreon: https://www.patreon.com/c/HeadMania
Need help, want to share feedback, or chat with other listeners? Join the Telegram group: https://t.me/+lIFYDf6ZmMk4N2E0
Found a bug or have a feature request? Report it on the issue tracker: https://github.com/danghe/HeadManiaReleases/issues
This is just a patch for some issues I found. Check out the previous release notes for more details on the new awesome and unique new Mega Organik Halfband filter.
When the UI says one preset is loaded, the DAC plays that preset.
This is a reliability release. No new presets, no DSP changes — v1.17.6 sounds bit-identical to v1.17.4.
What's fixed:
Live-capture preset switching optimisations.
No leading silence on file playback when your DAC negotiates a lower rate. The ~30 ms gap at first sample is gone.
macOS Float32 wins over Int24 even at a lower rate. On DACs that expose both, the Float32 path is now preferred — no unnecessary integer conversion.
Windows DAC hot-swap during live capture. Plug in a different DAC mid-stream and the engine reads its native rate. Previously stuck at the old DAC's rate, which produced pitch-shifted output.
Caveat: if you yank your USB DAC mid-playback on macOS, the UI will still show PLAYING until you press Stop.
HeadMania-UpSampler-v1.17.4
Support the ongoing development of this project on Patreon: https://www.patreon.com/c/HeadMania
Need help, want to share feedback, or chat with other listeners? Join the Telegram group: https://t.me/+lIFYDf6ZmMk4N2E0
Found a bug or have a feature request? Report it on the issue tracker: https://github.com/danghe/HeadManiaReleases/issues
Headline — a new flagship preset: Mega Organik Adaptive
The Organik family has always traded one thing for another: zero pre-ringing at all times (so transients never get smeared before they arrive), in exchange for a longer post-ring tail after each transient. That trade was the price of minimum-phase reconstruction. v1.17.4 stops asking you to pay it.
Mega Organik Adaptive (shown in the UI as Mega Organik V4 Halfband) sits at the top of the Organik group. On sustained material — vocals, sustained strings, ambience, room tone — it delivers the same Mega-tier reconstruction quality the Mega Organik presets are known for. On transients — a snare hit, a plucked guitar, a brass attack — it shortens its own response, on the fly, so the tail after each strike collapses almost to silence within a couple of milliseconds.
Think of it as a filter that knows when the music is breathing and when it's being struck, and adjusts its tail length to match.
What this looks like in measurement
- Pre-ringing: zero, at all times. This is structural — same as every other Organik preset.
- Post-ringing on sustained passages: identical long, smooth decay as Mega Organik.
- Post-ringing on transients: the tail drops from roughly −33 dB at +2 ms after the attack to roughly −293 dB at +5 ms after the attack. That last number is at the floating-point noise floor — for practical purposes the tail is gone within a few milliseconds of the strike. Compared with a fixed Mega filter handling the same transient, the tail decays roughly nine orders of magnitude faster.
A reference decay-envelope plot (Mega Organik vs Mega Kinetic vs the two operating modes of the new preset) is included with this release at docs/measurements/v1.17.4_win_mega_postring_db_decay.png if you want to see the shapes side by side.
Honest caveats
- Latency is 8 ms. This is not a preset for video or game lip-sync. Use one of the lower-latency presets for those.
- The transition between sustained-mode and transient-mode is automatic and inaudible on the source material we've tested, but Mega Organik Adaptive remains 🔬 R&D — blind ABX validation is still pending.
- The CPU cost is in the Mega tier — comparable to other Mega Organik presets. Older machines should stay on the non-Mega Organik options.
Other changes since v1.16.1
macOS — no more dropouts under load. Some listeners hit short audio dropouts on macOS when the system was busy with something else (background indexing, large file scans, heavy multitasking). v1.17.4 fixes that. The audio worker thread now runs at the correct macOS priority class, and the buffer cushion is wider when the highest-tier filters are active. On a busy Mac, playback now holds.
Kinetic V3 measures cleaner. An audio-thread scheduling fix that went in for the macOS work above also benefits the Kinetic V3 presets on Windows: null-test residuals come out roughly 4 dB lower than in v1.16.1. Nothing about the V3 design changed — the filters just run on a quieter thread now.
Cleaner UI. Through the v1.16.x and v1.17.x cycle, a number of research-grade diagnostics and engineer-facing readouts were moved out of the main surface. The shipping app is simpler to read and less cluttered. The advanced material is still reachable for anyone who wants it.
How to try Mega Organik Adaptive
Open the filter-preset list and scroll to the Mega family. The preset is labelled Mega Organik V4 Halfband 🔬 R&D.
Recommended A/B method: pick a track with a clear mix of sustained tonal content (a vocal line, a sustained string pad) and percussive transients (kick, snare, plucked strings). Compare against Mega Organik at the same volume. Sustained passages should sound the same. Transients should feel a touch tighter and more defined, without any change in tonal balance or apparent loudness. If you hear a brightness shift or a level change, something is wrong — please report it.

Need help, want to share feedback, or chat with other listeners? Join the Telegram group: https://t.me/+lIFYDf6ZmMk4N2E0
Found a bug or have a feature request? Report it on the issue tracker: https://github.com/danghe/HeadManiaReleases/issues
HeadMania-UpSampler-v1.16.1
Support the ongoing development of this project on Patreon: https://www.patreon.com/c/HeadMania
Need help, want to share feedback, or chat with other listeners? Join the Telegram group: https://t.me/+lIFYDf6ZmMk4N2E0
Found a bug or have a feature request? Report it on the issue tracker: https://github.com/danghe/HeadManiaReleases/issues
Headline — two new Kinetic V3 presets
v1.15.0 introduced the V1 Kinetic family — transient-adaptive filters that morphed phase character per-transient. The V1 approach worked, but had a known structural limit: its transient detector only modulated the far edges of each impulse response, where the kernel had already tapered to near-zero. The audible effect was extremely subtle, and the measured pre-ring delta sat near −245 dBFS — well below any documented JND.
V3 fixes this architecturally. Two parallel linear-time-invariant filters now run at the same time — one linear-phase (α=0), one cepstrum-warped (α=0.3). A transient detector with 8 ms lookahead sees each percussion strike or pluck attack coming and crossfades briefly to the warped path for the leading edge (~3 ms attack, ~30 ms release), then back. On sustained material — vocals, strings, ambience — V3 is bit-identical to the linear-phase reference.
Two new presets ship today, both marked 🔬 R&D:
- Kinetic Apex Hybrid V3 — 300K-tap
- Mega Kinetic V3 — 1,000,001-tap
Measured properties (V3 vs the linear-phase reference at the same tap count)
| Linear-phase reference | Kinetic V3 | |
|---|---|---|
| Pre-ring time extent at the attack | 7.18 ms | 0.057 ms |
| Pre-ring amplitude at −5 ms before transient | −57 dB | −86 dB |
| Stereo L/R coherence (γ delta) | — | 0.000 (bit-exact) |
| Peak overshoot vs reference | — | None (1.000 → 0.742 at full kinetic) |
| Latency at 1M taps | 1.43 s | 1.43 s (same) |
| CPU at 1M taps | (baseline) | ~2× the V1 Kinetic equivalent — about 48% of one core |
What V3 does is move the pre-ring out of the audible window. On the linear-phase reference, the ring sits across the 7 ms before each transient — the window where backward masking is moderate and a trained ear can hear it. On V3, that same ring is compressed into a 0.057 ms sliver right before the peak — inside the ear's strong pre-masking shadow, where it fuses with the transient itself and cannot be heard separately. The audible-window amplitude drops 30 dB at −5 ms — well below the published JND for filter pre-ringing.
Other changes since v1.15.0
Kinetic Dual Engine — clicks fixed. The older V1 Kinetic Dual Engine preset had audible clicks on some material. Three separate causes were patched in sequence; the preset is now click-free.
Settings persistence — Windows and macOS. Filter preset selection now persists correctly across app restarts on Windows. Live-capture device and capture-format settings now persist correctly across restarts on macOS.
UI state sync. State changes initiated inside the engine (format changes, internal reconfigure) now push to the UI on Windows. Reconnect paths no longer leave the UI showing a stale snapshot. A small cluster of settings/status surface bugs is closed.
Boot-time meter freeze. On first launch some users saw the level meter and visualization frozen until they clicked something. Fixed.
About page. New V3 cards with the measured numbers. The measurement table has been reorganized so the V1 → V3 progression reads in order. A separate page summarizing the underlying research is now linked from the About tab.
Honest caveats
- Both V3 presets are 🔬 R&D. Blind ABX validation is still pending; informal listening reports are positive but not authoritative.
- V3 is not the same as the Organik presets. Organik is full minimum-phase across the board — zero pre-ring at all times, by construction. V3 only departs from linear-phase during the brief attack window around each transient.
- V3 is not a brightness boost, an EQ tilt, or a saturation effect. Sustained material is bit-identical to the linear-phase reference.
- V3 costs roughly twice the CPU of the V1 Kinetic preset at the same tap count. A worker-pool-parallelized version is in the backlog. On older machines, the V1 Kinetic presets remain a lower-CPU alternative.
How to try the new presets
Open the app and look in the filter-preset list under the 🔥 Kinetic — Transient-Adaptive group for Kinetic Apex Hybrid V3 🔬 R&D. For the 1M-tap variant, scroll to the Mega family for Mega Kinetic V3 🔬 R&D.
Recommended A/B method: pick a track with both sustained content (vocals, strings) and percussive transients (drum hits, plucked guitar). Compare V3 against its static counterpart — Apex Hybrid for the 300K variant, MegaLinear 1M for the Mega variant. Sustained passages should sound indistinguishable. Transients should feel slightly tighter without any change in tonal balance or apparent loudness.
Need help, want to share feedback, or chat with other listeners? Join the Telegram group: https://t.me/+lIFYDf6ZmMk4N2E0
Found a bug or have a feature request? Report it on the issue tracker: https://github.com/danghe/HeadManiaReleases/issues
HeadMania-UpSampler-v1.15.0
HeadMania UpSampler v1.15.0 — Transient-Adaptive Filters
Support the ongoing development of this project on Patreon: https://www.patreon.com/c/HeadMania
Need help, want to share feedback, or chat with other listeners? Join the Telegram group: https://t.me/+lIFYDf6ZmMk4N2E0
Found a bug or have a feature request? Report it on the issue tracker: https://github.com/danghe/HeadManiaReleases/issues
Headline — three new transient-adaptive filters
This release introduces a new family of upsampling filters that adapt their time-domain behavior in real time, based on what the music is doing. Three new presets are surfaced (all marked 🔬 R&D while blind ABX validation continues):
- Adaptive Apex Hybrid — 300K-tap main FIR + transient-gated apodizer
- Kinetic Apex Hybrid — 300K-tap, Kinetic 2.0 cepstral phase morph
- Mega Kinetic — 1,000,001-tap, Kinetic 2.0 cepstral phase morph at full Mega depth
All three target the same fundamental trade-off — linear-phase clarity on sustained content, min-phase snap on transients — but they get there via different mechanisms.
The problem they all solve
Every upsampling filter forces a choice between two philosophies:
- Linear-phase filters give perfect group-delay flatness, deep soundstage, and rock-solid stereo imaging — but they ring before each transient arrives ("pre-ring"), which can soften attacks on percussion and plucked strings.
- Min-phase filters eliminate pre-ring entirely (sharper attacks) — but they sacrifice some spatial precision and add non-flat group delay.
The classic audiophile debate (Linn Organik vs Chord WTA, Selekt vs M-Scaler) is essentially about which side of this trade-off you prefer. All three new HeadMania presets sidestep the choice by adapting per-transient.
Preset 1 — Adaptive Apex Hybrid
Mechanism: the apodizer cascade gets gated by a transient detector.
The existing Apex Hybrid preset is built from a 300K-tap linear-phase main FIR (the tightest the r8brain engine can synthesize) followed by a fixed 1023-tap minimum-phase apodizer cascade that always runs. The apodizer cleans up the long FIR's pre-ringing but contributes a tiny truncation-noise floor of its own.
Adaptive Apex Hybrid keeps the same 300K-tap main FIR but only engages the apodizer when a transient is detected. During sustained content the apodizer disengages entirely — output is pure linear-phase reconstruction with zero apodizer contribution. When a transient arrives, the apodizer gates back in over a brief Hanning window, then releases.
Measured properties:
- Steady-state stopband: 316 dB (1.2 dB cleaner than static Apex Hybrid — because the apodizer truncation tail is absent when no transient is detected)
- Steady-state image rejection: 297 dB
- Steady-state THD+N: at the floating-point precision floor
The audible idea: all the spatial precision and stopband cleanliness of pure linear-phase MegaLinear-grade reconstruction, plus the transient snap of Hybrid-grade apodization when the music actually has transients to suppress.
Presets 2 & 3 — Kinetic Apex Hybrid + Mega Kinetic (Kinetic 2.0)
Mechanism: instead of cascading a separate apodizer, the filter morphs its own phase response.
Both presets store three pre-computed FIR kernels at α ∈ {0, 0.5, 1.0}:
- α = 0 — pure linear-phase (symmetric IR, perfect group-delay flatness)
- α = 1 — min-phase (asymmetric IR, no pre-ring)
- α = 0.5 — cepstral intermediate
A transient detector with asymmetric 3 ms attack / 30 ms release ramps α continuously between 0 and 0.5 in real time:
- Sustained passages → α = 0 → behaves exactly as a static linear-phase brick-wall
- Transient → α rises briefly → pre-ring suppressed (the IR briefly shifts toward min-phase character)
- ~30 ms later → α decays back to 0
What makes this approach different from Adaptive Apex's apodizer-gating:
The cepstral phase morph is mathematically magnitude-preserving by construction. Cepstrum operates on log|H(ω)|, which is symmetric for real-valued signals. Scaling the causal vs anti-causal halves of the cepstrum complementarily redistributes the impulse-response time-domain energy without touching the frequency-domain magnitude. We measured this: 0.08 dB max delta across the audible band, essentially zero below 10 kHz.
Apodizer-gating (Adaptive Apex) and parallel-convolver crossfade (the older Kinetic Dual Engine) both have to be careful about avoiding amplitude modulation during the transition. Cepstral phase morphing avoids that entirely — magnitude is provably continuous at every point during the morph.
Two sizes:
- Kinetic Apex Hybrid (300K-tap) — same kernel depth as Apex Hybrid. Drop-in alternative.
- Mega Kinetic (1,000,001-tap) — same kernel depth as MegaLinear 1M. At α=0 it's bit-identical to MegaLinear 1M (verified L2 = 0.000 over 909K output samples). At any non-zero α the magnitude response is preserved within the cepstral precision limit.
Measured properties:
| Kinetic Apex Hybrid | Mega Kinetic | |
|---|---|---|
| Tap count | 300K | 1,000,001 |
| Steady-state stopband | 316 dB | 326 dB |
| Steady-state image rejection | 295 dB | 302 dB |
| Steady-state THD+N | ≤ −150 dB | ≤ −150 dB |
| Transient-time stopband | 115 dB | 130 dB |
| Pre-ring duration (linear-phase reference) | 7.2 ms | 7.2 ms |
| Pre-ring duration (during transient) | 0.07 ms | 0.07 ms |
| H(ω) | invariance across morph |
The 115–130 dB transient-time stopband is well above audibility (24-bit dynamic range is 144 dB; humans don't perceive below ~−120 dB on the cleanest DACs).
How they compare — which one for what
| Preset | Mechanism | Best for | Notes |
|---|---|---|---|
| Adaptive Apex Hybrid | Apodizer cascade gated on/off | Listeners who already liked Apex Hybrid and want the apodizer character only when transients call for it | Same 300K main FIR as Apex Hybrid. Steady-state is cleaner than static Apex Hybrid because the apodizer truncation tail is absent. |
| Kinetic Apex Hybrid | Cepstral phase morph (single convolver, FFT-domain kernel blend) | Listeners who want phase-morph with provably-zero magnitude impact | 300K-tap. No apodizer cascade. The cleanest of the 300K-class transient-adaptive filters from a magnitude-purity standpoint. |
| Mega Kinetic | Cepstral phase morph at 1M-tap depth | Audiophile reference listening on systems with the CPU/memory headroom | Bit-identical to MegaLinear 1M at α=0. Transients receive the cepstral morph treatment without any change in steady-state behavior. |
Why this is technically unusual
Surveying the commercial audiophile-upsampler landscape:
- Linn Selekt / Klimax DSM "Organik" — FPGA-based min-phase. Static. Doesn't morph.
- Chord DAVE / M-Scaler — WTA filter, linear-phase, ~1M+ taps. Static. Doesn't morph.
- HQPlayer (Jussi Laako) — extensive filter menu including "intermediate phase" modes. Static — the user picks one filter and it stays.
- AKM / ESS DAC chips with "auto-filter" modes — switch between filters at coarse boundaries (per track), not per-transient with continuous morphing.
We're not aware of any other commercial audiophile upsampler that adapts phase character per-transient while preserving the magnitude response.
About page updates
- New cards for Adaptive Apex Hybrid, Kinetic Apex Hybrid, and Mega Kinetic with measured numbers and current R&D status.
- Kinetic Dual Engine gained an honest engineering note explaining its parallel-convolver trade-off and pointing readers toward the Kinetic 2.0 presets if they want phase-morph with absolute magnitude purity.
- Measurement table now includes the three new presets with full Goertzel-sweep numbers (stopband, image rejection, THD+N, true worst-case, pre/post-ring).
- About-tab container widened to fit the now 10-column measurement table without horizontal scroll on typical desktop viewports. On narrower windows the table's own scroll wrapper kicks in.
- Removed an incorrect recommendation that suggested MegaOrganik 2M for live-capture use.
Engineering hardening (under-the-hood)
- Preset-switch UB fix — the engine's
reconfigure()is now strong-exception-safe: it builds the candidate convolver and configures it BEFORE replacing the live resampler. Astd::bad_allocduring a huge MegaFIR FFT allocation (or similar failure) can no longer leave the engine pointing at unconfigured state. - Type-safe Kinetic-engine downcast via a new virtual method — prevents UB during the transient window where
m_presetand the live resampler's actual type could disagree across rapid preset switches. - Release packaging now mirrors worktree builds to the main checkout's
Releases/so canonical history stays consistent regardless of which worktree the build ran from. - v1.14.2 (the build-hygiene patch between v1.14.1 and this release) disabled
HM_RT_TRACEin the release build — it had been inadvertently left on in v1.14.1, adding per-block instrumentation overhead. v1.15.0 inherits the fix.
Test infrastructure (engineering audience)
- New
hm_phase_morph_runtimebinary with 21 synthetic-signal tests covering steady-state behavior, transient detection, static-α IR shape progression, magnitude preservation across α anchors, stereo coherence, and PM-sideband measurement with a static-linear control baseline.
How to try the new presets
Open the app and look in the filter-preset list for the 🔥 Kinetic — Transient-Adaptive group:
- Adaptive Apex Hybrid 🔬 R&D — apodizer-gated variant
- Kinetic Apex Hybrid 🔬 R&D — cepstral phase morph (300K)
For the Mega-class variant, scroll to t...