File: image-dired.el.html

BACKGROUND
==========

 I needed a program to browse, organize and tag my pictures. I got
tired of the old gallery program I used as it did not allow multi-file operations easily. Also, it put things out of my control. Image viewing programs I tested did not allow multi-file operations or did not do what I wanted it to.

 So, I got the idea to use the wonderful functionality of Emacs and
dired to do it. It would allow me to do almost anything I wanted, which is basically just to browse all my pictures in an easy way, letting me manipulate and tag them in various ways. dired already provide all the file handling and navigation facilities; I only needed to add some functions to display the images.

 I briefly tried out thumbs.el, and although it seemed more
powerful than this package, it did not work the way I wanted to. It was too slow to create thumbnails of all files in a directory (I currently keep all my 2000+ images in the same directory) and browsing the thumbnail buffer was slow too. image-dired.el will not create thumbnails until they are needed and the browsing is done quickly and easily in Dired. I copied a great deal of ideas and code from there though... :)

 image-dired stores the thumbnail files in image-dired-dir(var)/image-dired-dir(fun)
using the file name format ORIGNAME.thumb.ORIGEXT. For example
~/.emacs.d/image-dired/myimage01.thumb.jpg. The "database" is for
now just a plain text file with the following format:

file-name-non-directory;comment:comment-text;tag1;tag2;tag3;...;tagN

PREREQUISITES
=============

* The GraphicsMagick or ImageMagick package; Image-Dired uses
  whichever is available.

  A) For GraphicsMagick, gm is used.
     Find it here: http://www.graphicsmagick.org/

  B) For ImageMagick, convert and mogrify are used.
     Find it here: https://www.imagemagick.org.

* For non-lossy rotation of JPEG images, the JpegTRAN program is
  needed.

* For image-dired-set-exif-data to work, the command line tool exiftool is
  needed. It can be found here: https://exiftool.org/. This
  function is, among other things, used for writing comments to
  image files using image-dired-thumbnail-set-image-description.


USAGE
=====

This information has been moved to the manual. Type C-h r to open the Emacs manual and go to the node Thumbnails by typing g Image-Dired RET.

Quickstart: M-x image-dired RET DIRNAME RET

where DIRNAME is a directory containing image files.

LIMITATIONS
===========

* Supports all image formats that Emacs and convert supports, but
  the thumbnails are hard-coded to JPEG or PNG format. It uses
  JPEG by default, but can optionally follow the Thumbnail Managing
  Standard (v0.9.0, Dec 2020), which mandates PNG. See the user
  option image-dired-thumbnail-storage.

* WARNING: The "database" format used might be changed so keep a
  backup of image-dired-tags-db-file when testing new versions.

TODO
====

* Investigate if it is possible to also write the tags to the image
  files.

* From thumbs.el: Add an option for clean-up/max-size functionality
  for thumbnail directory.

* Add image-dired-display-thumbs-ring and functions to cycle that. Find out
  which is best, saving old batch just before inserting new, or
  saving the current batch in the ring when inserting it. Adding
  it probably needs rewriting image-dired-display-thumbs to be more general.

* Find some way of toggling on and off really nice keybindings in
  Dired (for example, using C-n or <down> instead of C-S-n).
  Richard suggested that we could keep C-t as prefix for
  image-dired commands as it is currently not used in Dired. He
  also suggested that dired-next-line and dired-previous-line
  figure out if image-dired is enabled in the current buffer and,
  if it is, call image-dired-dired-next-line and image-dired-dired-previous-line,
  respectively. Update: This is partly done; some bindings have
  now been added to Dired.

* In some way keep track of buffers and windows and stuff so that
  it works as the user expects.

* More/better documentation.

Defined variables (51)

image-dired--slideshow-timerSlideshow timer.
image-dired-cmd-create-temp-image-optionsOptions of command used to create temporary image for display window.
image-dired-cmd-create-temp-image-programExecutable used to create temporary image.
image-dired-cmd-read-exif-data-optionsArguments of command used to read EXIF data.
image-dired-cmd-read-exif-data-programProgram used to read EXIF data to image.
image-dired-cmd-rotate-thumbnail-optionsArguments of command used to rotate thumbnail image.
image-dired-cmd-rotate-thumbnail-programExecutable used to rotate thumbnail.
image-dired-db-fileDatabase file where image-dired file names and associated tags are stored.
image-dired-dirDirectory where thumbnail images are stored.
image-dired-display-image-mode-mapKeymap for ‘image-dired-image-mode’.
image-dired-display-properties-formatDisplay format for thumbnail properties.
image-dired-display-window-height-correctionNumber to be used to correct image display window height.
image-dired-display-window-width-correctionNumber to be used to correct image display window width.
image-dired-external-viewerShell command to invoke the external image viewer program.
image-dired-file-comment-listList to store file comments.
image-dired-file-tag-listList to store file-tag structure.
image-dired-gallery-dirDirectory to store generated gallery html pages.
image-dired-gallery-hidden-tagsList of "hidden" tags.
image-dired-gallery-image-root-urlURL where the full size images are to be found on your web server.
image-dired-gallery-thumb-image-root-urlURL where the thumbnail images are to be found on your web server.
image-dired-image-mode-abbrev-tableAbbrev table for ‘image-dired-image-mode’.
image-dired-image-mode-hookHook run after entering ‘image-dired-image-mode’.
image-dired-image-mode-mapKeymap for ‘image-dired-image-mode’.
image-dired-image-mode-syntax-tableSyntax table for ‘image-dired-image-mode’.
image-dired-line-up-methodDefault method for line-up of thumbnails in thumbnail buffer.
image-dired-main-image-directoryName of main image directory, if any.
image-dired-marking-shows-nextIf non-nil, marking, unmarking or flagging an image shows the next image.
image-dired-rotate-original-ask-before-overwriteConfirm overwriting of original file after image-rotate operation.
image-dired-saved-window-configurationSaved window configuration.
image-dired-show-all-from-dir-max-filesMaximum number of files in directory to show before prompting.
image-dired-slideshow-countKeeping track on number of images in slideshow.
image-dired-slideshow-delaySeconds to wait before showing the next image in a slideshow.
image-dired-slideshow-timerSlideshow timer.
image-dired-slideshow-timesNumber of pictures to display in slideshow.
image-dired-tag-file-listList to store tag-file structure.
image-dired-tags-db-fileDatabase file where image-dired file names and associated tags are stored.
image-dired-temp-image-fileName of temporary image file used by various commands.
image-dired-thumb-heightHeight of thumbnails, in pixels.
image-dired-thumb-marginSize of the margin around thumbnails.
image-dired-thumb-namingHow ‘image-dired’ names thumbnail files.
image-dired-thumb-reliefSize of button-like border around thumbnails.
image-dired-thumb-sizeDefault size of thumbnails in pixels.
image-dired-thumb-visible-marksMake marks and flags visible in thumbnail buffer.
image-dired-thumb-widthWidth of thumbnails, in pixels.
image-dired-thumbnail-mode-abbrev-tableAbbrev table for ‘image-dired-thumbnail-mode’.
image-dired-thumbnail-mode-hookHook run after entering ‘image-dired-thumbnail-mode’.
image-dired-thumbnail-mode-mapKeymap for ‘image-dired-thumbnail-mode’.
image-dired-thumbnail-mode-syntax-tableSyntax table for ‘image-dired-thumbnail-mode’.
image-dired-thumbnail-storageWhere ‘image-dired’ stores thumbnail files.
image-dired-thumbs-per-rowNumber of thumbnails to display per row in thumb buffer.
image-dired-track-movementThe current state of the Image-Dired tracking and mirroring of thumbnails.

Defined functions (105)

image-dired(DIRNAME)
image-dired--add-to-file-comment-list(FILE COMMENT)
image-dired--add-to-tag-file-lists(TAG FILE)
image-dired--create-gallery-lists()
image-dired--do-mark-command(MAYBE-NEXT UPDATE-MARK &rest BODY)
image-dired--get-create-thumbnail-file(FILE)
image-dired--hidden-p(FILE)
image-dired--line-up-with-method()
image-dired--movement-command(TO &optional REVERSE)
image-dired--movement-command-line(&optional REVERSE)
image-dired--movement-ensure-point-pos(&optional REVERSE)
image-dired--on-file-in-dired-buffer(&rest BODY)
image-dired--slideshow-show-message(&optional SUFFIX)
image-dired--slideshow-step()
image-dired--slideshow-stop()
image-dired--thumb-update-marks()
image-dired--update-after-move(REVERSE)
image-dired--update-header-line()
image-dired--with-marked(&rest BODY)
image-dired--with-thumbnail-buffer(&rest BODY)
image-dired-add-to-file-comment-list(FILE COMMENT)
image-dired-add-to-tag-file-list(TAG FILE)
image-dired-add-to-tag-file-lists(TAG FILE)
image-dired-backward-image(&optional ARG)
image-dired-beginning-of-buffer()
image-dired-bookmark-jump(BOOKMARK)
image-dired-bookmark-make-record()
image-dired-bookmark-name()
image-dired-comment-thumbnail()
image-dired-copy-filename-as-kill(&optional ARG)
image-dired-create-display-image-buffer(&rest ARGUMENTS)
image-dired-create-gallery-lists()
image-dired-create-thumbnail-buffer()
image-dired-delete-char()
image-dired-delete-marked()
image-dired-dired-file-flagged-p()
image-dired-dired-file-marked-p(&optional MARKER)
image-dired-dired-with-window-configuration(DIR &optional ARG)
image-dired-display-current-image-full()
image-dired-display-current-image-sized()
image-dired-display-image(FILE)
image-dired-display-image-mode()
image-dired-display-next(&optional ARG)
image-dired-display-next-thumbnail-original(&optional ARG)
image-dired-display-previous(ARG)
image-dired-display-previous-thumbnail-original(ARG)
image-dired-display-this(&optional ARG)
image-dired-display-thumb-properties()
image-dired-display-thumbnail-original-image(&optional ARG)
image-dired-display-thumbs(&optional ARG APPEND DO-NOT-POP)
image-dired-display-window-height(WINDOW)
image-dired-display-window-width(WINDOW)
image-dired-do-flagged-delete()
image-dired-end-of-buffer()
image-dired-flag-thumb-original-file()
image-dired-format-properties-string(BUF FILE IMAGE-COUNT PROPS COMMENT)
image-dired-forward-image(&optional ARG WRAP-AROUND)
image-dired-gallery-generate()
image-dired-get-exif-data(FILE TAG-NAME)
image-dired-get-thumbnail-image(FILE)
image-dired-hidden-p(FILE)
image-dired-image-mode()
image-dired-insert-image(FILE TYPE RELIEF MARGIN)
image-dired-insert-thumbnail(FILE ORIGINAL-FILE-NAME ASSOCIATED-DIRED-BUFFER)
image-dired-jump-original-dired-buffer()
image-dired-line-up()
image-dired-line-up-dynamic()
image-dired-line-up-interactive()
image-dired-mark-thumb-original-file()
image-dired-modify-mark-on-thumb-original-file(COMMAND)
image-dired-mouse-display-image(EVENT)
image-dired-mouse-select-thumbnail(EVENT)
image-dired-mouse-toggle-mark(EVENT)
image-dired-mouse-toggle-mark-1()
image-dired-move-beginning-of-line()
image-dired-move-end-of-line()
image-dired-next-line()
image-dired-previous-line()
image-dired-restore-window-configuration()
image-dired-rotate-original-left()
image-dired-rotate-original-right()
image-dired-rotate-thumbnail(DEGREES)
image-dired-rotate-thumbnail-left()
image-dired-rotate-thumbnail-right()
image-dired-scroll(&optional DOWN)
image-dired-setup-dired-keybindings(&optional ARG)
image-dired-show-all-from-dir(DIRNAME)
image-dired-slideshow-start(&optional ARG)
image-dired-slideshow-step()
image-dired-slideshow-stop()
image-dired-tag-thumbnail()
image-dired-tag-thumbnail-remove()
image-dired-thumb-file-flagged-p()
image-dired-thumb-file-marked-p(&optional FLAGGED)
image-dired-thumb-update-marks()
image-dired-thumbnail-display-external()
image-dired-thumbnail-mode()
image-dired-toggle-mark-thumb-original-file()
image-dired-toggle-movement-tracking()
image-dired-track-original-file()
image-dired-unmark-all-marks()
image-dired-unmark-thumb-original-file()
image-dired-wallpaper-set(FILE)
image-dired-window-height-pixels(WINDOW)
tumme(DIRNAME)

Defined faces (6)

image-dired-thumb-flaggedFace for images flagged for deletion in thumbnail buffer.
image-dired-thumb-header-directory-nameFace for the directory name in the header line of the thumbnail buffer.
image-dired-thumb-header-file-nameFace for the file name in the header line of the thumbnail buffer.
image-dired-thumb-header-file-sizeFace for the file size in the header line of the thumbnail buffer.
image-dired-thumb-header-image-countFace for the image count in the header line of the thumbnail buffer.
image-dired-thumb-markFace for marked images in thumbnail buffer.