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.
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”
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.
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.
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.
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.
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!
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