eva-image-tool
Parser, builder, and CLI for the Fritz!Box EVA kernel image format — the
TI record container used by AVM's EVA bootloader to hold LZMA-compressed
Linux kernels. Pure Python standard library, zero runtime dependencies.
See docs/format-spec.md for the full format
specification and docs/format-quickref.md for a
one-page summary.
Install
pipx install eva-kernel-image # recommended for CLI-only use
pip install eva-kernel-image # for library use
No external binaries required — everything runs on Python's stdlib lzma,
zlib, struct, and argparse.
CLI quickstart
# Inspect an image
eva-image info kernel.image
# Verify checksums (exit 0 if valid, non-zero otherwise)
eva-image verify kernel.image
# Extract kernels + metadata.json to a directory
eva-image extract kernel.image -o extracted/
# Rebuild an image, optionally replacing kernel(s)
eva-image repack kernel.image -o new.image
eva-image repack kernel.image -o new.image \
--kernel1 patched-primary.bin
# Pack an image from raw kernel binaries
eva-image pack -o new.image \
--kernel1 kernel1.bin --load1 0x80500000 --entry1 0x80C8B500 \
--kernel2 kernel2.bin --load2 0x8DFFFFFC --entry2 0x8E691770
Library quickstart
from pathlib import Path
from eva_kernel_image import parse_image, build_image
image = parse_image(Path("kernel.image").read_bytes())
print(f"dual-kernel: {image.dual_header is not None}")
print(f"primary entry: 0x{image.primary.entry_addr:08X}")
print(f"primary uncompressed size: {image.primary.lzma.uncompressed_len}")
# Validate checksums (parser itself does not auto-validate)
for issue in image.validate():
print(f"warning: {issue}")
# Decompress a kernel
Path("kernel1.bin").write_bytes(image.primary.decompress())
# Replace a kernel and rebuild
image.primary.replace_kernel(Path("patched.bin").read_bytes())
Path("patched.kernel.image").write_bytes(build_image(image))
Supported models
Verified against 18 reference images spanning six product lines:
| Model | Firmware versions tested |
|---|---|
| 7530 | 08.02 |
| 7560 | 07.00, 07.12, 07.27, 07.29, 07.30 |
| 7580 | 06.92, 07.27, 07.30 |
| 7583 | 08.03 |
| 7590 | 08.03, 08.10 |
| 7590 AX | 08.02 |
Both single-kernel (FEED1281) and dual-kernel (FEED9112) variants are
handled, including the legacy inner-signature quirk found on older
Fritz!Box 7560 and 7580 builds.
License
see LICENSE.
Metadata
Release files for eva-kernel-image 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| eva_kernel_image-0.2.0.tar.gz | 44.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| eva_kernel_image-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 79.4 kB
Release files / eva_kernel_image-0.2.0.tar.gz
| Download URL | eva_kernel_image-0.2.0.tar.gz |
|---|---|
| Size | 44.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2dca3198c7bcc7129ba1d056bfe15693e0cce5695f677fbdf915300790522827
|
|
BLAKE2b-256 checksum How to use checksums |
810677df9a2b97a887702abe03f910a42d21cca4fea3248ec27ffc375a907b8b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 11, 2026.
Transparency logRelease files / eva_kernel_image-0.2.0-py3-none-any.whl
| Download URL | eva_kernel_image-0.2.0-py3-none-any.whl |
|---|---|
| Size | 34.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a2484b28affdc17f7da70d79697d8e457c04470a847f4193a5d819aacc4897a4
|
|
BLAKE2b-256 checksum How to use checksums |
a6aa39ed8125ca0b2f2ca9ebbeca63c062a0985adf15b48b4af25c8730edf6b3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 11, 2026.
Transparency log