ILDA File Format Specification
Technical specification for the ILDA binary file format — headers, format codes, coordinate system, and the status byte.
The ILDA file format is the industry standard for laser graphics. Understanding its structure helps you diagnose issues and work with files from any source.
File Structure Overview
An ILDA file consists of one or more sections, each beginning with a 32-byte header followed by its data records. The file ends with a special terminator header.
┌──────────────────────────────────────┐
│ Header 1 (32 bytes) │
├──────────────────────────────────────┤
│ Data Records 1 (N × record size) │
├──────────────────────────────────────┤
│ Header 2 (32 bytes) │
├──────────────────────────────────────┤
│ Data Records 2 (M × record size) │
├──────────────────────────────────────┤
│ ... │
├──────────────────────────────────────┤
│ Terminator Header (records = 0) │
└──────────────────────────────────────┘Header Structure (32 bytes)
| Offset | Size | Field | Description |
|---|---|---|---|
| 0 | 4 | Signature | "ILDA" (ASCII) |
| 4 | 3 | Reserved | Must be 0x00 |
| 7 | 1 | Format Code | 0, 1, 2, 4, or 5 |
| 8 | 8 | Frame Name | ASCII, null-padded |
| 16 | 8 | Company Name | ASCII, null-padded |
| 24 | 2 | Number of Records | Big-endian uint16 |
| 26 | 2 | Frame Number | Current frame index (0-based) |
| 28 | 2 | Total Frames | Total frames in animation |
| 30 | 1 | Scanner Head | For multi-projector setups (usually 0) |
| 31 | 1 | Reserved | Must be 0x00 |
Format Codes
Format 0 — 3D Coordinates + Indexed Color
8 bytes per point: X (2), Y (2), Z (2), Status (1), Color Index (1)
Most compatible format. Works on SD card projectors.
Format 1 — 2D Coordinates + Indexed Color
6 bytes per point: X (2), Y (2), Status (1), Color Index (1)
Smaller files, no Z data. Good for 2D content.
Format 2 — Color Palette (Indexed)
3 bytes per entry: R (1), G (1), B (1)
Defines up to 256 colors. Must precede Format 0/1 frames.
Format 4 — 3D Coordinates + True Color
10 bytes per point: X (2), Y (2), Z (2), Status (1), B (1), G (1), R (1)
The 3D counterpart to Format 5 — full RGB per point plus a Z coordinate. Format 2 is the only palette format; Format 4 carries point data, not a palette.
Format 5 — 2D Coordinates + True Color (modern standard)
8 bytes per point: X (2), Y (2), Status (1), B (1), G (1), R (1)
Full RGB per point. Not universally supported on older hardware.
Coordinate System
ILDA uses signed 16-bit integers in a standard Cartesian layout — Y increases upward (the opposite of screen coordinates, where Y increases downward):
- X: -32768 to +32767 (left to right)
- Y: -32768 to +32767 (bottom to top — Y increases upward)
- Z: -32768 to +32767 (into screen to out of screen)
The coordinate range maps to no fixed optical angle — the actual projection angle depends on your scanner hardware and setup. The 8 degrees you see in scanner specs (e.g. "30K pps at 8°") is the ILDA tuning-standard test condition for rating scanner speed, not a property of the coordinate system.
Status Byte
The status byte contains flags controlling laser output:
| Bit | Name | Meaning |
|---|---|---|
| 6 | Blanking | 1 = laser off (blanked), 0 = laser on |
| 7 | Last Point | 1 = last point in frame |
Some software incorrectly sets the blanking bit (using 0 for off, 1 for on) or forgets to set the last-point flag. This can cause rendering issues on certain hardware. BeamTracer's Validation widget detects these errors.
EOF Marker
A properly formatted ILDA file ends with a header where Number of Records = 0. This tells players the file is complete. Missing EOF markers can cause:
- Looping failures
- Player crashes
- Garbage data at end of playback
BeamTracer's Validation widget detects missing EOF markers and warns you.