as simple as it gets for an image viewer
- look at the comparison between plainIMG and Photos (opens images almost twice as fast!):
- the image window is pinned on top of every other window by default (no need to install PowerToys or other software!)
- lightweight (the executable is under 3MB!)
- you can drag the window around using the actual window (the client area) instead of just the title bar!
- other oddly specific features which arent available in most other image viewers, such as toggling antialiasing (see crisp pixels), stretching images and more.
- install the installer from the latest release. (
plainIMG_vN.N.N_installer.exe
) - run it and it will install the app, and also add plainIMG to start menu. if you click the "Set plainIMG as the default image viewer" option, jpg, jpeg, png and bmp file extensions will be associated with plainIMG.
- now that it is installed, you can open an image, select plainIMG and click "Always".
- alternatively, you can go to settings, default apps, and set common image formats to plainIMG.
- when you are done, you can use plainIMG by clicking on the image (or using "Choose an App on your PC")
- or by running the executable and opening the picture with
Right Click > Open Image...
(or just letterO
) - or by running it through the terminal with first argument being the file path
- or by dragging a picture over the executable
- or by running the executable and opening the picture with
the main menu is opened with Right Click
.
you can close the window with Right Click > Quit
, Q
, ESCAPE
, or just by closing the window.
to make the window be the size of the image, press R
.
to make the window be over other windows and also dont go behind other windows when unfocused, press T
. this is enabled by default.
to see the rest of the features, look down below.
to support the developer, you can appreciate the project by giving it a star in the GitHub repository. thanks!
- open an image using in-app file selector with
O
,- or give it the image path as first cli argument,
- or as a hidden windows feature, drag an image over the executable and it will consider it as the first cli argument.
- close an image with
C
, which puts you back into the starting menu. - open actions menu with
Right Click
, which shows all of the actions which you can do and their corresponding hotkeys. - make the windows stay on top of other windows using
T
. this basically pins the window, and it wont disappear when you unfocus out of the window. enabled by default. - use a black background instead of white one with
B
. useful for png files. disabled by default. - keep the aspect ratio of the image with
A
. if you disable this, it will stretch the picture across the entire window. enabled by default. - resize the window to be the image's size with
R
. note: only works if keep aspect ratio is enabled. - when working with small resolution images, antialiasing usually ruins the image, so disable it with
L
. antialiasing is enabled by default. - the window is also draggable in client area (the area other than the title bar), but be aware that native windows functions like window snapping wont work here. they only work with the title bar provided by windows.
- quit the app by closing the window, pressing
Q
orESCAPE
. - the link to this github repository is located inside the
About
menu. - WARNING: as of now, this project is only available on Windows. if this project gets enough attention, i will make a version for macOS and possibly even Linux.
- note: when you click the "Set plainIMG as the default image viewer" option in the installer, it automatically sets plainIMG as default for: .jpg, .jpeg, .png and .bmp; if you want to extend this list, update file extension defaults yourself in windows settings.
- TIFF, AVIF and WEBP are not supported.
- animated GIFs are not supported.
- your settings (keepAspectRatio useBlackBg useAntialiasing alwaysOnTop keepWindowAspectRatio showImageName) are stored inside
settings.txt
. i serialize these bools into string of 0's and 1's, where 0 is false, 1 is true. the order of those numbers matters here. the order was specified at the start of this point. anything other than 0 or 1 is considered a comment and just ignored.
when you start up plainIMG without giving it an image
in black background mode
example of showing an image
when you keep image aspect ratio, with black background
when you DONT keep image aspect ratio, it stretches the image to the window size like this
disable antialiasing so you can look at crispy pixel art textures without all the blur
the right click menu as of v1.2.4
VirusTotal check (as of older versions)
VirusTotal check (as of v1.3.2)
sometimes, i just want to open an image, and pin it somewhere on my display.
i can open images with other progrsms like built-in media app or some external one,
but there is one thing i always encounter: application window ui
a lot of the times, the ui gets in the way of me just SEEING the image.
so with this tool, i fixed just that!
using this tool, you can view the image easily, because it covers the entire window!
so now, without any obtrusive ui, you can view your images.
you can also make the window be always an top, so its actually usable (inspired by AlwayOnTop module in PowerToys).
at first, i made this in python, but pyinstaller executables were always flagged by antiviruses, so i decided to remake the project in C with SDL.
this not only makes the project not false flagged by antiviruses, but also more lightweight!
this project is also my first, fully finished C project, which i am quite proud of.
(the actual exe is under 1 MB! but the SDL3 dll is almost 5 MBs...)
licensed under MIT. credits to microsoft for the retro windows icon (icon.ico).
-
[[[--MAIN THINGS--]]]
-
add "copy image to clipboard" and "paste image from clipboard" (TOP PRIORITY because it is most useful)
-
add folder exploration
-
add image zooming
-
add text rendering over the image, so you can make simple text overlays
-
add support for animated GIFs using IMG_LoadAnimation
-
add support for WEBP (probably never)
-
add a reminder when there is a new version of this app (possibly with an auto-updater)
-
[[[--OTHER THINGS (may be outdated)--]]]
-
fix the fact that sometimes, when you resize window to image, it just doesnt properly resize, and it keeps on resizing
-
make a lite mode where the title bar will be hidden, so you will be able to see just the picture
-
fix the client area dragging being a bit choppy (probably isnt a bug because its barely noticeable, and its probably not fixable)
-
possibly make an .msi installer (probably not, its extremely complicated for C)
-
make an inno setup installer
-
add icon to the executable with windres
-
build this exe statically (basically you need to have .a's instead of .dll's)
-
add a global VERSION.txt file which will be used everywhere (main.c, installer.iss, tag_release.sh etc)
-
add the image basename when an image is opened to the window's title
-
make the app notify you if it couldnt open an image instead of just silencing it
-
optimize the app so that it wont rerender every time, even though there are no changes
-
reduce the cpu usage spike when dragging or resizing the window
-
save menu configurations to some text file, so that it will save between launches
-
possibly a bug: when you open an image and "keep image aspect ratio" is not turned on while "keep window aspect ratio" IS turned on, the image stretches to the default window size so the window aspect ratio is wrong. i wanted to fix this at first, not knowing that i can fix this by just modifying the settings, but even then i thought that making a whole minor update just to fix this one bug is just too much. so this will remain like this for now.
- SDL3 is included inside this repository, so just clone this repository
- you need
vs c/c++ redistributable
andgcc
installed - run
./build.sh
, and it will build everything for you with gcc insidebuild/debug
. run with./build/debug/plainIMG.exe
(or./build.sh -a
for short) - if youre not statically building with
-s
, you NEED to haveSDL3.dll
andSDL3_image.dll
located in the same directory as the executable. - build the resoures (icon + welcome text) with
windres src/plainIMG.rc -O coff -o src/plainIMG_rc.o
libraries used: SDL 3, SDL3_image 3,
you need inno setup installed to build for release, and it should be in the PATH.
when you want to build a new release, edit VERSION.txt
with the version format being vX.X.X
.
to build all the things for release, run ./release.sh
. it will create build/release
, where build/release/upload
is the things you would need to upload to github release.
mark your release with ./tag_release.sh
. it will automatically push it. make sure that you correctly specify the version, and it's not a duplicate
if you want to update SDL or SLD*Image, you would have to build static binaries (*.a
) yourself.
_this section wont be specified in great detail, and wont be kept up to date, just because many libraries handle static building in their own way, and its really painful to figure them all out and write them down here.*
git clone https://github.com/libsdl-org/SDL.git && cd SDL
mkdir build && cd build
cmake .. -DSDL_STATIC=ON
cmake --build .
after that it will make a libSDL3.a
. copy it to plainimg2/src/SLD3/lib
.
git clone https://github.com/libsdl-org/SDL_image.git && cd SDL_image
git clone https://github.com/libsdl-org/SDL.git # SDL_image requires SDL as a dependency
git submodule update --init --recursive
mkdir build && cd build
cmake .. -DBUILD-SHARED-LIBS=OFF
cmake --build .
after that it will make a libSDL_image.a
. copy it to plainimg2/src/SDL3_image/lib
.
SDL_image will also give errors where certain libraries are not found.
these libraries are required for other file formats like WebP to work.
i tried building them myself statically but its just very painful to do.
that is why im not planning on adding support to WebP, TIFF and other unsupported formats.