Wien displacement law calculator
This Wien displacement law calculator converts an absolute blackbody temperature into the wavelength where its spectral radiance per unit wavelength reaches its maximum.
Run — free
Enter a temperature in kelvins and receive the peak wavelength in meters, micrometers, and nanometers. The calculation uses the Wien displacement constant divided by temperature, so it is deterministic and immediate. It is useful for checking thermal-emission estimates, comparing stars, selecting optical sensors, and understanding how hotter objects shift their strongest wavelength toward shorter parts of the spectrum.
What Wien's displacement law calculates
A blackbody is an idealized emitter whose spectrum depends only on absolute temperature. Wien's displacement law identifies the wavelength at which that spectrum, expressed as spectral radiance per unit wavelength, reaches its maximum. The relationship is simple: the peak wavelength equals the Wien displacement constant, 2.897771955 × 10^-3 meter-kelvins, divided by temperature in kelvins. Raising the temperature therefore moves the peak toward shorter wavelengths, while lowering it moves the peak toward longer wavelengths. This calculator returns the same result in meters, micrometers, and nanometers so that you can use the scale appropriate to thermal infrared, visible, or shorter-wavelength work without performing another conversion. The reported peak describes the maximum of the wavelength-based form of Planck's spectrum. It does not mean that the object emits only at that wavelength; a blackbody emits across a broad continuous range. Real materials can also depart from ideal blackbody behavior because their emissivity varies with wavelength, surface condition, and viewing geometry. Treat this value as a physically defined reference point for an ideal spectrum and as a useful first approximation for thermal sources.
How to enter temperature and interpret the result
Enter absolute temperature as a positive finite number in kelvins. Celsius and Fahrenheit values cannot be used directly because Wien's law requires a scale whose zero represents absolute zero. Convert Celsius to kelvins before calculating by adding 273.15; use an appropriate conversion for Fahrenheit measurements. The solver rejects zero, negative values, text, infinity, and missing input because each would make the physical calculation undefined or numerically invalid. After validation, it divides the constant by the supplied temperature and returns the original temperature alongside three wavelength units. For example, a photosphere near 5,800 K has a peak in the visible range, while an object near ordinary room temperature peaks in the thermal infrared. The wavelength result should be read as the location of the mathematical maximum for spectral radiance per unit wavelength. If you compare it with a graph or instrument specification, verify that the graph uses wavelength rather than frequency and that the instrument's stated band uses compatible units. The API price is $0.002 per request; the browser calculation uses the same pure arithmetic and can run locally.
Important distinctions and practical limitations
The phrase peak frequency can cause a common mistake. Maximizing Planck's law per unit frequency produces a different numerical location from maximizing it per unit wavelength, and converting one peak coordinate with frequency equals light speed divided by wavelength does not produce the other peak. This capability specifically calculates the wavelength-domain peak associated with the standard Wien wavelength displacement constant. Another limitation is the ideal blackbody assumption. Stars, furnaces, planets, lamps, and heated components may be approximated as blackbodies over useful ranges, but absorption lines, atmospheric windows, selective coatings, and wavelength-dependent emissivity reshape their measured spectra. Sensor response matters as well: a detector may record its largest signal away from the source's theoretical peak because filters, optics, and detector sensitivity weight wavelengths differently. Use the result to choose an initial measurement band, sanity-check a model, or compare characteristic temperatures, then apply the actual emissivity and system response when engineering accuracy is required. The calculation also does not provide total radiated power, color coordinates, photon-counting peaks, or a complete spectrum. Those require additional laws or an integration of Planck's distribution.
What you can do with it
Estimate a star's characteristic wavelength
Convert an effective surface temperature into a wavelength-domain peak for a quick comparison of stellar thermal spectra.
Select an initial thermal sensor band
Use an expected target temperature to locate its ideal blackbody peak before accounting for atmospheric transmission and detector response.
Check thermal-emission calculations
Confirm that a modeled peak shifts inversely with absolute temperature and that wavelength unit conversions are consistent.
FAQ
What equation does the calculator use?
It uses peak wavelength = 2.897771955 × 10^-3 meter-kelvins / temperature in kelvins.
Can I enter Celsius or Fahrenheit?
No. Convert the measurement to absolute temperature in kelvins first; Wien's law is not defined using an offset temperature scale.
Does a blackbody emit only at the peak wavelength?
No. The peak is the maximum point of a broad continuous spectrum, not a single emitted wavelength.
Why does a frequency-based peak give a different answer?
Spectral density per unit wavelength and spectral density per unit frequency are different distributions, so their maxima occur at different coordinates.
Does the result account for emissivity or detector response?
No. It is the ideal wavelength-domain blackbody peak. Apply material emissivity, transmission, filters, and detector sensitivity separately.
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/wien-peak-wavelength \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"temperature_k":5778}'const res = await fetch("https://api.kit.forhosting.com/optics/wien-peak-wavelength", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"temperature_k": 5778
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/optics/wien-peak-wavelength",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"temperature_k": 5778
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/optics/wien-peak-wavelength", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"temperature_k":5778}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"temperature_k":5778}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/optics/wien-peak-wavelength", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"temperature_k": 5778
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "optics.wien_peak_wavelength",
"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. |