// Audience config: general (public-facing 48-hour recap).
// Voice: jeffrey-pvc (default in /api/say). Style: lowercase, calm,
// descriptive. No nicknames, no rhyme — accessible to anyone who has
// never heard of aesthetic computer.
//
// `narration` is the verbatim text POSTed to /api/say. Markers in
// `segments` are matched (case-insensitive, punctuation-stripped)
// against whisper's word-level transcript, so each marker phrase must
// appear verbatim in the narration.
export const PALETTE = {
bg: "#0c1430",
accent: "#ff8a3d",
cyan: "#70f0e0",
lime: "#a0f070",
magenta: "#ff70d0",
yellow: "#ffd860",
cream: "#fcf7c5",
off: "#ffffffcc",
dim: "#7886b0",
};
export const audience = {
name: "general",
handle: "@everyone",
voice: { provider: "jeffrey", voice: "neutral:0" },
narration: `hey everybody, here's a quick window into the last two days at aesthetic computer. the headline this round is yergersnap — a tiny mac menubar app that snaps an iphone screen into a paintable canvas, with percussion sounds on every click and an icon painted by julia yerger. on the keyboard side, notepat picked up two new bandmates — piano man and sample sally — characters with eye-tracking pupils that follow whichever notes you play. underneath the hood, the whole audio engine moved off karplus-strong synthesis onto a salamander grand piano sample bank, so chords actually breathe now. on the native side, ac-os gained bootpics — webcam snapshots taken at boot and shutdown, a tiny diary of every session. the say piece now logs every utterance to a database, so we can replay what the computer has said over time. a new papers pipeline grew around penrose, a constraint-based diagram language for academic figures. through it all, the oven kept compiling pdfs in the background. that's the week — thanks for watching.`,
// Whisper renders these dictionary-style; rewrite the displayed subtitles.
// Order matters — longer/multi-word fixes first so they win before
// single-word fixes can rewrite a substring.
transcriptFixes: {
"carpless strong synthesis": "karplus-strong synthesis",
"carpless strong": "karplus-strong",
"saypiece": "say piece",
"paper's pipeline": "papers pipeline",
"Yerger Snap": "yergersnap",
"Yergersnap": "yergersnap",
"bootpicks": "bootpics",
"boot pics": "bootpics",
"BootPics": "bootpics",
"Notepad": "notepat",
"ACOs": "ac-os",
"ACOS": "ac-os",
"AC OS": "ac-os",
"menu bar": "menubar",
"Sample Sally": "sample sally",
"Piano Man": "piano man",
},
segments: [
{ name: "01_title", marker: "hey everybody" },
{ name: "02_yergersnap", marker: "the headline this round" },
{ name: "03_notepat", marker: "on the keyboard side" },
{ name: "04_audio", marker: "underneath the hood" },
{ name: "05_native", marker: "on the native side" },
// Whisper merges "say piece" into one word "saypiece" — anchor on
// the next clean phrase. The displayed subtitle is fixed back to
// "say piece" via transcriptFixes.
{ name: "06_say", marker: "logs every utterance" },
// Whisper hears "paper's pipeline"; the apostrophe splits the token,
// so anchor on the next clean phrase instead.
{ name: "07_papers", marker: "grew around penrose" },
{ name: "08_oven", marker: "through it all" },
{ name: "09_outro", marker: "thanks for watching" },
{ name: "10_end", marker: "__END__", trailingSilenceSec: 3 },
],
slides: {
"01_title": `
aesthetic computer
recap
the last 48 hours
2026·04·26 → 2026·04·28
`,
"02_yergersnap": {
queries: {
icon: { glob: "slab/yergersnap/icon.iconset/icon_512x512.png" },
commits: { commits: "yergersnap|MirrorTap|iphone-mirror-tap", since: "48 hours ago", limit: 5 },
},
body: ({ icon, commits }) => `
01 / 08 · yergersnap
${icon ? `

` : ""}
yergersnap
a mac menubar app that snaps your
iphone screen into a paintable canvas.
${(commits || []).map((c) => `
${c.hash.slice(0, 4)}${(c.subject.split(":").slice(1).join(":").trim() || c.subject).slice(0, 60)}
`).join("")}
"icon painted by julia yerger."
`,
},
"03_notepat": {
queries: {
icon: { glob: "ac-electron/build/icon.png" },
paper: { glob: "system/public/papers.aesthetic.computer/notepat-26-arxiv-cards.pdf", pdfPage: 1, pdfWidth: 600 },
commits: { commits: "^notepat|Piano Man|Sample Sally|piano-man|sample-sally", since: "48 hours ago", limit: 5 },
},
body: ({ icon, paper, commits }) => `
02 / 08 · notepat
${icon ? `

` : ""}
two new bandmates
piano man and sample sally —
eye-tracking pupils follow your notes.
${(commits || []).map((c) => `
${c.hash.slice(0, 4)}${(c.subject.split(":").slice(1).join(":").trim() || c.subject).slice(0, 56)}
`).join("")}
${paper ? `

` : ""}
`,
},
"04_audio": {
queries: {
commits: { commits: "Salamander|Karplus|piano sample|piano:|^audio:|piano rewrite", since: "48 hours ago", limit: 5 },
},
body: ({ commits }) => `
03 / 08 · audio
chords that breathe
karplus-strong synthesis →
salamander grand piano sample bank.
${(commits || []).map((c) => `
${c.hash.slice(0, 4)}${(c.subject.split(":").slice(1).join(":").trim() || c.subject).slice(0, 60)}
`).join("")}
`,
},
"05_native": {
queries: {
commits: { commits: "bootpics|^ac-native|^fedac/native|^ac-os|ac-device|ac-inscribe", since: "48 hours ago", limit: 6 },
},
body: ({ commits }) => `
04 / 08 · ac-os
bootpics
webcam snapshots at boot + shutdown —
a tiny diary of every session.
${(commits || []).map((c) => `
${c.hash.slice(0, 4)}${(c.subject.split(":").slice(1).join(":").trim() || c.subject).slice(0, 60)}
`).join("")}
`,
},
"06_say": {
queries: {
commits: { commits: "say:|sayings|backfill-sayings|^system/say", since: "48 hours ago", limit: 5 },
},
body: ({ commits }) => `
05 / 08 · say
every utterance, logged
the say piece now writes each line
to a mongo collection — replayable.
${(commits || []).map((c) => `
${c.hash.slice(0, 4)}${(c.subject.split(":").slice(1).join(":").trim() || c.subject).slice(0, 60)}
`).join("")}
`,
},
"07_papers": {
queries: {
commits: { commits: "penrose|arxiv-penrose", since: "48 hours ago", limit: 4 },
},
body: ({ commits }) => `
06 / 08 · papers
penrose pipeline
constraint-based diagrams,
compiled into academic figures.
arxiv-penrose
declarative figure pipeline
tex · references · ac-paper-layout
${(commits || []).map((c) => `
${c.hash.slice(0, 4)}${(c.subject.split(":").slice(1).join(":").trim() || c.subject).slice(0, 60)}
`).join("")}
`,
},
"08_oven": {
queries: {
ovenCommits: { commits: "oven", since: "48 hours ago", limit: 6 },
recentPdfs: { files: "system/public/papers.aesthetic.computer/*.pdf", sinceHours: 48, limit: 60 },
},
body: ({ ovenCommits, recentPdfs }) => {
const stems = new Set();
for (const p of recentPdfs || []) {
stems.add(p.split("/").pop().replace(/-26-arxiv(-cards|-da|-es|-zh|-ja)?\.pdf$/, ""));
}
const distinct = [...stems];
return `
07 / 08 · oven
papers, baking
${distinct.length} distinct papers refreshed,
${(recentPdfs || []).length} files in 48 hrs.
${(ovenCommits || []).slice(0, 4).map((c) => `
${c.hash.slice(0, 4)} ${c.subject.replace(/^\[?papers\]?[\s:]*/i, "").slice(0, 60)}
`).join("")}
${distinct.slice(0, 12).map((s) => `
${s.replace(/-/g, " ")}
`).join("")}
`;
},
},
"09_outro": `
08 / 08 · outro
that's the week.
thanks for watching.
aesthetic.computer
`,
"10_end": `
aesthetic·computer
narrated by jeffrey-pvc · @jeffrey
2026·04·28
`,
},
};
export default audience;