Color Analysis
This module provides color analysis and palette management capabilities.
Color Analysis Functions
Color analysis and palette management subsystem.
This package provides comprehensive color handling capabilities including contrast analysis, palette validation, and color space management for QR code generation.
Key Components:
- Color Analysis:
Contrast ratio calculations (WCAG standards)
Luminance calculations
Color parsing from various formats
- Palette Management:
Color palette validation
Multi-color space support
Accessibility compliance checking
The color subsystem handles:
Color contrast validation for scanability
WCAG accessibility compliance
Color space conversions
Palette optimization
Color parsing (hex, rgb, named colors)
Luminance calculations
Example
Basic color analysis:
from segnomms.color import calculate_contrast_ratio, parse_color
dark = parse_color("#1a1a2e")
light = parse_color("#ffffff")
ratio = calculate_contrast_ratio(dark, light)
Palette validation:
from segnomms.color import ColorPalette, ContrastStandard
palette = ColorPalette(
foreground="#1a1a2e",
background="#ffffff",
standard=ContrastStandard.AA_NORMAL
)
is_valid = palette.validate_contrast()
See also
segnomms.color.color_analysis: Color analysis utilities
segnomms.color.palette: Palette management
- segnomms.color.calculate_contrast_ratio(color1, color2)[source]
Calculate WCAG contrast ratio between two colors.
- segnomms.color.calculate_luminance(rgb)[source]
Calculate relative luminance of a color.
Uses the W3C formula for relative luminance calculation.
- segnomms.color.parse_color(color_str)[source]
Parse a color string into RGB components.
Supports: - Hex colors: #RGB, #RRGGBB - RGB function: rgb(r, g, b) - Named colors: black, white, red, green, blue, etc.
- class segnomms.color.PaletteConfig(**data)[source]
Bases:
BaseModelEnhanced palette configuration.
- Parameters:
- get_primary_contrast()[source]
Get contrast analysis for primary dark/light colors.
- Return type:
Optional[ContrastAnalysis]
- model_config: ClassVar[ConfigDict] = {'extra': 'forbid', 'validate_default': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
-
palette_type:
PaletteType
-
color_space:
ColorSpace
- class segnomms.color.PaletteType(*values)[source]
-
Types of color palettes.
- MONOCHROME = 'monochrome'
- COMPLEMENTARY = 'complementary'
- ANALOGOUS = 'analogous'
- TRIADIC = 'triadic'
- CUSTOM = 'custom'
- class segnomms.color.ColorSpace(*values)[source]
-
Supported color spaces for palette validation.
- SRGB = 'sRGB'
- DISPLAY_P3 = 'Display-P3'
- REC2020 = 'Rec.2020'
- class segnomms.color.ContrastStandard(*values)[source]
-
WCAG contrast standards.
- AA_NORMAL = 'AA-normal'
- AA_LARGE = 'AA-large'
- AAA_NORMAL = 'AAA-normal'
- AAA_LARGE = 'AAA-large'
- QR_OPTIMAL = 'QR-optimal'
- class segnomms.color.PaletteValidationResult(**data)[source]
Bases:
BaseModelResult of palette validation.
- Parameters:
- model_config: ClassVar[ConfigDict] = {'extra': 'forbid', 'validate_default': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
Core Functions
- segnomms.color.calculate_contrast_ratio(color1, color2)[source]
Calculate WCAG contrast ratio between two colors.
- segnomms.color.calculate_luminance(rgb)[source]
Calculate relative luminance of a color.
Uses the W3C formula for relative luminance calculation.
- segnomms.color.parse_color(color_str)[source]
Parse a color string into RGB components.
Supports: - Hex colors: #RGB, #RRGGBB - RGB function: rgb(r, g, b) - Named colors: black, white, red, green, blue, etc.
Palette Management
- class segnomms.color.PaletteConfig(**data)[source]
Bases:
BaseModelEnhanced palette configuration.
- Parameters:
- model_config: ClassVar[ConfigDict] = {'extra': 'forbid', 'validate_default': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
-
dark:
str
-
light:
str
-
palette_type:
PaletteType
-
min_contrast_ratio:
float
-
color_space:
ColorSpace
-
enforce_standards:
bool
-
validate_accessibility:
bool
-
allow_similar_colors:
bool
-
max_colors:
int
- classmethod validate_color_format(v)[source]
Validate that color can be parsed.
- classmethod validate_accent_colors(v)[source]
Validate accent colors.
- get_primary_contrast()[source]
Get contrast analysis for primary dark/light colors.
- Return type:
Optional[ContrastAnalysis]
- validate_palette()[source]
Validate the entire palette.
- Return type:
- class segnomms.color.PaletteValidationResult(**data)[source]
Bases:
BaseModelResult of palette validation.
- Parameters:
- model_config: ClassVar[ConfigDict] = {'extra': 'forbid', 'validate_default': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
-
is_valid:
bool
-
primary_contrast:
Optional[ContrastAnalysis]
Color Standards
- class segnomms.color.ContrastStandard(*values)[source]
-
WCAG contrast standards.
- AA_NORMAL = 'AA-normal'
- AA_LARGE = 'AA-large'
- AAA_NORMAL = 'AAA-normal'
- AAA_LARGE = 'AAA-large'
- QR_OPTIMAL = 'QR-optimal'
Example Usage
Color contrast analysis:
from segnomms.color import calculate_contrast_ratio, parse_color
dark = parse_color("#1a1a2e")
light = parse_color("#ffffff")
ratio = calculate_contrast_ratio(dark, light)
print(f"Contrast ratio: {ratio:.2f}:1")
Palette validation:
from segnomms.color import PaletteConfig, ContrastStandard
palette = PaletteConfig(
foreground="#1a1a2e",
background="#ffffff",
standard=ContrastStandard.AA_NORMAL
)
is_valid = palette.validate_contrast()