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>
This commit is contained in:
parent
6413082365
commit
62425537c1
133
internal/ui/colors.go
Normal file
133
internal/ui/colors.go
Normal file
|
|
@ -0,0 +1,133 @@
|
|||
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
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user