Skip to main content

BVH reader/writer and kinematics utilities

Project description

pybvh

PyPI version Python License: MIT

A lightweight Python library for reading, writing, and manipulating BVH motion capture files. Built for researchers and developers working with skeletal animation and motion data.

Features

  • Read & write BVH files with full hierarchy and motion data preservation
  • Rotation conversions between Euler angles, rotation matrices, quaternions, 6D (Zhou et al.), and axis-angle — all vectorized with NumPy
  • Forward kinematics to compute 3D joint positions from angles
  • Skeleton operations: retargeting, scaling, joint extraction, Euler order changes
  • Frame operations: slicing, concatenation, resampling to different frame rates
  • Batch loading of entire directories with optional parallel I/O
  • NumPy export in any rotation representation — ready for ML pipelines
  • Pandas ready via an export option ready to become a Dataset
  • 3D visualization with Matplotlib (static frames and animated videos)

Installation

pip install pybvh

Quick Start

import pybvh

# Load a BVH file
bvh = pybvh.read_bvh_file("walk.bvh")
print(bvh)  # 24 joints, 120 frames at 0.008333Hz

# Access motion data as NumPy arrays
bvh.root_pos          # (F, 3) root translation per frame
bvh.joint_angles      # (F, J, 3) Euler angles in degrees
bvh.joint_names       # ['Hips', 'Spine', ...] (excludes end sites)

# Get 3D joint positions via forward kinematics
coords = bvh.get_spatial_coord()  # (F, N, 3)

# Convert to other rotation representations
root_pos, quats, joints = bvh.get_frames_as_quaternion()  # (F,3), (F,J,4), joints
root_pos, rot6d, joints = bvh.get_frames_as_6d()          # (F,3), (F,J,6), joints

# Write back to file
bvh.to_bvh_file("output.bvh")

Batch Loading for ML

Load an entire dataset directory and convert to NumPy arrays in one call:

from pybvh import read_bvh_directory, batch_to_numpy

# Load all BVH files from a directory
clips = read_bvh_directory("dataset/", parallel=True)

# Convert to padded NumPy array — ready for training
data = batch_to_numpy(clips, representation="6d", pad=True)
# shape: (batch, max_frames, features)

Supported representations: "euler", "quaternion", "6d", "axisangle", "rotmat".

Skeleton Operations

# Change Euler rotation order for all joints
bvh_xyz = bvh.change_all_euler_orders("XYZ")

# Scale the skeleton
bvh_scaled = bvh.scale_skeleton(0.01)  # meters to centimeters

# Retarget motion to a different skeleton
bvh_retarget = bvh.change_skeleton(reference_bvh)

# Extract a subset of joints
bvh_upper = bvh.extract_joints(["Hips", "Spine", "Neck", "Head"])

# Slice and concatenate frames
clip = bvh.slice_frames(10, 50)
combined = bvh.concat(other_bvh)

# Resample to a different frame rate
bvh_30fps = bvh.resample(30)

Rotation Utilities

All functions are batch-vectorized and work on arbitrary batch dimensions:

from pybvh import rotations

# Convert between any pair of representations
R = rotations.euler_to_rotmat(angles, order="ZYX", degrees=True)
q = rotations.rotmat_to_quat(R)
aa = rotations.quat_to_euler(q, order="ZYX", degrees=True)

# Quaternion SLERP interpolation
q_mid = rotations.quat_slerp(q1, q2, t=0.5)

Visualization

from pybvh import plot

# Plot a single frame
plot.plot_frame(bvh, frame=0)

# Create an animation video
plot.plot_animation(bvh, output_path="walk.mp4")

Pandas Integration

import pandas as pd

# BVH to DataFrame
df = pd.DataFrame(bvh.get_df_constructor(mode="euler"))

# DataFrame back to BVH
from pybvh import df_to_bvh
bvh_from_df = df_to_bvh(bvh.hierarchy_info_as_dict(), df)

Tutorials

The repository includes Jupyter notebooks with detailed walkthroughs:

  1. Introduction to pybvh — reading, writing, and basic operations
  2. Spatial coordinates — forward kinematics and 3D positions
  3. Rotations — rotation representations and conversions

Requirements

  • Python >= 3.9
  • NumPy >= 1.21
  • Matplotlib >= 3.7

Pandas is optional (pip install "pybvh[pandas]") - only used in the tutorials, not part of pybvh library.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pybvh-0.3.1.tar.gz (40.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pybvh-0.3.1-py3-none-any.whl (42.1 kB view details)

Uploaded Python 3

File details

Details for the file pybvh-0.3.1.tar.gz.

File metadata

  • Download URL: pybvh-0.3.1.tar.gz
  • Upload date:
  • Size: 40.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pybvh-0.3.1.tar.gz
Algorithm Hash digest
SHA256 2d1167405b93f5bcb5198f39bc9c3211752087c5afbb112de2cbb9b524d7b334
MD5 f10af05459641f7f1d67f946ac72de73
BLAKE2b-256 ffa2080264d08df7b0ba6f0fa7a92e022752dcb53a9088c517bbd1dee0e9cded

See more details on using hashes here.

Provenance

The following attestation bundles were made for pybvh-0.3.1.tar.gz:

Publisher: publish.yml on VictorS-67/pybvh

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pybvh-0.3.1-py3-none-any.whl.

File metadata

  • Download URL: pybvh-0.3.1-py3-none-any.whl
  • Upload date:
  • Size: 42.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pybvh-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 e4749b03a9b97424faa0bb967edee536435f144e18919a431120e9a0837a803f
MD5 2f91e79ec055fc58151df73a14de161b
BLAKE2b-256 9a5037fa3ddc659aa15efd07770f42b26e098c1ee91c66e5f05faf66503ef6d6

See more details on using hashes here.

Provenance

The following attestation bundles were made for pybvh-0.3.1-py3-none-any.whl:

Publisher: publish.yml on VictorS-67/pybvh

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page