Skip to main content

Bruce, the Presentation Tool, puts reStructuredText in your projector

Project description

Bruce, the Presentation Tool is for people who are tired of fighting with presentation tools. Presentations are composed (edited) in plain text files. It allows text, code, image, interative Python sessions and video. It uses pyglet to render in OpenGL.

Please REMOVE any previous installation of Bruce if you’re upgrading from prior to version 3.0!

Changes in this release:

  • handle errors from pygments

  • add optional use of smartypants curlify if installed (thanks Ned Batchelder)

  • fix windows .pyw launcher script

  • make layout parsing more robust

  • raise specific warnigs about layout -> style sheet changes

  • add missing option values to GUI launcher

  • align tables so the header row rests on the baseline

  • have window be invisible until all initialisation is complete

Bruce, the Presentation Tool Features

  • displays reStructuredText content with one page per section or transition

  • has a “bullet mode” which displays one page per bullet point

  • handles of most of reStructuredText, including:

    • inline markup for emphasis, strong and literal

    • literal and line blocks

    • tables (no row or column spanning yet)

    • block quotes

    • definition, bullet and enumerated lists (including nesting and optional gradual expose)

    • images - inline and stand-alone, including scaling

    • page titles (section headings)

  • some extensions to reStructuredText:

    • embedded Python interative interpreter sessions

    • code blocks with syntax highlighting (requires optional Pygments install)

    • videos (embedded just like images) with optional looping

    • stylesheet and layout changes on the fly (eg. multiple fonts per page)

    • transitions between pages

    • plugins to create your own inline elements

  • page layout and decorations

  • scrolling of content larger than a screenful

  • sensible resource location (images, video, sound from the same directory as the presentation file)

  • recording of timing and screenshots

  • playback of previous recording or a constant speed, with optional looping

  • timer and page count display for practicing

  • control which screen to open on in multihead

  • run fullscreen at native resolution

  • may switch to/from fullscreen quickly

  • automatic typographic glyph generation if smartypants is installed


Bruce requires Python 2.5 or later to be installed on your system. Obtain it from <>.

Please download the Bruce version for your operating system from <>:

  • Linux “bruce-<version>” (eg. “”)

  • Windows “bruce-<version>” (eg. “”)

  • OS X “bruce-<version>” (eg. “”)

Unzip the application and double-click the “bruce” program in the created folder. The program may be shown with a “.sh” or “.pyw” extension. Linux users may choose to run the program in a terminal.

Bruce may optionally use the smartypants module’s curlify to automatically produce typograpically correct quotation marks (also known as “smart quotes”), en- and em-dashes and ellipses. Get smartypants from:

If the application does not work and you’re on Linux you may need to install an optional python tkinter package. This is usually achieved by invoking something like:

sudo apt-get install python-tk

If you are a system package maintainer then please read the INSTALL.txt contained in the source distribution “bruce-<version>.tar.gz” or the Subversion repository at <>

How to use Bruce, the Presentation Tool

On Windows you may just double-click the “” file.

On other platforms run:

% bruce [presentation source.txt]

If you’ve not installed Bruce then you may run from the source:

% python [presentation source.txt]

There’s a number of command-line controls - use bruce -h to learn what they do. With no command-line arguments Bruce will pop up a simple GUI.


When running a presentation the following controls are active:

left, right arrows; left, right mouse button; space bar (forward)

Move back and forward pages. If the page contains a list and list-expose has been enabled then each list item will be exposed in turn before the next page is displayed.

page up, page down

Move back and forward 5 pages.

mouse scroll wheel

Scroll large page content. You may also drag the contents up or down by dragging a left mouse button press up and down the screen. If a page has an embedded Python Interpreter you may use the scroll-wheel to scroll its contents (when the mouse is over the interpreter). Clicking and dragging always scrolls the whole page.


Switch between fullscreen and windowed mode


Save a screenshot as “screenshot-<random number>.png” in the current directory.


Exit presentation

home, end

Go to the first or last page

How to write presentations using Bruce, the Presentation Tool

Bruce presentations are written as plain-text files in the reStructuredText format with some extensions. See the examples folder *.rst files for some samples, the simplest being “simple.rst” which displays plain text sentences centered on a white background (using the “big-centered” style):

.. load-style:: big-centered

Text displayed centered on the default white background.


A new page, separated from the previous using the four

Ut enim ad minim veniam.

A Page Title

Pages may optionally have titles which are displayed
centered at the top by default.

and so on. For more information see the HOWTO (also available online at the Bruce website) and the optional extra examples download from <>.

Automatic Playback

Bruce has facilities for recording and playing back presentations.

The --record command-line option causes Bruce to write screenshots of each page and timing information to the directory specified. For example if you run:

python run_bruce examples/test_images.rst --record=/tmp/test_images

then once you’ve run through the presentation you’ll find Bruce has populated /tmp/test_images with:


Where the contents of timing.txt are a timestamp (in seconds) and the screenshot displayed at that time:

1231803728.3 screenshot-0.png
1231803731.9 screenshot-1.png
1231803733.4 screenshot-2.png
1231803738.9 screenshot-3.png

There’s a few options for automatically playing a presentation:

Playing back a recording

You may play back the recording captured by using the --playback command-line option. Supply it the location of a timing.txt file as generated by --record.

The times in timing.txt could also start at 0 and that the screenshot filenames are ignored by --playback (it quite happily accepts a file with just times) so the following is equivalent to the timing.txt from above as far as playback is concerned:

Constant-speed playback

If you just want to display each page in a presentation at a constant speed (like a slide show) then you may use the --playspeed command-line option. This gives a delay in seconds to pause bewteen each page.

The playback speed will take page transitions into account - the delay starts from the start of the transition.


If you wish for your automitically-played presentation to loop then use the --loop command-line option.

Only play once

If you wish for your automitically-played presentation to quit after playing through once use the --autoquit command-line option.

Automatically capture a screenshot of every page

You may combine --record and --playspeed to automatically page through the presentation and capture a screenshot of each page. Use something like:

python examples/test_image.rst --record=/tmp/test_images \

You’ll want to make sure the presentation has:

.. style:: none

at the top. Using a speed faster than .5 is discouraged until some fine-tuning of timing can be done.


The original software comprising Bruce, the Presentation Tool is copyright (c) 2005-2009 Richard Jones <>.

It is shipped with many contributing parts.

See LICENSE.txt for full licensing information.

Project details

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page