|
|
@@ -22,6 +22,10 @@ export interface ImageAnalysisResult {
|
|
|
sharpness: number; // 清晰度 0-100
|
|
|
brightness: number; // 亮度 0-100
|
|
|
contrast: number; // 对比度 0-100
|
|
|
+ detailLevel: 'minimal' | 'basic' | 'detailed' | 'ultra_detailed'; // 🔥 内容精细程度
|
|
|
+ pixelDensity: 'low' | 'medium' | 'high' | 'ultra_high'; // 🔥 像素密度等级
|
|
|
+ textureQuality: number; // 🔥 纹理质量 0-100
|
|
|
+ colorDepth: number; // 🔥 色彩深度 0-100
|
|
|
};
|
|
|
|
|
|
// 内容分析
|
|
|
@@ -34,6 +38,8 @@ export interface ImageAnalysisResult {
|
|
|
hasInterior: boolean; // 是否包含室内场景
|
|
|
hasFurniture: boolean; // 是否包含家具
|
|
|
hasLighting: boolean; // 是否有灯光效果
|
|
|
+ hasColor?: boolean; // 🔥 是否有色彩(非纯白、非灰度)
|
|
|
+ hasTexture?: boolean; // 🔥 是否有材质纹理
|
|
|
};
|
|
|
|
|
|
// 技术参数
|
|
|
@@ -235,20 +241,28 @@ export class ImageAnalysisService {
|
|
|
"isArchitectural": "是否为建筑相关(true/false)",
|
|
|
"hasInterior": "是否包含室内场景(true/false)",
|
|
|
"hasFurniture": "是否包含家具(true/false)",
|
|
|
- "hasLighting": "是否有灯光效果(true/false)"
|
|
|
+ "hasLighting": "是否有灯光效果(true/false)",
|
|
|
+ "hasColor": "是否有色彩(非纯白、非灰度)(true/false)",
|
|
|
+ "hasTexture": "是否有材质纹理(true/false)"
|
|
|
}
|
|
|
|
|
|
分类标准:
|
|
|
-- white_model: 白模、线框图、基础建模、结构图
|
|
|
-- soft_decor: 软装搭配、家具配置、装饰品、材质贴图
|
|
|
-- rendering: 渲染图、效果图、光影表现、材质细节
|
|
|
-- post_process: 后期处理、色彩调整、特效、最终成品
|
|
|
+- white_model: 白模、线框图、基础建模、结构图(特征:纯白色或灰色、无色彩、无材质、无家具、无灯光)
|
|
|
+- soft_decor: 软装搭配、家具配置、装饰品、材质贴图(特征:有家具、有色彩、有材质、但灯光不突出)
|
|
|
+- rendering: 渲染图、效果图、光影表现、材质细节(特征:有灯光效果、有色彩、有材质、质量较高)
|
|
|
+- post_process: 后期处理、色彩调整、特效、最终成品(特征:完整场景、精致色彩、专业质量)
|
|
|
+
|
|
|
+重要判断依据:
|
|
|
+1. 如果图片是纯白色或灰色草图,无任何色彩 → 白模
|
|
|
+2. 如果图片有丰富色彩和材质 → 不是白模
|
|
|
+3. 如果图片有灯光效果 → 渲染或后期
|
|
|
+4. 如果图片有家具但无灯光 → 软装
|
|
|
|
|
|
要求:
|
|
|
1. 准确识别图片中的设计元素
|
|
|
-2. 判断图片的制作阶段和用途
|
|
|
-3. 提取关键的视觉特征
|
|
|
-4. 评估图片的专业程度`;
|
|
|
+2. 特别注意图片是否有色彩(区分白模和渲染图的关键)
|
|
|
+3. 判断图片的制作阶段和用途
|
|
|
+4. 提取关键的视觉特征`;
|
|
|
|
|
|
const output = `{
|
|
|
"category": "white_model",
|
|
|
@@ -258,7 +272,9 @@ export class ImageAnalysisService {
|
|
|
"isArchitectural": true,
|
|
|
"hasInterior": true,
|
|
|
"hasFurniture": false,
|
|
|
- "hasLighting": false
|
|
|
+ "hasLighting": false,
|
|
|
+ "hasColor": false,
|
|
|
+ "hasTexture": false
|
|
|
}`;
|
|
|
|
|
|
try {
|
|
|
@@ -302,37 +318,43 @@ export class ImageAnalysisService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 分析图片质量
|
|
|
+ * 🔥 分析图片质量(增强版:包含精细度和像素密度)
|
|
|
*/
|
|
|
private async analyzeImageQuality(
|
|
|
imageUrl: string,
|
|
|
basicInfo: { dimensions: { width: number; height: number } }
|
|
|
): Promise<ImageAnalysisResult['quality']> {
|
|
|
- const prompt = `请分析这张图片的质量,并按以下JSON格式输出:
|
|
|
+ const prompt = `请分析这张室内设计图片的质量,并按以下JSON格式输出:
|
|
|
|
|
|
{
|
|
|
"score": "总体质量分数(0-100)",
|
|
|
"level": "质量等级(low/medium/high/ultra)",
|
|
|
"sharpness": "清晰度(0-100)",
|
|
|
"brightness": "亮度(0-100)",
|
|
|
- "contrast": "对比度(0-100)"
|
|
|
+ "contrast": "对比度(0-100)",
|
|
|
+ "textureQuality": "纹理质量(0-100)",
|
|
|
+ "colorDepth": "色彩深度(0-100)"
|
|
|
}
|
|
|
|
|
|
评估标准:
|
|
|
-- score: 综合质量评分,考虑清晰度、构图、色彩等
|
|
|
+- score: 综合质量评分,考虑清晰度、构图、色彩、纹理等
|
|
|
- level: low(<60分), medium(60-75分), high(75-90分), ultra(>90分)
|
|
|
-- sharpness: 图片清晰度,是否有模糊、噪点
|
|
|
+- sharpness: 图片清晰度,是否有模糊、噪点、锯齿
|
|
|
- brightness: 亮度是否适中,不过暗或过亮
|
|
|
- contrast: 对比度是否合适,层次是否分明
|
|
|
+- textureQuality: 纹理质量,材质细节是否清晰(木纹、布纹、石材等)
|
|
|
+- colorDepth: 色彩深度,色彩过渡是否自然,是否有色带
|
|
|
|
|
|
-请客观评估图片质量,重点关注专业设计图片的标准。`;
|
|
|
+请客观评估图片质量,重点关注专业室内设计图片的标准。`;
|
|
|
|
|
|
const output = `{
|
|
|
"score": 75,
|
|
|
"level": "high",
|
|
|
"sharpness": 80,
|
|
|
"brightness": 70,
|
|
|
- "contrast": 75
|
|
|
+ "contrast": 75,
|
|
|
+ "textureQuality": 75,
|
|
|
+ "colorDepth": 80
|
|
|
}`;
|
|
|
|
|
|
try {
|
|
|
@@ -340,7 +362,7 @@ export class ImageAnalysisService {
|
|
|
prompt,
|
|
|
output,
|
|
|
(content) => {
|
|
|
- console.log('质量分析进度:', content?.length || 0);
|
|
|
+ console.log('🔍 质量分析进度:', content?.length || 0);
|
|
|
},
|
|
|
2,
|
|
|
{
|
|
|
@@ -350,42 +372,162 @@ export class ImageAnalysisService {
|
|
|
}
|
|
|
);
|
|
|
|
|
|
- // 结合图片分辨率进行质量调整
|
|
|
+ // 🔥 结合图片分辨率和像素密度进行质量调整
|
|
|
const resolutionScore = this.calculateResolutionScore(basicInfo.dimensions);
|
|
|
- const adjustedScore = Math.round((result.score + resolutionScore) / 2);
|
|
|
+ const pixelDensity = this.calculatePixelDensity(basicInfo.dimensions);
|
|
|
+
|
|
|
+ // 🔥 评估内容精细程度
|
|
|
+ const detailLevel = await this.evaluateDetailLevel(imageUrl, basicInfo.dimensions);
|
|
|
+
|
|
|
+ // 🔥 综合评分:AI评分(40%) + 分辨率(30%) + 纹理质量(20%) + 色彩深度(10%)
|
|
|
+ const adjustedScore = Math.round(
|
|
|
+ result.score * 0.4 +
|
|
|
+ resolutionScore * 0.3 +
|
|
|
+ (result.textureQuality || 50) * 0.2 +
|
|
|
+ (result.colorDepth || 50) * 0.1
|
|
|
+ );
|
|
|
+
|
|
|
+ console.log('📊 质量分析结果:', {
|
|
|
+ AI评分: result.score,
|
|
|
+ 分辨率评分: resolutionScore,
|
|
|
+ 纹理质量: result.textureQuality,
|
|
|
+ 色彩深度: result.colorDepth,
|
|
|
+ 综合评分: adjustedScore,
|
|
|
+ 像素密度: pixelDensity,
|
|
|
+ 精细程度: detailLevel
|
|
|
+ });
|
|
|
|
|
|
return {
|
|
|
score: adjustedScore,
|
|
|
level: this.getQualityLevel(adjustedScore),
|
|
|
sharpness: result.sharpness || 50,
|
|
|
brightness: result.brightness || 50,
|
|
|
- contrast: result.contrast || 50
|
|
|
+ contrast: result.contrast || 50,
|
|
|
+ detailLevel: detailLevel,
|
|
|
+ pixelDensity: pixelDensity,
|
|
|
+ textureQuality: result.textureQuality || 50,
|
|
|
+ colorDepth: result.colorDepth || 50
|
|
|
};
|
|
|
} catch (error) {
|
|
|
- console.error('质量分析失败:', error);
|
|
|
- // 基于分辨率的基础质量评估
|
|
|
+ console.error('❌ 质量分析失败:', error);
|
|
|
+ // 基于分辨率和像素的备选评估
|
|
|
const resolutionScore = this.calculateResolutionScore(basicInfo.dimensions);
|
|
|
+ const pixelDensity = this.calculatePixelDensity(basicInfo.dimensions);
|
|
|
+ const megapixels = (basicInfo.dimensions.width * basicInfo.dimensions.height) / 1000000;
|
|
|
+
|
|
|
+ // 根据像素推测精细程度
|
|
|
+ let detailLevel: 'minimal' | 'basic' | 'detailed' | 'ultra_detailed' = 'basic';
|
|
|
+ if (megapixels >= 8) detailLevel = 'ultra_detailed';
|
|
|
+ else if (megapixels >= 2) detailLevel = 'detailed';
|
|
|
+ else if (megapixels >= 0.9) detailLevel = 'basic';
|
|
|
+ else detailLevel = 'minimal';
|
|
|
+
|
|
|
return {
|
|
|
score: resolutionScore,
|
|
|
level: this.getQualityLevel(resolutionScore),
|
|
|
sharpness: 50,
|
|
|
brightness: 50,
|
|
|
- contrast: 50
|
|
|
+ contrast: 50,
|
|
|
+ detailLevel: detailLevel,
|
|
|
+ pixelDensity: pixelDensity,
|
|
|
+ textureQuality: resolutionScore * 0.8,
|
|
|
+ colorDepth: resolutionScore * 0.9
|
|
|
};
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 基于分辨率计算质量分数
|
|
|
+ * 🔥 基于分辨率和像素密度计算质量分数(更精细)
|
|
|
*/
|
|
|
private calculateResolutionScore(dimensions: { width: number; height: number }): number {
|
|
|
const totalPixels = dimensions.width * dimensions.height;
|
|
|
+ const megapixels = totalPixels / 1000000;
|
|
|
|
|
|
- if (totalPixels >= 3840 * 2160) return 95; // 4K及以上
|
|
|
- if (totalPixels >= 1920 * 1080) return 85; // 1080p
|
|
|
- if (totalPixels >= 1280 * 720) return 70; // 720p
|
|
|
- if (totalPixels >= 800 * 600) return 55; // 中等分辨率
|
|
|
- return 30; // 低分辨率
|
|
|
+ // 更精细的像素分级
|
|
|
+ if (megapixels >= 33) return 98; // 8K (7680×4320)
|
|
|
+ if (megapixels >= 24) return 96; // 6K (6144×3160)
|
|
|
+ if (megapixels >= 16) return 94; // 5K (5120×2880)
|
|
|
+ if (megapixels >= 8) return 92; // 4K (3840×2160)
|
|
|
+ if (megapixels >= 6) return 88; // 2.5K+ (2560×2304)
|
|
|
+ if (megapixels >= 4) return 84; // QHD+ (2560×1600)
|
|
|
+ if (megapixels >= 2) return 78; // 1080p (1920×1080)
|
|
|
+ if (megapixels >= 1) return 68; // 720p+ (1280×720)
|
|
|
+ if (megapixels >= 0.5) return 55; // 中等分辨率
|
|
|
+ if (megapixels >= 0.3) return 40; // 低分辨率
|
|
|
+ return 25; // 极低分辨率
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 🔥 计算像素密度等级
|
|
|
+ */
|
|
|
+ private calculatePixelDensity(dimensions: { width: number; height: number }): 'low' | 'medium' | 'high' | 'ultra_high' {
|
|
|
+ const totalPixels = dimensions.width * dimensions.height;
|
|
|
+ const megapixels = totalPixels / 1000000;
|
|
|
+
|
|
|
+ if (megapixels >= 8) return 'ultra_high'; // 4K及以上
|
|
|
+ if (megapixels >= 2) return 'high'; // 1080p及以上
|
|
|
+ if (megapixels >= 0.9) return 'medium'; // 720p及以上
|
|
|
+ return 'low'; // 低于720p
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 🔥 评估内容精细程度
|
|
|
+ */
|
|
|
+ private async evaluateDetailLevel(
|
|
|
+ imageUrl: string,
|
|
|
+ dimensions: { width: number; height: number }
|
|
|
+ ): Promise<'minimal' | 'basic' | 'detailed' | 'ultra_detailed'> {
|
|
|
+ const prompt = `请评估这张室内设计图片的内容精细程度,并返回JSON:
|
|
|
+
|
|
|
+{
|
|
|
+ "detailLevel": "精细程度(minimal/basic/detailed/ultra_detailed)",
|
|
|
+ "textureQuality": "纹理质量评分(0-100)",
|
|
|
+ "colorDepth": "色彩深度评分(0-100)",
|
|
|
+ "reasoning": "评估理由"
|
|
|
+}
|
|
|
+
|
|
|
+评估标准:
|
|
|
+- minimal: 极简图,只有基本轮廓,无细节纹理
|
|
|
+- basic: 基础图,有简单纹理和色彩,细节较少
|
|
|
+- detailed: 详细图,有丰富纹理、材质细节、光影效果
|
|
|
+- ultra_detailed: 超精细图,有极致纹理、真实材质、复杂光影、细微细节
|
|
|
+
|
|
|
+重点关注:
|
|
|
+1. 纹理细节(木纹、布纹、石材纹理等)
|
|
|
+2. 材质表现(金属反射、玻璃透明度、布料质感等)
|
|
|
+3. 光影效果(阴影、高光、环境光等)
|
|
|
+4. 细微元素(装饰品细节、边角处理等)`;
|
|
|
+
|
|
|
+ const output = `{
|
|
|
+ "detailLevel": "detailed",
|
|
|
+ "textureQuality": 75,
|
|
|
+ "colorDepth": 80,
|
|
|
+ "reasoning": "图片包含丰富的纹理和材质细节"
|
|
|
+}`;
|
|
|
+
|
|
|
+ try {
|
|
|
+ const result = await this.callCompletionJSON(
|
|
|
+ prompt,
|
|
|
+ output,
|
|
|
+ undefined,
|
|
|
+ 2,
|
|
|
+ {
|
|
|
+ model: this.MODEL,
|
|
|
+ vision: true,
|
|
|
+ images: [imageUrl]
|
|
|
+ }
|
|
|
+ );
|
|
|
+
|
|
|
+ return result.detailLevel || 'basic';
|
|
|
+ } catch (error) {
|
|
|
+ console.error('精细程度评估失败:', error);
|
|
|
+ // 基于分辨率的备选评估
|
|
|
+ const megapixels = (dimensions.width * dimensions.height) / 1000000;
|
|
|
+ if (megapixels >= 8) return 'ultra_detailed';
|
|
|
+ if (megapixels >= 2) return 'detailed';
|
|
|
+ if (megapixels >= 0.9) return 'basic';
|
|
|
+ return 'minimal';
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -408,31 +550,114 @@ export class ImageAnalysisService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 确定建议的阶段分类
|
|
|
+ * 🔥 确定建议的阶段分类(优化版:更精准的判断逻辑)
|
|
|
*/
|
|
|
private determineSuggestedStage(
|
|
|
content: ImageAnalysisResult['content'],
|
|
|
quality: ImageAnalysisResult['quality']
|
|
|
): 'white_model' | 'soft_decor' | 'rendering' | 'post_process' {
|
|
|
// 如果AI已经识别出明确类别且置信度高
|
|
|
- if (content.confidence > 70 && content.category !== 'unknown') {
|
|
|
+ if (content.confidence > 75 && content.category !== 'unknown') {
|
|
|
return content.category as any;
|
|
|
}
|
|
|
|
|
|
- // 基于内容特征判断
|
|
|
- if (!content.hasFurniture && !content.hasLighting) {
|
|
|
+ // 🔥 综合判断:像素密度 + 内容精细度 + 质量分数 + 特征
|
|
|
+ const megapixels = quality.pixelDensity;
|
|
|
+ const detailLevel = quality.detailLevel;
|
|
|
+ const qualityScore = quality.score;
|
|
|
+ const textureQuality = quality.textureQuality;
|
|
|
+
|
|
|
+ console.log('🎯 阶段判断依据:', {
|
|
|
+ 像素密度: megapixels,
|
|
|
+ 精细程度: detailLevel,
|
|
|
+ 质量分数: qualityScore,
|
|
|
+ 纹理质量: textureQuality,
|
|
|
+ 有家具: content.hasFurniture,
|
|
|
+ 有灯光: content.hasLighting,
|
|
|
+ 有色彩: content.hasColor,
|
|
|
+ 有纹理: content.hasTexture
|
|
|
+ });
|
|
|
+
|
|
|
+ // 🔥 白模阶段:放宽条件,更准确识别白色/灰色无渲染的图片
|
|
|
+ // 修复:默认值应该是false(无色彩/无纹理),而不是true
|
|
|
+ const hasColor = content.hasColor === true; // 🔥 修复:只有明确有色彩才为true
|
|
|
+ const hasTexture = content.hasTexture === true; // 🔥 修复:只有明确有纹理才为true
|
|
|
+
|
|
|
+ // 🔥 白模判断:无装饰 + 无灯光 + 低质量 (放宽色彩和纹理条件)
|
|
|
+ if (!content.hasFurniture &&
|
|
|
+ !content.hasLighting &&
|
|
|
+ qualityScore < 65 && // 🔥 放宽质量要求(原60提升到65)
|
|
|
+ !hasColor) { // 🔥 主要看是否有色彩,纹理可以忽略
|
|
|
+ console.log('✅ 判定为白模阶段:无装饰 + 无灯光 + 无色彩 + 低质量');
|
|
|
return 'white_model';
|
|
|
}
|
|
|
|
|
|
- if (content.hasFurniture && !content.hasLighting) {
|
|
|
- return 'soft_decor';
|
|
|
+ // 🔥 如果质量极低且无装饰,也判定为白模
|
|
|
+ if (qualityScore < 50 &&
|
|
|
+ !content.hasFurniture &&
|
|
|
+ !content.hasLighting) {
|
|
|
+ console.log('✅ 判定为白模阶段:极低质量 + 无装饰');
|
|
|
+ return 'white_model';
|
|
|
}
|
|
|
|
|
|
- if (content.hasLighting && quality.score >= 75) {
|
|
|
- return quality.score >= 90 ? 'post_process' : 'rendering';
|
|
|
+ // 🔥 如果有明显色彩或灯光,绝对不是白模
|
|
|
+ if (hasColor || content.hasLighting) {
|
|
|
+ console.log('✅ 有色彩或灯光,不是白模,继续判断其他阶段');
|
|
|
+ }
|
|
|
+
|
|
|
+ // 🔥 软装阶段:有家具 + 无灯光 + 中等质量
|
|
|
+ if (content.hasFurniture && !content.hasLighting &&
|
|
|
+ qualityScore >= 60 && qualityScore < 80) {
|
|
|
+ console.log('✅ 判定为软装阶段:有家具 + 无灯光');
|
|
|
+ return 'soft_decor';
|
|
|
+ }
|
|
|
+
|
|
|
+ // 🔥 渲染阶段:有灯光 + 高质量 + 详细精细度
|
|
|
+ if (content.hasLighting &&
|
|
|
+ (detailLevel === 'detailed' || detailLevel === 'ultra_detailed') &&
|
|
|
+ qualityScore >= 75 && qualityScore < 90) {
|
|
|
+ console.log('✅ 判定为渲染阶段:有灯光 + 高质量 + 详细精细度');
|
|
|
+ return 'rendering';
|
|
|
+ }
|
|
|
+
|
|
|
+ // 🔥 后期处理阶段:超高质量 + 超精细 + 高纹理质量
|
|
|
+ if (qualityScore >= 90 &&
|
|
|
+ detailLevel === 'ultra_detailed' &&
|
|
|
+ textureQuality >= 85 &&
|
|
|
+ (megapixels === 'ultra_high' || megapixels === 'high')) {
|
|
|
+ console.log('✅ 判定为后期处理阶段:超高质量 + 超精细');
|
|
|
+ return 'post_process';
|
|
|
+ }
|
|
|
+
|
|
|
+ // 🔥 渲染阶段:有灯光效果,即使质量不是最高
|
|
|
+ if (content.hasLighting && qualityScore >= 70) {
|
|
|
+ console.log('✅ 判定为渲染阶段:有灯光效果');
|
|
|
+ return 'rendering';
|
|
|
+ }
|
|
|
+
|
|
|
+ // 🔥 软装阶段:有家具但质量一般
|
|
|
+ if (content.hasFurniture && qualityScore >= 60) {
|
|
|
+ console.log('✅ 判定为软装阶段:有家具');
|
|
|
+ return 'soft_decor';
|
|
|
+ }
|
|
|
+
|
|
|
+ // 🔥 默认:根据质量分数判断(优先渲染,避免误判为白模)
|
|
|
+ if (qualityScore >= 85) {
|
|
|
+ console.log('✅ 默认判定为后期处理阶段:高质量');
|
|
|
+ return 'post_process';
|
|
|
+ } else if (qualityScore >= 65) {
|
|
|
+ console.log('✅ 默认判定为渲染阶段:中高质量');
|
|
|
+ return 'rendering';
|
|
|
+ } else if (qualityScore >= 50) {
|
|
|
+ console.log('✅ 默认判定为软装阶段:中等质量');
|
|
|
+ return 'soft_decor';
|
|
|
+ } else if (qualityScore >= 40) {
|
|
|
+ console.log('✅ 默认判定为渲染阶段:低质量但有内容');
|
|
|
+ return 'rendering'; // 🔥 即使质量低,也优先判定为渲染而非白模
|
|
|
+ } else {
|
|
|
+ console.log('⚠️ 默认判定为白模阶段:极低质量');
|
|
|
+ return 'white_model';
|
|
|
}
|
|
|
-
|
|
|
- return 'rendering'; // 默认分类
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -510,7 +735,11 @@ export class ImageAnalysisService {
|
|
|
level: 'low',
|
|
|
sharpness: 0,
|
|
|
brightness: 0,
|
|
|
- contrast: 0
|
|
|
+ contrast: 0,
|
|
|
+ detailLevel: 'minimal',
|
|
|
+ pixelDensity: 'low',
|
|
|
+ textureQuality: 0,
|
|
|
+ colorDepth: 0
|
|
|
},
|
|
|
content: {
|
|
|
category: 'unknown',
|
|
|
@@ -690,7 +919,11 @@ export class ImageAnalysisService {
|
|
|
level: this.getQualityLevel(score),
|
|
|
sharpness: Math.min(score + Math.floor(Math.random() * 10), 100),
|
|
|
brightness: Math.max(score - Math.floor(Math.random() * 10), 50),
|
|
|
- contrast: Math.min(score + Math.floor(Math.random() * 8), 100)
|
|
|
+ contrast: Math.min(score + Math.floor(Math.random() * 8), 100),
|
|
|
+ detailLevel: score >= 90 ? 'ultra_detailed' : score >= 75 ? 'detailed' : score >= 60 ? 'basic' : 'minimal',
|
|
|
+ pixelDensity: score >= 90 ? 'ultra_high' : score >= 75 ? 'high' : score >= 60 ? 'medium' : 'low',
|
|
|
+ textureQuality: Math.min(score + Math.floor(Math.random() * 5), 100),
|
|
|
+ colorDepth: Math.min(score + Math.floor(Math.random() * 5), 100)
|
|
|
},
|
|
|
content: {
|
|
|
category: category,
|