File size: 4,843 Bytes
b701455
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
import type { GenerationSettings, ImageMetadata, ModelInfo } from '../types';

export function getDefaultModel(models: ModelInfo[]) {
  return models.find((model) => model.name.toLowerCase().includes('dreamshaper')) ?? models[0];
}

function disableUnsupportedCapabilities(
  model: ModelInfo,
  updates: Partial<GenerationSettings>,
): Partial<GenerationSettings> {
  const caps = model.capabilities;

  if (!caps.supports_hires_fix) updates.hiresfix = false;
  if (!caps.supports_img2img) updates.img2img_mode = false;
  if (!caps.supports_controlnet) updates.controlnet_enabled = false;
  if (!caps.supports_stable_fast) updates.stable_fast = false;
  if (!caps.supports_deepcache) updates.deepcache_enabled = false;
  if (!caps.supports_tome) updates.tome_enabled = false;

  return updates;
}

export function getModelSelectionUpdates(
  selectedModel: ModelInfo,
  availableModels: ModelInfo[],
): Partial<GenerationSettings> {
  const updates: Partial<GenerationSettings> = {
    model_path: selectedModel.path,
  };

  if (selectedModel.type === 'Flux2Klein') {
    updates.width = 1024;
    updates.height = 1024;
    updates.sampler = 'euler';
    updates.scheduler = 'simple';
    updates.steps = 4;
    updates.cfg_scale = 1.0;
    updates.refiner_model_path = '';
  } else if (selectedModel.type === 'SDXL') {
    updates.width = 1024;
    updates.height = 1024;
    updates.sampler = 'euler';
    updates.scheduler = 'simple';
    updates.steps = 25;

    const refiner = availableModels.find(
      (model) =>
        model.type === 'SDXL' &&
        (model.name.toLowerCase().includes('refiner') || model.path.toLowerCase().includes('refiner')),
    );

    if (refiner) {
      updates.refiner_model_path = refiner.path;
      updates.refiner_switch_step = 20;
    }
  } else {
    updates.width = 512;
    updates.height = 512;
    updates.sampler = 'dpmpp_2m';
    updates.scheduler = 'karras';
    updates.steps = 20;
    updates.refiner_model_path = '';
  }

  return disableUnsupportedCapabilities(selectedModel, updates);
}

export function getMetadataSettingsUpdates(meta: Partial<ImageMetadata>): Partial<GenerationSettings> {
  const updates: Partial<GenerationSettings> = {};

  if (meta.seed !== undefined) updates.seed = meta.seed;
  if (meta.steps !== undefined) updates.steps = meta.steps;
  if (meta.cfg_scale !== undefined) updates.cfg_scale = meta.cfg_scale;
  if (meta.sampler) updates.sampler = meta.sampler;
  if (meta.scheduler) updates.scheduler = meta.scheduler;
  if (meta.model_path) updates.model_path = meta.model_path;
  if (meta.width) updates.width = meta.width;
  if (meta.height) updates.height = meta.height;
  if (meta.prompt) updates.prompt = meta.prompt;
  if (meta.negative_prompt) updates.negative_prompt = meta.negative_prompt;
  if (meta.denoise !== undefined) updates.img2img_denoise = meta.denoise;
  if (meta.weight_quantization !== undefined) updates.weight_quantization = meta.weight_quantization;
  if (meta.torch_compile !== undefined) updates.torch_compile = meta.torch_compile;
  if (meta.fp8_inference !== undefined) updates.fp8_inference = meta.fp8_inference;

  if (meta.controlnet_enabled !== undefined) updates.controlnet_enabled = meta.controlnet_enabled;
  if (meta.controlnet_model !== undefined) updates.controlnet_model = meta.controlnet_model;
  if (meta.controlnet_strength !== undefined) updates.controlnet_strength = meta.controlnet_strength;
  if (meta.controlnet_type !== undefined) updates.controlnet_type = meta.controlnet_type;
  if (meta.enable_multiscale !== undefined) updates.enable_multiscale = meta.enable_multiscale;
  if (meta.multiscale_preset !== undefined) updates.multiscale_preset = meta.multiscale_preset;
  if (meta.multiscale_factor !== undefined) updates.multiscale_factor = meta.multiscale_factor;
  if (meta.multiscale_fullres_start !== undefined) updates.multiscale_fullres_start = meta.multiscale_fullres_start;
  if (meta.multiscale_fullres_end !== undefined) updates.multiscale_fullres_end = meta.multiscale_fullres_end;
  if (meta.multiscale_intermittent_fullres !== undefined) {
    updates.multiscale_intermittent_fullres = meta.multiscale_intermittent_fullres;
  }
  if (meta.deepcache_enabled !== undefined) updates.deepcache_enabled = meta.deepcache_enabled;
  if (meta.deepcache_interval !== undefined) updates.deepcache_interval = meta.deepcache_interval;
  if (meta.deepcache_depth !== undefined) updates.deepcache_depth = meta.deepcache_depth;
  if (meta.cfg_free_enabled !== undefined) updates.cfg_free_enabled = meta.cfg_free_enabled;
  if (meta.cfg_free_start_percent !== undefined) updates.cfg_free_start_percent = meta.cfg_free_start_percent;
  if (meta.tome_enabled !== undefined) updates.tome_enabled = meta.tome_enabled;
  if (meta.tome_ratio !== undefined) updates.tome_ratio = meta.tome_ratio;

  return updates;
}