← back to CelebritySignatures
QR points at public Kamatera host via short /k/<cat> route; verified all 6 decode
ac66a5d90cd7199211324046c05c7fd0d92f1c0b · 2026-06-18 17:15:57 -0700 · Steve
Files touched
M output/collage-declaration-of-independence.pngM output/collage-hollywood.pngM output/collage-movies-classic.pngM output/collage-politics.pngM output/collage-sports.pngM output/collage-tv.pngM scripts/build-collages.pyM server.js
Diff
commit ac66a5d90cd7199211324046c05c7fd0d92f1c0b
Author: Steve <steve@designerwallcoverings.com>
Date: Thu Jun 18 17:15:57 2026 -0700
QR points at public Kamatera host via short /k/<cat> route; verified all 6 decode
---
output/collage-declaration-of-independence.png | Bin 648537 -> 648469 bytes
output/collage-hollywood.png | Bin 799147 -> 798780 bytes
output/collage-movies-classic.png | Bin 834681 -> 834063 bytes
output/collage-politics.png | Bin 588745 -> 588463 bytes
output/collage-sports.png | Bin 355414 -> 355659 bytes
output/collage-tv.png | Bin 169782 -> 169526 bytes
scripts/build-collages.py | 8 ++++----
server.js | 11 ++++++++++-
8 files changed, 14 insertions(+), 5 deletions(-)
diff --git a/output/collage-declaration-of-independence.png b/output/collage-declaration-of-independence.png
index e03c263..168520e 100644
Binary files a/output/collage-declaration-of-independence.png and b/output/collage-declaration-of-independence.png differ
diff --git a/output/collage-hollywood.png b/output/collage-hollywood.png
index 77c8cce..3def647 100644
Binary files a/output/collage-hollywood.png and b/output/collage-hollywood.png differ
diff --git a/output/collage-movies-classic.png b/output/collage-movies-classic.png
index 1be8e4f..dd91d64 100644
Binary files a/output/collage-movies-classic.png and b/output/collage-movies-classic.png differ
diff --git a/output/collage-politics.png b/output/collage-politics.png
index aeefd2a..ccf1f54 100644
Binary files a/output/collage-politics.png and b/output/collage-politics.png differ
diff --git a/output/collage-sports.png b/output/collage-sports.png
index a844c9f..d02524b 100644
Binary files a/output/collage-sports.png and b/output/collage-sports.png differ
diff --git a/output/collage-tv.png b/output/collage-tv.png
index 69b34d2..cf4e5b5 100644
Binary files a/output/collage-tv.png and b/output/collage-tv.png differ
diff --git a/scripts/build-collages.py b/scripts/build-collages.py
index 26b0e27..40648dd 100644
--- a/scripts/build-collages.py
+++ b/scripts/build-collages.py
@@ -30,9 +30,9 @@ CACHE = os.path.join(ROOT, "tmp_collage_cache")
OUT = os.path.join(ROOT, "output")
UA = "CelebritySignatures-research/1.0 (steve@designerwallcoverings.com)"
COMMONS = "https://commons.wikimedia.org/w/api.php"
-# Host the QR code points at. Defaults to the LAN IP so phone scans work on the
-# same network; override with PUBLIC_BASE_URL=https://… when this ever deploys.
-BASE_URL = os.environ.get("PUBLIC_BASE_URL", "http://192.168.1.53:9920").rstrip("/")
+# Host the QR code points at — the public Kamatera deployment so a phone scanning
+# the printed mural resolves the named "key" from anywhere (not just the LAN).
+BASE_URL = os.environ.get("PUBLIC_BASE_URL", "https://celebrity.designerwallcoverings.com").rstrip("/")
os.makedirs(CACHE, exist_ok=True)
os.makedirs(OUT, exist_ok=True)
@@ -227,7 +227,7 @@ def build(category, rows):
# centred in the grid — same size, same placement as every signature. It links
# to the named "key" version. render() uses the same cols formula, so inserting
# at this index lands the QR in the middle row/column of the laid-out grid.
- qr_url = f"{BASE_URL}/output/collage-{safe}-named.png"
+ qr_url = f"{BASE_URL}/k/{safe}" # short → low-density → scans at sig size
qr_cell = ("", make_qr_cell(qr_url))
total = len(cells) + 1
cols = min(10, max(1, round(total ** 0.5)))
diff --git a/server.js b/server.js
index cf5735a..610ebf6 100644
--- a/server.js
+++ b/server.js
@@ -7,13 +7,22 @@ import { fileURLToPath } from 'node:url';
const ROOT = fileURLToPath(new URL('.', import.meta.url));
const PORT = process.env.PORT || 9920;
-const TYPES = { '.html': 'text/html', '.js': 'text/javascript', '.css': 'text/css', '.json': 'application/json', '.svg': 'image/svg+xml' };
+const TYPES = {
+ '.html': 'text/html', '.js': 'text/javascript', '.css': 'text/css',
+ '.json': 'application/json', '.svg': 'image/svg+xml',
+ '.png': 'image/png', '.jpg': 'image/jpeg', '.jpeg': 'image/jpeg',
+ '.webp': 'image/webp', '.gif': 'image/gif', '.ico': 'image/x-icon',
+};
createServer(async (req, res) => {
try {
let path = decodeURIComponent(req.url.split('?')[0]);
if (path === '/') path = '/public/index.html';
if (path === '/api/signatures') path = '/data/celebrity_signatures.json';
+ // Short QR target: /k/<cat> -> the named "key" mural. A short encoded URL keeps
+ // the signature-sized QR low-density so it scans cleanly off a printed wall.
+ const k = path.match(/^\/k\/([a-z0-9-]+)$/);
+ if (k) path = `/output/collage-${k[1]}-named.png`;
const file = join(ROOT, path);
if (!file.startsWith(ROOT)) { res.writeHead(403).end('forbidden'); return; }
const body = await readFile(file);
← a8e8de1 Murals: QR is now a signature-sized centre cell (drop panel/
·
back to CelebritySignatures
·
Mural QR: B+C — functional-size centre QR + short /k/<code> 84da440 →