Skip to content


Subversion checkout URL

You can clone with
Download ZIP
Utility for auto-generating screenshots for exercises
Fetching latest commit...
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
webkit2png @ a52a048



exercise-screens is a utility that renders PNG screenshots of every static and Perseus exercise on Khan Academy. It is a very simple script that fetches a list of exercises from /api/v1/exercises and runs webkit2png on each one. The resulting images are stored in an Amazon S3 bucket for use in various places on the site.

For historical reasons, exercise-screens generates two versions of each screenshot. The first is a "full-size" screenshot that can be any dimensions but contains the entire <div id="problemarea">. The second is a cropped square screenshot whose dimensions are guaranteed to be 256 by 256 pixels. However, this behavior is easily customizable if you'd like differently sized output.

The first version of exercise-screens used PhantomJS to capture screenshots, but now it uses spicyj's fork of webkit2png and therefore only runs on Mac OS X now. The only other prerequisite is ImageMagick; Homebrew users can get it by running the command brew install imagemagick.

Setting up exercise-screens

git clone
cd exercise-screens
git submodule update --init
[sudo] pip install -r requirements.txt

Then customize the S3 bucket name in and create a file named containing your Amazon Web Services credentials. See for an example of how your should look.

Running exercise-screens

Once your S3 credentials and bucket name are configured, simply run ./ The script will tell you what it is currently processing and how many errors it encounters. An error is not the end of the world; there currently exist some small inconsistencies in the Khan Academy content entities that cause some exercises to have URLs that don't exist.

To run exercise-screens at regular intervals, you can set it up as a LaunchAgent, which is like a cron job on OS X steroids. After customizing the example plist, do the following:

cp org.khanacademy.exercise-screens.plist.example ~/Library/LaunchAgents/org.khanacademy.exercise-screens.plist
launchctl load ~/Library/LaunchAgents/org.khanacademy.exercise-screens.plist

and then exercise-screens will be executed periodically by the system.

You might also be interested in setting up a custom error document for your S3 bucket, which will let you serve a nice placeholder image instead of an ugly 404 in the event that someone tries to access a screenshot that doesn't exist.

Something went wrong with that request. Please try again.