Applies to playback and scrubbing. Analysis uses the original audio. Use Full Mix to check voices outside the center.
Local test — counts go only to this computer. This choice is separate from live-site consent.
Help improve WarpDiff with optional counts of visits, daily activity, reviews, tools used, scrubbing frequency, broad window-size groups, and basic failures or fallbacks. No files, filenames or media contents are sent. All features and appearances are available either way.
Optional statistics help WarpDiff’s developer improve the tool: visits and daily activity; ready reviews of 1–4 items; use of Stack/Grid, scopes, audio graphs, Difference, wipe, loupe, Tile Check, loops and listening tools; completed scrub drags by surface and frequency band; and fixed counts of loading failures, audio analysis failures and compatibility fallbacks. Review and tool events include the app release, media type and item count. No filenames, media contents, raw errors, logs, pointer paths or playback positions are sent.
WarpDiff is operated by Jay Riddle. With your agreement, GoatCounter receives your IP address and browser headers to process requests and distinguish repeat visits, and retains browser, operating-system and country-level counts. GoatCounter’s built-in region, referrer, screen-size, language and individual-pageview collection are disabled. No analytics cookies. The dashboard is private, and statistics are configured for automatic deletion after 365 days. Privacy questions: warpdiff@gmail.com. GoatCounter privacy. GitHub Pages separately logs IP addresses for hosting security.
Once per ready comparison, we also share a broad window-width and height group to improve layouts: narrow (under 760 pixels), medium (760–1,199) or wide (1,200 or more), paired with short (under 600 pixels high) or tall (600 or more). These are browser layout pixels. Exact dimensions, monitor resolution, resize history and information about other windows are not sent.
Your choice is saved in this browser with the sharing details you accepted. Routine app updates do not ask again. If the sharing scope changes, we ask again before reporting; a saved No stays off. Change your choice here anytime. Turning sharing off stops future reporting; it cannot retract counts already sent. If saving No fails, we try to remove the old permission. If that also fails, a warning asks you to clear site data before reopening WarpDiff. Offline counts are not queued.
Daily activity counts use of ready comparisons at most once per browser per UTC day. We remember only the last reporting date locally to avoid duplicates across tabs and reloads; no date or user ID is sent. Idle tabs don’t count. These figures estimate active browsers, not people.
A saved Yes starts reporting only after you load files here; choosing Yes explicitly can also begin a visit. Opening the page alone sends nothing. Host-loaded viewers stay excluded. An incomplete analytics update keeps sharing off while comparisons remain available.
Load files without answering to continue with sharing off. We remember that locally and stop showing the invitation. You can enable sharing here later. If browser storage is cleared or unavailable, the invitation may return.
A little atmosphere for your workspace. Media, scopes and comparison colors stay unchanged. All appearances are available without sharing usage.
Managed review hosts supply the media and its labels. Their viewer keeps the original Grid / Stack icons (Compare together / Single candidate in tooltips), view controls, inspection icons and media details in their native positions; task actions and Help belong to the host.
Use the appearance button at the right of the header to choose Original, Starfield, Solar, Nebula or Glacier. Preferences stay in this browser. Solar has bodies moving in the same direction on fixed orbital planes; Nebula has orbiting stars and faint spiral arms around a softly glowing hub in violet haze; Glacier has sparse icy stars. Choose Starfield for a slower Ad Astra animation across a wide landing background. It is now a regular appearance; the hidden X toggle has been removed. Decorations appear only on the landing screen, and reduced motion stops animation. Media, scopes and slot colors stay unchanged.
WarpDiff can run in tablet browsers, but some features depend on keyboard shortcuts, hover, or precise dragging. Touch support is currently limited; a keyboard and mouse or trackpad are recommended for more complete control. The header wraps in very narrow windows to keep Appearance and privacy reachable during review.
Usage sharing appears first in the panel, followed by appearances. Expand “What’s shared and who receives it” for the exact categories, GoatCounter’s identity and privacy link, and how to stop sharing. Loading files without answering remembers a local invitation dismissal, keeps sharing off and stops automatic reminders—even after returning to the landing screen or reopening WarpDiff. It records neither Yes nor No and sends nothing. You can enable sharing later from this panel; clearing browser storage or unavailable storage may bring the invitation back.
Daily activity counts use of ready comparisons at most once per browser per UTC day. We remember only the last reporting date locally to avoid duplicates across tabs and reloads; no date or user ID is sent. Idle tabs don’t count. These figures estimate active browsers, not people.
Usage sharing is opt-in when a GoatCounter destination is configured. Consent is tied to the sharing scope you accepted. Routine updates do not ask again; a changed scope pauses sharing until a new Yes. No is remembered across scope changes; no analytics request is made before Yes or after turning sharing off. With consent, sharing counts visits, ready reviews of 1–4 items, deliberate comparison-tool use, completed scrub drags, and basic failure/fallback categories, labeled by app release, media type and item count. Features count once per ready review; scrub frequency uses thresholds of 1, 2, 6 and 21 drags. Waveform and spectrogram appear together; their separate scrub surfaces indicate interaction, not separate panel choices. Reloading a set counts again. No files, filenames, contents, raw errors or logs are sent. Failed/canceled sets are not ready reviews; no offline or pre-consent activity is replayed. All appearances remain available with sharing off. The official site uses WarpDiff’s GoatCounter account after consent. Once per ready comparison, we also share a broad window-width and height group to improve layouts: narrow (under 760 pixels), medium (760–1,199) or wide (1,200 or more), paired with short (under 600 pixels high) or tall (600 or more). These are browser layout pixels. Exact dimensions, monitor resolution, resize history and information about other windows are not sent. GoatCounter receives IP addresses and browser headers to process requests and distinguish repeat visits; it retains browser/OS and country counts in a private dashboard configured for automatic deletion after 365 days. GoatCounter’s built-in region, referrer, screen-size, language and individual-pageview collection are disabled. WarpDiff is operated by Jay Riddle; privacy contact: warpdiff@gmail.com.
WarpDiff is a browser-based comparison tool for reviewing 1–4 images, videos, or audio files in Stack or Grid mode.
Three ways to load files:
File requirements:
While files are preparing: The loading screen identifies every assigned slot and filename as it opens metadata and decodes the first visible frame. Ready files are checked off while slower files keep an animated status, and WarpDiff explains that it is waiting to reveal the complete comparison together. A longer wait adds a large-file reminder; click Cancel to stop a manual load.
Prepare and open: Load or drop files normally. If a video or audio file cannot be used fully, connect the separately running local tool under Preparation, approve its connection window, and choose Prepare and open. Copies return here automatically with the other comparison files; no package or second picker is needed. Originals remain untouched. Video may become H.264 up to 1080p with stereo AAC; audio-only copies retain channel count/rate in PCM WAV. Analysis describes the loaded copy. Close/cancel, Escape, clear or accepted replacement cancels active work; invalid selections preserve it. Managed hosts retain control of their files. Setup and limits are linked in the Preparation dialog. Other ways to prepare retains the copied-command fallback. A local tool/FFmpeg installation is separate; no converter is bundled or downloaded by WarpDiff. Preparation is offered without opening a dialog during loading. Choose Preparation when you want to continue. Returned copies are checked before replacement; a failed check keeps the current comparison and allows retry. After opening, Preparation offers Reopen previous comparison. Companion files and optional analysis follow ordinary local loading rather than a host deadline. HDR (PQ/HLG) picture reencoding is refused. Missing or unspecified SDR tags assume BT.709 when the longer side is at least 1280 or the shorter side is at least 720, and BT.601 otherwise, in either orientation. A declared matrix, primaries or transfer is kept. Missing ones are filled from that declared tag, using the matrix first, then primaries, then transfer. A BT.709 or SMPTE 170M transfer alone does not choose the matrix or primaries, because those curves are the same; frame size does. Frame size is also used when all three tags are absent. An sRGB transfer with no matrix stays sRGB and assumes BT.709 matrix and primaries. Opening the copy names an assumption in a short notice, which does not replace the Preparation dialog status. RGB, GBR and palette pictures use that same matrix. The source transfer, including sRGB and BT.470, is kept and tagged; matrix, primaries and range become limited-range BT.709 with dithering. A declared unsupported tag is still refused. Untagged 8-bit 4:2:0 H.264 is copied unchanged. Compatible picture copies preserve their declared interpretation.
Prepared packages (advanced): Ordinary media uses Load or drag and drop; no package is needed. For files from the optional external tool, open Help → Advanced → Import externally prepared media. The dialog explains setup under How to get prepared files and offers Load files to return to normal loading. Select warpdiff-package.json and the prepared MP4, optionally the original for byte matching, and up to three companion images or videos. Check prepared files leaves the current comparison in place and retains an immutable snapshot of the checked video. Loading uses those checked bytes even if the selected disk file subsequently changes. The summary separates inspected stereo format and file binding from declared transformations and unverified timing, source fidelity and measurements. Load comparison starts a new comparison through normal decoder checks and timestamp ordering; the original is not added automatically. Inspection failure or cancellation preserves the current comparison. Tab and Shift+Tab stay in the dialog; cancelling a file chooser keeps the form. Cancel or Escape restores focus. Changing a selection requires another check; clear, a new load or a host load cancels pending checks. Manifest: up to 16 KiB; prepared/original: up to 64 MiB each. Analysis describes the prepared stereo copy; keep the original for multichannel measurements. Nothing is uploaded or converted here. Managed reviews continue to load through their host.
Media status: Open Media status in the header after loading to inspect each input’s picture, readable pixels, native playback, audio decoding, loaded-file analysis and scrub-audio availability. Unavailable tools include an explanation; Not verified means there is insufficient evidence. Reported duration and known container audio start do not certify exact frame rate/CFR, complete A/V synchronization, original-source fidelity or measurement conformance. Refresh checks current frames without starting playback or preparing a file. Escape or Close returns focus to the opener; clearing or reloading retires the previous reports.
Unsupported video audio: When a soundtrack cannot be decoded, use Preparation → Other ways to prepare to open Prepare audio externally. Follow its numbered steps to install FFmpeg separately, open a terminal in the source folder, run the copied command and reload the output. No package or JSON details file is needed for that workflow. It does not include, download or run FFmpeg. Install FFmpeg separately using its download information, then copy the command for a macOS or Linux terminal and run it from the folder containing the original file. The supplied command targets MP4/MOV video (including .m4v); other formats need a command suited to their container and video codec. The copied video codec must also work in your browser. The command copies the video and makes a stereo AAC soundtrack. A short soundtrack is padded with silence so the complete video is retained. Keep the original for multichannel or original-source measurements. Use Load prepared files in the panel, Load (L), or drag and drop to load the _aac output together with the other comparison files; loading starts a new comparison. Managed review users return the prepared file to their host for reloading. Filenames are quoted literally, including spaces, apostrophes and shell characters. Extensionless filenames keep their full name and gain _aac.mp4. Rename files containing control characters before copying a terminal command. Copy reports blocked or unavailable clipboard access. Tab and Shift+Tab stay within the preparation panel; Escape closes it and restores focus. Focused controls scroll into view in short windows, and reopening starts at the panel heading. Adding another preparation entry retains focus on Copy, download information, or Load prepared files.
Timestamp warning: If two or more files have timestamps within 2 seconds of each other, a toast warns that the sort order may be unreliable.
Duplicate detection: If two slots contain the same file (matched by name, size, and timestamp), a warning banner appears.
Audio timing warning: If a video container does not expose an audio start timestamp, a persistent amber alert names the affected slot and asks you to verify A/V sync. Native playback is not shifted.
Reset: Click the reset icon (circular arrow, visible after loading) to clear all files and start over.
Optional local preparation package: Repository users can run the separate Node preparation tool with their own installed FFmpeg/ffprobe to create review.mp4 and a manifest. Load the MP4 normally; the browser does not automatically import the manifest. The first recipe supports bounded AVC picture and a selected soundtrack, makes a stereo compatibility copy, and limits each source/returned file to 64 MiB. Trusted tools can check selected-byte hashes and container tables before ordinary loading. Those checks do not certify frame mapping, full sync, original channel fidelity or professional measurements; keep the original.
Stack — The default mode. One asset is visible at a time, layered on top of the others. Use arrow keys or the asset buttons in the header to switch between assets. Asset name, zoom, resolution, aspect ratio, and filename are shown in the header. A mini-map thumbnail appears in the lower-right when the asset overflows the viewport — click or drag it to pan. Press \ to toggle between Fit (each asset fills the viewport independently) and Balance (all assets scaled to the same rendered screen area).
Grid (2 files) — Both assets displayed side-by-side with a gap between them. The layout auto-picks Horizontal or Vertical on load based on which gives larger images, and re-evaluates on resize.
Grid (3 files) — All three assets in a grid. Press 3 to toggle between Inline (columns or rows, auto-picked by aspect ratio; uses equal-area scaling so mixed-orientation assets share consistent visual weight) and Offset (Source alone, A/B paired).
Grid (4 files) — All four assets use Inline in a balanced 2×2 grid. Offset is available only when exactly three assets are visible.
Click a slot label in a Grid info bar to hide it and give the remaining assets more room. Click its dimmed header pill to restore it. Shift+1 through Shift+4 toggle slots 1–4; the final visible slot cannot be hidden. Hiding one item from a four-item grid switches to three-up, preserving the remaining assets' order and labels: hiding #1 leaves #2, #3, #4. In Offset, the first visible asset is on the left and the next two are on the right. Restoring all four returns to 2×2.
| Action | Result |
|---|---|
| Click stack icon (overlapping squares) in header | Switch to Stack mode |
| Click grid icon (four squares) in header | Switch to Grid mode |
| Press S | Toggle between Stack and Grid |
| Press G | Toggle between Stack and Grid |
Zoom and pan are available in Stack mode only.
| Shortcut | Action |
|---|---|
| + | Zoom in |
| − | Zoom out |
| 0 | Zoom to fit screen |
| 1 | Zoom to 100% native pixels for the active asset |
| \ | Toggle Fit / Balance zoom mode |
| Alt+← Alt+→ | Rotate the active asset 90° counterclockwise / clockwise |
| Click and drag | Pan; drag past edges for elastic rubber-band resistance |
Zoom range: 5%–3200%. Each step multiplies/divides by √2 (~1.41×). 1 targets the currently active asset — switching assets and pressing 1 again re-centers 100% on the new slot. In Grid mode, 1 toggles between fit-to-screen and a 100% native pixel cap. In Balance mode all assets are scaled to equal rendered area; the mini-map in the lower-right shows the full extent of assets and a viewport indicator when any asset overflows.
Fit vs. Balance: Fit gives each asset its own largest viewport fit. Balance gives every asset the same rendered screen area, which is useful for portrait, square, and landscape comparisons. Returning to Fit restores the prior Fit zoom and pan.
Press Z to toggle a circular zoom loupe that follows your cursor, showing a magnified view of native pixels without changing the overall zoom level. Works in all view modes.
| Shortcut | Action |
|---|---|
| Z | Toggle zoom loupe |
| + − | Adjust magnification (2×–32×, when loupe is active) |
| [ ] | Resize loupe (100–400px) |
| Shift+Z | Toggle linked zoom |
Linked zoom: In Grid modes, enabling linked zoom (Shift+Z) shows corresponding loupes on all other visible assets at the same relative position — hover over one asset to compare the exact same spot across all versions.
The loupe hides during panning and updates live during video playback and frame stepping. Loupe size and magnification level persist across sessions.
Press Q in Stack mode to compare two images with a draggable hard cutoff. Pair order matches Grid order: the first asset is left of the cutoff and the second is right. Click inside the comparison plate to snap the cutoff there; a drag remains a normal pan gesture, and clicks outside the plate are ignored. A subtle guide line marks the idle boundary and disappears while the pointer is held down. With three images, use the centered header control to select Ref–A, Ref–B, or A–B directly; Shift+Q and the left/right asset arrows cycle them in the same order. The wipe header stays dedicated to the comparison pair. When scopes are open, the scopes panel provides its own source selector and labels the complete asset being analyzed. The zoom loupe and Alt+← / Alt+→ rotation follow the visible side under the cursor; the loupe label and rotation toast identify the affected asset. If the pointer is outside the comparison plate, rotation asks you to point to a side first. Mismatched aspect ratios use complete presentation plates with neutral matte, so neither image bleeds through the other's unused area. Clicking the divider focuses it for precise arrow-key adjustment, with Shift+arrow for larger steps. On narrow windows the wipe control moves below the header so Help and view-mode buttons remain usable. Wipe follows zoom, pan, rotation, and resize; video wipe is not available yet.
Press Y with images loaded to analyze any source as a repeating surface. 3×3 repeats the complete image nine times; Offset moves its four source edges into a center cross; Heatmap marks strong and weak seam segments. Source buttons—and the left/right arrows while Tile Check is open—move between all loaded images.
WarpDiff rates Left ↔ Right, Top ↔ Bottom, the four-way corner junction, and the weakest overall result as Seamless, Review, or Visible seam. It compares color, transparency, and texture-direction changes at the boundary with ordinary transitions inside the image. This measures technical edge continuity, not whether a recognizable object, shadow, or lighting pattern repeats too obviously, so inspect the repeated preview before accepting a surface. Analysis uses the original local source pixels; Tile Check, Image Wipe, and Difference are mutually exclusive.
Press D in Stack mode to compare two images or videos as a pixel-difference composite. Identical pixels appear black and differences appear brighter. Shift+D or the asset arrow keys cycle Ref–A, Ref–B, and A–B. Video difference waits for both clips to present the same frame so a temporary sync offset does not appear as false motion. Difference compares browser-decoded RGB pixels; it is not a linear-light or HDR mastering comparison. Safari snapshots each video through a reusable canvas so native video blending cannot replace the result. Difference and wipe are mutually exclusive and both exit when you switch to Grid.
Video controls appear at the bottom when videos are loaded. Controls wrap as needed in smaller desktop panes so seeking, volume and source selection stay reachable. Playback defaults to Sync, where all videos play, pause, and seek together. Press Shift+S or click Playback: Sync to enter Solo, where the transport controls affect only the selected video.
| Control | Description |
|---|---|
| Progress bar | Click to seek; drag to scrub |
| Timecode (left) | Current position — click to toggle between time and frame count. Video uses M:SS:FF (frames); audio uses M:SS.cc (centiseconds) since audio has no frame rate |
| Speaker icon | Mute/unmute the active audio source |
| Volume slider | Adjust volume |
| S/GT A B buttons | Select which asset's audio to hear, with a brief fade and steady playback timing during source changes |
Timeline and waveform playheads move evenly during single-video and synced playback, including when you switch active videos. They stop with playback and jump directly to the requested position on a seek, restart or loop wrap.
After scrubbing, Space resumes playback and R restarts at the loop in-point or beginning. Both preserve your playback scope and loop range, including automatic looping for a single video.
In Safari, video drag seeks wait for decoded frames before following the latest pointer target. Returning to the tab refreshes video surfaces. A drag interrupted by changing tabs ends paused; press Play to continue. Scrub preview uses native sound output to avoid silent previews; Continuous processing, listening controls and short-preview fallback still apply. A new gesture wakes the separate processing engine after suspension or interruption. Desktop mono/stereo video uses native audio to reduce picture stalls after seeking; surround audio keeps the shared listening mix and may retain a brief playback-start delay.
Ordinary mono/stereo video keeps picture and sound on the browser’s native playback path. Surround mixing and Opus replacement retain processed audio. Scrub previews remain subject to the audio device’s output delay; use normal playback to judge synchronization.
Keyboard shortcuts:
| Shortcut | Action |
|---|---|
| Space | Play / Pause |
| Shift+S | Toggle Playback: Sync / Solo |
| R | Restart immediately at the loop in-point, or beginning if unset |
| J K | Slower / faster playback (0.25×–2×) |
| M | Mute / Unmute |
| I O | Set shared loop in / out points |
| Shift+L | Playback range: Sync (shortest) / Full (longest) |
| , | Step back one frame |
| . | Step forward one frame |
| W | Toggle waveform / spectrogram |
| E | Cycle waveform / LUFS envelope display |
| Shift+W | Toggle linear / log frequency scale |
| P | Cycle spectrogram color palette |
Playback scope: The adjacent Playback: Sync / Solo and Range: Sync / Full controls define how clips participate and how much of them plays. In Solo, Space, restart, frame stepping, speed changes, scrubbing, custom loop points, progress, and audio all follow the selected video. Choose another video with the asset controls or audio-source buttons to hand playback off at the same absolute time. If that time is beyond a shorter target, WarpDiff holds it paused on its final frame instead of wrapping and retains the longer time for switching back or rejoining Full Sync. Returning to range-limited Sync from outside the shared range restarts at its shared in-point. Custom loop markers remain shared; their effective out-point is clamped to the Solo video, and a loop whose in-point is beyond its end holds there with an explanation. The multi-clip Range: Sync / Full control is hidden while Solo is active.
Only one audio track plays at a time. If the active source is muted, audio automatically switches to the next unmuted source.
Sync and clip length: Multiple videos share one transport and stay frame-aligned. Different-length clips default to Full, where shorter clips hold on their last frame; Sync wraps at the shortest clip so every frame has a counterpart.
Waveform, spectrogram, and loudness analysis prepare in the background using the same original-audio calculations. Playback can begin before the graphs and scrub preview are ready. In browsers that restrict background processing, analysis can briefly pause the controls.
Loading a new comparison clears the previous waveform and spectrogram immediately, including if the panel was closed. The graphs remain blank until the new analysis is ready.
Clearing or replacing a comparison releases its old media and preview resources. You can load the next comparison immediately while the previous audio system finishes its brief cleanup.
Fit / Ref audio scaling: The contextual Scale control beside the waveform—or above the canvases in audio-only review—applies to both waveform and spectrogram. Fit normalizes each asset to reveal its detail. Ref preserves true waveform amplitude against 0 dBFS and uses a common −70 to 0 dBFS spectrogram range for direct level comparisons. The choice persists across sessions.
Video duration, seeking and loop bounds follow the native media timeline, including picture after a short soundtrack ends. Opus replacement requires a uniquely identified Opus track and an Opus decode; titles and comments do not affect audio routing.
In audio comparison mode, the waveform and spectrogram canvases are interactive — click and drag to scrub through audio or select a loop region.
| Action | Result |
|---|---|
| Click on waveform/spectrogram | Seek to that position |
| Click and drag | Scrub through audio with preview |
| Shift + click and drag | Select a region to set loop in/out points |
| Click on a different slot's canvas | Switch active audio to that slot |
Surround audio: 5.1 and 7.1 soundtracks use a stereo listening mix for playback and scrub preview. The center channel reaches both ears and surrounds retain left/right placement; LFE is omitted from this mix. Analysis uses the original decoded channels.
Dialogue listening: open Listen: Full Mix beside volume. Dialogue Focus initially reduces other channels by 9 dB; Center Only plays the verified center in both ears. Adjust center level (0 to +12 dB) and other channels (0 dB to muted). The same mix applies during playback and scrubbing, with source-peak headroom for boosts and original analysis intact. Full Mix restores the standard mix; new comparisons reset to it. Stereo or unverified layouts explain why center controls are unavailable. Voices can occur outside the center—check Full Mix for complete speaker coverage. Choosing a preset or finishing a mouse adjustment returns focus to Play/Pause so Space works immediately; the panel stays open for further adjustments. Escape closes the panel and returns to playback. Keyboard slider arrows still adjust levels.
Slow scrubbing: Audio preview continues while you move slowly within a video frame. It fades when you hold the pointer still or keep dragging beyond a timeline edge. With one visible video, sound stays anchored to the displayed frame; multi-video Grid follows the shared scrub target.
Chrome scrubbing: Supported SDR previews match the measured decoder output path. HDR and unsupported decoder or color combinations keep native seeking, which can be less responsive with sparse keyframes. On macOS, untagged/nclc inputs, full/unknown-range NV12 and HEVC retain native seeking. Other platforms keep available decoder paths for ordinary untagged AVC and nclc inputs. Untagged High 4:4:4 software AVC uses native seeking after the Linux control showed a color mismatch. A display-gamut change immediately retires an incompatible preview; returning to sRGB keeps native seeking until the files are reloaded. Returning to native seeking follows the current scrub position immediately. Direction changes preserve decoding that can still reach the requested frame, and cached frames are reused. Very long gaps between keyframes can still delay a first seek to an uncached position. Videos above 256 MiB, or unable to fit the shared 512 MiB encoded-input budget, use native video scrubbing. Playback and audio preview remain available. Video sample tables above one million entries also use native seeking.
Loop markers: Use I and O to set in and out points at the current playback position, or Shift-drag on a waveform to select a region visually. When both markers are set, playback loops between them. The progress bar turns orange and spans only the looped section. Non-looped regions are dimmed at 50% on waveforms and spectrograms. Drag the orange triangle markers to adjust them. Loop points are shared across all clips and stay put when you switch assets.
| Shortcut | Action |
|---|---|
| I | Set loop in-point at current time |
| O | Set loop out-point at current time |
| Esc 2× | Clear both loop markers (double-tap) |
| R | Restart at in-point (or beginning if no markers) |
| Key | Action |
|---|---|
| L | Load files |
| J / K | Slower / Faster |
| Z | Toggle zoom loupe |
| Shift+Z | Toggle linked zoom in Grid mode |
| [ ] | Resize zoom loupe |
| ← → ↑ ↓ | Switch asset |
| Alt+← / Alt+→ | Rotate active asset 90° |
| S | Toggle Stack / Grid |
| G | Toggle Stack / Grid |
| \ | Stack: Fit / Balance zoom toggle |
| 3 | Toggle Grid layout (Inline ↔ Offset) |
| Shift+1 / 2 / 3 | Toggle Grid slot visibility |
| F | Fullscreen |
| + | Zoom in |
| − | Zoom out |
| 0 | Zoom to fit screen |
| 1 | Zoom to 100% / toggle 100% cap |
| Space | Play / Pause |
| R | Restart |
| M | Mute |
| I | Set loop in-point |
| O | Set loop out-point |
| Shift+L | Toggle playback range: Sync / Full |
| Esc 2× | Clear loop markers |
| , | Step back one frame |
| . | Step forward one frame |
| V | Toggle video scopes |
| W | Toggle waveform / spectrogram |
| E | Cycle waveform / LUFS envelope display |
| Shift+W | Toggle linear / log frequency scale |
| P | Cycle spectrogram color palette |
| Y | Toggle seamless Tile Check |
| D | Toggle difference mode (Stack) |
| Shift+D | Cycle difference pair |
| Q | Toggle image wipe (Stack) |
| Shift+Q | Cycle image wipe pair |
| B | Toggle black & white |
| N | Toggle no-video mode (audio focus) |
| T | Cycle timecode format |
| C | Copy timecode |
| Shift+C | Open timecode format chooser |
| Shift+G | Grab frame to gallery |
| { } | Gallery: previous / next frame |
| H | Toggle shortcuts panel |
| ? | Getting Started help |
| Esc | Dismiss loupe / close panel |
Continuous is the standard preview for video and audio-only timelines. Dragging changes speed while preserving pitch; backward drags traverse the audio backward. Short previews also retain original pitch, independent of your selected normal playback speed. Click for a short preview, and hold still to fade out. There is no mode selector.
Scrub volume follows the selected source mix more closely in both directions, including backward speech that previously stayed quieter. Bounded compensation restores level lost during time stretching while retaining quiet/loud differences and stereo balance. Strong peaks and the correction limit can still leave some passages quieter. Normal playback and original analysis are unchanged.
Video listening copies use full-rate decoded audio, with surround dialogue folded into a separate stereo mix. Original waveform, spectrogram, and loudness inputs remain intact in both views. A single video follows its displayed frame; multi-video Grid uses the shared pointer timeline. Volume, mute, and intentional audio-start silence still apply.
Verified surround previews also retain a separate mono center for listening adjustments. This uses 50% more preview PCM within the same memory budgets, so long surround clips can reach the filtered short-preview fallback sooner. Dialogue Focus changes channel balance; Continuous can still soften articulation.
If Continuous is unavailable or exceeds its memory limit, a notice explains the automatic short-preview fallback. Long clips may use filtered, lower-rate preview audio. If no useful preview fits, normal playback and analysis remain available. Each video listening copy and the selected Continuous stream have separate 64 MiB limits; decoding and analysis use additional memory. Continuous can soften sharp sounds; use normal playback for final defect inspection.
The following settings are saved to your browser and persist across sessions and page reloads when browser storage is available:
Damaged settings recover individually, preserving valid preferences and shortcut entries. If browser storage is blocked or full, ordinary changes still work for this visit and a notice explains failed saves. Reloading may restore an older value or the default. Unreadable usage permission keeps sharing off; privacy and info-bar saves retain their own warnings.
By default, each asset displays an info bar in Grid or a header strip in Stack showing its slot label, FPS, duration, resolution, aspect ratio, and zoom. Videos also show their source audio format, verified layout or channel count, and sample rate when available, for example FLAC · 7.1 · 48 kHz. Hover for full details, including multiple audio tracks; the browser chooses the playback track. Unknown metadata and files with no audio track are identified explicitly. Listening presets do not change this source label; a transcoded video reports its newly loaded audio format. Recognized MP4 and WebM files need one readable audio track for decoded analysis and scrub audio. Multiple or unverifiable tracks keep browser-managed playback with a preparation notice; export the desired track and reload to enable those tools. Audio-bearing assets also show integrated LUFS, LRA, and true peak; audio files show sample rate, channels, bit depth/codec, and file size.
Open Customize info bar (the sliders icon in the header) and choose Images, Video or Audio. Start with Default, Minimal, Visual Focus, Audio Essentials or All Available; editing a preset creates a Custom profile. Show or hide fields and switch audio information together or individually. Arrange elements in Left aligned and Right aligned sections: drag their ⠿ handles to reorder or move between sections, with a line marking the drop position. Mouse and touch are supported; hold a touch or pen drag near the editor’s top or bottom edge to scroll to offscreen rows. The heading and close button stay visible. Focused handles use ↑ / ↓ to reorder and ← / → to change section. You can also select an element and change Section. Presets place Zoom on the right; keep it last there to anchor it at the far edge. Select a field to change text size, color or bold styling. Filename and file size are optional. Choices preview immediately, stay in this browser, and apply to Stack and Grid. Earlier custom profiles keep their existing order on the left. Reset profile restores only that media type's Default.
Add spacers after the selected row in the same section to group related items. Move them between sections, hide or remove them, and set their width from 12–48 pixels. Empty edge groups and adjacent gaps collapse within each section. Narrow bars compress gaps, preserve right-edge fields first, then put remaining selected fields into More (⋯ in compact Grid bars). Portrait bars can extend within their own cells to keep controls reachable; customized Stack information moves to its own header row when space is tight. Hidden fields stay excluded even after audio analysis arrives. Multiple source tracks are numbered within each selected field. A red ! retains the above −9 LUFS warning with custom colors. Slot controls, the image wipe pair chooser and managed host display retain their existing behavior. Escape closes More or the editor and returns focus.
Aspect ratios that don't match a known standard are shown in amber as a heads-up to check your export settings.
The frame counter detects frame rate automatically and snaps to the nearest standard rate (23.976, 24, 25, 29.97, 30, 48, 50, 59.94, 60). Video durations are shown as M:SS:FF (frames at the detected rate); audio durations use M:SS.cc (decimal centiseconds) since audio has no inherent frame rate.
In split modes, the info bar of the asset whose audio is currently playing is highlighted.
Compare your own images, videos or audio files. No prepared package is needed.
After a complete app version downloads, it can reopen offline. Updates do not reload an open comparison. If an update cannot load completely, use its Reload notice when online.
Use Customize info bar (the sliders icon) to choose information, arrange Left and Right sections, style fields, and add spacers. Start with a preset, then keep only the audio and visual details you need; keep Zoom in the right section to place it at the far edge. Image, video and audio choices are saved separately and apply to Stack and Grid.
Most comparisons use Load or drag and drop. Use the option below only for review.mp4 and warpdiff-package.json from the separate preparation tool.