VideoTools/internal/ui/colors.go
Stu Leak 62425537c1 Add semantic color system for containers and codecs
Implements professional color taxonomy based on NLE/broadcast conventions:
- Container colors (MKV teal, MP4 blue, MOV indigo, etc.)
- Video codec colors (AV1 emerald, HEVC lime, H.264 sky blue, etc.)
- Audio codec colors (Opus violet, AAC purple, FLAC magenta, etc.)
- Pixel format colors (yuv420p slate, HDR cyan, etc.)

Helper functions to retrieve colors by format/codec name.
Foundation for color-coded UI badges in Convert module.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-29 01:34:06 -05:00

134 lines
4.0 KiB
Go

package ui
import (
"image/color"
"git.leaktechnologies.dev/stu/VideoTools/internal/utils"
)
// Semantic Color System for VideoTools
// Based on professional NLE and broadcast tooling conventions
// Container / Format Colors (File Wrapper)
var (
ColorMKV = utils.MustHex("#00B3B3") // Teal / Cyan - Neutral, modern, flexible container
ColorMP4 = utils.MustHex("#3B82F6") // Blue - Widely recognised, consumer-friendly
ColorMOV = utils.MustHex("#6366F1") // Indigo - Pro / Apple / QuickTime lineage
ColorAVI = utils.MustHex("#64748B") // Grey-Blue - Legacy container
ColorWEBM = utils.MustHex("#22C55E") // Green-Teal - Web-native
ColorTS = utils.MustHex("#F59E0B") // Amber - Broadcast / transport streams
ColorM2TS = utils.MustHex("#F59E0B") // Amber - Broadcast / transport streams
)
// Video Codec Colors (Compression Method)
// Modern / Efficient Codecs
var (
ColorAV1 = utils.MustHex("#10B981") // Emerald - Modern, efficient
ColorHEVC = utils.MustHex("#84CC16") // Lime-Green - Modern, efficient
ColorH265 = utils.MustHex("#84CC16") // Lime-Green - Same as HEVC
ColorVP9 = utils.MustHex("#22D3EE") // Green-Cyan - Modern, efficient
)
// Established / Legacy Video Codecs
var (
ColorH264 = utils.MustHex("#38BDF8") // Sky Blue - Compatibility
ColorAVC = utils.MustHex("#38BDF8") // Sky Blue - Same as H.264
ColorMPEG2 = utils.MustHex("#EAB308") // Yellow-Amber - Legacy / broadcast
ColorDivX = utils.MustHex("#FB923C") // Muted Orange - Legacy
ColorXviD = utils.MustHex("#FB923C") // Muted Orange - Legacy
ColorMPEG4 = utils.MustHex("#FB923C") // Muted Orange - Legacy
)
// Audio Codec Colors (Secondary but Distinct)
var (
ColorOpus = utils.MustHex("#8B5CF6") // Violet - Modern audio
ColorAAC = utils.MustHex("#7C3AED") // Purple-Blue - Common audio
ColorFLAC = utils.MustHex("#EC4899") // Magenta - Lossless audio
ColorMP3 = utils.MustHex("#F43F5E") // Rose - Legacy audio
ColorAC3 = utils.MustHex("#F97316") // Orange-Red - Surround audio
ColorVorbis = utils.MustHex("#A855F7") // Purple - Open codec
)
// Pixel Format / Colour Data (Technical Metadata)
var (
ColorYUV420P = utils.MustHex("#94A3B8") // Slate - Standard
ColorYUV422P = utils.MustHex("#64748B") // Slate-Blue - Intermediate
ColorYUV444P = utils.MustHex("#475569") // Steel - High quality
ColorHDR = utils.MustHex("#06B6D4") // Cyan-Glow - HDR content
ColorSDR = utils.MustHex("#9CA3AF") // Neutral Grey - SDR content
)
// GetContainerColor returns the semantic color for a container format
func GetContainerColor(format string) color.Color {
switch format {
case "mkv", "matroska":
return ColorMKV
case "mp4", "m4v":
return ColorMP4
case "mov", "quicktime":
return ColorMOV
case "avi":
return ColorAVI
case "webm":
return ColorWEBM
case "ts", "m2ts", "mts":
return ColorTS
default:
return color.RGBA{100, 100, 100, 255} // Default grey
}
}
// GetVideoCodecColor returns the semantic color for a video codec
func GetVideoCodecColor(codec string) color.Color {
switch codec {
case "av1":
return ColorAV1
case "hevc", "h265", "h.265":
return ColorHEVC
case "vp9":
return ColorVP9
case "h264", "avc", "h.264":
return ColorH264
case "mpeg2":
return ColorMPEG2
case "divx", "xvid", "mpeg4":
return ColorDivX
default:
return color.RGBA{100, 100, 100, 255} // Default grey
}
}
// GetAudioCodecColor returns the semantic color for an audio codec
func GetAudioCodecColor(codec string) color.Color {
switch codec {
case "opus":
return ColorOpus
case "aac":
return ColorAAC
case "flac":
return ColorFLAC
case "mp3":
return ColorMP3
case "ac3":
return ColorAC3
case "vorbis":
return ColorVorbis
default:
return color.RGBA{100, 100, 100, 255} // Default grey
}
}
// GetPixelFormatColor returns the semantic color for a pixel format
func GetPixelFormatColor(pixfmt string) color.Color {
switch pixfmt {
case "yuv420p", "yuv420p10le":
return ColorYUV420P
case "yuv422p", "yuv422p10le":
return ColorYUV422P
case "yuv444p", "yuv444p10le":
return ColorYUV444P
default:
return ColorSDR
}
}