screenplay-tools is a powerful set of helper scripts developed by Slackermedia to aid:

  1. The screenwriter in formatting and printing a screenplay written in screenwriter-mode in emacs
  2. The Assistant Director or Producer in getting important scheduling-related reports from the screenplay

screenplay-tools is free under the GPLv3 license and requires no external dependencies. To install into ~/bin, the recommended location, simply cd into the screenplay-tools directory and run the install script:

$ tar -xf screenplay-tools.tgz $ cd ~/screenplay-tools $ ./

enter your password

This obviously assumes you already have a ~/bin. If you do not, then you should do this first:

$ mkdir ~/bin
$ PATH=$PATH:/home/$USER/bin
$ export PATH

This does NOT require root privs because by default it installs everything into your home bin directory. If you prefer the commands to be available for all users of the system, just cp them, as root, to /usr/local/bin/

You can also install man pages by running, as root,, which installs man pages to /usr/share/man/man1/

You can also find an in-line quick-reference guide by running screenplay-help


A convention that Slackermedia uses is to name scenes written in screenwriter.el with the extension .scp and either complete screenplays or blocks of text to be processed as screenplays with the extension .screenplay. This is obviously not a requirement, but screenplay-tools is written under these assumptions (although it is free software, so you are free to change it to suit your own workflow).

An example screenplay directory might, therefore, look like this:

$ cd ~/slackermediaTheMovie $ ls 00.scp 01.scp 02.scp 03.scp

and so on...

In this way, scenes are easily re-arranged, shelved, archived, printed, etc. In other words, take advantage of the UNIX philosophy and keep it modular.

screenplay-tools itself is only the application suite. The actual commands are:

  • screenplay-build - to preview your screenplay as a single document
  • screenplay-title - to easily generate a formatted title page
  • screenplay-print - to create a printable document
  • screenplay-location - to generate a report on locations and sets
  • screenplay-character - to generate a report on characters and casting
  • screenplay-help - instant stdout help


For a quick preview of your screenplay as one big document, use

$ screenplay-build ~/myScreenplayDir

which concatenates anything appended with .scp into one complete preview.screenplay, indents it for readability, and places that preview file in whatever directory you currently are in.

If you've configured your system with the Slackermedia .emacs file, then preview.screenplay will open in screenplay-mode in Emacs, and is obviously also readable (being plain text) in any other text editor you choose.

Note that this is intended as a quick, single-file preview of your screenplay only and does not contain page-numbers or scene numbers.


To generate a properly formatted title page for your screenplay, use:

$ screenplay-title

which interactively creates and saves the file with a capitalized and centered title, a correctly placed by-line, and your contact info.


Once you're ready to print the screenplay, and after you have generated a, use

$ screenplay-print [directory with all your .scp files in it]

which will attempt to auto-detect the title and author from your (although it allows for override), indent your script by 8 spaces to provide for a left margin, number scenes by occurence of SLUGLINES, add the to the front of the document, and insert form feed characters to enforce page breaks.

Finally, it will ask you to confirm printing via lpr

If you are ready to print, then answer y and it will send the printable script and the title page to your default line printer.

Otherwise, you'll be left with a print.screenplay, which you can review and print at your leisure.

If you do not have an lpr printer configured, then you can use the –no-print flag. This will not attempt to print but will save a print-friendly version of your script to a file.


If you want the lpr printing to work, you should open up the CUPS admin panel in a web browser. You reach this by opening a web browser to, and you will probably need the root password.

In the ADMINISTRATION panel of this page, you can MANAGE PRINTERS or add a new one if you haven't used a printer on the system yet. Do that, and set a printer as an lpd: printer, and set that as your default. As an example, one might go to CUPS and add a new printer, selecting the production office's Ricoh 1060 printer by way of its IP address: lpd:

Choose the matching driver, which is conveniently already installed (but if yours isn't, go to and find the ppd file). Mark this printer as your default.

If you want to save your screenplay to a PDF and email it to your production staff and actors, there are a few different options.

The easiest and most direct method is to download text2pdf, a small application by Phil Smith, which takes plain text and creates a PDF. There is both the source code and a GNU MakeFile available from the website.

To compile it, simply download both, place them into a consolidated folder, and run make. You can then move text2pdf to either ~/bin or a systemwide bin directory.

Once installed, you can do this:

$ text2pdf print.screenplay > slackermediaTheMovie.pdf

This produces slackermediaTheMovie.pdf, viewable in any PDF viewer.

If, on the other hand, you prefer or want to use CUPS as a pdf “printer”, then you can download the cups-pdf ppd from its website, install it, create a printer backend for it, and print.

This is more complex than using text2pdf and there is no noticeable advantage, but a good overview of it can be found on doku.php?id=slackware:cups


Once the screenplay is finalized, one of the first things you'll want are LOCATION reports and CHARACTER reports.

You should have a preview.screenplay or a print.screenplay for these to work the way they are intended to work. But there's nothing stopping you from running it on individual scene files, either.

To get a list of all locations in your screenplay, run this:

$ screenplay-location [input file] [output file]

This will interactively generate one of 4 types of location reports, or one that includes them all:

  1. List of all (unique) locations
  2. List of all INT. locations
  3. List of all EXT. locations
  4. List all locations in script order
  5. Generate all of the above in one report

By default, you end up with a printable report with appropriate headings to indicate what report it is.


screenplay-location is programmed to eliminate common transitions and other capitalized words from its list, but there is obviously a chance that something will get listed as a location when it is not. You may need to review your location list for these quirks before sending it out to your entire production crew.

If you prefer to keep the reports digital, you can specify an output file with the .org extension, such as to produce a document without enforced page breaks or headers, formatted for use in org-mode's outline view.


Org-mode is a major mode for Emacs which excels at project management and is, along with screenplay.el and screenplay-tools, all a movie production needs for its organizational and scheduling needs. Learn more about it, and download it, from


Before you start casting, you will want a report of all the characters you've written into your movie so that you know what casting slots you must fill.

screenplay-character searches for all the CAPITALIZED character names with dialogue. It will also therefore catch transitions, but it uses grep and sed to eliminate as many false positives before you see the final report. Also eliminated from the list are transitions, like CUT TO, FADE IN, FADE OUT, etc. but you should review the output before distributing the report to your casting director.

By default, this list is formatted for printing with appropriate headers and page breaks as needed. As with screenplay-location, if you prefer to keep the reports digital, you can specify an output file with the .org extension, such as and a document without enforced page breaks or headers, formatted for use in org-mode's outline view will be produced.