Hero demo: scenario, narration, and shot-list
TL;DR. The README hero shows the two-audience loop in ~30 seconds of real screen capture: type a line into the Obsidian vault → trip2g-sync pushes it → the browser refresh shows it live on the site → an MCP search in a terminal returns the same fresh section to an agent. Narrated MP4 (docs/demo-video/hero-narrated.mp4, 30.5s, 1.35 MB) for the landing page/social; silent loop GIF (docs/demo-video/hero.gif, 20s, 1000px, 0.73 MB) for the README. Reproducer: autoproducer/scripts/hero/run-all.sh. Every pixel is the real product — no mockups (launch kit §4.2 honesty rule).
The one-loop story
One markdown vault, served two ways. A human edits in Obsidian; the page is live on the website in about a second; an AI agent reads the same note over MCP. Grounded in 2026-07-02_launch_kit.md §4.2 storyboard.
Screen setup (all real, on Xvfb :99, 1920×1080, dwm tiling)
| Window | What it is | Honesty note |
|---|---|---|
| Left (master, 60%) | Obsidian 1.12.7 (the real AppImage, second isolated instance, XDG_CONFIG_HOME scratch) with the real docs/ vault open, note demo/hello-agents.md |
Restricted Mode, so the vault's sync plugin doesn't double-run next to the user's live instance; sync is done by the product's own obsidian-sync CLI |
| Top right | Chromium at http://localhost:8081/demo/hello_agents — the local make air trip2g instance rendering the synced vault |
real server, real page, real refresh |
| Bottom right | xterm with two thin wrappers on PATH: trip2g-sync (runs the real obsidian-sync/trip2g-sync.mjs push, output shown verbatim, debug line filtered) and trip2g-mcp (curl JSON-RPC to the real /_system/mcp endpoint, prints the result text verbatim) |
wrappers only shorten the command line; nothing on screen is synthesized |
Narration (ElevenLabs, eleven_multilingual_v2, voice from instagen .env; 27.66s)
One Obsidian vault, published two ways. Watch: I type a line into a note, save, and the sync CLI pushes it to my self-hosted trip2g server. One second later, it is live on the website. Same text, real page. And AI agents read the same source over MCP: search returns the exact section, a few hundred tokens, not the whole vault. One vault. A website for humans, context for agents. trip2g.
Beat sheet (times = seconds on the VO clock; the audio is the clock)
| t (s) | VO says | On screen (exact commands) |
|---|---|---|
| 0.0–3.0 | "One Obsidian vault, published two ways. Watch:" | static tiled scene, Obsidian focused, caret at end of note |
| 3.0–5.8 | "I type a line into a note" | xdotool type (38 ms/char): newline, ## Fresh from the vault, newline, This line reached the web in about a second. |
| 5.9 | "save" (word at 4.50; action lands ≤1.5s after) | xdotool key ctrl+s |
| 6.3–9.5 | "the sync CLI pushes it to my self-hosted trip2g server" ("pushes" at 6.72) | focus terminal; type trip2g-sync ⏎ at 7.2 → real push output: Executing sync… / ✅ Pushed 1 notes |
| 9.8–13.9 | "One second later, it is live on the website. Same text, real page." (at 9.96) | focus browser; F5 at 10.3; Down×3 at 11.4 reveals Fresh from the vault on the live page |
| 14.0–21.5 | "AI agents read the same source over MCP: search returns the exact section…" ("search returns" at 17.91) | focus terminal; type trip2g-mcp search 'fresh from the vault' ⏎ at 15.9 → real MCP result: title, demo/hello-agents.md, URL, snippet containing the fresh line, match_id |
| 22.4–27.7 | "One vault. A website for humans, context for agents. trip2g." | focus browser on the fresh section; hold |
| 27.7–29.3 | (silence) | tail hold, then cut |
Word timings come from the ElevenLabs with-timestamps alignment (autoproducer/scripts/hero/vo-align.json); the driver (record.mjs) schedules each beat against wall-clock t0 written to t0.txt, and the montage computes the exact audio offset from the recording's wallclock start (ffprobe start_time), so VO-to-action sync is deterministic.
Cuts
- Narrated MP4 (primary, landing/social): full take + VO, 1920×1080, 30.5s, 1.35 MB.
docs/demo-video/hero-narrated.mp4 - README loop GIF (silent): VO-seconds ≈2.3→22.7 — typing → sync → live refresh → MCP result — 20s, 15 fps, 1000px, 0.73 MB (≤5 MB budget).
docs/demo-video/hero.gif - Raw capture:
docs/demo-video/hero-raw.mkv; VO track:docs/demo-video/hero-vo.mp3.
Reproduce
# once: local instance on :8081 (make air), dev minio up, VO generated (vo.mjs)
TRIP2G_API_KEY=<key> /home/alexes/projects2/autoproducer/scripts/hero/run-all.sh /tmp/hero-out
run-all.sh = stage up (Xvfb+dwm via autoproducer) → reset note + push → launch/arrange the three real apps → timed take (record.mjs) → mux VO → cut GIF. First Obsidian launch shows the vault-trust dialog once: pick "Browse vault in Restricted Mode".
Known blemishes (accepted)
- dwm top bar (tags +
dwm-6.2) is visible — honest dev-rig framing, not product chrome. - The demo note
docs/demo/hello-agents.mdstays in the vault (base content,free: true); the take appends the "Fresh from the vault" section and the reproducer resets it. - Obsidian shows the Properties block (frontmatter) — authentic, kept.