MRC stores your data as addresses on a fractal. The decoder regenerates the entire reference bank from ~30 bytes of mathematics — so every byte you transmit is signal, and not one is dictionary.
Every mainstream codec learns its dictionary from your data. A 64-byte sensor frame gives it nothing to learn from — so it shrugs, or makes things worse.
gzip on a 64-byte audio frame: −5% at best. Raw delta+LZMA frequently expands it. The context window these coders need simply never arrives.
zstd's answer is a pre-trained dictionary — 21–112 KB that every device must store, version, and keep in sync with the server. One mismatch and decoding breaks.
LoRaWAN frames top out at 51–222 bytes. NB-IoT and satellite backhaul bill by the kilobyte. Radio transmit dominates the battery budget of every remote sensor in the field.
The Mandelbrot set is deterministic. Same parameters → identical structure, on any machine, forever. MRC turns fractal geometry into a rich pattern bank and stores your data as where it lives on that bank, plus a small correction. The bank itself is never sent — both ends just compute it.
The atlas catalog — eight deterministic generators, each rebuilt on demand into a cached pattern bank. Atlases 5–7 were designed by machine search, one per use case. The encoder tries every atlas in its configured roster (default: 0–3) and keeps the smallest result; a single header byte tells the decoder which one to regenerate. Atlas 4 — an orbit-trap Mandelbrot, sole survivor of a 12-family hunt — is opt-in: it wins on engine-byte-heavy data, and leaving it out of the default roster keeps encode speed unchanged for everyone else. Click an atlas — the live demo below will use it.
~30 bytes of viewport parameters deterministically expand into a 1 MB pattern bank — identically, on the encoder and on the decoder. Zero codebook bytes cross the wire.
Each block is correlated against 65,535 fractal segments (read at 1×/2×/4× scale). The best match costs 2 B of address plus 3 B of affine fit.
The residual between prediction and reality is zigzag-mapped and entropy-coded with an adaptive range coder. Every block always has a path — round-trip is bit-exact, always.
The MRC4 container compares the fractal engine against internal fallbacks per payload and keeps the smallest — 135/140 wins against the best of gzip, LZMA and delta+LZMA.
This page runs the real matching math — a fractal pattern bank generated in JavaScript, normalized cross-correlation, affine fit, residual entropy. No server. No tricks.
Faithful miniature of the MRC4 frame container: the encoder scans 65,536 regenerated bank samples with normalized correlation (fractal-address family), also tries the sample-delta family, and ships whichever is smaller — exactly like the real codec. The third frame profile is a set of real captured frames from the benchmark corpora on which the fractal family wins even in this miniature — on synthetic smooth profiles the delta family usually takes it, exactly as it should. The production encoder adds multi-scale candidate banks, the full atlas roster per frame and an adaptive range coder, so it does better than this demo, not worse.
Every figure below comes from held-out data the codec was never tuned on, round-trip-verified to the bit. Optimistic-bound and held-out runs agree within noise — the gain is real.
zstd's trained dictionaries play the same small-payload game — but each one is 21–112 KB of baggage that must live on every device, in every firmware image, forever versioned. MRC regenerates its bank from ~30 bytes of parameters baked into the format itself. And still encodes 25–40% smaller.
| Frame decode (read) | 0.13 ms/frame · ~0.5 MB/s |
| Frame encode (write) | 93 ms/frame · ~0.7 KB/s |
| File decode (4 KB) | ~10 MB/s |
| File encode (4 KB) | 6.8 s |
| Bank regeneration (once, at startup) | ~27 s full roster |
| Frame encode, C port (measured, bitstream-identical) | 2.3 ms/frame single atlas · 9.6 ms full roster |
| Delta-family encode, C port (measured) | ~1 µs/frame · ~51 MB/s |
Decoding is nearly free — look up the address in the regenerated bank, apply the affine fit, add the residual. No search. All the work lives in encoding, where the 65,535-window, multi-scale, multi-atlas search runs — which is why the embedded C encoder is the roadmap's next milestone, not an afterthought.
Constrained devices have an escape hatch that's already in the format: the sample-delta family encodes in a single pass — MCU-friendly, and usually the winner on seismic data anyway. Run delta on the sensor, leave the fractal search to the gateway; the bitstream doesn't care where the work happens. The economics hold either way: a byte of cellular transmit costs ~1,000× the energy of the compute that removes it.
Playback: yes, everywhere, already. Decoding a frame takes 0.13 ms in interpreted Python — ~30× faster than the 4 ms of audio it holds. The C decoder will be hundreds of times real time. Live encoding: not in Python — 93 ms per 4 ms frame is ~23× too slow; the reference implementation is a correctness proof, not a racehorse. The C encoder — now built and measured at 2.3 ms/frame (single atlas, bitstream-identical to the reference, on a low-power x86 core) — crosses the line: 8 kHz voice and telemetry encode in real time, with margin — and since every frame is independent, throughput scales linearly with cores. Devices that can’t afford the search stream live today via the single-pass sample-delta family — measured at ~1 µs per frame in the same C port. The honest ceiling: 44.1 kHz hi-fi with the full fractal search is not real-time on one small core (0.73 ms of audio vs ~1–3 ms of search) — that takes SIMD or multicore, or delta on the device with the fractal pass running where CPU is cheap. MRC’s home turf — telemetry-rate signals over expensive radio — sits comfortably inside the line.
Twelve fresh fractal families fought for a roster seat: eight chaotic attractors (Hénon, Clifford, Ikeda, Thomas, Rössler, Halvorsen, Duffing, standard map), three new escape grids (burning ship, tricorn, multibrot z³) and two continuous renders. Every attractor lost, by +4–7% — the codec wants multi-scale escape-time terraces, not audio-shaped texture; the affine fit does the waveform-shaping. Multibrot z³ led the probe corpus, then gave its lead back on held-out data — the overfit trap our two-phase protocol exists to catch. The sole survivor: an orbit-trap Mandelbrot render, −0.9% engine bytes on held-out data, now shipped as opt-in atlas 4. Adding it to a roster costs linear encode time, so the default roster stays at four — deployments choose whether −0.9% is worth it. The losers are documented in the paper alongside the winners; that’s the methodology.
Instead of hand-picking generators, round 5 searched recipe space per domain — 25 parameterized candidates each for audio, sensor, seismic and vibration, scored by the real codec on real bytes, winners re-tested on held-out data against the champion roster. The result: a designed atlas beat the best champion in 3 of 4 domains — audio −0.7% (a two-point-trapped Mandelbrot), sensor −0.6% (two-point-trapped Julia sets), vibration −0.6% (ring-trapped Julia sets) — now shipped as atlases 5–7. Each is a ~30-parameter recipe, regenerated from scratch on both sides; nothing is learned, stored or shipped — the zero-dictionary advantage survives machine design. The honest fine print: margins are sub-1%, seismic stayed loyal to Sierpiński, one finalist failed held-out replication and was discarded (the fourth probe-corpus mirage our two-phase protocol has caught), and 25 random draws per domain is a small search — a deliberate first pass, not a finished hunt. The notable one is vibration: bearing data that sat in our “near-incompressible for everyone” negatives still yielded measurable, validated structure to a designed recipe. And one scoping fact, measured: designed atlases do not move the 64-byte-frame headline numbers above (−0.25% on held-out audio frames, within noise) — their wins live in the 256 B–1 KB engine regime. Tiny frames still belong to the sample-delta family and Sierpiński, and the default roster is unchanged, so every figure on this page measured before them still stands.
If your payloads are big or repetitive, use zstd — sincerely. If they're small and textured — sensor bursts, audio frames, vibration traces — that's the regime MRC was built to own.
The fit profile: payloads of 64 bytes to 1 kilobyte with texture but no exact repeats. That describes most of the physical-world sensor economy.
Construction, blasting and rail monitors stream 1,000-samples/s tri-axial velocity traces over cellular. MRC's frame mode cuts those payloads by 40–47% — and since radio transmit dominates the power budget, trace-heavy sites can claw back 15–25% of battery life.
A LoRaWAN frame caps at 51–222 bytes — exactly the regime where stream codecs fail and MRC peaks. More signal per frame means fewer fragments, fewer retransmits, longer airtime budgets, lower duty-cycle pressure.
Mining, offshore, agriculture — anywhere backhaul is billed per megabyte and a service visit costs more than the sensor. A codec that needs no dictionary updates is a codec that never needs a fleet-wide firmware push to stay compatible.
Acoustic event frames, voice snippets, ECG/PPG-class bursts: textured waveforms that never exactly repeat. On 64-byte audio frames MRC delivers −28% where raw deflate manages −5% — losslessly, so downstream DSP sees the true signal.
Same fit test everywhere: small payloads, real texture, no exact repeats.
Vibration signatures from pumps, fans and bearings on factory floors — accelerometer bursts are textured and never repeat. The exact MRC regime.
Power-quality waveforms and fault-recorder snapshots from substations and smart meters, where backhaul per node is a permanent line item.
Crash-event recorders, CAN-bus bursts, suspension and tire sensors — fleets pay per megabyte across millions of vehicles.
Telemetry on thin radio budgets: IMU bursts, motor vibration, control-loop traces — every gram of link budget counts.
Hull stress, engine vibration and wave-buoy data over Iridium-class satellite links billed by the kilobyte.
ECG, PPG and glucose-monitor bursts from battery-starved devices — lossless matters when the data feeds a diagnosis.
Axle-box and trackside vibration monitors along thousands of kilometres with no fiber — every byte rides a SIM.
Downlink windows measured in minutes per orbit; payload telemetry that must arrive bit-exact on the first pass.
Soil, weather and water-level probes on LoRa frames where 51 bytes is the entire budget per transmission.
Blast monitoring and seismic arrays in places where a service visit needs a helicopter. Our −47% number is this signal.
Unattended ground sensors pushing acoustic and seismic signatures over covert, low-bandwidth, battery-only links.
HVAC vibration, elevator health, structural sway — thousands of measurement points per building on shared backhaul.
No dictionary, no versioning problem. Mathematics doesn't get updates. Devices flashed years apart decode each other's data, forever.
Lossless by construction. Every block carries a correction path. 400/400 randomized fuzz round-trips, zero failures.
Frame-mode overhead. One transport header byte covers both encoding families and the atlas ID — built for radios where every byte is rent.
Twelve pages: the MRC4 container spec, the atlas roster and how it was validated on held-out data, the full benchmark methodology, and the honest negatives — including the experiments that lost. Figures are generated from the live codec.
Operating a fleet that pays per byte? Send a sample of real telemetry under NDA and we'll return exact byte counts from the production codec — your data, our encoder, no obligations. If the numbers hold, we talk integration: embedded C SDK, support, per-device licensing.
Start a pilot conversationw.stienstra@stateoftheart.nl