Monorepo for Aesthetic.Computer aesthetic.computer

recap: ep03 audience + per-segment chrome solver + colored-pencil pass master

New audience jeffrey-24h-2026-05-08 (1:30 cut, 7 chapters: title, verovio_sheet, voice_glass, release_093, calarts_dossier, marketing_graduation, vfc_piece). REAL preamble switched to colored-pencil + gouache on cream paper (Hockney register), strict laptop-from-back rule, no faux interfaces, no faux remediated imagery — any embedded artifact must come from a passed-in reference image. Multi-ref support in jeffrey-photos.mjs feeds per-segment extraRefs to gpt-image-2 alongside the standard SHOOT/SELFIE identity refs (vfc painting + calarts header bake into the scene faithfully). Pipeline expanded with three new steps: - 3.3 cv — debug-composition.py detects face + laptop + shirt-logo bboxes (Haar + chartreuse-color threshold + dark-rect fallback) - 3.4 layout — bin/layout.mjs picks per-segment chrome positions (chapter / subtitle / piano roll) by scoring candidate rectangles against avoid-zones - 3.45 qrs — bin/qrs.mjs renders per-chapter QR codes pointing at https://tangled.sh/aesthetic.computer/core/commit/<hash> Bottom-chrome layout (no bounding-box overlaps): chapter prompt top-left ("Aesthetic.Computer" with pink dot, purple letters) + larger commit-hash text under top-right QR + per-segment subtitle pill (reads from layouts.json) + segmented progress bar above the piano keys + full-width 4-octave piano roll flush bottom + side PALS watermarks rotated 90° on left + right edges with chapter-color rainbow drop shadow. Waltz now morphs through audience.waltz.morph[] — sections with their own progression / scale / density / transpose, distributed by weight. Piano-roll overlay extended to C2-B5 (4 octaves) so bass notes register, and is positioned per-segment via layouts.json. ffmpeg compose detects ffmpeg-full at /opt/homebrew/opt/ffmpeg-full/bin (Homebrew's plain ffmpeg ships without libass on macOS now). Shoot-2k references swap in for the original 24-MB shoot JPGs — gpt-image-2 multipart uploads were tripping "fetch failed" with the full-size ones; 2-MB downscales work reliably and identity grounding is unchanged. (Files at portraits/jeffrey/corpus/shoot-2k/ are gitignored alongside the rest of corpus/.) 73h cut got a tiny update from a parallel session — chat segment split into 14a clock / 14b system + chapter-count fix. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>