Light Show Design

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
Option A — xLights (recommended for beginners)
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:
- xLights Quick Start Guide — official written walkthrough
- xLights Quick Start playlist — official video series (YouTube)
- xLights Beginner Seminar Jan 2021 — Part 2 — the xLights deep dive; Part 1 covers the intro hardware/setup context (YouTube)
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
- Mac: Download from the Mac App Store — free.
- Windows / Linux: Download from xlights.org/releases — free. Run the installer and follow the prompts.
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 therelayfolder 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:
- Open TouchDesigner
- Open the Textport: Alt+T (or Dialogs → Textport)
- 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.
- A
gothic_follycomponent 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 = backy_norm— height: 0 = ground, 1 = top of spiresz_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-1throughRow-7— each ring layer (hub → rim)Col-A,Col-B,Col-C— the three branch directionsP01-1bthroughP16-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 (
Cathedral→Arches,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