fim(1)                      General Commands Manual                     fim(1)

       fim - fbi (linux framebuffer imageviewer) improved

       fim [{options}] [--] {imagefile} [{imagefiles}]
       ... | fim [{options}] [--] [{imagefiles}] -
       fim [{options}] [--] [{files}] - < {file_name_list_text_file}
       fim --image-from-stdin [{options}] < {imagefile}
       fim --script-from-stdin [{options}] < {scriptfile}

       fim is a `swiss army knife' for displaying image files.  It is capable
       of displaying image files using different graphical devices while
       offering a uniform look and feel; it features an internal command
       language specialized to the image viewing purposes; it is capable of
       interacting with standard input and output; the internal command
       language is accessible via a command line capable of autocompletion and
       history; it features command recording, supports initialization files,
       customizable key bindings, internal variables and command aliases,
       vim-like autocommands, JPEG comments, EXIF tags display, EXIF
       rotation/orientation, and much more.

       As a default, fim displays the specified file(s) on the detected
       graphical device (e.g. with SDL if X is detected, or the linux
       framebuffer device if not).  JPEG,PNG,GIF,BMP,TIFF,PPM,PGM,PBM,PCX
       formats are supported.  For 'XCF' (Gimp's) images, fim will try to use
       'xcftopnm'.  For '.FIG' vectorial images, fim will try to use
       'fig2dev'.  For '.DIA' vectorial images, fim will try to use 'dia'.
       For '.SVG' vectorial images, fim will try to use 'inkscape'.  For other
       formats fim will try to use ImageMagick's 'convert' executable.

       If {imagefile} is a directory, therein contained files of supported
       formats will be loaded. If {imagefile} contains a trailing slash (/),
       it will be treated as a directory; otherwise a check will be made using
       stat(2). To change this default, see description of the _pushdir_re
       variable and the --no-stat-push and --recursive  options.

       If configured at build time, fim will be capable of using SDL or aalib

       This man page only describes the fim command line options.  See man
       fimrc(5) for a full specification of the fim language, commands,
       variables, and an example configuration file.

       You may invoke fim from an interactive shell and control it with the
       keyboard, as you would do with any image viewer with reasonable key

       fim is keyboard oriented: there are no user menus or buttons available.
       If you need some feature or setting which is not accessible from the
       default keyboard configuration, you probably need a custom
       configuration or simply need to type a custom command. For these, you
       can use the internal command and configuration language.  The full
       specification for these is accessible at runtime using the internal
       help system (typing :help).

       Accepted command line {options} :

       --     The arguments before -- beginning with - will be treated as
              command line options.  All arguments after -- will be treated as
              filenames regardlessly.

       -a, --autozoom
              Enable autozoom.  fim will automagically pick a reasonable zoom
              factor when loading a new image (as in fbi).

       -b, --binary[=24|1]
              Display (any filetype) binary files contents as they were raw 24
              or 1 bits per pixel pixelmaps.  Will arrange the image by rows
              long as specified by the _preferred_rendering_width variable for
              the image width (unless a narrower image suffices).  Regard this
              as an easter bunny option.

              Display (any filetype) files contents as they were text.  Will
              only show printable characters.  Regard this as an easter bunny

              Step into the first loaded file directory and push other files.

       -c {commands}, --execute-commands {commands}
              The commands string will be executed before entering the
              interactive loop.  Please note that if your commands are more
              complicated than a simple 'next' or 'pornview' command, they
              must be quoted and escaped in a manner suitable for your shell!

              For example, -c '*2;2pan_up;display;while(1){align
              "bottom";sleep "1" ; align "top"}' (with the single quotes) will
              tell fim to first double the displayed image size, then pan two
              times up, then display the image ; and then do an endless loop
              consisting of bottom and top aligning, alternated.

       -C {commands}, --execute-commands-early {commands}
              Just as the --execute-commands option, but commands will be
              executed before the loading of any config file.

              For example, -C '_scale_style=" "' will make fim start with no

       -d {framebuffer device}, --device {framebuffer device}
              Framebuffer device to use. Default is the one your vc is mapped
              to (as in fbi).

              Will dump to stdout the language reference help.

       -D, --dump-default-fimrc
              The default configuration (the one hardcoded in the fim
              executable) is dumped on standard output and fim exits.

       -E {scriptfile}, --execute-script {scriptfile}
              The scriptfile will be executed right after the default
              initialization file is executed.

       -f {fimrc}, --etc-fimrc {fimrc}
              Specify an alternative system wide initialization file (default:
              /usr/local/etc/fimrc), which will be executed prior to any other
              configuration file.

       -F {commands}, --final-commands {commands}
              The commands string will be executed after exiting the
              interactive loop of the program (right before terminating the

       -h, --help[=s|d|l|m]
                         Print (short, descriptive, long, or complete man)
              program invocation help, and terminate.

       --load-image-descriptions-file {filename}
              Load image descriptions from {filename}. In {filename} each line
              is the name of an image file (its basename will be taken), then
              a Tab character (unless --image-descriptions-file-separator
              specifies otherwise), then the description text. Each
              description will be put in the _comment variable of the image at
              load time. Will override the comment eventually loaded from the
              file (e.g. JPEG, PNG or TIFF comment). Special comment lines
              like "#!fim:var=val" will lead i:var to be assigned value val
              (unquoted) at image loading time. Special description lines
              begin with markers:  with "#!fim:=" the last description line to
              be used; with "#!fim:+" what follows + will be appended to the
              last description line; with "#!fim:^" what follows ^ will be
              prepended to the last description line; with "#!fim:s/f/t" the
              last description line will be used, but occurrences of string f
              will be substituted with string t (f and t can contain anything
              but not a /). If val is empty that variable will be unset. These
              variables are stored also in an internal index used by the limit
              command. This option sets _caption_over_image=2, so that a
              caption will be displayed over the image.

       --image-descriptions-file-separator {sepchar}
              A character to be used as a separator between the filename and
              the description part of lines specified just before a

       -i, --image-from-stdin
              Will read one single image from the standard input (the image
              data, not the filename).  May not work with all supported file
              formats.  In the image list, this image will be displayed as

       -m {vmode}, --mode {vmode}
              Name of the video mode to use video mode (must be listed in
              /etc/fb.modes).  Default is not to change the video mode.  In
              the past, the XF86 config file (/etc/X11/XF86Config) used to
              contain Modeline information, which could be fed to the
              modeline2fb perl script (distributed with fbset).  On many
              modern xorg based systems, there is no direct way to obtain a
              fb.modes file from the xorg.conf file.  So instead one could
              obtain useful fb.modes info by using the (fbmodes (no man page
              AFAIK)) tool, written by bisqwit.  An unsupported mode should
              make fim exit with failure.  But it is possible the kernel could
              trick fim and set a supported mode automatically, thus ignoring
              the user set mode.

       -N, --no-rc-file
              No personal initialization file will be read (default is
              ~/.fimrc) at startup.

              No system wide initialization file will be read (default is
              /usr/local/etc/fimrc) at startup.

              No internal default configuration at startup (uses internal
              variable _no_default_configuration). Will only provide a minimal
              working configuration.

              With internal command line mode disabled.

              Do not save execution history at finalization (uses internal
              variable _save_fim_history).

              Do not load execution history at startup.

              Do not load or save execution history at startup.

       -p, --script-from-stdin
              Will read commands from stdin prior to entering in interactive

       -o [fb|sdl|aa|imlib2|caca|dumb], --output-device
              Will use the specified device as fim video output device,
              overriding automatic checks.The available devices depend on the
              original configuration/compilation options, so you should get
              the list of available output devices issuing fim --version.  The
              aa option may be specified as  aa={['w']} ; the 'w' character
              allows windowed mode in case of aalib running under X
              (otherwise, the DISPLAY environment variable will be unset for
              the current instance of fim).  The sdl option may be specified
              as  sdl={['w']['m']['r']['W']['M']['R']width:height} , where
              width is and height are integer numbers specifying the desired
              resolution; the 'w' character requests windowed mode; the 'm'
              character requests mouse pointer display; the 'r' character
              requests support for window resize; the same letters uppercase
              request explicit negation of the mentioned features.

       --offset {bytes-offset[{:upper-offset}|{+offset-range}]}
              Will use the specified offset (in bytes) for opening the
              specified files. If :upper-offset is specified, further bytes
              until upper-offset will be probed. If +offset-range is specified
              instead, that many additional bytes will be probed.  Use this
              option to search damaged file systems for image files.

       -P, --text-reading
              Enable textreading mode.  This has the effect that fim will
              display images scaled to the width of the screen, and aligned to
              the top.  Useful if the images you are watching text pages, all
              you have to do to get the next piece of text is to press space
              (in the default key configuration, of course).

       -s {value}, --scroll {value}
              Set scroll steps for internal variable _steps (default is 20%).

       --slideshow {number}
              Interruptible slideshow mode; will wait for {number} of seconds
              (assigned to the _want_sleep_seconds variable after each
              loading; implemented by executing
              while(_fileindex<_filelistlen){sleep _want_sleep_seconds; next;}
              as a first command.

       -S, --sanity-check
              A quick sanity check before starting the interactive fim
              execution, but after the initialization.

       -t, --no-framebuffer
              Fim will not use the framebuffer but the aalib (ASCII art)
              driver instead (if you are curious, see (info aalib)).  If aalib
              was not enabled at tompile time, fim will work without
              displaying images at all.

       -T {terminal}, --vt {terminal}
              The terminal will be used as virtual terminal device file (as in
              fbi).  See (chvt (1)), (openvt (1)) for more info about this.
              Use (con2fb (1)) to map a terminal to a framebuffer device.

       --sort Sort files list before browsing according to full filename.

              Sort files list before browsing according to file basename's.

       -u, --random
              Randomly shuffle the files list before browsing (seed depending
              on time() function).

              Randomly shuffle the files list before browsing (no seeding).

       -v, --verbose
              Be verbose: show status bar.

       -V, --version
              Display program version, compile flags, enabled features, linked
              libraries information, supported filetypes/file loaders, and
              then terminate.

       -w, --autowidth
              Scale the image according to the screen width.

              Do not scale the images after loading (will set '_scale_style="

              Will resize the window size (if supported) to the image size.
              Don't use this with other image scaling options.

              Sets _push_checks=0 before initialization, thus disabling
              file/dir existence checks with stat(2) at push push time (and
              speeding up startup).

       -H, --autoheight
              Scale the image according to the screen height.

       -W {scriptfile}, --write-scriptout {scriptfile}
              All the characters that you type are recorded in the file
              {scriptout}, until you exit Fim.  This is  useful  if  you want
              to create a script file to be used with "fim -c" or ":exec"
              (analogous to Vim's -s and ":source!").  If the {scriptout} file
              exists, it will be not touched (as in Vim's -w).

       -, --read-from-stdin
              Read file list from stdin: each line one file.

              Note that these the three standard input reading functionalities
              (-i,-p and -) conflict : if two or more of them occur in fim
              invocation, fim will exit with an error and warn about the

              See the section INVOCATION EXAMPLES below to read some useful
              (and unique) ways of employing fim.

       --read-from-stdin-elds <arg>
              Specify an endline delimiter string for breaking lines read via
              -/--read-from-stdin. Line text before the delimiter will be
              treated as names of files to load; the text after will be
              ignored until a newline. This is useful e.g. to description
              files as filename list files.

       -A, --autotop
                         Align images to the top (UNFINISHED).

       -q, --quiet
              Quiet mode. Sets _display_status=0;_display_busy=0;.

       -r {resolution}, --resolution {resolution}
                         Set resolution (UNFINISHED).

       -R, --recursive
                         Push files/directories to the files list recursively.

       The program return status is 0 on correct operation; 252 on unsupported
       device specification; 248 on bad input; 255 on a generic error; 42 on a
       signal-triggered program exit;  or a different value in case of an
       another error.
        The return status may be controlled by the use of the quit command.

       The following keys and commands are hardcoded in the minimal configuration. These are working by default before any config loading, and before the hardcoded config loading (see variable _fim_default_config_file_contents).

        n    goto '+1f'
        p    goto '-1f'
        +    magnify
        -    reduce
        h    pan 'left'
        l    pan 'right'
        k    pan 'up'
        j    pan 'down'
        q    quit
       You can type a number before a command binding to iterate the assigned command:
       3k    3pan 'up'

       :       enter command line mode
       :{number}       jump to {number}^th image in the list
       :^           jump to first image in the list
       :$           jump to last image in the list
       :*{factor}      scale the image by {factor}
       :{scale}%       scale the image to the desired {scale}
       :+{scale}%       scale the image up to the desired percentage {scale} (relatively to the original)
       :-{scale}%       scale the image down to the desired percentage {scale} (relatively to the original)

       /{regexp}       entering the pattern {regexp} (with /) makes fim jump to the next image whose filename matches {regexp}
       /*.png$         entering this pattern (with /) makes fim jump to the next image whose filename ends with 'png'
       /png       a shortcut for /.*png.*

       !{syscmd}      executes the {syscmd} quoted string as a "/bin/sh" shell command

       You can visualize all of the default bindings invoking fim --dump-default-fimrc | grep bind .
       You can visualize all of the default aliases invoking fim  --dump-default-fimrc | grep alias .

       The Return vs. Space key thing can be used to create a file list while
       reviewing the images and use the list for batch processing later on.

       All of the key bindings are reconfigurable; see the default fimrc file
       for examples on this, or read the complete manual: the FIM.TXT file
       distributed with fim.

       FBFONT         (just like in fbi) a Linux consolefont font file.
       If using a gzipped font, the zcat program will be used to uncompress it (via execvp(3)).
       If not specified, the following files will be probed and the first existing will be selected:


       If the special fim:// string is specified, a hardcoded font will be used.
       FBGAMMA        (just like in fbi) gamma correction (applies to dithered 8 bit mode only). Default is 1.0.
       FRAMEBUFFER    (just like in fbi) user set framebuffer device file (applies only to the fb mode).
       If unset, fim will probe for /dev/fb0.
       TERM      (only in fim) will influence the output device selection algorithm, especially if $TERM=="screen".
       DISPLAY   If this variable is set, then the sdl driver will be probed by default.

       fim needs read-write access to the framebuffer devices (/dev/fbN or
       /dev/fb/N), i.e you (our your admin) have to make sure fim can open the
       devices in rw mode.  The IMHO most elegant way is to use pam_console
       (see /etc/security/console.perms) to chown the devices to the user
       logged in on the console.  Another way is to create some group, chown
       the special files to that group and put the users which are allowed to
       use the framebuffer device into the group.  You can also make the
       special files world writable, but be aware of the security implications
       this has.  On a private box it might be fine to handle it this way

       If using udev, you can edit :
       /etc/udev/permissions.d/50-udev.permissions and set these lines like
       here :
        # fb devices

       fim also needs access to the linux console (i.e. /dev/ttyN) for sane
       console switch handling.  That is obviously no problem for console
       logins, but any kind of a pseudo tty (xterm, ssh, screen, ...) will not

       fim media/
       # Will load files from the directory media.

       fim -R media/ --sort
       # Will open files found by recursive traversal of directory media, then
       sorting the list.

       find /mnt/media/ -name *.jpg | fim -
       # Will make fim read the file list from standard input.

       find /mnt/media/ -name *.jpg | shuf | fim -
       # will make fim read the file list from standard input, randomly

       cat script.fim | fim -p images/*
       # Will make fim read the script file script.fim from standard input
       prior to displaying files in the directory images

       scanimage ... | tee scan.ppm | fim -i
       # Will make fim read the image scanned from a flatbed scanner as soon
       as it is read

       fim * > selection.txt
       # Will output the file names marked interactively with the 'list
       "mark"' command in fim to a file.

       fim * | fim -
       # will output the file names marked with 'm' in fim to a second
       instance of fim, in which these could be marked again.

       fim -c 'pread "vgrabbj -d /dev/video0 -o png";reload'
       # will display an image grabbed from a webcam.

       fim -o aa -c 'pread "vgrabbj -d /dev/video0 -o png";reload;system
       "fbgrab" "asciime.png"'
       # if running in framebuffer mode, will save a png screenshot with an
       ASCII rendering of an image grabbed from a webcam.

       fim -c 'while(1){pread "vgrabbj -d /dev/video0 -o png";reload;sleep
       # will display a sequence of images grabbed from a webcam; circa 1 per

       This manual page is neither accurate nor complete. In particular,
       issues related to driver selection shall be described more accurately.
       Also the accurate sequence of autocommands execution, variables
       application is critical to understanding fim, and should be documented.
       The filename "<STDIN>" is reserved for images read from standard input
       (view this as a limitation), and thus handling files with such name may
       incur in limitations.  The SDL driver is quite inefficient, for a
       variety of reasons. In particular, its interaction with the readline
       library can be problematic (e.g.: when running in sdl mode without a
       terminal). This shall be fixed.

       fim has bugs. Please read the BUGS file shipped in the documentation
       directory to discover the known ones.

                      The directory with Fim documentation files.

                      The system wide Fim initialization file (executed at
                      startup, after executing the hardcoded configuration).

       ~/.fimrc       The personal Fim initialization file (executed at
                      startup, after the system wide initialization file).

       ~/.inputrc     If Fim is built with GNU readline support, it will be
                      susceptible to chages in the user set ~/.inputrc
                      configuration file contents.  For details, see (man

       Other Fim man pages: fimgs(1), fimrc(1).
       Or related programs: fbset(1), con2fb(1), convert(1), vim(1),
       fb.modes(8), fbset(8), fbgrab(1), fbdev(4), setfont(8), xfs(1).

       Michele Martone <dezperado _CUT_ autistici _CUT_ org> is the author of fim, "fbi improved".

       Copyright (C) 2007-2016 Michele Martone <dezperado _CUT_ autistici _CUT_ org> (author of fim)
       Copyright (C) 1999-2004 Gerd Hoffmann <kraxel _CUT_> is the
       author of "fbi", upon which fim was originally based.

       This program is free software; you can redistribute it and/or modify it
       under the terms of the GNU General Public License as published by the
       Free Software Foundation; either version 2 of the License, or (at your
       option) any later version.

       This program is distributed in the hope that it will be useful, but
       WITHOUT ANY WARRANTY; without even the implied warranty of
       General Public License for more details.

       You should have received a copy of the GNU General Public License along
       with this program; if not, write to the Free Software Foundation, Inc.,
       51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

                         (c) 2007-2016 Michele Martone                  fim(1)