Commands and Sequences
LA4 accepts lighting instructions as a sequence of CSV rows written to ~/la4_sequence.csv on the node. Each row is a command: the register name followed by its parameters, comma-separated.
Load and execute a sequence using the boardio program in the device with the following commands:
boardiocli uSeq— loads the sequence file into the firmwareboardiocli runSeq— starts execution
All commands return BOARDIO_READY on success or BOARDIO_ERROR on failure which are sent over your listener as message events.
Command reference
MODEL_LIGHT
Controls the constant model light (continuous, non-flash illumination).
| Parameter | Values | Min | Max |
|---|---|---|---|
| Power level | Percent % | 0 (OFF) | 100 |
Example — turn on the model light at 50% power:
MODEL_LIGHT,50
FOCUS_LIGHT
Controls the constant focus light (continuous illumination with a configurable on-duration, useful for autofocus before a shot).
| Parameter | Values | Min | Max |
|---|---|---|---|
| Power level | Percent % | 0 | 100 |
| Focus time | Milliseconds | 0 | 9999 |
Example — turn on the focus light at 80% power for 500 ms:
FOCUS_LIGHT,80,500
ALL_NIKON
Shoots one picture with all four LED lights. Use with Nikon cameras.
| Parameter | Values | Min | Max |
|---|---|---|---|
| Power level | Percent % | 0 | 100 |
Example — fire all four LEDs at 80% power:
ALL_NIKON,80
OLAT_NIKON
Shoots four pictures, one per LED, firing each in sequence. Use with Nikon cameras.
| Parameter | Values | Min | Max |
|---|---|---|---|
| Power level | Percent % | 0 | 100 |
| Drive Mode | 0 = Single Frame, 1 = Continuous (use with all continuous modes: High+, High, Mid, etc.) | - | - |
Example — shoot one-light-at-a-time at 75% power in continuous mode:
OLAT_NIKON,75,1
N_LIGHTS_NIKON
Shoots one picture with a chosen subset of the four LEDs. Use with Nikon cameras.
| Parameter | Values | Min | Max |
|---|---|---|---|
| Power level | Percent % | 0 | 100 |
| LED1 | 0 = OFF, 1 = ON | - | - |
| LED2 | 0 = OFF, 1 = ON | - | - |
| LED3 | 0 = OFF, 1 = ON | - | - |
| LED4 | 0 = OFF, 1 = ON | - | - |
Example — fire LEDs 1 and 3 at 60% power (LEDs 2 and 4 OFF):
N_LIGHTS_NIKON,60,1,0,1,0
ALL_CANON
Shoots one picture with all four LED lights. Use with Canon cameras and when using other camera manufacturers (e.g. Fujifilm, Panasonic).
| Parameter | Values | Min | Max |
|---|---|---|---|
| Power level | Percent % | 0 (OFF) | 100 |
| Shutter speed | Milliseconds | 0 (OFF) | 109 |
Example — fire all four LEDs at 80% power with a 105 ms on-duration:
ALL_CANON,80,105
OLAT_CANON
Shoots four pictures, one per LED, firing each in sequence. Use with Canon cameras and when using other camera manufacturers (e.g. Fujifilm, Panasonic).
| Parameter | Values | Min | Max |
|---|---|---|---|
| Power level | Percent % | 0 (OFF) | 100 |
| Drive Mode | 0 = Single Frame, 1 = Continuous (use with all continuous modes: High+, High, Mid, etc.) | - | - |
| Shutter speed | Milliseconds | 0 (OFF) | 109 |
Example — shoot one-light-at-a-time at 75% power in continuous mode with a 105 ms on-duration:
OLAT_CANON,75,1,105
N_LIGHTS_CANON
Shoots one picture with a chosen subset of the four LEDs. Use with Canon cameras and when using other camera manufacturers (e.g. Fujifilm, Panasonic).
| Parameter | Values | Min | Max |
|---|---|---|---|
| Power level | Percent % | 0 | 100 |
| LED1 | 0 = OFF, 1 = ON | - | - |
| LED2 | 0 = OFF, 1 = ON | - | - |
| LED3 | 0 = OFF, 1 = ON | - | - |
| LED4 | 0 = OFF, 1 = ON | - | - |
| Shutter speed | Milliseconds | 0 (OFF) | 109 |
Example — fire LEDs 1 and 3 at 60% power with a 105 ms on-duration:
N_LIGHTS_CANON,60,1,0,1,0,105
ALL_SONY
Shoots one picture with all four LED lights. Use with Sony cameras.
| Parameter | Values | Min | Max |
|---|---|---|---|
| Power level | Percent % | 0 | 100 |
Example — fire all four LEDs at 80% power:
ALL_SONY,80
OLAT_SONY
Shoots four pictures, one per LED, firing each in sequence. Use with Sony cameras.
| Parameter | Values | Min | Max |
|---|---|---|---|
| Power level | Percent % | 0 | 100 |
| Drive Mode | 0 = Single Frame, 1 = Continuous (use with all continuous modes: High+, High, Mid, etc.) | - | - |
Example — shoot one-light-at-a-time at 75% power in continuous mode:
OLAT_SONY,75,1
N_LIGHTS_SONY
Shoots one picture with a chosen subset of the four LEDs. Use with Sony cameras.
| Parameter | Values | Min | Max |
|---|---|---|---|
| Power level | Percent % | 0 | 100 |
| LED1 | 0 = OFF, 1 = ON | - | - |
| LED2 | 0 = OFF, 1 = ON | - | - |
| LED3 | 0 = OFF, 1 = ON | - | - |
| LED4 | 0 = OFF, 1 = ON | - | - |
Example — fire LEDs 1 and 3 at 60% power (LEDs 2 and 4 OFF):
N_LIGHTS_SONY,60,1,0,1,0
ALL_E
Shoots one picture with all four LED lights using the camera's electronic shutter instead of a physical shutter trigger. Camera-agnostic — use with any camera in electronic shutter mode.
| Parameter | Values | Min | Max |
|---|---|---|---|
| Power level | Percent % | 0 (OFF) | 100 |
| Shutter press duration | Milliseconds — time the shoot button is held down (10 ms is a good start) | 0 | 9999 |
| Shutter lag | Milliseconds — time from button release until the shutter curtain opens | 0 | 9999 |
| Light duration | Milliseconds — time the LEDs stay on, starting after the shutter lag has passed | 0 | 109 |
| Post shot delay | Milliseconds — wait time between pictures (800 ms is a good start; lower for faster cameras) | 0 | 9999 |
Example — fire all four LEDs at 50% power, 10 ms press, 50 ms lag, 5 ms light, 800 ms post-shot delay:
ALL_E,50,10,50,5,800
OLAT_E
Shoots four pictures, one per LED, firing each in sequence, using the camera's electronic shutter instead of a physical shutter trigger. Camera-agnostic — use with any camera in electronic shutter mode.
| Parameter | Values | Min | Max |
|---|---|---|---|
| Power level | Percent % | 0 (OFF) | 100 |
| Shutter press duration | Milliseconds — time the shoot button is held down (10 ms is a good start) | 0 | 9999 |
| Shutter lag | Milliseconds — time from button release until the shutter curtain opens | 0 | 9999 |
| Light duration | Milliseconds — time the LEDs stay on, starting after the shutter lag has passed | 0 | 109 |
| Post shot delay | Milliseconds — wait time between pictures (800 ms is a good start; lower for faster cameras) | 0 | 9999 |
Example — shoot 4 OLAT images at 50% power, 10 ms press, 50 ms lag, 5 ms light, 800 ms post-shot delay:
OLAT_E,50,10,50,5,800
N_LIGHTS_E
Shoots one picture with a chosen subset of the four LEDs, using the camera's electronic shutter instead of a physical shutter trigger. Camera-agnostic — use with any camera in electronic shutter mode.
| Parameter | Values | Min | Max |
|---|---|---|---|
| Power level | Percent % | 0 | 100 |
| LED1 | 0 = OFF, 1 = ON | - | - |
| LED2 | 0 = OFF, 1 = ON | - | - |
| LED3 | 0 = OFF, 1 = ON | - | - |
| LED4 | 0 = OFF, 1 = ON | - | - |
| Shutter press duration | Milliseconds — time the shoot button is held down (10 ms is a good start) | 0 | 9999 |
| Shutter lag | Milliseconds — time from button release until the shutter curtain opens | 0 | 9999 |
| Light duration | Milliseconds — time the LEDs stay on, starting after the shutter lag has passed | 0 | 109 |
| Post shot delay | Milliseconds — wait time between pictures (800 ms is a good start; lower for faster cameras) | 0 | 9999 |
Example — fire LEDs 1 and 3 at 50% power, 10 ms press, 50 ms lag, 5 ms light, 800 ms post-shot delay:
N_LIGHTS_E,50,1,0,1,0,10,50,5,800
SHOOT_BLANK
Performs a single DSLR shot with no lights. The duration controls how long the shoot pin is physically pressed.
Different cameras require different durations to reliably actuate the shutter:
- Normal range: 20–50 ms
- Fast-shooting cameras: 5–10 ms
- Slow-shooting cameras: 50–200 ms
If the duration is too short the camera will not trigger. If it is too long the camera may fire two shots instead of one.
| Parameter | Min | Max |
|---|---|---|
| Duration | 0 | 1000 |
Example — trigger a single shot with the shoot pin held for 30 ms (normal-range camera):
SHOOT_BLANK,30
LED_FAN
Controls the LED cooling fans.
| Parameter | Values |
|---|---|
| Enable | 0 = OFF, 1 = ON |
Example — turn the fans on:
LED_FAN,1
DIGITAL_POLARIZER
Enables or disables the digital polarizer.
| Parameter | Values |
|---|---|
| Enable | 0 = OFF, 1 = ON |
Example — enable the polarizer:
DIGITAL_POLARIZER,1
REMOTE_IN
Enables or disables the LA4 remote input state machine.
| Parameter | Values |
|---|---|
| Enable | 0 = OFF, 1 = ON |
Example — enable remote input:
REMOTE_IN,1
When building a sequence, put REMOTE_IN,0 as the first command to hand off control from the remote input state machine before the sequence runs, and REMOTE_IN,1 after the sequence to hand control back to remote input.
REMOTE_IN,0
DIGITAL_POLARIZER,0
ALL_NIKON,100
REMOTE_IN,1
MODEL_LIGHT,100
Example sequence CSV file
LED_FAN,1
REMOTE_IN,0
ALL_CANON,80,105
REMOTE_IN,1
MODEL_LIGHT,30
This sequence does five things in order:
LED_FAN,1— turns on the cooling fans before the flash LEDs fire.REMOTE_IN,0— disables remote input so the state machine hands off control before the sequence runs.ALL_CANON,80,105— fires all four LEDs simultaneously at 80% power with a 105 ms on-duration, triggering one shot on a Canon camera.REMOTE_IN,1— re-enables remote input, handing control back after the sequence completes.MODEL_LIGHT,30— turns on the constant model light at 30% power, providing continuous illumination for framing.
Sending a sequence to LA⁴. Example cross-polarization
The sequence file is written and executed by sending a cmd request to the pycom networking software running on the device. You need to compose a shell command to write the CSV content to ~/la4_sequence.csv, then call boardiocli uSeq to load it and boardiocli runSeq to run it.
The example below captures two shots with a Nikon camera: one without the digital polarizer and one with it. This is a common cross-polarization technique — the first shot captures both diffuse and specular light, the second suppresses specular reflections, leaving only diffuse.
{
"type_": "cmd",
"command": "echo \"REMOTE_IN,0\\nDIGITAL_POLARIZER,0\\nALL_NIKON,10\\nDIGITAL_POLARIZER,1\\nALL_NIKON,1\\nREMOTE_IN,1\" > /home/rigsters/la4_sequence.csv && boardiocli uSeq && boardiocli runSeq",
"id": "31548ca2",
"name": "My PC App",
"ip": "192.168.0.100",
"port": 5000,
"version": "0.1.0",
"coordinator": true
}
The sequence file this writes to the node:
REMOTE_IN,0
DIGITAL_POLARIZER,0
ALL_NIKON,10
DIGITAL_POLARIZER,1
ALL_NIKON,1
REMOTE_IN,1
REMOTE_IN,0— disables remote input so the state machine hands off control before the sequence runs.DIGITAL_POLARIZER,0— disables the polarizer so the first shot captures both diffuse and specular light.ALL_NIKON,10— fires all four LEDs at 10% power and triggers one shot.DIGITAL_POLARIZER,1— enables the polarizer to suppress specular reflections.ALL_NIKON,1— fires all four LEDs at minimum power and triggers a second shot, now capturing only diffuse light.REMOTE_IN,1— re-enables remote input, handing control back after the sequence completes.