---
title: IES / LDT Photometric Viewer
description: See how a light distributes its output. Compare files side by side and save the results.
canonical: https://ledyi.com/tools/ies-ldt-viewer
updatedAt: 2026-10-24T15:51:54Z
---

# IES / LDT Photometric Viewer

See how a light distributes its output. Compare files side by side and save the results.

## For AI agents: instructions and calculation APIs

Read the tool instructions in Markdown and the request/response schemas in OpenAPI. These public calculation APIs run the same models as the web and offline calculators. No account, API key or Turnstile is required.

- [IES / LDT Photometric Viewer — Full tool instructions (Markdown)](https://ledyi.com/tools/ies-ldt-viewer.md)
- [OpenAPI contract](https://ledyi.com/openapi.json)
- [Agent site index](https://ledyi.com/llms.txt)

Your agent needs an HTTP tool permitted to send POST requests. Reading this page or importing OpenAPI does not automatically grant execution access.

### IES / LDT Photometric Viewer

```
POST /api/tools/v1/photometry
Content-Type: application/json
```

Read Type C IES with TILT=NONE or single-lamp-set EULUMDAT text. Return file facts, integrated flux and full-width beam metrics, plus every requested intensity query in candela. This does not verify laboratory measurements or replace a lighting design study.

### IES / LDT photometric analysis

POST files as JSON-escaped text with explicit cPlanesDeg and gammaAnglesDeg arrays. Angles must be strictly increasing: C is in \[0,360), gamma in \[0,180\]. Maximum 4 files, 16 C planes and 721 gamma angles per file. The sample is mathematical test data, not a LEDYI product.

| Field | Type and constraints | Meaning |
| --- | --- | --- |
| files (Required) | {"minItems":1,"maxItems":4,"type":"array"} |  |
| files[].name (Required) | {"type":"string","minLength":1,"maxLength":255} | Source filename. IES is detected from content; EULUMDAT uses an .ldt extension. |
| files[].text (Required) | {"type":"string","minLength":1,"maxLength":5242880} | Original ASCII or UTF-8 source text, JSON-escaped. No URL fetching or binary upload. |
| cPlanesDeg (Required) | {"minItems":1,"maxItems":16,"type":"array","uniqueItems":true,"x-strictly-increasing":true} | C-plane query angles in degrees, strictly increasing, 0 inclusive through 360 exclusive. |
| gammaAnglesDeg (Required) | {"minItems":1,"maxItems":721,"type":"array","uniqueItems":true,"x-strictly-increasing":true} | Vertical query angles in degrees, strictly increasing, 0 (nadir) through 180 (zenith). |

```
{
  "files": [
    {
      "name": "synthetic-constant.ies",
      "text": "IESNA:LM-63-2002\n[MANUFAC] Synthetic example, not product data\nTILT=NONE\n1 -1 1 3 1 1 2 0.1 0.1 0\n1 1 10\n0 90 180\n0\n100 100 100"
    }
  ],
  "cPlanesDeg": [
    0,
    90,
    180,
    270
  ],
  "gammaAnglesDeg": [
    0,
    30,
    60,
    90,
    180
  ]
}
```

### Reading the result

The same parser and I(C,gamma) model run in the web viewer and its offline copy. Expand only declared symmetry. IES values include the candela multiplier; LDT cd/klm values use the source reference flux and conversion factor. Flux integrates the piecewise-linear angular model over solid angle. Beam/field values are full widths at 50%/10% of the named plane peak; multi-lobed or unbounded widths are null.

result.files follows request file order. Each candela matrix uses cPlanesDeg for rows and gammaAnglesDeg for columns, without peak normalization or truncation. All quantities use cd, lm, W, mm and degrees as named. source fields are read from the file; metrics are derived. A source-lamp lumen value is not necessarily luminaire output. Missing source values and undefined metrics are null, never guessed. Date, CCT and CRI fields retain their original text.

A bad JSON shape, unordered/duplicate query angles, unsupported file or invalid photometric table returns 422 for the entire request; invalidParams points to the offending input. Type A/B, TILT corrections, multiple lamp sets and non-unity ballast factors are unsupported. No partial success is returned. Non-finite derived values are rejected. PHOTOMETRY\_FILE\_INVALID, PHOTOMETRY\_FILE\_UNSUPPORTED and PHOTOMETRY\_LIMIT\_EXCEEDED are stable file-error codes; source details are not echoed in Problem responses.

Photometry JSON bodies are limited to 1024 KiB, independently of the browser file limit. The parsed table is limited to 250000 cells per file; HTTP results include only the explicitly queried directions and full-file metrics, not a silent partial export of the native table.

The browser reads files locally; this API explicitly sends the supplied text to the server for stateless analysis. No external file URLs are fetched. Source text is excluded from response inputs and logs; no result is stored. links.share is null because source files are not encoded in URLs. Use Save offline copy for a local, restorable handoff. Compare tested source length, power setting, CCT and optics before drawing product conclusions. Values are not automatically per metre.

### Request limits and errors

Every success carries apiVersion, a server-generated requestId, operation, normalized inputs, result, warnings and links (tool, markdown, openapi, share). requestId also appears in X-Request-Id. The domain result is deterministic; the request ID changes. Preserve warnings and special statuses when explaining results.

Send uncompressed application/json with strict types and no query parameters. Indoor lighting bodies are limited to 16 KiB; driver-match bodies to 16 KiB; battery bodies to 16 KiB; voltage bodies to 16 KiB; resistor bodies to 16 KiB; DMX bodies to 1024 KiB and 1000 fixtures; pixel bodies to 64 KiB, 64 run rows, 128 outputs and 2000000 channels. DALI bodies are limited to 64 KiB, 24 rows and 512 devices. Illuminance bodies are limited to 16 KiB and 400 planned points. Photometry bodies are limited to 1024 KiB with up to 4 files and 16 by 721 query directions per file. Lighting-cost bodies are limited to 64 KiB with up to 20 groups in each scenario. Body reading expires after 5 seconds. Complete success JSON is bounded to 4 MiB. GET/HEAD return 405; OPTIONS returns 204. Source responses are no-store. Anonymous browser CORS permits POST/OPTIONS and Content-Type with credentials omitted.

Tool POST requests and ordinary page requests share 120 requests per 60 seconds per IP/Cloudflare location; mitigation lasts 60 seconds. Heavy tool use can temporarily block pages from the same source. This is not an independent or globally exact API quota. Inquiry/search use their existing separate rule. Tool POST requests do not inherit the company-page or verified-bot exemption.

Source errors use application/problem+json with status, stable code, requestId and at most one invalidParams JSON pointer. 400: malformed JSON/query; 405: method; 408: body timeout; 413: body limit; 415: media/encoding; 422: parameter/domain error; 500/503: service failure. Fix invalid inputs rather than retrying or changing engineering facts. For 429 or transient failures, use at most two retries with backoff and jitter, honoring Retry-After when present.

Cloudflare can return 403/429/5xx before the application, sometimes as HTML without CORS or Retry-After. Check HTTP status and Content-Type before parsing JSON. A browser may see only a network error. Do not present an error or an older result as a successful new calculation.

Calculations do not create inquiries, send emails, call a language model or store project results. Operational logs exclude fixture labels, groups and request bodies. Existing network/access logs still apply. Submit a quotation request only when the user asks, using the separate inquiry contract and buyer confirmation flow.

### Warning codes

| Field | Meaning |
| --- | --- |
| PHOTOMETRY_ABSOLUTE_IES | The IES -1 lumen field is an absolute-photometry flag; output flux is integrated from intensity. |
| PHOTOMETRY_SOURCE_LAMP_FLUX | Source lamp flux and luminaire output are distinct quantities; do not use their difference as a corruption test. |
| PHOTOMETRY_LDT_SCALE | LDT cd/klm values were converted to absolute candela using the reference flux and conversion factor. |
| PHOTOMETRY_MEASUREMENT_TILT | Measurement tilt is nonzero; results remain in the file coordinate system and no tilt correction is applied. |
| PHOTOMETRY_MANUFACTURER_MISSING | Manufacturer was not specified in the source file. |
| PHOTOMETRY_POWER_MISSING | Input power was not supplied or was zero; efficacy is not calculated. |
| PHOTOMETRY_BEAM_UNDEFINED | At least one principal plane has no single bounded lobe; its beam width is null. |
| PHOTOMETRY_FLUX_MISMATCH | Integrated output differs from the LDT declared output by more than 5%; review the original data and angular resolution. |

### Error codes

```
TOOLS_INVALID_JSON
TOOLS_QUERY_UNSUPPORTED
TOOLS_METHOD_NOT_ALLOWED
TOOLS_BODY_TIMEOUT
TOOLS_BODY_TOO_LARGE
TOOLS_MEDIA_TYPE_UNSUPPORTED
TOOLS_CONTENT_ENCODING_UNSUPPORTED
TOOLS_INPUT_INVALID
TOOLS_NUMERIC_DOMAIN_UNSUPPORTED
TOOLS_INTERNAL_ERROR
TOOLS_SERVICE_UNAVAILABLE
DMX_INPUT_INVALID
DMX_ADDRESS_NOT_ENCODABLE
DMX_CHANNEL_RANGE_EXCEEDED
DMX_SPACING_OVERLAP
DMX_UNIVERSE_RANGE_EXCEEDED
PHOTOMETRY_FILE_INVALID
PHOTOMETRY_FILE_UNSUPPORTED
PHOTOMETRY_LIMIT_EXCEEDED
```

## Should I compare intensity or shape?

Intensity · cd keeps all files on one candela scale, showing actual output in each direction. Shape · % divides every value by that file’s overall peak, so you can compare distribution without output dominating the plot. Normalizing the view never changes the file or the lumen values.

## Are the lumens and watts for one metre of LED strip?

They describe the complete source used in the photometric test. An IES file does not guarantee “per metre” values. Check the measured length, power setting, CCT and optics against the supplier’s test report. Luminous dimensions describe the light-emitting area and may differ from physical product dimensions.

## Why can source lumens differ from calculated output?

A relative IES file may list lamp lumens before optical losses. They are not necessarily the luminaire’s emitted output. This viewer integrates the intensity grid for emitted flux and labels the source value separately. In absolute IES photometry, −1 is a flag; it is not a measured lumen value.

## Can this tell me if a room is bright enough?

The distance view is a direct, far-field estimate beneath one downward-pointing fixture. A complete design also needs mounting position, room surfaces, reflections and the calculation plane. Long LED strips at short distances need particular care. Use DIALux, Relux or equivalent design software for a room study.

## How do I send this comparison to someone?

Use Save offline copy. It downloads one HTML file containing the source files, fonts and viewer, with the current selection and settings. It opens without an internet connection. Share only files you are authorised to disclose. SVG, PNG and CSV exports also carry sample labels where applicable.

## How are results calculated, and what is checked?

File counts, numeric values, angle ordering and supported symmetry are checked before plotting. Values between measured angles use linear interpolation; luminous flux integrates that angular model over solid angle. LDT cd/klm is converted to cd from its reference flux and conversion factor. Calculated metrics are estimates from the sampled file data, not independent laboratory measurements. This viewer supports IES Type C with no TILT correction and single-set LDT. It does not certify a file, invent missing power or colour values, or compute UGR / lifetime reports from insufficient data. Read the IES format reference and EULUMDAT format reference.

