70d48f9b11b70e24faea0bf73b15647fec624810
CI / test (push) Has been cancelled
The .bin file for portrait orientation was packed as 480-pixel rows × 800 rows, but firmware streams blindly at 800×480 (the EPD's native scan order). Both layouts hit the same 192000-byte total, so the size guard in epd_draw_image_with_border passed and the row-stride mismatch showed up on the panel as the photo tiling/repeating. Renderer now rotates the cropped photo 90° CW before dithering when orientation is portrait, so the packed bytes always match the EPD's 800-pixel scan order. Firmware stays orientation-unaware (per the "ESP32 never transforms images" decision in webApp/CLAUDE.md). Preview decoder rotates -90° on the way out so the in-browser frame preview stays upright. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Description
pictureFrame web app — Symfony + Vue SPA
Languages
Python
42.9%
PHP
20%
HTML
12.5%
TypeScript
11.7%
Vue
7.6%
Other
5.3%