HSV to HSL Converter
Convert HSV color values to HSL without doing the math by hand. This converter is helpful when you receive colors from a picker or API in HSV but want to reason about them or store them as HSL in your design system.
Type a color in HSV format and the matching HSL triplet will appear instantly. You can adjust hue, saturation, and value interactively and then copy the resulting HSL value into CSS, tokens, or documentation.
On this page you will also find a short overview of HSV and HSL, a clear description of the conversion algorithm, a step-by-step walkthrough, a reference table, and answers to common questions about using both models together.
What Is HSV
HSV stands for Hue, Saturation, and Value. It describes colors using a hue angle on the color wheel, how intense that hue is, and how bright the result appears relative to black.
Hue ranges from 0 to 360 degrees. Saturation and value are percentages from 0% to 100%. A low saturation value produces more muted and grayish tones, while a low value makes the color darker and closer to black.
Because of this layout, HSV is common in painting software and color pickers. It lets users think in terms of "how strong" and "how bright" a color feels without touching individual RGB channels.
What Is HSL
HSL stands for Hue, Saturation, and Lightness. It uses the same idea of a hue angle but replaces value with lightness, which measures how close the color is to black or white.
Hue in HSL is also written in degrees from 0 to 360. Saturation and lightness are percentages from 0% to 100%. At 0% lightness the color is black, at 100% it is white, and at 50% it has a mid level brightness.
This makes HSL a comfortable format for building themes and palettes. Designers can keep hue fixed for a brand color and change lightness and saturation to create coherent states and depth levels.
HSV to HSL Conversion Formula
hsv(h, s_v, v) -> hsl(h, s_l, l)
Given:
h in [0, 360)
s_v in [0, 100] // HSV saturation
v in [0, 100] // value
1) Normalize HSV values:
s_v' = s_v / 100
v' = v / 100
2) Convert HSV to RGB (intermediate step):
a) Compute chroma:
c = v' * s_v'
b) Helper value:
x = c * (1 - |((h / 60) mod 2) - 1|)
c) Temporary triple based on hue sector:
if 0 <= h < 60 then (r1, g1, b1) = (c, x, 0)
else if 60 <= h < 120 then (r1, g1, b1) = (x, c, 0)
else if 120 <= h < 180 then (r1, g1, b1) = (0, c, x)
else if 180 <= h < 240 then (r1, g1, b1) = (0, x, c)
else if 240 <= h < 300 then (r1, g1, b1) = (x, 0, c)
else (r1, g1, b1) = (c, 0, x)
d) Add the offset:
m = v' - c
r' = r1 + m
g' = g1 + m
b' = b1 + m
3) Convert RGB to HSL:
a) Find max and min:
max = max(r', g', b')
min = min(r', g', b')
delta = max - min
b) Lightness:
l = (max + min) / 2
c) HSL saturation:
if delta == 0 then s_l' = 0
else s_l' = delta / (1 - |2 * l - 1|)
4) Convert to final units:
H = h
S_l = s_l' * 100
L = l * 100In this algorithm the hue angle is preserved. The converter temporarily expresses the HSV color as RGB and then computes lightness and a new saturation from those RGB values to obtain an HSL triplet.
Example for hsv(196, 59%, 76%)
1) Normalize s_v and v to the [0, 1] range
2) Compute c, x, m and derive r', g', b'
3) Find max, min, and delta for RGB
4) Compute l and s_l using the HSL rules
5) Rounded result (one possible approximation):
hsl(196, 49%, 54%)How HSV to HSL Conversion Works Step by Step
Conceptually, converting from HSV to HSL is about describing the same point in color space with a different set of axes. Hue stays the same, while saturation and the third value are reinterpreted in terms of lightness instead of value.
hsv(210, 57%, 24%)
-> rgb(r, g, b)
-> hsl(h, s, l)Here is a simplified walk through for hsv(210, 57%, 24%).
- Step 1 - Interpret HSV as RGB
Normalize saturation and value, compute chroma and the helper value, select a temporary triple based on the hue sector, and add the offset. This produces three normalized RGB channels.
s_v' = 0.57 v' = 0.24 rgb(26, 43, 60) after rounding - Step 2 - Derive HSL parameters from RGB
Use the maximum and minimum channel values to compute lightness and to measure how far the color is from gray. That spread becomes the new saturation in HSL space.
max = max(r', g', b') min = min(r', g', b') l = (max + min) / 2 if delta == 0 then s_l = 0 else s_l = delta / (1 - |2 * l - 1|) - Step 3 - Express the result as hsl(h, s, l)
Keep the original hue angle, but replace HSV saturation and value with the new saturation and lightness. The color on screen stays the same; only the notation changes.
hsl(210, 39%, 17%)
The same logic works for any valid HSV value, which is why a converter or utility function is usually a better choice than hand calculations.
When to Use HSV and When to Use HSL
HSV and HSL share the same hue dimension but differ in how they represent brightness and intensity. Each model can be more convenient in different parts of a workflow.
Where HSV Is Handy
- Color pickers and painting tools: value and saturation sliders are intuitive when people adjust colors visually.
- Working with brightness focused UIs: some interfaces think in terms of "how bright" a color is rather than how close it is to black and white.
- Quick exploration: changing value often gives fast feedback when searching for lighter or darker variants of a hue.
Where HSL Fits Better
- Designing structured palettes: lightness provides a predictable way to build tints and shades.
- Writing design specs: HSL values like
hsl(210, 40%, 20%)are easy to read in documentation and code. - Coordinating light and dark themes: adjusting lightness ranges while keeping hue stable helps maintain a consistent feel.
Summary
Use HSV for interactive adjustments and tools that focus on value. Prefer HSL for design tokens, palettes, and documentation where lightness based control is more intuitive.
Practical Tips for Using HSV and HSL Together
It is common to use both HSV and HSL in a single project. A small amount of planning can make these models work together instead of competing.
Separate Editing and Storage
- Experiment in HSV: adjust hue, saturation, and value until the color feels right in a picker.
- Store tokens in HSL: keep the final values in HSL where they are easier to read, tweak, and document.
Combine With Other Formats
- Convert through RGB when needed: many libraries already implement HSV to RGB and RGB to HSL, so you can compose them instead of writing custom math.
- Use HSLA or RGBA for transparency: keep base colors in HSL or RGB and add alpha only where you actually need semi transparent overlays.
Keep Formats Consistent
- Define clear rules per layer: for example, HSV in pickers, HSL in tokens, RGB or HEX in final CSS.
- Avoid mixing models randomly: consistent use of formats makes future refactors and theme changes easier to manage.
With a deliberate split between where HSV and HSL are used, you can take advantage of both models without adding confusion to your codebase.
HSV to HSL Conversion Table
The table below shows several familiar colors described in both HSV and HSL. Values are rounded to keep them easy to scan, so rely on the converter above when you need exact numbers.
| Description | HSV | HSL |
|---|---|---|
| White | hsv(0, 0%, 100%) | hsl(0, 0%, 100%) |
| Black | hsv(0, 0%, 0%) | hsl(0, 0%, 0%) |
| Red | hsv(0, 100%, 100%) | hsl(0, 100%, 50%) |
| Green | hsv(120, 100%, 100%) | hsl(120, 100%, 50%) |
| Blue | hsv(240, 100%, 100%) | hsl(240, 100%, 50%) |
| Yellow | hsv(60, 100%, 100%) | hsl(60, 100%, 50%) |
| Cyan | hsv(180, 100%, 100%) | hsl(180, 100%, 50%) |
| Magenta | hsv(300, 100%, 100%) | hsl(300, 100%, 50%) |
| Gray 1 | hsv(0, 0%, 7%) | hsl(0, 0%, 7%) |
| Gray 2 | hsv(0, 0%, 20%) | hsl(0, 0%, 20%) |
| Gray 3 | hsv(0, 0%, 33%) | hsl(0, 0%, 33%) |
| Gray 4 | hsv(0, 0%, 47%) | hsl(0, 0%, 47%) |
| Gray 5 | hsv(0, 0%, 60%) | hsl(0, 0%, 60%) |
| Gray 6 | hsv(0, 0%, 80%) | hsl(0, 0%, 80%) |
| Orange | hsv(39, 100%, 100%) | hsl(39, 100%, 50%) |
| Purple | hsv(300, 100%, 50%) | hsl(300, 100%, 25%) |
| Teal | hsv(180, 100%, 50%) | hsl(180, 100%, 25%) |
For any other HSV color you can use the converter at the top of the page to obtain the corresponding HSL value using the standard algorithm.
FAQ: HSV to HSL
- Why would I convert HSV to HSL
Many tools expose HSV controls, while your tokens and documentation might use HSL. Conversion lets you design with one model and store or share colors with another without changing their appearance.
- Do HSV and HSL describe different colors
No. They are just different coordinate systems for the same RGB based color space. Any valid HSV color has a matching HSL representation and vice versa.
- Does the hue stay the same when converting
In the standard algorithms the hue angle is preserved. What changes are the saturation and the third value, which are recalculated according to the rules of each model.
- Can I go back from HSL to HSV without losing data
Yes. Moving between HSV and HSL through RGB is reversible up to rounding. As long as values are clamped correctly, the visual color remains the same.
- Is one model better than the other for all cases
Not really. HSV is often more convenient in pickers and painting tools, while HSL tends to be clearer for design tokens, palettes, and written specs. It is normal to use both in the same project with clear conversion rules.
Related Converters:
HEX to HSL Converter
Instantly calculate hex to hslHEX to HSV Converter
Instantly calculate hex to hsvRGB to HSL Converter
Instantly calculate rgb to hslRGB to HSV Converter
Instantly calculate rgb to hsvHSL to HSV Converter
Instantly calculate hsl to hsvHSV to RGB Converter
Instantly calculate hsv to rgb