This document describes the conversion process performed by the L Designs+ xModel Converter tool, which translates xLights model files (.xmodel) between version 2025.12 and 2026 formats. It is intended as a technical reference for troubleshooting, future development, and understanding what changes during conversion.
Tool location: dvlight.com β runs entirely in the user's browser. No files are uploaded to any server.
Supported conversions: 2026 → 2025.12 and 2025.12 → 2026
xLights version 2026 changed the XML structure of exported .xmodel files. The root element, wrapper structure, and several attribute names were updated. As a result, a model exported from xLights 2026 cannot be directly imported into xLights 2025.12 using “Import Submodels from File”, and vice versa.
The three main areas of change are:
- The root XML element and its wrapper
- The dimension attributes (width and height)
- The child element structure of each subModel
Face definitions (faceInfo) and state definitions (stateInfo) use identical XML in both versions and require no changes β they are preserved as-is during conversion.
| Attribute / Element | 2025.12 Format | 2026 Format |
|---|---|---|
| Root element | <custommodel ...> | <models type="exported"><model ...> |
| Width attribute | parm1="119" | CustomWidth="119" |
| Height attribute | parm2="207" | CustomHeight="207" |
| Node data attr | line0="1,2,3-5" | line0="1,2,3-5" (identical) |
| Layout attr | layout="horizontal" | layout="horizontal" (identical) |
| SubModel closing | <subModel ...><Aliases/><ControllerConnection/></subModel> | <subModel ... /> (self-closing) |
| Source version | SourceVersion="2025.12" | SourceVersion="2026.04" |
| faceInfo | <faceInfo ... /> | <faceInfo ... /> (identical) |
| stateInfo | <stateInfo ... /> | <stateInfo ... /> (identical) |
| CustomModelCompressed | Present as attribute | Present as attribute (identical) |
| CustomModel | Present as attribute | Not present in wrapper |
The following are identical in both formats and pass through the converter without modification:
| Attribute / Element | 2025.12 Format | 2026 Format |
|---|---|---|
| Node ranges | line0="93-92,90-91,83,..." | line0="93-92,90-91,83,..." |
| Buffer style | bufferstyle="Default" | bufferstyle="Default" |
| Layout orient. | layout="horizontal" | layout="horizontal" |
| SubModel type | type="ranges" | type="ranges" |
| Face defs | <faceInfo Name="..." .../> | <faceInfo Name="..." .../> |
| State defs | <stateInfo Name="..." .../> | <stateInfo Name="..." .../> |
| Compressed data | CustomModelCompressed="..." | CustomModelCompressed="..." |
The converter tool is implemented as client-side JavaScript only:
- No files are uploaded to any server at any time
- The File API reads the .xmodel into browser memory only
- Conversion and download happen entirely in the browser
- The page works fully offline once loaded
- A domain check prevents the tool from running on unauthorised copies of the page
- The converter targets 2025.12 and 2026 formats specifically. Earlier xLights versions may use a different structure.
- CustomModel attribute: 2026 exports omit the CustomModel= grid string. When converting 2025→2026 the attribute is dropped. Converting back 2026→2025 will have an empty CustomModel= attribute, which is normal β xLights regenerates this from CustomModelCompressed.
- If xLights updates its export format in a future version, the converter script will need updating to match the new structure.
- Multi-row submodels: submodels with more than one row use pipe-separated values in line0 (e.g. line0="1,2,3|4,5,6"). The converter preserves these as-is.