A macOS application for inspecting video and audio files with metadata analysis, bitrate visualization, GOP structure analysis, color analysis, and keyframe detection.
framepeek-demo-2.mp4
- Comprehensive Metadata: Container format, codec information, resolution, frame rate, pixel aspect ratio, and display aspect ratio
- Color & HDR Information: Color space, chroma subsampling, bit depth, color primaries, transfer functions, and HDR format detection (Dolby Vision, HDR10, HLG, PQ)
- Codec Support: HEVC (H.265), AVC (H.264), AV1, VP9, and more with detailed configuration parsing
- Resolution Categories: Automatic classification (4K UHD, Full HD, etc.)
- Multi-Track Support: Detailed information for all audio tracks
- Track Properties: Codec, channel layout, sample rate, bitrate, and language information
- Codec Detection: AAC, AC-3, E-AC-3, MP3, Opus, and more
- Interactive Charts: Bitrate visualization with Swift Charts
- Flexible Sampling: Automatic, fixed interval, or per-frame sampling modes
- Visualization Modes: Aggregate bitrate by second, frame, or GOP (Group of Pictures)
- Progressive Updates: Real-time bitrate analysis with streaming updates
- Performance Optimized: Efficient frame extraction with configurable accuracy settings and LTTB downsampling
- Timeline Zoom: Interactive timeline for zooming into specific time ranges
- Frame-Type Timeline: I/P/B frame visualization with per-GOP details
- GOP Heatmap: Size and structure heatmap with viewport culling for large files
- On-Demand Frame Details: Per-frame size and type extraction with LRU caching
- Thumbnail Strip: Horizontal scrollable strip of keyframe thumbnails for quick navigation
- Sync Sample Detection: Identifies I-frames (intra-coded frames) without decoding
- GOP Interval Display: Shows Group of Pictures intervals for each keyframe
- Scopes: Vectorscope, waveform scope, and RGB histogram
- Color Temperature & Brightness: CCT and brightness charts over time
- HDR Analysis: Dolby Vision configuration details and HDR content classification
- Per-Track Waveforms: Peak waveform visualization for every audio track
- Sync Analysis: Audio/video timestamp drift detection
- Integrated Loudness: ITU-R BS.1770-4 gated measurement in LUFS with R128 compliance badge
- True Peak: 4x-oversampled inter-sample peak detection in dBTP
- Loudness Range: EBU Tech 3342 LRA plus momentary/short-term maxima
- Short-Term Chart: 3-second loudness over time with the -23 LUFS target line
- Manifest Parsing: RFC 8216 multivariant and media playlists, local folders or remote URLs
- Declared vs Measured: Per-variant peak/average segment bitrate compared against BANDWIDTH and AVERAGE-BANDWIDTH
- QC Findings: Segment duration compliance, cross-variant keyframe alignment, codec verification, ladder shape checks, and DRM detection, grouped by severity
- Atom/Box Tree: Browse MP4/MOV container structure with size breakdowns
- Built-in Player: Play videos with AVPlayer integration
- Statistics Overlay: Real-time display of resolution, frame rate, current time, and bitrate
- Customizable Controls: Toggle controls, auto-play, and mute settings
- Command-line interface for batch processing and automation
- JSON, text, and CSV output formats
- All analysis capabilities available via CLI
- AI agent integration:
framepeek-cli mcpruns a Model Context Protocol server on stdio - Tools:
analyze_media(structured results),media_summary(cheap metadata call),inspect_container(atom tree),inspect_hls_ladder(streaming QC findings)
- Embedded HTTP server for remote analysis
- Start/stop from the Server tab in the app
- Job queue with progress tracking
- macOS: 15.2 (Sequoia) or later
- Xcode: 16.2 or later (for building from source)
Grab the latest signed .dmg from the Releases page, open it, and drag FramePeek to /Applications. The CLI is published as a separate framepeek-cli-<version>.tar.gz on the same release.
-
Clone the repository:
git clone https://github.com/oscnord/FramePeek.git cd FramePeek -
Open the project:
open FramePeek/FramePeek.xcodeproj
-
Build and run:
- Select your target Mac in Xcode
- Press
Cmd+Rto build and run
- File Dialog: Click the "Open…" button in the toolbar or press
Cmd+O - Drag and Drop: Drag a video or audio file onto the main window
- Supported Formats: MP4, MOV, AVI, MPEG, and other common media formats supported by AVFoundation
# Basic metadata
framepeek-cli video.mp4 --info --pretty
# All analyses
framepeek-cli video.mp4 --all --pretty
# Bitrate as CSV
framepeek-cli video.mp4 --bitrate --format csv
# EBU R128 loudness
framepeek-cli video.mp4 --loudness --pretty
# Multiple files
framepeek-cli *.mp4 --info --parallelTwo ways to connect:
# stdio: the client spawns the CLI itself
claude mcp add framepeek -- framepeek-cli mcp
# HTTP: connect to the running app (start the server in the Server tab)
claude mcp add --transport http framepeek http://127.0.0.1:8080/mcpThe app is sandboxed, so over HTTP the path-based tools can only read files the app has access to (Downloads, or files previously opened in FramePeek); URL-based tools like inspect_hls_ladder are unrestricted. The stdio CLI transport has no sandbox — prefer it for agents working across arbitrary local paths. The same applies to the REST API's /analyze/path.
Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"framepeek": { "command": "framepeek-cli", "args": ["mcp"] }
}
}Agents can then call media_summary for a quick look at any local file, analyze_media for full structured results (bitrate, GOP, loudness, …), inspect_container for the MP4/MOV atom tree, and inspect_hls_ladder to QC an HLS ladder by path or URL.
- Click "Server" in the sidebar
- Click "Start Server"
- Use the API at
http://127.0.0.1:8080
See bruno/ folder for a Bruno collection to test the API.
Cmd+O: Open file dialogCmd+I: Toggle inspector panelCmd+T: New tabCmd+,: Open settings
FramePeek follows a clean architecture pattern:
- UI Layer: SwiftUI views with
@MainActorViewModels - Business Logic: Pure utility functions for parsing and analysis
- Data Layer: AVFoundation and CoreMedia for media access
- Concurrency: Swift Concurrency (
async/await) for all async operations
Contributions are welcome! Please see instructions.md for detailed information about the codebase structure and contribution guidelines.
This project is licensed under the MIT License.