No description
  • TypeScript 96.2%
  • CSS 2.1%
  • JavaScript 1.6%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Morten Olsen 225ad89475
All checks were successful
ci/woodpecker/push/compliance Pipeline was successful
ci/woodpecker/push/quality Pipeline was successful
ci/woodpecker/push/deploy Pipeline was successful
add a readme hero shot: a slide the agent drew of itself drawing
2026-09-03 19:11:02 +02:00
.codex update 2026-09-02 21:33:05 +02:00
.impeccable add CLI 2026-09-03 12:19:06 +02:00
.woodpecker add CLI 2026-09-03 12:19:06 +02:00
apps fix meeting-audio deafness after TTS; add a live voice-mute toggle 2026-09-03 18:55:17 +02:00
docs add a readme hero shot: a slide the agent drew of itself drawing 2026-09-03 19:11:02 +02:00
packages fix meeting-audio deafness after TTS; add a live voice-mute toggle 2026-09-03 18:55:17 +02:00
skills/lazysketch add CLI 2026-09-03 12:19:06 +02:00
.gitignore add CLI 2026-09-03 12:19:06 +02:00
.prettierignore add CLI 2026-09-03 12:19:06 +02:00
.prettierrc init 2026-09-02 19:34:46 +02:00
CLAUDE.md add CLI 2026-09-03 12:19:06 +02:00
DESIGN.md more fun 2026-09-03 10:37:13 +02:00
eslint.config.mjs add CLI 2026-09-03 12:19:06 +02:00
mise.toml init 2026-09-02 19:34:46 +02:00
package.json add CLI 2026-09-03 12:19:06 +02:00
pnpm-lock.yaml add CLI 2026-09-03 12:19:06 +02:00
pnpm-workspace.yaml add CLI 2026-09-03 12:19:06 +02:00
PRODUCT.md update 2026-09-02 21:33:05 +02:00
README.md add a readme hero shot: a slide the agent drew of itself drawing 2026-09-03 19:11:02 +02:00
renovate.json update 2026-09-02 21:33:05 +02:00
Taskfile.yml add CLI 2026-09-03 12:19:06 +02:00
tsconfig.json add CLI 2026-09-03 12:19:06 +02:00
vitest.config.ts add CLI 2026-09-03 12:19:06 +02:00

lazysketch

Slides sketched live off your voice. You talk; a small, fast LLM listens to your live transcript and draws the deck while you speak — hand-sketched diagrams, bullets, code blocks, the occasional rubber-duck stamp — on lamp-lit paper, like an overhead projector that grew an opinion.

Try it: https://lazysketch.mortenolsen.pro

A slide titled "This slide is drawing itself": a hand-sketched pipeline diagram (Presenter → Mic → Whisper → Artist (LLM) → This Slide, with a dashed "planned" Audience), a big highlighted "~3 seconds" stat, and a rubber duck stamp

The agent drew this one itself, live, off a scripted run of exactly the talk you'd expect — duck requested by voice.

Fair warning: this is a quirky side project built for the wow effect of a deck drawing itself mid-talk. If you want AI to help you make actual presentations, there is real software for that. If you want to say "watch this" and then just… talk — welcome.

What you need

  • A Chromium-ish browser (Chrome/Edge/Firefox). Speech models (Whisper for ears, Kokoro for a voice) run on-device in workers — a laptop with WebGPU makes them happy.
  • An OpenAI-compatible endpoint of your own (OpenAI, Groq, Ollama, a LiteLLM proxy, …). Nothing is baked in; your key never leaves the browser except to the endpoint you name. A Haiku-class model is the sweet spot — small and fast beats big and slow here.

Everything is client-side: no backend, no account, your presentations live in your browser (IndexedDB), with export/import if you want to move them.

Quick start

  1. Open the app → Settings → set base URL + model (+ key), hit Save & preload models.
  2. Start a fresh sheet, paste in a talk outline as a cue file — it helps the model far more than you'd expect.
  3. Go live, open the mic, and start talking. The deck follows. When you stop, the session is recorded — replay it, scrub it, or resume for Q&A.

No mic handy? Rehearse from a script feeds prepared text through the exact same pipeline, at reading pace or as fast as the agent can draw.

The CLI (optional, unpublished)

There's a lazysketch CLI so a coding agent (or you) can prime presentations from the terminal: author the sheet and cue files as plain files, sync them into the browser, run a scripted test session there — using the browser's LLM settings, credentials never touch the CLI — and get an eval report of what the agent drew.

It isn't on a registry yet, so it's clone-and-link:

git clone https://code.olsen.cloud/incubator/lazysketch.git && cd lazysketch
mise install     # Node 24 + task (or bring your own)
task install && task build
cd apps/cli && pnpm link --global
lazysketch --help

Then in the app: Settings → CLI access → Enable, run the pairing command it shows you once, and you're connected (lazysketch status). The loop is init/pull → edit files → pushrun --script talk.txtreportopen --replay. Agents can learn it from the skill in skills/lazysketch. (Safari blocks the localhost bridge; use Chrome or Firefox for this part.)

Honest small print

  • Latency is the whole game: with a good endpoint the deck trails you by a few seconds (there's a lag gauge — grease pencil, of course). With a slow model it trails you by an awkward silence.
  • The agent sometimes draws the wrong thing, rewrites a block five times, or celebrates prematurely with confetti. This is considered part of the charm.
  • Curious how it works? docs/design.md covers the transcript pipeline, the event-sourced deck, and the CLI bridge; DESIGN.md is the paper-world design system.