mirror of
https://github.com/invoke-ai/InvokeAI
synced 2024-08-30 20:32:17 +00:00
Hires Addition
Updated ImageMetaDataViewer with correct values Updated tooltip text Add arguments for Hires & Seamless Metadata
This commit is contained in:
committed by
blessedcoolant
parent
057fc95aa3
commit
7e33560010
@ -723,6 +723,7 @@ class InvokeAIWebServer:
|
|||||||
'height',
|
'height',
|
||||||
'extra',
|
'extra',
|
||||||
'seamless',
|
'seamless',
|
||||||
|
'hires_fix',
|
||||||
]
|
]
|
||||||
|
|
||||||
rfc_dict = {}
|
rfc_dict = {}
|
||||||
|
@ -36,6 +36,8 @@ def parameters_to_command(params):
|
|||||||
switches.append(f'-A {params["sampler_name"]}')
|
switches.append(f'-A {params["sampler_name"]}')
|
||||||
if "seamless" in params and params["seamless"] == True:
|
if "seamless" in params and params["seamless"] == True:
|
||||||
switches.append(f"--seamless")
|
switches.append(f"--seamless")
|
||||||
|
if "hires_fix" in params and params["hires_fix"] == True:
|
||||||
|
switches.append(f"--hires")
|
||||||
if "init_img" in params and len(params["init_img"]) > 0:
|
if "init_img" in params and len(params["init_img"]) > 0:
|
||||||
switches.append(f'-I {params["init_img"]}')
|
switches.append(f'-I {params["init_img"]}')
|
||||||
if "init_mask" in params and len(params["init_mask"]) > 0:
|
if "init_mask" in params and len(params["init_mask"]) > 0:
|
||||||
|
@ -493,6 +493,7 @@ def parameters_to_generated_image_metadata(parameters):
|
|||||||
"height",
|
"height",
|
||||||
"extra",
|
"extra",
|
||||||
"seamless",
|
"seamless",
|
||||||
|
"hires_fix",
|
||||||
]
|
]
|
||||||
|
|
||||||
rfc_dict = {}
|
rfc_dict = {}
|
||||||
|
483
frontend/dist/assets/index.560edd47.js
vendored
Normal file
483
frontend/dist/assets/index.560edd47.js
vendored
Normal file
File diff suppressed because one or more lines are too long
483
frontend/dist/assets/index.989a0ca2.js
vendored
483
frontend/dist/assets/index.989a0ca2.js
vendored
File diff suppressed because one or more lines are too long
2
frontend/dist/index.html
vendored
2
frontend/dist/index.html
vendored
@ -6,7 +6,7 @@
|
|||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>InvokeAI - A Stable Diffusion Toolkit</title>
|
<title>InvokeAI - A Stable Diffusion Toolkit</title>
|
||||||
<link rel="shortcut icon" type="icon" href="/assets/favicon.0d253ced.ico" />
|
<link rel="shortcut icon" type="icon" href="/assets/favicon.0d253ced.ico" />
|
||||||
<script type="module" crossorigin src="/assets/index.989a0ca2.js"></script>
|
<script type="module" crossorigin src="/assets/index.560edd47.js"></script>
|
||||||
<link rel="stylesheet" href="/assets/index.58175ea1.css">
|
<link rel="stylesheet" href="/assets/index.58175ea1.css">
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
|
@ -50,6 +50,7 @@ export const PARAMETERS: { [key: string]: string } = {
|
|||||||
maskPath: 'Initial Image Mask',
|
maskPath: 'Initial Image Mask',
|
||||||
shouldFitToWidthHeight: 'Fit Initial Image',
|
shouldFitToWidthHeight: 'Fit Initial Image',
|
||||||
seamless: 'Seamless Tiling',
|
seamless: 'Seamless Tiling',
|
||||||
|
hiresFix: 'High Resolution Optimizations',
|
||||||
};
|
};
|
||||||
|
|
||||||
export const NUMPY_RAND_MIN = 0;
|
export const NUMPY_RAND_MIN = 0;
|
||||||
|
@ -14,10 +14,13 @@ export enum Feature {
|
|||||||
FACE_CORRECTION,
|
FACE_CORRECTION,
|
||||||
IMAGE_TO_IMAGE,
|
IMAGE_TO_IMAGE,
|
||||||
}
|
}
|
||||||
|
/** For each tooltip in the UI, the below feature definitions & props will pull relevant information into the tooltip.
|
||||||
|
*
|
||||||
|
* To-do: href & GuideImages are placeholders, and are not currently utilized, but will be updated (along with the tooltip UI) as feature and UI development and we get a better idea on where things "forever homes" will be .
|
||||||
|
*/
|
||||||
export const FEATURES: Record<Feature, FeatureHelpInfo> = {
|
export const FEATURES: Record<Feature, FeatureHelpInfo> = {
|
||||||
[Feature.PROMPT]: {
|
[Feature.PROMPT]: {
|
||||||
text: 'This field will take all prompt text, including both content and stylistic terms. CLI Commands will not work in the prompt.',
|
text: 'This field will take all prompt text, including both content and stylistic terms. While weights can be included in the prompt, standard CLI Commands/parameters will not work.',
|
||||||
href: 'link/to/docs/feature3.html',
|
href: 'link/to/docs/feature3.html',
|
||||||
guideImage: 'asset/path.gif',
|
guideImage: 'asset/path.gif',
|
||||||
},
|
},
|
||||||
@ -27,17 +30,16 @@ export const FEATURES: Record<Feature, FeatureHelpInfo> = {
|
|||||||
guideImage: 'asset/path.gif',
|
guideImage: 'asset/path.gif',
|
||||||
},
|
},
|
||||||
[Feature.OTHER]: {
|
[Feature.OTHER]: {
|
||||||
text: 'Additional Options',
|
text: 'These options will enable alternative processing modes for Invoke. Seamless tiling will work to generate repeating patterns in the output. High Resolution Optimization performs a two-step generation cycle, and should be used at higher resolutions when you desire a more coherent image/composition. ', href: 'link/to/docs/feature3.html',
|
||||||
href: 'link/to/docs/feature3.html',
|
|
||||||
guideImage: 'asset/path.gif',
|
guideImage: 'asset/path.gif',
|
||||||
},
|
},
|
||||||
[Feature.SEED]: {
|
[Feature.SEED]: {
|
||||||
text: 'Seed values provide an initial set of noise which guide the denoising process.',
|
text: 'Seed values provide an initial set of noise which guide the denoising process, and can be randomized or populated with a seed from a previous invocation. The Threshold feature can be used to mitigate undesirable outcomes at higher CFG values (try between 0-10), and Perlin can be used to add Perlin noise into the denoising process - Both serve to add variation to your outputs. ',
|
||||||
href: 'link/to/docs/feature3.html',
|
href: 'link/to/docs/feature3.html',
|
||||||
guideImage: 'asset/path.gif',
|
guideImage: 'asset/path.gif',
|
||||||
},
|
},
|
||||||
[Feature.VARIATIONS]: {
|
[Feature.VARIATIONS]: {
|
||||||
text: 'Try a variation with an amount of between 0 and 1 to change the output image for the set seed.',
|
text: 'Try a variation with an amount of between 0 and 1 to change the output image for the set seed - Interesting variations on the seed are found between 0.1 and 0.3.',
|
||||||
href: 'link/to/docs/feature3.html',
|
href: 'link/to/docs/feature3.html',
|
||||||
guideImage: 'asset/path.gif',
|
guideImage: 'asset/path.gif',
|
||||||
},
|
},
|
||||||
@ -47,8 +49,8 @@ export const FEATURES: Record<Feature, FeatureHelpInfo> = {
|
|||||||
guideImage: 'asset/path.gif',
|
guideImage: 'asset/path.gif',
|
||||||
},
|
},
|
||||||
[Feature.FACE_CORRECTION]: {
|
[Feature.FACE_CORRECTION]: {
|
||||||
text: 'Using GFPGAN or CodeFormer, Face Correction will attempt to identify faces in outputs, and correct any defects/abnormalities. Higher values will apply a stronger corrective pressure on outputs.',
|
text: 'Using GFPGAN, Face Correction will attempt to identify faces in outputs, and correct any defects/abnormalities. Higher values will apply a stronger corrective pressure on outputs, resulting in more appealing faces (with less respect for accuracy of the original subject).',
|
||||||
href: 'link/to/docs/feature2.html',
|
href: 'link/to/docs/feature3.html',
|
||||||
guideImage: 'asset/path.gif',
|
guideImage: 'asset/path.gif',
|
||||||
},
|
},
|
||||||
[Feature.IMAGE_TO_IMAGE]: {
|
[Feature.IMAGE_TO_IMAGE]: {
|
||||||
|
1
frontend/src/app/invokeai.d.ts
vendored
1
frontend/src/app/invokeai.d.ts
vendored
@ -55,6 +55,7 @@ export declare type CommonGeneratedImageMetadata = {
|
|||||||
width: number;
|
width: number;
|
||||||
height: number;
|
height: number;
|
||||||
seamless: boolean;
|
seamless: boolean;
|
||||||
|
hires_fix: boolean;
|
||||||
extra: null | Record<string, never>; // Pending development of RFC #266
|
extra: null | Record<string, never>; // Pending development of RFC #266
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -29,6 +29,7 @@ export const frontendToBackendParameters = (
|
|||||||
sampler,
|
sampler,
|
||||||
seed,
|
seed,
|
||||||
seamless,
|
seamless,
|
||||||
|
hiresFix,
|
||||||
shouldUseInitImage,
|
shouldUseInitImage,
|
||||||
img2imgStrength,
|
img2imgStrength,
|
||||||
initialImagePath,
|
initialImagePath,
|
||||||
@ -59,6 +60,7 @@ export const frontendToBackendParameters = (
|
|||||||
sampler_name: sampler,
|
sampler_name: sampler,
|
||||||
seed,
|
seed,
|
||||||
seamless,
|
seamless,
|
||||||
|
hires_fix: hiresFix,
|
||||||
progress_images: shouldDisplayInProgress,
|
progress_images: shouldDisplayInProgress,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -123,6 +125,7 @@ export const backendToFrontendParameters = (parameters: {
|
|||||||
sampler_name,
|
sampler_name,
|
||||||
seed,
|
seed,
|
||||||
seamless,
|
seamless,
|
||||||
|
hires_fix,
|
||||||
progress_images,
|
progress_images,
|
||||||
variation_amount,
|
variation_amount,
|
||||||
with_variations,
|
with_variations,
|
||||||
@ -185,6 +188,7 @@ export const backendToFrontendParameters = (parameters: {
|
|||||||
options.sampler = sampler_name;
|
options.sampler = sampler_name;
|
||||||
options.seed = seed;
|
options.seed = seed;
|
||||||
options.seamless = seamless;
|
options.seamless = seamless;
|
||||||
|
options.hiresFix = hires_fix;
|
||||||
}
|
}
|
||||||
|
|
||||||
return options;
|
return options;
|
||||||
|
@ -16,11 +16,13 @@ import {
|
|||||||
setCfgScale,
|
setCfgScale,
|
||||||
setGfpganStrength,
|
setGfpganStrength,
|
||||||
setHeight,
|
setHeight,
|
||||||
|
setHiresFix,
|
||||||
setImg2imgStrength,
|
setImg2imgStrength,
|
||||||
setInitialImagePath,
|
setInitialImagePath,
|
||||||
setMaskPath,
|
setMaskPath,
|
||||||
setPrompt,
|
setPrompt,
|
||||||
setSampler,
|
setSampler,
|
||||||
|
setSeamless,
|
||||||
setSeed,
|
setSeed,
|
||||||
setSeedWeights,
|
setSeedWeights,
|
||||||
setShouldFitToWidthHeight,
|
setShouldFitToWidthHeight,
|
||||||
@ -116,6 +118,7 @@ const ImageMetadataViewer = memo(
|
|||||||
steps,
|
steps,
|
||||||
cfg_scale,
|
cfg_scale,
|
||||||
seamless,
|
seamless,
|
||||||
|
hires_fix,
|
||||||
width,
|
width,
|
||||||
height,
|
height,
|
||||||
strength,
|
strength,
|
||||||
@ -214,7 +217,14 @@ const ImageMetadataViewer = memo(
|
|||||||
<MetadataItem
|
<MetadataItem
|
||||||
label="Seamless"
|
label="Seamless"
|
||||||
value={seamless}
|
value={seamless}
|
||||||
onClick={() => dispatch(setWidth(seamless))}
|
onClick={() => dispatch(setSeamless(seamless))}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
{hires_fix && (
|
||||||
|
<MetadataItem
|
||||||
|
label="High Resolution Optimization"
|
||||||
|
value={hires_fix}
|
||||||
|
onClick={() => dispatch(setHiresFix(hires_fix))}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
{width && (
|
{width && (
|
||||||
|
32
frontend/src/features/options/HiresOptions.tsx
Normal file
32
frontend/src/features/options/HiresOptions.tsx
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
import { Flex } from '@chakra-ui/react';
|
||||||
|
import { RootState } from '../../app/store';
|
||||||
|
import { useAppDispatch, useAppSelector } from '../../app/store';
|
||||||
|
import { setHiresFix } from './optionsSlice';
|
||||||
|
import { ChangeEvent } from 'react';
|
||||||
|
import IAISwitch from '../../common/components/IAISwitch';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Image output options. Includes width, height, seamless tiling.
|
||||||
|
*/
|
||||||
|
const HiresOptions = () => {
|
||||||
|
const dispatch = useAppDispatch();
|
||||||
|
|
||||||
|
const hiresFix = useAppSelector((state: RootState) => state.options.hiresFix);
|
||||||
|
|
||||||
|
const handleChangeHiresFix = (e: ChangeEvent<HTMLInputElement>) =>
|
||||||
|
dispatch(setHiresFix(e.target.checked));
|
||||||
|
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Flex gap={2} direction={'column'}>
|
||||||
|
<IAISwitch
|
||||||
|
label="High Res Optimization"
|
||||||
|
fontSize={'md'}
|
||||||
|
isChecked={hiresFix}
|
||||||
|
onChange={handleChangeHiresFix}
|
||||||
|
/>
|
||||||
|
</Flex>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default HiresOptions;
|
@ -1,29 +1,14 @@
|
|||||||
import { Flex } from '@chakra-ui/react';
|
import { Flex } from '@chakra-ui/react';
|
||||||
import { RootState } from '../../app/store';
|
|
||||||
import { useAppDispatch, useAppSelector } from '../../app/store';
|
|
||||||
import { setSeamless } from './optionsSlice';
|
|
||||||
import { ChangeEvent } from 'react';
|
|
||||||
import IAISwitch from '../../common/components/IAISwitch';
|
|
||||||
|
|
||||||
/**
|
import HiresOptions from './HiresOptions';
|
||||||
* Image output options. Includes width, height, seamless tiling.
|
import SeamlessOptions from './SeamlessOptions';
|
||||||
*/
|
|
||||||
const OutputOptions = () => {
|
const OutputOptions = () => {
|
||||||
const dispatch = useAppDispatch();
|
|
||||||
|
|
||||||
const seamless = useAppSelector((state: RootState) => state.options.seamless);
|
|
||||||
|
|
||||||
const handleChangeSeamless = (e: ChangeEvent<HTMLInputElement>) =>
|
|
||||||
dispatch(setSeamless(e.target.checked));
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Flex gap={2} direction={'column'}>
|
<Flex gap={2} direction={'column'}>
|
||||||
<IAISwitch
|
<SeamlessOptions />
|
||||||
label="Seamless tiling"
|
<HiresOptions />
|
||||||
fontSize={'md'}
|
|
||||||
isChecked={seamless}
|
|
||||||
onChange={handleChangeSeamless}
|
|
||||||
/>
|
|
||||||
</Flex>
|
</Flex>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
28
frontend/src/features/options/SeamlessOptions.tsx
Normal file
28
frontend/src/features/options/SeamlessOptions.tsx
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
import { Flex } from '@chakra-ui/react';
|
||||||
|
import { RootState } from '../../app/store';
|
||||||
|
import { useAppDispatch, useAppSelector } from '../../app/store';
|
||||||
|
import { setSeamless } from './optionsSlice';
|
||||||
|
import { ChangeEvent } from 'react';
|
||||||
|
import IAISwitch from '../../common/components/IAISwitch';
|
||||||
|
|
||||||
|
const SeamlessOptions = () => {
|
||||||
|
const dispatch = useAppDispatch();
|
||||||
|
|
||||||
|
const seamless = useAppSelector((state: RootState) => state.options.seamless);
|
||||||
|
|
||||||
|
const handleChangeSeamless = (e: ChangeEvent<HTMLInputElement>) =>
|
||||||
|
dispatch(setSeamless(e.target.checked));
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Flex gap={2} direction={'column'}>
|
||||||
|
<IAISwitch
|
||||||
|
label="Seamless tiling"
|
||||||
|
fontSize={'md'}
|
||||||
|
isChecked={seamless}
|
||||||
|
onChange={handleChangeSeamless}
|
||||||
|
/>
|
||||||
|
</Flex>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default SeamlessOptions;
|
@ -25,6 +25,7 @@ export interface OptionsState {
|
|||||||
initialImagePath: string | null;
|
initialImagePath: string | null;
|
||||||
maskPath: string;
|
maskPath: string;
|
||||||
seamless: boolean;
|
seamless: boolean;
|
||||||
|
hiresFix: boolean;
|
||||||
shouldFitToWidthHeight: boolean;
|
shouldFitToWidthHeight: boolean;
|
||||||
shouldGenerateVariations: boolean;
|
shouldGenerateVariations: boolean;
|
||||||
variationAmount: number;
|
variationAmount: number;
|
||||||
@ -50,6 +51,7 @@ const initialOptionsState: OptionsState = {
|
|||||||
perlin: 0,
|
perlin: 0,
|
||||||
seed: 0,
|
seed: 0,
|
||||||
seamless: false,
|
seamless: false,
|
||||||
|
hiresFix: false,
|
||||||
shouldUseInitImage: false,
|
shouldUseInitImage: false,
|
||||||
img2imgStrength: 0.75,
|
img2imgStrength: 0.75,
|
||||||
initialImagePath: null,
|
initialImagePath: null,
|
||||||
@ -138,6 +140,9 @@ export const optionsSlice = createSlice({
|
|||||||
setSeamless: (state, action: PayloadAction<boolean>) => {
|
setSeamless: (state, action: PayloadAction<boolean>) => {
|
||||||
state.seamless = action.payload;
|
state.seamless = action.payload;
|
||||||
},
|
},
|
||||||
|
setHiresFix: (state, action: PayloadAction<boolean>) => {
|
||||||
|
state.hiresFix = action.payload;
|
||||||
|
},
|
||||||
setShouldFitToWidthHeight: (state, action: PayloadAction<boolean>) => {
|
setShouldFitToWidthHeight: (state, action: PayloadAction<boolean>) => {
|
||||||
state.shouldFitToWidthHeight = action.payload;
|
state.shouldFitToWidthHeight = action.payload;
|
||||||
},
|
},
|
||||||
@ -180,6 +185,7 @@ export const optionsSlice = createSlice({
|
|||||||
threshold,
|
threshold,
|
||||||
perlin,
|
perlin,
|
||||||
seamless,
|
seamless,
|
||||||
|
hires_fix,
|
||||||
width,
|
width,
|
||||||
height,
|
height,
|
||||||
strength,
|
strength,
|
||||||
@ -256,6 +262,7 @@ export const optionsSlice = createSlice({
|
|||||||
if (perlin) state.perlin = perlin;
|
if (perlin) state.perlin = perlin;
|
||||||
if (typeof perlin === 'undefined') state.perlin = 0;
|
if (typeof perlin === 'undefined') state.perlin = 0;
|
||||||
if (typeof seamless === 'boolean') state.seamless = seamless;
|
if (typeof seamless === 'boolean') state.seamless = seamless;
|
||||||
|
if (typeof hires_fix === 'boolean') state.hiresFix = hires_fix;
|
||||||
if (width) state.width = width;
|
if (width) state.width = width;
|
||||||
if (height) state.height = height;
|
if (height) state.height = height;
|
||||||
},
|
},
|
||||||
@ -301,6 +308,7 @@ export const {
|
|||||||
setSampler,
|
setSampler,
|
||||||
setSeed,
|
setSeed,
|
||||||
setSeamless,
|
setSeamless,
|
||||||
|
setHiresFix,
|
||||||
setImg2imgStrength,
|
setImg2imgStrength,
|
||||||
setGfpganStrength,
|
setGfpganStrength,
|
||||||
setUpscalingLevel,
|
setUpscalingLevel,
|
||||||
|
@ -155,6 +155,7 @@ class Generate:
|
|||||||
self.precision = precision
|
self.precision = precision
|
||||||
self.strength = 0.75
|
self.strength = 0.75
|
||||||
self.seamless = False
|
self.seamless = False
|
||||||
|
self.hires_fix = False
|
||||||
self.embedding_path = embedding_path
|
self.embedding_path = embedding_path
|
||||||
self.model = None # empty for now
|
self.model = None # empty for now
|
||||||
self.sampler = None
|
self.sampler = None
|
||||||
@ -270,6 +271,7 @@ class Generate:
|
|||||||
height // height of image, in multiples of 64 (512)
|
height // height of image, in multiples of 64 (512)
|
||||||
cfg_scale // how strongly the prompt influences the image (7.5) (must be >1)
|
cfg_scale // how strongly the prompt influences the image (7.5) (must be >1)
|
||||||
seamless // whether the generated image should tile
|
seamless // whether the generated image should tile
|
||||||
|
hires_fix // whether the Hires Fix should be applied during generation
|
||||||
init_img // path to an initial image
|
init_img // path to an initial image
|
||||||
strength // strength for noising/unnoising init_img. 0.0 preserves image exactly, 1.0 replaces it completely
|
strength // strength for noising/unnoising init_img. 0.0 preserves image exactly, 1.0 replaces it completely
|
||||||
gfpgan_strength // strength for GFPGAN. 0.0 preserves image exactly, 1.0 replaces it completely
|
gfpgan_strength // strength for GFPGAN. 0.0 preserves image exactly, 1.0 replaces it completely
|
||||||
@ -303,6 +305,7 @@ class Generate:
|
|||||||
width = width or self.width
|
width = width or self.width
|
||||||
height = height or self.height
|
height = height or self.height
|
||||||
seamless = seamless or self.seamless
|
seamless = seamless or self.seamless
|
||||||
|
hires_fix = hires_fix or self.hires_fix
|
||||||
cfg_scale = cfg_scale or self.cfg_scale
|
cfg_scale = cfg_scale or self.cfg_scale
|
||||||
ddim_eta = ddim_eta or self.ddim_eta
|
ddim_eta = ddim_eta or self.ddim_eta
|
||||||
iterations = iterations or self.iterations
|
iterations = iterations or self.iterations
|
||||||
|
@ -37,6 +37,7 @@ def build_opt(post_data, seed, gfpgan_model_exists):
|
|||||||
setattr(opt, 'seed', None if int(post_data['seed']) == -1 else int(post_data['seed']))
|
setattr(opt, 'seed', None if int(post_data['seed']) == -1 else int(post_data['seed']))
|
||||||
setattr(opt, 'threshold', float(post_data['threshold']))
|
setattr(opt, 'threshold', float(post_data['threshold']))
|
||||||
setattr(opt, 'perlin', float(post_data['perlin']))
|
setattr(opt, 'perlin', float(post_data['perlin']))
|
||||||
|
setattr(opt, 'hires_fix', 'hires_fix' in post_data)
|
||||||
setattr(opt, 'variation_amount', float(post_data['variation_amount']) if int(post_data['seed']) != -1 else 0)
|
setattr(opt, 'variation_amount', float(post_data['variation_amount']) if int(post_data['seed']) != -1 else 0)
|
||||||
setattr(opt, 'with_variations', [])
|
setattr(opt, 'with_variations', [])
|
||||||
setattr(opt, 'embiggen', None)
|
setattr(opt, 'embiggen', None)
|
||||||
|
@ -35,6 +35,7 @@ class DreamBase():
|
|||||||
perlin: float = 0.0
|
perlin: float = 0.0
|
||||||
sampler_name: string = 'klms'
|
sampler_name: string = 'klms'
|
||||||
seamless: bool = False
|
seamless: bool = False
|
||||||
|
hires_fix: bool = False
|
||||||
model: str = None # The model to use (currently unused)
|
model: str = None # The model to use (currently unused)
|
||||||
embeddings = None # The embeddings to use (currently unused)
|
embeddings = None # The embeddings to use (currently unused)
|
||||||
progress_images: bool = False
|
progress_images: bool = False
|
||||||
@ -91,6 +92,7 @@ class DreamBase():
|
|||||||
# model: str = None # The model to use (currently unused)
|
# model: str = None # The model to use (currently unused)
|
||||||
# embeddings = None # The embeddings to use (currently unused)
|
# embeddings = None # The embeddings to use (currently unused)
|
||||||
self.seamless = 'seamless' in j
|
self.seamless = 'seamless' in j
|
||||||
|
self.hires_fix = 'hires_fix' in j
|
||||||
self.progress_images = 'progress_images' in j
|
self.progress_images = 'progress_images' in j
|
||||||
|
|
||||||
# GFPGAN
|
# GFPGAN
|
||||||
|
@ -375,6 +375,7 @@ class GeneratorService:
|
|||||||
upscale = upscale,
|
upscale = upscale,
|
||||||
sampler_name = jobRequest.sampler_name,
|
sampler_name = jobRequest.sampler_name,
|
||||||
seamless = jobRequest.seamless,
|
seamless = jobRequest.seamless,
|
||||||
|
hires_fix = jobRequest.hires_fix,
|
||||||
embiggen = jobRequest.embiggen,
|
embiggen = jobRequest.embiggen,
|
||||||
embiggen_tiles = jobRequest.embiggen_tiles,
|
embiggen_tiles = jobRequest.embiggen_tiles,
|
||||||
step_callback = lambda sample, step: self.__on_progress(jobRequest, sample, step),
|
step_callback = lambda sample, step: self.__on_progress(jobRequest, sample, step),
|
||||||
|
Reference in New Issue
Block a user