mirror of
https://github.com/invoke-ai/InvokeAI
synced 2024-08-30 20:32:17 +00:00
fix(ui): fix metadata parsing of older images
The metadata parsing was overly strict, not taking into account the shape of old metadata. Relaxed the schemas. Also fixed a misspelling.
This commit is contained in:
parent
6f6d920686
commit
89b724d222
@ -72,10 +72,10 @@ class CoreMetadata(BaseModelExcludeNull):
|
|||||||
)
|
)
|
||||||
refiner_steps: Optional[int] = Field(default=None, description="The number of steps used for the refiner")
|
refiner_steps: Optional[int] = Field(default=None, description="The number of steps used for the refiner")
|
||||||
refiner_scheduler: Optional[str] = Field(default=None, description="The scheduler used for the refiner")
|
refiner_scheduler: Optional[str] = Field(default=None, description="The scheduler used for the refiner")
|
||||||
refiner_positive_aesthetic_store: Optional[float] = Field(
|
refiner_positive_aesthetic_score: Optional[float] = Field(
|
||||||
default=None, description="The aesthetic score used for the refiner"
|
default=None, description="The aesthetic score used for the refiner"
|
||||||
)
|
)
|
||||||
refiner_negative_aesthetic_store: Optional[float] = Field(
|
refiner_negative_aesthetic_score: Optional[float] = Field(
|
||||||
default=None, description="The aesthetic score used for the refiner"
|
default=None, description="The aesthetic score used for the refiner"
|
||||||
)
|
)
|
||||||
refiner_start: Optional[float] = Field(default=None, description="The start value used for refiner denoising")
|
refiner_start: Optional[float] = Field(default=None, description="The start value used for refiner denoising")
|
||||||
@ -160,11 +160,11 @@ class MetadataAccumulatorInvocation(BaseInvocation):
|
|||||||
default=None,
|
default=None,
|
||||||
description="The scheduler used for the refiner",
|
description="The scheduler used for the refiner",
|
||||||
)
|
)
|
||||||
refiner_positive_aesthetic_store: Optional[float] = InputField(
|
refiner_positive_aesthetic_score: Optional[float] = InputField(
|
||||||
default=None,
|
default=None,
|
||||||
description="The aesthetic score used for the refiner",
|
description="The aesthetic score used for the refiner",
|
||||||
)
|
)
|
||||||
refiner_negative_aesthetic_store: Optional[float] = InputField(
|
refiner_negative_aesthetic_score: Optional[float] = InputField(
|
||||||
default=None,
|
default=None,
|
||||||
description="The aesthetic score used for the refiner",
|
description="The aesthetic score used for the refiner",
|
||||||
)
|
)
|
||||||
|
@ -101,13 +101,15 @@ const ImageMetadataActions = (props: Props) => {
|
|||||||
onClick={handleRecallSeed}
|
onClick={handleRecallSeed}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
{metadata.model !== undefined && metadata.model !== null && (
|
{metadata.model !== undefined &&
|
||||||
<ImageMetadataItem
|
metadata.model !== null &&
|
||||||
label="Model"
|
metadata.model.model_name && (
|
||||||
value={metadata.model.model_name}
|
<ImageMetadataItem
|
||||||
onClick={handleRecallModel}
|
label="Model"
|
||||||
/>
|
value={metadata.model.model_name}
|
||||||
)}
|
onClick={handleRecallModel}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
{metadata.width && (
|
{metadata.width && (
|
||||||
<ImageMetadataItem
|
<ImageMetadataItem
|
||||||
label="Width"
|
label="Width"
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
import {
|
import {
|
||||||
SchedulerParam,
|
SchedulerParam,
|
||||||
zBaseModel,
|
zBaseModel,
|
||||||
|
zMainModel,
|
||||||
zMainOrOnnxModel,
|
zMainOrOnnxModel,
|
||||||
|
zOnnxModel,
|
||||||
zSDXLRefinerModel,
|
zSDXLRefinerModel,
|
||||||
zScheduler,
|
zScheduler,
|
||||||
} from 'features/parameters/types/parameterSchemas';
|
} from 'features/parameters/types/parameterSchemas';
|
||||||
@ -769,12 +771,14 @@ export const zCoreMetadata = z
|
|||||||
steps: z.number().int().nullish(),
|
steps: z.number().int().nullish(),
|
||||||
scheduler: z.string().nullish(),
|
scheduler: z.string().nullish(),
|
||||||
clip_skip: z.number().int().nullish(),
|
clip_skip: z.number().int().nullish(),
|
||||||
model: zMainOrOnnxModel.nullish(),
|
model: z
|
||||||
controlnets: z.array(zControlField).nullish(),
|
.union([zMainModel.deepPartial(), zOnnxModel.deepPartial()])
|
||||||
|
.nullish(),
|
||||||
|
controlnets: z.array(zControlField.deepPartial()).nullish(),
|
||||||
loras: z
|
loras: z
|
||||||
.array(
|
.array(
|
||||||
z.object({
|
z.object({
|
||||||
lora: zLoRAModelField,
|
lora: zLoRAModelField.deepPartial(),
|
||||||
weight: z.number(),
|
weight: z.number(),
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
@ -784,15 +788,15 @@ export const zCoreMetadata = z
|
|||||||
init_image: z.string().nullish(),
|
init_image: z.string().nullish(),
|
||||||
positive_style_prompt: z.string().nullish(),
|
positive_style_prompt: z.string().nullish(),
|
||||||
negative_style_prompt: z.string().nullish(),
|
negative_style_prompt: z.string().nullish(),
|
||||||
refiner_model: zSDXLRefinerModel.nullish(),
|
refiner_model: zSDXLRefinerModel.deepPartial().nullish(),
|
||||||
refiner_cfg_scale: z.number().nullish(),
|
refiner_cfg_scale: z.number().nullish(),
|
||||||
refiner_steps: z.number().int().nullish(),
|
refiner_steps: z.number().int().nullish(),
|
||||||
refiner_scheduler: z.string().nullish(),
|
refiner_scheduler: z.string().nullish(),
|
||||||
refiner_positive_aesthetic_store: z.number().nullish(),
|
refiner_positive_aesthetic_score: z.number().nullish(),
|
||||||
refiner_negative_aesthetic_store: z.number().nullish(),
|
refiner_negative_aesthetic_score: z.number().nullish(),
|
||||||
refiner_start: z.number().nullish(),
|
refiner_start: z.number().nullish(),
|
||||||
})
|
})
|
||||||
.catchall(z.record(z.any()));
|
.passthrough();
|
||||||
|
|
||||||
export type CoreMetadata = z.infer<typeof zCoreMetadata>;
|
export type CoreMetadata = z.infer<typeof zCoreMetadata>;
|
||||||
|
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
import * as png from '@stevebel/png';
|
import * as png from '@stevebel/png';
|
||||||
|
import { logger } from 'app/logging/logger';
|
||||||
|
import { parseify } from 'common/util/serialize';
|
||||||
import {
|
import {
|
||||||
ImageMetadataAndWorkflow,
|
ImageMetadataAndWorkflow,
|
||||||
zCoreMetadata,
|
zCoreMetadata,
|
||||||
@ -18,6 +20,11 @@ export const getMetadataAndWorkflowFromImageBlob = async (
|
|||||||
const metadataResult = zCoreMetadata.safeParse(JSON.parse(rawMetadata));
|
const metadataResult = zCoreMetadata.safeParse(JSON.parse(rawMetadata));
|
||||||
if (metadataResult.success) {
|
if (metadataResult.success) {
|
||||||
data.metadata = metadataResult.data;
|
data.metadata = metadataResult.data;
|
||||||
|
} else {
|
||||||
|
logger('system').error(
|
||||||
|
{ error: parseify(metadataResult.error) },
|
||||||
|
'Problem reading metadata from image'
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -26,6 +33,11 @@ export const getMetadataAndWorkflowFromImageBlob = async (
|
|||||||
const workflowResult = zWorkflow.safeParse(JSON.parse(rawWorkflow));
|
const workflowResult = zWorkflow.safeParse(JSON.parse(rawWorkflow));
|
||||||
if (workflowResult.success) {
|
if (workflowResult.success) {
|
||||||
data.workflow = workflowResult.data;
|
data.workflow = workflowResult.data;
|
||||||
|
} else {
|
||||||
|
logger('system').error(
|
||||||
|
{ error: parseify(workflowResult.error) },
|
||||||
|
'Problem reading workflow from image'
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -60,9 +60,9 @@ export const addSDXLRefinerToGraph = (
|
|||||||
|
|
||||||
if (metadataAccumulator) {
|
if (metadataAccumulator) {
|
||||||
metadataAccumulator.refiner_model = refinerModel;
|
metadataAccumulator.refiner_model = refinerModel;
|
||||||
metadataAccumulator.refiner_positive_aesthetic_store =
|
metadataAccumulator.refiner_positive_aesthetic_score =
|
||||||
refinerPositiveAestheticScore;
|
refinerPositiveAestheticScore;
|
||||||
metadataAccumulator.refiner_negative_aesthetic_store =
|
metadataAccumulator.refiner_negative_aesthetic_score =
|
||||||
refinerNegativeAestheticScore;
|
refinerNegativeAestheticScore;
|
||||||
metadataAccumulator.refiner_cfg_scale = refinerCFGScale;
|
metadataAccumulator.refiner_cfg_scale = refinerCFGScale;
|
||||||
metadataAccumulator.refiner_scheduler = refinerScheduler;
|
metadataAccumulator.refiner_scheduler = refinerScheduler;
|
||||||
|
@ -341,8 +341,8 @@ export const useRecallParameters = () => {
|
|||||||
refiner_cfg_scale,
|
refiner_cfg_scale,
|
||||||
refiner_steps,
|
refiner_steps,
|
||||||
refiner_scheduler,
|
refiner_scheduler,
|
||||||
refiner_positive_aesthetic_store,
|
refiner_positive_aesthetic_score,
|
||||||
refiner_negative_aesthetic_store,
|
refiner_negative_aesthetic_score,
|
||||||
refiner_start,
|
refiner_start,
|
||||||
} = metadata;
|
} = metadata;
|
||||||
|
|
||||||
@ -403,21 +403,21 @@ export const useRecallParameters = () => {
|
|||||||
|
|
||||||
if (
|
if (
|
||||||
isValidSDXLRefinerPositiveAestheticScore(
|
isValidSDXLRefinerPositiveAestheticScore(
|
||||||
refiner_positive_aesthetic_store
|
refiner_positive_aesthetic_score
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
dispatch(
|
dispatch(
|
||||||
setRefinerPositiveAestheticScore(refiner_positive_aesthetic_store)
|
setRefinerPositiveAestheticScore(refiner_positive_aesthetic_score)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (
|
if (
|
||||||
isValidSDXLRefinerNegativeAestheticScore(
|
isValidSDXLRefinerNegativeAestheticScore(
|
||||||
refiner_negative_aesthetic_store
|
refiner_negative_aesthetic_score
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
dispatch(
|
dispatch(
|
||||||
setRefinerNegativeAestheticScore(refiner_negative_aesthetic_store)
|
setRefinerNegativeAestheticScore(refiner_negative_aesthetic_score)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user