# Demo video — recording walkthrough & talk track The end-to-end runbook for recording the public demo video: environment prep, the shot-by-shot walkthrough with the exact talk track, and *why each line is worded the way it is*. The compact storyboard lives in [demo-script.md](./demo-script.md); this document is the operator's guide for actually producing it for a general-public audience (the hackathon Submission-tab finale is replaced with a public closer). ## Decisions baked into this walkthrough - **Backend: the live GPU Space.** Record against the real model — streaming output, real extraction, working vision. Never record stub mode (`USE_STUB_EXTRACTOR=1` output is visibly fake and vision is disabled). - **Calendar: a brand-new demo Google account** (e.g. `offgridschedula.demo@`), not a personal calendar. Zero PII can appear on camera — no real events, no real email in the OAuth chrome — and the calendar is seeded with exactly the event that produces the on-screen conflict. - **The on-camera "event lands in the calendar" moment uses .ics import**, not a server-side OAuth push. `credentials.json`/`token.json` must never live on the public Space; importing the downloaded .ics into the demo account's Google Calendar shows the same payoff with zero server credentials. (An optional locally-recorded one-click-push splice is described at the end.) ## Part A — Prep (before recording day) ### A1. Demo Google account 1. Create the account; set a neutral profile name ("OffGrid Demo"). 2. In its Google Calendar (local timezone), seed **one clashing event**: `Dentist — Tuesday 5:00 PM`. It collides with "practice moved to Tuesday 5pm" in the UI's built-in sample thread, which is what makes the ⚠️ conflict badge fire on camera. Add 1–2 filler events so the calendar looks lived-in. 3. Export the calendar (Settings → Import & export → Export) and save the unzipped file as `demo-existing-calendar.ics` — this gets uploaded in the UI. ### A2. Assets - **Flyer image** for the vision shot: a simple school-event flyer (title, date, time, place) as PNG/JPEG — *not HEIC* (the vision pipeline can't decode it), under 4 MB. - **Staged iMessage chat** for the opening phone shot: stage a group chat with demo contacts containing the storyboard lines ("Picture day Thursday 9am", "practice moved to Tuesday 5", "RSVP by Friday") and screen-record it scrolling. Never show a real chat. ### A3. Space 1. Put the Docker Space on a GPU tier (T4 is enough for E4B) and **restart it** — restarting also clears `/tmp`, so no previously-ingested feed data is visible anywhere in the UI. 2. Confirm `USE_STUB_EXTRACTOR` is unset and `MMPROJ_FILE` is set (vision). 3. Dry-run after llama-server health is green: sample thread → real streamed output; upload `demo-existing-calendar.ics` → conflict badge; flyer → event from image. 4. Relative dates resolve from the **server clock (UTC)** — check the dry-run dates land on the expected weekdays and adjust the seeded Dentist event if needed. ### A4. Recording - 1080p+ screen capture (QuickTime / OBS) in a **clean browser profile** logged into the demo Google account only. - Record the voiceover separately after screen capture — cleaner than narrating live, and the talk track below is written to be read. ## Part B — Shot list with talk track | # | Time | Screen | Action | Talk track | |---|------|--------|--------|------------| | 1 | 0:00–0:08 | iPhone clip | Staged class group chat scrolls past | "Every parent knows this chat. The dates are in here — and they're easy to miss." | | 2 | 0:08–0:20 | Browser | Open the Space; hero + badges visible; zoom the 🔒 badge | "OffGridSchedula. No app, no account — a small model runs right in the Space. No cloud APIs anywhere: that's the **Off the Grid** quest — local-first, the whole thing runs on the model in front of you." | | 3 | 0:20–0:34 | Schedule flow | Upload `demo-existing-calendar.ics` first, then tap **Try a sample**; thinking panel streams; flash the model card link | "Paste the chat. The model reading it is **Well-Tuned** — our own fine-tune of Gemma, published on Hugging Face with its eval scorecard — and it runs through the llama.cpp runtime: **Llama Champion**." | | 4 | 0:34–0:48 | Results | Event cards appear; ⚠️ conflict vs Dentist; free-slot chips | "It pulls out the events, checks your calendar, and catches the clash — before anything is saved." | | 5 | 0:48–0:58 | Vision | Start over → drop in the flyer PNG → event extracted from the image | "A flyer or screenshot works too — the same local model reads the date, time and place right off the picture." | | 6 | 0:58–1:10 | Export | Copy the drafted reply; **Download .ics**; switch tabs and import it into the demo Google Calendar — events appear on the grid | "It drafts the reply, and the events drop straight into your calendar — Google, Apple, anything that takes a .ics." | | 7 | 1:10–1:22 | Activity | Activity tab's live pipeline; click **share trace**; the public dataset page flashes | "Every agent run is observable — and one click publishes a redacted trace to a public Hub dataset for anyone to learn from. That's **Sharing is Caring**: the open trace quest." | | 8 | 1:22–1:35 | Closer | Slow pan over the custom landing page → end card with the Space URL | "And everything you've watched — the hero, the cards, that dashboard — is a custom frontend pushed far past the default Gradio look: **Off-Brand**. Open source, runs locally, your messages never leave the machine. Try it free — link below." | Tip for shot 6: pre-open the demo calendar's import dialog in a second tab so the on-camera import is two clicks. Tip for shot 7: have the `ParetoOptimal/offgridschedula-traces` dataset page pre-loaded in a tab so the "published" beat is one cut, not a page load. ## Why the talk track is worded this way - **Shot 1 names the pain before the product.** "Every parent knows this chat" earns the next 60 seconds from a general audience that has never heard of local LLMs — the hook is the missed pickup, not the model. - **The bonus quests are named out loud, verbatim, at their evidence moments.** This track serves two audiences at once: the public hook stays in shots 1 and 4–6, while the field guide's quest names — **Off the Grid** (local-first, no cloud APIs), **Well-Tuned** (published fine-tune), **Llama Champion** (llama.cpp runtime), **Sharing is Caring** (open trace on the Hub), and **Off-Brand** (custom UI past stock Gradio) — are each spoken exactly when the screen shows the proof. Judges score the video against those names; making them explicit means no claimed quest can be missed on a single watch. (The sixth claimed quest, **Field Notes**, is print, not screen — it lives on the end card and in the README, not the voiceover.) - **Shot 2 still kills the two adoption objections immediately** ("no app, no account") before the first quest callout — the badge language is framed as a plain-English promise ("the whole thing runs on the model in front of you"), so the callout lands for laypeople too. - **Shot 4's "before anything is saved"** is the trust beat — the agent proposes, the human disposes. This line pre-empts the "AI touched my calendar" fear that kills scheduling tools. - **Shot 6 generalizes the payoff** ("Google, Apple, anything that takes a .ics") so the demo doesn't read as Google-only — and the on-screen action matches the off-grid story: a local file the user chooses to import. - **Shot 8 closes on the three-word value stack** — open source, local, private — and a single call to action, with the Off-Brand callout folded into the visual it describes. People remember one URL and one feeling. ## Part C — Edit & publish - Assemble: phone clip → screen capture → end card. Speed-ramp model wait time but keep ~2 s of genuine streaming so it reads as live. - Burn in captions (most social viewers watch muted). Export 1920×1080; optionally a 1080×1920 vertical crop of shots 3–6 for Shorts/Reels. - Pair with the draft copy in [social-post.md](./social-post.md); link the video from the README (Build Small hard rule #3). - **Pause or downgrade the GPU Space after recording** unless the closer is meant to drive live traffic. ## Optional: one-click Google Calendar push splice To show the actual **Add to Google Calendar** button instead of the .ics import: run the app locally, complete the one-time OAuth flow as the *demo* account to mint a local `token.json`, enable the toggle, and record just that click — the UI is pixel-identical and splices cleanly. Never upload `credentials.json`/`token.json` to the public Space.