[object Object]

← back to Wallco Ai

Fix 3 v2: add MakeCircularVAE — UNet-only patch left VAE re-introducing seams

c89f6136911eaa855ce640f098f2452edead4d51 · 2026-05-26 09:39:27 -0700 · Steve Abrams

Files touched

Diff

commit c89f6136911eaa855ce640f098f2452edead4d51
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Tue May 26 09:39:27 2026 -0700

    Fix 3 v2: add MakeCircularVAE — UNet-only patch left VAE re-introducing seams
---
 scripts/generate_designs.js | 29 +++++++++++++++++++----------
 1 file changed, 19 insertions(+), 10 deletions(-)

diff --git a/scripts/generate_designs.js b/scripts/generate_designs.js
index 13bccdb..6e4f115 100644
--- a/scripts/generate_designs.js
+++ b/scripts/generate_designs.js
@@ -312,14 +312,20 @@ function genComfy(prompt, seed, outPath, meta) {
   const STEPS = parseInt(process.env.COMFY_STEPS || '30', 10);
   const SWITCH = Math.round(STEPS * 0.8);   // base → refiner handoff at 80%
 
-  // 2026-05-26 — SeamlessTile node wraps the model with circular Conv2D padding
-  // so SDXL produces truly tileable output. Conditional on TILE_CATEGORIES because
-  // figure-on-ground categories (drunk-animals, designer-bugs) shouldn't have
-  // the figure wrap around the tile edge. Requires spinagon/ComfyUI-seamless-tiling
-  // installed on the target ComfyUI (Mac1 commit 9225ed5d).
+  // 2026-05-26 — SeamlessTile + MakeCircularVAE for truly tileable output.
+  // SeamlessTile patches the UNet's Conv2D padding to circular → seamless LATENTS.
+  // MakeCircularVAE patches the VAE decoder the same way → seamless PIXELS.
+  // BOTH are required — patching just the UNet leaves seam-introducing decoder.
+  // First Fix-3 attempt shipped only SeamlessTile (commit d91f84ab); seam scores
+  // didn't improve because the VAE re-introduced seams. This adds the VAE patch.
+  // Conditional on TILE_CATEGORIES because figure-on-ground categories
+  // (drunk-animals, designer-bugs) shouldn't have the figure wrap around edges.
+  // Requires spinagon/ComfyUI-seamless-tiling on target ComfyUI (Mac1 9225ed5d).
   const tileable = !!(meta && TILE_CATEGORIES.has(meta.category));
   const BASE_MODEL_REF  = tileable ? ['1000', 0] : ['4',  0];
   const REFINER_MODEL_REF = tileable ? ['1001', 0] : ['15', 0];
+  const BASE_VAE_REF    = tileable ? ['2000', 0] : ['4',  2];
+  const REFINER_VAE_REF = tileable ? ['2001', 0] : ['15', 2];
 
   let workflow;
   if (REFINER) {
@@ -333,12 +339,14 @@ function genComfy(prompt, seed, outPath, meta) {
       '17': { class_type: 'CLIPTextEncode', inputs: { text: negativePrompt, clip: ['15', 1] } },
       '10': { class_type: 'KSamplerAdvanced', inputs: { add_noise: 'enable', noise_seed: seed, steps: STEPS, cfg: 8.5, sampler_name: 'dpmpp_2m_sde', scheduler: 'karras', start_at_step: 0, end_at_step: SWITCH, return_with_leftover_noise: 'enable', model: BASE_MODEL_REF, positive: ['6', 0], negative: ['7', 0], latent_image: ['5', 0] } },
       '11': { class_type: 'KSamplerAdvanced', inputs: { add_noise: 'disable', noise_seed: seed, steps: STEPS, cfg: 8.5, sampler_name: 'dpmpp_2m_sde', scheduler: 'karras', start_at_step: SWITCH, end_at_step: 10000, return_with_leftover_noise: 'disable', model: REFINER_MODEL_REF, positive: ['16', 0], negative: ['17', 0], latent_image: ['10', 0] } },
-      '8':  { class_type: 'VAEDecode', inputs: { samples: ['11', 0], vae: ['15', 2] } },
+      '8':  { class_type: 'VAEDecode', inputs: { samples: ['11', 0], vae: REFINER_VAE_REF } },
       '9':  { class_type: 'SaveImage', inputs: { filename_prefix: `wallco_${seed}`, images: ['8', 0] } }
     };
     if (tileable) {
-      workflow['1000'] = { class_type: 'SeamlessTile', inputs: { model: ['4',  0], tiling: 'enable', copy_model: 'Make a copy' } };
-      workflow['1001'] = { class_type: 'SeamlessTile', inputs: { model: ['15', 0], tiling: 'enable', copy_model: 'Make a copy' } };
+      workflow['1000'] = { class_type: 'SeamlessTile',    inputs: { model: ['4',  0], tiling: 'enable', copy_model: 'Make a copy' } };
+      workflow['1001'] = { class_type: 'SeamlessTile',    inputs: { model: ['15', 0], tiling: 'enable', copy_model: 'Make a copy' } };
+      workflow['2000'] = { class_type: 'MakeCircularVAE', inputs: { vae:   ['4',  2], tiling: 'enable', copy_vae:   'Make a copy' } };
+      workflow['2001'] = { class_type: 'MakeCircularVAE', inputs: { vae:   ['15', 2], tiling: 'enable', copy_vae:   'Make a copy' } };
     }
   } else {
     workflow = {
@@ -347,11 +355,12 @@ function genComfy(prompt, seed, outPath, meta) {
       '5': { class_type: 'EmptyLatentImage', inputs: { width: WIDTH, height: HEIGHT, batch_size: 1 } },
       '6': { class_type: 'CLIPTextEncode', inputs: { text: positivePrompt, clip: ['4', 1] } },
       '7': { class_type: 'CLIPTextEncode', inputs: { text: negativePrompt, clip: ['4', 1] } },
-      '8': { class_type: 'VAEDecode', inputs: { samples: ['3', 0], vae: ['4', 2] } },
+      '8': { class_type: 'VAEDecode', inputs: { samples: ['3', 0], vae: BASE_VAE_REF } },
       '9': { class_type: 'SaveImage', inputs: { filename_prefix: `wallco_${seed}`, images: ['8', 0] } }
     };
     if (tileable) {
-      workflow['1000'] = { class_type: 'SeamlessTile', inputs: { model: ['4', 0], tiling: 'enable', copy_model: 'Make a copy' } };
+      workflow['1000'] = { class_type: 'SeamlessTile',    inputs: { model: ['4', 0], tiling: 'enable', copy_model: 'Make a copy' } };
+      workflow['2000'] = { class_type: 'MakeCircularVAE', inputs: { vae:   ['4', 2], tiling: 'enable', copy_vae:   'Make a copy' } };
     }
   }
 

← 11887e5 scripts: bump dead admin-reload port 9792 → 9878 across 18 b  ·  back to Wallco Ai  ·  TODO: check off route-audit + aesthetic-gate diagnostics (bo 823ced1 →