Optical etendue calculator
Optical etendue describes how broadly light occupies both physical space and angular space.
Run — free
This calculator multiplies a source's projected area in square metres by the solid angle of the beam in steradians, returning etendue in square-metre steradians. The quantity is central to illumination, imaging, concentrator, and radiometry calculations because an ideal lossless optical system cannot reduce it. Enter finite, non-negative SI values to obtain a transparent result with the formula shown alongside the normalized inputs.
What optical etendue measures
Etendue combines two properties that are easy to consider separately but must be tracked together: the projected area occupied by a source or beam and the range of directions over which its rays travel. A wide emitter confined to a narrow cone can have the same etendue as a small emitter spreading light through a broad cone. For the uniform, aligned case handled here, the relationship is G = A × Ω, where A is projected source area and Ω is solid angle. The resulting SI unit is square-metre steradian, written m²·sr. This calculator is useful when the area and angular extent are already known and you need a direct geometric result. It does not infer projected area from a tilted surface, derive solid angle from lens dimensions, or model spatial and angular variation across a nonuniform source. Those cases require integration over position, direction, and the appropriate cosine projection factor before their effective area and solid angle can be represented by this simplified product.
How to enter area and solid angle correctly
Provide source_area_m2 as the projected emitting or beam area in square metres, not merely a convenient mechanical dimension. For a circular spot, convert diameter to radius and calculate πr²; for a rectangle viewed normally, multiply its side lengths. If the source plane is tilted relative to the optical axis, the projected area may differ from its physical surface area. Provide solid_angle_sr in steradians. A steradian measures angular spread over a sphere and is not the same as an angle stated in degrees or radians. If you have the half-angle θ of a circular cone instead, first calculate Ω = 2π(1 − cos θ), with θ expressed in radians. The calculator accepts zero to represent a limiting zero-area or zero-angle case and rejects negative quantities, non-finite numbers, and solid angles greater than 4π, because 4π steradians covers the complete sphere. Keep every conversion explicit so the returned m²·sr value remains dimensionally meaningful.
Interpreting conservation and practical results
In ideal geometrical optics, etendue is conserved through a lossless optical system and cannot be compressed by ordinary passive components. A lens may reduce beam area only by increasing angular spread, or narrow the angular spread only by increasing area. This is why a large, diffuse source generally cannot be focused into an arbitrarily small spot with a narrow output cone. Compare the calculated source etendue with the acceptance etendue of downstream apertures, fibres, detectors, or concentrators. If the receiving system accepts less etendue, some rays must be rejected, so geometric throughput cannot reach one hundred percent even before absorption, reflection, scattering, and alignment losses are considered. The simple product is a geometric benchmark rather than an optical-power prediction: it says nothing directly about watts, radiance, spectrum, polarization, or component transmission. Use the output to identify phase-space mismatch, then apply efficiency and loss factors separately when estimating delivered power. Via the API, each deterministic calculation costs $0.002 and returns the exact inputs, formula, value, and unit for auditable workflows.
What you can do with it
Match a source to an optical system
Compare source etendue with the acceptance etendue of lenses or apertures before estimating achievable coupling.
Evaluate fibre coupling limits
Calculate the beam's area-angle product and check whether a fibre can accept its geometric spread.
Document illumination designs
Record a reproducible etendue value alongside area and solid-angle assumptions in an engineering calculation.
FAQ
What formula does the calculator use?
It uses G = A × Ω for a uniform, aligned source, where A is projected area in m² and Ω is solid angle in sr.
What units does the result use?
The result is returned in square-metre steradians, written m²·sr.
Can I enter square millimetres?
Convert them first: one square millimetre equals 0.000001 square metres. The source_area_m2 field always uses m².
Why is solid angle limited to 4π?
A complete sphere subtends 4π steradians, so a geometric solid angle cannot be larger.
Does etendue tell me how much optical power reaches a detector?
No. Etendue describes geometric extent. Power also depends on radiance, transmission, losses, spectrum, and detector response.
How much does an API calculation cost?
Each API request costs $0.002; the browser calculator uses the same deterministic computation.
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/etendue \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"source_area_m2":0.0001,"solid_angle_sr":0.02}'const res = await fetch("https://api.kit.forhosting.com/optics/etendue", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"source_area_m2": 0.0001,
"solid_angle_sr": 0.02
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/optics/etendue",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"source_area_m2": 0.0001,
"solid_angle_sr": 0.02
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/optics/etendue", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"source_area_m2":0.0001,"solid_angle_sr":0.02}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"source_area_m2":0.0001,"solid_angle_sr":0.02}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/optics/etendue", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"source_area_m2": 0.0001,
"solid_angle_sr": 0.02
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "optics.etendue",
"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. |