Tile selection

When the app first starts up, you are asked to “initialize your design” by picking a set of tiles. Different set of tiles fit together differently and have different symmetries.

Regular tiles

All of these options are made up of only regular polygons – triangles, squares, hexagons, octagons and 12-gons. Note that the canvas is pre-populated with a basic tiling, but there are many different ways to fit these tiles together!

Regular and filler tiles

All the options in this subsection feature regular polygons coupled with other shapes like bowties that enable the set to fully tile the plane. Here are some examples:

Almost-regular tiles

These are deceptive sets of polygons that look like they shouldn't be able to tile the plane but do because they are ever so slightly skewed.

Quasiperiodic tiles

These tilings all have to do with 5-fold or 7-fold symmetry.

You can learn more about these tilings by reading Penrose tilings and Girih tiles. These papers by Lu and Steinhardt and Bonner and Pelletier are also great references for constructing 5-fold and 7-fold designs.

Customizing your palette

The final option, “Custom”, defaults to a blank palette and canvas. This is convenient if you want to start from scratch and specify every single tile. Note, however that you can always customize your palette, even if you picked another option from the dropdown!

Adding a new tile

There are two ways to add a new tile to your palette; both are accessed via the Add Tile button in the toolbar.

The graphical editor is the simpler option. In the modal that pops up, you can pick a new shape by dragging the sliders for number of sides and side lengths. The display always defaults to a regular polygon, but you can further specify the dimensions of the polygon by dragging around individual vertices in the display with your mouse. The side lengths and angles update continuously to tell you what the new dimensions are. Add it to the palette by clicking "Add to Lineup".

The manual text editor is the more advanced option. You can pick a new shape by specifying the side-lengths and interior angles in degrees. Sidelengths default to all 1s if left unspecified; interior angles default to a regular polygon if left unspecified. Note that the first interior angle you specify is between the first and the second edge you specify. Sliceform Studio alerts you with an error if it is unable to parse your input or get a closed polygon from your input.

Deleting a tile

Click on the tile in the palette (it should turn blue) and click the Delete button in the toolbar.

Since the palette is effectively the template for everything in the canvas, you are not allowed to delete a tile in the palette if there are instances of that tile on the canvas.

Copying a tile

On occasion you might want more than one instance of a tile (so that they can be inscribed with different patterns). Click on the tile in the palette (it should turn blue) and click the Copy button in the toolbar.

Tile assembly

Populating the canvas

If you pick one of the preset options, the canvas is prepopulated with a sample tiling. You can grow it by adding more tiles from the palette.

Drag tiles out from the palette on the right to the main canvas (the large white area). When you release the cursor, the palette should repopulate itself.

Manipulating tiles

You can manipulate tiles on the canvas as you might expect. Drag a tile (or group of tiles) to move them. Drag a vertex of a tile to rotate the tile (or group of tiles). Drag and scroll on the canvas to pan and zoom respectively.

Joining and separating tiles

There are two ways to join tiles together.

The first (and faster) way is to dragging an edge of one tile onto an edge of another tile. When you are dragging a tile by its edge, only the edge should be highlighted blue; not the interior of the tile. If you now drag the tiles, they should move together as a common entity.

The second is to click successively on the two edges you want to join together. The first tile should snap to the second tile; their common edge should turn green, indicating that they are joined together.

A joined edge turns red when you hover on it. Clicking on it will separate the two tiles again.

When the tiles are joined in a cluster along multiple edges, sometimes it is necessary to detach multiple edges such that the two tiles are separated. Sliceform Studio will infer the minimum number of of edges required to separate tiles along that edge.

Note that edge joining is forbidden if the two edges have different lengths.

Planar tiles
This experimental feature is still in beta. To access it, click on the “Beta Features” button below the tile screen and turn on Non-planar Tiles.

Under normal circumstances, Sliceform Studio will forbid you from joining two edges belonging to the same tile or to tiles in the same group. You can disable this check by turning off “Planar” in the toolbar. Now when you click on two edges in succession, the two tiles will no longer snap together, but the edges will still turn green to indicate that they are now joined.

This is useful for creating non-planar configurations like cylinders, polyhedra and other configurations where edges are identified in topologically interesting ways. Refer to Rampart or Planetarium in the gallery as examples of this.

Copy and delete

Select a tile or a group of joined tiles in the canvas by clicking it (they should turn blue). You can then copy your selection by clicking the Copy button and delete your selection by clicking Delete button in the toolbar. You can also use the hotkeys d (for duplicate) and Backspace to do the same thing.

Copying a group of tiles can save you a lot of work when you are making a symmetric configuration of tiles.

Canvas control

The and 1:1 buttons are useful canvas control utilities. The former (“Zoom to fit”) automatically zooms to fit everything on the canvas, while the latter (“Reset zoom level”) resets the scale and centers the contents of the canvas.

Note that your cursor changes from (indicating the panning action) to when you hover over the bottom edge of the canvas. When this happens, you can drag the bottom edge of the canvas to resize the display from its default height of 500px.

Pattern design

Each tile in the palette has an associated button beside it. Click on this to bring up the pattern editor for that tile.

Basic motifs

These are common motifs in Islamic geometry which have been parametrized by sliders. “Angle” controls the contact angle between the motif and its incident edge while “Depth” controls the depth of the pattern. Sliceform Studio's implementation of these motifs is heavily based on Craig Kaplan’s implementation of the same in the Java applet Taprats.

Note that these motifs are only applicable to regular polygonal tiles.

Hankin motifs

The Hankin option is a convenient choice to inscribe a pattern within an irregular filler polygon that is consistent with the other tiles in the set.

When you specify two parameters - contact angle and edge offset - Sliceform Studio applies the Hankin inference algorithm to generate a minimal consistent pattern satisfying these two constraints.

For an n-sided polygon, Sliceform Studio constructs 2n rays: two for each edge at the specified angles and offsets. It then matches pairs of the rays up greedily to minimize total internal pattern length. For a more involved discussion of this algorithm, refer to Craig Kaplan’s paper on this technique.

Note that for some polygons and some values of angles and offsets a matching of all 2n rays is not possible.


This experimental feature is still in beta. To access it, click on the “Beta Features” button below the tile screen and turn on Pattern Inference.

The infer option is similar to Hankin above, just that the inference algorithm is deferred and run at a later stage. The boundary conditions are deduced from its neighbors, not from user-defined parameters. This can be very powerful since a different pattern can be generated separately for each tile on the canvas.

When the option is first selected, the tile is simply shaded yellow but initialized with no patterns. When there is a tile on the inferred setting in the canvas, the “Infer” button appears on the toolbar. Clicking it triggers the inference algorithm.

As with Hankin, some experimentation is needed. Sliceform Studio may not be able to construct proper patterns for certain polygons under certain boundary conditions.


The custom option allows you to design arbitrary patterns with very high specificity. This is done by dragging around handles in the thick red line (called the template) to determine the line segments that make up the pattern.

Degrees of freedom

The degrees of freedom slider allows you to control the number of handles in the template. When there are 0 degrees of freedom, the pattern becomes a single line segment connecting the incoming and outgoing edge.

Edge mapping

When you drag around the red pattern handles, you determine a pattern template which is copied multiple times and pasted onto different edges within the same polygon. This is very useful to impose certain symmetries onto the patterns within the tile. The exact way that the template is copied and pasted is defined by an edge mapping.

An edge mapping looks like a list of pairs of integers: [[1,2], [4,5], [7,8]]. In this example, the template specified by the red pattern handles enters the tile via edge 1 and leaves via edge 2. Sliceform Studio then copies and pastes two more copies of the pattern that enter from edges 4 and 7 and leave from edges 5 and 8 respectively.

Each polygon has an implicit numbering of edges from 0 to n-1 counting clockwise. To figure out this implicit labelling, set a pattern's edge mapping to [[0,1]]. You can then deduce the 0th edge, and count the edges clockwise.

If your polygon has radial symmetry, you can specify the edge mapping by providing as input the interval between consecutive patterns, the starting edge, and the number of edges spanned by the pattern.

You can also manually type in the array. If Sliceform Studio can't parse the text input into a list of pairs of integers, it will alert you of the error.

Sometimes you might want to impose mirror symmetry instead of rotational symmetry on the system. The pairs of integers in the edge mapping takes a 3rd implicit boolean argument, true/false, that indicate whether flip the pattern when copying it to that pair of edges. If omitted, the default is false.


The offset sliders work the same as they do in the Hankin option. Offsets range from -0.5 to 0.5, with 0 representing that the pattern enters / exits the edge from its midpoint.


The three symmetry options determine how a template gets extended into a full pattern that spans two edges.

  • The default is "Mirror symmetry by extending rays", where the template is built on both the start and end edge and joined in the middle by extending the two terminal rays till they complete. A template with n handles creates a pattern with 2n line segments.
  • Under "Mirror symmetry by truncating rays", the template is also built on both the start and end edge. Instead of extending the two terminal rays, Sliceform Studio builds an intermediate line segment to join the two terminal rays. A template with n handles creates a pattern with 2n+1 line segments.
  • Under "No mirror symmetry", the template is only built on the start edge. A final line segment is built to join the final point on the template and the point on the end edge at the appropriate offset. A template with n handles creates a pattern with n+1 line segments.
Multiple patterns

The "Patterns" multiselect box allows you to superimpose multiple distinct patterns on the same tile. The "Add new pattern" button creates a new pattern; "Delete pattern" deletes the currently selected pattern. The currently active pattern is displayed with a red template while the inactive ones are displayed with a pink template. When you select an inactive template to make it active, all the parameters (degrees of freedom, the edge mapping, etc) automatically update to reflect the active pattern.


This experimental feature is still in beta. To access it, click on the “Beta Features” button below the tile screen and turn on Pattern Cropping.

Sometimes, it is desirable for the final design to show just a fraction of the original tiling – for instance, if you want the result to be bounded by a rectangle. That is where the cropping feature comes in.

Click on the Crop button in the toolbar. If “Crop mode” is turned on, your tiling is overlaid with multiple black “crop points” – one for every vertex, edge midpoint and polygon center of every tile.

You can click on crop points individually to select them (and unselect them again). The cropped area of the final design will be defined as the convex hull of the selected crop points. The “Select All” button selects every black "crop point" to be part of the convex hull; the “Reset” button unselects everything.

If fewer than 3 points are selected, the corresponding convex hull has no internal area and no cropping will be applied.

Pattern Optimization

While Sliceform Studio's tools allows you to rapidly translate the pattern in your head to one on the screen, drawing with a mouse is imprecise. For example, lines you might have intended to be parallel might end up diverging slightly. The pattern optimization feature is inspired by similar constraint satisfaction systems in CAD software like Solidworks and allows you to fine-tune your designs.

To activate it, select the "Optimize" button above the tile screen. The individual tiles will fade out of view and you should see a list of constraints in the tool bar and patterns in the tile screen.

For each optimization procedure, you can select any number of constraints you would like to impose on the design. Usually for performance reasons, optimizing one or two constraints at a time is much faster than specifying all of them at once.

Specifying constraints

Pick a constraint (say, "Parallel") from the toolbar. The software will prompt you to pick the segments you want to make parallel. After you pick out a segment, you can drag the "handles" on the ends to make it shorter or longer, as long as the segment remains straight and the ends lie on vertices or intersection points.

Next, the software will prompt you to select which control points you want to vary. This is because sometimes you might want a segment AB to have equal length with CD, but you would only want to vary point A (not B, C or D) to accomplish this.

The constraint you have defined should now show up on the left sidebar.

Satisfying constraints

If there are multiple constraints, you may hover over the constraint to highlight which segments it uses. You can go on to specify more, or actually initiate the optimize by clicking the "Optimize" button.

The optimization operation should take a few seconds to run. When it is completed, the patterns on the canvas will update automatically. You can also see its performance by comparing the before and after "objective values" of each constraint. For example, for a Parallel constraint, it might show "30°→0.000447°", indicating that the two segments that were previously 30° away from being parallel are now extremely close to being parallel.

Note that the optimization process doesn't just change the lines you picked out; it operates on the underlying tile, and therefore updates every instance of that line in the entire canvas.

In most cases you can leave the "Scaling factor" field to its default of 1. It becomes relevant mainly when you specify incompatible constraints that cannot be satisfied simultaneously (e.g. setting the same pair of segments to be both parallel and perpendicular). In those cases, Sliceform Studio will still try to move around the patterns to satisfy the total sum of objectives. If you want finer-grained control to bias the optimizer to solving one constraint in favor of a second one, you can provide a larger scaling factor to the former constraint and a smaller one to the latter.

For more detail about the technical implementation of this feature, you can refer to our Bridges 2016 paper.

Strip tracing

Select "Trace and export strips" at the top of the screen. Sliceform Studio automatically figures out how to trace patterns across the joined edges at the boundary of tiles and match them up. Your tiles has been converted into interlaced strips weaving through the design!

Tracing rules

This section explains how Sliceform Studio traces the patterns to form strips under the hood. You can skip this if you're not interested in the theory.

When you specify a pattern, Sliceform Studio stores a record at each edge of the list of patterns incident at that edge. It calculates the offset of the pattern on the edge (with 0 representing the midpoint and -0.5 and +0.5 representing the two extremes) as well as the incident angle of the pattern on the edge.

When tracing is initiated, Sliceform Studio tries to match the pattern interfaces at a tile boundary, where two edges are joined together.

For each pattern p incident on an edge, the algorithm filters out the patterns from the other corresponding edge to those with edge offset compatible with p. If the filter is empty, the pattern is not matched*. If the filter returns a unique pattern, they are matched.

If there are multiple patterns originating from the same position, the algorithm picks the one with incident angle closest to that of p. It also checks that this is mutual, i.e. that p has incident angle closest to the other edge as well. If this is true, the two patterns are matched; otherwise, p is unmatched.

If no corresponding pattern is found on the other edge but there is a second pattern in the same tile as p incident on the edge at the same offset, Sliceform Studio matches both of them up such that the pattern “bounces” off the edge like a reflection.

Color assignment

The strip canvas works similarly to the tile canvas – you can drag to pan and scroll to zoom. The same canvas control buttons exist on the bottom left corner of the canvas.

What's new is the color picker on top of the canvas. When you mouseover and click on a grey strip, it is assigned the color currently active in the color picker.

Colors serve two purposes. They can be entirely aesthetic and a way to create a visually appealing image for exporting. On the other hand, if you would like to create paper strips, colors serve as categories for strips that should be generated in the same SVG files. This allows you to group strips together to be printed or laser-cut or die-cut at one go.

Display parameters

The panel below the canvas allows you to specify various parameters about the display of your design.

The strip width slider controls the width of each strip. Note that strips may appear to pass through each other in tightly interlaced situations if the strip width is very high. This is a rendering artifact of the way Sliceform Studio displays interlaced strips.

The extension length slider controls the width of the line segment that is appended to the ends of strips. Note that this is only applicable to strips that terminate in an intersection; a non-zero extension length is required to generate paper strips so that they can properly slot into each other. If you are only generating the final image digitally for aesthetic reasons, you can freely set extension length to 0.

The Draw outline switch is purely aesthetic and does exactly as it says.


Export image

If you are creating a design just for the digital output and not physical reconstruction, you can export the final result either as SVG (scalable vector graphics) or PNG (a more common rasterized format) via the SVG and PNG buttons.

Export strips

Any strips you assigned colors are categorized and show up in the “Strip Generation” sidebar on the left of the canvas. You can click on the button beside each color to display a modal with the cutting template corresponding to the strips assigned that color.

In this modal there is a 'Show Parameters' option. Clicking this displays a set of sliders that you can use to adjust various parameters that affect the generation of the cutting templates. The 'Download' button allows you to download the strips as a SVG file, which you can then feed into a laser cutter or a vinyl cutter.

When you hover over a color category in the sidebar, the display highlights all strips of that color; all other strips fade temporarily to the default grey. You can also click on the beside color categories to show a listing of all strips of that color. Hovering over a strip's label will highlight that strip in the display; reminding you which strip it is.

The Strip Generation sidebar is not just informational, but also provides an alternate way to edit the color assignments of strips. Click on the () beside a strip label to unassign colors; the strip will fade back to neutral grey. You can also drag strip labels to another color category (equivalent to clicking on that strip to paint it another color), or drag to reorder strips within the same category (no difference aesthetically, but this affects the generated paper strip SVG output).

The generated SVG file features 3 colors – the slits in black, the creases in red and the outlines in blue. This is optimized for laser cutters and die cutters, where you can pick an order to cut each color and have a different speed / power setting for each color.

JSON strip generation

This experimental feature is still in beta. To access it, click on the “Beta Features” button below the tile screen and turn on JSON Strip Generation.

Some users have requested the use of Sliceform Studio's strip generation capabilities independent of the pattern generation or tracing features. If you have a particular sliceform in mind which you have already calculated the dimensions of each strip for, you can type in a JSON input under “Manual Strip Generation” to generate the corresponding strip.

The input format is an array of strips, where:

  • each strip is an array of segments (separated by creases),
  • each segment is an array of spaces (separated by slits),
  • each space is a number

See Sunflower in the gallery for an example of an artwork that used this feature.

Load and save

You can save your in-progress Sliceform Studio design as a .slfm file by clicking the button in the toolbar or pressing the hotkey s.

Existing .slfm files can be loaded by clicking the button in the toolbar.

If you want to start a new design, click the button in the toolbar, or press the hotkey n.