Binary Format

show.bin

The compiled binary show file loaded by PicoLume devices. Today it’s consumed by receivers; future versions may include remote-specific data too.

Overview

show.bin contains the event timeline and per-prop configuration needed for synchronized playback. Receivers typically load it via USB mass storage mode.

File Layout (V3)
16 B
Header
1792 B
PropConfig LUT (224 x 8B)
48 B each
Events (variable count)
32 B
CUE1 Block (optional)
Minimum file size: 1808 bytes (header + LUT, no events). CUE block adds 32 bytes if present.
  • Versioned binary format
  • Per-prop hardware config LUT (V3)
  • Scheduled effects/events
  • Target mask for 1-224 prop IDs

Show File Format

Shows are compiled into a binary format (.bin) that receivers load via USB mass storage mode.

Header (16 bytes)
0 4B Magic (0x5049434F = "PICO")
4 2B Version (3)
6 2B Event count
8 8B Reserved
PropConfig LUT (1792 bytes)

V3 includes a lookup table with 224 entries (one per prop ID), each containing full hardware configuration. This follows immediately after the header.

PropConfig (8 bytes per prop)
0 2B LED count
2 1B LED type (0=WS2812B, 1=SK6812, 2=SK6812_RGBW, 3=APA102, 4=WS2811, 5=WS2813, 6=WS2815)
3 1B Color order (0=GRB, 1=RGB, 2=BRG, 3=RBG, 4=GBR, 5=BGR)
4 1B Brightness cap (0-255)
5 3B Reserved
Event Structure (48 bytes each)
0 4B Start time (ms)
4 4B Duration (ms)
8 1B Effect type
9 1B Speed (effect animation speed)
10 1B Width (effect size/width)
11 1B Reserved
12 4B Color (0xRRGGBB)
16 4B Color 2 (0xRRGGBB, secondary color)
20 28B Target mask (224 bits)

CUE Block (Optional)

When cue points are configured in PicoLume Studio, a 32-byte CUE1 block is appended after all events. The remote reads this block to enable direct cue button jumps.

Detection: The remote reads the last 32 bytes of the file and checks for the "CUE1" magic. If not found, all cue buttons default to time 0. Receivers ignore this block.
CUE1 Block (32 bytes)
0 4B Magic ("CUE1" = 0x43 0x55 0x45 0x31)
4 2B Version (1)
6 2B Count (4)
8 4B Cue A time (ms, or 0xFFFFFFFF if unused)
12 4B Cue B time (ms, or 0xFFFFFFFF if unused)
16 4B Cue C time (ms, or 0xFFFFFFFF if unused)
20 4B Cue D time (ms, or 0xFFFFFFFF if unused)
24 8B Reserved

Backward compatible: The CUE block is only appended when at least one cue is enabled. Old receivers simply ignore it, and old remotes work without cue support.