BUG Auto Layout DMXFixture (and Enhancement Proposal)

Overview

The current Channel Gap feature in DMXFixture is excellent and very convenient. However, we propose making it even more flexible and powerful for complex installations.


Proposal 1: Group-based Gap (groupgap)

Concept

Add the ability to create gaps between groups of fixtures, not just between individual fixtures.

Use Case Example

  • Each primitive = one pixel fixture

  • Set changap = 10 channels between fixtures

  • Create groups of 7 fixtures each

  • Set groupgap = 50 channels between groups

Result:

Fixture1 → gap(10) → Fixture2 → gap(10) → ... → Fixture7 → gap(50) → Fixture8 → ...

This allows logical sectioning of fixtures while maintaining clean addressing.


Proposal 2: Dimension-based Gap (dimgap)

Problem

POPs cannot automatically distribute points into groups, but Dimension structure already exists and defines the grid layout.

Solution

Use Dimension information to create gaps:

  • dimgap="x:50" — add 50-channel gap after each row (X dimension change)

  • dimgap="y:100" — add 100-channel gap after each column (Y dimension change)

Example

For a grid with Dimension: 100 10:

  • 100 pixels per row

  • 10 rows total

  • dimgap="x:20" adds 20 channels after every 100 pixels (at the end of each row)

This is especially useful for addressable LED strips where physical sections have gaps between them.


Proposal 3: Enhanced Group POP Integration

Current Limitation

Currently, Group POP functionality exists, but to achieve grouping as described in Proposal 1, you need to create multiple Group POP nodes - one for each group. This becomes cumbersome for complex setups.

Proposal

Add enhanced grouping functionality that allows:

Option A: Multi-group creation in single node

  • Create multiple groups within one Group POP node

  • Specify which points belong to each group

  • Then you can apply groupgap between these groups

Option B: Expression-based group distribution (ideal solution) Add ability to automatically divide points into groups using expressions:

  • Example: “Divide total points into 3 equal groups”

    • Total points: 300

    • Expression: numgroups=3

    • Result: Automatically creates Group1 (points 0-99), Group2 (points 100-199), Group3 (points 200-299)

Benefits

  • Single node instead of multiple Group POP nodes

  • Dynamic grouping that adapts to changing point counts

  • Mathematical distribution (divide by N, every N points, etc.)

  • Works seamlessly with groupgap for organized addressing


Bug Report: Channel Gap with DMXFixtureNetAddress Attribute

Issue

When using Attribute POP to set DMXFixtureNetAddress, the Channel Gap stops working correctly:

  • Gap is limited to 512 channels

  • Cannot skip more than 512 channels (cannot skip 1024 channels to move 3 universes ahead)

With Bypass DMXFixtureNetAddress

VLMPTRC_POP.toe (7.1 KB)

Thank you for the suggestions, and the bug report.

The bug with the Channel Gap parameter when used with the DMXFixtureNetAddress parameter will be fixed in the next official build we release: 2025.31960+.

Regarding your different gap proposals: I think this would instead be better served by a new DMXFixtureGap primitive attribute that overrides the Channel Gap parameter value and uses the attribute value instead.

In your example that would mean setting the attribute value to 10 for Fixture[1-6], and to 50 for Fixture[7], … etc.

The attribute would allow it to be used generally outside of a grid layout structure, and it avoids having to use primitive groups, which I think introduce many unnecessary complications for channel layout and primitive order, in part because primitives can be a part of more than one group.

Regardless, I think your suggestions for the Group POP are still worthwhile outside of use with the DMX Fixture POP. I’ve logged it internally for further consideration.

1 Like

The DMXFixtureGap proposal is quite good, but it would be great to have even broader control, where we can create GAPs not only between individual fixtures (primitives in our case), but also between groups of primitives.

For example: We have 12 identical fixtures. We create a GAP between each Fixture[1-6] with a value of 10, then an additional GAP of 30 after the sixth fixture, then again a GAP between fixtures 7-12 with a value of 11.

With DMXFixtureGap we can only control the GAP between individual fixtures. Perhaps it would be worth adding another attribute, for example DMXGapAppend (or DMXGapAfter), which would add an additional gap after a specific fixture or group of fixtures?

Currently, to achieve this, we have to add extra points (primitives) to create the needed gap, which unnecessarily burdens the system and complicates management when scaling the project.

Hi @FRISSON.PY,

the logic to set the DMXFixtureGap attribute per primitive (fixture) should be more simple then defining groups and then assigning a fixture gap per group. Especially the DMXFixtureGap primitive attribute is discreet while groups can bring in ambiguities where a single primitive might belong to multiple groups.

Just wondering in general how you are defining your fixtures? Our proposal would see you define the fixture gap on the template input of a Copy POP. The result you can see in the screenshot where between fixture 5 and 6 there is a 10 channel gap while between fixture 6 and 7, a 30 channel gap is realized.

cheers
Markus
DMXFixtureGap.tox (10.3 KB)

To add onto what Markus wrote:

The DMXFixtureGap can be thought of as the end result, and you can use any intermediate attribute you want, such as your own defined DMXGapAppend, to sum to your desired value.

One other option to define the primitive ranges for your gaps is to use the Math Mix POP’s Combine operation B <= A <= C and fill in your desired logic. A in this case would be the builtin attribute _PrimI for the primitive index. You can add any number of combine operations to a single pass of the Math Mix POP so it should scale well, and defining the ranges of desired behavior is I suppose a bit less manual than using a Template on the Copy POP.

The DMXFixtureGap attribute is now available in the latest official build 2025.32050 if you wish to try it out.

1 Like

Thank you for your attention to this matter. I apologize for the delayed response – I’ve been very busy with work. I’m sending you my version of the addressing, where I’ve attached detailed comments. I would be very grateful if you could correct me in case I’m doing something wrong. Thank you!

VLMPTRC_POP.toe (8.0 KB)

Hi @FRISSON.PY,

thanks for attaching the file. My approach would be to think of the Fixtures on a per port basis.


Here I create a fixture per port with 707 leds and then copied them using a Line POP as a template. The Line POP itself has the DMXFixtureUniverse point attribute which then in the Copy POP gets written onto the copy data as a Primitive attribute.
The values for the attribute come from a Pattern CHOP that is set to the “Step” Type with:

  • the Number of Cycles parameter set to “2” (accounting for the number of modules)
  • the Steps per Cycle parameter set to “8” (accounting for the number of ports)
  • the Number of Steps parameter set to “7” (accounting for the number of fixtures per module)
  • the Length parameter is calculated with me.par.numcycles * me.par.numsteps

This way you set the start universe for each fixture without the need to control the channel gaps.

slight side note, using the Dimension and Connectivity POP can also be useful for reordering points

Hope this helps
cheers
Markus
VLMPTRC_POP.11.toe (7.2 KB)

1 Like