Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
timg(1)								       timg(1)

NAME
       timg - A	terminal image and video viewer

SYNOPSIS
       timg [<options>]	<image/video> [<image/video>...]

DESCRIPTION
       Show images, play animated gifs,	scroll static images or	play videos in
       the terminal.  Even show	PDFs.

       View  images without leaving the	comfort	of your	shell.	Sometimes this
       is the only way if your terminal	is connected remotely via ssh.

       The command line	accepts	any number of image/video filenames (or	read a
       list of filenames from a	file) and shows	these in sequence one per page
       or in a grid in multiple	columns, depending on your choice  of  --grid.
       The  output  is emitted in-line with minimally messing with your	termi-
       nal, so you can simply go back in history using your terminals' scroll-
       bar (Or redirecting the output to a file	allows you to later simply cat
       that file to your terminal.  Even less -R seems to be happy  with  such
       output).

       The  special filename "-" stands	for standard input, so you can read an
       image from a pipe.  If the input	from a pipe is a video,	use the	-V op-
       tion (see below).

       Under the hood, timg uses various image libraries to open and decode  a
       wide range of image formats.  It	uses threads to	open and decode	images
       in parallel for super-fast viewing experience for many images.  To play
       videos,	it  uses  libav	 from  files  and URLs.	 With -I or -V you can
       choose to use only one of these file decoders ({GraphicsMagick,	turbo-
       jpeg, qoi} or libav respectively).

OPTIONS
   General Options
       Most likely commonly needed options first.

       -p <[h|q|s|k|i]>, --pixelation=[h|q|s|k|i]
	      Choice for pixelation of the content.

	      Available	values

	      half (short `h')
		     Uses  unicode  half  block	characters, this is the	lowest
		     resolution.  Color	is using a lower or upper  half	 block
		     and  chooses the foreground color and background color to
		     make up two vertical pixels  per  character  cell.	  Half
		     blocks  have a pixel aspect ratio of about	1:1 and	repre-
		     sent colors correctly, but	they look more `blocky'.

	      quarter (short `q')
		     This chooses a Unicdoe character  with  small  sub-blocks
		     for four pixels per characcter cell.  Quarter blocks will
		     have  a  pixel aspect ratio of 1:2	(timg will stretch the
		     picture accordingly, no worries), and can only  represent
		     colors approximately, as the four quadrant	sub-pixels can
		     only  be  foreground or background	color.	This increases
		     the spatial  resolution  in  x-direction  at  expense  of
		     slight  less  color  accuracy.   It  makes	 it  look less
		     `blocky' and usually better.

	      sixel (short `s')
		     Sixel output allows a high	resolution image  output  that
		     dates  back to DEC	VT200 and VT340	terminals.  This image
		     mode provides full	resolution on a	256 color palette that
		     timg optimizes for	each image.  You find the sixel	proto-
		     col implemented by	xterm (invoke with -ti vt340) and  ml-
		     term  or  konsole.	 Recently, more	terminal emulators re-
		     discovered	this format and	started	implementing it.  This
		     does not work in tmux, but	there  is  a  tmux  fork  with
		     sixel support around.

	      kitty (short `k')
		     The  Kitty	terminal implements an image protocol that al-
		     lows for full 24Bit RGB/32	Bit RGBA  images  to  be  dis-
		     played.   This  is	 implemented in	the kitty terminal but
		     also e.g. konsole.	 You can even use this in  tmux:  This
		     is	 the only protocol that	can work around	the reluctance
		     of	tmux  to  allow	 graphics  protocols.	Some  creative
		     workarounds (Unicode placeholders)	are used that are only
		     implemented  in  kitty  version  >= 0.28 right now.  Also
		     needs tmux	version	>= 3.3.	 You have  to  explicitly  set
		     the  -pk  option inside tmux as timg would	otherwise just
		     use block-pixels there.

	      iterm2 (short `i')
		     The iterm2	graphics is another image protocol that	allows
		     for full 24 Bit RGB/32 Bit	RGBA images.  It originated on
		     the popular macOS OpenSource iTerm2 terminal but  is  now
		     also implemented by wezterm and konsole as	well as	in the
		     VSCode-terminal  (enable  in  vscode settings at checkbox
		     `Terminal > Integrated: Enable images').

	      If no option is given, default is	taken from  environment	 vari-
	      able  TIMG_PIXELATION.   If  that	 is  not set, timg attempts to
	      auto-detect the available	terminal feature.  Not all  full-reso-
	      lution compatible	terminals can be auto-detected so it will fall
	      back to quarter in that case.  Consider passing the -p option or
	      set the TIMG_PIXELATION environment variable in that case.

       --grid=<cols>[x<rows>]
	      Arrange  images  in  a  grid.   If  only one parameter is	given,
	      arranges in a square grid	(e.g. --grid=3 makes a 3x3 grid).  Al-
	      ternatively, you can choose columns and rows that	should fit  on
	      one terminal (e.g. --grid=3x2).  This is a very useful option if
	      you want to browse images	(see examples below).

       -C, --center
	      Center  image(s)	and  title(s)  horizontally  in	 their alotted
	      space.

       --title[=<format-string>]
	      Print title above	each image.  It	is possible to	customize  the
	      title  by	giving a format	string.	 In this string, the following
	      format specifiers	are expanded:

	      	%f = full filename

	      	%b = basename (filename	without	path)

	      	%w = image width

	      	%h = image height

	      	%D = internal decoder used (image, video, qoi, sta, openslide,
		...)

	      If no format string is given, this is just the filename (%f) or,
	      if set, what is provided in the  TIMG_DEFAULT_TITLE  environment
	      variable.

       -f <filelist-file>
	      Read a list of image filenames to	show from this file.  The list
	      needs  to	 be newline separated, so one filename per line.  This
	      option can be supplied multiple times in which case  it  appends
	      to  the  end  of	the list of images to show.  If	there are also
	      filenames	on the command line, they will also be shown after the
	      images from the file list	have been shown.

	      Absolute filenames in the	list are used  as-is,  relative	 file-
	      names are	resolved relative to the current directory.

	      (Note:  this  behavior changed between v1.5.0 and	v1.5.1:	previ-
	      ously, -f	was resolving relative to the filelist;	 this  changed
	      to current directory.  Look-up relative to the file list is pro-
	      vided with with uppercase	-F).

       -F <filelist-file>
	      Like -f, but relative filenames are resolved relative to the di-
	      rectory  the file	list resides in.  This allows you to e.g. have
	      a	file list at the top of	a directory  hierarchy	with  relative
	      filenames	 but  are  not	required to change into	that directory
	      first for	timg to	resolve	the relative paths.

       -b <background-color>
	      Set  the	background  color  for	transparent  images.	Common
	      HTML/SVG/X11  color  strings  are	 supported,  such  as  purple,
	      #00ff00 or rgb(0,	0, 255).

	      The special value	none switches off  blending  background	 color
	      and  relies  on  the  terminal  to provide alpha-blending.  This
	      works well with kitty and	iterm2 graphics, but might  result  in
	      less blended edges for the text-block based pixelations.

	      Another special value is auto:

	      	For  graphics  modes, this behaves like	none, sending RGBA im-
		ages for alpha-blending	directly in the	terminal.

	      	For text-block modes, this attempts to query the terminal  for
		its  background	 color (Best effort; not all terminals support
		that).	If detection fails, the	fallback is `black'.

	      Default is auto.

       -B <checkerboard-other-color>
	      Show the background of a transparent  image  in  a  checkerboard
	      pattern  with  the  given	 color,	 which	alternates with	the -b
	      color.  The allows for HTTML/SVG/X11 colors like -b.

	      The checkerboard pattern has square blocks  one  character  cell
	      wide and half a cell high	(see --pattern-size to change).

	      A	common combination would be to use -bgray -Bdarkgray for back-
	      grounds known from image editors.

	      Sometimes	 setting such background is the	only way to see	an im-
	      age, e.g.	 if you	have an	image with  a  transparent  background
	      showing  content	with  the  same	 color	as your	terminal back-
	      ground...

       --pattern-size=<size-factor>
	      Scale background checkerboard pattern by this factor.

       --auto-crop[=<pre-crop>]
	      Trim same-color pixels around the	border of  image  before  dis-
	      playing.	 Use  this  if	there  is  a boring even-colored space
	      aorund the image which uses too many of our available  few  pix-
	      els.

	      The  optional  pre-crop  is  number of pixels to unconditionally
	      trim all around the original image, for  instance	 to  remove  a
	      thin  border.  The link in the EXAMPLES section shows an example
	      how this improves	showing	an xkcd	comic with a border.

       --rotate=<exif|off>
	      If `exif', rotate	the image according to the exif	data stored in
	      the image.  With `off', no rotation is extracted or applied.

       -W, --fit-width
	      Scale to fit width of the	available space.  This means that  the
	      height  can overflow, e.g. be longer than	the terminal, so might
	      require scrolling	to see the full	picture.  Default behavior  is
	      to fit within the	allotted width and height.

       -U, --upscale[=i]
	      Allow Upscaling.	If an image is smaller than the	terminal size,
	      scale it up to fit the terminal.

	      By  default,  larger  images  are	 only  scaled  down and	images
	      smaller than the available pixels	in the terminal	 are  left  at
	      the  original  size  (this helps assess small deliberately pixe-
	      lated images such	as icons in their intended appearance).	  This
	      option   scales	up  smaller  images  to	 fit  available	 space
	      (e.g. icons).

	      The long option allows for  an  optional	parameter  --upscale=i
	      that  forces  the	 upscaling to be in integer increments to keep
	      the `blocky' appearance of an upscaled  image  without  bilinear
	      scale `fuzzing'.

       --clear[=every]
	      Clear  screen  before first image.  This places the image	at the
	      top of the screen.

	      There is an optional parameter  `every'  (--clear=every),	 which
	      will clean the screen before every image.	 This only makes sense
	      if  there	 is  no	--grid used and	if you allow some time to show
	      the image	of course, so good in combination with -w.

       -V     Tell timg	that this is a video, directly	read  the  content  as
	      video and	don't attempt to probe image decoding first.

	      Usually, timg will first attempt to interpret the	data as	image,
	      but  if  it that fails, will fall-back to	try interpret the file
	      as video.	 However, if the file is coming	from stdin, the	 first
	      bytes  used to probe for the image have already been consumed so
	      the fall-back would fail in that case...	Arguably, this	should
	      be dealt with automatically but isn't :)

	      Long  story short: if you	read a video from a pipe, use -V.  See
	      link in EXAMPLES section for a an	example.

       -I     This is an image,	don't attempt to fall back to video  decoding.
	      Somewhat the opposite of -V.

       -w<seconds>
	      Wait  time  in  seconds  between images when multiple images are
	      given on the command line.  Fractional values such as -w0.3  are
	      allowed.

       -wr<seconds>
	      Similar  to -w, but wait time between rows.  If a	--grid is cho-
	      sen, this	will wait at the end of	a completed row.  If  no  grid
	      is  chosen, then this is equivalent to -w.  Both,	-w and -wr can
	      be provided to show each image individually,  but	 also  have  a
	      wait time	between	rows.

       -a     Switch off anti-aliasing.	 The images are	scaled down to show on
	      the  minimal  amount of pixels, so some smoothing	is applied for
	      best visual effect.  This	option switches	off that smoothing.

       -g <width>x<height>
	      Geometry.	 Scale output to fit inside given number of  character
	      cells.   By  default,  the  size	is determined by the available
	      space in the terminal, so	you typically  won't  have  to	change
	      this.   The  image  is scaled to fit inside the available	box to
	      fill the screen; see -W if you want to fill the width.

	      It is possible to	only partially specify the size	before or  af-
	      ter the x-separator, like	-g<width>x or -gx<height>.  The	corre-
	      sponding other value is then derived from	the terminal size.

       -o <outfile>
	      Write terminal image to given filename instead of	stdout.

       -E     Don't hide the cursor while showing images.

       --compress[=<level>]
	      For  the	kitty and iterm2 graphics modes: this chooses the com-
	      pression for the transmission to the terminal.  This  uses  more
	      CPU  on  timg,  but is desirable when connected over a slow net-
	      work.  Default compression level is 1 which should be reasonable
	      default in almost	all cases.  To disable,	set to 0 (zero).   Use
	      --verbose	to see the amount of data timg sent to the terminal.

       --threads=<n>
	      Run  image  decoding in parallel with n threads.	By default, up
	      to 3/4 of	the reported CPU-cores are used.

       --color8
	      For half and quarter block pixelation: Use 8 bit color mode  for
	      terminals	 that  don't  support 24 bit color (only shows 6x6x6 =
	      216 distinct colors instead of 256x256x256 = 16777216).

       --version
	      Print version and	exit.

       --verbose
	      Print some useful	information such as observed  terminal	cells,
	      chosen pixelation, or observed frame-rate.

       -h     Print command line option	help and exit.

       --help Page through detailed manpage-like help and exit.

       --debug-no-frame-delay
	      Don't  delay  frames in videos or	animations but emit as fast as
	      possible.	 This might be useful for developers of	terminal  emu-
	      lations  to  do performance tests	or simply if you want to redi-
	      rect the output to a file	and don't want to wait.

   For Animations, Scrolling, or Video
       Usually,	animations are shown in	full in	an infinite loop.   These  op-
       tions limit infinity.

       -t<seconds>
	      Stop  an	animation  after  these	number of seconds.  Fractional
	      values are allowed.

       --loops=<num>
	      Number of	loops through a	fully cycle of an animation or	video.
	      A	value of -1 stands for `forever'.

	      If  not  set,  videos  loop once,	animated images	forever	unless
	      there is more than one file to  show.   If  there	 are  multiple
	      files  on	 the command line, animated images are only shown once
	      if --loops is not	set to prevent the output  get	stuck  on  the
	      first animation.

       --frames=<frame-count>
	      Only  render  the	 first	frame-count  frames in an animation or
	      video.  If frame-count is	set to 1, the output just is the first
	      frame so behaves like a static image.  Typically	you'd  use  it
	      when  you	show a bunch of	images to quickly browse without wait-
	      ing for animations to finish.

       --frame-offset=<offset>
	      For animations or	videos,	start at this frame.

   Scrolling
       --scroll[=<ms>]
	      Scroll horizontally with an optional delay between updates  (de-
	      fault:  60ms).  In the EXAMPLES section is an example how	to use
	      ImageMagick to create a text that	you then can scroll with  timg
	      over the terminal.

       --delta-move=<dx>:<dy>
	      Scroll  with delta x and delta y.	 The default of	1:0 scrolls it
	      horizontally, but	with this option you can scroll	vertically  or
	      even diagonally.

RETURN VALUES
       Exit code is

       0      On reading and displaying	all images successfully.

       1      If  any  of  the images could not	be read	or decoded or if there
	      was no image provided.

       2      If an invalid option or parameter	was provided.

       3      If timg could not	determine the size of terminal (not  a	tty?).
	      Provide -g option	to provide size	of the output to be generated.

       4      Could not	write to output	file provided with -o.

       5      Could not	read file list file provided with -f.

ENVIRONMENT
       TIMG_DEFAULT_TITLE
	      The  default  format string used for --title.  If	not given, the
	      default title format string is "%f".

       TIMG_PIXELATION
	      The default pixelation if	not provided by	the -p or --pixelation
	      option (see choice of values there).  If neither the environment
	      variable nor the option is given,	timg attempts  to  auto-detect
	      the best pixelation for the terminal.

       TIMG_USE_UPPER_BLOCK
	      If  this	environment  variable is set to	the value 1, timg will
	      use the U+2580 - `Upper Half Block' Unicode character.

	      To display pixels, timg uses a Unicode half block	and  sets  the
	      foreground  color	 and background	color to get two vertical pix-
	      els.  By default,	it uses	the U+2584 - `Lower Half Block'	 char-
	      acter to achieve this goal.  This	has been chosen	as it resulted
	      in the best image	in all tested terminals	(konsole, gnome	termi-
	      nal  and	cool-retro-term).   So	usually,  there	 is no need to
	      change that.  But	if the terminal	or font	result in a funny out-
	      put, this	might be worth a try.  This is an environment variable
	      because if it turns out to yield a better	result on your system,
	      you can set it once in your profile and forget about it.

       TIMG_FONT_WIDTH_CORRECT
	      A	floating point stretch factor in width	direction  to  correct
	      for fonts	that don't produce quite square	output.

	      If  you  notice  that the	image displayed	is not quite the right
	      aspect ratio because of the font used, you can modify this  fac-
	      tor to make it look correct.  Increasing the visual width	by 10%
	      would be setting it to TIMG_FONT_WIDTH_CORRECT=1.1 for instance.

	      This  is an environment variable,	so that	you can	set it once to
	      best fit your terminal emulator of choice.

       TIMG_ALLOW_FRAME_SKIP
	      Set this environment variable to 1 if you	like to	allow timg  to
	      drop  frames when	play-back is falling behind.  This is particu-
	      larly useful if you are on a very	slow remote  terminal  connec-
	      tion  that  can't	keep up	with playing videos.  Or if you	have a
	      very slow	CPU.

EXAMPLES
       Some example invocations	including scrolling text or streaming  an  on-
       line video are put together at <https://timg.sh/#examples>

       It  might be useful to prepare some environment variables or aliases in
       the startup profile of your shell.  The timg author typically has these
       set:

	      #	The default --title format
	      export TIMG_DEFAULT_TITLE="%b (%wx%h)"

	      #	image list. An alias to	quickly	list images; invoke with ils images/*
	      alias ils='timg --grid=3x1 --upscale=i --center --title --frames=1 -bgray	-Bdarkgray'

KNOWN ISSUES
       This requires a terminal	that can deal with Unicode characters  and  24
       bit color escape	codes.	This will be problematic on really old instal-
       lations or if you want to display images	on some	limited	text console.

       The  option  -V should not be necessary for streaming video from	stdin;
       timg should internally buffer bytes it uses for probing.

BUGS
       Report bugs at <http://github.com/hzeller/timg/issues>

COPYRIGHT
       Copyright (c) 2016..2023	Henner Zeller.	This program is	free software,
       provided	under the GNU GPL version 2.0.

       <https://gnu.org/licenses/gpl-2.0.html>

SEE ALSO
       GraphicsMagick,	  ffmpeg(1),	utf-8(7),    unicode(7),     kitty(1),
       https://en.wikipedia.org/wiki/Sixel

AUTHORS
       Henner Zeller.

				   Dec 2023			       timg(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=timg&sektion=1&manpath=FreeBSD+Ports+14.3.quarterly>

home | help