# QuickImageViewer
(qIV)
**A fast, GPU-accelerated image viewer for Windows.**
[](https://icyhoty2k.github.io/QuickImageViewer/)
[](https://icyhoty2k.github.io/QuickImageViewer/shortcuts.html)
[](https://icyhoty2k.github.io/QuickImageViewer/qiv-remote.html)
[](https://icyhoty2k.github.io/)
Direct2D, WIC and native Win32. One portable sub-10 MB EXE — no installer, no
telemetry, no background service.
Culls a photo shoot in one pass — **[one keystroke per picture](#cull-mode)**, keep or
reject, and the rejects move together at the end. Nothing touches the disk until you say so.
Drives other copies of itself over plain TCP, mirrors one screen to many, and has
**[an Android app](#qiv-remote--the-android-app)** that turns any phone or tablet into a
remote control, a second screen, or a **photo frame your PC drives** — as many of them at
once as you have devices lying around.
[](https://github.com/icyhoty2k/QuickImageViewer/releases/latest)
[](https://github.com/icyhoty2k/QuickImageViewer/releases)
[](#download)
[](LICENSE)
[](https://github.com/icyhoty2k/QuickImageViewer/stargazers)
[](#qiv-remote--the-android-app)
[](https://github.com/icyhoty2k/QuickImageViewer/releases/latest)
[](https://github.com/icyhoty2k/QuickImageViewer/commits)
[](https://github.com/icyhoty2k/QuickImageViewer/pulse)
[](https://github.com/icyhoty2k/QuickImageViewer/issues)
[](https://github.com/icyhoty2k/QuickImageViewer)
[](https://github.com/icyhoty2k/QuickImageViewer)
Windows 10 & 11 — one portable EXE, no installer · Android 13+ — free to install, no ads, no account
[](https://github.com/sponsors/icyhoty2k)
[](https://ko-fi.com/ivanhristovyanev)
---
**Contents** — this README is long; jump straight to what you need.
- ⌨ **[Every keyboard shortcut →](https://icyhoty2k.github.io/QuickImageViewer/shortcuts.html)** — the complete reference, on its own page, generated from the app's own help panel · 🌐 **[Website](https://icyhoty2k.github.io/QuickImageViewer/)** · 📱 **[qIV Remote](https://icyhoty2k.github.io/QuickImageViewer/qiv-remote.html)** · 👤 **[icyhoty2k](https://icyhoty2k.github.io/)** — the developer site
- [Preview](#preview) · [Download](#download) · [Format Support](#format-support) · [How qIV Compares](#how-qiv-compares) · **[qIV Remote for Android](#qiv-remote--the-android-app)**
- **Features** — [Performance](#performance) · [Navigation](#navigation) · [Sorting](#sorting) · [UI Panels](#ui-panels) · [Offline Reverse Geocoding](#offline-reverse-geocoding) · [Thumbnail Strips](#thumbnail-strips) · [File Management](#file-management-on-thumbnail-strips) · [History Panel](#history-panel) · [Slideshow](#slideshow) · [Cull Mode](#cull-mode) · [Color Effects](#color-effects) · [Overlay System](#overlay-system) · [Window & Chrome](#window--chrome) · [Mouse Shortcuts](#mouse-shortcuts)
- [System Tray](#system-tray) · [Dedicated Screens](#dedicated-screens) · [Remote Control & Mirroring](#remote-control--mirroring) · [Command-Line Arguments](#command-line-arguments) · [Architecture](#architecture) · [Build](#build) · [Reporting a Crash](#reporting-a-crash)
- [Found a bug? Want something added?](#found-a-bug-want-something-added) · [Support the project](#support-the-project) · [License](#license) · [Contributing](#contributing)
---
## Preview
| | |
|:---:|:---:|
| 
**Your phone becomes the viewer's remote, a second screen, and a photo frame your PC drives.**

[](#requirements)
[](#a-private-network-and-nothing-else)
[](https://play.google.com/store/apps/details?id=net.icyhoty2k.qivremote)
Point it at your PC over your own network and drive qIV from the sofa, the far side of a
meeting room, or anywhere the keyboard is not. It is a real protocol client, not screen
sharing: it speaks the same verbs `netcat` does, so it stays in step with the desktop
instead of streaming pixels at it.
### Photos travel both ways
This is the part a remote control usually cannot do at all.
| Direction | What travels | Why it is built that way |
|:---|:---|:---|
| **Desktop → phone** — live preview | The current picture, scaled and re-encoded as JPEG **before it leaves the PC** | 25–40× fewer bytes than the original, and a far smaller decode on the phone |
| **Desktop → phone** — Save | The **original file**, byte for byte, into `Pictures/qIVRemote` in your gallery | Save asks for the original *separately* rather than keeping the preview — a re-encoded JPEG is not the file you meant to keep |
| **Phone → desktop** — push | Your photo's own bytes, base64 in chunks | Works to a PC that has never seen the photo and cannot read your phone's storage |
A pushed photo appears on the desktop **once**, over whatever is up. It changes no folder,
no sort order, no playlist position, and a running slideshow keeps running with it
occupying a single slide. Nothing has to be paused first, and nothing is left behind.
Saving to the gallery needs **no storage permission** — the app publishes through
MediaStore, and the entry stays invisible until the transfer finishes, so a gallery
scanning mid-transfer can never show you a half-written thumbnail.
### Turn any spare screen into a photo frame
The same connection runs the other way round. Instead of using the phone to drive the PC,
put it on a stand and let the PC drive **it**.
Open the Fullscreen screen and the device shows whatever the viewer is showing — nothing
else. No toolbar, no buttons, no chrome. Start a slideshow on the PC and the tablet on the
shelf follows it, picture for picture, for as long as you leave it there.
| | |
|:---|:---|
| **An old tablet becomes a photo frame** | The one in a drawer with a cracked case is a perfectly good display. Prop it up, point it at the PC, start a slideshow. |
| **A phone becomes a second monitor for photos** | Cull on the big screen, review at arm's length, hand it to someone across the table. |
| **The PC stays the library** | Your folders, your sort order, your filters, your drives. The screen is a window onto the machine that already has all of it. |
It keeps up **without being asked**. The viewer announces every picture change — including
the ones a slideshow makes on its own, where no key was pressed and no command was sent —
and the screen fetches the new image the moment it hears. Nothing polls, nothing lags a
frame behind.
**It sends nothing back.** The Fullscreen screen has no Next, no Previous, no toolbar, and
that is deliberate rather than unfinished: a control that could nudge a running
presentation from a phone in somebody's pocket is a hazard, not a feature. It asks for two
read-only things and nothing else. Tap anywhere to leave.
What crosses the network is a **preview** — scaled to that screen's size and re-encoded as
JPEG on the PC before it is sent, not the original file. A 6 MB photo shown on a tablet
moves as a few hundred kilobytes. That is what makes it comfortable over Wi-Fi, and what
keeps a frame refreshing all evening from being a bandwidth decision.
**As many screens as you have devices.** Every connected device watches independently, so
one PC can feed the tablet in the kitchen, the phone in the hallway and the spare monitor
on the desk at the same time — all following the same library, all updating together. There
is no per-screen licence, because there is nobody to license it from.
That also makes it **signage and advertising that costs nothing to run**: a shop window, a
waiting room, a menu board, a studio wall. One PC you already own, screens you already
have, your own network. No subscription, no cloud account, no per-display fee, and no
service that can raise its price or shut down and take the wall with it.
And it runs **unattended**, which is the part that decides whether a display is a product
or a chore. The viewer already has every piece:
| | |
|:---|:---|
| **Starts with the machine** | `-runOnStartup`, or the tray toggle. Power comes back after a cut and the wall comes back with it — nobody drives to the shop to click anything. |
| **Ignores everybody** | Kiosk lock (`-lock`) makes the screen ignore every key and every click, so a passer-by cannot pause your loop or open a panel. The tray is the only way back in. |
| **Stays awake** | Keep display awake blocks the screensaver and display sleep, and releases the hold the moment the window hides — a viewer sitting in the tray never keeps a machine up. |
| **Loops by itself** | Slideshow with interval, loop and shuffle, and 21 GPU transitions. Point it at a folder and drop new artwork in — no playlist to rebuild, no re-upload, no publish step. |
Changing what a wall shows is **copying a file into a folder**. That is the whole workflow.
No cloud account, no subscription, no photos uploaded anywhere. The pictures go from your
PC to your screen across your own network, and stop there.
### What else it does
|
**Drive the viewer**
Next / previous, first / last. Slideshow with its interval, pause, loop and shuffle.
Zoom, rotate, flip. All five view modes. Colour effects. Fullscreen, always-on-top,
panels and the on-image overlay.
**Jump anywhere**
The viewer's folder history comes down to the phone — tap a folder and the desktop goes
there.
|
**Presentation mode**
The current picture and two large next/previous buttons, sized to press without looking.
Built for talking to a room rather than staring at a phone.
**Follow the desktop**
Bind the connection and the preview keeps itself up to date — when someone changes the
picture at the PC, your phone shows it.
|
|
**As many PCs as you like**
Each saved machine keeps its own address, port and optional password. Tap one to connect.
|
**Demo mode**
Every screen runs against a viewer that does not exist, so you can see the whole app
before installing anything or opening a port.
|
### A private network, and nothing else
The app talks only to the computer whose address you type. There is **no account, no
cloud, no analytics, no advertising**, and nothing is ever sent to the developer — there
is no back end to send it to.
When your PC requires a password it is verified by challenge–response, so **the password
itself never crosses the network**. Off the loopback the connection is TLS with a pinned
certificate, and qIV's own AllowList (`F9`) still decides who may connect at all.
Passwords you choose to save stay in app-private storage on the phone.
### Requirements
It is a companion app and does nothing on its own — the same way a TV remote does nothing
without the TV. You need **QuickImageViewer running on a Windows PC with its Local Server
enabled** (`F9` in qIV), and the phone on the same network. The app's About screen walks
through the setup.