# Kelvin Desk > Kelvin is not a linear scale and every correction is. A gel is a CONSTANT SHIFT IN > MIREDS (1,000,000 / K), so the same full CTO that takes 5,600 K to 3,230 K — a change of > -2,370 K — only takes 3,200 K to 2,250 K, a change of -950 K. > Same gel, 2.51× the Kelvin change. And mixing averages the MIREDS, not the Kelvins: half a 2,700 K > practical and half a 6,500 K sky is 3,820 K, not the 4,600 K everybody does in their head. ## The one thing to know **KELVIN IS NOT A LINEAR SCALE AND EVERY CORRECTION IS.** ```text mired 1,000,000 / K a gel a CONSTANT mired shift after a gel mired(source) + shift what it needs mired(balance) - mired(source) the mix level-weighted average of the MIREDS the spread the widest gap between any two sources, in mireds ``` The Kelvin average is ALWAYS too cool, because the reciprocal scale is convex, and the error grows with the distance between the sources — which is exactly when somebody reaches for it. A mired is the unit to think in; Kelvin is the unit to speak in. ## One gel, several starting points | Full CTO on | Lands at | A change of | In mireds | | --- | --- | --- | --- | | 6,500 K | 3,510 K | **-2,990 K** | +131 mired | | 5,600 K | 3,230 K | **-2,370 K** | +131 mired | | 4,300 K | 2,750 K | **-1,550 K** | +131 mired | | 3,200 K | 2,250 K | **-950 K** | +131 mired | | 2,700 K | 1,990 K | **-710 K** | +131 mired | **One gel. 4.24× the Kelvin change between the top row and the bottom.** The last column never moves, because a gel IS a mired shift — the Kelvin column is a consequence of where it was used, and every rule of thumb phrased in degrees is true at exactly one starting point. ## Equal Kelvin gaps, unequal corrections | From | To | The gap in Kelvin | The gap in mireds | Which gel | | --- | --- | --- | --- | --- | | 2,700 K | 3,200 K | +500 K | **-58 mired** | Half CTB | | 3,200 K | 3,700 K | +500 K | **-42 mired** | Quarter CTB | | 5,600 K | 6,100 K | +500 K | **-15 mired** | Eighth CTB | | 8,000 K | 8,500 K | +500 K | **-7.4 mired** | none | **Every row is the same 500 K, and the correction needed is 7.87× larger at the warm end than at the cool one.** That is why 500 K matters enormously on tungsten and not at all on an overcast sky, and why a camera that balances in even Kelvin steps is finer than it needs to be at one end and coarser than it should be at the other. ## Mixing, and the error in averaging Kelvins | The sources | Mired average (the truth) | Kelvin average (the rule of thumb) | Out by | | --- | --- | --- | --- | | 3,200 K + 5,600 K | **4,070 K** | 4,400 K | +330 K | | 3,200 K ×3 + 5,600 K | **3,580 K** | 3,800 K | +220 K | | 3,200 K + 5,600 K ×3 | **4,720 K** | 5,000 K | +280 K | | 2,700 K + 6,500 K | **3,820 K** | 4,600 K | +780 K | | 4,300 K + 5,600 K | **4,860 K** | 4,950 K | +90 K | **The Kelvin average is always too cool**, because the reciprocal scale is convex, and the error grows with the distance between the sources. On the widest row here it is +780 K — far more than anybody would accept as a balance error, and arrived at by an arithmetic everybody does in their head. The last row is the reassuring one: when the sources are close, the two answers nearly agree. The rule of thumb is not wrong because it is a rule of thumb, it is wrong **in proportion to how mixed the light actually is** — which is exactly when somebody reaches for it. ## The standard gels, as the shifts they are | Gel | Shift | Also known as | Takes daylight to | Takes tungsten to | | --- | --- | --- | --- | --- | | **Full CTB** | -131 mired | Lee 201, Rosco 3202 | 21,020 K | 5,510 K | | **Half CTB** | -68 mired | Lee 202, Rosco 3204 | 9,040 K | 4,090 K | | **Quarter CTB** | -35 mired | Lee 203, Rosco 3208 | 6,970 K | 3,600 K | | **Eighth CTB** | -18 mired | Lee 218, Rosco 3216 | 6,230 K | 3,400 K | | **none** | 0 mired | clear | 5,600 K | 3,200 K | | **Eighth CTO** | +20 mired | Lee 223, Rosco 3410 | 5,040 K | 3,010 K | | **Quarter CTO** | +42 mired | Lee 206, Rosco 3409 | 4,530 K | 2,820 K | | **Half CTO** | +81 mired | Lee 205, Rosco 3408 | 3,850 K | 2,540 K | | **Full CTO** | +131 mired | Lee 204, Rosco 3407 | 3,230 K | 2,250 K | | **Double CTO** | +262 mired | two full CTO stacked | 2,270 K | 1,740 K | The last two columns are the same gel doing two different-sized jobs. Full CTO takes 5,600 K to 3,230 K — the conversion it is named for — and the same sheet on 3,200 K only reaches 2,250 K. Manufacturers differ by a few mireds and the figures above are the commonly published ones. **The point of this page is the scale, not any one product's exact number** — and gels stack by adding their shifts, which is only true because the shift is the constant and the Kelvin is not. ## Thresholds | Threshold | Value | What it separates | | --- | --- | --- | | visible | 5 mired | about the smallest difference most people see side by side on a white card. It is the default tolerance. | | another colour | 20 mired | past this a source is not slightly warm, it is a different colour of light in the same frame. | | a gel matches | within 10 mired | close enough that the standard gel is the answer rather than an approximation. | | a spread worth naming | 30 mired across sources | different parts of the frame are different colours. | | a spread nothing reconciles | 80 mired | one balance leaves BOTH ends visibly off, in opposite directions. | Defaults when the sheet is silent: the balance falls back to the mix itself and that is reported as a WARNING, because every cast on the page is measured from it. The tolerance defaults to 5 mired. Reference points: tungsten is 3,200 K (313 mired) and daylight is 5,600 K (179 mired). ## Sheet grammar Two blocks. `SETUP` is `key | value`, one per line. `SOURCES` is a table. ``` SETUP name | what this is balance | 5600 what the camera is set to, or `mix` to sit on the mix target | 5600 what the picture is meant to read as tolerance | 5 mireds of residual cast you will accept SOURCES s1 | the window | 5600 | 800 | none | s2 | the tungsten key | 3200 | 400 | full ctb | s3 | the LED panel | 4300 | 200 | +42 mired | ``` A SOURCES row is `id | what it is | kelvin | level | gel | why`. A temperature accepts `5600`, `5600K` or `5.6k`. **The level is a weight, not a measurement** — it decides how much each source counts toward the mix, so any consistent unit works and the absolute values cancel. The gel column accepts a name (`none`, `quarter cto`, `half ctb`, `full cto`, `double cto`), a Lee number (`Lee 204`), or an explicit shift (`+42 mired`) for a fixture whose own temperature is being changed rather than filtered. Several sources can carry the same gel and each is computed from its own starting point, which is the whole point. `balance | mix` is the useful shorthand for "whatever the camera would auto-balance to", and it makes the sheet report how far each source sits from the average rather than from a number somebody chose. ## Lanes - **`plan`** — Choose the balance, then solve the gels. A balance gets picked from the brightest source or from a grey card held in the middle of the room, and the gels get chosen by name afterwards. This works the other way: it names the balance the scene should sit on, then solves the mired shift each source needs and matches it to a gel somebody can pull from a drawer. Sections: Summary, The Sheet, The Setting, Reasoning, Next Step. - **`check`** (primary) — What every source lands at, and what the mix is. The paid read of what the free panel computes. Where each source sits after its gel, how far that is from the balance in mireds and in the degrees people say out loud, what the sources actually mix to, and whether any gel on the sheet is moving its source the wrong way. Sections: Summary, Verdict, Findings, Corrected Sheet, Next Step. - **`mix`** — What the sources really mix to. A mix is an illuminance-weighted average of MIREDS, not of Kelvins, and the two answers diverge as the sources get further apart. This shows both side by side, says which source is carrying the mix, and reports the spread — which is a different problem from a cast and has a different fix. Sections: Summary, What Each Source Contributes, Mired Against Kelvin, The Spread, Next Step. - **`gels`** — Which gel each source actually needs. A gel is a constant shift in mireds, so the same filter is worth a very different number of degrees depending on where the source started. This solves the shift each source needs, matches it against the standard set, and says plainly where nothing in the drawer is close enough. Sections: Summary, Every Source, What Each Gel Is Worth Here, Where Nothing Fits, Next Step. - **`deliver`** — Decide what changes: the balance, the gels, or the fixtures. Sorts every finding into what moving the balance fixes, what only a gel or a different fixture fixes, and what nothing fixes. The middle bucket is where most of a mixed-light job lives, and the last one contains the thing people spend longest arguing about: a spread no single balance can reconcile. Sections: Summary, Moving The Balance Fixes, Only A Gel Or A Fixture Fixes, Nothing Fixes, Next Step. ## Findings All 25 are computed in the browser and cost nothing. | Code | Severity | Scope | What it means | | --- | --- | --- | --- | | `BALANCE-ASSUMED` | warn | setup | The white balance was assumed | | `TARGET-ASSUMED` | note | setup | No target temperature was given | | `TOLERANCE-ASSUMED` | note | setup | The acceptable cast was assumed | | `NO-SOURCES` | warn | setup | A balance, and nothing to balance | | `GELLED` | note | source | What this gel actually does to this source | | `GEL-IS-CONSTANT-IN-MIRED` | note | source | The same gel would do something else on a different source | | `SOURCE-MATCHES` | note | source | This source lands within tolerance of the balance | | `SOURCE-CAST` | warn | source | This source is visibly off the balance | | `SOURCE-CAST-GROSS` | error | source | This source is far enough off to be a different colour | | `GEL-CORRECTS` | note | source | This gel takes the source where it needed to go | | `GEL-OVERSHOOTS` | warn | source | This gel takes the source past the balance | | `GEL-WRONG-WAY` | error | source | This gel moves the source away from the balance | | `GEL-TO-MATCH` | note | source | The gel this source actually needs | | `NO-GEL-MATCHES` | warn | source | No standard gel gets this source close enough | | `THE-MIX` | note | setup | What the sources actually mix to | | `KELVIN-AVERAGE-IS-WRONG` | warn | setup | Averaging the Kelvins gives a different answer | | `DOMINANT-SOURCE` | note | setup | One source is carrying the mix | | `SPREAD-NOTABLE` | warn | setup | The sources are spread across a range worth naming | | `SPREAD-GROSS` | error | setup | The sources are spread too far to reconcile in one balance | | `ALL-MATCHED` | note | setup | Every source lands within tolerance | | `BALANCE-SPLITS-THE-DIFFERENCE` | warn | setup | The balance sits between the sources rather than on one | | `BALANCE-ON-A-SOURCE` | note | setup | The balance sits on one of the sources | | `OFF-TARGET` | warn | setup | The mix does not land on the target | | `ON-TARGET` | note | setup | The mix lands on the target | | `GREEN-MAGENTA-NOT-MODELLED` | note | setup | This page only knows one of the two axes | ## What this page cannot do This page computes from the numbers on the sheet. It has not metered anything. - **It only knows one of the two axes.** Colour temperature is blue-to-orange. The green-to-magenta axis is a second, independent number that this page does not model at all, and it is where fluorescents and cheap LEDs actually misbehave — a source can sit exactly on the balance here and still be visibly green. - **A colour temperature assumes a source that is close to a blackbody.** Tungsten and daylight are; an RGB LED at "3200 K" may match it in two coordinates and match nothing else, which is what a CRI or TM-30 figure is for and what this page cannot see. - **The mired average is the industry approximation, not the exact physics.** Mixing is properly additive in chromaticity, and the reciprocal average tracks it closely over the range these numbers live in. It is far closer than a Kelvin average and it is not the last word. - **Gel values differ by manufacturer** by a few mireds, and the set here is the commonly published one. Gels also cut light, and how much is not modelled — a full CTB costs around a stop, which is often what actually decides whether it gets used. - **The levels are relative and they cancel.** They weight the mix and nothing else, so any consistent unit works and no figure here is photometric. - Nothing here reaches the network, reads a file, or inspects an image. ## API `POST https://api.skillsafe.ai/v1/app-api/run` with a bearer token from https://kelvin-desk.skillsafe.ai/tokens.html. The body IS the input object — there is no `input` wrapper and no `X-App-Slug` header. `task` is required and must be one of plan, check, mix, gels, deliver. `POST /estimate` is free and validates the same body. Full documentation at https://kelvin-desk.skillsafe.ai/api.html. ## Provenance Lanes derived from the `videodb` skill in https://github.com/affaan-m/everything-claude-code. The arithmetic, thresholds, sheet grammar and findings are this app's own. Not affiliated with or endorsed by the authors of that repository.