Repository navigation
Releases: Poly-Haven/imgvwr
Release list
imgvwr v1.4.0
What's new
imgvwr is now an image-sequence player. Press Space (or right-click) on any frame of a rendered sequence and the viewer becomes a frame player — it finds the rest of the sequence on disk, decodes ahead into RAM across every core, and plays it back with a scrubbable timeline. Everything else keeps working while it plays, because it's the same viewer with the image changing 24 times a second, not a separate mode.
Features
- Sequence playback. Any file ending in a frame number (
shot_0047.png,render.1001.exr,frame12.jpg) plays as a sequence. A scrubbable timeline shows the playhead and a cache bar (blue = decoded and in RAM, red = missing/undecodable). It never drops a frame — if the machine can't keep up it runs slow and says so in red rather than skipping content. Gaps are real positions you can see, and the playhead steps straight over them. The directory is re-scanned as you watch, so a render writing frames beside you extends the timeline live. - Animations unified. GIF, animated WebP, and APNG play through the same transport —
Spacepauses/resumes, and their own per-frame delays drive the timing. - Frame-rate menu on the timeline. Click the fps readout to pick the playback rate — even while playing. Alongside the common rates (24, 25, 30, 48, 60, 120 and the NTSC fractionals) you can type your own in the Add field; it's remembered across sessions and removable with its ✕.
- Comparator slots hold whole sequences.
Ctrl+1–9on a sequence pins the whole sequence, not just the frame you're on. Recalling it (the number key or the flag) puts you back in the player. Switching slots while playing never stops playback — the new sequence keeps playing from the same frame number, so you can flip between two renders of a shot and watch them at exactly the same point. The last few sequences you switch away from keep their decoded frames in memory, so flipping back and forth is instant instead of re-decoding. - Diff two sequences live.
Alt+Nagainst a sequence slot while you're playing one plays both in sync and shows their per-pixel difference every frame (amplify it with exposure). OtherwiseAlt+Nstill shows the current frame vs the slot's image, as before. - Right-click to play / pause — the same as
Space. Right-drag still colour-picks, and a right-click on a guide still deletes it. - Everything keeps working while it plays: exposure, the view transform, panorama look-around, guides, the colour picker, the histogram, and the comparator. The pixel rulers auto-hide during playback (unless you have guides up) so they don't read like a second timeline.
- Faster decodes across the board from a reworked decode path (latency vs. throughput intents, and cheaper EXR/RAW hand-offs).
The target frame rate is set from the timeline's fps menu; the frame cache's share of memory is in Settings → Playback.
Fixes
- UI buttons now use real SVG icons instead of font characters, fixing a missing-glyph square (e.g. the rate menu's +).
- The borderless titlebar no longer flashes the native window frame during playback.
- A batch of playback correctness fixes: a rewritten or deleted cached frame no longer shows stale pixels; the directory keeps rescanning while paused; an all-holes timeline (a render still writing its first frames) holds instead of freezing; the Delete-confirm dialog can't fire under the running playhead; and a lone missing frame is always drawn on the cache bar however long the sequence.
Self-contained Windows x64 build of imgvwr. Extract the zip and run imgvwr.exe — no prerequisites required.
Because the binary is unsigned, Windows SmartScreen may prompt on first launch (More info → Run anyway).
imgvwr v1.3.1
What's new
Camera RAW files open 2.6× faster, with pixel-for-pixel identical results.
Performance
-
RAW loading is 2.6× faster. Opening a 45 Mpx NEF went from 4.24 s to 1.62 s (best of 3, 32-core machine). Two causes, both fixed:
- LibRaw was demosaicing on a single core. imgvwr already used LibRaw's own demosaic rather than rolling its own, but the LibRaw build it linked against had OpenMP disabled — the default for that dependency, and nothing reports it. Enabling OpenMP lets the demosaic use every core: 4.24 s → 1.83 s.
- A whole decoded frame was being copied for nothing. The RAW decoder allocated its own buffer, handed it over, and it was immediately copied again — ~727 MB of pointless memcpy per 45 Mpx frame, and double the peak memory. The decoder now writes straight into its final destination, and that conversion is parallel too: 1.83 s → 1.62 s. Peak memory while opening a RAW is roughly halved.
The remaining time is inside LibRaw itself (decompressing the raw data, demosaicing, and its own output pass).
-
Image quality is unchanged — verified, not assumed. Renders from this build are bit-identical to the previous release across every channel, and forcing the decoder to a single thread produces the same pixels as 32 threads. The demosaic algorithm was deliberately left alone: switching to a cheaper one would have been an easy extra speedup, but it would change how your photos look.
Notes
- Nothing to change in your workflow — RAW files simply open faster.
- Building from source now requires LibRaw's
openmpfeature (libraw[openmp]); this is pinned invcpkg.jsonand documented in the README. Without it you get the old single-threaded speed.
Self-contained Windows x64 build of imgvwr. Extract the zip and run imgvwr.exe — no prerequisites, vcpkg, or environment setup required.
Because the binary is unsigned, Windows SmartScreen may prompt on first launch (More info → Run anyway).
imgvwr v1.3.0
What's new
A tonal-analysis release. The F2 box grows a live histogram of what is actually on screen — and that graph doubles as a levels control, so you set your black and white points by dragging the data itself. Alongside it: a right-drag colour picker, clipboard copy, file deletion, and a reworked guide workflow.
Features
-
Histogram (
F2). Plots the tonal distribution of the image as displayed — after exposure, the OCIO view transform and output gamma — so it tracks every adjustment you make, live.- R/G/B are drawn as additive translucent areas: red over green reads yellow, all three read white, and no channel is hidden behind another.
- A 1px spike at the right edge counts everything past the top of the displayable range. Lower the exposure and you can watch it drain back into the graph.
- Isolate a channel with the
Channelsswatches and the graph follows it as a single white area — alpha included, which gives you a real histogram of the alpha channel. L/Sq/Logpick the vertical scale, for when a big flat region would otherwise flatten everything else.- The eye button measures only the visible region instead of the whole image, so you can zoom into an area and read just that.
It is measured on the GPU, because there is no CPU-side display transform to reproduce — the image is drawn through the very same shader the screen uses and binned by a compute shader. A large image is measured a slice at a time over the following moment, so within about half a second the graph has counted the whole image, without ever costing a dropped frame. On a driver without GL 4.3 compute support the graph is simply absent; everything else still works.
-
Levels (
F2). Two handles under the histogram set the display black and white points, stretching that slice of the range back out to full.The graph itself is the control, not just a picture of the data: drag either of its vertical edges to move that point, or drag anywhere else on the graph to slide both at once, keeping the range's width. Double-click a handle to reset it, the rest of the graph to reset both.
And because the graph is measured before the adjustment, it stays put while you drag — you are always reading the data you are cutting against, rather than a picture chasing your own handle.
Ctrl+Rresets levels along with the other adjustments, and undo/redo covers them like everything else. -
Colour-pick tooltip. Right-click and hold anywhere on the image, then drag: a tooltip follows the cursor showing a swatch of the pixel under it, its coordinates (plus longitude/latitude in panorama mode), and both its Linear value straight from the decoded file and its Display value after the full exposure / view-transform / gamma / clarity pipeline. Values are coloured by channel; single- and dual-channel images read
L(+A), and RGBA gets anArow. The auto-hiding toolbars stay out of the way while you are picking, so nothing covers the pixel you are inspecting. -
Ctrl+C— copy the view to the clipboard. Copies the composited window render, exactly as you see it (guides, minimap and all), ready to paste into anything. -
Delete— remove the current file. Prompts with the filename first (Enterconfirms,Escapecancels), then permanently deletes the file from disk and steps to the next image in the folder. -
Reworked guides.
Gnow shows and hides your existing guides rather than always adding more (it still adds the first one if there are none yet).Shift+Gadds the next subdivision level as before, andCtrl+Gpeels the finest completed level back off again. HoldCtrlwhile dragging a guide — moving one or pulling a new one out of a ruler — to snap it to 10 displayed pixels in 2D, or a whole degree in panorama mode. TheF2guide list now shows longitude/latitude in panorama mode, and a tooltip by the cursor gives you the same readout without needing the box open. -
Pin the titlebar. Settings → Appearance → Titlebar → Always show keeps the custom titlebar permanently visible instead of revealing on hover.
Fixes
-
Explorer now shows real file types. Setting imgvwr as the default viewer used to register a single shared file type, so every format showed up as "imgvwr Image" in Explorer's Type column — which also meant a folder could no longer be sorted by type to separate, say, RAW from JPEG. Each extension now gets its own proper type name (
OpenEXR Image,JPEG Image,Camera RAW Image (Nikon), …), with RAW formats sharing a prefix so they still cluster together in a sort. Types you had already defaulted elsewhere in Windows keep their old name until you re-pick imgvwr for them. -
No more loading-bar flash. A small image decodes in a frame or two, so the loading overlay would appear and vanish instantly on every navigation. It now waits 200 ms before showing, so only a load that actually takes a moment gets a progress bar.
Self-contained Windows x64 build of imgvwr. Extract the zip and run imgvwr.exe — no prerequisites, vcpkg, or environment setup required.
Because the binary is unsigned, Windows SmartScreen may prompt on first launch (More info → Run anyway).
imgvwr v1.2.1
What's new
Smarter panorama detection — imgvwr no longer treats every 2:1 image as a 360° panorama.
Changes
-
Content-aware panorama detection, HDR-only. Until now, any image with a 2:1 width-to-height ratio was opened in the interactive panorama sphere. That misfired on ordinary wide images — renders, crops, and side-by-side pairs that merely happen to be 2:1. Detection is now much stricter:
- Only HDR formats (
.exr/.hdr) are considered for auto-detection. 8-bit images (JPEG, PNG, WebP, …) always open flat, even at a 2:1 ratio. - For those HDR images, imgvwr also inspects the pixels: a true equirectangular panorama collapses its top and bottom rows to single points (the zenith and nadir, so those rows are near-constant colour) and wraps seamlessly from left to right. Only HDRs carrying those signatures open in the sphere.
Press
Pto view any image as a panorama by hand. The content test is effectively free — it samples a few hundred points along the image edges, so it costs microseconds regardless of resolution (measured 8–18 µs on a 24576×12288 HDRI) and reads no metadata. - Only HDR formats (
Self-contained Windows x64 build of imgvwr. Extract the zip and run imgvwr.exe — no prerequisites, vcpkg, or environment setup required.
Because the binary is unsigned, Windows SmartScreen may prompt on first launch (More info → Run anyway).
imgvwr v1.2.0
What's new in v1.2.0
Features
- Out-of-memory safety — running out of GPU memory no longer leaves a blank screen. imgvwr now frees what it can (cached images, then GPU textures) and retries, and if an image still won't fit it tells you in the centre of the screen instead of showing nothing. Unsupported files get a clear message too, naming the formats imgvwr can open.
- Store 32-bit float as 16-bit — a new Settings → Performance option that roughly halves the GPU memory used by HDR / EXR / float images (a small precision trade-off), helping very large images fit. Applies to images opened after you toggle it.
- Update notifications — the Settings dialog now shows the running version, and once a day quietly checks GitHub for a newer release. When one is available, a bright lime-green vX.Y.Z available link appears next to the version.
- Titlebar in fullscreen — the titlebar (Open, Settings and the window controls) is now reachable in fullscreen. Dragging it leaves fullscreen and brings the window to your cursor, and Maximize leaves fullscreen first.
- Calmer folder navigation — holding or mashing
←/→while an image is still loading no longer queues up extra steps or overshoots; pressing the opposite arrow cancels the in-flight load and stays put. A folder containing a single image now shows a No more images in this folder message instead of reloading it. - Tidier window placement — a fresh launch always auto-sizes the window to its image and centres it on the display you last used (or the one chosen in Open on display), rather than restoring a stale size and position.
Fixes
- No startup flash — the window now opens already framed, placed and cleared to your background colour, eliminating the brief flash of a default-size white window on the primary monitor before it settled.
Self-contained Windows x64 build of imgvwr. Extract the zip and run imgvwr.exe — no prerequisites required.
Because the binary is unsigned, Windows SmartScreen may prompt on first launch (More info → Run anyway).
imgvwr v1.1.0
What's new in v1.1.0
Features
- Accurate camera RAW — RAW photos (NEF, CR2 / CR3, ARW, DNG, RAF, ORF, RW2, PEF, and similar) are now developed with LibRaw to scene-linear float with a linear camera response — camera white balance and the camera→sRGB matrix, but no "make it pretty" tone curve — so you see the sensor data as it is. White maps to 1.0 and highlights keep their headroom, so lowering the exposure (or a Filmic / ACES view transform) recovers detail in regions that first looked clipped. The metadata box (
F2) shows camera, lens, ISO, shutter, aperture and focal length. RAW doesn't auto-expose by default; enable Auto-expose RAW photos on open in Settings. - Clipping overlay (
C) — animated diagonal stripes mark pixels at or near the format's maximum value, judged on the original data (not the adjusted view). Each channel is evaluated independently: red stripes where red clips, white where all three clip, and mixed colours in between. Detection is format-aware — 8-/16-bit, 16-bit-half EXR and RAW all flag correctly, while true high-dynamic-range float never falsely flags — and the margin is configurable in Settings. - Animated images — GIF, animated WebP and APNG now play automatically and loop; press Space to pause / resume.
- Default View Transform — a new Settings option (default Filmic).
Tnow toggles Standard ↔ your chosen default (rather than whatever you last picked), and it's the default applied to HDRIs on open. - Hold-to-adjust — holding the exposure (
,/.), gamma (Ctrl+,/Ctrl+.) or clarity ([],;') keys now ramps continuously for larger adjustments, and the whole ramp collapses into a single undo step. - Crisp panorama pixels — panoramas magnified past ~200% now sample nearest-neighbour for sharp pixels, matching the 2D behaviour.
- Redesigned Settings — organised into labelled sections (Display & view, Appearance, On open, Review tools, System) in a scrollable panel, and the window grows to fit it so it's never cramped inside a small image.
Fixes
- The
Tview-transform toggle no longer drifts to an unexpected transform (e.g. ACES) — its target is now the explicit Default View Transform setting. - Recalling a comparator slot by keyboard now re-fits the window to the image, matching arrow-key navigation.
Self-contained Windows x64 build of imgvwr. Extract the zip and run imgvwr.exe — no prerequisites required.
Because the binary is unsigned, Windows SmartScreen may prompt on first launch (More info → Run anyway).
imgvwr v1.0.2
What's new in v1.0.2
- Auto pixel filtering — a 2D image magnified past 200% now samples nearest-neighbour for crisp pixels; everything else stays bilinear. Press
Ito pin a manual choice (it persists). - Fullscreen — sub-screen 2D images show at native 1:1 instead of being magnified to fit, and the mouse cursor auto-hides after a few idle seconds (staying hidden across image navigation until you move it).
- Titlebar — when the window is too narrow for every control, elements now hide by priority instead of overlapping (close > filename > minimize > settings > maximize > app-icon > open); the filename truncates with an ellipsis.
- Open dialog now starts in the folder of the image you're currently viewing.
Fixes
- Removed a dead click-zone spanning the window to the left of the comparator slot flags.
- Edge panels and the navigation minimap now reveal only on real mouse motion, not when the window resizes under a stationary cursor.
Self-contained Windows x64 build of imgvwr. Extract the zip and run imgvwr.exe — no prerequisites required.
Because the binary is unsigned, Windows SmartScreen may prompt on first launch (More info → Run anyway).
imgvwr v1.0.1
What''s new in v1.0.1
Features
- High-quality 8-bit downscaling — LDR images are now minified with a separable Lanczos-3 filter (sharper than bilinear, mip-prefiltered so it stays alias-free at any zoom-out). Higher bit depths and all upscaling stay on bilinear.
- Background backdrops (
B) — cycle the backdrop: your configured colour → black → grey checkerboard (reveals transparency) → white. The default background is now a neutral 25% grey. - Colour management — the View-transform control is now two clean dropdowns, Display and View (the View list follows the selected display), instead of a nested sub-menu cramped against the screen edge.
- Help dialog now shows the version and a link to the GitHub repo.
Fixes
- Panorama minimap navigation — clicking/dragging in the minimap was inverted on both axes and offset; it now tracks the cursor correctly.
- 8-bit Lanczos + wrap (
W) — fixed vertical tiling stretching the top edge instead of repeating.
Self-contained Windows x64 build of imgvwr. Extract the zip and run imgvwr.exe — no prerequisites required.
Because the binary is unsigned, Windows SmartScreen may prompt on first launch (More info → Run anyway).
imgvwr v1.0.0
imgvwr v1.0.0 — a minimal, GPU-accelerated image viewer for HDR panoramas and standard images, for Windows.
Highlights
- Two display modes — 2D pan/zoom for ordinary images; rectilinear equirectangular projection for 360° panoramas (auto-detected; press P to toggle).
- Full-quality HDR — very high resolution (24k+) 32-bit float images are uploaded at full bit depth, tiled across GPU textures when they exceed the max texture size.
- OCIO v2 colour management — bundled AgX/Filmic config; view transforms selectable from the metadata box.
- Navigation minimap (M) — bottom-right overview with a live view-region box; works in 2D and panorama, click/drag to jump.
- Review tools — Clarity (local contrast), sharpness checker, per-channel isolation, HDR auto-exposure, pixel/degree rulers and Photoshop-style guides, and an image comparator with per-slot difference.
- Per-image 90° rotation (↑ / ↓) and undo / redo (Ctrl+Z / Ctrl+Shift+Z) of edits.
- Minimal UI — the image is the window; the borderless titlebar, bottom adjustment panel and metadata box all auto-hide.
Press H in-app for the full keyboard & mouse reference.
Install
Self-contained Windows x64 build — extract the zip and run imgvwr.exe. No prerequisites required.
Because the binary is unsigned, Windows SmartScreen may prompt on first launch (More info → Run anyway).