Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Utility for auto-generating screenshots for exercises
Python
Branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
webkit2png @ a52a048 Switch back to spicyj's fork of webkit2png
.arcconfig Add default .arcconfig/.arclint file
.arclint Add default .arcconfig/.arclint file
.gitignore
.gitmodules Switch back to spicyj's fork of webkit2png
LICENSE
README.md
exercise-screens.py
lint_blacklist.txt
org.khanacademy.exercise-screens.plist.example Run the job at 9 am instead of noon
requirements.txt
secrets.py.example
webkit2png.py

README.md

exercise-screens

Introduction

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 https://github.com/Khan/exercise-screens.git
cd exercise-screens
git submodule update --init
[sudo] pip install -r requirements.txt

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

Running exercise-screens

Once your S3 credentials and bucket name are configured, simply run ./exercise-screens.py. 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.