← back to Wallco Ai
generate: wire frame-overlay gate + strengthen anti-frame prompt anchors
a2e6fe62ece203767da65dbb372273089bdc198a · 2026-05-24 22:27:46 -0700 · Steve Abrams
Prong B — pre-publish frame-overlay gate (after seamless gate, ~line 605):
if (kind === 'seamless_tile' && WALLCO_FRAME_GATE !== '0') {
verifyNoFrameOverlay(outPath, { category })
on FRAME_OVERLAY_DETECTED:
regenerate once with retryPrompt (stronger anti-frame anchor + new seed)
if still detected → continue (skip this design)
}
Same retry-once-then-skip shape as the ghost and seamless gates. Opt-out
via WALLCO_FRAME_GATE=0. Validated on 11-design ground-truth panel
(graphic-designer subagent): 10/11 = 91% match.
Prong C — strengthen the auto-appended prompt anchors at the SDXL
callsite (genReplicateSdxl, lines 182-183):
- positive prompt: append "NO FRAME, NO PLATE, NO PASTED-ON SHAPE around
the motif — motifs sit DIRECTLY on the background with no enclosing
rectangle, oval, rounded-square, or circle behind them."
- negative prompt: extend with rectangular/oval/rounded-square/beveled/
picture/gilded/ornamental frame, pasted-on rectangle/oval/circle,
sticker outline, ornamental cartouche, hard-edged inner shape, plate
behind motif, contrasting plate, medallion plate.
The existing "border, frame" terms got steamrolled by user-supplied
positive prompts containing "inside a beaded medallion frame" — the
extended list is more specific and harder to override.
Caller-supplied positive text is NOT modified. Only the auto-appended
Matisse anchor + negative prompt.
Files touched
M scripts/generate_designs.js
Diff
commit a2e6fe62ece203767da65dbb372273089bdc198a
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Sun May 24 22:27:46 2026 -0700
generate: wire frame-overlay gate + strengthen anti-frame prompt anchors
Prong B — pre-publish frame-overlay gate (after seamless gate, ~line 605):
if (kind === 'seamless_tile' && WALLCO_FRAME_GATE !== '0') {
verifyNoFrameOverlay(outPath, { category })
on FRAME_OVERLAY_DETECTED:
regenerate once with retryPrompt (stronger anti-frame anchor + new seed)
if still detected → continue (skip this design)
}
Same retry-once-then-skip shape as the ghost and seamless gates. Opt-out
via WALLCO_FRAME_GATE=0. Validated on 11-design ground-truth panel
(graphic-designer subagent): 10/11 = 91% match.
Prong C — strengthen the auto-appended prompt anchors at the SDXL
callsite (genReplicateSdxl, lines 182-183):
- positive prompt: append "NO FRAME, NO PLATE, NO PASTED-ON SHAPE around
the motif — motifs sit DIRECTLY on the background with no enclosing
rectangle, oval, rounded-square, or circle behind them."
- negative prompt: extend with rectangular/oval/rounded-square/beveled/
picture/gilded/ornamental frame, pasted-on rectangle/oval/circle,
sticker outline, ornamental cartouche, hard-edged inner shape, plate
behind motif, contrasting plate, medallion plate.
The existing "border, frame" terms got steamrolled by user-supplied
positive prompts containing "inside a beaded medallion frame" — the
extended list is more specific and harder to override.
Caller-supplied positive text is NOT modified. Only the auto-appended
Matisse anchor + negative prompt.
---
scripts/generate_designs.js | 41 +++++++++++++++++++++++++++++++++++++++--
1 file changed, 39 insertions(+), 2 deletions(-)
diff --git a/scripts/generate_designs.js b/scripts/generate_designs.js
index a8f503c..d38e668 100644
--- a/scripts/generate_designs.js
+++ b/scripts/generate_designs.js
@@ -179,8 +179,8 @@ function genReplicate(prompt, seed, outPath) {
// Reframe the entire generation as Matisse-cut-paper collage / sticker-on-paper.
// The figure-ground relationship is the WHOLE design — no depth, no atmosphere,
// no secondary motifs behind primary, no shaded interiors.
- const positive = `${prompt}. Matisse cut-paper collage aesthetic — every motif is a flat solid-color silhouette physically cut from construction paper with scissors and pasted onto a single solid background, like stickers peeled from a sheet. SILHOUETTE ON BACKGROUND ONLY. No depth, no atmosphere, no secondary motifs behind primary ones, no shading inside shapes. Every shape one opaque ink color, hard razor-sharp paper-cut edges. Two ink tones maximum (figure + ground). Vinyl die-cut sticker aesthetic, seamless tile, generous negative space, sparse minimal composition, archival quality designer wallcovering`;
- const negative = `outline only, line drawing, linework, hollow shape, hollow interior, unfilled motif, see-through, white interior, transparent fill, translucent fill, outline drawing of a flower, outline drawing of a leaf, ink outline without fill, line-art rendered motif, hand-drawn ink lines, etching, engraving, gradient fill, drop shadow, ambient occlusion, soft shadow, semi-transparent, alpha overlay, multiply blend, ghost background, ghost layer, ghosted, layered bleed, bleed between inks, overlapping translucent layers, faded background, multi-tone interior shading, dimensional, embossed, relief, 3D, three-dimensional, depth, atmospheric perspective, fur texture, anatomical detail inside silhouette, crosshatching, halftone, ben-day dots, dot screen, watercolor wash, airbrush, soft edges, blurry, low quality, seam visible, border, frame, signature, watermark, text, hands, fingers, busy, cluttered, edge-to-edge, tessellated densely, more than 4 colors, ${NEGATIVE_PROMPT_ADDON}`;
+ const positive = `${prompt}. Matisse cut-paper collage aesthetic — every motif is a flat solid-color silhouette physically cut from construction paper with scissors and pasted onto a single solid background, like stickers peeled from a sheet. SILHOUETTE ON BACKGROUND ONLY. No depth, no atmosphere, no secondary motifs behind primary ones, no shading inside shapes. Every shape one opaque ink color, hard razor-sharp paper-cut edges. Two ink tones maximum (figure + ground). Vinyl die-cut sticker aesthetic, seamless tile, generous negative space, sparse minimal composition, archival quality designer wallcovering. NO FRAME, NO PLATE, NO PASTED-ON SHAPE around the motif — motifs sit DIRECTLY on the background with no enclosing rectangle, oval, rounded-square, or circle behind them.`;
+ const negative = `outline only, line drawing, linework, hollow shape, hollow interior, unfilled motif, see-through, white interior, transparent fill, translucent fill, outline drawing of a flower, outline drawing of a leaf, ink outline without fill, line-art rendered motif, hand-drawn ink lines, etching, engraving, gradient fill, drop shadow, ambient occlusion, soft shadow, semi-transparent, alpha overlay, multiply blend, ghost background, ghost layer, ghosted, layered bleed, bleed between inks, overlapping translucent layers, faded background, multi-tone interior shading, dimensional, embossed, relief, 3D, three-dimensional, depth, atmospheric perspective, fur texture, anatomical detail inside silhouette, crosshatching, halftone, ben-day dots, dot screen, watercolor wash, airbrush, soft edges, blurry, low quality, seam visible, border, frame, rectangular frame, oval frame, rounded square frame, beveled frame, picture frame, gilded frame, ornamental frame, pasted-on rectangle, pasted-on oval, pasted-on circle, sticker outline around motif, ornamental cartouche containing the motif, hard-edged inner shape, plate behind motif, contrasting plate, medallion plate, signature, watermark, text, hands, fingers, busy, cluttered, edge-to-edge, tessellated densely, more than 4 colors, ${NEGATIVE_PROMPT_ADDON}`;
const body = {
version: MODEL_VERSION,
@@ -603,6 +603,43 @@ async function main() {
console.warn(' ⚠ seamless-gate non-fatal:', e.message);
}
+ // ── Pre-publish frame-overlay gate (2026-05-24) ──────────────────────
+ // Semantic check via Gemini-2.0-flash — detects a centered or repeating
+ // RECTANGULAR / OVAL / ROUNDED-SQUARE shape sitting ON TOP of the
+ // background pattern like a pasted sticker, with hard geometric edges
+ // that break the seamless repeat flow. First flagged on design 39330
+ // (pitlab puppy in a tan rounded-rectangle floating on dark ground).
+ //
+ // Distinct from ghost-layer (opacity defect) and seamless-check (outer
+ // edge tileability) — this catches the INTERIOR composition defect
+ // where the prompt asks for "inside a frame" / "cameo" and SDXL renders
+ // a literal pasted plate that won't blend with the wallpaper flow.
+ //
+ // Validated on 11-design ground-truth panel via graphic-designer
+ // subagent: 10/11 = 91% match. Opt-out: WALLCO_FRAME_GATE=0.
+ try {
+ const { verifyNoFrameOverlay } = require('../lib/ghost-detector');
+ if (opt.kind === 'seamless_tile' && process.env.WALLCO_FRAME_GATE !== '0') {
+ try {
+ await verifyNoFrameOverlay(outPath, { category: opt.category });
+ } catch (ferr) {
+ if (ferr.code === 'FRAME_OVERLAY_DETECTED') {
+ console.warn(` ⚠ frame-overlay detected — regenerating once · ${ferr.detector_result.reason}`);
+ const retryPrompt = prompt + '\n\nABSOLUTE RULE — NO FRAME, NO PLATE, NO PASTED-ON SHAPE. The motif must sit DIRECTLY on the background with no enclosing rectangle, oval, rounded-square, or circle behind it. Do NOT render an ornamental frame, picture-frame, cartouche, or medallion-plate around the subject. The motif and background must read as a single integrated wallpaper layer, not as one object pasted on another. If you draw a frame or contrasting plate around the motif the image will be rejected.';
+ generate(retryPrompt, seed + 1, outPath, { kind: opt.kind, category: opt.category });
+ const r2 = await verifyNoFrameOverlay(outPath, { category: opt.category }).catch(e => e);
+ if (r2 && r2.code === 'FRAME_OVERLAY_DETECTED') {
+ console.warn(` ✗ frame-overlay persists after retry — skipping #${seed}`);
+ continue;
+ }
+ console.log(` ✓ frame-overlay clean after retry`);
+ } else { throw ferr; }
+ }
+ }
+ } catch (e) {
+ console.warn(' ⚠ frame-gate non-fatal:', e.message);
+ }
+
const id = persistDesign({
kind: opt.kind, prompt, seed, localPath: outPath,
width: thisWidth, height: thisHeight, panels: opt.panels,
← 44322de ghost-detector: new frame-overlay lens — detects "pasted-on"
·
back to Wallco Ai
·
joint-fix: surgical seam repair (95%-preserve, edges only) 1a05f4b →