Skip to content

Repository files navigation

Rendiff Probe

Professional Video Analysis API & CLI - Powered by FFprobe

A production-ready REST API and CLI tool for comprehensive video/audio file analysis, built on top of FFprobe with 19 professional QC categories and 26 content analyzers covering 121 industry-standard parameters.

Go VersionQC ParametersContent AnalyzersDockerLicense


Acknowledgements

Rendiff Probe uses FFprobe from the FFmpeg project as its core media analysis engine. FFprobe is a powerful multimedia stream analyzer that provides detailed information about media files.

  • FFprobe is part of the FFmpeg Project
  • FFprobe is licensed under the LGPL/GPL license
  • This project wraps FFprobe functionality with enhanced QC analysis, REST API, and CLI interfaces

We are grateful to the FFmpeg community for developing and maintaining such a robust media analysis tool.


Features

Core Capabilities

  • Comprehensive FFprobe Analysis: Full format, stream, frame, and packet analysis via FFprobe
  • 121 Industry-Standard QC Parameters: Complete broadcast and streaming quality control
  • 26 Parallel Content Analyzers: Real-time analysis using FFmpeg filters (signalstats, idet, astats, etc.)
  • REST API (rendiff-probe): HTTP interface for video analysis
  • CLI Tool (rendiffprobe-cli): Command-line tool for local analysis
  • GraphQL API: Flexible query interface for advanced integrations
  • URL & HLS Analysis: Direct URL probing and HLS stream analysis
  • Batch Processing: Process multiple files/URLs in parallel
  • WebSocket Progress: Real-time progress updates for long operations
  • LLM-Powered Insights: AI-generated professional analysis reports
  • Docker Ready: Production-ready containerized deployment
  • SQLite Embedded: Zero-configuration database
  • Valkey/Redis Caching: High-performance result caching

Quality Control Analysis

Professional broadcast and streaming QC analysis covering:

Header/Format Analysis: Container validation, codec profiles, resolution, frame rate, bit depth, endianness Video Quality: Baseband analysis (YMIN/YMAX/YAVG), gamut checking, blockiness, blurriness, noise, line errors Video Content: Black frames, freeze frames, letterboxing, color bars, safe areas, field dominance, temporal complexity Audio Analysis: EBU R128 loudness, clipping, silence, phase correlation, channel mapping, frequency analysis Broadcast Compliance: HDR (HDR10/Dolby Vision/HLG), MXF validation, IMF compliance, transport stream analysis, timecode continuity Safety & Accessibility: PSE flash detection, AFD analysis, stream disposition, data integrity

Quick Start

Prerequisites

  • Docker 24.0+ with Docker Compose (for API)
  • Go 1.24+ (for CLI)
  • FFprobe installed (for CLI)
  • 2GB RAM minimum (4GB recommended)

Installation

# Clone the repository
git clone https://github.com/rendiffdev/rendiff-probe.git
cd rendiff-probe
# Quick start API (development mode)
make quick
# Or build CLI for local use
go build -o rendiffprobe-cli ./cmd/rendiffprobe-cli

Using the CLI (rendiffprobe-cli)

# Analyze a video file with full QC report
rendiffprobe-cli analyze video.mp4 --format report
# Get JSON output for automation
rendiffprobe-cli analyze video.mp4 --format json --output result.json
# Quick file info
rendiffprobe-cli info video.mp4
# List all QC categories
rendiffprobe-cli categories

Using the API (rendiff-probe)

Your API is now running at http://localhost:8080

# Check health
curl http://localhost:8080/health
# Expected response:
{
"status": "healthy",
"service": "rendiff-probe",
"version": "2.0.0",
"powered_by": "FFprobe (FFmpeg)",
"features": {
"file_probe": true,
"url_probe": true,
"hls_analysis": true,
"batch_processing": true,
"websocket": true,
"graphql": true,
"llm_insights": true
},
"qc_tools": ["AFD Analysis", "Dead Pixel Detection", ...],
"ffprobe_validated": true
}

API Reference

Health Check

GET /health

Returns service health status and available QC tools.

Response:

{
"status": "healthy",
"service": "rendiff-probe",
"powered_by": "FFprobe (FFmpeg)",
"qc_tools": [
"AFD Analysis",
"Dead Pixel Detection",
"PSE Flash Analysis",
"HDR Analysis",
"Audio Wrapping Analysis",
"Endianness Detection",
"Codec Analysis",
"Container Validation",
"Resolution Analysis",
"Frame Rate Analysis",
"Bitdepth Analysis",
"Timecode Analysis",
"MXF Analysis",
"IMF Compliance",
"Transport Stream Analysis",
"Content Analysis",
"Enhanced Analysis",
"Stream Disposition Analysis",
"Data Integrity Analysis"
],
"ffprobe_validated": true
}

Analyze File

POST /api/v1/probe/file
Content-Type: multipart/form-data

Upload a video/audio file for comprehensive analysis using FFprobe.

Request:

curl -X POST \
-F "file=@video.mp4" \
http://localhost:8080/api/v1/probe/file

Response:

{
"analysis_id": "550e8400-e29b-41d4-a716-446655440000",
"filename": "video.mp4",
"size": 1048576,
"result": {
"format": {
"filename": "/tmp/upload_1234567890_video.mp4",
"nb_streams": 2,
"format_name": "mov,mp4,m4a,3gp,3g2,mj2",
"duration": "60.500000",
"bit_rate": "5000000"
},
"streams": [
{
"index": 0,
"codec_type": "video",
"codec_name": "h264",
"width": 1920,
"height": 1080,
"r_frame_rate": "30/1"
},
{
"index": 1,
"codec_type": "audio",
"codec_name": "aac",
"sample_rate": "48000",
"channels": 2
}
],
"enhanced_analysis": {
"timecode_analysis": {...},
"hdr_analysis": {...},
"codec_analysis": {...},
"data_integrity": {...}
}
}
}

Analyze URL

POST /api/v1/probe/url
Content-Type: application/json

Analyze a video file from a URL without uploading.

Request:

curl -X POST \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com/video.mp4", "include_llm": true}' \
http://localhost:8080/api/v1/probe/url

HLS Stream Analysis

POST /api/v1/probe/hls
Content-Type: application/json

Analyze HLS streams for quality, compliance, and performance.

Request:

curl -X POST \
-H "Content-Type: application/json" \
-d '{ "manifest_url": "https://example.com/stream.m3u8", "analyze_segments": true, "analyze_quality": true, "validate_compliance": true, "max_segments": 10 }' \
http://localhost:8080/api/v1/probe/hls

Batch Processing

POST /api/v1/batch/analyze # Start batch job
GET /api/v1/batch/status/:id # Get job status

Process multiple files or URLs in parallel.

GraphQL API

POST /api/v1/graphql
GET /api/v1/graphql # GraphiQL interface

Query and mutate via GraphQL for flexible data access.

CLI Tool (rendiffprobe-cli)

The CLI provides the same powerful analysis capabilities without requiring a running API server.

Commands

CommandDescription
analyzeFull QC analysis with all 26 content analyzers
categoriesList available QC analysis categories
infoQuick file information (basic metadata)
versionShow version information

Output Formats

  • report: Human-readable comprehensive QC report
  • json: Machine-readable JSON output
  • text: Concise text summary

Examples

# Full comprehensive report
rendiffprobe-cli analyze video.mp4 --format report
# JSON for automation/scripting
rendiffprobe-cli analyze video.mp4 --format json
# Save output to file
rendiffprobe-cli analyze video.mp4 --format json --output result.json
# Analyze multiple files
rendiffprobe-cli analyze video1.mp4 video2.mp4 --format text
# Quick metadata check
rendiffprobe-cli info video.mp4
# Set timeout for large files
rendiffprobe-cli analyze large_video.mp4 --timeout 300

Deployment Modes

Minimal (Development/Testing)

make minimal
  • Core services only: API + Valkey + Ollama
  • Memory: ~2-3GB
  • Best for: Development, testing

Quick Start

make quick
  • Ready in 2 minutes
  • No authentication required
  • Best for: Quick testing, demos

Production

make prod
  • Full monitoring stack
  • Authentication enabled
  • Automated backups
  • Best for: Production deployments

Architecture

View Full Architecture Documentation - Detailed system design, component diagrams, and implementation patterns.

┌──────────────────────────────────────────────────────────────────────────────┐
│ CLIENT LAYER │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ REST API │ │ GraphQL │ │ CLI Tool │ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
└───────────┼────────────────────┼────────────────────┼─────────────────────────┘
│ │ │
┌───────────▼────────────────────▼────────────────────▼─────────────────────────┐
│ MIDDLEWARE LAYER │
│ [Recovery] → [RequestID] → [Logging] → [RateLimit] → [Auth] → [Validation] │
└───────────────────────────────────┬───────────────────────────────────────────┘
│
┌───────────────────────────────────▼───────────────────────────────────────────┐
│ SERVICE LAYER │
│ ┌────────────────┐ ┌────────────────┐ ┌────────────────┐ │
│ │ AnalysisService│ │ ReportService │ │ SecretRotation │ │
│ └───────┬────────┘ └────────────────┘ └────────────────┘ │
└───────────┼───────────────────────────────────────────────────────────────────┘
│
┌───────────▼───────────────────────────────────────────────────────────────────┐
│ ANALYSIS ENGINE │
│ ┌─────────────────────────────────────────────────────────────────────────┐ │
│ │ Content Analyzer (26 Parallel Goroutines) │ │
│ │ ┌────────────┬────────────┬────────────┬────────────┬────────────┐ │ │
│ │ │ Video │ Audio │ HDR │ Broadcast │ Integrity │ │ │
│ │ │ Quality │ Analysis │ Analysis │ Compliance │ Analysis │ │ │
│ │ └─────┬──────┴─────┬──────┴─────┬──────┴─────┬──────┴─────┬──────┘ │ │
│ │ │ │ │ │ │ │ │
│ │ ┌─────▼────────────▼────────────▼────────────▼────────────▼──────┐ │ │
│ │ │ FFmpeg Filters (signalstats, idet, ebur128, etc) │ │ │
│ │ └────────────────────────────────────────────────────────────────┘ │ │
│ └─────────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ┌─────────────────────────────────▼───────────────────────────────────────┐ │
│ │ FFprobe / FFmpeg Binaries │ │
│ └─────────────────────────────────────────────────────────────────────────┘ │
└───────────────────────────────────────────────────────────────────────────────┘
│
┌───────────────────────────────────▼───────────────────────────────────────────┐
│ DATA LAYER │
│ ┌────────────────┐ ┌────────────────┐ ┌────────────────┐ │
│ │ SQLite (Store) │ │ Valkey (Cache) │ │ File Storage │ │
│ └────────────────┘ └────────────────┘ └────────────────┘ │
└───────────────────────────────────────────────────────────────────────────────┘

Key Components

LayerComponentsPurpose
ClientREST API, GraphQL, CLIMultiple interface options
MiddlewareAuth, RateLimit, LoggingRequest processing pipeline
ServiceAnalysis, Reports, SecretsBusiness logic encapsulation
Analysis Engine26 concurrent analyzersFFmpeg-based quality analysis
DataSQLite, Valkey, FileStorePersistence and caching

Quality Control Features

26 Content Analyzers (121 Parameters)

CategoryAnalyzersFFmpeg FiltersStandards
Video QualityBaseband, Quality Score, Blockiness, Blurriness, Noise, Line Errorssignalstats, entropyEBU R103
Video ContentBlack Frames, Freeze Frames, Letterbox, Color Bars, Safe Areas, Temporal Complexity, Field Dominance, Differential Framesblackdetect, freezedetect, cropdetect, idetITU-R BT.814
Audio QualityLoudness (EBU R128), Clipping, Silence, Phase, Channel Mapping, Frequency Analysisebur128, astats, volumedetectEBU R128, ITU-R BS.1770
HDR/ColorHDR10, Dolby Vision, HLG, Color Space, Gamutsignalstats BRNGRec.2020, SMPTE ST 2086
BroadcastTimecode Continuity, MXF Validation, IMF Compliance, Transport Stream-SMPTE 12M, ST 377, ST 2067
SafetyPSE Flash Detection, AFD Analysis, Test Tone Detection-ITU-R BT.1702, Ofcom
FormatContainer, Codec, Resolution, Frame Rate, Bit Depth, Endianness--
IntegrityData Integrity, Stream Disposition, Dropout Detection-CRC32, MD5

19 Top-Level QC Categories

View Complete QC Parameters Reference - Detailed documentation of all 19 categories with 121 parameters

#CategoryKey ParametersStandardsUse Cases
1AFD AnalysisAFD codes, aspect ratio validationITU-R BT.1868Broadcast distribution
2Dead Pixel DetectionStuck/dead/hot pixels, defect mapsComputer VisionCamera QC, acquisition
3PSE Flash AnalysisFlash rate, luminance changes, risk levelITC/Ofcom, ITU-R BT.1702Broadcast safety
4HDR AnalysisMaxCLL, MaxFALL, color gamutHDR10, Dolby Vision, HLGStreaming platforms
5Audio WrappingChannel mapping, embedding formatBWF, RF64, AES3Post-production
6Endianness DetectionByte order, platform compatibility-Cross-platform workflows
7Codec AnalysisProfile, level, bitrate efficiency-Format validation
8Container ValidationStructure, metadata, muxing patternMP4, MKV, MOVWorkflow compatibility
9Resolution AnalysisPAR, DAR, display optimization-Quality validation
10Frame Rate AnalysisTemporal accuracy, VFR detectionBroadcast standardsTemporal analysis
11Bitdepth AnalysisColor precision, dynamic range8/10/12-bitHDR compatibility
12Timecode AnalysisSMPTE TC, drop frame, continuitySMPTE 12MBroadcast, post
13MXF AnalysisOP patterns, essence containersSMPTE ST 377Professional broadcast
14IMF ComplianceCPL, OPL, application profilesSMPTE ST 2067Netflix delivery
15Transport StreamPID mapping, PSI/SI, continuityMPEG-TSIPTV, streaming
16Content Analysis26 parallel analyzers (see below)MultipleReal-time QC
17Enhanced AnalysisQuality scoring, risk assessment-Advanced metrics
18Stream DispositionSDH, audio descriptions, languagesSection 508, WCAGAccessibility
19Data IntegrityCRC32, MD5, corruption detection-File validation

Configuration

Environment Variables

VariableDefaultDescription
PORT8080API port
LOG_LEVELinfoLog level (debug, info, warn, error)
FFPROBE_PATHffprobePath to FFprobe binary
DB_PATH./data/rendiff-probe.dbSQLite database path
VALKEY_URLvalkey:6379Valkey/Redis connection

Security Configuration

VariableDescription
JWT_SECRETJWT signing secret (required in production)
API_KEYAPI key for authentication
RATE_LIMIT_RPMRate limit per minute

Management Commands

# Service Management
make start # Start all services
make stop # Stop all services
make restart # Restart services
make status # Show status
make logs # View logs
make health # Check health# Development
make test-unit # Run unit tests
make test-coverage # Run tests with coverage
make lint # Run linter# Build
go build -o rendiff-probe ./cmd/rendiff-probe
go build -o rendiffprobe-cli ./cmd/rendiffprobe-cli
# Maintenance
make update # Update services
make backup # Create backup
make clean # Clean everything

Testing

# Run all tests
make test-unit
# Run with coverage
make test-coverage
# Run specific package
go test -v ./internal/ffmpeg/...
# Run with race detection
make test-race

Documentation

Core Documentation

DocumentDescriptionAudience
User ManualComplete guide for using the API and CLIEnd Users
Developer GuideContributing to and extending the codebaseDevelopers
ArchitectureSystem design and component diagramsArchitects

Reference Documentation

DocumentDescription
QC Analysis ListAll 19 QC categories with 121 parameters
API ReferenceOpenAPI/Swagger documentation
ChangelogVersion history and release notes

Quick Links

Contributing

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Make your changes
  4. Run tests (make test-unit)
  5. Commit your changes
  6. Push to the branch
  7. Open a Pull Request

License

This project is licensed under the MIT License - see the LICENSE file for details.

Third-Party Licenses

Support


Rendiff Probe - Professional Video Analysis, Powered by FFprobe

Built for the video processing community

About

**Professional video analysis API based on FFmpeg/FFprobe with comprehensive Quality Control (QC) features** Complete media analysis solution with 19 major professional QC categories and AI-powered insights.

Topics

Resources

Contributing

Stars

16 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages