From 2e9329b1f41d71e3b71b89b05552a0e0b788e7e4 Mon Sep 17 00:00:00 2001 From: Concept Agent Date: Thu, 21 May 2026 18:51:47 +0200 Subject: [PATCH] security hardening --- .gitignore | 3 + .htaccess | 28 ++- .planning/SITEMAP_CANONICAL.md | 124 ------------ .planning/lahr-carpet-cleaning.jpeg | Bin 172769 -> 0 bytes infra/nginx.conf | 46 ++++- tools/build-paced-reel.py | 83 -------- tools/build-reel-server.py | 84 -------- tools/clip-browser.html | 230 ---------------------- tools/convert-to-webp.py | 60 ------ tools/gen-images-flux.py | 292 ---------------------------- tools/gen-locations.py | 226 --------------------- tools/gen-service-images.py | 179 ----------------- tools/gen-video-wan.py | 223 --------------------- tools/gen-video.py | 220 --------------------- tools/pipeline.html | 151 -------------- tools/review-all.html | 117 ----------- tools/review-heroes.html | 35 ---- tools/wan-test-v2.py | 125 ------------ 18 files changed, 65 insertions(+), 2161 deletions(-) delete mode 100644 .planning/SITEMAP_CANONICAL.md delete mode 100644 .planning/lahr-carpet-cleaning.jpeg delete mode 100644 tools/build-paced-reel.py delete mode 100644 tools/build-reel-server.py delete mode 100644 tools/clip-browser.html delete mode 100644 tools/convert-to-webp.py delete mode 100644 tools/gen-images-flux.py delete mode 100644 tools/gen-locations.py delete mode 100644 tools/gen-service-images.py delete mode 100644 tools/gen-video-wan.py delete mode 100644 tools/gen-video.py delete mode 100644 tools/pipeline.html delete mode 100644 tools/review-all.html delete mode 100644 tools/review-heroes.html delete mode 100644 tools/wan-test-v2.py diff --git a/.gitignore b/.gitignore index fed7c46..d75f6b7 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,6 @@ build/ *.log __pycache__/ *.pyc +.claude/ +.planning/ +tools/ diff --git a/.htaccess b/.htaccess index b34eefa..34d5d87 100644 --- a/.htaccess +++ b/.htaccess @@ -1,14 +1,36 @@ Options -Indexes RewriteEngine On -# Deny sensitive files - +# Security headers + + Header always set X-Frame-Options "SAMEORIGIN" + Header always set X-Content-Type-Options "nosniff" + Header always set X-XSS-Protection "1; mode=block" + Header always set Referrer-Policy "strict-origin-when-cross-origin" + Header always set Permissions-Policy "geolocation=(), microphone=(), camera=()" + Header always set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com; img-src 'self' data:; media-src 'self'; connect-src 'self'; frame-ancestors 'none';" + Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains" + + +# Block server version +ServerSignature Off + +# Deny sensitive file types + Order allow,deny Deny from all -# Deny tools directory +# Block root-level dev files + + Order allow,deny + Deny from all + + +# Block tools and hidden directories RewriteRule ^tools/ - [F,L] +RewriteRule ^\.planning/ - [F,L] +RewriteRule ^\.claude/ - [F,L] ErrorDocument 404 /404.html ErrorDocument 500 /500.html diff --git a/.planning/SITEMAP_CANONICAL.md b/.planning/SITEMAP_CANONICAL.md deleted file mode 100644 index 4079eae..0000000 --- a/.planning/SITEMAP_CANONICAL.md +++ /dev/null @@ -1,124 +0,0 @@ -# SITEMAP_CANONICAL.md — lahrcarpetcleaning.com - -## Nav Structure -Home · Residential · Commercial · Our Work · About · Company - ---- - -## Pages - -### / — Home -Status: EXISTS -File: index.html - ---- - -### /residential/ — Residential Services (landing) -Status: TODO — new page -Nav: Residential (parent) -Purpose: Overview of all residential services with cards linking to each sub-page. - -#### /residential/carpet-cleaning/ -Status: EXISTS (currently at /services/carpet-cleaning/) — needs folder rename -Hero image: hero-technician.jpg - -#### /residential/stairs/ -Status: EXISTS (currently at /services/stairs/) — needs folder rename -Hero image: hero-stairs.jpg - -#### /residential/upholstery/ -Status: EXISTS (currently at /services/upholstery/) — needs folder rename -Hero image: hero-clean-result.jpg - -#### /residential/floors/ -Status: EXISTS (currently at /services/floors/) — needs folder rename -Hero image: hero-living-room.jpg - -#### /residential/area-rugs/ -Status: EXISTS (currently at /services/area-rugs/) — needs folder rename -Hero image: hero-clean-result.jpg - -#### /residential/add-ons/ -Status: EXISTS (currently at /services/add-ons/) — needs folder rename -Hero image: hero-before-after.jpg - ---- - -### /commercial/ — Commercial Cleaning -Status: EXISTS (currently at /services/commercial/) — needs folder move to root -Hero image: AdobeStock commercial images (keep as-is) - ---- - -### /our-work/ — Our Work (Before/After Gallery) -Status: TODO — new page -Nav: Our Work (standalone) -Purpose: Grid of before/after job photos. Real client work images. -Images: assets/images/our-work/ (folder needed) - ---- - -### /about/ — About -Status: EXISTS -Nav: About (standalone) - ---- - -### /company/ — Company (dropdown parent, no landing needed) -Nav label: Company - -#### /contact/ — Contact -Status: EXISTS - -#### /service-area/ — Service Area -Status: TODO — new page -Purpose: Towns served — Waterloo, Seneca Falls, Geneva, Canandaigua, Auburn, Finger Lakes region. -SEO: local landing content per town area. - -#### /reviews/ — Reviews -Status: TODO — new page -Purpose: Google review embeds / static testimonials. - ---- - -## Folder Rename Plan - -| Current path | New path | -|----------------------------|-------------------------------| -| /services/carpet-cleaning/ | /residential/carpet-cleaning/ | -| /services/stairs/ | /residential/stairs/ | -| /services/upholstery/ | /residential/upholstery/ | -| /services/floors/ | /residential/floors/ | -| /services/area-rugs/ | /residential/area-rugs/ | -| /services/add-ons/ | /residential/add-ons/ | -| /services/commercial/ | /commercial/ | - -All internal nav links and footer links update site-wide on rename. - ---- - -## sitemap.xml URLs (target) - -/ -/residential/ -/residential/carpet-cleaning/ -/residential/stairs/ -/residential/upholstery/ -/residential/floors/ -/residential/area-rugs/ -/residential/add-ons/ -/commercial/ -/our-work/ -/about/ -/contact/ -/service-area/ -/reviews/ - ---- - -## Notes -- No pricing on any page (pricing flyer is internal reference only) -- All hero images: Imagen 4 generated (assets/images/hero/) -- Service area focus: Upstate NY — Waterloo, Seneca Falls, Geneva, Finger Lakes region -- Phone: 315-719-1218 | Email: lahrcarpet@gmail.com -- Address: 1076 Waterloo/Geneva Road, Waterloo, NY diff --git a/.planning/lahr-carpet-cleaning.jpeg b/.planning/lahr-carpet-cleaning.jpeg deleted file mode 100644 index f25662bd8decdf1b12e010604244d5d141deb31c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 172769 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

-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

tn(}QP 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]1aTopO^@YJIdTvn;XQVD2EKvQ!T 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

g4C4J!4pf32uTrD zA}|$yZpQL=v$tI`ZAf$eG90BPo{NUyd*HG z@1})dr_K37!PhuQUd8Adu4gBIx~#1XV_!G!LXT&0YPqf{Qi)foEG1t)tbBWCe%iU z_+&V=b4|SWI^XX{)SYAJd|YTLaar+#DMLA^Ls`K4xcbWu+XM!%18+hw8m&>Jadmb; z=|r1_R=L!eXnOXi=%7q6yqg>Ai<#k`NuL%%R|I2Ha{3!Vs-4Nt0(W#KLyY5jdCAUE z`sLwwqoo>>w!U+>vqR7hXj1C@-wg`S`;mxPlAJdHop@UwnXYdOM7ntL*EMI+5vyCI zCgQLJ5-qIx$B%(e6Bts=t3t5rrWra>=DYWw2`Dh!8l*51vzeNnYuGnJc#&+25@!EJmTjeI~gqsXVHwv5#J!>I+(s8FreYjs(ka;tmqYGu1 z4g=p3S*^`a`n06#92s*Rs4Q2JdZ)ATFnRxThONjf;kyZCU%Q|Z32|dr7$toFSQTwb4ddp zUk?hL<0k2eGe{5nsOIe#@SmJU`X0nrb^Jp)N~Z0tkB3^2*weIv_+3Boe4h}QLqc^) zklyXCDwX@H(x?_Y6};bhD-X2ogvuwfzH*e@Xy!XCD8#xBR08s%+FX^u-EdWc$m(ICqGx_k$K16yWFuDV zb218o)M+#EVtF~821~98m5zD?pZ>z&oWa<0eg(P}&@S|H(xK?0+GP(k>8paHd$}q? z)&r-q47i^p#2BBsT)~d*3()5!%8|k0fWMu%!q8(XGV(EI7x`W%jiSvs(_ybOKhLr0 z_hbIlUG_BZ{|eEAz{<`DCMFhJ010+hu$hGL5coYjUs(*Gwl5ONkrcQJj=870G%xV# zHv}8gFokR3W`FIossuY}p1ep%7LbA4qu)1%;qkT|bnx;s)UT|&|I3WpNXFe;PIyu@JS<9xHat4qWZ!53de4CY^!p!?vh9-yTmy~Z9^Df8qkTRT>3QiC zAJ`;Oxb)luD7_;hjl*&#feNoj&0DRh)34(*NrS7=wk1jG2{nqS!(!}+?=D^u8kJ?< z;*gfUkC3YzSpx|5v?dhrjO_0a-pppVC$bP#K33t1gwrE~!+EXjslw`4lt@wL|%j2VkE(A3CA%CzmNAvgpxEJ&Zt ze_^Cu=2=Q&zI;+m*8es@mZpwx`2``V{0xt8UDCQ9big)fAB05SK&?hg$voL< zId(K}2i;$ci-)zwU3omf&5>F(Ik><+@fK#Cq$<;dKq!JZiIS>8QArWY!F^Jyh$l^w z!iw&(JJrzY`tu6vj``r&mn~0@;$Id%!o6iRc80D)b-mZAgx#efLvQoJ(nt*GAklNCV>o`Hy6 z&=<~)()e%MzSQcJhSX5#pG&uWT38jddTGXAQyqyDOmqQDMZfS-a%J4qT+E0%*o@GF z?^DyrtQ)3d&sp>OberdAaIzSoIBuKFwRDa}wh*c-A^M5L1kxW19=XDNg*zEYz9z|{ zF&CgZz>@eAQPv;~$B$HB(A!idoHJGGyIQsBbdAqV-G&(V-3`+|0c|oaj3>+b2y6oDEBP6{Uhq9?IV9xzqg=VpgrAquvb;UAd>2!Nb-UlQU4}iTSx>{194_ltDir>4IZ7S1Hhouv?GFCGh1CgNv~?tU`aVNLTY< zx|J88ke5%o@?HC&0+g?R!$U zHKngijo%}UQevkhPFGa{H>p|=6i6x$QAy?}PvRc8es_360~5OJnn$PQZ+WKCoX2iJr7I(D^7LBOLXlf4`(sJ>sr}10@}>^f z+DSEP$tT|DTmX%Bsi?(y=-3)c`zO8u~%Jh+%yuO%MIstltHeZGAzgV30Tg zND3-Tuvri;8-q{X^ZZ6@x1r#nf3NPT@_J?Zh3rG1_UYV@7bRd)&c{ObJhS&f(&Qp^ zXpPUE*TD9ACE+h1h1cJdLttf>wHKsc-ez@Zr}oMAdifiNAXM0p$&Dtc3gG-&Yxcz= zaA=#g;6c>kA{&7yu9*Z0WD=VMDXz~5#7qT>rtB*;yTGh{kicS>Kw~`tiY=tM`0~L= V&TsukO7H()K+9i1u>aqc{{lmzWz7Hp diff --git a/infra/nginx.conf b/infra/nginx.conf index bb8bc79..0f64eaf 100644 --- a/infra/nginx.conf +++ b/infra/nginx.conf @@ -4,6 +4,42 @@ server { root /usr/share/nginx/html; index index.html; + # Security headers + add_header X-Frame-Options "SAMEORIGIN" always; + add_header X-Content-Type-Options "nosniff" always; + add_header X-XSS-Protection "1; mode=block" always; + add_header Referrer-Policy "strict-origin-when-cross-origin" always; + add_header Permissions-Policy "geolocation=(), microphone=(), camera=()" always; + add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com; img-src 'self' data:; media-src 'self'; connect-src 'self'; frame-ancestors 'none';" always; + add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; + + # Remove server version fingerprint + server_tokens off; + + # Block dot files and hidden directories + location ~ /\. { + deny all; + return 404; + } + + # Block tools directory + location ^~ /tools/ { + deny all; + return 404; + } + + # Block sensitive file types + location ~* \.(env|log|sh|py|pyc|md|yml|yaml|conf|dockerfile|dockerignore|bak|backup|sql|key|pem|json|planning|cpanel)$ { + deny all; + return 404; + } + + # Block README and Dockerfile at root + location ~* ^/(README|Dockerfile|docker-compose\.yml|\.cpanel\.yml)$ { + deny all; + return 404; + } + location / { try_files $uri $uri/ $uri/index.html =404; } @@ -11,16 +47,8 @@ server { error_page 404 /404.html; error_page 500 502 503 504 /500.html; - location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff|woff2|ttf)$ { + location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|webp|woff|woff2|ttf|mp4|webm)$ { expires 30d; add_header Cache-Control "public, immutable"; } - - location ~ /\. { - deny all; - } - - location ~* \.(env|Dockerfile|dockerignore|yml|yaml|md|planning)$ { - deny all; - } } diff --git a/tools/build-paced-reel.py b/tools/build-paced-reel.py deleted file mode 100644 index 025e7eb..0000000 --- a/tools/build-paced-reel.py +++ /dev/null @@ -1,83 +0,0 @@ -""" -Build paced hero reel from the browser-ordered clip list. -- Shot 1 (family entry): trimmed to 3s — cuts before mud pan -- Shots 2-7: full 6s (establish the story) -- Shots 8-12: trimmed to 3.5s (building pace) -- Shots 13-15: trimmed to 2.5s (rapid) -- Shot 16 (final reveal): full 6s (hold on clean result) -""" -import os, subprocess, shutil - -BASE_DIR = os.path.dirname(os.path.dirname(__file__)) -VID_DIR = os.path.join(BASE_DIR, "assets", "videos", "hero", "clips") -REEL_OUT = os.path.join(BASE_DIR, "assets", "videos", "hero", "hero-reel.mp4") -TMP_DIR = os.path.join(VID_DIR, "paced-tmp") -os.makedirs(TMP_DIR, exist_ok=True) - -# Clip order: wine spill > extraction > stain > technician, stairs later -CLIPS = [ - "v3-shot-02", # 1 - wine spill on sofa - "shot-05-extraction-couch",# 2 - extraction couch - "v3-shot-06", # 4 - living room clean carpet pan - "v3-shot-07", # 5 - restaurant carpet glide - "v3-shot-05", # 6 - office lobby carpet pan - "v2-shot-05-clean-stairs", # 7 - clean bright staircase - "v2-shot-07-restaurant", # 8 - restaurant carpet - "v2-shot-06-office", # 9 - bright office carpet - "shot-01-wide-room", # 10 - wide room establishing - "shot-05-clean-reveal", # 11 - clean reveal - "shot-04-extraction-carpet",# 12 - final reveal -] - -# Duration for each clip -DURATIONS = [ - 3.0, # 1 wine spill — shortened to 3.0s - 5.0, # 2 - 4.0, # 4 --- building pace --- - 4.0, # 5 - 3.5, # 6 - 3.5, # 7 - 2.5, # 8 --- rapid --- - 2.5, # 9 - 2.5, # 10 - 2.5, # 11 - 6.0, # 12 final reveal — hold -] - -paced_clips = [] -for i, (name, dur) in enumerate(zip(CLIPS, DURATIONS)): - src = os.path.join(VID_DIR, f"{name}.mp4") - out = os.path.join(TMP_DIR, f"{i:02d}-{name}.mp4") - if not os.path.exists(src): - print(f" MISSING: {src}") - continue - print(f"[{i+1:02d}] {name} → {dur}s") - result = subprocess.run( - ["ffmpeg", "-y", "-i", src, "-t", str(dur), - "-c:v", "libx264", "-crf", "22", "-preset", "fast", out], - capture_output=True, text=True - ) - if result.returncode != 0: - print(f" ffmpeg error: {result.stderr[-200:]}") - else: - paced_clips.append(out) - -print(f"\n{len(paced_clips)}/{len(CLIPS)} clips trimmed") - -concat_file = os.path.join(TMP_DIR, "concat.txt") -with open(concat_file, "w") as f: - for p in paced_clips: - f.write(f"file '{p}'\n") - -result = subprocess.run( - ["ffmpeg", "-y", "-f", "concat", "-safe", "0", "-i", concat_file, - "-c:v", "libx264", "-crf", "22", "-preset", "fast", "-movflags", "+faststart", REEL_OUT], - capture_output=True, text=True -) -if result.returncode == 0: - print(f"Reel saved: {REEL_OUT} ({os.path.getsize(REEL_OUT)//1024}KB)") - # Clean up tmp - shutil.rmtree(TMP_DIR) - print("Done.") -else: - print(f"ffmpeg error: {result.stderr[-400:]}") diff --git a/tools/build-reel-server.py b/tools/build-reel-server.py deleted file mode 100644 index 5f8736e..0000000 --- a/tools/build-reel-server.py +++ /dev/null @@ -1,84 +0,0 @@ -"""Local server: serves clip-browser.html + handles POST /build-reel to run ffmpeg.""" -import http.server, json, os, subprocess, urllib.parse - -BASE_DIR = os.path.dirname(os.path.dirname(__file__)) -VID_DIR = os.path.join(BASE_DIR, "assets", "videos", "hero", "clips") -REEL_OUT = os.path.join(BASE_DIR, "assets", "videos", "hero", "hero-reel.mp4") -TOOLS_DIR = os.path.dirname(__file__) - -class Handler(http.server.BaseHTTPRequestHandler): - def log_message(self, fmt, *args): pass - - def do_GET(self): - path = self.path.split('?')[0] - if path in ('/', '/tools/clip-browser.html'): - self._serve_file(os.path.join(TOOLS_DIR, 'clip-browser.html'), 'text/html') - elif path.startswith('/assets/videos/'): - rel = path.lstrip('/') - fpath = os.path.join(BASE_DIR, rel) - if os.path.exists(fpath): - self._serve_file(fpath, 'video/mp4') - else: - self._404() - else: - self._404() - - def do_POST(self): - if self.path == '/tools/build-reel-api.py': - length = int(self.headers.get('Content-Length', 0)) - body = json.loads(self.rfile.read(length)) - clips = body.get('clips', []) - if not clips: - self._json({'message': 'No clips provided.'}, 400) - return - concat_file = os.path.join(VID_DIR, 'concat-browser.txt') - missing = [] - with open(concat_file, 'w') as f: - for name in clips: - p = os.path.join(VID_DIR, f'{name}.mp4') - if not os.path.exists(p): - missing.append(name) - else: - f.write(f"file '{p}'\n") - if missing: - self._json({'message': f'Missing clips: {missing}'}, 400) - return - result = subprocess.run( - ['ffmpeg', '-y', '-f', 'concat', '-safe', '0', '-i', concat_file, - '-c:v', 'libx264', '-crf', '22', '-preset', 'fast', - '-movflags', '+faststart', REEL_OUT], - capture_output=True, text=True - ) - if result.returncode == 0: - size = os.path.getsize(REEL_OUT) // 1024 - self._json({'message': f'Reel built: hero-reel.mp4 ({size}KB). Now rebuild Docker: docker compose up -d --build'}) - else: - self._json({'message': f'ffmpeg error: {result.stderr[-300:]}'}, 500) - else: - self._404() - - def _serve_file(self, path, ctype): - with open(path, 'rb') as f: - data = f.read() - self.send_response(200) - self.send_header('Content-Type', ctype) - self.send_header('Content-Length', len(data)) - self.end_headers() - self.wfile.write(data) - - def _json(self, obj, code=200): - data = json.dumps(obj).encode() - self.send_response(code) - self.send_header('Content-Type', 'application/json') - self.send_header('Content-Length', len(data)) - self.end_headers() - self.wfile.write(data) - - def _404(self): - self.send_response(404) - self.end_headers() - -if __name__ == '__main__': - port = 8088 - print(f'Clip browser running at http://localhost:{port}/') - http.server.HTTPServer(('', port), Handler).serve_forever() diff --git a/tools/clip-browser.html b/tools/clip-browser.html deleted file mode 100644 index 094b149..0000000 --- a/tools/clip-browser.html +++ /dev/null @@ -1,230 +0,0 @@ - - - - -Lahr Clip Browser - - - - -

Lahr Clip Browser

-

Drag clips to reorder. Click Preview to watch. Remove clips from reel. Build Reel when ready.

- -
-
-
-
-

Available (not in reel)

-
-
-
- -
- - - - diff --git a/tools/convert-to-webp.py b/tools/convert-to-webp.py deleted file mode 100644 index 47d210e..0000000 --- a/tools/convert-to-webp.py +++ /dev/null @@ -1,60 +0,0 @@ -"""Convert all service/hero JPGs to WebP at 60-70KB target, update all HTML refs.""" -import os, glob -from PIL import Image - -BASE = os.path.dirname(os.path.dirname(__file__)) -IMG_DIRS = [ - os.path.join(BASE, "assets", "images", "services"), - os.path.join(BASE, "assets", "images", "hero"), -] - -def convert(jpg_path, max_width=900, quality=78): - # Hero images get larger max_width - if "/hero/" in jpg_path: - max_width = 1400 - quality = 80 - webp_path = jpg_path.rsplit(".", 1)[0] + ".webp" - img = Image.open(jpg_path).convert("RGB") - w, h = img.size - if w > max_width: - img = img.resize((max_width, int(h * max_width / w)), Image.LANCZOS) - img.save(webp_path, "WEBP", quality=quality, method=6) - kb = os.path.getsize(webp_path) // 1024 - orig_kb = os.path.getsize(jpg_path) // 1024 - return webp_path, kb, orig_kb - -converted = [] -for d in IMG_DIRS: - for jpg in glob.glob(os.path.join(d, "*.jpg")): - if any(x in jpg for x in ["gen.log", "regen"]): - continue - webp, kb, orig = convert(jpg) - print(f" {os.path.basename(jpg)} {orig}KB -> {kb}KB") - converted.append((jpg, webp)) - -print(f"\n{len(converted)} images converted") - -# Update all HTML files to reference .webp instead of .jpg (for these image dirs only) -html_files = [] -for root, dirs, files in os.walk(BASE): - dirs[:] = [d for d in dirs if d not in [".git", "tools", "assets/videos"]] - for f in files: - if f.endswith(".html"): - html_files.append(os.path.join(root, f)) - -updated = 0 -for html in html_files: - with open(html, "r") as f: - content = f.read() - new = content - for jpg, webp in converted: - jpg_ref = "/assets/images/" + os.path.relpath(jpg, os.path.join(BASE, "assets", "images")) - webp_ref = "/assets/images/" + os.path.relpath(webp, os.path.join(BASE, "assets", "images")) - new = new.replace(jpg_ref, webp_ref) - if new != content: - with open(html, "w") as f: - f.write(new) - updated += 1 - -print(f"{updated} HTML files updated to .webp refs") -print("Done.") diff --git a/tools/gen-images-flux.py b/tools/gen-images-flux.py deleted file mode 100644 index 26fdbaf..0000000 --- a/tools/gen-images-flux.py +++ /dev/null @@ -1,292 +0,0 @@ -""" -Generate all site images via FLUX.1 Schnell GGUF through ComfyUI. -FLUX Schnell: 4 steps, cfg=1.0, no negative prompt, photorealistic. -Run after ComfyUI restart: python3 tools/gen-images-flux.py -""" -import json, time, urllib.request, os, random, io - -COMFY = "http://localhost:8188" -HERO_DIR = os.path.join(os.path.dirname(os.path.dirname(__file__)), "assets", "images", "hero") -SVC_DIR = os.path.join(os.path.dirname(os.path.dirname(__file__)), "assets", "images", "services") - -IMAGES = [ - # --- HERO IMAGES --- - {"filename": "hero-carpet-cleaning.jpg", "dir": HERO_DIR, "prompt": ( - "low-angle 35mm lens perspective looking across thick plush cream carpet in an upstate New York living room, " - "carpet fibers razor sharp in foreground, couch and coffee table receding into shallow bokeh background, " - "warm afternoon window light raking across carpet texture, Finger Lakes farmhouse interior, " - "no people, ultra-realistic architectural photography, 16:9" - )}, - {"filename": "hero-stairs.jpg", "dir": HERO_DIR, "prompt": ( - "dramatic low 35mm angle looking up a clean carpeted staircase from floor level, " - "light grey carpet runner sharp and textured in foreground steps, wood banister receding diagonally, " - "bright daylight flooding from above, shallow depth of field, " - "no people, ultra-realistic interior photography, 16:9" - )}, - {"filename": "hero-upholstery.jpg", "dir": HERO_DIR, "prompt": ( - "50mm lens low corner angle across a bright residential living room, " - "plush linen fabric sofa arm sharp in near foreground, clean armchair and window receding with bokeh, " - "afternoon countryside light through window, shallow depth of field, " - "no people, ultra-realistic interior photography, 16:9" - )}, - {"filename": "hero-floors.jpg", "dir": HERO_DIR, "prompt": ( - "low 24mm angle pressed to gleaming light oak hardwood floor, " - "floor grain razor sharp in extreme foreground receding to hallway vanishing point, " - "white walls, natural light streaming in, shallow depth of field, " - "no people, ultra-realistic interior photography, 16:9" - )}, - {"filename": "hero-area-rugs.jpg", "dir": HERO_DIR, "prompt": ( - "low 35mm angle looking across a hand-knotted oriental rug from floor level, " - "rich red and gold rug fibers sharp in foreground, hardwood floor and room receding into bokeh, " - "cozy farmhouse living room, warm natural light, shallow depth of field, " - "no people, ultra-realistic interior photography, 16:9" - )}, - {"filename": "hero-add-ons.jpg", "dir": HERO_DIR, "prompt": ( - "low 35mm angle across a clean beige bedroom carpet, " - "carpet pile sharp and detailed in near foreground, wooden bed frame and sheer curtained window receding, " - "crisp morning light, shallow depth of field, " - "no people, no machines, ultra-realistic interior photography, 16:9" - )}, - {"filename": "hero-commercial.jpg", "dir": HERO_DIR, "prompt": ( - "low 24mm wide-angle lens across a modern corporate lobby floor, " - "dark charcoal commercial carpet sharp in extreme foreground receding to glass entrance doors, " - "recessed ceiling lights creating depth, strong vanishing point perspective, " - "no people, ultra-realistic architectural photography, 16:9" - )}, - {"filename": "hero-offices.jpg", "dir": HERO_DIR, "prompt": ( - "low 24mm angle across clean grey carpet tiles in a modern open-plan office, " - "carpet tile seams sharp in foreground receding to rows of empty desks and glass partitions, " - "professional overhead lighting, strong linear perspective, " - "no people, ultra-realistic architectural photography, 16:9" - )}, - {"filename": "hero-vacation-rentals.jpg", "dir": HERO_DIR, "prompt": ( - "low 35mm angle across clean beige carpet in a Finger Lakes cottage living room, " - "carpet fibers sharp in foreground, stone fireplace and lake-view window receding with bokeh, " - "wooden ceiling beams, warm inviting light, shallow depth of field, " - "no people, ultra-realistic interior photography, 16:9" - )}, - {"filename": "hero-hotels.jpg", "dir": HERO_DIR, "prompt": ( - "low 24mm lens looking down a long hotel corridor from floor level, " - "patterned burgundy carpet runner sharp in extreme foreground receding to vanishing point, " - "warm wall sconces lining white walls, numbered doors converging in perspective, " - "no people, ultra-realistic hospitality photography, 16:9" - )}, - {"filename": "hero-retail.jpg", "dir": HERO_DIR, "prompt": ( - "low 35mm diagonal angle across clean light grey carpet in an upscale retail showroom, " - "carpet surface sharp in foreground, minimalist display fixtures and storefront windows receding with bokeh, " - "bright track lighting overhead, shallow depth of field, " - "no people, ultra-realistic architectural photography, 16:9" - )}, - {"filename": "hero-property-management.jpg", "dir": HERO_DIR, "prompt": ( - "low 35mm angle across fresh neutral carpet in an empty move-in ready apartment, " - "carpet texture sharp in foreground, bare white walls and bright windows receding, " - "clean real estate photography perspective, shallow depth of field, " - "no people, ultra-realistic real estate photography, 16:9" - )}, - {"filename": "hero-about.jpg", "dir": HERO_DIR, "prompt": ( - "low 35mm angle from lawn level looking up at a classic upstate New York suburban home, " - "green grass blades sharp in extreme foreground, inviting house facade receding upward, " - "mature trees and clear blue sky, warm summer afternoon, " - "no people, ultra-realistic real estate photography, 16:9" - )}, - {"filename": "hero-service-area.jpg", "dir": HERO_DIR, "prompt": ( - "low horizon 24mm wide-angle Finger Lakes landscape, " - "green vineyard vines sharp in foreground receding to rolling hills and calm lake, " - "golden hour light casting long shadows, strong depth and distance, " - "no people, ultra-realistic landscape photography, 16:9" - )}, - {"filename": "hero-living-room.jpg", "dir": HERO_DIR, "prompt": ( - "low 35mm corner angle across a spacious residential living room, " - "plush light grey carpet sharp and textured in foreground, large sectional sofa and bay windows receding with bokeh, " - "warm afternoon sunlight, shallow depth of field, " - "no people, ultra-realistic interior photography, 16:9" - )}, - {"filename": "hero-clean-result.jpg", "dir": HERO_DIR, "prompt": ( - "extreme low 50mm macro angle pressed to immaculate freshly cleaned residential carpet, " - "individual carpet fibers razor sharp in foreground, pile receding into soft bokeh, " - "raking natural light revealing deep clean texture and uniform pile height, " - "no people, ultra-realistic macro carpet photography, 16:9" - )}, - # --- SERVICE CARD IMAGES --- - {"filename": "carpet-cleaning.jpg", "dir": SVC_DIR, "prompt": ( - "low 35mm angle looking across plush clean beige carpet in a residential living room, " - "carpet fibers sharp in foreground, couch and window receding into bokeh, " - "warm afternoon light, shallow depth of field, no people, ultra-realistic interior photography" - )}, - {"filename": "stairs-cleaning.jpg", "dir": SVC_DIR, "prompt": ( - "low 35mm angle looking up clean grey carpeted stairs from bottom step, " - "carpet texture sharp on nearest step, stairs receding diagonally upward, " - "wood banister, bright light from above, no people, ultra-realistic interior photography" - )}, - {"filename": "upholstery-cleaning.jpg", "dir": SVC_DIR, "prompt": ( - "low 50mm angle across a clean plush linen fabric sofa arm, " - "fabric weave sharp in foreground, living room receding with bokeh, " - "warm light, shallow depth of field, no people, ultra-realistic interior photography" - )}, - {"filename": "floor-cleaning.jpg", "dir": SVC_DIR, "prompt": ( - "low 24mm angle pressed to gleaming light oak hardwood floor, " - "wood grain razor sharp in extreme foreground receding down hallway, " - "natural light, no people, ultra-realistic interior photography" - )}, - {"filename": "area-rug-cleaning.jpg", "dir": SVC_DIR, "prompt": ( - "low 35mm angle across a vibrant clean oriental rug from floor level, " - "rug fibers and pattern sharp in foreground, hardwood floor and room receding, " - "warm light, shallow depth of field, no people, ultra-realistic interior photography" - )}, - {"filename": "add-ons.jpg", "dir": SVC_DIR, "prompt": ( - "low 35mm angle across clean beige bedroom carpet, " - "carpet pile sharp in foreground, bed frame and curtained window receding with bokeh, " - "morning light, no people, ultra-realistic interior photography" - )}, - {"filename": "commercial-overview.jpg", "dir": SVC_DIR, "prompt": ( - "low 24mm angle across dark commercial carpet in a corporate lobby, " - "carpet surface sharp in foreground receding to glass entrance, " - "strong vanishing point, no people, ultra-realistic architectural photography" - )}, - {"filename": "vacation-rentals.jpg", "dir": SVC_DIR, "prompt": ( - "low 35mm angle across clean carpet in a Finger Lakes cottage living room, " - "carpet sharp in foreground, stone fireplace and window receding with bokeh, " - "rustic warm decor, no people, ultra-realistic interior photography" - )}, - {"filename": "office-spaces.jpg", "dir": SVC_DIR, "prompt": ( - "low 24mm angle across grey carpet tiles in a modern open office, " - "tile seams sharp in foreground, empty desks receding with linear perspective, " - "professional lighting, no people, ultra-realistic architectural photography" - )}, - {"filename": "hotels-inns.jpg", "dir": SVC_DIR, "prompt": ( - "low 24mm angle down a hotel corridor, patterned carpet runner sharp in foreground, " - "corridor receding to vanishing point, warm wall sconces, " - "no people, ultra-realistic hospitality photography" - )}, - {"filename": "retail-showrooms.jpg", "dir": SVC_DIR, "prompt": ( - "low 35mm diagonal angle across light grey carpet in an upscale retail showroom, " - "carpet sharp in foreground, display fixtures and track lighting receding with bokeh, " - "no people, ultra-realistic architectural photography" - )}, - {"filename": "property-management.jpg", "dir": SVC_DIR, "prompt": ( - "low 35mm angle across fresh neutral carpet in an empty clean apartment, " - "carpet texture sharp in foreground, white walls and windows receding, " - "no people, ultra-realistic real estate photography" - )}, -] - - -def build_workflow(prompt, seed=None): - if seed is None: - seed = random.randint(0, 2**32) - return { - "1": { - "class_type": "UnetLoaderGGUF", - "inputs": {"unet_name": "flux1-schnell-Q8_0.gguf"}, - }, - "2": { - "class_type": "DualCLIPLoader", - "inputs": { - "clip_name1": "t5xxl_fp8_e4m3fn.safetensors", - "clip_name2": "clip_l.safetensors", - "type": "flux", - }, - }, - "3": { - "class_type": "VAELoader", - "inputs": {"vae_name": "ae.safetensors"}, - }, - "4": { - "class_type": "CLIPTextEncode", - "inputs": {"clip": ["2", 0], "text": prompt}, - }, - "5": { - "class_type": "EmptyLatentImage", - "inputs": {"batch_size": 1, "height": 576, "width": 1024}, - }, - "6": { - "class_type": "KSampler", - "inputs": { - "cfg": 1.0, - "denoise": 1.0, - "latent_image": ["5", 0], - "model": ["1", 0], - "negative": ["4", 0], - "positive": ["4", 0], - "sampler_name": "euler", - "scheduler": "simple", - "seed": seed, - "steps": 4, - }, - }, - "7": { - "class_type": "VAEDecode", - "inputs": {"samples": ["6", 0], "vae": ["3", 0]}, - }, - "8": { - "class_type": "SaveImage", - "inputs": {"filename_prefix": "flux_lahr", "images": ["7", 0]}, - }, - } - - -def queue_prompt(workflow): - data = json.dumps({"prompt": workflow}).encode() - req = urllib.request.Request( - f"{COMFY}/prompt", data=data, - headers={"Content-Type": "application/json"} - ) - with urllib.request.urlopen(req) as resp: - return json.loads(resp.read())["prompt_id"] - - -def wait_for_result(prompt_id, timeout=600): - start = time.time() - while time.time() - start < timeout: - try: - with urllib.request.urlopen(f"{COMFY}/history/{prompt_id}") as resp: - hist = json.loads(resp.read()) - if prompt_id in hist: - entry = hist[prompt_id] - status = entry.get("status", {}).get("status_str", "") - if status == "error": - msgs = entry.get("status", {}).get("messages", []) - print(f" COMFYUI ERROR: {msgs}", flush=True) - return None - for node_out in entry.get("outputs", {}).values(): - if "images" in node_out: - return node_out["images"] - except Exception: - pass - time.sleep(5) - return None - - -def download_image(img_info, out_path): - fname = img_info["filename"] - subfolder = img_info.get("subfolder", "") - img_type = img_info.get("type", "output") - url = f"{COMFY}/view?filename={fname}&subfolder={subfolder}&type={img_type}" - with urllib.request.urlopen(url) as resp: - data = resp.read() - try: - from PIL import Image - img = Image.open(io.BytesIO(data)).convert("RGB") - img.save(out_path, "JPEG", quality=92) - print(f" OK: {os.path.basename(out_path)} ({os.path.getsize(out_path)//1024}KB)", flush=True) - except ImportError: - png_path = out_path.replace(".jpg", ".png") - with open(png_path, "wb") as f: - f.write(data) - print(f" OK (PNG): {png_path}", flush=True) - - -total = len(IMAGES) -for i, spec in enumerate(IMAGES): - out_path = os.path.join(spec["dir"], spec["filename"]) - print(f"\n[{i+1}/{total}] {spec['filename']}", flush=True) - workflow = build_workflow(spec["prompt"]) - prompt_id = queue_prompt(workflow) - print(f" queued {prompt_id[:8]}...", flush=True) - images = wait_for_result(prompt_id) - if images: - download_image(images[0], out_path) - else: - print(f" FAILED (timeout)", flush=True) - -print("\nAll done.", flush=True) diff --git a/tools/gen-locations.py b/tools/gen-locations.py deleted file mode 100644 index 566618f..0000000 --- a/tools/gen-locations.py +++ /dev/null @@ -1,226 +0,0 @@ -""" -Lahr Carpet Cleaning — Location page generator. -Creates /locations//index.html for each city. -Run: python3 tools/gen-locations.py -""" -import os - -BASE_DIR = os.path.dirname(os.path.dirname(__file__)) -LOC_DIR = os.path.join(BASE_DIR, "locations") - -CITIES = [ - {"name": "Waterloo", "slug": "waterloo-ny", "county": "Seneca County", "note": "Our home base. Fastest response times in the area."}, - {"name": "Geneva", "slug": "geneva-ny", "county": "Ontario County", "note": "Full residential and commercial services throughout Geneva."}, - {"name": "Seneca Falls", "slug": "seneca-falls-ny", "county": "Seneca County", "note": "Serving homes, vacation rentals, and businesses in Seneca Falls."}, - {"name": "Canandaigua", "slug": "canandaigua-ny", "county": "Ontario County", "note": "Lakefront homes, rentals, and businesses along Canandaigua Lake."}, - {"name": "Penn Yan", "slug": "penn-yan-ny", "county": "Yates County", "note": "Homes, wineries, and short-term rentals in the Penn Yan area."}, - {"name": "Newark", "slug": "newark-ny", "county": "Wayne County", "note": "Carpet and upholstery cleaning for homes and businesses in Newark."}, - {"name": "Clifton Springs", "slug": "clifton-springs-ny", "county": "Ontario County", "note": "Residential and commercial cleaning throughout Clifton Springs."}, - {"name": "Lodi", "slug": "lodi-ny", "county": "Seneca County", "note": "Serving homes and vacation properties in Lodi and surrounding areas."}, - {"name": "Himrod", "slug": "himrod-ny", "county": "Yates County", "note": "Carpet and floor cleaning for homes and rentals in the Himrod area."}, - {"name": "Phelps", "slug": "phelps-ny", "county": "Ontario County", "note": "Residential carpet and upholstery cleaning throughout Phelps."}, - {"name": "Shortsville", "slug": "shortsville-ny", "county": "Ontario County", "note": "Home and business cleaning services in Shortsville, NY."}, - {"name": "Victor", "slug": "victor-ny", "county": "Ontario County", "note": "Residential and commercial carpet cleaning throughout Victor."}, - {"name": "Naples", "slug": "naples-ny", "county": "Ontario County", "note": "Serving homes, wineries, and vacation rentals in the Naples area."}, - {"name": "Gorham", "slug": "gorham-ny", "county": "Ontario County", "note": "Carpet and floor cleaning for homes and properties in Gorham."}, - {"name": "Manchester", "slug": "manchester-ny", "county": "Ontario County", "note": "Residential and commercial cleaning services in Manchester, NY."}, - {"name": "Ovid", "slug": "ovid-ny", "county": "Seneca County", "note": "Serving homes and rental properties throughout Ovid."}, - {"name": "Clyde", "slug": "clyde-ny", "county": "Wayne County", "note": "Carpet, upholstery, and floor cleaning for homes and businesses in Clyde."}, - {"name": "Farmington", "slug": "farmington-ny", "county": "Ontario County", "note": "Residential and commercial carpet cleaning throughout Farmington."}, - {"name": "East Bloomfield", "slug": "east-bloomfield-ny", "county": "Ontario County", "note": "Serving homes and properties in East Bloomfield and surrounding areas."}, - {"name": "Rushville", "slug": "rushville-ny", "county": "Yates County", "note": "Carpet and upholstery cleaning for homes and rentals in Rushville."}, - {"name": "Finger Lakes", "slug": "finger-lakes-ny", "county": "Region", "note": "Serving vacation rentals, wineries, and homes across the Finger Lakes region."}, -] - -SERVICES = [ - {"name": "Carpet Cleaning", "slug": "/services/carpet-cleaning/", "img": "/assets/images/services/carpet-cleaning.jpg", "sub": "In-Home Service", "desc": "Hot water extraction removes deep-seated dirt, allergens, and stains from carpet fibers throughout your home."}, - {"name": "Stairs Cleaning", "slug": "/services/stairs/", "img": "/assets/images/services/stairs-cleaning.jpg", "sub": "Step by Step", "desc": "Stairs collect more dirt per square inch than any flat surface. We clean every tread, riser, and landing."}, - {"name": "Upholstery Cleaning","slug": "/services/upholstery/", "img": "/assets/images/services/upholstery-cleaning.jpg","sub": "Furniture Refresh", "desc": "Safe, effective cleaning for sofas, chairs, and mattresses. We work with all fabric types and leave no residue."}, - {"name": "Floor Cleaning", "slug": "/services/floors/", "img": "/assets/images/services/floor-cleaning.jpg", "sub": "Hard Surface Care", "desc": "Wood floor cleaning and tile and grout restoration that brings hard surfaces back to their original condition."}, - {"name": "Area Rug Cleaning", "slug": "/services/area-rugs/", "img": "/assets/images/services/area-rug-cleaning.jpg", "sub": "Delicate Care", "desc": "Gentle, specialized cleaning for oriental, Persian, and delicate rugs that restores color and removes embedded dirt."}, - {"name": "Add-On Services", "slug": "/services/add-ons/", "img": "/assets/images/services/add-ons.jpg", "sub": "Extra Care", "desc": "Furniture moving, pet hair removal, odor treatment, and heavily soiled area care available alongside any service."}, -] - -HERO_IMAGES = [ - "/assets/images/hero/hero-living-room.jpg", - "/assets/images/hero/hero-clean-result.jpg", - "/assets/images/hero/hero-technician.jpg", - "/assets/images/hero/hero-before-after.jpg", - "/assets/images/hero/hero-stairs.jpg", -] - - -def service_card(svc, city_name): - accent_word, rest = svc["name"].split(" ", 1) if " " in svc["name"] else (svc["name"], "") - h3 = f'{accent_word} {rest}'.strip() - return f"""
-
{svc['name']} in {city_name}, NY
-

{h3}

-
{svc['sub']}
-

{svc['desc']}

- Learn More -
""" - - -def page_html(city, idx): - hero_img = HERO_IMAGES[idx % len(HERO_IMAGES)] - cards = "\n".join(service_card(s, city["name"]) for s in SERVICES) - name = city["name"] - county = city["county"] - note = city["note"] - slug = city["slug"] - - return f""" - - - - - Carpet Cleaning in {name}, NY | Lahr Carpet Cleaning - - - - - - - -
-
-
- {county} — Finger Lakes -

{name},
NY

-

{note}

- -
-
-
- -
-
-
- -

Services in {name}

-

We serve {name} and the surrounding {county} communities. Call to confirm availability for your address.

-
-
-{cards} -
-
-
- -
-
-

Serving {name}

-

Call 315-719-1218 or submit the form for a free estimate in {name}, NY.

- Get a Free Estimate -
-
- - - - - - -""" - - -def locations_index(): - city_cards = [] - for i, city in enumerate(CITIES): - img = HERO_IMAGES[i % len(HERO_IMAGES)] - name = city["name"] - county = city["county"] - note = city["note"] - slug = city["slug"] - if " " in name: - accent_word, rest = name.split(" ", 1) - h3 = f'{accent_word} {rest}, NY' - else: - h3 = f'{name}, NY' - city_cards.append(f"""
-
{name} NY
-

{h3}

-
{county}
-

{note}

- View Services -
""") - - cards_html = "\n".join(city_cards) - return f""" - - - - - Service Areas | Lahr Carpet Cleaning | Finger Lakes, NY - - - - - - - -
-
-
- Finger Lakes Region -

Service
Areas

-

We clean carpets, upholstery, rugs, and hard floors across 21 cities in Upstate New York. Select your city below.

- -
-
-
- -
-
-
- -

Cities We Serve

-

Based in Waterloo, NY. We travel throughout Seneca, Ontario, Yates, Wayne, and Cayuga counties.

-
-
-{cards_html} -
-
-
- -
-
-

Not sure if we cover your area?

-

Call 315-719-1218 or submit the form and we will confirm availability for your address.

- Get a Free Estimate -
-
- - - - - - -""" - - -if __name__ == "__main__": - # Write locations index - with open(os.path.join(LOC_DIR, "index.html"), "w") as f: - f.write(locations_index()) - print("Wrote locations/index.html") - - # Write each city page - for i, city in enumerate(CITIES): - city_dir = os.path.join(LOC_DIR, city["slug"]) - os.makedirs(city_dir, exist_ok=True) - out_path = os.path.join(city_dir, "index.html") - with open(out_path, "w") as f: - f.write(page_html(city, i)) - print(f"Wrote locations/{city['slug']}/index.html") - - print(f"\nDone. {len(CITIES)} city pages + index generated.") diff --git a/tools/gen-service-images.py b/tools/gen-service-images.py deleted file mode 100644 index 7e60816..0000000 --- a/tools/gen-service-images.py +++ /dev/null @@ -1,179 +0,0 @@ -""" -Lahr Carpet Cleaning — Service card image generator. -Generates 12 unique images for residential and commercial service cards. -Saves to: assets/images/services/ -Run: python3 tools/gen-service-images.py -""" -import os -import sys - -try: - from google import genai - from google.genai import types -except ImportError: - print("Installing google-genai...") - os.system(f"{sys.executable} -m pip install google-genai --quiet") - from google import genai - from google.genai import types - -API_KEY = os.environ.get("GEMINI_API_KEY", "AIzaSyB_1p8KvaT_rdNJGPs8HKk8bKsvUlcL6Kg") -OUT_DIR = os.path.join(os.path.dirname(os.path.dirname(__file__)), "assets", "images", "services") -os.makedirs(OUT_DIR, exist_ok=True) - -client = genai.Client(api_key=API_KEY) - -IMAGES = [ - # ── Residential ────────────────────────────────────────────────────────── - { - "name": "carpet-cleaning", - "prompt": ( - "Wide shot of a large industrial stand-up hot water extraction machine being pushed across " - "a plush beige residential carpet. The machine is a heavy commercial-grade upright extractor " - "on wheels — tall, wide cleaning head at the base, long upright handle. " - "The carpet behind it transitions from dirty and matted to clean, bright, and fluffy. " - "Completely dry machine exterior, no steam, no water spraying anywhere. " - "Warm natural interior light. Ultra-realistic professional photography." - ), - }, - { - "name": "stairs-cleaning", - "prompt": ( - "Wide cinematic shot of a carpeted residential staircase. Each step has clean, " - "bright plush carpet that looks freshly cleaned with visible extraction lines. " - "Modern upstate New York home interior, natural light from above, " - "warm wood banisters, no people, no equipment visible. " - "Professional interior photography, ultra-realistic." - ), - }, - { - "name": "upholstery-cleaning", - "prompt": ( - "Close-up of a clean grey linen sofa cushion showing bright, lifted fabric texture " - "after professional upholstery cleaning. Half the cushion shows the before " - "(slightly soiled, flat fabric) and half shows the cleaned result (bright, fluffy, refreshed). " - "Natural window light, residential living room in background, no people, no equipment. " - "Ultra-realistic product photography." - ), - }, - { - "name": "floor-cleaning", - "prompt": ( - "Wide shot of a gleaming hardwood floor in a modern residential home after professional " - "cleaning. The floor reflects soft natural window light, showing deep grain detail. " - "Contemporary furniture in background, no people, no cleaning equipment visible. " - "Professional interior photography, ultra-realistic." - ), - }, - { - "name": "area-rug-cleaning", - "prompt": ( - "Overhead flat-lay shot of a large vibrant Persian or oriental area rug " - "with rich red, navy, and cream geometric patterns, looking freshly cleaned — " - "colors vivid, fibers lifted and bright. Hardwood floor beneath. " - "No people, no equipment, no water. Professional product photography, ultra-realistic." - ), - }, - { - "name": "add-ons", - "prompt": ( - "Close-up macro shot of clean carpet fibers being lifted by a professional " - "grooming brush after hot water extraction cleaning. The fibers are bright, " - "fluffy, and standing upright. Warm light catches the texture. " - "No steam, no water, no people. Ultra-realistic macro photography." - ), - }, - # ── Commercial ─────────────────────────────────────────────────────────── - { - "name": "vacation-rentals", - "prompt": ( - "Bright, airy vacation rental living room in the Finger Lakes region of upstate New York. " - "Spotlessly clean cream carpet, contemporary furniture, large windows with lake views, " - "warm natural afternoon light. Inviting and fresh. No people, no equipment. " - "Professional real estate photography, ultra-realistic." - ), - }, - { - "name": "office-spaces", - "prompt": ( - "Wide shot of a clean modern corporate office with freshly cleaned dark charcoal carpet " - "throughout. Open plan workspace, glass partitions, professional lighting. " - "Carpet shows neat vacuum lines indicating recent professional cleaning. " - "No people, no equipment. Professional architectural photography, ultra-realistic." - ), - }, - { - "name": "hotels-inns", - "prompt": ( - "Elegant hotel corridor in a boutique upstate New York inn. Clean, plush patterned " - "carpet runner down the hallway with fresh vacuum lines. Warm sconce lighting, " - "wood paneling, framed art on walls. No people, no equipment. " - "Professional hospitality photography, ultra-realistic." - ), - }, - { - "name": "retail-showrooms", - "prompt": ( - "Wide shot of an upscale retail showroom or winery tasting room in the Finger Lakes. " - "Clean, rich carpet throughout, warm lighting, product displays on shelves. " - "Carpet looks freshly extracted — bright and spotless. " - "No people, no equipment. Professional commercial interior photography, ultra-realistic." - ), - }, - { - "name": "property-management", - "prompt": ( - "View across three clean apartment living rooms in sequence, each showing " - "spotlessly clean beige carpet with fresh vacuum lines after professional cleaning. " - "Bright, neutral interiors ready for new tenants. Natural light, no furniture, " - "no people, no equipment. Professional real estate photography, ultra-realistic." - ), - }, - { - "name": "commercial-overview", - "prompt": ( - "Professional carpet cleaning technician in a plain black shirt, shown from the side, " - "pushing a large industrial stand-up hot water extraction machine through a bright commercial " - "building lobby. The machine is a heavy commercial-grade upright extractor on wheels — " - "tall, wide cleaning head, long handle. Clean carpet visible. No steam, no water spraying, " - "no face visible. Professional editorial photography, ultra-realistic." - ), - }, -] - - -def generate(): - saved = [] - total = len(IMAGES) - for i, item in enumerate(IMAGES, 1): - out_path = os.path.join(OUT_DIR, f"{item['name']}.jpg") - print(f"[{i}/{total}] Generating {item['name']}...") - try: - resp = client.models.generate_images( - model="imagen-4.0-generate-001", - prompt=item["prompt"], - config=types.GenerateImagesConfig( - number_of_images=1, - aspect_ratio="4:3", - output_mime_type="image/jpeg", - safety_filter_level="block_low_and_above", - ), - ) - if resp.generated_images: - img_bytes = resp.generated_images[0].image.image_bytes - with open(out_path, "wb") as f: - f.write(img_bytes) - print(f" Saved {out_path} ({len(img_bytes)//1024}KB)") - saved.append(item["name"]) - else: - print(f" No image returned for {item['name']}") - except Exception as e: - print(f" Error on {item['name']}: {e}") - - return saved - - -if __name__ == "__main__": - saved = generate() - print(f"\nDone. {len(saved)}/{len(IMAGES)} images saved to assets/images/services/") - if saved: - print("Generated:", ", ".join(saved)) diff --git a/tools/gen-video-wan.py b/tools/gen-video-wan.py deleted file mode 100644 index 5c46300..0000000 --- a/tools/gen-video-wan.py +++ /dev/null @@ -1,223 +0,0 @@ -""" -Generate carpet cleaning reel clips via Wan 2.2 TI2V (text+image to video) through ComfyUI. -Uses FLUX-generated hero stills as input frames, animates each into a 3-5 second clip. -Run after gen-images-flux.py completes and images are converted to webp. - -Usage: - python3 tools/gen-video-wan.py - -Output: assets/videos/clips/*.mp4 — stitch with ffmpeg into final reel. -""" -import json, time, urllib.request, os, random, io - -COMFY = "http://localhost:8188" -HERO_DIR = os.path.join(os.path.dirname(os.path.dirname(__file__)), "assets", "images", "hero") -OUT_DIR = os.path.join(os.path.dirname(os.path.dirname(__file__)), "assets", "videos", "clips") -os.makedirs(OUT_DIR, exist_ok=True) - -WAN_MODEL = "Wan2.2-TI2V-5B-Q4_K_M.gguf" - -# Each clip: input still + motion prompt → 3-5 sec animated clip -# Order matches the reel sequence -CLIPS = [ - { - "filename": "clip-01-carpet.mp4", - "image": "hero-carpet-cleaning.webp", - "prompt": "slow dolly forward across clean plush carpet, gentle camera push toward the far wall, warm afternoon light, cinematic, smooth motion", - "frames": 49, # ~4 seconds at ~12fps - }, - { - "filename": "clip-02-stairs.mp4", - "image": "hero-stairs.webp", - "prompt": "slow pan upward along clean carpeted staircase, camera tilts up following the banister, soft natural light, cinematic motion", - "frames": 49, - }, - { - "filename": "clip-03-upholstery.mp4", - "image": "hero-upholstery.webp", - "prompt": "gentle push in toward clean linen sofa, shallow depth of field, warm light, slow cinematic camera movement", - "frames": 49, - }, - { - "filename": "clip-04-commercial.mp4", - "image": "hero-commercial.webp", - "prompt": "slow tracking shot moving forward down a clean corporate lobby, receding vanishing point, professional lighting, cinematic", - "frames": 49, - }, - { - "filename": "clip-05-floors.mp4", - "image": "hero-floors.webp", - "prompt": "floor-level drift forward along gleaming hardwood, camera slides smoothly down the hallway, natural light", - "frames": 49, - }, - { - "filename": "clip-06-clean-result.mp4", - "image": "hero-clean-result.webp", - "prompt": "slow rack focus across clean carpet fibers, foreground to background, raking natural light, macro detail, cinematic", - "frames": 49, - }, -] - - -def load_image_as_base64(image_path): - import base64 - with open(image_path, "rb") as f: - return base64.b64encode(f.read()).decode("utf-8") - - -def upload_image(image_path): - """Upload image to ComfyUI and return the filename it assigned.""" - import base64 - fname = os.path.basename(image_path) - with open(image_path, "rb") as f: - img_data = f.read() - boundary = "----FormBoundary" + str(random.randint(100000, 999999)) - body = ( - f"--{boundary}\r\n" - f'Content-Disposition: form-data; name="image"; filename="{fname}"\r\n' - f"Content-Type: image/webp\r\n\r\n" - ).encode() + img_data + f"\r\n--{boundary}--\r\n".encode() - req = urllib.request.Request( - f"{COMFY}/upload/image", - data=body, - headers={"Content-Type": f"multipart/form-data; boundary={boundary}"}, - ) - with urllib.request.urlopen(req) as resp: - result = json.loads(resp.read()) - return result["name"] - - -def build_workflow(image_name, prompt, frames, seed=None): - if seed is None: - seed = random.randint(0, 2**32) - return { - "1": { - "class_type": "UnetLoaderGGUF", - "inputs": {"unet_name": WAN_MODEL}, - }, - "2": { - "class_type": "CLIPLoader", - "inputs": { - "clip_name": "umt5_xxl_fp8_e4m3fn_scaled.safetensors", - "type": "wan", - }, - }, - "3": { - "class_type": "VAELoader", - "inputs": {"vae_name": "wan_2.1_vae.safetensors"}, - }, - "4": { - "class_type": "LoadImage", - "inputs": {"image": image_name}, - }, - "5": { - "class_type": "CLIPTextEncode", - "inputs": {"clip": ["2", 0], "text": prompt}, - }, - "6": { - "class_type": "CLIPTextEncode", - "inputs": {"clip": ["2", 0], "text": "blur, low quality, distortion, text, watermark, people, faces"}, - }, - "7": { - "class_type": "WanImageToVideo", - "inputs": { - "model": ["1", 0], - "clip": ["2", 0], - "vae": ["3", 0], - "image": ["4", 0], - "positive": ["5", 0], - "negative": ["6", 0], - "width": 832, - "height": 480, - "length": frames, - "batch_size": 1, - "seed": seed, - "steps": 20, - "cfg": 6.0, - "sampler_name": "uni_pc", - "scheduler": "simple", - "denoise": 1.0, - }, - }, - "8": { - "class_type": "SaveAnimatedWEBP", - "inputs": { - "images": ["7", 0], - "filename_prefix": "wan_lahr", - "fps": 16, - "lossless": False, - "quality": 85, - "method": "default", - }, - }, - } - - -def queue_prompt(workflow): - data = json.dumps({"prompt": workflow}).encode() - req = urllib.request.Request( - f"{COMFY}/prompt", data=data, - headers={"Content-Type": "application/json"} - ) - with urllib.request.urlopen(req) as resp: - return json.loads(resp.read())["prompt_id"] - - -def wait_for_result(prompt_id, timeout=1800): - start = time.time() - while time.time() - start < timeout: - try: - with urllib.request.urlopen(f"{COMFY}/history/{prompt_id}") as resp: - hist = json.loads(resp.read()) - if prompt_id in hist: - entry = hist[prompt_id] - if entry.get("status", {}).get("status_str") == "error": - print(f" ERROR: {entry['status'].get('messages', '')}", flush=True) - return None - for node_out in entry.get("outputs", {}).values(): - if "images" in node_out: - return node_out["images"] - if "gifs" in node_out: - return node_out["gifs"] - except Exception: - pass - time.sleep(8) - print(" waiting...", flush=True) - return None - - -def download_video(vid_info, out_path): - fname = vid_info["filename"] - subfolder = vid_info.get("subfolder", "") - img_type = vid_info.get("type", "output") - url = f"{COMFY}/view?filename={fname}&subfolder={subfolder}&type={img_type}" - with urllib.request.urlopen(url) as resp: - data = resp.read() - with open(out_path, "wb") as f: - f.write(data) - print(f" saved: {os.path.basename(out_path)} ({len(data)//1024}KB)", flush=True) - - -total = len(CLIPS) -for i, clip in enumerate(CLIPS): - print(f"\n[{i+1}/{total}] {clip['filename']}", flush=True) - image_path = os.path.join(HERO_DIR, clip["image"]) - if not os.path.exists(image_path): - print(f" SKIP: {image_path} not found", flush=True) - continue - print(f" uploading {clip['image']}...", flush=True) - image_name = upload_image(image_path) - workflow = build_workflow(image_name, clip["prompt"], clip["frames"]) - prompt_id = queue_prompt(workflow) - print(f" queued {prompt_id[:8]}...", flush=True) - results = wait_for_result(prompt_id) - if results: - out_path = os.path.join(OUT_DIR, clip["filename"]) - # rename .webp output to .mp4 for compatibility — or save as webp animation - out_path_webp = out_path.replace(".mp4", ".webp") - download_video(results[0], out_path_webp) - else: - print(f" FAILED", flush=True) - -print("\nAll clips done. Stitch with:") -print(f" ffmpeg -f concat -safe 0 -i tools/clip-list.txt -c copy assets/videos/hero-reel-flux.mp4") diff --git a/tools/gen-video.py b/tools/gen-video.py deleted file mode 100644 index e4f864e..0000000 --- a/tools/gen-video.py +++ /dev/null @@ -1,220 +0,0 @@ -""" -Lahr Carpet Cleaning — Veo hero video generator. -5 shots x 4s = 20s reel. Concatenated by ffmpeg into hero-reel.mp4. -Saves clips to: assets/videos/hero/clips/ -Saves final to: assets/videos/hero/hero-reel.mp4 -Run: python3 tools/gen-video.py -""" -import os -import sys -import time -import subprocess - -try: - from google import genai - from google.genai import types -except ImportError: - print("Installing google-genai...") - os.system(f"{sys.executable} -m pip install google-genai --quiet") - from google import genai - from google.genai import types - -API_KEY = os.environ.get("GEMINI_API_KEY", "AIzaSyB_1p8KvaT_rdNJGPs8HKk8bKsvUlcL6Kg") -BASE_DIR = os.path.dirname(os.path.dirname(__file__)) -OUT_DIR = os.path.join(BASE_DIR, "assets", "videos", "hero", "clips") -REEL_OUT = os.path.join(BASE_DIR, "assets", "videos", "hero", "hero-reel.mp4") -os.makedirs(OUT_DIR, exist_ok=True) - -client = genai.Client(api_key=API_KEY) - -SHOTS = [ - { - "name": "shot-01-door-opens", - "prompt": ( - "Cinematic low-angle wide shot. A solid wood front door of an upstate New York home opens " - "inward smoothly. Bright golden afternoon sunlight pours through the doorway onto a carpeted " - "entryway floor. Camera is at floor level, looking toward the door. The door swings open " - "fully revealing light. No people visible. Photorealistic, warm inviting light, slow motion." - ), - }, - { - "name": "shot-02-pan-to-stains", - "prompt": ( - "Slow cinematic camera pan from the front door entryway across a residential living room carpet " - "in an upstate New York home. The carpet shows visible dirt tracks, pet stains, and soiling " - "from daily use. Natural light. No people. Camera moves fluidly across the room revealing " - "the stained carpet. Photorealistic." - ), - }, - { - "name": "shot-03-stain-closeup", - "prompt": ( - "Close-up shot of a stained beige carpet with visible pet stains, mud, and dark soiling. " - "Camera slowly pushes in on the dirty area. Dramatic side lighting emphasises the stain depth " - "and texture. Slow motion. Ultra-realistic macro photography style." - ), - }, - { - "name": "shot-04-extraction-carpet", - "prompt": ( - "Cinematic slow-motion wide shot: a large industrial stand-up hot water extraction machine " - "being pushed steadily forward across a beige residential carpet. The machine is a tall " - "professional-grade upright extractor — heavy-duty, commercial size, on wheels, with a wide " - "cleaning head at the base and an upright handle. No steam, no spraying water, no visible " - "liquid anywhere on the machine exterior. The carpet behind the machine transitions from dirty " - "and matted to bright, clean, and fluffy as it passes. Warm natural room light. Photorealistic." - ), - }, - { - "name": "shot-05-extraction-couch", - "prompt": ( - "Close-up cinematic shot of a professional technician's gloved hand holding a small flat " - "upholstery cleaning attachment tool, pressing it firmly against a dirty grey sofa cushion " - "and sliding it slowly across the fabric. The fabric visibly brightens and lifts as the tool " - "moves. No water pours out — suction draws moisture into the tool. Slow motion, natural light. " - "Photorealistic." - ), - }, - { - "name": "shot-06-extraction-stairs", - "prompt": ( - "Cinematic shot of a professional technician's hands using a compact portable upright carpet " - "cleaner on a carpeted staircase — pushing the machine up a stair tread step by step. Each " - "tread brightens and looks freshly cleaned as the machine passes. No water pours out. Clean " - "bright carpet revealed on each step. Slow motion, warm interior light. Photorealistic." - ), - }, - { - "name": "shot-07-office-entryway", - "prompt": ( - "Wide cinematic shot of a clean professional office building entryway with commercial grade " - "carpet. Modern corporate interior, glass doors, professional lighting. No people. Camera " - "slowly pushes forward through the entry. Photorealistic." - ), - }, - { - "name": "shot-08-showroom", - "prompt": ( - "Wide cinematic shot of an upscale retail showroom or winery tasting room in the Finger Lakes " - "region. Rich carpet throughout, warm interior lighting, product displays. No people. Camera " - "glides forward through the space. Photorealistic, luxurious atmosphere." - ), - }, - { - "name": "shot-09-technician-unloading", - "prompt": ( - "Wide shot of a professional carpet cleaning technician wearing a plain black shirt with no logo, " - "rolling a large industrial stand-up hot water extraction machine out of a white service van " - "parked in a residential driveway in upstate New York. The machine is a heavy commercial-grade " - "upright extractor on wheels — tall, industrial size. Autumn trees in background, bright day. " - "Technician shown from side or behind, no face visible. Photorealistic." - ), - }, -] - -MODELS = [ - "veo-2.0-generate-001", - "veo-3.0-generate-001", -] - -def poll(operation, timeout=420): - elapsed = 0 - while not operation.done: - if elapsed >= timeout: - print(" Timed out.") - return None - print(f" Waiting... ({elapsed}s)") - time.sleep(15) - elapsed += 15 - operation = client.operations.get(operation) - return operation - -def download_video(video, out_path): - video_bytes = None - try: - video_bytes = client.files.download(file=video) - except Exception: - pass - if video_bytes: - with open(out_path, "wb") as f: - f.write(video_bytes) - return True - if hasattr(video, "uri") and video.uri: - import urllib.request - uri = video.uri + ("&" if "?" in video.uri else "?") + f"key={API_KEY}" - print(f" Fetching via URI...") - urllib.request.urlretrieve(uri, out_path) - return True - return False - -def generate(): - saved = [] - for item in SHOTS: - out_path = os.path.join(OUT_DIR, f"{item['name']}.mp4") - print(f"\n[{SHOTS.index(item)+1}/{len(SHOTS)}] Generating {item['name']}...") - - done = False - for model in MODELS: - try: - print(f" Model: {model}") - op = client.models.generate_videos( - model=model, - prompt=item["prompt"], - config=types.GenerateVideosConfig( - aspect_ratio="16:9", - resolution="720p", - duration_seconds=6, - number_of_videos=1, - ), - ) - op = poll(op) - if op is None: - continue - if op.response and op.response.generated_videos: - vid = op.response.generated_videos[0].video - if download_video(vid, out_path): - size_kb = os.path.getsize(out_path) // 1024 - print(f" Saved {out_path} ({size_kb}KB)") - saved.append(out_path) - done = True - break - else: - print(f" Download failed for {model}") - else: - print(f" No video from {model}") - except Exception as e: - print(f" Error with {model}: {e}") - - if not done: - print(f" FAILED: {item['name']}") - - return saved - -def concat(clips): - if len(clips) < 2: - print("Not enough clips to concatenate.") - return - list_file = os.path.join(OUT_DIR, "concat.txt") - with open(list_file, "w") as f: - for c in clips: - f.write(f"file '{c}'\n") - print(f"\nConcatenating {len(clips)} clips into hero-reel.mp4...") - result = subprocess.run( - ["ffmpeg", "-y", "-f", "concat", "-safe", "0", "-i", list_file, - "-c:v", "libx264", "-crf", "22", "-preset", "fast", - "-movflags", "+faststart", REEL_OUT], - capture_output=True, text=True - ) - if result.returncode == 0: - size_kb = os.path.getsize(REEL_OUT) // 1024 - print(f" Saved {REEL_OUT} ({size_kb}KB)") - else: - print(f" ffmpeg error: {result.stderr[-300:]}") - -if __name__ == "__main__": - clips = generate() - if clips: - concat(clips) - print(f"\nDone. {len(clips)}/5 clips generated.") - if len(clips) == 5: - print("Hero reel ready: assets/videos/hero/hero-reel.mp4") diff --git a/tools/pipeline.html b/tools/pipeline.html deleted file mode 100644 index 3cdc88f..0000000 --- a/tools/pipeline.html +++ /dev/null @@ -1,151 +0,0 @@ - - - - -Image Gen Pipeline - - - - -

Lahr Carpet Cleaning — Image Generation Pipeline

- -

Model Stack

-
-
-
Prompt
-
gen-images-flux.py
-
28 images (16 hero + 12 svc)
-
-
-
-
API
-
ComfyUI
-
localhost:8188
-
-
-
-
UNet (model)
-
FLUX.1 Schnell
-
Q8_0 GGUF · 12GB · 12B params
-
-
-
-
Sampler
-
KSampler
-
4 steps · euler · cfg=1.0
-
-
-
-
Decode
-
FLUX AE
-
ae.safetensors · 108MB
-
-
-
-
Output
-
JPEG → WebP
-
1024×576 · q92 → q80
-
-
- -

Text Encoders

-
-
-
CLIP-L
-
clip_l.safetensors
-
235MB · short prompts
-
-
+
-
-
T5-XXL fp8
-
t5xxl_fp8_e4m3fn
-
4.6GB · long prompt understanding
-
-
-
-
Node
-
DualCLIPLoader
-
type: flux
-
-
- -

Hardware

-
-
GPU
AMD Radeon (2GB VRAM)
-
Execution
CPU only (VRAM too small)
-
Speed
~4 min / image
-
Total ETA
~1h50m for 28 images
-
- -

Model Files on Disk

-
-
UNet
flux1-schnell-Q8_0.gguf · 12GB
-
T5-XXL
t5xxl_fp8_e4m3fn.safetensors · 4.6GB
-
CLIP-L
clip_l.safetensors · 235MB
-
VAE
ae.safetensors · 108MB (official BFL)
-
- -

Generation Progress

-
-
4 / 28
-
14% — reload page to update
-
- -

Prompt Strategy

-
-
Low-angle perspective (35mm / 24mm lens specified in prompt)
-
Carpet/floor texture sharp in foreground — subject recedes into bokeh
-
Shallow depth of field + vanishing point for depth cues
-
No people, no machines, no equipment
-
Finger Lakes / upstate NY context for residential scenes
-
-
Previous model: RealVisXL V5.0 fp16 (SDXL 3.5B) — rejected: flat angles, poor depth
-
Current model: FLUX.1 Schnell (12B transformer) — better spatial understanding
-
- - - diff --git a/tools/review-all.html b/tools/review-all.html deleted file mode 100644 index 55b29cc..0000000 --- a/tools/review-all.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - -Image Review — All 28 - - - - -
-

Lahr Carpet Cleaning — Image Review

-
Model: FLUX.1 Schnell Q8_0 GGUF  ·  4 steps, cfg=1.0, euler/simple  ·  1024×576 → WebP  ·  28 images total
-
- - -
- - -
- -
- -
-
-
FLUX.1 Schnell · Q8_0 GGUF · 4 steps · euler · cfg=1.0
-
-
-
-
- - - - diff --git a/tools/review-heroes.html b/tools/review-heroes.html deleted file mode 100644 index 6a3bd0e..0000000 --- a/tools/review-heroes.html +++ /dev/null @@ -1,35 +0,0 @@ - - - - -Hero Image Review - - - -

Hero Images — RealVisXL V5.0 (15 of 16)

-
-

hero-carpet-cleaning

-

hero-upholstery

-

hero-floors

-

hero-area-rugs

-

hero-add-ons

-

hero-commercial

-

hero-offices

-

hero-vacation-rentals

-

hero-hotels

-

hero-retail

-

hero-property-management

-

hero-about

-

hero-service-area

-

hero-living-room

-

hero-clean-result

-
- - diff --git a/tools/wan-test-v2.py b/tools/wan-test-v2.py deleted file mode 100644 index cb04e57..0000000 --- a/tools/wan-test-v2.py +++ /dev/null @@ -1,125 +0,0 @@ -"""Single test clip — corrected WanImageToVideo workflow.""" -import json, time, urllib.request, os, random - -COMFY = "http://localhost:8188" -IMAGE_PATH = "assets/images/hero/hero-carpet-cleaning.webp" -OUT_DIR = "assets/videos/clips" -os.makedirs(OUT_DIR, exist_ok=True) - - -def upload_image(image_path): - fname = os.path.basename(image_path) - with open(image_path, "rb") as f: - img_data = f.read() - boundary = "----FormBoundary123456" - body = ( - f"--{boundary}\r\n" - f'Content-Disposition: form-data; name="image"; filename="{fname}"\r\n' - f"Content-Type: image/webp\r\n\r\n" - ).encode() + img_data + f"\r\n--{boundary}--\r\n".encode() - req = urllib.request.Request( - f"{COMFY}/upload/image", data=body, - headers={"Content-Type": f"multipart/form-data; boundary={boundary}"}, - ) - with urllib.request.urlopen(req) as resp: - result = json.loads(resp.read()) - print(f" uploaded: {result['name']}") - return result["name"] - - -def build_workflow(image_name, prompt, frames=25): - # WanImageToVideo is a conditioning node, NOT a sampler. - # outputs: [0]=positive CONDITIONING, [1]=negative CONDITIONING, [2]=latent LATENT - # start_image is optional IMAGE — anchors first frame. - return { - "1": {"class_type": "UnetLoaderGGUF", "inputs": {"unet_name": "Wan2.2-TI2V-5B-Q4_K_M.gguf"}}, - "2": {"class_type": "CLIPLoader", "inputs": {"clip_name": "umt5_xxl_fp8_e4m3fn_scaled.safetensors", "type": "wan"}}, - "3": {"class_type": "VAELoader", "inputs": {"vae_name": "wan_2.1_vae.safetensors"}}, - "4": {"class_type": "LoadImage", "inputs": {"image": image_name}}, - "5": {"class_type": "CLIPTextEncode", "inputs": {"clip": ["2", 0], "text": prompt}}, - "6": {"class_type": "CLIPTextEncode", "inputs": {"clip": ["2", 0], "text": "blur, low quality, distortion, text, watermark, people, jitter"}}, - "7": { - "class_type": "WanImageToVideo", - "inputs": { - "positive": ["5", 0], - "negative": ["6", 0], - "vae": ["3", 0], - "start_image": ["4", 0], - "width": 832, "height": 480, "length": frames, "batch_size": 1, - }, - }, - "8": { - "class_type": "KSampler", - "inputs": { - "model": ["1", 0], - "positive": ["7", 0], - "negative": ["7", 1], - "latent_image": ["7", 2], - "seed": 42, "steps": 20, "cfg": 6.0, - "sampler_name": "uni_pc", "scheduler": "simple", "denoise": 1.0, - }, - }, - # VAEDecodeTiled handles video (5D) latents — VAEDecode only handles images (4D) - "9": {"class_type": "VAEDecodeTiled", "inputs": {"samples": ["8", 0], "vae": ["3", 0], "tile_size": 512, "overlap": 64, "temporal_size": 64, "temporal_overlap": 8}}, - "10": { - "class_type": "SaveAnimatedWEBP", - "inputs": {"images": ["9", 0], "filename_prefix": "wan_test", "fps": 12, "lossless": False, "quality": 85, "method": "default"}, - }, - } - - -def queue_prompt(workflow): - data = json.dumps({"prompt": workflow}).encode() - req = urllib.request.Request(f"{COMFY}/prompt", data=data, headers={"Content-Type": "application/json"}) - with urllib.request.urlopen(req) as resp: - return json.loads(resp.read())["prompt_id"] - - -def wait_for_result(prompt_id, timeout=1800): - start = time.time() - while time.time() - start < timeout: - with urllib.request.urlopen(f"{COMFY}/history/{prompt_id}") as resp: - hist = json.loads(resp.read()) - if prompt_id in hist: - entry = hist[prompt_id] - if entry.get("status", {}).get("status_str") == "error": - print(f" ERROR: {entry['status'].get('messages', '')}") - return None - for node_out in entry.get("outputs", {}).values(): - if "gifs" in node_out: - return node_out["gifs"] - if "images" in node_out: - return node_out["images"] - elapsed = int(time.time() - start) - print(f" waiting... {elapsed}s", flush=True) - time.sleep(15) - return None - - -def download_output(vid_info, out_path): - fname = vid_info["filename"] - subfolder = vid_info.get("subfolder", "") - img_type = vid_info.get("type", "output") - url = f"{COMFY}/view?filename={fname}&subfolder={subfolder}&type={img_type}" - with urllib.request.urlopen(url) as resp: - data = resp.read() - with open(out_path, "wb") as f: - f.write(data) - print(f" saved: {out_path} ({len(data)//1024}KB)") - - -print("[TEST v2] WanImageToVideo → KSampler → VAEDecode → SaveAnimatedWEBP") -image_name = upload_image(IMAGE_PATH) -workflow = build_workflow( - image_name, - "slow dolly forward across clean plush cream carpet, gentle camera push toward the far wall, warm afternoon light, cinematic smooth motion", - frames=9, -) -prompt_id = queue_prompt(workflow) -print(f" queued: {prompt_id}") -results = wait_for_result(prompt_id) -if results: - download_output(results[0], f"{OUT_DIR}/test-clip-01.webp") - print("SUCCESS") -else: - print("FAILED")