# Cody Image Converter test report Date: 2026-09-14 ## Automated checks - `node --check app.js`: passed. - Static package inspection: passed. Deployable files are at this folder root. - No analytics URL, tracking script, Node server, database, or upload endpoint is present in the package. ## Browser checks - Loaded over HTTP at desktop size and confirmed the page metadata, accessible controls, and initial hidden status bar. - Converted a real transparent SVG to JPEG. The result was rendered as 320 x 180 and reported its file size. - Converted the same file to PNG at a requested width of 160. The result was 160 x 90, confirming preserved proportions; reading the result preview pixels found alpha `0` at a transparent corner. - Exercised the individual Download and Download ZIP controls. - Loaded the page at a 390 x 844 mobile viewport. The document had no horizontal overflow (`scrollWidth` 375, `clientWidth` 375). - Source checks passed with `node --check app.js` and VS Code diagnostics reported no errors in the edited source files. - Selected a real PDF in the PDF reducer, ran the reduction, and received a downloadable `test-document-reduced.pdf` result. The 970 B fixture reported `no reduction available`, correctly reflecting that its metadata was too small to offset the rebuilt structure. - With stream compression and metadata cleanup enabled, the same PDF produced a valid 549 B result from a 970 B input in the browser test. - Selected the same PDF twice in Merge PDFs mode and received a downloadable `cody-merged-document.pdf` result containing the selected pages in order. The layout includes a mobile breakpoint at 760px and a narrow-phone breakpoint at 420px. Cancellation and damaged-file handling are implemented in the conversion loop; they should be included in a manual acceptance pass with a damaged fixture. ## Important limitation Actual canvas encoding is delegated to the browser. PNG, JPEG, and WebP are broadly supported in current desktop and mobile browsers. AVIF output works only where `HTMLCanvasElement.toBlob('image/avif')` is implemented; otherwise the app reports a clear encoding error rather than returning a differently formatted file. A browser with AVIF canvas encoding should be used for AVIF exports. PDF reduction cannot shrink embedded JPEG/PNG photographs without re-encoding them; those files may report no reduction or become slightly larger after structural rewriting. ## Manual acceptance matrix - JPEG output: verify preview, dimensions, size, and individual download. - PNG output: verify transparency is retained. - WebP output: verify preview, dimensions, size, and download. - AVIF output: verify in a browser that supports AVIF canvas encoding; otherwise verify the visible failure message. - Resize: set width and verify the displayed height preserves the source ratio. - Batch and ZIP: select at least two valid images, convert, download each file, and open the ZIP. - Failure handling: include a renamed non-image file and a damaged image; verify it is skipped or shown as a failed row without stopping other files.