Vuer

Bvh

The Bvh component loads and displays BVH (Biovision Hierarchy) motion capture data. BVH is a widely-used format for skeletal animation, encoding a skeleton hierarchy along with per-frame joint rotations.

Why BVH?

  • Motion capture standard: Industry-standard format for motion capture data
  • Human-readable: Text-based format that's easy to inspect and edit
  • Animation-focused: Designed specifically for skeletal animation
  • Widely supported: Compatible with Blender, Maya, MotionBuilder, and more

Basic Usage

A minimal example that loads and plays a BVH motion capture file:

from vuer import Vuer
from vuer.schemas import DefaultScene, Bvh, OrbitControls

app = Vuer()

@app.spawn(start=True)
async def main(sess):
    sess.set @ DefaultScene(
        Bvh(
            src="https://example.com/walk.bvh",
            playAnimation=True,
            key="bvh-model",
        ),
        bgChildren=[
            OrbitControls(key="OrbitControls")
        ],
    )

    await sess.forever()

Key Parameters

Parameter Type Default Description
key str - Unique identifier for the model
src str - URL or path to the BVH file
text str - BVH file content as string (alternative to src)
playAnimation bool True Auto-play the motion capture animation
animationIndex int 0 Index of the animation clip to play
animationSpeed float 1.0 Speed multiplier for animation playback
boneRadius float - Radius of bone cylinder visualizations
jointColor str - Color of joint-sphere markers
label bool False Show joint name labels

Loading from Text

You can also load BVH data directly from a string:

bvh_content = """HIERARCHY
ROOT Hips
{
    OFFSET 0 0 0
    CHANNELS 6 Xposition Yposition Zposition Zrotation Xrotation Yrotation
    ...
}
MOTION
Frames: 100
Frame Time: 0.0333333
...
"""

Bvh(text=bvh_content, playAnimation=True, key="bvh-from-text")

Customizing Visualization

Control how the skeleton is rendered:

Bvh(
    src="https://example.com/dance.bvh",
    playAnimation=True,
    animationSpeed=0.5,      # Half speed playback
    boneRadius=0.02,         # Thicker bones
    jointColor="#ff6600",    # Orange joints
    label=True,              # Show joint names
    key="styled-bvh",
)