Generate videos from OpenCap biomechanics data files with both command-line interface and Python API.
This tool uses the deployed OpenCap Visualizer to create videos from biomechanics data files (.json, .osim/.mot pairs) using headless browser automation.
- Dual Interface: Both command-line tool and Python API
- No Local Setup Required: Uses deployed web application by default
- Multiple Data Formats: Supports JSON files and OpenSim .osim/.mot pairs
- Subject Comparison: Generate videos with multiple subjects
- Anatomical Camera Views: Use biomechanics-friendly camera angles
- Customizable: Colors, zoom, centering, loops, and dimensions
- Automatic 3D Geometry: Loads realistic human models from cloud storage
pip install opencap-visualizerNote: After installation, you'll need to install browser dependencies:
playwright install chromium# Single subject
opencap-visualizer data.json -o output.mp4
# Multiple subjects comparison
opencap-visualizer subject1.json subject2.json -o comparison.mp4
# With custom settings
opencap-visualizer data.json --camera anterior --colors red --loops 2 -o front_view.mp4
# OpenSim files
opencap-visualizer model.osim motion.mot -o simulation.mp4# Multiple subjects with different colors
opencap-visualizer s1.json s2.json s3.json --colors red green blue --camera sagittal -o side_comparison.mp4
# High-resolution with custom zoom
opencap-visualizer data.json --width 3840 --height 2160 --zoom 0.8 --camera superior -o 4k_top_view.mp4
# Interactive mode for manual exploration
opencap-visualizer data.json --interactive --camera anterioranterior/frontal/coronal- Front-facing viewposterior- Back viewsagittal/lateral- Side profile viewsuperior- Top-down viewinferior- Bottom-up view
top,bottom,front,back,left,rightisometric,default- Corner views:
frontTopRight,backBottomLeft, etc.
positional arguments:
FILE Data files (.json, or .osim/.mot pairs)
optional arguments:
-o, --output PATH Output video file (default: animation_video.mp4)
--camera VIEW Camera position (default: isometric)
--colors COLOR... Subject colors (hex or names: red, blue, #ff0000)
--loops N Animation loops to record (default: 1)
--width PX Video width (default: 1920)
--height PX Video height (default: 1080)
--zoom FACTOR Zoom factor (>1.0 = zoom out, default: 1.5)
--no-center Disable auto-centering on subjects
--timeout SEC Loading timeout in seconds (default: 120)
--interactive Open browser for manual exploration
--vue-app-path PATH Custom Vue app index.html path
--dev-server-url URL Custom Vue development server URL
-v, --verbose Enable verbose output
import opencap_visualizer as ocv
# Simple usage
success = ocv.create_video("data.json", "output.mp4")
if success:
print("Video generated successfully!")
# Multiple subjects with settings
success = ocv.create_video(
["subject1.json", "subject2.json"],
"comparison.mp4",
camera="anterior",
colors=["red", "blue"],
loops=2,
verbose=True
)import opencap_visualizer as ocv
# Create visualizer instance
visualizer = ocv.OpenCapVisualizer(verbose=True)
# Generate video synchronously
success = visualizer.generate_video_sync(
input_files=["subject1.json", "subject2.json"],
output_path="comparison.mp4",
camera="sagittal",
colors=["#ff0000", "#00ff00"],
width=1920,
height=1080,
zoom=1.2
)
print(f"Success: {success}")import asyncio
import opencap_visualizer as ocv
async def generate_videos():
# Using convenience function
success = await ocv.create_video_async(
"data.json",
"output.mp4",
camera="anterior",
colors=["blue"]
)
# Using class
visualizer = ocv.OpenCapVisualizer(verbose=True)
success = await visualizer.generate_video(
["s1.json", "s2.json", "s3.json"],
"triple_comparison.mp4",
camera="posterior",
colors=["red", "green", "blue"],
center_subjects=True,
zoom=1.5
)
return success
# Run async function
success = asyncio.run(generate_videos())class OpenCapVisualizer:
def __init__(self, verbose: bool = False)
async def generate_video(
self,
input_files: Union[str, List[str]],
output_path: str = "animation_video.mp4",
*,
vue_app_path: Optional[str] = None,
dev_server_url: Optional[str] = None,
width: int = 1920,
height: int = 1080,
timeout_seconds: int = 120,
loops: int = 1,
camera: Optional[str] = None,
center_subjects: bool = True,
zoom: float = 1.5,
colors: Optional[List[str]] = None,
interactive: bool = False
) -> bool
def generate_video_sync(self, ...) -> bool # Synchronous wrapperasync def create_video_async(input_files, output_path, **kwargs) -> bool
def create_video(input_files, output_path, **kwargs) -> boolThe tool accepts biomechanics JSON files with the following structure:
{
"Data": {
"ModelScalingVars": "path/to/model.osim",
"Results": "path/to/motion.mot",
"FrameTimesOG": [0.0, 0.033, 0.066, ...]
}
}Alternatively, provide .osim (model) and .mot (motion) file pairs:
opencap-visualizer model.osim motion.mot -o output.mp4The tool automatically detects the best available option:
-
Deployed Version (Recommended):
https://opencap-visualizer.onrender.com/- No local setup required
- Always up-to-date
- Requires internet connection
-
Local Development Server:
http://localhost:3000- Start with
npm run servein the Vue.js project - Faster for development/testing
- Start with
-
Built Files: Local
dist/index.html- Build with
npm run buildin the Vue.js project - Works offline
- Build with
# Use local development server
opencap-visualizer data.json --dev-server-url http://localhost:3000
# Use custom built files
opencap-visualizer data.json --vue-app-path /path/to/dist/index.html# Set default development server
export OPENCAP_DEV_SERVER=http://localhost:3000If you get browser-related errors:
playwright install chromium- Check internet connection for deployed version
- For local development:
npm run servein Vue project - For built files:
npm run buildin Vue project
- Ensure JSON files contain valid biomechanics data structure
- For OpenSim files, provide both
.osimand.motfiles - Check file paths are correct and accessible
- Increase timeout:
--timeout 300 - Enable verbose mode:
--verboseorverbose=True - Try interactive mode:
--interactive
MIT License - see LICENSE file for details.
Contributions welcome! Please see the source repository for guidelines.
For issues and questions:
- GitHub Issues: https://github.com/utahmobl/opencap-visualizer/issues
- Web App: https://opencap-visualizer.onrender.com/