CustomNBT-Startup
CLI tool to encode custom boot animations for BMW NBT head units.
Converts MP4 videos into the .pdds format used by the NBT system for startup animations.
Requirements
- Python 3.11+
- uv (recommended)
- LZO compression library (system dependency)
Installing LZO
# macOS
brew install lzo
# Debian/Ubuntu
sudo apt install liblzo2-dev
On macOS you need to export the paths so python-lzo can find the headers:
export C_INCLUDE_PATH=$(brew --prefix lzo)/include
export LIBRARY_PATH=$(brew --prefix lzo)/lib
You can add these to your shell profile to make them permanent.
Installation
# Install from PyPI
pip install custom-nbt-startup
# Or with uv
uv pip install custom-nbt-startup
# Or install from source
uv pip install .
Quick Start
# One-liner with uvx (no install needed)
uvx --from custom-nbt-startup nbt-startup encode video.mp4
Usage
# Basic usage — outputs <video_name>.pdds
nbt-startup encode video.mp4
# Custom output path
nbt-startup encode video.mp4 -o boot_animation.pdds
# Custom frame count (default: 150)
nbt-startup encode video.mp4 -n 200
# Custom resolution
nbt-startup encode video.mp4 -W 800 -H 480
Running without installing
# Via uvx (uses the published PyPI package)
uvx --from custom-nbt-startup nbt-startup encode video.mp4
# Via uv run (from a cloned repo)
uv run nbt-startup encode video.mp4
Options
| Option | Description |
|---|---|
-o, --output |
Output .pdds file path (default: <input_stem>.pdds) |
-n, --frames |
Number of frames to extract (default: 150) |
-W, --width |
Frame width in pixels (default: 1280, must be multiple of 4) |
-H, --height |
Frame height in pixels (default: 480, must be multiple of 4) |
--version |
Show version |
--help |
Show help |
License
Metadata
Release files for custom-nbt-startup 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| custom_nbt_startup-0.1.1.tar.gz | 10.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| custom_nbt_startup-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 22.6 kB
Release files / custom_nbt_startup-0.1.1.tar.gz
| Download URL | custom_nbt_startup-0.1.1.tar.gz |
|---|---|
| Size | 10.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e6b4f088684e9b91816cc87448b7cd094aab248c72552752e4289dab6e1f773a
|
|
BLAKE2b-256 checksum How to use checksums |
97b9920895c6ea6422d6702c2436d1e1901270271cb7edfba57cbfe8e21264ca
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
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 Apr 1, 2026.
Transparency logRelease files / custom_nbt_startup-0.1.1-py3-none-any.whl
| Download URL | custom_nbt_startup-0.1.1-py3-none-any.whl |
|---|---|
| Size | 11.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3ac436be00c0efddfbc55bfd2655a3ae008b22b3767e42c59a1552c4ab6636fd
|
|
BLAKE2b-256 checksum How to use checksums |
c874ede3f839b5e9e76de2c1b5f8d07a0eaca19120cccf554009bb327b28018d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
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 Apr 1, 2026.
Transparency log