iTerm2 is a macOS terminal emulator with a lot of extra features. In particular, it has a simple protocol for displaying images inline. It comes with a program imgcat
that will display common image formats such as PNG, JPEG, GIF, etc. Most of the images I deal with are FITS, though. I wrote fitscat
to be a handy utility to display FITS images, as well as to print basic information about the FITS file such as a listing of extensions or an extension header.
For example, fitscat
can display an image in an extension, as seen below:

There are options to specify a minimum and maximum value for scaling, as well as to use a simple filter such square root.
Also, fitscat
can also print basic information about a FITS file, such as a listing of extensions:
CoMP$ fitscat --list 20150624.170419.comp.1074.iqu.5.fts
Filename: 20150624.170419.comp.1074.iqu.5.fts
No. Name Ver Type Cards Dimensions Format
0 PRIMARY 1 PrimaryHDU 67 ()
1 I, 1074.38 1 ImageHDU 33 (620, 620) float32
2 I, 1074.50 1 ImageHDU 33 (620, 620) float32
3 I, 1074.62 1 ImageHDU 33 (620, 620) float32
4 I, 1074.74 1 ImageHDU 33 (620, 620) float32
5 I, 1074.86 1 ImageHDU 33 (620, 620) float32
6 Q, 1074.38 1 ImageHDU 33 (620, 620) float32
7 Q, 1074.50 1 ImageHDU 33 (620, 620) float32
8 Q, 1074.62 1 ImageHDU 33 (620, 620) float32
9 Q, 1074.74 1 ImageHDU 33 (620, 620) float32
10 Q, 1074.86 1 ImageHDU 33 (620, 620) float32
11 U, 1074.38 1 ImageHDU 33 (620, 620) float32
12 U, 1074.50 1 ImageHDU 33 (620, 620) float32
13 U, 1074.62 1 ImageHDU 33 (620, 620) float32
14 U, 1074.74 1 ImageHDU 33 (620, 620) float32
15 U, 1074.86 1 ImageHDU 33 (620, 620) float32
Or display a header:
CoMP$ fitscat --header -e 3 20150624.170419.comp.1074.iqu.5.fts
XTENSION= 'IMAGE ' /extension type
BITPIX = -32 /bits per data value
NAXIS = 2 /number of axes
NAXIS1 = 620 /
NAXIS2 = 620 /
PCOUNT = 0 /
GCOUNT = 1 /
EXTNAME = 'I, 1074.62' /
WAVELENG= 1074.620 / WAVELENGTH OF OBS (NM)
POLSTATE= 'I ' / POLARIZATION STATE
EXPOSURE= 250.00 / EXPOSURE TIME (MILLISEC)
NAVERAGE= 16 / Number of images averaged together
FILTER = 1 / FILTER WHEEL POSITION (1-8)
DATATYPE= 'DATA' / DATA, DARK OR FLAT
LCVR1TMP= 29.639999 / DEGREES CELSIUS
LCVR2TMP= 33.429001 /
LCVR3TMP= 33.715000 /
LCVR4TMP= 33.738998 /
LCVR5TMP= 33.618999 /
LCVR6TMP= 28.847000 /
NDFILTER= 8 / ND 1=.1, 2=.3, 3=.5, 4=1, 5=2, 6=3, 7=4, 8=cle
BACKGRND= 13.154 / Median of masked line center background
BODYTEMP= 34.023 / TEMPERATURE OF FILTER BODY ©
BASETEMP= 33.599 / BASE PLATE TEMP ©
RACKTEMP= 25.012 / COMPUTER RACK AMBIENT AIR TEMP ©
OPTRTEMP= 33.306 / OPTICAL RAIL TEMP ©
DEMULT = 1 / 1=DEMULTIPLEXED, 0=NOT DEMULTIPLEXED
FILTTEMP= 35.000 / ILX FILTER TEMPERATURE ©
FLATFILE= '20150624.070023.FTS' / Name of flat field file
INHERIT = T /
DISPMIN = 0.00 / Minimum data value
DISPMAX = 5.00 / Maximum data value
DISPEXP = 0.50 / Exponent value for scaling
The full interface of fitscat
is shown below:
usage: fitscat [-h] [--min MIN] [--max MAX] [--debug] [-d] [--resize-factor RESIZE_FACTOR] [-l]
[-r] [-e EXTEN_NO] [-f FILTER] [-s SLICE] [--validate]
filename
fitscat - a FITS query/display program
positional arguments:
filename FITS file to query
options:
-h, --help show this help message and exit
--min MIN min for scaling
--max MAX max for scaling
--debug set to debug
-d, --display set to display
--resize-factor RESIZE_FACTOR
resize by factor
-l, --list set to list HDUs
-r, --header set to display header
-e EXTEN_NO, --exten_no EXTEN_NO
specify extension
-f FILTER, --filter FILTER
specify filter (default: none)
-s SLICE, --slice SLICE
specify slice of data array to display
--validate check keywords against FITS standard
Source code for the Python script is available on GitHub. The script is compatible with Python 2 and 3, but requires standard scientific Python packages AstroPy, NumPy, and PIL.