Pinch or scroll on the chart to zoom, drag to pan — or use the +/− buttons.
Predicts actual white-balanced RGB output for your selected filter stack against a specific sensor and light source — more precise than the generic "Describe the look you want" guess above.
The real, measured curves above are a generic default CMOS approximation, the human eye's own photopic response, and one real scientific sensor — a Kodak KAF-8300, a monochrome astronomy CCD, not a DSLR or mirrorless body. None of these are "what your Canon/Nikon/Sony/Fuji actually sees" — treat results as illustrating the maths, not as a substitute for your specific camera. Source: CheeseCube312's Filter-Plotter-Data project (MIT-licensed).
Same 3×3 matrix concept as irlab.uk's own Channel Swap — applied here to the predicted spectral response instead of image pixels.
| R in | G in | B in | |
| R out | |||
| G out | |||
| B out |
Most of this is now fit to real published or measured data — the "model" part is the smooth curve connecting real numbers, not a guess at the numbers themselves. That's a genuine shift from where this started: the Wratten series is fit to Kodak's own handbook, the Schott series to Schott's own datasheets, several Hoya and Lee entries to real manufacturer charts or product-specific measurements, GRB1/GRB3 to real product data, the astronomy filters to physical constants. Where that's true, treat the curve shape as trustworthy even though a sigmoid can't trace every wiggle of a real glass exactly. A real minority of entries are still genuine estimates rather than fits — generic eBay/AliExpress items with no published data, a few derived-not-measured cases, and the colour-conversion filters generally — and those are flagged individually as they come up below, rather than left for you to guess which is which.
150 filters now skip the fitting step entirely and use the real measured curve directly — a step up from everything described below, which is a sigmoid fit to real data points, not the points themselves. (The bar at the top of this panel is computed live, so it is the number to trust if this paragraph ever falls behind.) These span the Lee gels, most of the Schott GG/OG/RG/BG/UG/NG/VG series, GRB1 and GRB3 (from two different real sources, see their own notes), BG3, Hoya's 80A/80B/80C, the MidOpt multi-bandpass filters, several B+W IR and contrast filters, and QB21 — sourced from CheeseCube312's Filter-Plotter-Data project (MIT-licensed), B+W's own Filter Handbook, and Schott's own official datasheet collection, each resampled onto a 10nm grid rather than approximated by a curve shape. Where a filter is in this set, treat the numbers themselves as trustworthy, not just the general shape — for everything else below, it's still a fit, with whatever margin of error that entry's own paragraph describes.
An internal-vs-external transmittance mixup was found and fixed across several Schott entries. Manufacturer datasheets publish internal transmittance (light lost only to absorption within the glass, not the ~8-9% typically lost to surface reflection at each face) alongside a stated reflection factor for converting it to the real external number a camera actually sees. BG38, BG39, BG40 and S8612 were all, at different points, checked against or built from a source using the internal figure directly — overstating real transmission by roughly that same 8-9% margin. All four are now corrected using each glass's own official reflection factor.
The branded filters are the best-anchored. Their 50% transmission points come from the Kodak Photographic Filters Handbook (B-3, 1992) for the Wratten series — which is what Tiffen numbering follows — and from B+W's own published figures for the 09x series. Where a manufacturer gives two points (B+W 092: 50% at 695nm rising past 90% by 730nm; B+W 093: about 1% at 800nm and 88% at 900nm) the edge steepness was fitted to match both, rather than guessed. Every branded cutoff here reproduces its published 50% figure to within a nanometre.
Real glass rolls off slightly asymmetrically, so a sigmoid can't match a true trace perfectly — the 092 curve reaches about 81% at 730nm where the spec says over 90%. Close, not exact.
The Wratten step series is a good fit by nature. Filters 3 through 29 are documented as sharing one curve shape — a simple step cutting everything below a limit, with only the cutoff moving from blue to deep red — which is exactly what this model draws. Cut-on figures are from filter-stock listings and the Kodak handbook. These are the filters put in front of Aerochrome film to hold back blue, since all three emulsion layers are inherently blue-sensitive; shooters generally reach for a #15 dark yellow or #16 orange, finding a #12 or lighter leaves a blue cast.
Colour filters are modelled with their infrared leak included, because that is the single most important thing about using them on a converted body. Organic dyes absorb in the visible but go essentially transparent past about 700nm, so a blue, green or magenta filter passes its colour and infrared at once. That dual band is what produces in-camera false colour, and it is why a deep blue Wratten 47 is used deliberately for the effect. The visible bands are drawn from published Wratten passband figures; the leak height is a reasonable dye-filter value, not a measurement for each specific filter.
GRB1 and GRB3 are attenuators, not blockers. Both pass visible light almost untouched and only knock infrared down — effectively an ND filter for IR — which is the point: leaving some IR through and pairing it with a colour gel gives controlled false colour rather than the all-or-nothing result of a hard IR cut. Manufacturer Zeyuan Optics states GRB1 = Schott KG2 and GRB3 = Schott KG3; GRB3 cross-checked closely against real product-specific data (2.2pp RMS) so its KG3-datasheet fit stayed. GRB1 didn't — real GRB1-specific data showed it blocking NIR noticeably harder than genuine Schott KG2 glass does, so it's now fitted directly to that real data instead of the KG2 proxy (11.0pp RMS as a proxy vs 1.2pp fitted directly). The core finding survives the correction: GRB1 still passes more light than GRB3 at every wavelength from 700-1000nm, just by a smaller margin than the KG2 proxy implied. The two DIY recipes on the buttons above (GRB1 + Lee 139 Primary Green; GRB3 + Lee 729 Scuba Blue, the latter reported as close to Kolari's IR Chrome) come from David Kennard's 23-filter comparison and use these two specific glasses.
All five Lee lighting gels used in the DIY recipes are now fit to real Lee Filters data, replacing what were previously the weakest-sourced colour entries in this file — one estimated from a single published daylight-transmission number, another borrowed its curve shape from an unrelated Wratten filter entirely. Real digitised data (0.16-4.6 percentage points RMS across all five) showed genuinely different shapes than assumed: Lee 139 and 729 are true narrowband bandpasses, not the broader soft-edged curves guessed at before, and Lee 035's "pink" result comes from a real dip shape (elevated blue, sagging green, rising red) rather than an approximation. One honest caveat carried over from the source itself: every Lee gel in that dataset shares the same generic "rises to ~90% by 800nm" NIR tail, which its own documentation admits is a rough extrapolation applied uniformly, not measured per colour — plausible for the two broad warming gels, less obviously true for the narrowband ones, so those two carry a more conservative, clearly-flagged leak estimate rather than inheriting the same confident number.
TSN340 and TSN575 have no manufacturer datasheet, so both are derived rather than guessed. TSN340 turns out not to be a separate glass at all — Aphalo's own measurements identify it directly as ZWB1 glass at 8.3mm, so this reuses ZWB1's already-verified curve and scales it by Beer-Lambert (thickness ratio 8.3/2.1) rather than fitting a new shape from scratch. TSN575 is cross-checked a different way: Aphalo publishes measured optical density for three TSN575 stacks (with ZWB1, ZWB2 and ZWB3). Since stacked OD adds, subtracting this file's own ZWB curves from each measured stack isolates TSN575's own OD three independent times per waveband — where that subtraction is numerically stable, all three agree with the shortpass-at-575nm shape already modelled here. Green/yellow bands were dropped from that check because both filters are already near-opaque there, which makes the subtraction noise-dominated rather than informative — the source's own text warns that measured OD above 3-4 should be read as "high," not exact. TSN340's Beer-Lambert scaling was later tested against real ZWB1 data measured at three actual thicknesses (1mm, 2mm, 3mm): the theory held up reasonably in the UV passband, but the deep-NIR blocking region — the part that matters most for TSN340's whole purpose — was too noisy in the real data to support a more precise empirical alternative (one measurement even showed the 3mm sample passing more than the 2mm one at 900nm, a sign of measurement noise near the floor rather than a real material effect). The theory-based approach was kept rather than "corrected" toward numbers the data itself couldn't reliably support.
"Faux UV on an unconverted body" is a real, verified case worth explaining. Reported directly on ultravioletphotography.com by Fedia: ZWB3 + QB21 stacked on a stock (unconverted) Canon 600D. No true UV reaches the sensor here — the camera's own internal hot-mirror still blocks it, which this tool models explicitly via "Stock camera IR-cut" and can verify numerically: the same ZWB3+QB21 pair passes 64% at 350nm on a converted body but only 0.1% on a stock one. What survives instead is a narrow deep blue-violet band around 410nm — a purely visible-light effect. Fedia's own observation was that vegetation still renders dark, similar to true UV, but for an unrelated reason: chlorophyll absorbs blue light strongly too, so a blue-only passband darkens foliage by a completely different mechanism than UV absorption does. Worth knowing if you own UV glass but haven't converted a body yet.
The astronomy filters are anchored on physical constants. The emission wavelengths are not estimates — H-alpha 656.3nm, H-beta 486.1nm, OIII 495.9/500.7nm, SII 671.6nm, sodium D 589.0/589.6nm, mercury 435.8/546.1/578nm. The passband widths follow standard product bandwidths (3nm, 7nm, 8nm) and the modelled filters measure within about 0.15nm of the width they are named for. The L-eXtreme is drawn as Optolong specify it: 7nm bands on Ha and OIII, with H-beta deliberately blocked, which is what separates it from the tri-band L-eNhance.
The stock camera IR-cut entry is there to show why conversion happens at all. Select it together with an H-alpha filter: an unconverted body passes roughly 20% at 656nm against about 89% once the internal cut filter is gone. That gap is the whole reason astro-modified and full-spectrum bodies exist, and it is the same modification that makes this tool's kind of photography possible.
QB21 and Schott BG38 are the same glass. Tangsinuo sell it under both names, and it is listed elsewhere as "QB21 (equal to BG38)" — so the two entries here deliberately carry identical curves. The AR-coated QB21 is separate because the coating raises throughput; Pedro Aphalo measured it transmitting UV-A better than the TSN575 while blocking NIR less effectively, which is why it is drawn with an earlier deep-IR leak. Relative ordering within the Schott short-pass family follows documented behaviour: S8612 suppresses infrared more aggressively than BG38, BG39 or BG40 at equal thickness, BG39 cuts furthest into visible red, and BG40 sits between BG38 and BG39. B+W 039 is mounted BG39, B+W 489 is mounted KG3, and the LDP CC1 is widely held to be uncoated 2.5mm BG38. Cutoffs assume roughly 2mm — thickness matters a great deal with absorptive glass.
Absorptive and interference blockers are flagged separately because the difference is practical, not academic. Absorptive glass works chemically and behaves identically across the frame. Interference coatings reflect infrared off a dielectric stack whose effective thickness varies with incidence angle, so the cutoff drifts at the frame edges and wide lenses can show an uneven cyan corner cast. Filters known to develop surface haze over time are flagged too.
Hoya's X0/X1 naming does not match Kodak's. Kodak's old letter scheme ran K1 = Wratten 6, K2 = Wratten 8, K3 = Wratten 9, G = Wratten 15, X1 = Wratten 11, X2 = Wratten 13, A = Wratten 25. Hoya broke from it: they sell the Wratten 11 yellow-green as X0 and use X1 for a fuller green. Both namings are in circulation and people do get caught out — a Hoya X1 is not a Kodak X1. The Hoya group here follows Hoya's own product naming, since that is what is engraved on the filter you are holding, and each entry states its Wratten equivalent explicitly. Hoya's O is designated (G), and Kodak's G was deep yellow rather than orange, which is why the O(G) sits at Wratten 15 and not with the true oranges. Both are now fit to real Hoya-branded X0/X1 data too, which turned up two real corrections: X0's true peak is ~90% near 550-560nm, not the 60-63% previously read off a chart, and X1 — previously modelled with a flat ~6-7% floor through red and NIR — actually climbs slowly but steadily back up to ~17.6% by 1080nm, a genuine late-NIR rise the earlier chart reading gave no reason to suspect.
Two real physical effects are now modelled separately. Absorption in the glass follows Beer-Lambert, so internal transmittance scales as a power of thickness — doubling the glass squares it. Surface reflection is a fixed Fresnel loss of roughly 4% per air-glass face, independent of thickness, which an anti-reflection coating cuts to about 1%. Schott quote internal and external transmission separately for exactly this reason. The thickness slider applies the first effect and leaves the second alone, which is why moving it barely changes the passband but drives the stopband down hard: S8612's own datasheet (1mm reference) puts it under 1% at 700nm already, falling to effectively zero by 2mm — this is a genuinely aggressive IR blocker even thin, which is part of why it's rated for half the thickness of a BG38-class glass for the same blocking. Interference filters are excluded from the scaling because their behaviour comes from a coating stack, not bulk absorption.
Turn on the log scale to see leaks. A linear axis flattens anything below about 1% onto the baseline, which hides precisely the thing that matters most — a UV stack leaking a few tenths of a percent in the infrared still ruins the shot. The log axis runs down to 0.001% so those tails are visible. It is the same reason spectroscopy is usually plotted as optical density.
Fedia (source for the ZWB3/ZWB1 data above, and for the faux-UV-on-unconverted-body technique) put the practical reason better than that: a UV-pass filter's small secondary bumps look unimportant on a linear chart, but they aren't. UV glass like ZWB3 passes a lot of UV in absolute terms, but a camera sensor's native sensitivity to UV is weak, so shooting real UV means cranking ISO hard to compensate. Once you've done that, the "small" leak features get amplified right along with the UV signal — a bump that reads as a few percent on a linear axis can end up genuinely competing with the UV you're trying to capture. The log scale is what actually shows you that risk; the linear one hides it.
The Schott series is the reference glass most filters are cut from. Their part numbers are the 50% cut-on wavelength by definition — RG695 cuts at 695nm, OG550 at 550nm — so those entries are exact rather than estimated. B+W 092 is RG695, B+W 093 is RG830, B+W 091 is RG630, and the Hoya R72 sits beside RG715. Edge steepness is the estimated part: it varies between melts and the model scales it with wavelength as a rough rule.
Not all UV-pass glass leaks infrared — dielectric ones don't. The ZWB/UG-family absorptive glass leaks deep IR because its dye simply doesn't absorb out there, which is why it needs a blocker stacked with it. Baader U and its rivals (Andrea-U, Chroma U-Bessel) work differently: a dielectric coating stack reflects everything outside the passband by design, so there is no IR leak to block in the first place — independently measured out to 850nm on both Baader and Andrea-U. The tradeoff is the same one interference coatings always have: transmission is angle-dependent, so the passband drifts and dims a little off-axis (measured at about 0.2 stops for the Baader U at 45°). Hoya U-330 and U-340 are the absorptive-glass counterpart, and both are now fitted to Hoya's own official datasheets rather than estimated — which corrected a real underestimate on U-330 specifically. It doesn't just "leak IR like the ZWB family": the real datasheet shows the leak peaking near 50% around 720nm and still sitting at roughly 32% by 1000nm, closer to an IR-pass filter with a UV side-channel than a clean UV bandpass. U-340 is much cleaner, peaking only a couple of percent around 710-720nm — the two are not interchangeable despite the similar naming. The U-360 curve is a different animal again, fitted directly to a published measurement: 70% transmission near 360nm and about 10% infrared leak at 740nm.
All three Hoya 80-series conversion filters are now fit to real Hoya-branded data. This wasn't a straightforward improvement — 80A was originally fit to Kodak's own published table for the Wratten 80A gel (excellent data, 1 percentage point RMS, independently reproduced Kodak's own luminous transmittance figure). Checking that fit against real Hoya-specific measurements turned up a 41.7-point gap: not a data-quality problem, a genuinely different curve shape (Kodak's table holds a broad plateau to ~493nm; real Hoya 80A is already down to half strength by 450nm). Kodak's Wratten 80A gel and Hoya's own 80A glass, sold as equivalent 3200K-to-5500K conversions, turn out not to be identical formulations. Since this entry is explicitly labelled "Hoya 80A," it's now fit to the Hoya-specific data instead — the better-sourced dataset was, in this case, fit to the wrong product. 80B and 80C moved from a stated 9.5-point mean error (digitised off a chart) to 2.6 and 1.3 points respectively, also against real Hoya-branded measurements.
B+W 403 and 094 are Schott glass under a different name, and now fitted as such. 403 is Schott UG1, 094 is comparable to RG1000-class glass; both now use least-squares fits to Schott's own published datasheets (UG1: 1.3 percentage points RMS; RG1000 fit to its own guaranteed spec points) rather than estimates. The UG1 fit confirmed something spectrometer testers had already found qualitatively: B+W 403 has a real, substantial NIR leak peaking near 48% around 750nm, not the soft plateau once assumed — which is why it renders as a near-IR image on a full-spectrum body unless paired with a real IR blocker.
The stacking maths is exact, though: transmittances multiply, which is the same operation used on real measured data. So the qualitative conclusions a stack shows you here — "this combination still leaks IR", "this one doesn't" — are trustworthy even though the absolute numbers are approximations.
Individual filters also genuinely vary between glass melts, so even real measured curves differ slightly from filter to filter of the same type.
For actual measured spectra see photo-spectrum.info (Pedro J. Aphalo, measured on an HP 8453 diode-array spectrophotometer), the filter-test threads at ultravioletphotography.com, CheeseCube312's Filter-Plotter-Data project (MIT-licensed), a large independent dataset of digitised manufacturer charts and product-specific measurements that a good number of the refits above are now fit to directly, B+W's own Filter Handbook (Jos. Schneider Optische Werke GmbH), and Schott's own official datasheet collection — individual PDFs per glass type, each with a full internal-transmittance table and the specific reflection factor needed to convert it to real external transmission.
150 filters now use exact real curves, up from 90 (234 total). The live breakdown is in the bar at the top of this panel — it is computed from the data rather than written here, so it cannot go stale the way this sentence did when a duplicate entry was removed.
The confidence badge now has four tiers, not three. The old split measured how data was STORED, not how good it was: an entry least-squares-fitted to 24 real Kodak table points with 4.1pp error read "FIT", while a curve read by eye off a low-resolution chart image read "REAL" — and at least one case proved the fit was the more trustworthy of the two. Fits with a documented error figure now show it on the badge (FIT 1.6pp), so a 13.3pp hand-read never looks identical to a tight least-squares fit.
Six more filters gained real curves — hyu330 / hyu340 / hyu360 from a multi-filter UV transmittance chart, bw022 from B+W's own 022/040/090/091 chart, tiffen_haze2a digitised from the Kodak Wratten 2/2A density chart (density converted to transmittance), and xb29 / xb30 from Omega's SpectraPlus flyers, with their genuinely rippled passbands traced rather than flattened to an envelope. One correction: w8's by-eye chart read had its whole edge shifted about 10nm early, putting 50% transmission near 480nm instead of 492nm — it now uses Kodak's own published table values directly.
The whole Wratten IR/colour family got the same treatment. Real Kodak sources — a 1928 catalogue's own percentage tables, plus modern "Wratten 2" diffuse-density datasheets — replaced fitted approximations across w8, w9, w12, w15, w16, w21, w22, w23a, w25, w29, w38a, w47, w58, w61, w87, w87c and w89b, and added w47a as a new filter entirely. One real correction came out of it: w29's true 50% point sits at ~620nm, not the ~600nm a coarser reading once suggested — confirmed by two independent real sources agreeing.
Real charts replaced several long-standing unsourced placeholders. Six Hoya IR filters (R76/R80/R83/R85/RM90/RM100) went from flat, undocumented 90% guesses to real digitised curves — RM90 turned out to sit ~20nm from what its name implies, and RM100's real peak is only ~74%, not 90%. Baader and Hoya's UV/IR-Cut filters, six Baader narrowband astronomy filters (H-alpha/SII/OIII, standard and ultra-narrowband), and a new STC Optics IR-pass trio (IRP590/720/850) are now real too. SII turned out to be a genuine doublet (671.7nm and 673.0nm), not the single line this file used to assume.
Cleanup: the database is reorganised by wavelength, not brand. Categories now run short-to-long (UV at the top, NIR at the bottom) with a coloured band indicator, rather than being grouped by manufacturer. Several redundant generic placeholders were removed once a real branded equivalent existed at the same cutoff (ir550/590/630/720/780/850/1000, uvircut, stockir), a duplicate B+W 022 entry and a duplicate Hoya R72 were resolved, and a real crash bug (two filters missing their transmission data entirely) was found and fixed.
Add a filter this database doesn't have. Accepts a two-column TSV/CSV
(wavelength, transmission) or a wide ECOSIS-style CSV (one row per sample, wavelength columns
as headers). Ported from FS FilterLab's import dialog \u2014 stored in this browser only
(localStorage), not sent anywhere, and not shared with anyone else who opens this page.