Luminous Intensity from Illuminance Calculator
This luminous intensity from illuminance calculator determines how strongly an ideal point source emits light in a particular direction.
Run — free
Enter the illuminance measured in lux and the distance from the source in metres. The calculator applies the inverse square law, I = E × r², and reports luminous intensity in candela. It is intended for direct, unobstructed measurements taken with the sensor facing the incoming light, where the source is small compared with the measurement distance.
From a lux reading to candela
Illuminance and luminous intensity describe different parts of a lighting measurement. Illuminance, measured in lux, tells you how much luminous flux reaches each square metre of a surface. Luminous intensity, measured in candela, describes how much light a source sends in a particular direction per unit solid angle. For an ideal point source, light spreads across a larger area as distance increases. The inverse square law captures that spreading: illuminance equals luminous intensity divided by distance squared. Rearranging the relationship gives I = E × r². Enter the meter reading as illuminance_lux and the straight-line source distance as distance_m. The result is in candela because one lux multiplied by one square metre is dimensionally equivalent to one candela under this point-source geometry. A reading of 125 lux at 2 metres therefore corresponds to 500 candela in the measured direction. The calculation is directional; it does not claim that the lamp emits the same intensity at every angle.
Measure distance and illuminance consistently
The quality of the result depends more on the measurement setup than on the arithmetic. Measure distance from the effective luminous centre of the source to the active plane of the lux meter, not from the edge of a housing or stand. Aim the detector directly at the source so light arrives normal to its sensing surface. A tilted detector introduces a cosine response and can make the reading lower even though the source intensity has not changed. Reduce ambient light by darkening the room or measuring the background with the test source off and subtracting that background reading before calculation. Allow both the lamp and meter to stabilise, especially with discharge lamps, dimmed LEDs, or inexpensive sensors. Use metres for distance and lux for illuminance; entering centimetres as though they were metres squares the unit error. Repeating the reading at several distances is a useful check: in a valid point-source region, doubling distance should reduce illuminance to roughly one quarter while the calculated candela remains reasonably consistent.
Know when the inverse square model applies
The inverse square law is a geometric model for a point source in unobstructed space. Real luminaires have physical size, lenses, reflectors, diffusers, and angular beam patterns. Treat a source as point-like only when the measurement distance is comfortably larger than its emitting dimensions. Very close readings can produce misleading intensity because different parts of the emitter are at meaningfully different distances from the detector. Reflections from walls, ceilings, benches, or glossy objects add illuminance that did not travel directly from the source, causing an overestimate. Absorbing media, haze, screens, and covers can instead reduce the direct reading. The formula also assumes normal incidence; for an oblique measurement, detector geometry requires additional treatment. Use the returned value as the luminous intensity in the tested direction, not as total luminous flux in lumens. Finding total flux requires integrating intensity over all directions or using suitable photometric equipment. For automated calls, the request costs $0.002; the browser calculation uses the same deterministic formula and validation rules.
What you can do with it
Estimate a lamp's directional candela
Convert a stable lux-meter reading at a known distance into luminous intensity along the measurement axis.
Compare beam directions
Repeat measurements at different angles to compare the directional intensity pattern of a luminaire.
Check inverse-square consistency
Calculate candela at several distances and investigate reflections or near-field effects when the results disagree.
FAQ
What formula does the calculator use?
It uses I = E × r², where I is luminous intensity in candela, E is illuminance in lux, and r is distance in metres.
Why must distance be entered in metres?
Lux is lumens per square metre, so metres keep the units consistent and produce candela directly. Convert centimetres or feet before entering the distance.
Does the result equal the lamp's lumen output?
No. Candela is directional luminous intensity, while lumens describe total luminous flux. A lumen estimate requires information about the complete angular distribution.
Can I use this for an LED panel or long tube?
Only as an approximation when the distance is much larger than the source dimensions. Extended sources do not behave like point sources at close range.
How should I handle ambient light?
Measure the background illuminance with the source off and subtract it from the source-on reading, provided the environment remains unchanged.
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/optics/luminous-intensity-from-illuminance \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"illuminance_lux":125,"distance_m":2}'const res = await fetch("https://api.kit.forhosting.com/optics/luminous-intensity-from-illuminance", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"illuminance_lux": 125,
"distance_m": 2
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/optics/luminous-intensity-from-illuminance",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"illuminance_lux": 125,
"distance_m": 2
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/optics/luminous-intensity-from-illuminance", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"illuminance_lux":125,"distance_m":2}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"illuminance_lux":125,"distance_m":2}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/optics/luminous-intensity-from-illuminance", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"illuminance_lux": 125,
"distance_m": 2
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "optics.luminous_intensity_from_illuminance",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |