opencap-visualizer


Nameopencap-visualizer JSON
Version 1.1.0 PyPI version JSON
download
home_pagehttps://github.com/utahmobl/opencap-visualizer
SummaryTool for creating videos from OpenCap biomechanics data with both CLI and Python API
upload_time2025-07-30 15:37:35
maintainerNone
docs_urlNone
authorSelim Gilon
requires_python>=3.7
licenseMIT
keywords biomechanics motion-capture visualization video opencap opensim
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # OpenCap Visualizer

Generate videos from OpenCap biomechanics data files with both command-line interface and Python API.

This tool uses the deployed [OpenCap Visualizer](https://opencap-visualizer.onrender.com/) to create videos from biomechanics data files (.json, .osim/.mot pairs) using headless browser automation.

## Features

- **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

## Installation

```bash
pip install opencap-visualizer
```

**Note**: After installation, you'll need to install browser dependencies:
```bash
playwright install chromium
```

## Command Line Usage

### Basic Examples

```bash
# 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
```

### Advanced Examples

```bash
# 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 anterior
```

### Camera Views

#### Anatomical Views (Recommended)
- `anterior` / `frontal` / `coronal` - Front-facing view
- `posterior` - Back view  
- `sagittal` / `lateral` - Side profile view
- `superior` - Top-down view
- `inferior` - Bottom-up view

#### Technical Views
- `top`, `bottom`, `front`, `back`, `left`, `right`
- `isometric`, `default`
- Corner views: `frontTopRight`, `backBottomLeft`, etc.

### Command Line Options

```
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
```

## Python API Usage

### Basic Examples

```python
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
)
```

### Class-based Usage

```python
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}")
```

### Async Usage

```python
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())
```

### API Reference

#### `OpenCapVisualizer` Class

```python
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 wrapper
```

#### Convenience Functions

```python
async def create_video_async(input_files, output_path, **kwargs) -> bool
def create_video(input_files, output_path, **kwargs) -> bool
```

## Data Formats

### JSON Files
The tool accepts biomechanics JSON files with the following structure:
```json
{
  "Data": {
    "ModelScalingVars": "path/to/model.osim",
    "Results": "path/to/motion.mot",
    "FrameTimesOG": [0.0, 0.033, 0.066, ...]
  }
}
```

### OpenSim Files  
Alternatively, provide `.osim` (model) and `.mot` (motion) file pairs:
```bash
opencap-visualizer model.osim motion.mot -o output.mp4
```

## Dependencies

The tool automatically detects the best available option:

1. **Deployed Version** (Recommended): `https://opencap-visualizer.onrender.com/`
   - No local setup required
   - Always up-to-date
   - Requires internet connection

2. **Local Development Server**: `http://localhost:3000`
   - Start with `npm run serve` in the Vue.js project
   - Faster for development/testing

3. **Built Files**: Local `dist/index.html`
   - Build with `npm run build` in the Vue.js project
   - Works offline

## Configuration

### Custom Servers
```bash
# 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
```

### Environment Variables
```bash
# Set default development server
export OPENCAP_DEV_SERVER=http://localhost:3000
```

## Troubleshooting

### Browser Installation
If you get browser-related errors:
```bash
playwright install chromium
```

### Connection Issues
- Check internet connection for deployed version
- For local development: `npm run serve` in Vue project
- For built files: `npm run build` in Vue project

### File Format Issues
- Ensure JSON files contain valid biomechanics data structure
- For OpenSim files, provide both `.osim` and `.mot` files
- Check file paths are correct and accessible

### Video Generation Issues
- Increase timeout: `--timeout 300`
- Enable verbose mode: `--verbose` or `verbose=True`
- Try interactive mode: `--interactive`

## License

MIT License - see LICENSE file for details.

## Contributing

Contributions welcome! Please see the source repository for guidelines.

## Support

For issues and questions:
- GitHub Issues: [https://github.com/utahmobl/opencap-visualizer/issues](https://github.com/utahmobl/opencap-visualizer/issues)
- Web App: [https://opencap-visualizer.onrender.com/](https://opencap-visualizer.onrender.com/) 

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/utahmobl/opencap-visualizer",
    "name": "opencap-visualizer",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.7",
    "maintainer_email": null,
    "keywords": "biomechanics, motion-capture, visualization, video, opencap, opensim",
    "author": "Selim Gilon",
    "author_email": "Selim Gilon <selim.gilon@utah.edu>",
    "download_url": "https://files.pythonhosted.org/packages/dc/5e/b56d77365055b147147b5424e88d6d1236a6c3ddc080924fad8c4a008b43/opencap_visualizer-1.1.0.tar.gz",
    "platform": "any",
    "description": "# OpenCap Visualizer\n\nGenerate videos from OpenCap biomechanics data files with both command-line interface and Python API.\n\nThis tool uses the deployed [OpenCap Visualizer](https://opencap-visualizer.onrender.com/) to create videos from biomechanics data files (.json, .osim/.mot pairs) using headless browser automation.\n\n## Features\n\n- **Dual Interface**: Both command-line tool and Python API\n- **No Local Setup Required**: Uses deployed web application by default\n- **Multiple Data Formats**: Supports JSON files and OpenSim .osim/.mot pairs\n- **Subject Comparison**: Generate videos with multiple subjects\n- **Anatomical Camera Views**: Use biomechanics-friendly camera angles\n- **Customizable**: Colors, zoom, centering, loops, and dimensions\n- **Automatic 3D Geometry**: Loads realistic human models from cloud storage\n\n## Installation\n\n```bash\npip install opencap-visualizer\n```\n\n**Note**: After installation, you'll need to install browser dependencies:\n```bash\nplaywright install chromium\n```\n\n## Command Line Usage\n\n### Basic Examples\n\n```bash\n# Single subject\nopencap-visualizer data.json -o output.mp4\n\n# Multiple subjects comparison\nopencap-visualizer subject1.json subject2.json -o comparison.mp4\n\n# With custom settings\nopencap-visualizer data.json --camera anterior --colors red --loops 2 -o front_view.mp4\n\n# OpenSim files\nopencap-visualizer model.osim motion.mot -o simulation.mp4\n```\n\n### Advanced Examples\n\n```bash\n# Multiple subjects with different colors\nopencap-visualizer s1.json s2.json s3.json --colors red green blue --camera sagittal -o side_comparison.mp4\n\n# High-resolution with custom zoom\nopencap-visualizer data.json --width 3840 --height 2160 --zoom 0.8 --camera superior -o 4k_top_view.mp4\n\n# Interactive mode for manual exploration\nopencap-visualizer data.json --interactive --camera anterior\n```\n\n### Camera Views\n\n#### Anatomical Views (Recommended)\n- `anterior` / `frontal` / `coronal` - Front-facing view\n- `posterior` - Back view  \n- `sagittal` / `lateral` - Side profile view\n- `superior` - Top-down view\n- `inferior` - Bottom-up view\n\n#### Technical Views\n- `top`, `bottom`, `front`, `back`, `left`, `right`\n- `isometric`, `default`\n- Corner views: `frontTopRight`, `backBottomLeft`, etc.\n\n### Command Line Options\n\n```\npositional arguments:\n  FILE                  Data files (.json, or .osim/.mot pairs)\n\noptional arguments:\n  -o, --output PATH     Output video file (default: animation_video.mp4)\n  --camera VIEW         Camera position (default: isometric)\n  --colors COLOR...     Subject colors (hex or names: red, blue, #ff0000)\n  --loops N             Animation loops to record (default: 1)\n  --width PX            Video width (default: 1920)\n  --height PX           Video height (default: 1080)\n  --zoom FACTOR         Zoom factor (>1.0 = zoom out, default: 1.5)\n  --no-center           Disable auto-centering on subjects\n  --timeout SEC         Loading timeout in seconds (default: 120)\n  --interactive         Open browser for manual exploration\n  --vue-app-path PATH   Custom Vue app index.html path\n  --dev-server-url URL  Custom Vue development server URL\n  -v, --verbose         Enable verbose output\n```\n\n## Python API Usage\n\n### Basic Examples\n\n```python\nimport opencap_visualizer as ocv\n\n# Simple usage\nsuccess = ocv.create_video(\"data.json\", \"output.mp4\")\nif success:\n    print(\"Video generated successfully!\")\n\n# Multiple subjects with settings\nsuccess = ocv.create_video(\n    [\"subject1.json\", \"subject2.json\"],\n    \"comparison.mp4\", \n    camera=\"anterior\",\n    colors=[\"red\", \"blue\"],\n    loops=2,\n    verbose=True\n)\n```\n\n### Class-based Usage\n\n```python\nimport opencap_visualizer as ocv\n\n# Create visualizer instance\nvisualizer = ocv.OpenCapVisualizer(verbose=True)\n\n# Generate video synchronously\nsuccess = visualizer.generate_video_sync(\n    input_files=[\"subject1.json\", \"subject2.json\"],\n    output_path=\"comparison.mp4\",\n    camera=\"sagittal\", \n    colors=[\"#ff0000\", \"#00ff00\"],\n    width=1920,\n    height=1080,\n    zoom=1.2\n)\n\nprint(f\"Success: {success}\")\n```\n\n### Async Usage\n\n```python\nimport asyncio\nimport opencap_visualizer as ocv\n\nasync def generate_videos():\n    # Using convenience function\n    success = await ocv.create_video_async(\n        \"data.json\", \n        \"output.mp4\",\n        camera=\"anterior\",\n        colors=[\"blue\"]\n    )\n    \n    # Using class\n    visualizer = ocv.OpenCapVisualizer(verbose=True)\n    success = await visualizer.generate_video(\n        [\"s1.json\", \"s2.json\", \"s3.json\"],\n        \"triple_comparison.mp4\",\n        camera=\"posterior\",\n        colors=[\"red\", \"green\", \"blue\"],\n        center_subjects=True,\n        zoom=1.5\n    )\n    \n    return success\n\n# Run async function\nsuccess = asyncio.run(generate_videos())\n```\n\n### API Reference\n\n#### `OpenCapVisualizer` Class\n\n```python\nclass OpenCapVisualizer:\n    def __init__(self, verbose: bool = False)\n    \n    async def generate_video(\n        self,\n        input_files: Union[str, List[str]],\n        output_path: str = \"animation_video.mp4\",\n        *,\n        vue_app_path: Optional[str] = None,\n        dev_server_url: Optional[str] = None,\n        width: int = 1920,\n        height: int = 1080,\n        timeout_seconds: int = 120,\n        loops: int = 1,\n        camera: Optional[str] = None,\n        center_subjects: bool = True,\n        zoom: float = 1.5,\n        colors: Optional[List[str]] = None,\n        interactive: bool = False\n    ) -> bool\n    \n    def generate_video_sync(self, ...) -> bool  # Synchronous wrapper\n```\n\n#### Convenience Functions\n\n```python\nasync def create_video_async(input_files, output_path, **kwargs) -> bool\ndef create_video(input_files, output_path, **kwargs) -> bool\n```\n\n## Data Formats\n\n### JSON Files\nThe tool accepts biomechanics JSON files with the following structure:\n```json\n{\n  \"Data\": {\n    \"ModelScalingVars\": \"path/to/model.osim\",\n    \"Results\": \"path/to/motion.mot\",\n    \"FrameTimesOG\": [0.0, 0.033, 0.066, ...]\n  }\n}\n```\n\n### OpenSim Files  \nAlternatively, provide `.osim` (model) and `.mot` (motion) file pairs:\n```bash\nopencap-visualizer model.osim motion.mot -o output.mp4\n```\n\n## Dependencies\n\nThe tool automatically detects the best available option:\n\n1. **Deployed Version** (Recommended): `https://opencap-visualizer.onrender.com/`\n   - No local setup required\n   - Always up-to-date\n   - Requires internet connection\n\n2. **Local Development Server**: `http://localhost:3000`\n   - Start with `npm run serve` in the Vue.js project\n   - Faster for development/testing\n\n3. **Built Files**: Local `dist/index.html`\n   - Build with `npm run build` in the Vue.js project\n   - Works offline\n\n## Configuration\n\n### Custom Servers\n```bash\n# Use local development server\nopencap-visualizer data.json --dev-server-url http://localhost:3000\n\n# Use custom built files\nopencap-visualizer data.json --vue-app-path /path/to/dist/index.html\n```\n\n### Environment Variables\n```bash\n# Set default development server\nexport OPENCAP_DEV_SERVER=http://localhost:3000\n```\n\n## Troubleshooting\n\n### Browser Installation\nIf you get browser-related errors:\n```bash\nplaywright install chromium\n```\n\n### Connection Issues\n- Check internet connection for deployed version\n- For local development: `npm run serve` in Vue project\n- For built files: `npm run build` in Vue project\n\n### File Format Issues\n- Ensure JSON files contain valid biomechanics data structure\n- For OpenSim files, provide both `.osim` and `.mot` files\n- Check file paths are correct and accessible\n\n### Video Generation Issues\n- Increase timeout: `--timeout 300`\n- Enable verbose mode: `--verbose` or `verbose=True`\n- Try interactive mode: `--interactive`\n\n## License\n\nMIT License - see LICENSE file for details.\n\n## Contributing\n\nContributions welcome! Please see the source repository for guidelines.\n\n## Support\n\nFor issues and questions:\n- GitHub Issues: [https://github.com/utahmobl/opencap-visualizer/issues](https://github.com/utahmobl/opencap-visualizer/issues)\n- Web App: [https://opencap-visualizer.onrender.com/](https://opencap-visualizer.onrender.com/) \n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Tool for creating videos from OpenCap biomechanics data with both CLI and Python API",
    "version": "1.1.0",
    "project_urls": {
        "Bug Reports": "https://github.com/utahmobl/opencap-visualizer/issues",
        "Homepage": "https://github.com/utahmobl/opencap-visualizer",
        "Source": "https://github.com/utahmobl/opencap-visualizer",
        "Web App": "https://opencap-visualizer.onrender.com/"
    },
    "split_keywords": [
        "biomechanics",
        " motion-capture",
        " visualization",
        " video",
        " opencap",
        " opensim"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "a6b81b17cd3f5154f4559f3e2a0a9fa7321611f74f92ddc33775ac29d7d927d5",
                "md5": "89383b2c4b3e58adc02d76659933fd01",
                "sha256": "71ba57f7cbe289dce17f860c52150b3449faab8fd5a4ea8fa409b485f9b65816"
            },
            "downloads": -1,
            "filename": "opencap_visualizer-1.1.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "89383b2c4b3e58adc02d76659933fd01",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.7",
            "size": 24096,
            "upload_time": "2025-07-30T15:37:34",
            "upload_time_iso_8601": "2025-07-30T15:37:34.662529Z",
            "url": "https://files.pythonhosted.org/packages/a6/b8/1b17cd3f5154f4559f3e2a0a9fa7321611f74f92ddc33775ac29d7d927d5/opencap_visualizer-1.1.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "dc5eb56d77365055b147147b5424e88d6d1236a6c3ddc080924fad8c4a008b43",
                "md5": "a66fcc78e47d4b419d7ee66d2e3a3b97",
                "sha256": "c8bbea523471c0a28c7fdbddec517711e6e795538c756b50b1a6d2d931584435"
            },
            "downloads": -1,
            "filename": "opencap_visualizer-1.1.0.tar.gz",
            "has_sig": false,
            "md5_digest": "a66fcc78e47d4b419d7ee66d2e3a3b97",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.7",
            "size": 32291,
            "upload_time": "2025-07-30T15:37:35",
            "upload_time_iso_8601": "2025-07-30T15:37:35.801250Z",
            "url": "https://files.pythonhosted.org/packages/dc/5e/b56d77365055b147147b5424e88d6d1236a6c3ddc080924fad8c4a008b43/opencap_visualizer-1.1.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-07-30 15:37:35",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "utahmobl",
    "github_project": "opencap-visualizer",
    "github_not_found": true,
    "lcname": "opencap-visualizer"
}
        
Elapsed time: 0.51422s