mirror of
https://github.com/invoke-ai/InvokeAI.git
synced 2026-02-05 01:05:09 -05:00
192 lines
4.3 KiB
TypeScript
192 lines
4.3 KiB
TypeScript
/*
|
|
These functions translate frontend state into parameters
|
|
suitable for consumption by the backend, and vice-versa.
|
|
*/
|
|
|
|
import { NUMPY_RAND_MAX, NUMPY_RAND_MIN } from '../../app/constants';
|
|
import { OptionsState } from '../../features/options/optionsSlice';
|
|
import { SystemState } from '../../features/system/systemSlice';
|
|
|
|
import {
|
|
seedWeightsToString,
|
|
stringToSeedWeightsArray,
|
|
} from './seedWeightPairs';
|
|
import randomInt from './randomInt';
|
|
|
|
export const frontendToBackendParameters = (
|
|
optionsState: OptionsState,
|
|
systemState: SystemState
|
|
): { [key: string]: any } => {
|
|
const {
|
|
prompt,
|
|
iterations,
|
|
steps,
|
|
cfgScale,
|
|
threshold,
|
|
perlin,
|
|
height,
|
|
width,
|
|
sampler,
|
|
seed,
|
|
seamless,
|
|
shouldUseInitImage,
|
|
img2imgStrength,
|
|
initialImagePath,
|
|
maskPath,
|
|
shouldFitToWidthHeight,
|
|
shouldGenerateVariations,
|
|
variationAmount,
|
|
seedWeights,
|
|
shouldRunESRGAN,
|
|
upscalingLevel,
|
|
upscalingStrength,
|
|
shouldRunGFPGAN,
|
|
gfpganStrength,
|
|
shouldRandomizeSeed,
|
|
} = optionsState;
|
|
|
|
const { shouldDisplayInProgress } = systemState;
|
|
|
|
const generationParameters: { [k: string]: any } = {
|
|
prompt,
|
|
iterations,
|
|
steps,
|
|
cfg_scale: cfgScale,
|
|
threshold,
|
|
perlin,
|
|
height,
|
|
width,
|
|
sampler_name: sampler,
|
|
seed,
|
|
seamless,
|
|
progress_images: shouldDisplayInProgress,
|
|
};
|
|
|
|
generationParameters.seed = shouldRandomizeSeed
|
|
? randomInt(NUMPY_RAND_MIN, NUMPY_RAND_MAX)
|
|
: seed;
|
|
|
|
if (shouldUseInitImage) {
|
|
generationParameters.init_img = initialImagePath;
|
|
generationParameters.strength = img2imgStrength;
|
|
generationParameters.fit = shouldFitToWidthHeight;
|
|
if (maskPath) {
|
|
generationParameters.init_mask = maskPath;
|
|
}
|
|
}
|
|
|
|
if (shouldGenerateVariations) {
|
|
generationParameters.variation_amount = variationAmount;
|
|
if (seedWeights) {
|
|
generationParameters.with_variations =
|
|
stringToSeedWeightsArray(seedWeights);
|
|
}
|
|
} else {
|
|
generationParameters.variation_amount = 0;
|
|
}
|
|
|
|
let esrganParameters: false | { [k: string]: any } = false;
|
|
let gfpganParameters: false | { [k: string]: any } = false;
|
|
|
|
if (shouldRunESRGAN) {
|
|
esrganParameters = {
|
|
level: upscalingLevel,
|
|
strength: upscalingStrength,
|
|
};
|
|
}
|
|
|
|
if (shouldRunGFPGAN) {
|
|
gfpganParameters = {
|
|
strength: gfpganStrength,
|
|
};
|
|
}
|
|
|
|
return {
|
|
generationParameters,
|
|
esrganParameters,
|
|
gfpganParameters,
|
|
};
|
|
};
|
|
|
|
export const backendToFrontendParameters = (parameters: {
|
|
[key: string]: any;
|
|
}) => {
|
|
const {
|
|
prompt,
|
|
iterations,
|
|
steps,
|
|
cfg_scale,
|
|
threshold,
|
|
perlin,
|
|
height,
|
|
width,
|
|
sampler_name,
|
|
seed,
|
|
seamless,
|
|
progress_images,
|
|
variation_amount,
|
|
with_variations,
|
|
gfpgan_strength,
|
|
upscale,
|
|
init_img,
|
|
init_mask,
|
|
strength,
|
|
} = parameters;
|
|
|
|
const options: { [key: string]: any } = {
|
|
shouldDisplayInProgress: progress_images,
|
|
// init
|
|
shouldGenerateVariations: false,
|
|
shouldRunESRGAN: false,
|
|
shouldRunGFPGAN: false,
|
|
initialImagePath: '',
|
|
maskPath: '',
|
|
};
|
|
|
|
if (variation_amount > 0) {
|
|
options.shouldGenerateVariations = true;
|
|
options.variationAmount = variation_amount;
|
|
if (with_variations) {
|
|
options.seedWeights = seedWeightsToString(with_variations);
|
|
}
|
|
}
|
|
|
|
if (gfpgan_strength > 0) {
|
|
options.shouldRunGFPGAN = true;
|
|
options.gfpganStrength = gfpgan_strength;
|
|
}
|
|
|
|
if (upscale) {
|
|
options.shouldRunESRGAN = true;
|
|
options.upscalingLevel = upscale[0];
|
|
options.upscalingStrength = upscale[1];
|
|
}
|
|
|
|
if (init_img) {
|
|
options.shouldUseInitImage = true;
|
|
options.initialImagePath = init_img;
|
|
options.strength = strength;
|
|
if (init_mask) {
|
|
options.maskPath = init_mask;
|
|
}
|
|
}
|
|
|
|
// if we had a prompt, add all the metadata, but if we don't have a prompt,
|
|
// we must have only done ESRGAN or GFPGAN so do not add that metadata
|
|
if (prompt) {
|
|
options.prompt = prompt;
|
|
options.iterations = iterations;
|
|
options.steps = steps;
|
|
options.cfgScale = cfg_scale;
|
|
options.threshold = threshold;
|
|
options.perlin = perlin;
|
|
options.height = height;
|
|
options.width = width;
|
|
options.sampler = sampler_name;
|
|
options.seed = seed;
|
|
options.seamless = seamless;
|
|
}
|
|
|
|
return options;
|
|
};
|