383

The terminal is very fast and convenient way to quickly access directories and files (faster than find and click on the directory).

One thing that it cannot show in text-mode is "pictures".

What is a best way to view pictures (like you see images thumbnail in Nautilus) when you are working in the terminal (e.g. command nautilus or any program - but should be fast and convenient)?

7

32 Answers 32

331

The way to "double-click" on a file from the command line is xdg-open.

If you're on Gnome (probably, if you're using Nautilus), you can use eog directly, or any other image program (feh is quite good).

feh <image-name>      

If you want to consult image-name file easilly.

13
  • 1
    feh even works with multiple URLs! May 21, 2016 at 15:16
  • 11
    @Searene Yeah! Long life to feh. But I observe that feh has no zoom or any other function whatsoever. eog, however, is also lightweight and, in addition, it can zoom, rotate and browse the images in a folder :). Just for the people to know before they make a choice. Jun 1, 2016 at 13:19
  • 3
    although eog is preinstalled in my ubuntu os, I still prefer feh coz it can be closed by q while eog and xdg-open can be closed by esc.
    – Evan Hu
    Jun 30, 2016 at 13:17
  • 10
    Actually, feh does have zoom, fullscreen, scroll etc. look at the man page
    – dalimama
    Sep 11, 2016 at 6:31
  • 2
    @pikachuchameleon you'll need to set up an X11 environment and forwarding. Have a look at these instructions
    – Kevin
    Apr 2, 2018 at 17:27
165

If you happen to have installed imagemagick, you can use its very handy display command-line tool.

display path/to/picture.png
4
  • 5
    I personally prefer feh, but display is usually installed on web servers, where feh or other image browsers aren't installed.
    – pevik
    Dec 7, 2014 at 19:34
  • 4
    display works great on Ubuntu 16.04 LTS Desktop and also on stock Raspbian. No installs required. TNX from 2017
    – SDsolar
    Jul 22, 2017 at 19:55
  • 1
    Great, works even with stream: curl https://example.com/image.jpg | display
    – Pavel
    Feb 16, 2018 at 21:26
  • to install imagemagick, sudo apt install imagemagick-6.q16hdri, I used it to open .ppm file, display path/to/file.ppm
    – bim
    Jul 18, 2022 at 16:06
148

I usually run python -m http.server 8080 (in python2: python -m SimpleHTTPServer 8080) from a folder containing the image and view it from the browser at localhost:8080/path/to/image.jpg. Works great to browse and look at different image and text files in that same directory.

Edit: This method also works for remote boxes. Just run the python server as above, and if the ports are open you can connect to myserver.com:8080/path/to/image.jpg. If the server does not expose ports, you can set up an ssh tunnel with ssh me@myserver.com -N -L localhost:8080:localhost:8080 and then view the images from your local browser at localhost:8080/path/to/image.jpg. Note this http interface is much faster than ssh -X.

7
  • 15
    Clever! Works like a charm and there's no need to type /path/to/image.jpg. Just open localhost:8080 and click on the filenames.
    – Roger Dahl
    Mar 5, 2015 at 4:49
  • 1
    Regarding the last paragraph, you can also add tunnels easily using PuTTY configuration! Then you can access it through a browser. Awesome!
    – ADTC
    Oct 30, 2015 at 8:45
  • 30
    I needed python -m http.server with Python 3
    – drstevok
    Sep 8, 2016 at 21:34
  • x-www-browser /path/to/image or firefox /path/to/image Jun 2, 2017 at 9:08
  • awesome trick! exactly what i was looking for.
    – Neara
    Dec 2, 2018 at 12:26
137

I have created a tool that uses various unicode block graphics characters to improve the resolution (compared to the canonical 2 pixel per characterapproach taken by other solutions posted here). It also automatically displays images in a thumbnail mode if multiple images are provided as input.

Installation:

git clone https://github.com/stefanhaustein/TerminalImageViewer.git
cd TerminalImageViewer/src/main/cpp
make
sudo make install

Usage:

tiv <image(s)>

More details at the github project: https://github.com/stefanhaustein/TerminalImageViewer

Example screenshot:

Screenshot

13
  • 23
    Not sure why the downvote, guess because of self-promotion? I think it's the best tool for the job though and the question is still relevant today. Jul 9, 2017 at 22:39
  • 1
    a snap will be easier for everybody: no ppa to setup for you, no ppa to add for the user -> snapcraft.io Nov 2, 2018 at 15:56
  • 1
    Does not compile on Ubuntu 16.04 with gcc
    – axolotl
    Mar 20, 2020 at 7:31
  • 2
    @MehdiLAMRANI please file an issue on github with os/compiler/platform details Apr 21, 2020 at 8:06
  • 1
    The snap has bugs. It's still recommended to clone it from git. May 2, 2020 at 22:45
35

No dependencies, one C file, one header file: imcat

Works on linux, macos, windows. Automatically scales to terminal width, with quality down-sampling.

enter image description here

4
  • 2
    any idea why I can't find this with apt-get? Sep 3, 2019 at 20:41
  • 2
    Because it is a repository on github. clone the repository on your PC and type 'make' in the folder, that you have downloaded
    – Dave
    Nov 14, 2020 at 22:37
  • 1
    @SridharSarnobat For now you can build from source, or get a pre compiled package using apt if you use my PPA.
    – Bram
    Nov 14, 2022 at 16:12
  • Thanks for the response. Hmmmm, I'm having some issues with your repos getting ignored even when I use sudo apt-get update --allow-insecure-repositories. But I was able to build from source (I wish all build from sources were this easy!). I'll have to see whether it causes memory leaks like iTerm's image viewer. Thank you for creating this. Nov 16, 2022 at 20:03
32

I guess feh would be the one you are looking for.

Although popping out a terminal-like window for picture display as mplayer does for video playing, Feh is still considered as a terminal-based picture viewer due to its command-intensive control style.

27

If you're in pure terminal with framebuffer activated, I'd recommend fbi. It's always in my after-install to do list.

Otherwise, eog is the default picture opener in Gnome, as Kevin mentioned. Also, Shotwell seems to open pretty fast for me... I'm pretty sure there are hundreds. :-)

2
  • 1
    Thanks for this one - it's news to me. As an aside, googling lands me at fim's (self-styled framebuffer image viewer improved ) manpage only a few search results in. Dont know yet the difference.
    – mikeserv
    Mar 23, 2014 at 6:42
  • Damn, it doesn't work over ssh. I get not a linux console Jun 13, 2022 at 4:56
24

If you're on OS X, iTerm 2 supports displaying inline images:

iTerm2 inline image

As you can imagine, this can be highly useful when you just want to display an image without going in and opening up Preview.app or having to open the Finder to the image and hitting spacebar on the image.

The feature is documented at iTerm2's feature page

2
  • 1
    It's really laggy in my experience. Mar 11, 2018 at 2:22
  • 4
    Works fine for me. No issues with lag. MBP/OSX 10.12.6 Sep 21, 2018 at 19:00
19

Surprised that the Terminology terminal emulator is not among the answers. As easy as tyls and then clicking on an image:

enter image description here

or someting like tycat image.png, for example:

enter image description here

Plus a lot more. An old video, almost 3 years ago, demonstrating Terminology 0.3: https://www.youtube.com/watch?v=ibPziLRGvkg#action=share.

2
  • 2
    If you need to view a single known image, tacat or typop are preferred. First one will embed image into terminal output, second will show it in popup window. Mar 26, 2021 at 18:51
  • Great suggestion. If only it worked more smoothly over ssh X11. Jun 13, 2022 at 4:55
13

w3m's imgdisplay library is able to display images directly. It only works on some terminal emulators such as Xterm and URxvt.

ranger is a file browser that makes use of the library to display previews. Add this to ranger's configuration file to enable the feature:

set preview_images true
13

The kitty terminal can display inside the terminal with the icat "kitten"

E.g.

kitty +kitten icat /path/to/image

Example:

enter image description here

The kitty documentation suggests creating an alias, e.g.

alias icat="kitty +kitten icat"

So that then you can simply do:

icat /path/to/image

11

From the terminal? Why not in the terminal: cacaview might be the fastest. By default it's fastest if the terminal has no graphics.

In Debian: sudo apt-get install caca-utils

9

Actually, there is a way to show a PNG file in a terminal in text-mode, using picture-tube:

screenshot

You can look at the project on GitHub.

The image is of course an approximation of the actual image, given the fact that the smallest pixel is a character - try to have a look at the result in a text editor, you will see a huge number of color codes.

You can install the tool like this (assuming you have already installed node/npm): npm install -g picture-tube

8

There is a tool here called catimg that works really well:

https://github.com/posva/catimg

Also has deb packages on https://launchpad.net/ubuntu/+source/catimg

7

Another great terminal-based picture viewer is fim, which is a improved fbi with a vim-like control system.

2
  • Good solution, but didn't show a way to do it.
    – Goddard
    May 18, 2019 at 22:27
  • 3
    I tried this. It opens a separate X window over SSH in case anyone's wondering. What would be ideal for me is an inline terminal display that works over SSH but I don't think there is a good one. Sep 3, 2019 at 20:51
5

This is a 4 year-old-question but I found that people still look at it. So, today I would like to answer my own question specifically only for iTerm2.

At first time I asked this question. The term of "fastest" I was thinking of viewing image as fast as cat command displaying text. So, today I found the answer on iTerm2, which are the two handy commands name imgcat and imgls.

To use them, the first let's install iterm2-nigthly:

$ brew cask install iterm2-nightly

then visit the website:

https://github.com/olivere/iterm2-imagetools

and install imgcat and imgls commands:

$ go install github.com/olivere/iterm2-imagetools/cmd/imgcat
$ go install github.com/olivere/iterm2-imagetools/cmd/imgls

So, I really love them and also hope this will be useful for you all!

3
  • This is very useful, so thanks for answering this 4 years later. Works like a charm, but might want to include the install go step (brew install go) for those that don't have it yet.
    – james-see
    Aug 1, 2016 at 3:17
  • @jamescampbell, you don't need to install go to get the imgcat and imgls scripts. They're provided to you by iTerm's developer himself here: iterm2.com/documentation-images.html, and these are bash scripts.
    – akshay
    Nov 23, 2016 at 17:48
  • 3
    what is the closest option to imgcat on Linux? I'm trying to switch atm
    – rien333
    Jul 18, 2018 at 19:24
5

The Ranger file manager enabling the image-preview in settings. Ranger file manager with image preview

2
  • Ranger was already mentioned 5 years earlier Dec 22, 2022 at 12:09
  • and ranger appears to launch another program, it may work with inline, but I see it running the default image viewer: feh or imageviewer
    – jringoot
    Mar 29 at 11:31
4

In linux you can install gnome-open.

# In Debian flavors

sudo apt-get install gnome-open

Then create an alias:

alias open='gnome-open'

Then you can:

open file.pdf
open file.jpg
etc
1
  • 1
    This was installed by default in my Ubuntu install. Mar 12, 2016 at 11:02
4

pxl is a pretty cool option which hasn't been mentioned yet. Similar to picture-tube which was previously posted in that it shows the image directly in the terminal although it supports more image formats.

4

I just use the Chrome webrowser, which supports jpg, svg, png, ico, animated gif... basically everything I'm likely to need:

google-chrome ./myphoto.jpg

If you prefer Firefox:

firefox ./myphoto.jpg
4

You can also use chafa (on GitHub). It has a gallery with plenty of examples, showing different options. It even supports animated GIFs.

chafa animated GIF screenshot

2

img2sixel

Fast, convenient, and easy to use.

To use:

$ img2sixel <image_name>

To install (ubuntu 18.04):

$ sudo apt install libsixel-bin

Example (scaled down to 400 pixels wide with -w 400):

enter image description here

There's a list of terminal requirements in the link, but it's worked with any terminal I've tried it on. I won't bother listing all the supported terminals, but here are some:

DEC VT series, VT240/VT241/VT330/VT340/VT282/VT284/VT286/VT382

DECterm(dxterm)

Kermit

ZSTEM 340

WRQ Reflection

RLogin

mlterm

Works on each of X, WIN32 GDI, framebuffer, Android, Cocoa version.

XTerm (compiled with --enable-sixel-graphics option)

yaft

Mintty (>= 2.6.0)

1
  • This worked for me the best and it actually printed in a legible resolution.
    – rii
    Sep 22, 2021 at 19:24
1

I just found this page, and it is still very relevant today. OP didn't really specify if they want X or fb viewer.

I use a small utility called pho: http://www.shallowsky.com/software/pho/

Needs X, so call from command line in a terminal window. Views many picture formats, gif and jpg for sure... some others as well.

Can do wildcard globbing from command line: eg. "$ pho img00??.jpg" will view all files that match in order. Space goes forward through list and backspace goes back. Its quick loading individual images -- hold down space and you fly through them.

Very fast if you want to look through a bunch of pictures, flag ones of interest, rotate, delete unwanted... I keep coming back to it.

From the web page above:

pho (pronounced like the first syllable in "photo") is a lightweight program for viewing large numbers of images quickly, rotating or deleting some, and making notes about what to do with each image -- for instance, for going through hundreds of images after uploading them from a digital camera.

1

Even tough there are great answers given, my issue was to view images in terminal itself, without openning any graphical application, so i wrote my own little script. I only needed to identify the image and did not need al the details of it and did not want to download any relatively big packet, if anyone needs they can also use it: https://github.com/Deniz97/terminal-image-viewer

1

I have a shell alias for macOS called preview that can (1) display an image inline (-i or --inline option), either from stdin or specified filepath(s), and (2) just open an image in Apple's Preview app (without any option), the latter also either from stdin or filepath(s), e.g.:

cat image.jpg | preview

preview -i image.png

Inline display only works with the iTerm imgcat alias, so you need iTerm installed, running, and frontmost. But preview checks if all that is true.

Online here: https://github.com/JayBrown/Tools/blob/master/Aliases/preview

1

If you have any relatively recent version of ImageMagick, you can output images to any terminal emulator that supports the SIXEL format. This is different from the ImageMagick display command, as the latter requires an X11 session and spawns a separate window, while the former works with any supported terminal, even over SSH. The following command takes an input image, converts it to a SIXEL image, and outputs it to stdout so the terminal emulator can render it:

convert input.png six:-

A Konsole session displaying an image using ImageMagick SIXEL output
Sample image: Andy Reago & Chrissy McClarren, CC BY 2.0, via Wikimedia Commons

0

What is a best way to view pictures (like you see images thumbnail in Nautilus) when you are working in the terminal [...] ?

This part of the question about previewing multiple images at once has not yet been addressed properly. Most image viewers (with the exception of TerminalImageViewer) will not show multiple thumbnails when called with multiple image files. They might display them in a slideshow, which is not always practical (e.g. when browsing through icons).

As a solution, I use a usual file manager in "thumbnail" mode to display all images that I copied to a temporary directory. For example, to display all icons from the KDE icon theme "Breeze" where the filename matches *search*:

tmpdir=$(mktemp -d -t image-previews-XXXXX)

find /usr/share/icons/breeze -name "*search*" -exec \
    bash -c '
        tmpdir=$1; 
        file=$2; 
        newfile=${file/\/usr\/share\/icons\/breeze\//}; 
        newfile=${newfile//\//-}; 
        cp $file $tmpdir/$newfile
    ' _ $tmpdir {} \; 

pcmanfm-qt $tmpdir

Discussion

This finds and copies all Breeze icons matching *search* to a temporary directory, replacing the path relative to the Breeze installation directory with a filename that has - instead of the directory separator /. This way, the files are all in one directory for previewing, and won't overwrite each other.

Then this starts a file manager (here pcmanfm-qt) to show the files in the temporary directory. After it starts, it has to be manually set to thumbnail view for best results. Unlike other image viewers, file managers usually can render SVGs into preview thumbnails.

The find command uses a technique with positional parameters in a subshell to allow executing multiple commands in find including variable evaluation, as documented here.

0

In Linux Mint:

xviewer logo.png
0

If you are using plain text console (not even the framebuffer), then there is (still) zgv - https://www.svgalib.org/rus/zgv/

It requires a PC compatible, though (i.e. i386 and VGA)

0
  • No X11 needed.
  • Works in tmux.
git clone https://github.com/stolk/imcat.git ~/
cd ~/imcat
make
~/imcat Your_path_of_a_pic

enter image description here

2

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.