JuggleAnim is a program to animate juggling patterns. It is designed to animate in as physically realistic a manner as possible. By this I mean that, while a pattern is of course scaled down in size to fit on the screen, the physical aspect ratio of the pattern as well as the timing of the throws is realistic. (Actually the timing can be globally scaled to slow down or speed up the pattern -- this is discussed below.)

Overall Structure

The operation of the program centers around four different elements:

  • An animator, where the actual juggling appears. This can be an attached panel (to the left of the pattern list), a separate window, multiple windows (several animations at once), or no animator at all.

  • A pattern input box, where you type in patterns. The input format is discussed in a separate documentation file here, but in the simplest case you can just type in siteswap patterns. (For those unfamiliar with siteswap notation see the notation page.)

  • A pattern list, where you can display a list of many patterns. Clicking on one of them will animate it. Patterns are listed here by loading a pattern file -- several of these files are included with JuggleAnim, or you can make your own (details below).

  • A pattern generator, which you can use to find new patterns. JuggleAnim currently sports a siteswap generator called 'J2'. The generator output goes to the pattern list, so you can click on the new patterns to animate them, or save them to a file to look at later.
  • Walkthrough

    Click here to launch the applet into its own window. When the applet comes up you will see the animator to the left (currently no animation running), and the pattern input box below it. Type "5" (no quotes) into the pattern input box and hit return -- after a while an animation of a 5-ball cascade should appear in the animation panel. Click on the animation to pause it; click again to unpause.

    Turning your attention to the right half of the window, you can see the generator control buttons at the top, and the pattern list below. Click on the button labelled "Generate!", and after a short pause a message from the generator will appear below the buttons: "22 patterns found". The pattern list below has the 22 generated patterns listed. Double-click on one of them to animate it. (When there is a pattern input box on the screen, a single click of a pattern in the pattern list will only copy the pattern to the pattern input box. Otherwise it only takes a single click to animate.)

    Now click on the "Show Controls" button, to get the generator controls window. This window contains all of the settings which tell the siteswap generator what to do. For a detailed description of everything, read the generator documentation. For now, notice the numbers across the top: 5 7 5. Change the last '5' to a '4' and then select the "synchronous" mode below. Close the controls window and then hit the "Generate!" button again -- now you will see a list of synchronous 5-ball siteswaps. Try animating the fifth one down, (6x,4)(4,6x).

    File Menu Options

    When the applet is launched into its own window (not embedded in a web page), it has its own menus. Options for the File menu are:

    Open Pattern List...

    This allows you to load a pattern list file from your local disk (not over the net). The format for these files is discussed below, but briefly speaking each pattern has a label and an animator input string -- the labels show up in the pattern list, and the animator commands are used to animate.

    Save Pattern List As...

    Allows you to create your own pattern list file with generator output, and save to your local disk

    Save Pattern Names As...

    Saves just the contents of the pattern list, with no animator commands attached. This output is not valid as a pattern file to load again, but could be used to save patterns if you wanted to print them out, for example.

    About JuggleAnim

    Shows a simple About box.

    Layout Preferences

    This pulls up a preferences window where you can change the layout of the applet, by turning on or off the various elements discussed above. Turning off the generator erases any generated patterns in the pattern list, since the generator is required to convert these patterns into animator commands.

    Quit JuggleAnim

    Quits the applet.

    Animation Menu Options

    Open Pattern...

    Lets you load an animator input string from a file on your local disk.

    Save Pattern As...

    Saves the animator input string for the currently-running animation to your local disk.

    Save HTML As...

    Saves an HTML document containing the currently-running animation as an applet call. This HTML file will need to be in a proper directory relative to the JuggleAnim .class files in order to load them properly when the HTML is browsed.

    Save Animated GIF As...

    Saves an animated GIF of the currently-running animation. The "double buffer" option must be set in the animator preferences for this menu option to become available.

    Note: this feature is disabled by default. Because the LZW compression algorithm (the basis of GIF) is patented, the relevant code cannot be included directly since JuggleAnim is open source software. You must install a separate JAR file on your system to be able to save animated GIFs; see the JuggleAnim home page for details.


    Restarts the current animation.

    Animation Preferences

    Pulls up a preferences window where you can change the animation-related settings: Frames per second, slowdown factor, animation border size, the double-buffering switch, and the "start paused" switch. The "slowdown" setting allows you to adjust the rate of time for the virtual juggler. Switching off the "double-buffering" flag saves memory at the expense of some animation flicker. The other options are obvious.

    Pattern File Format

    The format of the pattern list files is very simple: Each line is a separate pattern, and consists of an arbitrary-length label followed by one or more TAB characters, followed by instructions to be sent to the animator when the item is clicked. If there is no second field (after the tab), then the label still shows up in the listing but it is inactive.