Thumbnails for everyone

Syntax Rules

%THUMBNAIL{ name="filename" variant="size" }%

Given an image file name, returns the name of its thumbnail file of the given size.

Normally, you don't give the size, as it will default from a preference variable. But if you want an especially large (or small) icon selectively, the syntax allows for that.

This plugin can be enabled on a per-topic, web, or site basis using the THUMBNAILPLUGIN_ENABLE preference variable.

When this plugin is enabled for a topic, any image attachment that is saved will have one or more thumbnails autogenerated for it. Image attachments types currently supported are: .jpg .gif .png

The thumbnail's size will be determined from the preference variable THUMBNAILPLUGIN_SIZE, which defaults to 150 (pixels).

The preference variables can be set in the containing topic, your home topic, the containing web's WebPreferences topic, or the site WebPreferences topics. If a preference is set in multiple places, the value closest to the topic using the plugin will be used.

Use multiple sizes for accessibility as well as for esthetics. However, they do take time to generate, so don't go too wild.

Used with the AttachLinkPlugin and ImgPlugin, it becomes easy to do things like display hyperlinks to images as thumbnails of that image. Examples below. But if that's what you want, use %THUMBVIEW instead.

Note that the THUMBNAILPLUGIN_ENABLE preference controls thumbnail generation on upload; it does not control expansion of the %THUMBNAIL and %THUMBVIEW variables.

%THUMBVIEW{ name="filename" variant="size" topic="topic" web="web" caption="string" cpos="position" align="string" border="" height="" width="" id="" class="" link="filename" ltopic="topic" lweb="web" fullpath="" }%

This is a lot simpler than it looks, as all the defaults are reasonable.

  • name - Filename of image to be displayed. Required.
  • variant - Thumnail size to be displayed. Defaults to the first value of the THUMBNAILPLUGIN_SIZE preference variable.
  • topic - the topic to which the image is attached. Defaults to the current topic.
  • web - the web containing the topic to which the image is attached. Defaults to the current web.
  • caption - string to be used to caption the thumbnail. If present, the thumbnail will be displayed within a small table. If not, no caption will be used.
  • cpos - caption position: top, bottom, left or right. Where to position the caption. Default is bottom.
  • align, border, height, width, id, class - usual HTML tags, applied to the thumbnail or the table that contains it.
  • attrs="string" - arbitrary html tag='value' list if you really need that level of control - e.g. onclick= or some such
  • link - filename of attachment to be displayed when the thumbnail image is clicked. Defaults to the name argument (that is, the full size version of the thumbnail)
  • ltopic, lweb - topic & web to which the link target is attached. Default to the topic, web arguments.
  • nolink - set to 1 if you don't want the thumbnail to be clickable.
  • lid, lclass, ltarget, lname - HTML parameters applied (without the leading l) to the link.
  • fullpath - set to 1 if you want the link references to include the hostname; 0 will just specify the resource. Default is THUMBNAILPLUGIN_FULLPATH, or 0 if undefined.
  • lalign, lborder, lheight, lwidth, lid, lclass - usual HTML tags, applied to the link.
  • lattrs="string" - arbitrary html tag='value' list for the link if you really need that level of control


The ThumbnailPlugin distribution also includes attachutil, which is a utility script for manipulating attachments. Although it has special support for ThumbnailPlugin, it is generally useful, especially for refactoring topics. (Perhaps someone would like to package it as a separate Contrib.)

attachutil is located in the tools directory, and has the following commands:

  • attachutil attach -h -r -c 'comment' web.topic files

    • Attaches listed files to web.topic.
    • -h will mark the files 'hidden' (not shown in the attachment table)
    • -r will replace existing attachment of the same name if it exists
    • -c provides the attachment's comment (shown in the attachment table)
  • attachutil hide web.topic attachments

    • Mark existing attachments as hidden

  • attachutil unhide web.topic attachments
    • Mark existing attachments as visible

  • attachutil list -v web.topic attachments
    • list attachments; default is to list all
    • -v will show thumbnail sizes

  • attachutil move -r web.topic web.topic attachments
    • Move existing attachments from web.topic1 to web.topic 2
    • May specify destination web, topic, or web.topic
    • Default destination is same web, same topic
    • Will move thumbnails

  • attachutil remove web.topic attachments
    • Remove existing attachments from topic
    • Actually, moves them to the configured Trash web, attachment
    • Will add a sequence number if the name already exists in the trash, unless -r is specified.

  • attachutil thumb sizes web.topic attachments
    • Adds sizes (one or more) thumbnails to existing attachments
    • Use when auto thumbnail generation was not enabled at initial upload, or when you need new size(s)
    • sizes are in pixels, space separated list
    • Ignores attachments that are not a known image type

  • attachutil update web.topic attachments
    • Updates file size, date attributes of existing attachments
    • Useful if you've broken the rules and manipulated attachments with non-wiki tools

General rules:

  • Default web is Sandbox - though this may be changed in the future.
  • -v will list each action on stderr
  • -u username will change the (OS) user to username if script is run as root/uid 0.
    • Default is 'apache'
    • Helps keep file ownership correct for thumbnails.
  • -r will replace existing attachment
  • attachment names can be wildcarded (shell-style glob); use shell quotes
  • You can alias (or softlink) any command to save typing.

This plugin requires the GD and Image::MetaData::JPEG libraries from CPAN.


This is a working prototype. Because of limitations of the current plugin interface, thumbnail auto-creation is unclean.

  • Do not rely on the filenames or locations of the thumbnail files, which are subject to change.
  • Do not name attachments _thumbnail_size. - these are the currently auto-created files.
  • You probably will not want the {AutoAttachPubFiles} configuration option set, as the thumbnail files are not (yet) first class attachments.
  • Until the plugin interface issues are resovled, this may break in future versions of the wiki.

It is intended, but not guaranteed that updates to correct these issues will not require changes to your topics. They may require running an upgrade script.

Although this warning may sound a bit scary, the plugin seems useful in its current state -- feedback is welcome (as is assistance with the plugin API issues, which are documented on


%ATTACHMENT{"foo.jpg" label="%IMG{"%THUMBNAIL{"foo.jpg"}%" align="left" }%"}%

This is equivalent to the previously-required HTML markup

<a href="%ATTACHURL%/foo.jpg"><img src="%ATTACHURL%/foo_thumbnail_150.jpg" align="left" /></a>

or the slightly better:

%ATTACHMENT{ "foo.jpg" label="%IMG{ "foo_thumb_150.jpg" align="left" width="40" class="none" }%}%

Of course, neither of the previous methods support multiple sizes as easily, nor are they as well abstracted from the attachment implementation.

The easiest, and recommended use is:


This will display a default sized thumbnail of foo, making it clickable to the full-sized version.

%THUMBVIEW{"foo.jpg" caption="foo revealed"}%

is about as complex as is ordinarily needed.

alias attach='/blah/twiki/tools/attachutil attach'
alias list='/blah/twiki/tools/attachutil list'
ln -s /blah/twiki/tools/attachutil hide
attach TestTopic100 *.jpg *.png
list TestTopic100 '*.png'
./hide TestTopic100 'Secret*.png'
/blah/twiki/tools/attachutil thumb 100 200 400 TestTopic100 'My*.png'

Plugin Settings

Plugin settings are stored as preferences variables. To reference a plugin setting write %<plugin>_<setting>%, i.e. %NEWPLUGIN_SHORTDESCRIPTION%

  • One line description, is shown in the TextFormattingRules topic:
    • Set SHORTDESCRIPTION = Painless links to attachments

  • THUMBNAILPLUGIN_ENABLE = on, off : enables thumbnail auto-creation on save. Inherits by the usual preference rules.
  • THUMBNAILPLUGIN_SIZE= decimal_number : defines the default size of auto-created thumbnails. You can specify a (space or comma-separated) list, in which case multiple thumbnails (1 of each size) will be generated. The first (or only) size listed is the default variant used by %THUMBNAIL%.
  • THUMBNAILPLUGIN_FULLPATH = on, off: default fullpath parameter: on will include hostname (protocol and port) in links; off will not. You may want to set this on a global basis for things like GenPDF.

Plugin Installation Instructions

Note: You do not need to install anything on the browser to use this plugin. The following instructions are for the administrator who installs the plugin on the TWiki server.

  • Download the ZIP file from the Plugin Home (see below)
  • Unzip in your twiki installation directory. Content:
File: Description:
data/TWiki/ThumbnailPlugin.txt Plugin topic
data/TWiki/ThumbnailPlugin.txt,v Plugin topic repository
lib/TWiki/Plugins/ Plugin Perl module
tools/attachutil Attachment utility
  • Configure the Plugin:
    • TWiki 4.0 and up: Run the configure script to enable the Plugin
    • Change the Plugin settings as needed

Plugin Info

Plugin Author: TWiki:Main.TimotheLitt
Copyright: 2008, 2009, TWiki:Main.TimotheLitt
License: GPL (GNU General Public License, Perl artistic)
Plugin Version: 2 Jan 2009 (V1.1)
Change History:
02 Jan 2009 V1.1 - Add THUMBVIEW, attachutil, handle per-topic preferences as intended
20 Dec 2008 V1.0 - Initial version
TWiki Dependency: $TWiki::Plugins::VERSION 1.1
CPAN Dependencies: GD:: Image::MetaData::JPEG
Other Dependencies: none
Perl Version: 5.005
Benchmarks: GoodStyle nn%, FormattedSearch nn%, ThumbnailPlugin nn%
Plugin Home:

Related Topics: TWikiPlugins, DeveloperDocumentationCategory, AdminDocumentationCategory, TWikiPreferences

-- TWiki:Main.TimotheLitt - 21 Dec 2008

-- TWiki:Main.TimotheLitt - 02 Jan 2009

Edit | Attach | Watch | Print version | History: r4 < r3 < r2 < r1 | Backlinks | Raw View | Raw edit | More topic actions
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 1999-2024 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback
Note: Please contribute updates to this topic on at TWiki:TWiki.ThumbnailPlugin.