Store RAR volumes + PAR2 → file
One store-mode RAR set with a posted PAR2 recovery set. No nesting.
Why it matters. The plain shape. A baseline every client is expected to finish.
Routinely posted.
Seven downloaders over ten archive shapes. Each is graded on whether the file arrives byte-correct with nobody touching it, and measured for the time, disk and processor it takes to get there, including any manual work left behind.
Each test asks whether a downloader can turn a post into the finished file on its own. The payloads are small and are served from memory over a local connection, with no provider and no network in the path, so nothing here is limited by download speed and the absolute times are far shorter than the same shapes would take in the real world.
What carries across, and what does not: whether a shape needs manual work at all is a property of the shape and the downloader, not of file size or line speed, so those results transfer directly. Disk and processor figures scale with payload size, and the ratios between downloaders should hold. Elapsed time transfers least: against a real provider the download would dominate, so treat the seconds below as a comparison between downloaders doing identical work, never as a prediction of how long a real job takes.
Grading reads the bytes on disk, never a downloader's own report of success. A file counts as delivered if its exact content appears anywhere in the output, so a downloader that renames what it extracts is not penalised for it.
Store RAR volumes + PAR2 → file
One store-mode RAR set with a posted PAR2 recovery set. No nesting.
Why it matters. The plain shape. A baseline every client is expected to finish.
Routinely posted.
Store RAR + PAR2 → store RAR → file
A store RAR wrapped inside another store RAR.
Why it matters. Wrapping hides the real filename until the outer layer is opened, so the post gives away less about what it contains.
Wrapping of this kind is used to keep a post from revealing what it holds.
Store RAR + PAR2 → compressed RAR → file
The same wrapper, but the inner archive is compressed rather than stored.
Why it matters. The inner layer has to be decompressed, not merely unwrapped.
Wrapping of this kind is used to keep a post from revealing what it holds.
Store RAR + PAR2 → 7z (LZMA2) → file
A 7z archive inside a RAR set.
Why it matters. The format changes between layers, so one chain needs both engines.
Built to isolate one capability. Not claimed to be a common posting shape.
Healthy RAR + PAR2 → damaged RAR + its own PAR2 → file
The posted set is intact. The archive inside it is corrupt, and its own PAR2 recovery set is packed alongside it.
Why it matters. A bad source or a partial re-post. The repair is needed on content that only exists once the outer archive has been opened.
Routinely posted.
Store RAR + PAR2 → store RAR ×4 → file
A five-level ladder with a separate file at every level.
Why it matters. Deep wrapping, with content at each level, so reaching only the deepest file is not enough.
Wrapping of this kind is used to keep a post from revealing what it holds.
Store RAR + PAR2 → 7z → store RAR → file
Three layers alternating between formats.
Why it matters. Format switching part-way down a chain.
Built to isolate one capability. Not claimed to be a common posting shape.
Damaged at all three layers, each with its own recovery data
Every layer is corrupt. The outer has PAR2, the middle has its own PAR2 packed alongside, the innermost carries a RAR recovery record.
Why it matters. The full recovery chain. Each repair has to succeed before the next layer can be opened at all, and the three layers need three different tools.
Built to isolate one capability. Not claimed to be a common posting shape.
PAR2 at 100% only; the archive volumes are never delivered
All four archive volumes are listed in the post and none arrives. Only a complete PAR2 set does.
Why it matters. A post whose articles are gone but whose recovery data survives. The archives have to be rebuilt from parity alone.
Routinely posted.
Three encrypted layers, each password carried by the layer above
Three password-protected layers. The first password is posted beside the volumes; each layer then contains the next one's password.
Why it matters. A password chain that has to be walked, one layer at a time. No client is given a password.
Constructed for this test. Our own sampling of current obfuscated posts found no password carried with the post, so this placement is not typical of the field.
Payloads are random data generated and archived locally, so the corpus contains no third-party material and can be rebuilt from its generator.
| Test | NZBGet 26.3 | NZBGet 27.0-testing | SABnzbd 5.1.2 | nzbfast 1.2.4 | rustnzb 1.4.5 | Weaver 0.7.8 | Weaver 0.8.3 |
|---|---|---|---|---|---|---|---|
| Test 1 | No help needed | No help needed | No help needed | No help needed | No help needed | No help needed | No help needed |
| Test 2 | 1 manual pass | 1 manual pass | No help needed | No help needed | No help needed | Never delivered | Never delivered |
| Test 3 | 1 manual pass | 1 manual pass | No help needed | No help needed | No help needed | Never delivered | Never delivered |
| Test 4 | 1 manual pass | 1 manual pass | No help needed | No help needed | No help needed | Never delivered | Never delivered |
| Test 5 | 1 manual pass | 1 manual pass | 1 manual pass | No help needed | 1 manual pass | Never delivered | Never delivered |
| Test 6 | 4 manual passes | 4 manual passes | 2 manual passes | No help needed | No help needed | Never delivered | Never delivered |
| Test 7 | 2 manual passes | 2 manual passes | No help needed | No help needed | No help needed | Never delivered | Never delivered |
| Test 8 | 3 manual passes | 3 manual passes | 3 manual passes | No help needed | Never delivered | Never delivered | Never delivered |
| Test 9 | No help needed | No help needed | Never delivered | No help needed | No help needed | Never delivered | No help needed |
| Test 10 | 3 manual passes | 3 manual passes | Never delivered | No help needed | Never delivered | 3 manual passes | 3 manual passes |
| Delivered with no help | 2 of 10 | 2 of 10 | 5 of 10 | 10 of 10 | 7 of 10 | 1 of 10 | 2 of 10 |
| Downloader | Delivered with no help | Needed manual passes | Never delivered |
|---|---|---|---|
| NZBGet 26.3 | 2 | 8 | 0 |
| NZBGet 27.0-testing | 2 | 8 | 0 |
| SABnzbd 5.1.2 | 5 | 3 | 2 |
| nzbfast 1.2.4 | 10 | 0 | 0 |
| rustnzb 1.4.5 | 7 | 1 | 2 |
| Weaver 0.7.8 | 1 | 1 | 8 |
| Weaver 0.8.3 | 2 | 1 | 7 |
Those two charts cover Test 1, Test 2, Test 3, Test 4, Test 5, Test 6, Test 7, the largest set of tests every downloader shown in them delivered, so the bars measure identical work. Not shown, because they could not deliver enough of that set to compare: Weaver 0.7.8 delivered 1 of these 7; Weaver 0.8.3 delivered 1 of these 7. A downloader that finishes little accumulates little time and little disk, so plotting it here would give it the shortest bars on the chart.
The first figure is the downloader's own run. The second, where present, is the manual repair and extraction needed afterwards to produce the file.
| Test | NZBGet 26.3 | NZBGet 27.0-testing | SABnzbd 5.1.2 | nzbfast 1.2.4 | rustnzb 1.4.5 | Weaver 0.7.8 | Weaver 0.8.3 |
|---|---|---|---|---|---|---|---|
| Test 1 | 4.2 | 4.2 | 4.1 | 0.7 | 4.1 | 2.1 | 2.1 |
| Test 2 | 4.2 +0.3 | 4.2 +0.3 | 6.1 | 0.7 | 4.1 | gave up at 6.1 | gave up at 2.1 |
| Test 3 | 4.2 +0.3 | 4.2 +0.3 | 6.1 | 0.7 | 4.1 | gave up at 6.1 | gave up at 2.1 |
| Test 4 | 4.2 +0.4 | 4.2 +0.4 | 6.1 | 2.2 | 4.1 | gave up at 6.1 | gave up at 4.1 |
| Test 5 | 6.3 +17.3 | 6.2 +17.5 | 6.1 +17.3 | 4.5 | 4.1 +17.3 | gave up at 6.1 | gave up at 2.1 |
| Test 6 | 4.2 +1.1 | 4.2 +1.1 | 2.0 +0.3 | 0.6 | 2.1 | gave up at 6.2 | gave up at 2.1 |
| Test 7 | 4.2 +0.4 | 4.2 +0.4 | 4.1 | 1.0 | 2.1 | gave up at 6.2 | gave up at 2.1 |
| Test 8 | 6.2 +12.2 | 6.2 +12.3 | 2.1 +12.3 | 2.2 | gave up at 2.1 | gave up at 99.1 | gave up at 240 |
| Test 9 | 6.2 | 6.2 | gave up at 2.1 | 2.9 | 47.5 | gave up at 2.1 | 4.1 |
| Test 10 | 2.2 +4.6 | 2.2 +4.6 | gave up at 301 | 0.6 | gave up at 2.1 | 609 +4.6 | 38.6 +4.6 |
| Test | NZBGet 26.3 | NZBGet 27.0-testing | SABnzbd 5.1.2 | nzbfast 1.2.4 | rustnzb 1.4.5 | Weaver 0.7.8 | Weaver 0.8.3 |
|---|---|---|---|---|---|---|---|
| Test 1 | 4.2 | 4.2 | 4.1 | 0.7 | 4.1 | 2.1 | 2.1 |
| Test 2 | 4.5 | 4.5 | 6.1 | 0.7 | 4.1 | not delivered | not delivered |
| Test 3 | 4.5 | 4.5 | 6.1 | 0.7 | 4.1 | not delivered | not delivered |
| Test 4 | 4.6 | 4.6 | 6.1 | 2.2 | 4.1 | not delivered | not delivered |
| Test 5 | 23.5 | 23.8 | 23.4 | 4.5 | 21.4 | not delivered | not delivered |
| Test 6 | 5.3 | 5.3 | 2.4 | 0.6 | 2.1 | not delivered | not delivered |
| Test 7 | 4.6 | 4.6 | 4.1 | 1.0 | 2.1 | not delivered | not delivered |
| Test 8 | 18.4 | 18.5 | 14.3 | 2.2 | not delivered | not delivered | not delivered |
| Test 9 | 6.2 | 6.2 | not delivered | 2.9 | 47.5 | not delivered | 4.1 |
| Test 10 | 6.8 | 6.8 | not delivered | 0.7 | not delivered | 614 | 43.3 |
Physical bytes written by the downloader and by any manual passes together. This is what the disk actually had to absorb, including intermediate files that were written and later removed.
| Test | NZBGet 26.3 | NZBGet 27.0-testing | SABnzbd 5.1.2 | nzbfast 1.2.4 | rustnzb 1.4.5 | Weaver 0.7.8 | Weaver 0.8.3 |
|---|---|---|---|---|---|---|---|
| Test 1 | 3.00 | 2.99 | 3.52 | 1.50 | 3.11 | 3.01 | 3.01 |
| Test 2 | 4.42 | 4.37 | 4.97 | 1.50 | 4.63 | 4.50† | 4.50† |
| Test 3 | 4.39 | 4.39 | 4.94 | 1.50 | 4.54 | 4.50† | 4.50† |
| Test 4 | 4.43 | 4.36 | 4.96 | 1.50 | 4.56 | 4.50† | 4.50† |
| Test 5 | 6.20 | 6.21 | 8.19 | 4.65 | 7.89 | 4.81† | 4.81† |
| Test 6 | 5.10 | 5.38 | 3.72 | 0.52 | 1.99 | 1.53† | 1.53† |
| Test 7 | 2.27 | 2.30 | 1.96 | 0.51 | 1.03 | 1.50† | 1.50† |
| Test 8 | 3.96 | 3.92 | 4.33 | 2.00 | 0.50† | 1.73† | 11.10† |
| Test 9 | 1.06 | 1.05 | 0.02† | 0.77 | 0.85 | 0.38† | 1.13 |
| Test 10 | 2.42 | 2.37 | 3.85† | 1.16 | 0.41† | 2.40 | 2.37 |
† the file was never produced, so this is what the attempt cost before it was abandoned.
The largest the working set ever became at one moment, which is the free space a job actually requires.
| Test | NZBGet 26.3 | NZBGet 27.0-testing | SABnzbd 5.1.2 | nzbfast 1.2.4 | rustnzb 1.4.5 | Weaver 0.7.8 | Weaver 0.8.3 |
|---|---|---|---|---|---|---|---|
| Test 1 | 3.02 | 3.02 | 3.01 | 1.50 | 3.20 | 3.00 | 3.00 |
| Test 2 | 3.01 | 3.01 | 3.01 | 1.50 | 4.73 | 4.50† | 4.50† |
| Test 3 | 3.01 | 3.01 | 3.00 | 1.50 | 4.65 | 4.50† | 4.50† |
| Test 4 | 3.01 | 3.01 | 3.00 | 1.50 | 4.73 | 3.00† | 3.00† |
| Test 5 | 4.66 | 4.66 | 4.66 | 3.10 | 5.04 | 3.30† | 3.30† |
| Test 6 | 2.56 | 2.56 | 1.52 | 0.51 | 2.98 | 1.52† | 1.02† |
| Test 7 | 1.50 | 1.50 | 1.00 | 0.50 | 1.97 | 1.00† | 1.00† |
| Test 8 | 2.09 | 2.09 | 2.09 | 1.28 | 0.87† | 0.98† | 3.36† |
| Test 9 | 1.12 | 1.05 | 0.03† | 0.75 | 1.10 | 0.38† | 1.09 |
| Test 10 | 1.51 | 1.51 | 1.14† | 1.10 | 0.41† | 1.51 | 1.51 |
| Test | NZBGet 26.3 | NZBGet 27.0-testing | SABnzbd 5.1.2 | nzbfast 1.2.4 | rustnzb 1.4.5 | Weaver 0.7.8 | Weaver 0.8.3 |
|---|---|---|---|---|---|---|---|
| Test 1 | 0.14 | 0.14 | 1.65 | 0.08 | 0.05 | 0.48 | 0.49 |
| Test 2 | 0.14 | 0.13 | 1.64 | 0.08 | 0.05 | 0.48† | 0.47† |
| Test 3 | 0.14 | 0.14 | 1.63 | 0.07 | 0.05 | 0.49† | 0.48† |
| Test 4 | 0.14 | 0.13 | 1.72 | 4.32 | 0.12 | 0.49† | 0.49† |
| Test 5 | 0.15 | 0.16 | 1.67 | 0.32 | 0.06 | 0.51† | 0.48† |
| Test 6 | 0.13 | 0.14 | 1.04 | 0.09 | 0.05 | 0.33† | 0.29† |
| Test 7 | 0.14 | 0.13 | 1.10 | 1.25 | 0.05 | 0.30† | 0.28† |
| Test 8 | 0.14 | 0.16 | 0.99 | 0.30 | 0.04† | 0.48† | 0.46† |
| Test 9 | 0.60 | 0.61 | 0.16† | 1.29 | 1.28 | 0.36† | 0.43 |
| Test 10 | 0.12 | 0.12 | 0.68† | 0.16 | 0.04† | 0.24 | 0.26 |
Processor seconds used by the downloader and by any manual passes together. Independent of how many cores the machine has.
| Test | NZBGet 26.3 | NZBGet 27.0-testing | SABnzbd 5.1.2 | nzbfast 1.2.4 | rustnzb 1.4.5 | Weaver 0.7.8 | Weaver 0.8.3 |
|---|---|---|---|---|---|---|---|
| Test 1 | 3.0 | 3.0 | 3.4 | 1.2 | 14.1 | 2.0 | 1.6 |
| Test 2 | 4.2 | 4.1 | 3.9 | 1.4 | 13.9 | 2.8† | 2.1† |
| Test 3 | 4.1 | 4.0 | 3.9 | 1.4 | 14.0 | 2.8† | 2.1† |
| Test 4 | 4.3 | 4.3 | 4.2 | 2.7 | 14.0 | 3.8† | 3.2† |
| Test 5 | 24.9 | 25.2 | 25.7 | 6.3 | 36.2 | 3.0† | 2.3† |
| Test 6 | 2.8 | 2.9 | 2.7 | 0.7 | 4.8 | 1.1† | 0.9† |
| Test 7 | 2.0 | 1.8 | 2.0 | 1.0 | 4.6 | 1.4† | 1.3† |
| Test 8 | 17.6 | 17.7 | 18.8 | 6.5 | 4.2† | 281† | 247† |
| Test 9 | 30.2 | 30.2 | 1.3† | 41.2 | 890 | 1.6† | 8.5 |
| Test 10 | 8.9 | 8.8 | 21.3† | 0.8 | 3.1† | 822 | 135 |
† the file was never produced. These are the cost of abandoning the job, not of completing it, and are not comparable with the rest of the column. The same mark is used in the disk tables above.