Merge branch 'main' into feat/ip-adapter

This commit is contained in:
blessedcoolant
2023-09-16 07:06:46 +12:00
18 changed files with 346 additions and 146 deletions

View File

@ -3,6 +3,7 @@ import { NodesState } from '../store/types';
import { Workflow, zWorkflowEdge, zWorkflowNode } from '../types/types';
import { fromZodError } from 'zod-validation-error';
import { parseify } from 'common/util/serialize';
import i18n from 'i18next';
export const buildWorkflow = (nodesState: NodesState): Workflow => {
const { workflow: workflowMeta, nodes, edges } = nodesState;
@ -20,7 +21,7 @@ export const buildWorkflow = (nodesState: NodesState): Workflow => {
const result = zWorkflowNode.safeParse(node);
if (!result.success) {
const { message } = fromZodError(result.error, {
prefix: 'Unable to parse node',
prefix: i18n.t('nodes.unableToParseNode'),
});
logger('nodes').warn({ node: parseify(node) }, message);
return;
@ -32,7 +33,7 @@ export const buildWorkflow = (nodesState: NodesState): Workflow => {
const result = zWorkflowEdge.safeParse(edge);
if (!result.success) {
const { message } = fromZodError(result.error, {
prefix: 'Unable to parse edge',
prefix: i18n.t('nodes.unableToParseEdge'),
});
logger('nodes').warn({ edge: parseify(edge) }, message);
return;

View File

@ -79,8 +79,8 @@ export const buildCanvasInpaintGraph = (
} = state.generation;
if (!model) {
log.error('No model found in state');
throw new Error('No model found in state');
log.error('No Image found in state');
throw new Error('No Image found in state');
}
// The bounding box determines width and height, not the width and height params

View File

@ -7,6 +7,7 @@ import {
isWorkflowInvocationNode,
} from '../types/types';
import { parseify } from 'common/util/serialize';
import i18n from 'i18next';
export const validateWorkflow = (
workflow: Workflow,
@ -25,8 +26,14 @@ export const validateWorkflow = (
const nodeTemplate = nodeTemplates[node.data.type];
if (!nodeTemplate) {
errors.push({
message: `Node "${node.data.type}" skipped`,
issues: [`Node type "${node.data.type}" does not exist`],
message: `${i18n.t('nodes.node')} "${node.data.type}" ${i18n.t(
'nodes.skipped'
)}`,
issues: [
`${i18n.t('nodes.nodeType')}"${node.data.type}" ${i18n.t(
'nodes.doesNotExist'
)}`,
],
data: node,
});
return;
@ -38,9 +45,13 @@ export const validateWorkflow = (
compareVersions(nodeTemplate.version, node.data.version) !== 0
) {
errors.push({
message: `Node "${node.data.type}" has mismatched version`,
message: `${i18n.t('nodes.node')} "${node.data.type}" ${i18n.t(
'nodes.mismatchedVersion'
)}`,
issues: [
`Node "${node.data.type}" v${node.data.version} may be incompatible with installed v${nodeTemplate.version}`,
`${i18n.t('nodes.node')} "${node.data.type}" v${
node.data.version
} ${i18n.t('nodes.maybeIncompatible')} v${nodeTemplate.version}`,
],
data: { node, nodeTemplate: parseify(nodeTemplate) },
});
@ -52,33 +63,49 @@ export const validateWorkflow = (
const targetNode = keyedNodes[edge.target];
const issues: string[] = [];
if (!sourceNode) {
issues.push(`Output node ${edge.source} does not exist`);
issues.push(
`${i18n.t('nodes.outputNode')} ${edge.source} ${i18n.t(
'nodes.doesNotExist'
)}`
);
} else if (
edge.type === 'default' &&
!(edge.sourceHandle in sourceNode.data.outputs)
) {
issues.push(
`Output field "${edge.source}.${edge.sourceHandle}" does not exist`
`${i18n.t('nodes.outputNodes')} "${edge.source}.${
edge.sourceHandle
}" ${i18n.t('nodes.doesNotExist')}`
);
}
if (!targetNode) {
issues.push(`Input node ${edge.target} does not exist`);
issues.push(
`${i18n.t('nodes.inputNode')} ${edge.target} ${i18n.t(
'nodes.doesNotExist'
)}`
);
} else if (
edge.type === 'default' &&
!(edge.targetHandle in targetNode.data.inputs)
) {
issues.push(
`Input field "${edge.target}.${edge.targetHandle}" does not exist`
`${i18n.t('nodes.inputFeilds')} "${edge.target}.${
edge.targetHandle
}" ${i18n.t('nodes.doesNotExist')}`
);
}
if (!nodeTemplates[sourceNode?.data.type ?? '__UNKNOWN_NODE_TYPE__']) {
issues.push(
`Source node "${edge.source}" missing template "${sourceNode?.data.type}"`
`${i18n.t('nodes.sourceNode')} "${edge.source}" ${i18n.t(
'nodes.missingTemplate'
)} "${sourceNode?.data.type}"`
);
}
if (!nodeTemplates[targetNode?.data.type ?? '__UNKNOWN_NODE_TYPE__']) {
issues.push(
`Source node "${edge.target}" missing template "${targetNode?.data.type}"`
`${i18n.t('nodes.sourceNode')}"${edge.target}" ${i18n.t(
'nodes.missingTemplate'
)} "${targetNode?.data.type}"`
);
}
if (issues.length) {