Glossary

IES File Format: Every Line Explained (LM-63-2002)

IES File Format: Every Line Explained (LM-63-2002)

IES files are plain ASCII text. Every field on the 10-value photometric parameter line has a fixed position and specific legal values. Most import failures come from five predictable errors: angle count mismatch, missing TILT line, wrong photometric type, truncated candela data, and encoding issues. All visible in a text editor in under a minute.

The format in one sentence

LM-63-2002 governs how photometric data gets written to a text file. That's it. The standard has been revised four times since 1986, and LM-63-19 is technically current, but 2002 remains what you'll encounter in practice. The version identifier on line 1 tells you which revision you're dealing with.

Every line maxes out at 132 characters. This limit comes from IBM Hollerith punch cards. Some real-world files exceed it. They may work in lenient parsers but fail strict validators.

Full annotated file

Here's a complete IES file for a fictional 12W LED downlight. Every line does something.

Orion Luminaires DL-12-840-WH — Complete IES File

LineRaw contentWhat it means
1IESNA:LM-63-2002Version string. Tells parsers which spec revision to expect.
2[TEST] OL-2024-0847Test report number from the photometric lab.
3[TESTLAB] Independent Testing LabsLab that performed the goniophotometer test.
4[ISSUEDATE] 2024-03-15Date the file was generated.
5[MANUFAC] Orion LuminairesManufacturer name.
6[LUMCAT] DL-12-840-WHCatalog number. This is what you search for.
7[LUMINAIRE] 12W LED Downlight 4000KProduct description.
8[LAMP] LED ModuleLight source type.
9[WATTAGE] 12Input watts.
10[LUMENS] 850Rated lumens.
11TILT=NONEFixed luminaire, no tilt data. Required line.
121 -1 1.0 19 9 1 2 0.15 0.15 0.0The photometric parameter line. 10 fields.
131.0 1.0 12.0Ballast factor, ballast-lamp factor, input watts.
140 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90Vertical angles (19 values, 0° to 90°).
150 45 90 135 180 225 270 315 360Horizontal angles (9 values, full rotation).
16-24Candela values9 rows × 19 values = 171 total candela readings.

The candela matrix starts after the angle arrays. Each row represents one horizontal plane. Peak intensity sits at 0° vertical (straight down), around 800 cd for this downlight, and drops to near zero at 90°.

The 10 fields decoded

That photometric parameter line is where files break. Here's what each position means.

PositionFieldLegal valuesWhen it's wrong
1Number of lampsInteger ≥1Rarely an issue
2Lumens per lamp-1 or positive number-1 means absolute photometry (standard for LEDs)
3Candela multiplierUsually 1.0Values other than 1.0 scale all candela data
4Vertical angle countInteger matching array lengthMismatch = file rejected or silently wrong
5Horizontal angle countInteger matching array lengthSame problem
6Photometric type1, 2, or 3Wrong type = wrong polar curve
7Units type1=feet, 2=metersWrong unit = luminaire appears giant or tiny
8WidthDecimal in declared unitsAffects luminaire rendering
9LengthDecimal in declared unitsSame
10HeightDecimal, often 0.0Same

Type C (1): Downlights, troffers, most architectural luminaires. This is the default. Type B (2): Floodlights, sports lighting, adjustable heads. Type A (3): Roadway, automotive, area lighting with specific mounting geometry.

Five errors that kill files

These account for nearly every DIALux rejection and AGi32 warning you'll see.

ErrorWhat it looks likeAGi32 behaviorDIALux behaviorFix
Angle count mismatchParameter line says 19 vertical, but only 17 values followRepair Console appearsRejects fileCorrect the count or add missing angles
Missing TILT lineNo TILT=NONE after keyword blockFatal error"Luminaire data could not be imported"Add TILT=NONE on the line after keywords
Wrong photometric typeType B declared for a downlightOpens with wrong polar curveSameChange to Type C (1)
Truncated candelaMatrix has 153 values instead of 171Warning, silently interpolatesMay reject or corruptComplete the matrix or retest
UTF-8 BOMFile starts with invisible bytes EF BB BFVersion string check failsSameResave as ANSI encoding

Broken: Declared count doesn't match array 1 -1 1.0 17 9 1 2 0.15 0.15 0.0 (Says 17 vertical angles, but 19 values follow)

Fixed: Counts match 1 -1 1.0 19 9 1 2 0.15 0.15 0.0 (Declares 19, provides 19)

AGi32 will flag angle mismatches with its Repair Console. DIALux often just refuses the file. Older versions of both programs sometimes silently interpolate broken data. Your calculations run. They're just wrong. You don't get a warning.

Quick validation workflow

1. Open in a text editor

Notepad, Sublime, VS Code, anything that shows raw text. Confirm line 1 starts with IESNA:LM-63.

2. Find the TILT line

It must appear immediately after the keyword block. No blank lines, no extra headers. Just TILT=NONE (or TILT=INCLUDE if tilt data follows).

3. Count angles

Read positions 4 and 5 on the photometric parameter line. Count the actual values in each angle array. They must match.

4. Verify candela total

Multiply vertical count × horizontal count. That's how many candela values must exist. Count them.

The DLC's LUNA pre-submission tool catches most structural errors for free. AGi32's Photometric Toolbox does too. But neither tells you what the raw file looks like. When something fails, you're back in the text editor anyway. You can also run a quick structural check with our photometric file validator.

  • Version string present on line 1
  • TILT=NONE declared after keyword block
  • Angle counts match actual arrays
  • Candela matrix complete (vertical × horizontal = total values)
  • File saved as ANSI, not UTF-8 with BOM

The file is under 30 lines. Once you've read three or four of them, you'll spot errors faster than any import wizard can explain them. If you're deciding between IES and EULUMDAT for your catalog, see IES vs LDT photometric files for a format-level comparison.

Related tools and guides

ies-filesphotometric-datadialuxagi32lighting-designlm-63file-formats