Read WebP/JPEG comps through a sibling PNG cache instead of forcing PNG

comp-spec, comp-diff, build-phase, font-match, and generate-image now decode any comp raster via loadRaster(), converting non-PNG input to <file>.png next to the source. Sessions used to hit 'not a PNG' and rewrite the .webp in place with PNG bytes, which broke transcript replay (a later step rewrites the comp beyond the cut) and left a mislabeled file.

AI-assisted (Claude Code).
This commit is contained in:
Paul Bakaus
2026-08-28 06:13:59 +05:00
committed by Abdul Wahab
parent 95294e464a
commit 48350ffb14
7 changed files with 63 additions and 15 deletions
+3 -3
View File
@@ -38,7 +38,7 @@
import fs from 'node:fs';
import path from 'node:path';
import { fileURLToPath } from 'node:url';
import { decodePng, encodePng } from './lib/png.mjs';
import { decodePng, encodePng, loadRaster } from './lib/png.mjs';
import { crop, resize, fillRect, strokeRect, drawLabel, drawText } from './lib/raster.mjs';
import { dominantColors, horizontalBands, detailGrid } from './lib/image-metrics.mjs';
@@ -273,7 +273,7 @@ async function main() {
if (!spec) { console.error(`comp-spec: no spec at ${specPath}`); process.exit(1); }
const region = spec.regions.find((r) => r.id === arg('crop'));
if (!region) { console.error(`comp-spec: no region ${arg('crop')}; ids: ${spec.regions.map((r) => r.id).join(', ')}`); process.exit(1); }
const comp = decodePng(fs.readFileSync(spec.comp));
const comp = loadRaster(spec.comp).image;
let c = region.medium === 'raster' && !flag('raw') ? plateReference(comp, spec, region) : crop(comp, region.px.x, region.px.y, region.px.w, region.px.h);
const scale = parseFloat(arg('scale', '1'));
if (scale > 1) c = resize(c, c.width * scale, c.height * scale);
@@ -290,7 +290,7 @@ async function main() {
process.exit(1);
}
let comp;
try { comp = decodePng(fs.readFileSync(compPath)); } catch (e) { console.error(`comp-spec: cannot read ${compPath}: ${e.message}`); process.exit(1); }
try { comp = loadRaster(compPath).image; } catch (e) { console.error(`comp-spec: cannot read ${compPath}: ${e.message}`); process.exit(1); }
if (flag('grid')) {
fs.mkdirSync(path.dirname(GRID_PATH), { recursive: true });