Themes

Gallery pages are created from a Jinja2 template index.html that must be located in THEME_DIR/templates.

Bundled themes

Sigal comes with three themes, located in the sigal/themes folder:

colorbox:
source, demo. This theme uses a Swipe plugin to browse pictures on touch devices.
galleria:
source, demo. This theme is based on the classic theme, pictures can be browsed with left/right keys, fullscreen support is available with the f key, and a map can be shown with the m key if the show_map setting is True. The leaflet_provider setting can be used to customize the tile provider (using Leaflet-providers).
photoswipe:
source, demo.

For developers, a Makefile is available to concatenate and minify the css files, using cssmin (pip install cssmin).

Variables

You can use the following variables in your template:

album
The current album that is rendered in the HTML file, represented by an Album object. album.medias contains the list of all medias in the album (represented by the Image and Video objects, inherited from Media).
index_title
Name of the index. This is either the directory name or the title specified in the index.md of the source directory.
settings
The entire dictionary from sigal.conf.py.
sigal_link
URL to the Sigal homepage.
theme.name, theme.url
Name and url of the currently used theme.

Filters

You can define custom jinja filters for your template by creating a filters.py script at the root of your template directory.

This script will then be imported and all defined functions will be available as jinja filters with the same names in your templates.

Documentation of sigal’s main classes

class sigal.gallery.Album(path, settings, dirnames, filenames, gallery)

Gather all informations on an album.

Attributes:

Variables:
  • description_file – Name of the Markdown file which gives information on an album
  • index_url – URL to the index page.
  • output_file – Name of the output HTML file
  • meta – Meta data from the Markdown file.
  • description – description from the Markdown file.

For details how to annotate your albums with meta data, see Album information.

albums

List of Album objects for each sub-directory.

breadcrumb

List of (url, title) tuples defining the current breadcrumb path.

create_output_directories()

Create output directories for thumbnails and original images.

description_file = 'index.md'
images

List of images (Image).

random_thumbnail
show_map

Check if we have at least one photo with GPS location in the album

sort_medias(medias_sort_attr)
sort_subdirs(albums_sort_attr)
thumbnail

Path to the thumbnail of the album.

url

URL of the album, relative to its parent.

videos

List of videos (Video).

zip

Make a ZIP archive with all media files and return its path.

If the zip_gallery setting is set,it contains the location of a zip archive with all original images of the corresponding directory.

class sigal.gallery.Media(filename, path, settings)

Base Class for media files.

Attributes:

  • type: "image" or "video".
  • filename: Filename of the resized image.
  • thumbnail: Location of the corresponding thumbnail image.
  • big: If not None, location of the unmodified image.
  • exif: If not None contains a dict with the most common tags. For more
    information, see Simpler EXIF data output.
  • raw_exif: If not None, it contains the raw EXIF tags.
big

Path to the original image, if keep_orig is set (relative to the album directory). Copy the file if needed.

extensions = ()
thumbnail

Path to the thumbnail image (relative to the album directory).

type = ''
class sigal.gallery.Image(filename, path, settings)

Gather all informations on an image file.

date
exif
extensions = ('.jpg', '.jpeg', '.png', '.gif')
has_location()
raw_exif
size
thumb_size
type = 'image'
class sigal.gallery.Video(filename, path, settings)

Gather all informations on a video file.

extensions = ('.mov', '.avi', '.mp4', '.webm', '.ogv', '.3gp')
type = 'video'

Simpler EXIF data output

Because the tags in the media.raw_exif dictionary are a little bit cumbersome to use, some common tags are extracted and formatted for easy use in templates. If available, you can use:

media.exif.iso
The ISO speed rating.
media.exif.focal
The focal length, formatted as a decimal number.
media.exif.exposure
The exposure time formatted as a fractional number, e.g. “1/500”.
media.exif.fstop
The aperture value given as an F-number and formatted as a decimal.
media.exif.datetime

The time the image was taken. It is a datetime object, that can be formatted with strftime:

{% if media.exif.datetime %}
    {{ media.exif.datetime.strftime('%A, %d. %B %Y') }}
{% endif %}

This will output something like “Monday, 25. June 2013”, depending on your locale.

media.exif.gps

If not None, the dict contains two keys lat and lon denoting the GPS coordinates of the location where the image was taken. lat will always be referenced to the north pole whereas lon will be referenced to east to the prime meridan. To provide a link on an OpenStreetMap you could write a template like this:

{% if media.exif.gps %}
    <a href="http://openstreetmap.org/index.html?lat={{
    media.exif.gps.lat }}&lon={{ media.exif.long}}">Go to location</a>
{% endif %}