Configure a custom signal palette
A signal profile binds each of the nine display statuses to a Signal Pattern: a bounded program of timed red, green, blue, white, and CCT output. This guide edits one profile's palette and publishes it to selected displays.
Open the pattern editor
- Open the Profile tab and select the profile, or create a new one. A new profile starts from the default palette.
- Open the Patterns tab. The status rail lists the nine statuses plus the feed-stale target.
- Select the status to edit.
Edit the program
- Select a preset chip (off, solid, pulse, flashes, or completion) to replace the whole program, or edit the phase blocks directly.
- Drag a block's right edge to change its duration. The editor snaps to 50 ms ticks. Select a block to open its channels and transition.
- Choose step to hold the start channels until the phase ends, or linear to interpolate to the target.
- Set the profile brightness cap in the footer. The cap scales red, green, blue, and white channels. It does not scale CCT.
- Watch the compiled byte meter and SHA-256 in the footer. The compiled profile cannot exceed 750 bytes.
- Select Save draft. Drafts use optimistic concurrency: a save that follows another edit reports a revision conflict instead of overwriting it.
To copy a program between statuses, use ⧉ program on the source status, then select the target statuses in the paste card. The card shows the exact change on each target before you commit.
Program rules
The compiler rejects a draft that breaks these rules:
- Phase durations are multiples of 50 ms.
- A pattern has at most eight phases.
- One cycle lasts at most 60 seconds. A finite program must also finish within 60 seconds.
- A repeating program must end at its initial channels. A single-traversal program is exempt; it holds its final target.
- CCT stays constant inside one pattern.
- At most ten distinct compiled programs per profile. Byte-identical programs share one compiled record.
- The safety outputs — the UNKNOWN binding and the stale pattern — cannot be byte-identical to a program bound to FILAMENT_RUNOUT through WAITING. An untrusted state can never look exactly like a state that asserts attention or activity. IDLE and UNKNOWN may share a program.
COMPLETE accepts only a restricted program: RGB off at start, one rise to one fixed RGB color, an optional hold, one fall back to RGB off, and one through four traversals within 60 seconds. White and CCT stay constant. A profile cannot extend the existing sixty-second completion window or the four-flash limit.
Preview the compiled result
The editor compiles the draft locally for the byte meter and preview. To compile a draft through the API without saving it, send the draft to:
POST /v1/mqtt/profiles/compile
{
"draft": { "name": "…", "brightnessCap": 180, "patterns": [ … ],
"bindings": { … }, "stale": { … } }
}The response returns byteLength, sha256, the base64 data, and the capabilityRequirements a controller must advertise to run it.
Publish and assign
- Select Publish. Publish compiles the current draft into an immutable Signal Profile Revision. Editing a published profile creates a new draft; a published revision never changes.
- Select the displays that receive the revision. The publish flow can offer the displays that currently activate an earlier revision of the same profile. Retargeting is always an explicit selection.
- Open the Sync tab and confirm that each target moves to device_applied.
A display accepts an assignment only when its capability report covers the revision's decoded size, phase limit, and white or CCT use. Otherwise the API returns signal_profile_capability_missing or signal_profile_capability_insufficient and the assignment fails before any message is published.
Related: change the stale-data behavior, roll back to a previous revision.