[object Object]

← back to Wallco Ai

genComfy: COMFY_SAMPLER/COMFY_SCHEDULER env knob (seam investigation)

833bd9f97570461342cb41c5512264183a6e7fa3 · 2026-06-01 17:47:48 -0700 · Steve Abrams

Seam chase findings (2026-06-01): refiner was NEVER the cause (COMFY_REFINER_MODEL
unset everywhere -> refiner already off; my earlier 'refiner softens seams'
hypothesis was wrong). Controlled fixed-seed A/B on Mac2 comfy w/ circular padding:
dpmpp_2m_sde(default) tb18.6/lr16.2, dpmpp_2m tb13.8/lr15.0, euler tb22.4, ddim
tb19.7 — non-SDE directionally cleaner but ALL failed the hard damask seed. Real
cause = COMPOSITION (does the motif wrap), driven by the tile-profile PROMPT far
more than sampler/refiner. Exposed sampler as an env knob (default kept dpmpp_2m_sde
to avoid aesthetic regression); seam failures are still caught by the gate + feather
floor. Not flipping the default — no single knob fixes seams.

Files touched

Diff

commit 833bd9f97570461342cb41c5512264183a6e7fa3
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Mon Jun 1 17:47:48 2026 -0700

    genComfy: COMFY_SAMPLER/COMFY_SCHEDULER env knob (seam investigation)
    
    Seam chase findings (2026-06-01): refiner was NEVER the cause (COMFY_REFINER_MODEL
    unset everywhere -> refiner already off; my earlier 'refiner softens seams'
    hypothesis was wrong). Controlled fixed-seed A/B on Mac2 comfy w/ circular padding:
    dpmpp_2m_sde(default) tb18.6/lr16.2, dpmpp_2m tb13.8/lr15.0, euler tb22.4, ddim
    tb19.7 — non-SDE directionally cleaner but ALL failed the hard damask seed. Real
    cause = COMPOSITION (does the motif wrap), driven by the tile-profile PROMPT far
    more than sampler/refiner. Exposed sampler as an env knob (default kept dpmpp_2m_sde
    to avoid aesthetic regression); seam failures are still caught by the gate + feather
    floor. Not flipping the default — no single knob fixes seams.
---
 scripts/generate_designs.js | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/scripts/generate_designs.js b/scripts/generate_designs.js
index 719fedd..74fa54c 100644
--- a/scripts/generate_designs.js
+++ b/scripts/generate_designs.js
@@ -402,6 +402,14 @@ function genComfy(prompt, seed, outPath, meta) {
   const REFINER = process.env.COMFY_REFINER_MODEL || '';
   const STEPS = parseInt(process.env.COMFY_STEPS || '30', 10);
   const SWITCH = Math.round(STEPS * 0.8);   // base → refiner handoff at 80%
+  // Sampler/scheduler are env-tunable (2026-06-01 seam investigation). For
+  // circular-padded tiles a deterministic (non-SDE) sampler tiles marginally
+  // cleaner than the SDE default — the SDE variant injects per-step stochastic
+  // noise that isn't tiling-aware. Composition (the tile-profile prompt) still
+  // dominates seam quality, so this is a minor knob, not a cure. Default keeps
+  // the historical dpmpp_2m_sde/karras to avoid an aesthetic regression.
+  const SAMPLER   = process.env.COMFY_SAMPLER   || 'dpmpp_2m_sde';
+  const SCHEDULER = process.env.COMFY_SCHEDULER || 'karras';
 
   // 2026-05-26 — SeamlessTile + MakeCircularVAE for truly tileable output.
   // SeamlessTile patches the UNet's Conv2D padding to circular → seamless LATENTS.
@@ -429,8 +437,8 @@ function genComfy(prompt, seed, outPath, meta) {
       '7':  { class_type: 'CLIPTextEncode', inputs: { text: negativePrompt, clip: ['4', 1] } },
       '16': { class_type: 'CLIPTextEncode', inputs: { text: positivePrompt, clip: ['15', 1] } },
       '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] } },
+      '10': { class_type: 'KSamplerAdvanced', inputs: { add_noise: 'enable', noise_seed: seed, steps: STEPS, cfg: 8.5, sampler_name: SAMPLER, scheduler: SCHEDULER, 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: SAMPLER, scheduler: SCHEDULER, 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: REFINER_VAE_REF } },
       '9':  { class_type: 'SaveImage', inputs: { filename_prefix: `wallco_${seed}`, images: ['8', 0] } }
     };
@@ -442,7 +450,7 @@ function genComfy(prompt, seed, outPath, meta) {
     }
   } else {
     workflow = {
-      '3': { class_type: 'KSampler', inputs: { seed, steps: 28, cfg: 8.5, sampler_name: 'dpmpp_2m_sde', scheduler: 'karras', denoise: 1.0, model: BASE_MODEL_REF, positive: ['6', 0], negative: ['7', 0], latent_image: ['5', 0] } },
+      '3': { class_type: 'KSampler', inputs: { seed, steps: 28, cfg: 8.5, sampler_name: SAMPLER, scheduler: SCHEDULER, denoise: 1.0, model: BASE_MODEL_REF, positive: ['6', 0], negative: ['7', 0], latent_image: ['5', 0] } },
       '4': { class_type: 'CheckpointLoaderSimple', inputs: { ckpt_name: MODEL } },
       '5': { class_type: 'EmptyLatentImage', inputs: { width: WIDTH, height: HEIGHT, batch_size: 1 } },
       '6': { class_type: 'CLIPTextEncode', inputs: { text: positivePrompt, clip: ['4', 1] } },

← 7d91223 convergence EXECUTED (Option B per /dtd): prod spoon_all_des  ·  back to Wallco Ai  ·  PDP theme switcher: working public dropdown (Classic + 17 va 08fb7a1 →