Try it online β no installation required.
A browser-based scene editor for the Showlite DMX Master Pro USB lighting controller. Load, edit, and save .PRO files directly in your browser β no software installation required.
The .PRO file format was fully reverse-engineered from raw EEPROM dumps. This project documents the binary format and provides tools to view and modify scene data, channel configurations, fixture calibration, and gobo/color wheel presets outside the physical controller.
- Lighting technicians who want to prepare or edit scenes on a computer instead of programming on the hardware
- Hobbyists using the Showlite DMX Master Pro USB who need more visibility into their programmed scenes
- Open
index.htmlin any modern browser (Chrome, Firefox, Edge, Safari) - Click the file input and select a
.PROfile from your Showlite controller - The editor loads all 240 scenes (30 banks Γ 8 scenes)
- Use β β to cycle through scenes 1β8 within the current bank (wraps around)
- Use β β to switch between banks (wraps around), keeping the same scene position
- The header shows the current Bank / Scene number and whether the scene is empty
- Each scene displays a grid of 12 scanners Γ 16 channels
- Drag sliders to change DMX values (0β255)
- Non-zero channels are highlighted in green
- A dimmer indicator column shows the brightness level of each scanner
For scanners with Pan and Tilt channels configured, a 2D control pad appears in the scene table. Click and drag to position the fixture in a -90Β° to +90Β° range for both Pan (horizontal axis) and Tilt (vertical axis). The pad expands on hover for higher precision.
The pad uses the 3-point calibration stored in Bank 30, Scenes 2β4 to translate degree positions into the correct DMX values for each scanner. This means:
- -90Β° maps to the DMX value recorded in Scene 2 (hard left / full down)
- 0Β° maps to the DMX value recorded in Scene 3 (center / level)
- +90Β° maps to the DMX value recorded in Scene 4 (hard right / full up)
Between calibration points, DMX values are linearly interpolated. Each scanner uses its own calibration, so fixtures with different DMX ranges are handled correctly.
The pad displays degree tick marks at -90Β°, 0Β°, and +90Β° on both axes, and a live readout showing the current Pan and Tilt position in degrees (e.g. P:45Β° T:-30Β°).
- Click scanner numbers on the left to select/deselect them (highlighted in blue)
- Click "All" to select or deselect all scanners at once
- When multiple scanners are selected, moving a slider or the Pan/Tilt pad on one scanner automatically mirrors the change to all other selected scanners
- Useful for programming multiple identical fixtures at once
- Copy Scene: Enter a source and destination scene number (1β240) and click Copy
- Copy Bank: Enter a source and destination bank number (1β30) to copy all 8 scenes at once
Each scanner row has three small buttons (requires double-click to prevent accidental use):
- C β Copy all channel values of this scanner to the clipboard
- V β Paste the clipboard into this scanner (overwrites all channels)
- β β Fill forward: copies this scanner's channel values into all following scenes within the same bank (e.g. from Scene 3 to Scenes 4β8). Useful for setting a base position across an entire bank.
- Clear Scene: Resets all channel values in the current scene to 0
- Clear Bank: Resets all 8 scenes in the current bank to 0
Click "πΎ Download Modified .PRO" to save the edited file. The browser downloads a new .PRO file (with _modified appended to the filename) that can be loaded back onto the controller.
Bank 30, Scene 1 is a special configuration scene that defines what each channel controls for each scanner. This data is used by the editor to display contextual labels, enable the 2D Pan/Tilt pad, and power the gobo/color preset system.
- Click "βοΈ Enter Channel Config" in the toolbar
- For each scanner, use the dropdown on every channel to assign its function:
| ID | Attribute | Description |
|---|---|---|
| 0 | NONE | Not assigned / generic channel |
| 1 | PAN | Pan (horizontal movement) |
| 2 | PAN_FINE | Pan fine (16-bit precision) |
| 3 | TILT | Tilt (vertical movement) |
| 4 | TILT_FINE | Tilt fine (16-bit precision) |
| 5 | DIMMER | Master brightness |
| 6 | RED | Red color component |
| 7 | GREEN | Green color component |
| 8 | BLUE | Blue color component |
| 9 | WHITE | White/amber component |
| 10 | COLOR_WHEEL | Color wheel position |
| 11 | GOBO_WHEEL | Gobo pattern wheel position |
| 12 | STROBE | Strobe speed/effect |
| 13 | SPEED | Movement speed |
| 14 | WLED_FX_ID | WLED effect selection (dropdown) |
| 15 | WLED_FX_SPEED | WLED effect speed |
| 16 | WLED_FX_INT | WLED effect intensity |
| 17 | WLED_FX_PALT | WLED palette selection |
| 18 | WLED_FX_OPT | WLED effect option |
- The mappings apply immediately to all other scenes in the editor
Note: This configuration is stored inside the
.PROfile itself (Bank 30, Scene 1). It does not affect the physical controller's behavior β it only controls how the web editor displays channels.
Bank 30, Scenes 2β8 store calibration reference values and gobo/color wheel presets.
These scenes let you record the DMX values for specific physical angles:
| Scene | Angle | Purpose |
|---|---|---|
| 2 | -90Β° | Hard left / full down |
| 3 | 0Β° | Center / level |
| 4 | +90Β° | Hard right / full up |
Adjust the Pan and Tilt sliders until the connected fixture reaches the exact physical position, then save. The editor highlights Pan/Tilt channels with a yellow background and "π Calib" label.
Once all three calibration points are set for a scanner, the 2D Pan/Tilt pad in normal scenes (Banks 1β29) will convert degree positions to DMX values using piecewise linear interpolation between the three reference points. This allows you to position fixtures in degrees regardless of their underlying DMX range.
All 7 scenes double as preset storage for gobo and color wheel channels:
- Scenes 2β4: Pan/Tilt calibration AND presets 1β3
- Scenes 5β8: Dedicated presets 4β7
- Click "π Enter Calibration Scenes" to navigate to Bank 30, Scene 2
- Use arrow keys to move between scenes 2β8
- Adjust the Gobo Wheel and Color Wheel channel sliders to the desired DMX values
- Each scene stores one preset per scanner β presets can differ between scanners (useful for mixed fixtures)
In Banks 1β29, Gobo and Color Wheel channels display a dropdown menu instead of a slider:
- Default: Sets the channel to 0 (off/default position)
- Preset 1β7: Instantly load the DMX value stored in Bank 30, Scenes 2β8
The dropdown automatically detects which preset matches the current value. Changing a calibration value in Bank 30 updates all scenes that reference that preset.
The editor can send DMX data directly to connected fixtures via a USB-to-DMX interface using the Web Serial API (Chrome/Edge only).
- Raw USB-to-RS485 (default): Cheap adapters that pass serial bytes directly to the DMX bus. Uses 250000 baud, 8N2, with BREAK signal timing.
- ENTTEC DMX USB Pro: Professional interface using framed packets at 57600 baud.
Click the π‘ Raw RS485 / ENTTEC Pro button to toggle between modes.
- Click "
βΆοΈ DMX Output" to open the browser serial port picker - Select your USB-DMX adapter
- The editor continuously sends the current scene's channel data at 20 Hz
- Slider changes are reflected in real-time on connected fixtures
- Click "π΄ DMX Stop" to disconnect
Note: Web Serial requires Chrome or Edge. The serial port prompt requires a user gesture (the button click).
The Operator provides a full live-performance control surface: auto-step through scenes with crossfade, quick bank switching, tap tempo, master dimmer, and strobe effects β all without modifying the underlying scene data.
Click "π¬ Operator" in the toolbar to toggle the operator panel.
A 30-button bank grid (color-coded in groups of 5) lets you jump to any bank instantly:
- Left click β permanent bank switch
- Right click (hold) β temporary preview; releases back to the previous bank
- Start / Stop β begin or halt the auto-step loop through scenes 1β8 of the current bank
- Step Time (0.1β20s) β interval between scene transitions
- Fade Time (0.1β20s) β DMX crossfade duration between scenes
- TAP button β tap in the beat; averages up to 8 taps to set Step and Fade time together (fade = 50% of step). Resets after 3 seconds of inactivity.
A 0β255 slider that scales all scanner dimmer channels proportionally. Enable it with the checkbox; when unchecked the dimmer override is bypassed.
All effect buttons support two interaction modes:
- Left click β toggle on/off (permanent)
- Right click (hold) β active only while held (temporary)
| Button | Effect |
|---|---|
| β¬ BLACKOUT | Forces all dimmer channels to 0 (highest priority) |
| β‘ STROBE | All scanners flash together at 10 Hz (30% duty cycle) |
| π² RND STROBE | Random ~50% of scanners flash; the others stay off. Random selection changes every 200 ms. |
- All DMX channel values are linearly interpolated between the previous and next scene over the fade duration
- Gobo Wheel, Color Wheel, and WLED FX ID channels are excluded from fading β they snap instantly to avoid garbage intermediate values
- The operator cycles through scenes 1β8 within the current bank, wrapping back to scene 1
- The scene display updates as scenes advance
When the operator panel is open and DMX output is active, all operator overrides (master dimmer, blackout, strobe) are applied to the DMX stream in real-time. This means connected fixtures respond immediately to operator controls without modifying the saved scene data.
- Insert a USB flash drive into the USB port on the back of the Showlite DMX Master Pro USB
- On the controller, enter the USB save mode (consult your controller's manual for the exact button sequence β typically hold a combination of function buttons)
- The controller writes its entire EEPROM contents to the USB drive as a
.PROfile (e.g.,FILE1.PRO) - The display will show "succeeded" when the write is complete
- Remove the USB drive and copy the
.PROfile to your computer
- Place the modified
.PROfile on a USB flash drive (use the original filename, e.g.,FILE1.PRO) - Insert the USB drive into the controller
- Enter the USB load mode on the controller
- The controller reads the
.PROfile and writes it to its internal EEPROM - Once complete, all scenes, chases, and settings from the file are active on the controller
Important: The file must be exactly 131,584 bytes. The editor preserves this size automatically. Use a FAT32-formatted USB drive for best compatibility.
The editor includes a built-in AI lighting designer powered by the OpenAI API. It can create complete light shows by programming all 8 scenes of a bank through natural language commands.
- Click the "π€ AI Agent" button in the toolbar to open the chat panel
- Enter your OpenAI API key when prompted (stored in browser localStorage)
- Describe the light show you want
Use the dropdown in the chat header to choose your preferred OpenAI model:
gpt-4o(default),gpt-4o-mini,gpt-4.1,gpt-4.1-mini,gpt-4.1-nano,o4-mini
The selection is persisted across sessions.
- Create full shows: "Create a chill blue-purple ambient show" β programs all 8 scenes with color progressions, dimmer dynamics, and smooth loops
- Set colors: "Make all scanners red" β sets RGB values across all scenes
- Position fixtures: "Create a circular motion on scanner 1" β plans an 8-step pan/tilt trajectory
- Use calibration: Reads color wheel and gobo wheel presets from Bank 30 before setting wheel channels
- Copy and arrange: "Copy scene 1 to scenes 2-8" or "Copy this bank to bank 5"
| Tool | Description |
|---|---|
get_channel_config |
Read channel attribute mappings for all scanners |
get_wheel_presets |
Read calibrated color/gobo wheel DMX values from Bank 30 |
get_scene_info |
Read all channel values for a scene |
set_scene_batch |
Set multiple scanners/channels in one scene (most efficient) |
set_colors_batch |
Set RGB(W) + dimmer for multiple scanners |
set_position |
Set pan/tilt in degrees using calibration |
set_channel |
Set a single channel value |
clear_scene |
Zero all channels in a scene |
jump_to_scene |
Navigate the editor to a scene |
copy_scene |
Copy a scene within the current bank |
copy_bank_to |
Copy the current bank to another bank |
The AI is instructed to:
- Apply changes to all 8 scenes by default (the whole bank) unless a specific scene is requested
- Ensure smooth loops β Scene 8 transitions cleanly back to Scene 1
- Plan motion patterns across all 8 frames before setting values
- Use calibrated preset values for color/gobo wheels instead of guessing
- Keep the dimmer above 0 so lights are actually visible
The agent auto-retries on OpenAI rate limit errors (HTTP 429) up to 3 times with parsed wait times. A tool call counter in the chat shows progress during large operations.
The .PRO file is a raw EEPROM image β a 1:1 copy of the controller's non-volatile memory.
| Property | Value |
|---|---|
| File size | 131,584 bytes (128 KB + 512 B) |
| Block size | 256 bytes |
| Total blocks | 514 |
| Byte order | Big-endian |
| Empty byte | 0x00 (scenes) / 0xFF (erased EEPROM) |
Offset Blocks Size Description
βββββββββββββββββββββββββββββββββββββββββββββββββββββ
0x00000 0 256 B File header ("succeeded" + padding)
0x00100 1 256 B Padding (all zeros)
0x00200 2 256 B Filler (all 0xFF)
0x00300 3β244 61,824 B Scene data area (240 scenes + observed padding)
0x0F300 243β253 2,816 B Chase / program definitions
0x0FE00 254 256 B Controller configuration
0x0FF00 255 256 B Validity marker (0x55AA Γ 10)
0x10000 256β513 65,792 B Second EEPROM bank (mostly 0xFF)
0x20000 β 512 B Trailer (all 0xFF)
The controller stores 30 banks Γ 8 scenes = 240 scenes. Each scene occupies one 256-byte block.
- +256 bytes before Bank 7
- +128 bytes before Bank 12
Addressing formula:
bank_offset = 0x300
+ (bank - 1) Γ 0x800
+ (bank >= 7 ? 0x100 : 0)
+ (bank >= 12 ? 0x080 : 0)
scene_offset = bank_offset + (scene - 1) Γ 0x100
This is the addressing model currently used by the decoder because it matches the observed byte positions in FILE6.PRO, including Bank 12 Scene 1 channel data.
Scene record layout (256 bytes):
Offset Size Content
βββββββββββββββββββββββββββββββ
0x00 1 B Count byte (number of non-zero channel bytes in scanner data)
0x01 192 B 12 scanners Γ 16 channels (DMX values 0β255)
0xC1 63 B Scene metadata (per-scanner channel bitmasks, fade time, speed)
The first byte of each scene record is a count byte that holds the number of non-zero DMX channel values in the scanner data area (bytes 1β192). This is used by the controller firmware for fast empty-scene detection and integrity checking.
Each scanner row stores 16 bytes, one byte per DMX channel. The physical controller exposes channels 1β8 on Page A and 9β16 on Page B, but the file stores all 16 sequentially.
Scene metadata area (bytes 0xC1β0xFF, 63 bytes):
The metadata area contains per-scanner channel enable bitmasks at odd-indexed positions:
Byte 0xC1 (193): Scanner 1 Page A bitmask (bit 0 = CH1, bit 7 = CH8)
Byte 0xC3 (195): Scanner 2 Page A bitmask
...
Byte 0xD7 (215): Scanner 12 Page A bitmask
A set bit indicates the corresponding channel was programmed (has a recorded value) in this scene.
| Scanner | DMX Start | DMX End |
|---|---|---|
| 1 | 1 | 16 |
| 2 | 17 | 32 |
| 3 | 33 | 48 |
| 4 | 49 | 64 |
| 5 | 65 | 80 |
| 6 | 81 | 96 |
| 7 | 97 | 112 |
| 8 | 113 | 128 |
| 9 | 129 | 144 |
| 10 | 145 | 160 |
| 11 | 161 | 176 |
| 12 | 177 | 192 |
A scene is empty/unprogrammed if all 256 bytes (scanner data + metadata) are 0x00.
The first 20 bytes of block 255 contain a repeating 0x55 0xAA pattern. The controller firmware checks this signature to verify the EEPROM has been properly written. If absent or corrupted, the controller treats the memory as blank.
This project is based on independent reverse engineering of the Showlite DMX Master Pro USB EEPROM format. It is not affiliated with or endorsed by the manufacturer.
