Skip to main content

decryptune

Fast, native M4A (fMP4/CENC) decryptor + MP4 sanitizer + iTunes tagger in one lightweight, self-contained call — a Rust core with a sync/async Python API that replaces the usual chain of external tools (no subprocesses, no ffmpeg, no dependencies) and runs fully GIL-free, so async callers can fan out without blocking the event loop.

Install

pip install decryptune

Standalone (no install) — keep decryptune.py next to the extension binary and pass its path: DecrypTune("./libdecryptune.so")

From source (needs Rust 1.85+ and Python 3.12+): pip install maturin && maturin build --release — this is also the macOS path (it builds and runs the same; prebuilt wheels and zips ship for Linux and Windows).

Usage

from decryptune import DecrypTune, TuneMeta

# bundled native module (wheel) — or DecrypTune("./libdecryptune.so")
sp = DecrypTune()

sp.proc(
    input="track.m4a",           # bytes / bytearray / memoryview / path
    out="out.m4a",               # destination path; None → the processed bytes are returned
    key="<32 hex>",              # None → fix-only pass (headers sanitized, payload untouched)
    kid="<32 hex>",              # verified against the file's tenc; ignored without key
    meta=TuneMeta(
        title="Song",
        artists=["A"],
        isrc="...",
        cover="cover.jpg",       # bytes or path — JPEG/PNG; oversized JPEGs shrink to ≤1000px
        # date=..., album=..., genre=..., lyrics=..., composer=...,
        # track=..., track_total=..., disc=..., disc_total=...
    ),
    strict=True                  # raise (code 8, per-fragment chi² evidence) when a fragment
)                                # decrypts to statistical noise — a wrong/fake key

# async twin — same options, same result:
out_bytes = await sp.aproc(...)

Rules that hold for both proc and aproc:

  • Every parameter is keyword-only.
  • out is a path → the file is written atomically (tmp + rename) and None is returned; out is None → the processed bytes are returned.
  • key=None → fix-only pass: headers sanitized, audio payload untouched.
  • A meta wipes the existing tag block and rebuilds it solely from the given fields — None / 0 / empty values are skipped; without meta the original metadata passes through untouched.
  • Any problem raises DecrypTuneError with a stable numeric code (1–13) and a message authored in the native core: 1 invalid key · 2 invalid kid · 3 input not found · 4 not an MP4 · 6 write failed · 7 KID mismatch · 8 corrupt audio detected · 9 bad input type · 10 bad out type · 11 tags need a fragmented file · 12 bad cover · 13 cover file not found.

Benchmark

Real 3.0MB fragmented track, Intel i7-11800H (8C/16T), WSL2, v1.1.1:

scenario result
decrypt + fix, strict (bytes in/out) 3.7 ms median — ~0.8 GB/s
fix-only pass (no key) 1.7 ms
full tags + cover resize (877KB JPEG) 101 ms
32 calls: sequential → asyncio.gather 74 ms → 29 ms (×2.5)
event-loop max lag under 8 concurrent heavy calls < 4 ms

License

MIT — see LICENSE.

Metadata

Release files for decryptune 1.1.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for decryptune 1.1.2
File Size Uploaded
decryptune-1.1.2.tar.gz 362.8 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for decryptune 1.1.2
File
decryptune-1.1.2-cp312-abi3-win_arm64.whl CPython 3.12 abi3 Windows ARM64 Details
decryptune-1.1.2-cp312-abi3-win_amd64.whl CPython 3.12 abi3 Windows x86-64 Details
decryptune-1.1.2-cp312-abi3-manylinux_2_28_x86_64.whl CPython 3.12 abi3 Linux glibc 2.28+ x86-64 Details
decryptune-1.1.2-cp312-abi3-manylinux_2_28_aarch64.whl CPython 3.12 abi3 Linux glibc 2.28+ ARM64 Details

Total release size: 2.2 MB

Release files / decryptune-1.1.2.tar.gz

Download URL decryptune-1.1.2.tar.gz
Size 362.8 kB
Tags Source
SHA-256 checksum
How to use checksums
b8e9ec9020f78c279a2627b05bc6d29184eeca406a7a5e9c2356c9afa478cad8
BLAKE2b-256 checksum
How to use checksums
089d6ab639fb7a5050b397ad725cc5b5713c130c39ac102d70f4cb81332bd857
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 Oct 7, 2026.

Transparency log

Release files / decryptune-1.1.2-cp312-abi3-win_arm64.whl

Download URL decryptune-1.1.2-cp312-abi3-win_arm64.whl
Size 402.6 kB
Tags CPython 3.12 Windows ARM64 abi3
SHA-256 checksum
How to use checksums
77ee8a368357efe3fe0cf2ce8a0e5fcf0fcd082f1eb479b22b29e963745ea4cb
BLAKE2b-256 checksum
How to use checksums
9249a9d15fbf9ec38f8a9648503048fe99edb0d1194ae6c398ace7e4390f0b63
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 Oct 7, 2026.

Transparency log

Release files / decryptune-1.1.2-cp312-abi3-win_amd64.whl

Download URL decryptune-1.1.2-cp312-abi3-win_amd64.whl
Size 428.7 kB
Tags CPython 3.12 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
651c4ae159851b6868891386bff19f31858cbbf21212d10c32109275096c6309
BLAKE2b-256 checksum
How to use checksums
b37977b37d43ab37da9d8501003d4870d35bc95449e4b1a64c0595081300a406
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 Oct 7, 2026.

Transparency log

Release files / decryptune-1.1.2-cp312-abi3-manylinux_2_28_x86_64.whl

Download URL decryptune-1.1.2-cp312-abi3-manylinux_2_28_x86_64.whl
Size 495.4 kB
Tags CPython 3.12 Linux glibc 2.28+ x86-64 abi3
SHA-256 checksum
How to use checksums
16f8c69e37dbc8ae6ec28b70b9dce99d9cb8fde0afd59bae907fd4038824fb02
BLAKE2b-256 checksum
How to use checksums
8d39c1ff53788c0321d3e35f10df1beded598249d3a325793174025cef2fff48
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 Oct 7, 2026.

Transparency log

Release files / decryptune-1.1.2-cp312-abi3-manylinux_2_28_aarch64.whl

Download URL decryptune-1.1.2-cp312-abi3-manylinux_2_28_aarch64.whl
Size 469.1 kB
Tags CPython 3.12 Linux glibc 2.28+ ARM64 abi3
SHA-256 checksum
How to use checksums
c179fccfa684cf99a8d03357d49041d5c80a7708493d31eb08d4ed071fb1c535
BLAKE2b-256 checksum
How to use checksums
f1185f96e742c65b345242a5d1947e59f717062953f9e0951ebcd18ce2999898
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 Oct 7, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.1.2 This release

5 release files

1.1.1

5 release files

1.1.0

5 release files

1.0.0

5 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page