L* data
A* data
B* data
logD data
Clear all data?
Wedgie can be installed on your computer or phone so it runs like a native app — no browser toolbar, works offline after the first visit.
Chrome (desktop): Look for the install icon (a monitor with a down-arrow) in the right side of the address bar. Click it and choose “Install”. Alternatively, open the browser menu (⋮) and select “Install Wedgie” or “Install app”.
Safari (macOS): Open the Share menu and select “Add to Dock”.
Safari (iOS / iPadOS): Tap the Share button and select “Add to Home Screen”.
Once installed, the app caches everything locally. Updates are automatic — when a new version is deployed, it will be picked up the next time the app loads while online.
Data is entered in boxes contained in the top row. Use the mouse to click in any of the boxes to make it the active box where data can be entered via the keyboard.
Type a gray %, for instance 2.5, in the first box. Click, then enter the L*, A*, and B* data in the appropriate boxes, then click "add point". The data will be added to the graph. One feature of this widget is that you don't have to have regularly spaced data entries. If you are in a long boring section of your step wedge you can just sample a few points and move on to the areas of the step wedge that seem to exhibit the most tonal compression. Anything you enter will be resampled from your smoothed data entry seen on the screen as a 21-step output, even if you only input, say 9 points!
Only the Gray % and L* are required. You can leave A* and B* empty if you are only concerned with linearizing a step wedge measurement and won't be using the A* and B* data to make an ICC profile for soft proofing.
When entering data in a box it has already been entered, double click the mouse to highlight the entire number and type the new number.
This data entry widget was primarily designed to be used with the ColorMuse 2 colorimeter. However, it can also be used for entering step wedge measurements made with a densitometer. To activate this mode, click the tab at the bottom of the graph window that is labeled "Edit logD". This click will change the mode to densitometer data entry, and the gray % and logD reflectance can be entered in the appropriate boxes. Click "add point" to add this measurement.
This data entry widget allows you to edit any data point that has been entered with a mouse.
Data points that have been entered are a pleasing pink color. When you hover the mouse over this point, it turns blue. Holding down the mouse button on this point turns it a green color, and allows you to move it around - either to correct an entry error or just to smooth the curve. A readout of the gray % and the Y value (either L*, A*, B*, or logD density) will appear and allow you to finely position the point on the graph.
A pale blue line connects all the points, and indicates how any intermediate points between actual data will be written to any of the output file types.
Additional points can be added to the data by double-clicking the mouse at any point in the graph. That point will be added to the data and the spline curve adjusted accordingly.
Below the graph are two dropdown menus — Calculation and Output — followed by a save output button.
The Calculation dropdown selects what kind of data to generate:
The Output dropdown changes depending on the calculation mode:
On browsers that support it (Chrome, Edge), you will be shown a save dialog where you can choose the filename and location. On other browsers the file will download to your default Downloads folder.
When saving an ICC profile, the internal profile description will match whatever filename you choose in the save dialog. This makes it easy to identify the profile later in Photoshop’s Proof Setup or other color management workflows. ICC profiles require L* data; if you only entered density data, switch to LAB mode or load a LAB data file before saving an ICC profile.
When you select either correction mode, a Target curve slider appears. This controls the shape of the ideal L* response that the correction curve will aim for.
At the default center position (1.00), the target is a straight line from paper white to ink black — pure linearization, same as the app has always done. Sliding to the right increases the S-curve shape of the target, which redistributes tones so that highlights and shadows are gently compressed while midtones get more breathing room. This tends to look more natural to the eye, especially for continuous-tone photographic prints. A value around 1.4–1.8 is a good starting point.
Sliding to the left of center (below 1.00) creates a reverse S-curve — expanded highlights and shadows with compressed midtones. This is less common but can be useful for certain high-contrast processes.
Two reference lines appear on the L* graph when the slider is active: a blue dashed line shows the linear target, and a red solid line shows the current S-curve target. Both lines automatically match the L* range of your entered data.
The SCTV neg and SCTV pos options in the Calculation dropdown use Spot Color Tone Value (ISO 20654) to linearize color data. This is the right choice when your step wedge measurements include significant color — for example, cyan, magenta, or any non-neutral ink.
Standard L*-only linearization works well for black and white because perceptual distance is just the difference in lightness. But when A* and B* values are in play, the path through LAB colorspace curves, and straight-line lightness math can’t accurately compute how much ink is on the paper.
SCTV fixes this by converting your LAB data to XYZ space (which weights luminance more heavily), then computing tone value as a percentage of the total distance from paper white to ink solid. The result is perceptually uniform tone spacing for any ink color.
If your data is essentially achromatic (A* and B* close to zero), there’s no benefit — SCTV and L* linearization give the same result. Use the standard neg/pos correction modes instead.
SCTV mode uses the raw LAB triplets from your loaded data file rather than the spline curves, so it works best with data loaded from a file (Load LAB data file button). The Target curve slider and Smoothing slider both work with SCTV corrections.
The Smoothing slider sits above the output controls and is always available regardless of calculation mode. It applies LOWESS (locally weighted scatterplot smoothing) to your L* data before export.
At the default position (0, far left), smoothing is off and your data exports exactly as entered. Sliding to the right progressively smooths out measurement noise and small irregularities that are inevitable with hand-coated photographic materials.
LOWESS is specifically designed to resist the pull of outliers — a single bad reading won’t drag the smoothed curve off course the way a simple moving average would. This makes it well suited for step wedge data where one patch might have a coating defect or a misread.
When the slider is engaged, a green curve appears on the L* graph showing the smoothed result. Your original data points stay put — smoothing only affects the exported output. If you need the raw unsmoothed data, just leave the slider at zero.
The Load LAB data file button (bottom row) lets you import previously saved measurements instead of entering them by hand. Two formats are recognized automatically:
If data has already been entered, loading a file will replace it. The page reloads automatically to clear the graphs before importing the new data.
Below the file save options is a switch that can turn on the option to 'correct' the data being input to normalize the values to those created by the X-Rite i1-Pro series of spectrophotometers.
While both the ColorMuse 2 and the Heiland densitometer yield measurements that are very close to the i1-Pro, there is a slight drift in the values. The ColorMuse reads a little too dark at low L* values, and the Heiland densitometer reads a little too light at higher L* values.
I measured several known step tablets from Kodak and Stouffer's with all three instruments and decided to choose the readings from the i1-Pro as 'ground truth' and calculated a second order error-minimizing function to apply to the input values of the other two instruments that allow them to output essentially the same readings at any given gray percent.
These are very subtle changes, and leaving them turned off will not have any major effect on your results. If you are not using either the ColorMuse 2 or a Heiland reflection densitometer, you should leave this switch off!
Copyright ©2025 Clay Harmon
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
This software uses the clean and elegant canvasSpliner Javascript graphing and spline-fitting library from Jonathan Lurie ©2017. It can be found on Github here. The library has been modified to support the additional needs of this software. This Javascript library is used and adapted under its existing MIT license.