* Test color palette extraction * Fix import * Add hex <> oklch conversions * Add 'hue' storage to photos * Consolidate color modules * Add chromatic config, track missing color data * Bump deps * Fix lens text test * Finalize color storage * Refactor color imports * Hide form color data when disabled * Store all average oklch color components * Finalize color-config language * Optimize photo syncing for color data * Only update color data when syncing if possible * Build out all color sorts * Debug image colors * Improve color debugging * Improve color logging * Simplify color sorting * Bump deps * Fix color sync logic * Switch to sort params: ascending, descending * Fix commandk sort menu * Update tr-tr sorting language * Add color capture to all photo extractions * Add color visualization to photo form * Standardize photo update language * Create global debug color update function * Improve color data capture logging * Update maximum function duration for admin photos * Add note to remove maxDuration * Use AI to generate sorting color * Conditionally use AI to analyze colors * Manage AI color analysis batched requests * Fix color reporting in admin photo table * Only update color where AI fields are missing * Temporarily upgrade admin/photos timeout * Fix pro-based max duration * Standardize color sorting foundations * Update color sorting language * Refactor color calculations * Restore max duration time * Update color-based sort menu labels * Finalize color documentation * Clean up color test actions * Round color sort values before submitting to db * Consolidate color server actions
44 lines
981 B
TypeScript
44 lines
981 B
TypeScript
export interface Oklch {
|
|
l: number
|
|
c: number
|
|
h: number
|
|
}
|
|
|
|
export interface PhotoColorData {
|
|
ai?: Oklch
|
|
average: Oklch
|
|
colors: Oklch[]
|
|
}
|
|
|
|
export const convertJsonStringToOklch = (jsonString = '') => {
|
|
const matches = jsonString
|
|
.match(/`*{ *l: *([0-9\.]+), *c: *([0-9\.]+), *h: *([0-9\.]+) *}`*/);
|
|
if (matches &&
|
|
matches[1] &&
|
|
matches[2] &&
|
|
matches[3]
|
|
) {
|
|
return {
|
|
l: parseFloat(matches[1]),
|
|
c: parseFloat(matches[2]),
|
|
h: parseInt(matches[3]),
|
|
} as Oklch;
|
|
}
|
|
};
|
|
|
|
export const convertOklchToCss = (oklch: Oklch) =>
|
|
`oklch(${oklch.l} ${oklch.c} ${oklch.h})`;
|
|
|
|
export const logOklch = (oklch: Oklch) =>
|
|
`L:${oklch.l.toFixed(2)} C:${oklch.c.toFixed(2)} H:${oklch.h.toFixed(2)}`;
|
|
|
|
export const generateColorDataFromString = (colorData?: string) => {
|
|
if (colorData) {
|
|
try {
|
|
return JSON.parse(colorData) as PhotoColorData;
|
|
} catch (error) {
|
|
console.log('Error parsing color data', error);
|
|
}
|
|
}
|
|
};
|