BVH Viewer

To view a BVH file, drop the .bvh here. The viewer reads the skeleton and every frame of motion in your browser, plays it as a 3D stick figure with the left side in blue and the right side in red, and shows the frame count, frame rate, length and joint list. Pause, scrub frame by frame, slow it down, follow the walker with the camera, or save the motion as an animated GLB.

Free. No sign-in. Your mocap never leaves your device.

Loading the BVH viewer...

How to play a BVH file

  1. 1

    Open the .bvh

    Drop the file or tap the box to choose one. No BVH at hand? Try the sample walk. The skeleton appears and starts playing straight away.

  2. 2

    Watch and scrub

    Use Play and Pause, drag the frame slider, or step one frame at a time to check a foot contact or a pop. Speed runs from 0.25x to 2x.

  3. 3

    Check the facts

    The side panel shows frames, frame rate, length, joint and channel counts, the skeleton height and how far the root travels, plus the full joint tree.

  4. 4

    Fix the view

    Turn on Follow for walks and runs that leave the frame. If the figure lies on its back, the file was recorded Z up: press Treat as Z up.

  5. 5

    Save what you need

    Take a PNG screenshot of the current frame, or download a GLB with a rigged stick figure and the whole animation for Blender, Unity or a web viewer.

Private by design. The BVH is read by JavaScript in your browser and played on your device. It is not uploaded anywhere, so paid mocap packs and unreleased capture sessions stay private.

What is inside a BVH file

BVHBiovision Hierarchy
A plain-text motion capture format from Biovision in the 1990s. It is still the common export of mocap suits, libraries and video-to-motion tools because almost every 3D app can read it.
HIERARCHYThe skeleton
A tree of joints from the ROOT (usually Hips) down to End Sites. Each joint has an OFFSET from its parent, which sets the bone lengths, and a CHANNELS line that says which values each frame holds.
CHANNELSRotation order
The root normally has 6 channels (X, Y and Z position, then three rotations) and every other joint 3 rotations. The order, such as Zrotation Xrotation Yrotation, decides how the angles combine, and the viewer follows it per joint.
MOTIONFrames
A Frames count, a Frame Time in seconds (0.0333333 is 30 fps, 0.0083333 is 120 fps) and then one line of numbers per frame, one number per channel.
Not in BVHMesh, skin, fingers
BVH holds only bones and motion: no character mesh, no skin weights and often no finger joints. That is why the viewer draws a stick figure; to see it on a character, retarget it in Blender or a game engine.

Units, scale and the up axis

BVH has no unit field. Most files are in centimetres (a person is about 170 units tall), some libraries use inches (about 67 units for a person) or their own scale, and a few tools write metres. The viewer shows the skeleton height in file units and guesses the unit from it; the guess sets the GLB scale so the figure comes out at a human size in metres, and you can change it before you download.

Nearly all BVH files are Y up, but some exporters write Z up and the figure then lies on the floor. The viewer detects the common case from the bone directions and you can switch it with one button. The GLB is always written Y up, the glTF standard.

Checking a clip before you use it

Scrub to the first and last frames to see whether the clip loops: a walk cycle should end in the pose it starts with. Step one frame at a time around foot contacts to spot sliding or a sudden pop, which usually means a lost marker in the capture. Root travel tells you whether the motion moves through space or stays in place, which matters for game locomotion.

The frame rate decides how smooth the motion is and how big the file gets. Mocap is often captured at 120 fps and kept that way in libraries; games and animation usually use 30 or 60. If your target app expects 30 fps, plan to resample on import rather than playing a 120 fps clip four times too slowly.

Using the GLB download

The GLB holds a skinned stick figure bound to the real joint tree and the full animation as one action. Blender imports it as an armature with its action, ready to retarget onto your character with a retargeting add-on or constraints. Unity and Godot import it as an animated rig, and three.js or model-viewer play it in a web page.

Joint names are kept, except that characters glTF cannot use in names, such as the colon in mixamorig:Hips, become underscores. If your retargeting setup matches bones by name, map mixamorig_Hips to mixamorig:Hips once and save the mapping.

What this BVH viewer does

Plays in 3D

The whole skeleton as a stick figure, left side blue and right side red, so mirrored or swapped limbs are easy to spot.

Frame control

Play, pause, loop, frame slider, single-frame steps and speeds from 0.25x to 2x.

Clip facts

Frames, fps, length, joints, end sites, channels, height and root travel at a glance.

Follow camera

Keeps a walking or running figure in view while you orbit and zoom.

Rigged GLB out

A skinned stick figure with the animation, scaled to metres and Y up.

Private by design

Runs in your browser. Files are never uploaded, no account needed.

Limits, honestly

  • BVH has no mesh, so the motion is shown on a stick figure, not on a character.
  • Retargeting onto another skeleton is not done here; use Blender or your game engine for that.
  • The unit guess is based on skeleton height; very small or very large rigs may need the unit set by hand.
  • Files with broken hierarchy brackets or fewer numbers per frame than channels cannot be read.
  • Very long clips (hundreds of thousands of frames) can use a lot of memory, especially on phones.

Frequently Asked Questions

Drop the .bvh file on this page. It plays in your browser straight away, with no install and no account, and you can pause, scrub and change the speed.
No. The file is read and played by your own browser. Nothing is sent to a server.
The file was written with Z as the up axis. Press Treat as Z up and the figure stands up. The viewer turns common Z-up files upright by itself.
The panel shows it, worked out from the Frame Time line: 0.0333333 seconds is 30 fps, 0.0166667 is 60 fps and 0.0083333 is 120 fps.
Yes. Pick the file units and press Download GLB. You get a rigged stick figure with the full animation, in metres and Y up, for Blender, Unity, Godot or three.js.
Yes. Any standard BVH works, including exports from Rokoko, Perception Neuron, Blender, the CMU library conversions and video-to-motion apps. Joint names with a colon, like mixamorig:Hips, are kept with an underscore.
Not here: BVH holds only bones. Import the GLB or the original BVH into Blender and retarget it to your character, or use our auto-rig tool to rig a character first.

More free 3D viewers and converters