File size: 3,094 Bytes
8a37e0a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import { createMemoizedSelector } from 'app/store/createMemoizedSelector';
import { useAppSelector } from 'app/store/storeHooks';
import { selectConfigSlice } from 'features/system/store/configSlice';
import { isNil } from 'lodash-es';
import { useMemo } from 'react';
import type { MainModelConfig } from 'services/api/types';

const initialStatesSelector = createMemoizedSelector(selectConfigSlice, (config) => {
  const { steps, guidance, scheduler, cfgRescaleMultiplier, vaePrecision, width, height } = config.sd;
  const { guidance: fluxGuidance } = config.flux;

  return {
    initialSteps: steps.initial,
    initialCfg: guidance.initial,
    initialScheduler: scheduler,
    initialCfgRescaleMultiplier: cfgRescaleMultiplier.initial,
    initialVaePrecision: vaePrecision,
    initialWidth: width.initial,
    initialHeight: height.initial,
    initialGuidance: fluxGuidance.initial,
  };
});

export const useMainModelDefaultSettings = (modelConfig: MainModelConfig) => {
  const {
    initialSteps,
    initialCfg,
    initialScheduler,
    initialCfgRescaleMultiplier,
    initialVaePrecision,
    initialWidth,
    initialHeight,
    initialGuidance,
  } = useAppSelector(initialStatesSelector);

  const defaultSettingsDefaults = useMemo(() => {
    return {
      vae: {
        isEnabled: !isNil(modelConfig?.default_settings?.vae),
        value: modelConfig?.default_settings?.vae || 'default',
      },
      vaePrecision: {
        isEnabled: !isNil(modelConfig?.default_settings?.vae_precision),
        value: modelConfig?.default_settings?.vae_precision || initialVaePrecision || 'fp32',
      },
      scheduler: {
        isEnabled: !isNil(modelConfig?.default_settings?.scheduler),
        value: modelConfig?.default_settings?.scheduler || initialScheduler || 'dpmpp_3m_k',
      },
      steps: {
        isEnabled: !isNil(modelConfig?.default_settings?.steps),
        value: modelConfig?.default_settings?.steps || initialSteps,
      },
      cfgScale: {
        isEnabled: !isNil(modelConfig?.default_settings?.cfg_scale),
        value: modelConfig?.default_settings?.cfg_scale || initialCfg,
      },
      cfgRescaleMultiplier: {
        isEnabled: !isNil(modelConfig?.default_settings?.cfg_rescale_multiplier),
        value: modelConfig?.default_settings?.cfg_rescale_multiplier || initialCfgRescaleMultiplier,
      },
      width: {
        isEnabled: !isNil(modelConfig?.default_settings?.width),
        value: modelConfig?.default_settings?.width || initialWidth,
      },
      height: {
        isEnabled: !isNil(modelConfig?.default_settings?.height),
        value: modelConfig?.default_settings?.height || initialHeight,
      },
      guidance: {
        isEnabled: !isNil(modelConfig?.default_settings?.guidance),
        value: modelConfig?.default_settings?.guidance || initialGuidance,
      },
    };
  }, [
    modelConfig,
    initialVaePrecision,
    initialScheduler,
    initialSteps,
    initialCfg,
    initialCfgRescaleMultiplier,
    initialWidth,
    initialHeight,
    initialGuidance,
  ]);

  return defaultSettingsDefaults;
};