From e5a9d5772d7a0b119bbe3e71f00f4c60afdf78e8 Mon Sep 17 00:00:00 2001 From: Sean Sube Date: Mon, 11 Sep 2023 17:36:49 -0500 Subject: [PATCH] feat(gui): add row and column tokens for X/Y prompts --- gui/src/client/utils.ts | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/gui/src/client/utils.ts b/gui/src/client/utils.ts index 6944141c..e771fc8b 100644 --- a/gui/src/client/utils.ts +++ b/gui/src/client/utils.ts @@ -13,6 +13,31 @@ export interface PipelineGrid { rows: PipelineVariable; } +export function replacePromptTokens(grid: PipelineGrid, params: Txt2ImgParams, columnValue: string | number, rowValue: string | number): {prompt: string} { + const result = { + negativePrompt: params.negativePrompt, + prompt: params.prompt, + }; + + if (grid.columns.parameter === 'token') { + result.prompt = result.prompt.replace('__column__', columnValue.toString()); + + if (doesExist(result.negativePrompt)) { + result.negativePrompt = result.negativePrompt.replace('__column__', columnValue.toString()); + } + } + + if (grid.rows.parameter === 'token') { + result.prompt = result.prompt.replace('__row__', rowValue.toString()); + + if (doesExist(result.negativePrompt)) { + result.negativePrompt = result.negativePrompt.replace('__row__', rowValue.toString()); + } + } + + return result; +} + // eslint-disable-next-line max-params export function buildPipelineForTxt2ImgGrid(grid: PipelineGrid, model: ModelParams, params: Txt2ImgParams, upscale?: UpscaleParams, highres?: HighresParams): ChainPipeline { const pipeline: ChainPipeline = { @@ -21,13 +46,16 @@ export function buildPipelineForTxt2ImgGrid(grid: PipelineGrid, model: ModelPara let i = 0; - for (const column of grid.columns.values) { - for (const row of grid.rows.values) { + for (const row of grid.rows.values) { + for (const column of grid.columns.values) { + const prompt = replacePromptTokens(grid, params, column, row); + pipeline.stages.push({ name: `cell-${i}`, type: 'source-txt2img', params: { ...params, + ...prompt, ...model, [grid.columns.parameter]: column, [grid.rows.parameter]: row,