The BF16 model and every quant.In less space than the BF16 alone.
SeedPack packs a GGUF repository into one lossless archive. All of Qwen3-0.6B, 10.95 GB, fits in 781.7 MB.
Thirty files, 10.95 GB in total: the BF16 model (1.20 GB), 25 quants from 215 to 844 MB and four small files. In the SeedPack archive the BF16 model takes 780.62 MB and every quant 9 to 28 KB, 781.68 MB in all.
Real sizes, from seedpack list of the published archive. Each quant keeps 9 to 28 KB.
Quants aren’t stored. They’re grown back.
llama.cpp quantizers are deterministic. So SeedPack keeps the most precise weights once and recomputes every quant from them on the GPU.
Store the seed
The BF16 model goes in once, through an entropy coder built for BF16 weights: 65.2% of its size.
Grow the quants
Each quant is recomputed from the seed on the GPU by a bit-exact CUDA port of llama.cpp’s
ggml-quants.c, with the repository’s imatrix.Keep the difference
Where a recomputed block differs from the published file, the residual is coded with the quantizer’s own probabilities. Identical tensors are stored once.
Check every byte
Unpacking checks each file’s BLAKE3 hash and each chunk’s CRC32, and writes only the files that pass.
No BF16 in the repository? The most precise quant (UD-Q8_K_XL, Q8_0 and so on) becomes the seed. Qwen3.5-2B’s 21 quants, 28.13 GB, pack to 2.55 GB with the imatrix and 3.02 GB without it.
Twelve compressors. One repository.
All 30 files of unsloth/Qwen3-0.6B-GGUF, 10.95 GB, on one machine. Every archive was unpacked and checked.
30 files, 10.95 GB. Smaller is better.
- SeedPack7.14%7.14%17.7 s · 618 MB/s / 11.1 s · 984 MB/s
- lmz 1.3.041.47%41.47%38.3 s · 286 MB/s / 6.1 s · 1,786 MB/s
- HF Xet*46.68%46.68%
- zstd 1.5.7 -19 --long=3059.99%59.99%576.3 s · 19 MB/s / 17.7 s · 620 MB/s
- zstd 1.5.7 -3 --long=3060.36%60.36%15.3 s · 715 MB/s / 13.4 s · 816 MB/s
- 7-Zip 23.01 -mx993.26%93.26%833.3 s · 13 MB/s / 31.5 s · 347 MB/s
- xz 5.4.1 -693.36%93.36%465.9 s · 24 MB/s / 100.7 s · 109 MB/s
- bzip2 -993.87%93.87%181.0 s · 60 MB/s / 88.5 s · 124 MB/s
- brotli 1.2 -q794.25%94.25%74.9 s · 146 MB/s / 22.3 s · 492 MB/s
- ZipNN 0.5.4†94.34%94.34%10.7 s · 1,024 MB/s / 1.6 s · 6,858 MB/s
- gzip -994.51%94.51%70.7 s · 155 MB/s / 11.2 s · 977 MB/s
- lz4 1.9.4 -998.51%98.51%44.4 s · 246 MB/s / 9.1 s · 1,208 MB/s
Where SeedPack loses: speed. It recomputes the quants while unpacking, so ZipNN and lmz decode faster. And on a single file the gain is small.
Reproduce it: hf_bench.pyWhere it pays off
SeedPack wins when several quants of the same weights travel or sit together.
Publishing a model family
Put the whole repository on the Hub as one file. seedpack list reads only the index over the network; people extract the quants they want, checked against the original hashes.
A model library on one disk
Keep every quant of every model you test. unsloth/Qwen3.5-2B-GGUF takes 2.91 GB instead of 34.57 GB.
Offline machines
Carry one file to an air-gapped box, not a folder of tens of gigabytes. An archive packed on Windows unpacks bit-exactly on Linux, and back.
Mirrors and bandwidth
Storage and egress are billed by the byte. The same 30 files take 14 times fewer bytes.
Comparing quants
Test IQ1 against Q8 without keeping 26 files around. A mask extracts just the ones you’re testing.
Real commands, real output.
Captured from runs against the published archive. Only the files you ask for are written; the seed is decoded in memory.
$ seedpack list hf://neurosquad/Qwen3-0.6B-SEEDPACKhf://neurosquad/Qwen3-0.6B-SEEDPACK: varc 0.1, M29 model repo: M28 with the BF16 v2 base codec (R2), created 2026-10-23T21:11:56name size stored roleQwen3-0.6B-BF16.gguf 1.20 GB 780.62 MB baseQwen3-0.6B-IQ4_NL.gguf 381.57 MB 14.03 KB derivedQwen3-0.6B-Q4_K_M.gguf 396.71 MB 14.60 KB derivedQwen3-0.6B-Q8_0.gguf 639.45 MB 21.99 KB derivedQwen3-0.6B-UD-IQ1_S.gguf 214.64 MB 8.89 KB derivedQwen3-0.6B-UD-Q8_K_XL.gguf 844.29 MB 28.30 KB derived…imatrix_unsloth.dat 1.15 MB (bundle) file30 files, 10.95 GB -> archive 781.68 MB (7.14%)
seedpack 0.1.0 on an RTX 5070. “…” marks lines left out.
One pip install.
Pure Python on PyPI. No CUDA Toolkit and no compiler: NVRTC, nvJitLink and the CUDA headers come from pip.
pip install seedpackSEEDPACK_CACHE moves the cache.What it doesn’t do yet
SeedPack is young. Here is where it stands.
Today
- Packing and unpacking need an NVIDIA GPU.
- A single file gains a little: one Q8_0 goes to 90.1%, one Q4_K_M to 93.8%, one BF16 to 65.2%. The big win needs several quants of the same weights.
- Unpacking re-runs the quantizers: 11.1 s for the 10.95 GB set, where lmz takes 6.1 s.
- Tested on Qwen3 and Qwen3.5 repositories from Unsloth, on an RTX 5070 under Windows 10 and Ubuntu (WSL2).
- When a published imatrix differs from the one used to quantize, some blocks are predicted inexactly. The files stay exact; the archive grows (33 MB for all Qwen3.5-2B quants).
On the roadmap
- Unpacking without an NVIDIA GPU, on ggml’s own CPU quantizers
- Bit-exact unpacking checked across GPU generations, Turing to Blackwell
- More publishers and architectures: Llama, Gemma, Mistral, MoE models, 7B to 70B
- Faster IQ quantizers on the GPU, and unpacking while the archive downloads
- Fine-tunes stored as a difference from their base model
Questions
Is it really lossless?
Yes. Every file comes back byte for byte: the SHA-256 of each extracted file matches the original repository. Unpacking checks a BLAKE3 hash per file and a CRC32 per chunk, and a file that fails the check isn’t written.
Do I need a GPU to unpack?
Today, yes: an NVIDIA card, Turing or newer, with a CUDA 13 driver. The quants are recomputed on it. Unpacking on the CPU is on the roadmap.
I need just one quant. Is SeedPack worth it?
For a single download, no: x from the Hub downloads the whole archive once (781.7 MB for Qwen3-0.6B), while one Q4_K_M alone is 397 MB. SeedPack pays off when you want several quants, the whole set, or to keep them: after the first download every quant comes out of the local cache in seconds.
What if a repository has no BF16 file?
The most precise quant becomes the seed and the others are derived from it. Without an imatrix the quantizers run with unit weights or without weights, whichever leaves the smaller residual for each tensor. Qwen3.5-2B’s 21 quants pack to 9.06% with the imatrix and 10.74% without it.
Which models does it work with?
It takes any GGUF, and any other file. It compresses best when the quants were made by llama.cpp from the same weights, because that is what makes them predictable; quantizer variants of older llama.cpp versions are included. So far it is tested on Qwen3 and Qwen3.5 repositories from Unsloth.
Can llama.cpp, Ollama or LM Studio open the extracted files?
Yes. What comes out are the original GGUF files, so any GGUF runtime opens them as they are.
Is the .varc format stable?
SeedPack is at 0.1.0. An archive is a series of chunks with an index at the end, which gives random access and lets list read just the index over the network. A written specification and format versioning are on the roadmap.
How does SeedPack relate to NeuroSquad?
SeedPack is an open-source project by NeuroSquad, under Apache-2.0. It is a standalone command-line tool: you don’t need the NeuroSquad app or an account to use it.
Try it on a real archive.
Look inside the published Qwen3-0.6B archive: list reads only its index.
seedpack list hf://neurosquad/Qwen3-0.6B-SEEDPACK