Monorepo for Aesthetic.Computer aesthetic.computer
4
fork

Configure Feed

Select the types of activity you want to include in your feed.

lacma-2026 demo: fix audio/video sync + longer 8-bar waltz

Root cause: ac-native-macos-core captures frames at ~84.35 fps, but
demo.sh encodes at exactly 60 fps — so the MKV played video 40%
slower than real-time while audio ran at wall-clock speed. Result:
notepat key-highlight frames and waltz audio drifted apart over
~15 seconds.

Fix: re-encoded from the raw PNG frames in /tmp/ac-demo-final/ using
the actual capture fps (computed from frame_count / mix.wav_duration
= 1664 / 19.727 = 84.352 fps) as the -framerate input, then resample
to 60 fps for delivery with -vf fps=60. Output plays at real-time
and audio/video stay locked.

Also ran with BARS=8 (was 4) for a fuller Viennese waltz — the extra
three bars let the groove establish and breathe instead of cutting
off 5 seconds in. New fresh-demo.mp4 is 19.73s (was 15.77s).

Full composed video is now 21.25s:
0:00 – 2:00 boot + "hi @jeffrey" TTS
2:00 – 3:70 prompt piece typing "notepat"
3:70 – 5:00 notepat loading
5:00 – 19:73 8-bar Viennese waltz
19:73 – 21:25 shutdown strobe

Narration retimed (5 cues at 0:02.5, 0:05, 0:08, 0:12, 0:16) to
land inside the longer instrument section; boot and shutdown still
unnarrated so the native TTS / chime can stand on their own.

Desktop preview copies refreshed at ~/Desktop/lacma-videos/.
Cachebuster v=6 → v=7.

Note: the sync issue lives in demo.sh in the nervous-newton-134547
worktree (owned by another thread). Fix described here should be
merged into that script as `-framerate $(echo "scale=4; $N_FRAMES /
$MIX_DUR" | bc) -vf fps=60` so future captures don't need manual
re-encoding.

+10 -10
+5 -5
grants/lacma-2026/demo-narration.md
··· 1 - # title: AC Native — fresh demo narration (boot → prompt → notepat → shutdown) 1 + # title: AC Native — synced demo narration (boot → prompt → notepat → shutdown) 2 2 # voice: Daniel 3 3 # rate: 175 4 4 # 5 5 # Subtitles narrate only from the prompt onward. Boot (0:00–0:02) has its 6 - # own "hi @jeffrey, enjoy Los Angeles!" TTS baked in; shutdown (0:15.77+) 6 + # own "hi @jeffrey, enjoy Los Angeles!" TTS baked in; shutdown (0:19.7+) 7 7 # will have its own "bye @handle" TTS + chime from ac-native once 8 8 # hardware-recaptured. 9 9 10 10 [0:02.5] At the prompt — type a piece name. 11 11 [0:05] notepat: the default instrument. 12 12 [0:08] Thirty-two voices at 192 kilohertz. 13 - [0:11] Chord colors track what you play. 14 - [0:13] A Viennese waltz, played live. 15 - [0:16] --silence-- 13 + [0:12] Chord colors track what you play. 14 + [0:16] A Viennese waltz, played live. 15 + [0:19] --silence--
+5 -5
system/public/lacma-2026/index.html
··· 617 617 <div class="demo-pair"> 618 618 <div class="demo-frame"> 619 619 <video id="demo-video" 620 - poster="https://assets.aesthetic.computer/lacma-2026/ac-native-demo-narrated-poster.jpg?v=6" 620 + poster="https://assets.aesthetic.computer/lacma-2026/ac-native-demo-narrated-poster.jpg?v=7" 621 621 autoplay muted loop playsinline controls preload="metadata"> 622 - <source src="https://assets.aesthetic.computer/lacma-2026/ac-native-demo-narrated.webm?v=6" type="video/webm"> 623 - <source src="https://assets.aesthetic.computer/lacma-2026/ac-native-demo-narrated.mp4?v=6" type="video/mp4"> 624 - Your browser doesn't support HTML5 video. <a href="https://assets.aesthetic.computer/lacma-2026/ac-native-demo-narrated.mp4?v=6">Download the MP4</a>. 622 + <source src="https://assets.aesthetic.computer/lacma-2026/ac-native-demo-narrated.webm?v=7" type="video/webm"> 623 + <source src="https://assets.aesthetic.computer/lacma-2026/ac-native-demo-narrated.mp4?v=7" type="video/mp4"> 624 + Your browser doesn't support HTML5 video. <a href="https://assets.aesthetic.computer/lacma-2026/ac-native-demo-narrated.mp4?v=7">Download the MP4</a>. 625 625 </video> 626 626 </div> 627 627 <div class="demo-hardware"> ··· 646 646 const tabs = document.querySelectorAll(".demo-tab"); 647 647 const video = document.getElementById("demo-video"); 648 648 const ASSET_BASE = "https://assets.aesthetic.computer/lacma-2026"; 649 - const V = "?v=6"; // bump when videos are re-rendered 649 + const V = "?v=7"; // bump when videos are re-rendered 650 650 tabs.forEach(tab => tab.addEventListener("click", () => { 651 651 if (tab.classList.contains("active")) return; 652 652 tabs.forEach(t => t.classList.remove("active"));