Light Show Design

xLights Curtain effect on the rose window, live in the browser simulator

Design a light show for The Gothic Folly!

The Gothic Folly will come alive on playa — and we want the community to help design the shows.

You can design a show and test it on a Gothic Folly simulation before it’s even built! This page walks you through getting a live browser preview working so you can light it up with either TouchDesigner or xLights — two open-source programs used for light show design.

If you’re just getting started, probably best to start with xLights.

We put together a downloadable show-builder package that includes all of the cathedral files needed for both TouchDesigner or xLights along with two browser previews — a Rose Window sim and a 3D Cathedral Layout showing all zones in three dimensions — each with built-in test animations and live sACN support.

You can take a peek at those simulators right now — no download needed — in our online demo:

▶ Rose Window   ▶ 3D Cathedral Layout

To start building, and to wire up your own work to your own simulator, download the latest Gothic Folly show-builder package and keep reading!

⬇ Download the show-builder package


What’s in this package

show-builder/
  getting-started.md        ← you are here
  cathedral-3d-sim.html     ← 3D browser simulator (all zones)
  rose-window-sim.html      ← 2D rose window simulator
  pixel-map/                ← LED position data (used by the sims)
  relay/                    ← local relay server (live preview from xLights)
  xlights/                  ← xLights project: models, layout, config
  td/                       ← TouchDesigner data and patch generator

xLights is free, open-source sequencing software often used to create holiday light displays. The project files are already set up — you just open xLights and start creating.

Never used xLights before? These are the best places to get oriented first:

Note: The tutorials will talk about setting up controllers, models and layouts … but we’ve done that for you for The Gothic Folly. So ignore those parts! In fact, you should take care NOT to accidentally save changes to the controllers or the models to ensure your show is set to work on Playa.

1. Install xLights


2. Open the project

When you first open xLights, it may ask if xLights should create a show folder. Say No, then navigate to wherever you put this package and select the xlights folder inside it.

xLights may also ask for your email address for crash reports — that’s up to you. Enter your email or click “No thanks.”

What’s a show directory? xLights keeps all your models, sequences, and settings in one folder. We’ve already set that folder up for you — you just need to point xLights at it.

You can always change this later in the Controllers tab.


3. Explore the layout (optional — feel free to skip)

Click the Layout tab. You’ll see all the LED zones placed in 3D space: arches, spires, rose windows, canopy. Each zone is a separate model.

Being careful not to move any of the models in the window, click on the groups (represented as folders) to see which names apply to which pixels and shapes.

A couple of things to notice:

  • The “spirelets,” which are the little spires on many of the upper corners, appear as dots.
  • The main spires appear as a grid. That’s just so it’s easier to apply various 2-dimensional patterns to the spires that will spin and swirl around them.

You won’t use this view for the most part, but it’s a good reference if you need it.


4. Try the example sequence

Switch to the Sequencer tab.

Use File → Open Sequence. Pick example-sequence.xsq. You’ll see a Bars effect on the Cathedral track — look for “Cathedral” in the track list below the timeline.

First, click the Render All button (🎨) so xLights generates the preview. Then hit the Replay Selection button (🔁) and you should see the cathedral light up in the “House Preview” window. You can use your mouse to zoom in.


5. Start the relay.

The relay is a small program that listens for xLights output and forwards it to the 3D simulator. You’ll need it running whenever you want the simulator to update live.

This step uses the Terminal (Mac) or Command Prompt (Windows) — a text window where you type commands. If you’ve never used one before, don’t worry: you’ll only need a handful of commands and we’ll walk you through each one.

First time only:

Install Node.js: Download from nodejs.org — click the big “LTS” button. Run the installer and follow the prompts.

Open a terminal:

  • Mac: Press ⌘ Space, type Terminal, and hit Enter.
  • Windows: Press the Windows key, type cmd, and hit Enter.

Navigate to the relay folder: Type the following command, but don’t press Enter yet — replace the path with the actual location of the relay folder on your computer:

cd /path/to/show-builder/relay

Shortcut: On a Mac, you can type cd (with a space after it), then drag the relay folder from Finder into the terminal window. The path fills in automatically. Then press Enter.

Install relay dependencies: Type this line:

npm install

This downloads the relay’s dependencies. It only needs to run once.

Every session:

Open a terminal and navigate to the relay folder (same steps as above).

Start the relay: Type this line:

node relay.js

You should see something like:

WebSocket server listening on ws://localhost:3001
UDP receiver listening on port 5568

Leave this terminal window open and running during your session.

Firewall popup? If your computer asks whether to allow the relay to accept network connections, click Allow.

To stop the relay: go to its terminal window and press Ctrl-C.


6. Preview in the 3D simulator

Open cathedral-3d-sim.html from this package directly in your browser (double-click it in Finder/Explorer).

In xLights, click the Output to Lights button (💡) to start sending data. The simulator will show ● LIVE in the toolbar when it’s receiving. Hit play on your sequence and watch the cathedral light up!

To disconnect: click Output to Lights again.

No internet? (playa mode)

By default, the simulator loads its LED layout data from the web. On the playa without a connection, you can serve it locally instead. In a new terminal window, navigate to the show-builder folder (same steps as above, but go to show-builder instead of show-builder/relay) and run:

python3 -m http.server 8765

Then open http://localhost:8765/cathedral-3d-sim.html in your browser — it will detect the local address and use the bundled data automatically.


7. Make your own sequence

Use File → New Sequence. In the wizard, to just get a hang of things, pick “Animation” and then “Quick Start.” If you want to get fancier and set your show to music, you can pick “Musical sequence” instead of “Animations.”

Always use 40 fps. When the wizard asks for a frame rate, choose 40 fps — this is the project standard for every Gothic Folly sequence so they all play back consistently on the show controller. The starter sequences are already set to 40 fps, so if you copy one you’re good.

Drag effects from the row of effects onto the different zones, either by group or individually. Play and see what happens.

A few tips:

  • Use the Cathedral group to apply an effect to the entire installation at once
  • Use subgroups (Arches, Spires, Rose Window, etc.) to target zones
  • The Bars* and **Pinwheel effects are good starting points
  • Don’t forget to turn on your link to the 3D simulator by clicking “Output to Lights” which looks like 💡.

8. Render your sequence

When your sequence is ready: File → Save, then press F5 to render (or use the Render All button, which looks like 🎨).

xLights writes two files: your .xsq (the sequence you’ll send us) and a .fseq (a large rendered output — you don’t need to send that one, we can regenerate it).


9. Share your show!

We’d love to display your sequence on the real installation on playa. Scroll down for details. ↓


Option B — TouchDesigner

TouchDesigner is a node-based visual programming environment. The included data and patch generator let you drive all LED zones spatially using 3D position coordinates — every pixel in the cathedral has a normalized (x, y, z) position you can sample any way you like.

We need your help on this section! I (Nick) am not a TouchDesigner user and have yet to dive in. I’ve generated these instructions with the help of Claude Code, but haven’t had a chance to test them. Please reach out to me at nick@thegothicfolly.com if you have suggestions, tweaks or issues with these instructions!

1. Install TouchDesigner

Download from derivative.ca — the free tier works for this project. TouchDesigner 2023.11 or later is recommended.

2. Generate the patch

The td/ folder in this package contains two scripts:

  • generate-full-patch.py — all zones except the rose window (universes 7–75, ~3,567 pixels)
  • generate-patch.py — rose window only (universes 1–16, UV-based geometry)

Run one or both in TouchDesigner’s Textport:

  1. Open TouchDesigner
  2. Open the Textport: Alt+T (or Dialogs → Textport)
  3. Run the script by typing:
    run('/path/to/show-builder/td/generate-full-patch.py')
    

    Replace the path with the actual location of the file. Tip: drag the file into the Textport to auto-fill the path.

  4. A gothic_folly component will appear in /project1. Open it to see the patch.

3. What’s in the patch

gothic_folly/
  pixel_positions      ← Table DAT: all ~3,567 pixel positions + normalized coords
  effect_top           ← GLSL TOP: the effect texture (1024×1024)
  effect_shader        ← Text DAT: the GLSL shader source — edit this to make your effect
  pixel_sample         ← Script CHOP: samples effect_top at each pixel's position
  pixel_sample_script  ← Text DAT: the Python sampling code
  sacn_out             ← sACN Out CHOP: sends universes 7–75 to relay or F48V5
  info_text            ← Text DAT: quick reference card

The starter effect is an animated left-to-right sweep driven by each pixel’s z_norm coordinate. Edit effect_shader to replace it with your own effect.

Spatial coordinate axes (from all-pixels-positions.csv):

  • x_norm — depth: 0 = playa-facing front, 1 = back
  • y_norm — height: 0 = ground, 1 = top of spires
  • z_norm — left/right: 0 = left, 1 = right

4. Preview in the 3D simulator

Start the relay the same way as in the xLights section (steps A–E in section 5 above). The sacn_out CHOP is pre-configured to send to 127.0.0.1 (the relay on your local machine). Open cathedral-3d-sim.html in your browser — it will show ● LIVE when receiving data.

To deploy on playa, change the Network Address in sacn_out’s parameters from 127.0.0.1 to the Falcon F48V5 controller’s IP address.

5. Rose window

The rose window (universes 1–16) uses a different geometry — 16 petals, each with 14 cells mapped by UV position rather than 3D coordinates. Run generate-patch.py to generate a separate rose_window component that handles it correctly.


Sharing your show

Our goal is to get your show displayed on The Gothic Folly at Burning Man! We’re still working out the details, but if you are interested, reach out to Nick in the Lighting WhatsApp group or drop a note to nick@thegothicfolly.com

Once you’ve built something you’re happy with, here’s how to share it.

From xLights

Send us your .xsq file — that’s the sequence source file, found in the xlights/ folder with the name you gave your sequence. Include any audio file if your sequence uses music.

You don’t need to send the .fseq — that’s a large rendered output file we can regenerate ourselves.

From TouchDesigner

Send us your .toe file — that’s the full TouchDesigner project, saved via File → Save As. It includes your patch and all settings.

How to submit

We’ll set up a formal process soon, but for now reach out to nick@thegothicfolly.com.


Questions?

Reach out to Nick at nick@thegothicfolly.com or drop a note in The Gothic Folly WhatsApp group.


About the installation

The creative and software side of the installation — how pixel data becomes light, movement, and atmosphere.


Modes

Mode Description
Unattended / ambient xLights sequences played back by FPP autonomously — fire, pulse, twinkle, cathedral glow. No operator needed.
Sequenced show Pre-programmed sequences designed in xLights, played back via FPP in sync with music.
Live reactive TouchDesigner responding to sound/BPM in real time. Requires a collaborator on-site.

Software stack

Tool Role
xLights Sequence design on laptop; exports to FPP for playback
FPP (Falcon Player) Runs on the F48V5; plays back xLights sequences; handles unattended show
TouchDesigner Live reactive control, driven by sound/BPM.
Ableton Link BPM sync from nearby art cars into TouchDesigner

Data flow

Unattended / sequenced:

xLights (laptop) ──► FPP ──► F48V5 ──► SmartReceivers ──► LED strips/nodes

Live reactive:

Ableton Link (BPM)
       │
TouchDesigner ──► F48V5 ──► SmartReceivers ──► LED strips/nodes

During development, a relay server on the laptop intercepts sACN from TD or xLights and forwards it to the browser simulator. On playa, the same sACN goes straight to the F48V5 — nothing else changes.


Reference — Universe map

This table is outdated (pre-2026-07-12). The current universe map lives in Control — Universe assignments: rose window u1–2, minor arches u7–16, major arches u39–48 (full resolution), towers (spires/spirelets/canopy/chained quads) u50–75; interior orbs cut. The table below is kept only as a historical snapshot.

Universes Zone Models Pixels
1–16 Rose window 16 petal models 224
17–21 Main arches (also called major arches) 5 arch models 703
22–31 Interior mini arches (also called minor arches) 10 arch models 822
32–41 Quad arches 40 face models 1,308
42–45 Main spires 4 spire models (8×14) 448
46 ch 1–60 Corner spirelets 20 spirelet models 20
46 ch 61–447 Canopy globe strings 3 canopy runs 129
47 ch 1–351 Canopy globe strings 3 canopy runs 117

Rose window channel layout (within each universe, hub → rim)

Channels Cell  
1–3 1b hub center (innermost)
4–6 2a row 2 left
7–9 2c row 2 right
10–12 3b row 3 center
13–15 4a row 4 left
16–18 4c row 4 right
19–21 5a row 5 left
22–24 5b row 5 center
25–27 5c row 5 right
28–30 6a row 6 left
31–33 6c row 6 right
34–36 7a row 7 left
37–39 7b row 7 center
40–42 7c row 7 right (outermost)

Corner spirelets — universe 46 channel map

Channels Model Position
1–3 Spirelet-Front-Left-5 Lower tower, front
4–6 Spirelet-Front-Left-6 Lower tower, back
7–9 Spirelet-Front-Left-2 Upper cluster, back-left
10–12 Spirelet-Front-Left-3 Upper cluster, back-right
13–15 Spirelet-Front-Left-4 Upper cluster, front-right
16–18 Spirelet-Front-Left-1 Upper cluster, front-left
19–21 Spirelet-Front-Right-4 Upper cluster, front-left
22–24 Spirelet-Front-Right-1 Upper cluster, front-right
25–27 Spirelet-Front-Right-2 Upper cluster, back-right
28–30 Spirelet-Front-Right-3 Upper cluster, back-left
31–33 Spirelet-Front-Right-6 Lower tower, back
34–36 Spirelet-Front-Right-5 Lower tower, front
37–39 Spirelet-Back-Left-1 CW position 1
40–42 Spirelet-Back-Left-2 CW position 2
43–45 Spirelet-Back-Left-3 CW position 3
46–48 Spirelet-Back-Left-4 CW position 4
49–51 Spirelet-Back-Right-1 CW position 1
52–54 Spirelet-Back-Right-2 CW position 2
55–57 Spirelet-Back-Right-3 CW position 3
58–60 Spirelet-Back-Right-4 CW position 4

Show-Builder Version Log

Current version: 2026-06-05

This log tracks changes to the show-builder package. If you’ve already built sequences and a new version comes out, use this to decide what to update.


Upgrading from a previous version

When a new package is released:

Always safe to replace: cathedral-3d-sim.html, rose-window-sim.html, pixel-map/, relay/, td/, getting-started.md, version_log.md

Check this log before replacing: xlights/xlights_rgbeffects.xml — this file defines the LED models. If models changed, replace it and re-render your sequences in xLights (press F5). If pixel counts changed, the log will say so — your sequences may look different and will need to be re-rendered before they’ll work correctly on playa.

Never replace (your work): Your own .xsq sequence files and any audio you’ve added.


2026-06-05

What’s new

  • xLights — Rose Window addressing groups: Added per-cell, per-row, and per-column sub-models for the Rose Window so you can target specific parts of it in sequences:
    • Row-1 through Row-7 — each ring layer (hub → rim)
    • Col-A, Col-B, Col-C — the three branch directions
    • P01-1b through P16-7c — all 224 individual cells
    • Groups in the sequencer: Rose-Rows, Rose-Cols, Rose-Cells, Rose Window Elements

Upgrade notes

Models file (xlights_rgbeffects.xml) changed — replace it if upgrading. No pixel counts changed; existing sequences are fully compatible. Re-render (F5) after replacing.


2026-05-15

First public release of the show-builder package. Includes:

  • xLights project with all LED zones: main arches, mini arches, quad arches, spires, spirelets, rose window, canopy
  • Full nested group hierarchy (CathedralArches, Spires, Rose Window, etc.)
  • 3D browser simulator (cathedral-3d-sim.html) with live sACN preview, all zones
  • Rose window simulator (rose-window-sim.html)
  • Local relay server for live preview
  • TouchDesigner starter patch and all-zones position data

The Gothic Folly — Burning Man 2026