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.1

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.1
File Size Uploaded
decryptune-1.1.1.tar.gz 361.8 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for decryptune 1.1.1
File
decryptune-1.1.1-cp312-abi3-win_arm64.whl CPython 3.12 abi3 Windows ARM64 Details
decryptune-1.1.1-cp312-abi3-win_amd64.whl CPython 3.12 abi3 Windows x86-64 Details
decryptune-1.1.1-cp312-abi3-manylinux_2_28_x86_64.whl CPython 3.12 abi3 Linux glibc 2.28+ x86-64 Details
decryptune-1.1.1-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.1.tar.gz

Download URL decryptune-1.1.1.tar.gz
Size 361.8 kB
Tags Source
SHA-256 checksum
How to use checksums
d482b1fe54521ff8690ec8109b54da4d56c376b01396370d05f26d32c6e357de
BLAKE2b-256 checksum
How to use checksums
41d83ac0f805f07a5db2d7ac7d5c872b0517270fc28194c2a78313996ae016d3
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 Sep 28, 2026.

Transparency log

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

Download URL decryptune-1.1.1-cp312-abi3-win_arm64.whl
Size 410.5 kB
Tags CPython 3.12 Windows ARM64 abi3
SHA-256 checksum
How to use checksums
c7e1ebc56d7e030d71f180dd01553f62c8cbbc6a9d1deb0980a7864993aa4530
BLAKE2b-256 checksum
How to use checksums
2fb3f33aabe9db7133a48ad2daa5da51e61d19e32137be72556c5c19722f5aa4
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 Sep 28, 2026.

Transparency log

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

Download URL decryptune-1.1.1-cp312-abi3-win_amd64.whl
Size 437.5 kB
Tags CPython 3.12 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
fcf279b395165c0938d4b818e5717919f682ee7ccf43f119529e9dc324f505b6
BLAKE2b-256 checksum
How to use checksums
c97794250eb986c03885512a4c973d8555f0659b8e1ad6568e8aaa94a89d34da
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 Sep 28, 2026.

Transparency log

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

Download URL decryptune-1.1.1-cp312-abi3-manylinux_2_28_x86_64.whl
Size 503.2 kB
Tags CPython 3.12 Linux glibc 2.28+ x86-64 abi3
SHA-256 checksum
How to use checksums
8f0987151a5a138af472fdb2342545c9df7fa516d1de7c7c7cbc66725aa1c025
BLAKE2b-256 checksum
How to use checksums
e393434e7a20418dae3fb92501eab339b5fa818dc33c321a007eba8aae864b94
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 Sep 28, 2026.

Transparency log

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

Download URL decryptune-1.1.1-cp312-abi3-manylinux_2_28_aarch64.whl
Size 477.0 kB
Tags CPython 3.12 Linux glibc 2.28+ ARM64 abi3
SHA-256 checksum
How to use checksums
11966419f0bf53a08fd6a811f0bfd7a280ce60a956c34d84fdddd23d2af2be74
BLAKE2b-256 checksum
How to use checksums
994e2124e9b540d6ce92e04c38f8c9e317dbee3f849ffc2d95a52e1caaf02bdd
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 Sep 28, 2026.

Transparency log

Release history Release notifications | RSS feed

1.1.2

5 release files

This release

1.1.1 This release

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