Release xLights release: 2026.14

Status
Not open for further replies.

dkulp

Full time elf
Joined
Jan 2, 2013
Messages
172
Location
Framingham, MA

2026.14 — July 25, 2026​

Enhancements​

  • scott — Controller layout printing: right-click "Print..." now opens a resizable print preview dialog (adjustable box size, fit-to-page) before printing, replacing the old direct-to-printer menu entry
  • cybercop23 — Moved the Controllers tab into the Layout tab and split Models and Groups into their own tabs, matching the iPad; added a controller port/model selector showing what is selected in the layout, plus right-click FPP Connect for a single controller
  • cybercop23 — Show and base show folder settings moved to a Directories dialog opened from the Layout tab; controller list columns can be shown/hidden from the header
  • cybercop23 — Directories dialog: buttons to pick a directory and to open it in Finder/Explorer; double-clicking a model opens the unified model definitions panel
  • cybercop23 — Key bindings are now stored in both the show folder and the platform app-data folder, kept in sync on every save, backup and restore; a new Preferences > Other > "Use keybindings from" option picks which copy is authoritative (default Show Folder)
  • cybercop23 — Faces, States and SubModels editors combined into one tabbed dialog with a shared model preview, reachable from the Layout menu and the property grid
  • cybercop23 — Show folders skip the automatic base-show-folder merge (controllers, models, view objects) when the base folder has not changed since the last saved sync
  • scott — Layout tab: shows a "Loading show..." message while a large show folder loads, and no longer re-resolves the FPP proxy address on every redraw
  • scott — Layout tab: added a button to open the show folder
  • nick — New Preferences > Toolbars page: choose which effects appear in the always-visible Effects toolbar and reorder them, handy once the toolbar no longer fits smaller screens; right-click the toolbar to jump there, and "Reset to Defaults" restores every effect in the default order
  • nick — Media panel: "Bulk Find" now offers to redirect a whole set of already-working media files to a new folder (e.g. a show copied to a new year), not just to fix missing ones
  • heffneil — Added live filter boxes to the Import Previews and Models tree, the vendor model download catalog, and the Choose Model(s) dialog, which also now shows the model being copied from
  • heffneil — Model Sets: right-click Align and Distribute now move the whole Set rigidly instead of pulling the clicked model out of its arrangement; a Set containing a locked model is skipped with a message
  • AGFazio — 3D Layout: Shift + scroll wheel, or a two-finger touchpad drag, pans the view on every platform (#6699)
  • dkulp — Sequence-level face definitions: a new Faces tab in Sequence Settings defines matrix (image) faces stored in the .xsq and usable by any matrix/group/submodel in that sequence, so a face need not be duplicated on every model; images embed via the Media tab, and Package Sequence, Import Effects and Check Sequence handle them
  • dkulp — Import Effects: new "Import matrix face definitions into the sequence" option (on by default) stores imported models' Matrix faces in the sequence with images embedded, instead of adding them to your layout
  • derwin12 — Moving Head: new warmup "Link" tab can snap an effect's end Pan/Tilt to the next Moving Head effect's start
  • dkulp — FPP Connect: preserve the per-controller UDP pacing/bandwidth caps already configured on FPP10 instead of wiping them when regenerating the universe outputs file; a new optional controller cap applies the rate under full xLights control and otherwise seeds it as a default (WLED and ESPixelStick ESP8266/ESP32 default to 30 Mbps)
  • MartinMueller — ESPixelStick: added the Octa2Go and several other ESP32 variants, TLS3001 protocol support on the V4 variants, and corrected the maximum pixel-port channel counts
  • dkulp — Preferences: the "Automation" port is now labelled the "API" port, and the port numbers are shown
  • dkulp — Stem separation: Cancel now stops the run at the next chunk instead of waiting for the whole track (all backends)
  • dkulp — Read .fseq files with a parallel block decompressor when the whole sequence is being loaded (FPP/HinksPix upload, convert, fseqcmp): ~10x faster on a multi-core machine, and faster even on one core
  • dkulp — Batch render and -r no longer read the existing fseq they are about to overwrite, speeding up sequence open (canvas mode still loads it)
  • dkulp — Render: group rows, large single-model rows (matrices, megatrees) and rows carrying submodel/strand effects now render several frames concurrently when the effects on them are frame-independent, cutting whole-show render time (~5% on a typical show) with byte-identical output; XL_NO_PARALLEL_FRAMES=1 forces the serial path
  • dkulp — Render: Twinkle, Circles, Candle, Lines, Curtain and 16 VU Meter modes can now render frames concurrently, and GPU-accelerated Candle, Circles, Twinkle, Wave and Meteors keep their Metal/Vulkan acceleration inside those windows instead of falling back to the CPU
  • dkulp — Render: edit-triggered renders now jump ahead of a running Render All, so the grid and preview update promptly
  • dkulp — Render: the per-node output copy is now serial instead of fanning out to the job pool - the dispatch cost far exceeded the few bytes copied and slowed the effect rendering beside it; cut the output stage ~76% and total render CPU ~30%
  • dkulp — Render: reuse cached transition-mask and sparkle GPU buffers across frames instead of reallocating them on every blend (the biggest single GPU win)
  • dkulp — Fire effect renders about 3x faster with byte-identical output: the flame grid stops once the flame has died out, and the Hue Shift conversion runs once per frame into a palette instead of once per pixel
  • dkulp — Meteors: particles are bucketed by buffer line instead of testing every meteor against every pixel (CPU, Metal and Vulkan); large-matrix Meteors is dramatically faster
  • dkulp — Kaleidoscope: Triangle and Square styles render many times faster (2-5x faster total render time on sequences using them)
  • dkulp — Pictures: much faster when the image is larger than the model (no-scaling mode with big photos)
  • dkulp — Ripple: faster circle drawing
  • dkulp — Render: effect settings and value curves are parsed once per effect instead of every frame
  • dkulp — Render: further per-frame savings - parallel Per Model group merge/unmerge, cached sub-buffer node mapping for animated sub-buffers, a flat blend dispatch table, no dimming-curve lookup on models without one, hoisted value-curve evaluation out of the canvas gap-fill loop, and a reused scratch buffer for CPU rotate/zoom and small blurs
  • dkulp — GPU render (Metal and Vulkan): the render cache no longer forces a GPU->CPU readback right after a GPU effect renders, so effect+blur+rotozoom+blend stay in one command queue; cheap-to-recompute GPU effects skip the cache and slow CPU effects still use it. Output is unchanged
  • dkulp — GPU render (Metal and Vulkan): the small/narrow box blur now runs on the GPU, bit-identical to the CPU path, when the layer already rendered there
  • dkulp — GPU render (Metal and Vulkan): props with a large buffer but few nodes now blend on the GPU when most of their layers already have GPU work queued, instead of waiting on each layer; the win is on discrete GPUs, and those props' output shifts by the usual GPU float rounding
  • dkulp — Vulkan: a compute buffer grown mid-frame is retired to a deferred-free list and released once its command buffer completes, instead of stalling the pipeline (matches Metal)
  • dkulp — macOS: video files are now decoded at the size they are actually rendered at instead of full native resolution, cutting peak video render memory 25-35% (a video-heavy sequence dropped from ~16GB to ~12GB) and often rendering a little faster
  • dkulp — Render: fixed parallel_for's worker-completion wait (it busy-spun on one path and polled around a lost-wakeup race on the other)
  • dkulp — Render: XL_RENDER_PROFILE=1 dumps per-model/per-effect render, blend, output, GPU-wait and upstream-wait timings at the end of each render batch
  • dkulp — --fseqcmp: XL_FSEQCMP_RANGE picks the frame window for the per-channel dump, XL_FSEQCMP_PNG= writes an A|B|amplified-diff PNG strip per frame, and XL_FSEQCMP_FRAMES=1 reports which frame ranges differ

Bug Fixes​

  • cybercop23 — Fix 15 effects (Bars, Shockwave, ColorWash, Spirals, Circles, Candle, Fan, Garlands, Kaleidoscope, Life, Meteors, Shimmer, Tree, Twinkle, Wave) producing no output on DMX models such as floodlights and moving heads; the SIMD render path wrote raw pixel data instead of going through SetPixel(), which is what spreads a colour across a fixture's channels (#6719)
  • dkulp — Shockwave: pixels on large GPU-rendered matrices now match small models exactly (the Metal/Vulkan kernels rounded the ring edge differently than the CPU path)
  • dkulp — Fix Shader effect rendering vertically flipped on Vulkan (Linux and Windows; Canvas/warp shaders over other layers appeared upside down)
  • dkulp — Vulkan: ISF/GLSL shaders that define their own copy of a GLSL built-in (sinh/cosh/tanh) no longer fail to translate and render solid yellow
  • dkulp — Shader effect ignored the GPU rendering preference and still built GPU pipelines with it turned off; turning it off now really keeps the effect on the CPU/OpenGL path
  • derwin12 — Vulkan Shader effect: fix a startup race that let one render thread use the shared sampler/dummy image before another had finished creating them
  • dkulp — Vulkan Shader effect: check the allocation results that were being ignored, so an out-of-resources driver falls back instead of crashing
  • dkulp — Vulkan: GPU-built transition masks (e.g. Wipe) are now bound directly to the blend as Metal already does, instead of being copied from the still-in-flight GPU buffer; that race rendered masked transitions nondeterministically (a wipe edge landing a row or two off)
  • dkulp — macOS: Video effect on uncompressed (rawvideo) .mov files with a non-zero start time rendered blue frames; also fixed transient unscaled frames under heavy load and a shutdown/reopen race in the shared decoder
  • dkulp — Windows: the "FFmpeg auto" hardware video decode setting never engaged on non-NVIDIA machines - it picked the first decoder FFmpeg recognised rather than the first that opens, so a CUDA build always chose cuda and silently fell back to software; candidates are now probed until one works
  • dkulp — Faces: renaming a face definition now updates the Faces effects referencing it instead of orphaning them
  • dkulp — Media tab: picture-series animations (name-1.png..name-N.png) could not be embedded, and SuperStar-imported scene animations silently lost their frames on save
  • dkulp — Headless render: the render cache is now disabled, as it always should have been (XL_HEADLESS_RENDERCACHE=1 opts back in)
  • dkulp — Video export: only use constant-quality encoding where the encoder supports it - Intel Macs have no constant-quality H.264 and threw an exception that killed the app; they now use average bitrate
  • dkulp — Stop the last compression block of an .fseq being reported as running to the end of the file, which swept trailing extended-header data into the block
  • derwin12 — The show was marked as having unsaved changes immediately after loading it, because a number of model and output settings flagged the config dirty even when storing the value already there (#6749)
  • dkulp — Answering "No" to the save Models/Views/Perspectives (or Presets) prompt no longer updates the timestamp on the rgbeffects or presets file
  • derwin12 — Effect wheel: dropping an effect near an existing one could overwrite it instead of sizing to the available gap
  • derwin12 — Fix "Zoom out to show last effect" ignoring effects on submodels/strands/nodes, so the timeline stopped short of the real last effect (#6725)
  • derwin12 — Sequencer grid: dragging the shared edge between two touching effects could move a locked neighbouring effect (#6696)
  • derwin12 — Numeric text boxes beside sliders could get stuck while you typed in them (#6708)
  • dkulp — Normalize bare float settings (".2" -> "0.2") from old sequences so float text controls display and edit correctly
  • derwin12 — Check Sequence no longer reports a numeric effect setting as invalid just because the stored value has spaces around it
  • derwin12 — Moving Head effect panel now refreshes correctly as you switch effects (#6703), and no longer spins in an endless refresh loop when a value curve is recalled
  • derwin12 — Moving Head Advanced: fix effect corruption copying and pasting between fixtures (#6701)
  • dkulp — Moving Head: fix a crash painting the Dimmer panel (it held a raw pointer to the timing track, which is freed when the sequence closes), and clicking to the right of the last handle no longer runs off the end of the handle list
  • derwin12 — DMX Moving Head Adv / Servo 3D: editing ScaleX/Y/Z in the property grid no longer snaps back to 1.0
  • pgianotto — DMX Servo 3D: servos added by raising the servo count were created as 2D, so they offered no Pivot Offset Z and stored their pivot offsets 100x too small
  • pgianotto — DMX Servo 3D: a mesh parented to another mesh followed that mesh's servo index rather than the servo its Servo Linkage actually redirects to it
  • derwin12 — Tree models: the Flat and Ribbon tree types were ignored when the model was built, so the tree kept the plain multi-string shape (#6726)
  • derwin12 — Windows/Linux: the GPU Rendering preference was not restored on restart (#6712)
  • wbhartmanii — Layout: 3D object (mesh) files inside the show/media folders are now saved with show-relative paths instead of absolute ones, so layouts survive show folders moved or synced across platforms
  • scott — Import mapping dialog: the colour cell no longer reports the whole column width as its own size, which sized the colour column wrongly (#6710)
  • derwin12 — Import Effects: imported effects could arrive locked, and the Per Model buffer-style conversion and duplicate-effect model remapping could be silently skipped (#6692)
  • dkulp — Open Sequence: the remembered dialog directory is now ignored, falling back to the show directory, when it is not inside the current show folder
  • dkulp — Model States dialog: debug builds asserted ("invalid growable row index") when the dialog opened
  • dkulp — Fix a crash rendering a model that has a node with no coordinates (the Metal and Vulkan paths already skipped such a node, the CPU path did not)
  • dkulp — Fix a crash rendering Circles into a variable/oversized sub-buffer (the SIMD kernel wrote past the pixel allocation)
  • dkulp — Fix a crash rendering a layer blur with a radius above 16, reachable from a blur value curve or a migrated legacy EffectBlur setting
  • dkulp — Fix a crash duplicating an effect by cell when the effect starts in a gap between timing marks, and a second crash if the duplicate could not be added
  • dkulp — Fix a use-after-free closing a sequence when an in-flight render did not drain in time; the sequence data is now kept rather than freed under a live render job
  • dkulp — Fix a crash double-clicking an empty/stale row heading in the sequencer
  • dkulp — Fix a crash when the mouse moved over the layout preview while the vendor certified-model prompt was open during a model download/import
  • dkulp — Fix a crash mapping an import onto a model whose sequence element could not be created (name collision with a timing track, or a comma in the name)
  • dkulp — Fix a crash if the sequence was closed or the app quit while stem separation was still running
  • dkulp — Base show folder: fix a crash merging controllers when the base folder has a controller with the same name but a different type (serial vs ethernet); such a pair is now skipped and logged
  • dkulp — Fix a crash uploading outputs to PixLite/Advatek Mk3 controllers - the Mk3 config parser always read zero ports, so the upload wrote past the end of every output array; null pixels and colour order now read correctly too
  • dkulp — Fix a render crash after the GPU compute backend shuts down mid-session (a Vulkan device loss/TDR, or turning GPU rendering off); render buffers kept writing through a pointer into the released GPU memory
  • dkulp — Windows: fix a crash toggling Display Elements / House Preview from the toolbar; leaving the sequencer tab hid the floating panes without recording it, so a later toggle relaid out every pane mid-layout
  • dkulp — Windows: fix a heap corruption on process teardown when the thread-name map was destroyed by the CRT while detached job-pool workers were still exiting
  • dkulp — Fix a data race on the job-pool worker thread id (logging/status only)

Changes​

  • dkulp — ZCPP deprecation: ZCPP is no longer offered as a controller protocol unless the controller's vendor declares it or it is already in use; selecting it warns that it will be removed in a future version and asks for confirmation; and ZCPP is no longer probed during controller discovery
  • dkulp — Render: sparkles are now placed by a frame-deterministic phase (per-node hash + frame) instead of a counter advanced each render, so placement no longer depends on render order (full vs partial re-render); slightly changes the sparkle pattern in existing sequences, at the same density and look
  • dkulp — Render: HSV colour and transition/warp geometry now compute in float instead of double (lower memory, negligible output change)
  • dkulp — Render: new AdvanceState API separates a frame-parallel effect's state advance from its draw (Snowstorm, Fireworks, Strobe, Lines, Snowflakes, most VU Meter modes and GPU Candle/Circles/Meteors/Twinkle/Wave converted); VU Meter's four Spectrogram modes now render serially. (Faster renders)

xLights is available for download from https://github.com/xLightsSequencer/xLights/releases/ for Windows/Linux and from the App Store for Mac.

Issue tracker: https://github.com/xLightsSequencer/xLights/issues
Video tutorials: https://videos.xlights.org
xLights user manual: https://manual.xlights.org/xlights/

If you have encountered a specific issue, developers ask that you submit details to the xLights GitHub repository.

For requests for general help among peers, consider starting a new forum thread: https://auschristmaslighting.com/forums/xlights-xschedule.61/post-thread
 
  • Like
Reactions: AAH
Status
Not open for further replies.
Back
Top