Video Viewer is a professional-grade video inspection tool designed for analyzing uncompressed YUV/Raw video data with precision. It supports over 75 pixel formats, including popular YUV (I420, NV12, P010) and RGB/Bayer configurations, enabling detailed examination of video content.
Key features include:
Advanced Pixel Format Support: Handles YUV, RGB, Bayer, and Grayscale formats for comprehensive video analysis.
Professional Analysis Tools: Histogram, waveform monitor, vectorscope, and PSNR/SSIM metrics for precise quality assessment.
Interactive Viewing & Navigation: Split view, zoom, pan, and pixel magnification tools for detailed frame inspection.
Grid Overlay & CTU Heatmap: Visualizes block boundaries and ISP sideband data for codec and image signal processing (ISP) analysis.
Ideal for engineers, researchers, and developers working on video codecs, ISP pipelines, or image processing tasks. It provides a robust platform for debugging, optimization, and quality control of video content.
Available for Windows, Linux, and macOS via pre-built binaries or winget (Windows): winget install babyworm.VideoViewer.
README
Video Viewer
Raw/YUV/RGB video viewer built with Rust + egui. Supports 75+ pixel formats for inspecting uncompressed video data.
Zoom: Mouse wheel zoom (anchored to cursor), +/- buttons, 1:1 and 2:1 presets
Pan: Middle-click drag to pan the image
Auto-fit: Automatically fit image when window resizes
Center image: Reset pan offset (key C)
Pixel Inspector
8x8 neighborhood grid: Hover over the image to see a grid of surrounding pixel values with cursor highlight and crosshair
Grid boundary visualization: When grid/sub-grid overlays are active, the neighborhood grid shows colored boundary lines matching the canvas overlay (green for grid, yellow for sub-grid)
Component values: Displays Y/U/V or R/G/B values and raw hex bytes at the cursor position
Magnifier: Toggleable 8x magnifier overlay following the cursor (key M)
Analysis Tools
Histogram: RGB and luma intensity distribution with interactive zoom and drag
Waveform: Luma waveform monitor showing pixel value distribution by column
Vectorscope: BT.709 Cb vs Cr scatter plot centered at origin with ±128 boundary box
Metrics: PSNR, SSIM, and frame difference between consecutive frames
Video Diff: Load a reference and current video side-by-side with signed luma diff,
MS-PSNR, MS-SSIM, and a dependency-free VMAF-NEG proxy heatmap; main grid size drives
per-region values when enabled; frame stepping and zoom/pan are synchronized across panes
Zoom controls: +/- buttons and scroll zoom on all analysis plots, with Reset View
Grid Overlay
Main grid: Directly selectable block boundary overlay (Off/128/64/32/16 pixels), cycled with G
Sub-grid: Secondary overlay (4/8/16 pixels) for finer block structure inspection
Pixel inspector integration: Grid/sub-grid boundaries are visualized in the 8x8 neighborhood display
Comparison & Export
A/B comparison: Three-pane reference/current/diff view for comparing two videos
Format conversion: Convert between formats with background progress tracking
Frame export: Save frames as PNG
Other
Bookmarks & scene detection: Mark frames and auto-detect scene changes
Test video download: Download standard test sequences (foreman, akiyo, bus, etc.) from the derf YUV collection
Keyboard shortcuts: Comprehensive shortcuts for all operations (see table below)
Dark/Light theme: Toggle with menu
Custom title bar: Integrated menu bar as window title bar
Installation
Pre-built binaries
Download the latest release for your platform from the Releases page:
Platform
File
Linux x86_64
video-viewer-vX.Y.Z-linux-x86_64.tar.gz
macOS Apple Silicon
video-viewer-vX.Y.Z-macos-aarch64.tar.gz
macOS Intel
video-viewer-vX.Y.Z-macos-x86_64.tar.gz
Windows x86_64
video-viewer-vX.Y.Z-windows-x86_64.zip
Extract and run — no installation required.
Windows (winget)
winget install babyworm.VideoViewer
Build from source
Prerequisites
Rust toolchain (1.75+):
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
All dependencies are compatible with the MIT license.
Development
cd rust
# Run all tests
cargo test
# Run CI-equivalent lint locally
cargo clippy -- -D warnings
# Run specific test
cargo test test_pixel_info_yuyv
# Build in debug mode (faster compile)
cargo build
# Check without building
cargo check