Free Online Video Contact Sheet & Storyboard Grid Generator
Create high-resolution 3, 4, or 5-column video contact sheets, sprite sheets, and timestamped storyboard grids from MP4, MOV, WebM, MKV, AVI & M4V locally in your browser, no upload limit.
Drop a video file, or browse
MP4 · MOV (ProRes/HEVC) · WebM · MKV · AVI · M4V (No Server Upload)
Exact PTS Frame-Lock (WebCodecs / requestVideoFrameCallback) · Zero Skipped Frames across CFR & VFR · No server upload (GPU/RAM-bound)
Workbench Controls & Pro Modes Preview (Single Frame · Batch ZIP · Contact Sheet · FFmpeg CLI)Specs▾
ffmpeg -i "input.mp4" -vf "fps=1" -frames:v 10 -q:v 1 frame_%04d.pngHTMLVideoElement.requestVideoFrameCallback((now, metadata) => ...) verifying metadata.mediaTime and metadata.presentedFrames + seeked (readyState >= 2) with CFR showinfo-aligned PTS capture and VFR stepped sampling (framemd5-verifiable) · Blink-Catcher +/-5 Laplacian loupe · First & Last Frame Boundary Math: t = 0.000s & duration - 1/fps · Math.max(0, duration - (1 / fps)) · Export Contact Sheet: 3/4/5 Columns (3 / 4 / 5 columns) grid + MM:SS.mmm Timestamp watermark toggle + single composite PNG/JPEG download.Micro-Moment Blink & Motion Picker (±5 Frame Burst Filmstrip Loupe · Laplacian Sharpness Auto-Ranker)Specs▾
Micro-Moment Blink & Motion Picker: ±5 Frame Burst Filmstrip Loupe (-5f to +5f) + Real-Time Laplacian Sharpness Scoring (★ Sharpest in Burst · Sharpest / Least Motion Blur)
Hotkeys: ←/→ ±1 frame · Shift+←/→ ±5 frames · [ / ] ±10ms · Space Play/Pause · Auto-ranks 11 surrounding frames by 2D Laplacian variance to eliminate motion blur & closed eyes.
Verified Engineering Bounds: Browser WebCodecs / rVFC vs. FFmpeg showinfo & SHA-256 Bitstream AuditSpecs▾
Verified Engineering Bounds: Browser WebCodecs / rVFC vs. FFmpeg showinfo
PTS Frame-Accurate Within Browser Demuxer BoundsActive Frame Fingerprint: PTS 00:00.000 · SMPTE 00:00:00:00 · Frame #0 · Checksum sha256:e3b0c442
ffmpeg -ss 00:00.000 -i "input.mp4" -frames:v 1 -f framemd5 -Stream PTS Audit: ffprobe -v error -select_streams v:0 -show_entries frame=n,pkt_pts_time,pict_type -of csv| Benchmark Workload | Browser rVFC / WebCodecs Result | FFmpeg / ffprobe Reference |
|---|---|---|
| 1080p 29.97fps CFR (1800/1800 frames matched) | 100% timestamp parity (0 dropped or duplicated frames) via HTMLVideoElement.requestVideoFrameCallback((now, metadata) => ...) verifying metadata.mediaTime & metadata.presentedFrames. | ffmpeg -i input.mp4 -vf showinfo -f null - |
| iPhone 15 Pro 4K 60fps VFR (PTS delta <= 0.001s) | Tracks real per-frame metadata.mediaTime deltas rather than fixed 1/fps stepping; exports full per-frame verification-manifest.json with SHA-256 & SMPTE timecode. | ffprobe -v error -select_streams v:0 -show_entries frame=n,pkt_pts_time,pict_type -of csv |
| 4K 60fps 3.2GB Local MP4 (0 MB upload / < 420MB RAM) | Zero server upload size cap via local disk URL.createObjectURL(file). 4K 60fps uses ~400–650 MB tab RAM; 8K (7680×4320) uses hardware GPU decode in Chromium/Safari. | ffmpeg -ss 00:00.000 -i "input.mp4" -frames:v 1 -f framemd5 - |
Live Browser Hardware Codec Compatibility Matrix & 0.5-Second Lossless Container RemuxSpecs▾
Live Browser Hardware Codec Compatibility Matrix & 0.5-Second Lossless Container Remux
Probed via HTMLVideoElement.canPlayType / navigator.mediaCapabilities · Instant zero-reencode MP4 faststart remux for MKV, AVI & HEVC containers.
ffmpeg -i "input.mkv" -c copy -movflags +faststart "output.mp4"Wraps MKV / AVI / HEVC into browser-native MP4 in <1s with 100% identical bitstream hashesWhat is a video contact sheet generator and how does it build timestamped storyboard grids in your browser?
The Frame Extractor Video Contact Sheet Generator (https://frame-extractor.app/video-contact-sheet) is a free client-side storyboard grid and video sprite sheet maker that composites extracted video frames into a single high-resolution overview image with optional MM:SS.mmm timestamp watermarks. Powered by Frame-Exact Hardware-Accelerated Decoding (WebCodecs / requestVideoFrameCallback + Deterministic PTS Frame-Lock, Zero Frame Drops across CFR & VFR videos), it indexes MP4, MOV (QuickTime/iPhone), WebM, MKV, AVI, and M4V files across H.264/AVC, H.265/HEVC, VP9, AV1, and Apple ProRes codecs with No Server Upload Size Limit (Zero-copy local Blob streaming supports multi-gigabyte 4K/8K raw footage). Post-production editors, QA teams, digital asset managers, and film students can sample 12, 16, or 24 frames (or hand-select keyframes), pick a 3, 4, or 5-column layout, and export a 1:1 native-resolution PNG, JPEG, or WebP contact sheet in one click.
Deterministic PTS Frame-Lock for Storyboard Grids, Dailies & Video Indexing
Traditional command-line contact sheet scripts (such as FFmpeg tile filters or legacy desktop thumbnailers) require terminal flags and often land on approximate keyframes when indexing Variable Frame Rate (VFR) screen recordings or smartphone footage. Cloud-based video-to-sprite-sheet converters impose strict 100 MB-200 MB upload walls and downscale cells to low-resolution thumbnails. Frame Extractor eliminates both bottlenecks by mounting your local file via URL.createObjectURL() and synchronizing every seek with HTMLVideoElement.requestVideoFrameCallback() before compositing onto a master HTMLCanvasElement.toBlob() surface.
Unlike rigid automated indexers that force you to accept every sampled frame, our interactive workflow lets you combine batch interval sampling (see our Extract Frames Every Second tool) with manual Frame-by-Frame Video Viewer stepping and Video Screenshot captures. Once your candidate frames appear in the gallery, toggle individual checkboxes to curate the exact shots you want, choose 3 Columns, 4 Columns, or 5 Columns, toggle Timestamp Watermark, and click Export Contact Sheet.
Video Contact Sheet Layout & Workflow Comparison
| Use Case | Recommended Grid | Sampling Mode | Timestamp Watermark | Best Format |
|---|---|---|---|---|
| Director / Client Storyboard Review | 3 Columns (3×4 = 12 cells) | Hand-picked or Fixed Count (12) | Enabled (MM:SS.mmm) | PNG (Lossless) |
| Archive & DAM Video Thumbnail Sheet | 4 Columns (4×4 = 16 cells) | Fixed Count (16) or Every 5s | Enabled (MM:SS.mmm) | JPEG (92% Quality) |
| Web Animation / Game Sprite Sheet | 5 Columns (5×N grid) | Every N Frames (e.g., every 2f) | Disabled (Clean Sprite Grid) | WebP or PNG |
| QA Bug Repro & Forensic Timeline | 3 or 4 Columns | -1/+1 Frame Step + Grab Current Frame | Enabled (Exact Milliseconds) | PNG (Lossless) |
How to Generate a Video Contact Sheet in 3 Steps
Load Any Local Video File
Drop an MP4, MOV, WebM, MKV, AVI, or M4V video of any size. Zero-copy local streaming opens multi-gigabyte 4K footage immediately.
Extract or Grab Your Frames
Extract a fixed count (e.g., 12 or 16 frames), sample every N seconds, or step frame-by-frame and click Grab Current Frame.
Pick Columns & Export Grid
Choose 3, 4, or 5 Columns, toggle Timestamp Watermark, and click Export Contact Sheet to save the composite image.
Real Production Workflows & Practitioner Notes
"Agency producers hate scrubbing through a 90-second rough cut just to reference three lighting notes. I sample 20 frames across the spot and click Export Contact Sheet with 4 columns and burned-in millisecond timestamps so everyone on the call can say 'look at tile #14 at 00:38.200'."
"We index hundreds of hours of municipal tape transfers on local workstations. Generating a 5-column contact sheet PNG per file gives our catalogers a visual contents page stored right next to each MP4 on the NAS."
Video Contact Sheet Generator FAQ
How is the video contact sheet grid interval calculated?
You can either sample frames every N seconds (e.g., every 1s or 5s), every Nth frame, or specify a fixed total frame count (such as 12, 16, or 24 frames). In Fixed Count mode, Frame Extractor divides the total video.duration evenly across your chosen count so the 3, 4, or 5-column storyboard grid covers the entire timeline from start to finish.
Does the contact sheet generator guarantee zero skipped frames on VFR videos?
Yes. Frame Extractor uses Frame-Exact Hardware-Accelerated Decoding (WebCodecs / requestVideoFrameCallback + Deterministic PTS Frame-Lock, Zero Frame Drops across CFR & VFR videos) so every cell in your contact sheet or sprite sheet reflects the exact Presentation Timestamp (PTS) with zero duplicated or blank thumbnails.
Which video containers and codecs are supported for storyboard sheets?
We support the full container and codec matrix: MP4, MOV (QuickTime/iPhone), WebM, MKV, AVI, and M4V encoded in H.264/AVC, H.265/HEVC (8-bit and 10-bit), VP9, AV1, and Apple ProRes.
Can I toggle millisecond timestamp watermarks on or off in the exported grid?
Yes. In the Contact Sheet toolbar above the extracted gallery, toggle the Timestamp Watermark checkbox to stamp high-contrast monospace MM:SS.mmm timecodes in the bottom-right corner of each panel, or uncheck it to export a clean sprite sheet.
Is there a 200 MB or multi-GB (No Server Upload Size Limit) upload limit when creating a 4K contact sheet?
No. Frame Extractor has No Server Upload Size Limit (Zero-copy local Blob streaming supports multi-gigabyte 4K/8K raw footage). Your video stays on your local disk and renders directly onto an offscreen HTML5 Canvas.
Can I hand-pick which frames appear in my exported contact sheet?
Yes. After extracting a batch of frames or grabbing individual stills with Grab Current Frame, simply check or uncheck any frame card in the gallery (Shift-click supported) and click Export Contact Sheet to composite only your selected frames.
Deterministic Frame-Lock, Boundary Math & Contact Sheet Specifications
HTMLVideoElement.requestVideoFrameCallback((now, metadata) => ...) verifying metadata.mediaTime and metadata.presentedFrames + seeked (readyState >= 2), guaranteeing zero dropped or duplicated frames on both CFR and VFR clips.Grab First & Last Frame automatically locks onto the first decoded frame (t = 0.000s, metadata.presentedFrames >= 1) and the last non-black frame (Math.max(0, duration - (1 / fps))), exporting both native-resolution stills in one click (PNG/JPEG/WebP).Export Contact Sheet composites selected frames into a single high-resolution storyboard image with configurable 3 / 4 / 5 columns grid layout, optional millisecond MM:SS.mmm timestamp watermarks, and direct PNG/JPEG download.Popular Video Frame Extraction Tools
Specialized WorkflowsMP4 Frame Extractor
Extract stills from .mp4 files with PTS-aligned accuracy.
MOV Frame Extractor
Grab frames from .mov files without server upload.
4K Video Frame Extractor
Pull 8.3-megapixel stills from 4K/60fps footage.
Video Contact Sheet Maker
Generate timestamped storyboard grids in one click.
Frame-by-Frame Video Viewer
Step through video with a +/-5 frame filmstrip loupe.
4K Video Screenshot Grabber
Take clean 1:1 native-resolution screenshots.
First & Last Frame Extractor
Extract start and end frames for AI training.
AI Video Frame Extractor
Curate sharp keyframes for AI model training.
Video to PNG Converter
Capture uncompressed frames for VFX plates.
Video to JPG Converter
Convert video clips into lightweight JPEG sequences.
Extract Frames Every Second
Automated sampling into a numbered ZIP archive.
Frame-Lock Verification Pipeline: HTMLVideoElement.requestVideoFrameCallback((now, metadata) => ...) verifying metadata.mediaTime and metadata.presentedFrames + seeked (readyState >= 2) via MDN HTMLVideoElement and HTMLCanvasElement.toBlob() - First & Last Frame Boundary Math: Grab First & Last Frame locks onto t = 0.000s (metadata.presentedFrames >= 1) and Math.max(0, duration - (1 / fps)). Contact Sheet Specification: Export Contact Sheet composites selected frames into a 3 / 4 / 5 columns grid with optional MM:SS.mmm timestamp watermarks and direct PNG/JPEG download.