Home
About xLights
xLights is a free and open source program that enables you to design, create and play amazing lighting displays through the use of DMX controllers, E1.31 Ethernet controllers and more.
With it you can layout your display visually then assign effects to the various items throughout your sequence. This can be in time to music (with beat-tracking built into xLights) or just however you like.
xLights runs on Windows, OSX and Linux
For more information see the xLights User Manual, the Video tutorials, the wiki, the forum or our facebook group
Links to downloads are available from the menu at the top of the page
You can access our Privacy Policy here.
How to donate
xLights is free to all users – but if you wish to donate to help support the efforts please feel free to donate via: 
Current Release
2026.10 May 31, 2026
-enh (cybercop23) Add State effect on SubModels. Ensure only nodes that are part of the SubModel are lit.
Same node-index translation on Faces effect if using Faces effect on a SubModel.
-enh (derwin12) Sketch effect path management: multi-select, Delete key, Move Up/Down
buttons, per-path description labels, and a description text editor (#5871).
-enh (scott) FPP discovery now uses mDNS on Windows (native windns.h DNS-SD) in
addition to the existing broadcast/multicast ping.
-enh (heffneil) Replace Model: new dialog replaces multiple models at once with a
filtered, checkbox list of targets (fixes #4462).
-enh (dkulp) Convert Incompatible Videos now encodes near-lossless when the source was a
high-quality video, near lossles.
-enh (heffneil) Show Face/State/SubModel/Node count badges on the Model pane
-enh (cybercop23) Add right-click option to hide unused submodels when expanding a model row
-enh (cybercop23) Add EffectPreset to the restore options
-enh (cybercop23) Add include submodel opton to the Duplicate effect
-enh (cybercop23) Add vendor copyright disclaimer to bottom of Model Download dialog
-enh (derwin12) Add “Per Model Default” layout option to model groups so effects using the
Default render style automatically render per-model on that group (#4125).
-enh (heffneil) Add Bulk Edit Rotate X / Y / Z to the Layout tab right-click menu.
-enh (heffneil) Layout copy/paste: smarter placement of the duplicate and only the new copy
is selected after paste (#6192).
-enh (derwin12) Select Effects panel results are now sorted by time (#6389).
-enh (derwin12) FPP Connect upload now also calls SetInputUniversesBridge so inputs match
the Controller upload path (#2747).
-enh (derwin12) Import Mapping switched back to checkboxes for lyric tracks; remembers the
show-timeline setting (#6403).
-enh (jessica12ryan) RenderProgressDialog now stays on top of other windows (#6404).
-enh (scott) Custom color picker: skip duplicate colors in the recent colors list.
-enh (dkulp) macOS: include MetricKit crash diagnostics in packaged log uploads; clean up
older MetricKit data.
-bug (cybercop23) Importing a multi-model xmodel file now preserves @Model:N and >Model:N
start-channel references instead of resetting them to absolute channels.
-bug (derwin12) Package Log Files: fix duplicate primary log in zip; rolled log now included.
-bug (derwin12) Fix lasso selection corrupting State/Faces effect values (#5783)
-bug (derwin12) Better handle multi chord MIDI tracks (#6434)
-bug (Neil) Fix edit display elements eye-icon for HiDPI (#5015)
-bug (dkulp) macOS: Provide other attempts to open Lua Script editor
-bug (dkulp) macOS: Package Sequence to a location outside any persistent bookmark (e.g.
Desktop) no longer fails — the in-progress zip is now written to the system
temp dir and atomically moved into the user-chosen path.
-bug (dkulp) macOS: Videos AVFoundation can’t decode (e.g. lossless H.264 / High 4:4:4 at
small sizes) now fall back to FFmpeg at load instead of grinding for hours
per-frame during render.
-bug (dkulp) Render: the render tree now rebuilds whenever any model is added/replaced/
deleted (ModelManager generation counter), so it can never hand a freed model
to the renderer; PixelBuffer::GetColors also bounds-checks node channel writes
(mirroring SetColors) and sequence-data reallocation is skipped if an in-flight
render can’t be drained first — fixes render crashes when models or the channel
count change mid-render.
-bug (dkulp) Stem separation: lock the UI down (render-style) while inference runs and
refuse re-entry, so the sequence can’t be closed and a second pass can’t
start mid-run — fixes a crash on a freed model in the worker thread.
-bug (dkulp) Manage Media “Bulk Find” now extracts the filename from Windows-style
(backslash) paths when run on macOS/Linux, so images authored on Windows
are matched and relinked instead of always reporting “not found”.
-bug (derwin12) Fix hidden timing tracks reappearing when another timing track is expanded or collapsed (#6424)
-bug (dkulp) Fix 3D Objects (Image/Mesh/Gridlines/Terrain/Ruler) handle picking on the
Layout tab — selecting, dragging, and center-handle tool cycling now work
again after the DragSession refactor.
-bug (derwin12) Renaming a preview now updates all pick lists and the View menu (fixes #6430).
-bug (derwin12) Fix pivot point for rotating multiple objects (#6418)
-bug (dkulp) Fix drag-and-drop of Video/Pictures/Glediator/Shader files onto the effect
grid losing the filename
-bug (dkulp) macOS: Video effect now renders rawvideo MOV files (rgb24/bgr24/rgba/bgra)
-bug (derwin12) Fix imports for both old and new xmodel formats (Layout import, Node Select
Grid, SubModels dialog) (#6411).
-bug (derwin12) Re-Map Custom Model now handles the new xmodel format (#6397, #6400).
-bug (derwin12) PolyLine division-by-zero produced NaN coords that crashed the macOS depth
sort (#6407).
-bug (derwin12) Fix the model preview for PolyLine with Drops (#6208).
-bug (derwin12) Various crashes seen in submitted logs: harden Model/ModelManager null
guards, TwinklyOutput error handling, and main-frame model lookups (#6402).
-bug (derwin12) Color picker crashes and timeline startup crashes (#6387).
-bug (derwin12) Fix hangs in the Face/State Definition dialogs on large models (#6374).
-bug (derwin12) Shockwave effect: end time no longer exceeds the effect end time (#6398).
-bug (derwin12) Text effect: fix multi-line “color per word” rendering (#6393).
-bug (derwin12) Shape effect: fix browse-button enable/disable logic (#6390).
-bug (derwin12) SubModels dialog: extra comma appearing after the wxSplit→Split switch
because of empty-string handling differences (#6377).
-bug (derwin12) Don’t flag embedded images as missing in the sequence checker (#6378).
-bug (derwin12) Color picker swatch panel: full repaint on resize fixes artifacts (#6376).
-bug (AlexB) Keep individual start channels when importing models (#6384).
-bug (AlexB) Fix vendor catalog download issues — surface errors and use longer timeouts
for the large-file fetches (#6381).
-bug (dkulp) Avoid creating and destroying wxCursor objects on every mouse move across
the grid canvases, color/value curve dialogs, and assist panels.
-bug (dkulp) macOS: fix waveform cursor memory leak (cursors were never released).
-bug (dkulp) Fix top macOS crash in Model::DisplayModelOnWindow when a freshly-placed
model is rendered before its node coords are populated.
-bug (dkulp) Fix Windows crash in xlOGL3GraphicsContext::drawPrimitive when the vertex
accumulator is null/wrong-type (seen in the Waveform render path).
-bug (dkulp) PixelBufferClass::reset now guards against a null model pointer and logs the
caller instead of crashing; also AbortRender at the remaining model-mutation
entry points (FinalizeModel, paste, group create/clone, LOR / channel-map
imports, controller rename / IP change / delete) so render jobs can no longer
race a model add or start-channel rewrite. Addresses the long-standing
ModelGroup::CheckForChanges off-main-thread crashes.
-bug (dkulp) Fix Windows crash in LayoutPanel::FinalizeModel when a download / progress
dialog pumped events and re-entered FinalizeModel against a freed _newModel.
Added a re-entrancy guard and a Reset() cleanup for show-folder loads.
-bug (dkulp) Fix crash when an OBJ mesh file fails to parse or contains no geometry; the
mesh draw path now skips LoadBuffers instead of dereferencing an empty
tinyobj attrib (xlGLMesh::LoadBuffers, xlMetalMesh::LoadBuffers).
